diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 3ba13e0cec6cb..26cd65aa8c3e8 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1 +1,17 @@
blank_issues_enabled: false
+contact_links:
+ - name: Discussions
+ url: https://github.com/FreeTubeApp/FreeTube/discussions/categories/general
+ about: View discussions or start one yourself
+ - name: Questions
+ url: https://github.com/FreeTubeApp/FreeTube/discussions/categories/q-a
+ about: Ask and answer questions
+ - name: Matrix Community
+ url: https://matrix.to/#/+freetube:matrix.org
+ about: Join our Matrix chatroom - "Note: Bugs and Feature requests should be made on GitHub and not in the Matrix room"
+ - name: Translate FreeTube
+ url: https://hosted.weblate.org/engage/free-tube/
+ about: Help translate FreeTube on Weblate
+ - name: FreeTube Documentation
+ url: https://docs.freetubeapp.io/
+ about: View the Documentation to find all relevant information about FreeTube
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 63a54a471c7c6..569ded4476692 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -108,91 +108,91 @@ jobs:
run: yarn run build:arm64
- name: Upload Linux .zip x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_x64
path: build/freetube-${{ steps.versionNumber.outputs.result }}.zip
- name: Upload Linux .7z x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_x64.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}.7z
- name: Upload Linux .zip ARMv7l Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_armv7l
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.zip
- name: Upload Linux .7z ARMv7l Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_armv7l.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.7z
- name: Upload Linux .zip ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_arm64
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.zip
- name: Upload Linux .7z ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_linux_portable_arm64.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.7z
- name: Upload .deb x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_amd64.deb
- name: Upload .deb ARMv7l Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_armv7l.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_armv7l.deb
- name: Upload .deb ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_arm64.deb
path: build/freetube_${{ steps.versionNumber.outputs.result }}_arm64.deb
- name: Upload AppImage x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}.AppImage
- name: Upload AppImage ARMv7l Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_armv7l.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}-armv7l.AppImage
- name: Upload AppImage ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_arm64.AppImage
path: build/FreeTube-${{ steps.versionNumber.outputs.result }}-arm64.AppImage
- name: Upload .rpm x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.rpm
@@ -201,133 +201,133 @@ jobs:
# rpm are not built for armv7l
- name: Upload .rpm ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_arm64.rpm
path: build/freetube-${{ steps.versionNumber.outputs.result }}.aarch64.rpm
- name: Upload Alpine .apk x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_alpine_amd64.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}.apk
- name: Upload Alpine .apk ARMv7l Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-armv7l')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_alpine_armv7l.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}-armv7l.apk
- name: Upload Alpine .apk ARM64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-arm64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_alpine_arm64.apk
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.apk
- name: Upload Pacman .pacman x64 Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
with:
name: freetube_${{ steps.versionNumber.outputs.result }}_amd64.pacman
path: build/freetube-${{ steps.versionNumber.outputs.result }}.pacman
# - name: Upload Web Build
- # uses: actions/upload-artifact@v3
+ # uses: actions/upload-artifact@v4
# if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.runtime, 'linux-x64')
# with:
# name: freetube_${{ steps.versionNumber.outputs.result }}_static_web
# path: dist/web
- name: Upload Windows x64 .exe Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-setup-x64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows arm64 .exe Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-setup-arm64.exe
path: build/freetube Setup ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows x64 .zip Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-x64-portable
path: build/freetube-${{ steps.versionNumber.outputs.result }}-win.zip
- name: Upload Windows x64 .7z Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-x64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-win.7z
- name: Upload Windows arm64 .zip Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-arm64-portable
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64-win.zip
- name: Upload Windows arm64 .7z Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-win-arm64-portable.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64-win.7z
- name: Upload Windows x64 Portable Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-portable-x64.exe
path: build/freetube ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Windows arm64 Portable Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'windows') && startsWith(matrix.runtime, 'win-arm64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-portable-arm64.exe
path: build/freetube ${{ steps.versionNumber.outputs.result }}.exe
- name: Upload Mac x64 .dmg Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.dmg
path: build/freetube-${{ steps.versionNumber.outputs.result }}.dmg
# - name: Upload Mac arm64 .dmg Artifact
-# uses: actions/upload-artifact@v3
+# uses: actions/upload-artifact@v4
# if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
# with:
# name: freetube-${{ steps.versionNumber.outputs.result }}-mac-arm64.dmg
# path: build/freetube-${{ steps.versionNumber.outputs.result }}-arm64.dmg
- name: Upload Mac x64 .zip Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.zip
path: build/freetube-${{ steps.versionNumber.outputs.result }}-mac.zip
- name: Upload Mac x64 .7z Artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-x64')
with:
name: freetube-${{ steps.versionNumber.outputs.result }}-mac-x64.7z
path: build/freetube-${{ steps.versionNumber.outputs.result }}-mac.7z
# - name: Upload Mac arm64 .zip Artifact
-# uses: actions/upload-artifact@v3
+# uses: actions/upload-artifact@v4
# if: startsWith(matrix.os, 'macos') && startsWith(matrix.runtime, 'osx-arm64')
# with:
# name: freetube-${{ steps.versionNumber.outputs.result }}-mac-arm64.zip
diff --git a/.github/workflows/calibreapp-image-actions.yml b/.github/workflows/calibreapp-image-actions.yml
index f94e1ac32c843..d336cad2328ab 100644
--- a/.github/workflows/calibreapp-image-actions.yml
+++ b/.github/workflows/calibreapp-image-actions.yml
@@ -20,7 +20,7 @@ jobs:
compressOnly: true
- name: Create New Pull Request If Needed
if: steps.calibre.outputs.markdown != ''
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v6
with:
title: Compressed Images Nightly
branch-suffix: timestamp
diff --git a/.github/workflows/label-issue.yml b/.github/workflows/label-issue.yml
index 46eed6d43bfae..24e42dc04f3c9 100644
--- a/.github/workflows/label-issue.yml
+++ b/.github/workflows/label-issue.yml
@@ -11,7 +11,7 @@ jobs:
triage:
runs-on: ubuntu-latest
steps:
- - uses: github/issue-labeler@v3.3
+ - uses: github/issue-labeler@v3.4
with:
configuration-path: .github/issue-labeler.yml
enable-versioned-regex: 0
diff --git a/_icons/iconNordicLightSmall.png b/_icons/iconNordicLightSmall.png
new file mode 100644
index 0000000000000..b5b83494c8e56
Binary files /dev/null and b/_icons/iconNordicLightSmall.png differ
diff --git a/_icons/textNordicLightSmall.png b/_icons/textNordicLightSmall.png
new file mode 100644
index 0000000000000..b23422a08c14f
Binary files /dev/null and b/_icons/textNordicLightSmall.png differ
diff --git a/_scripts/dev-runner.js b/_scripts/dev-runner.js
index d030c8b814035..0a4678040e19f 100644
--- a/_scripts/dev-runner.js
+++ b/_scripts/dev-runner.js
@@ -1,6 +1,5 @@
process.env.NODE_ENV = 'development'
-const open = require('open')
const electron = require('electron')
const webpack = require('webpack')
const WebpackDevServer = require('webpack-dev-server')
@@ -161,7 +160,8 @@ function startWeb (callback) {
if (!web) {
startRenderer(startMain)
} else {
- startWeb(({ port }) => {
+ startWeb(async ({ port }) => {
+ const open = (await import('open')).default
open(`http://localhost:${port}`)
})
}
diff --git a/_scripts/webpack.renderer.config.js b/_scripts/webpack.renderer.config.js
index 057be25f4a65b..5cb371e8a2437 100644
--- a/_scripts/webpack.renderer.config.js
+++ b/_scripts/webpack.renderer.config.js
@@ -1,5 +1,5 @@
const path = require('path')
-const { readFileSync } = require('fs')
+const { readFileSync, readdirSync } = require('fs')
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')
@@ -11,6 +11,8 @@ const CopyWebpackPlugin = require('copy-webpack-plugin')
const isDevMode = process.env.NODE_ENV === 'development'
+const { version: swiperVersion } = JSON.parse(readFileSync(path.join(__dirname, '../node_modules/swiper/package.json')))
+
const processLocalesPlugin = new ProcessLocalesPlugin({
compress: !isDevMode,
inputDir: path.join(__dirname, '../static/locales'),
@@ -117,7 +119,9 @@ const config = {
new webpack.DefinePlugin({
'process.env.IS_ELECTRON': true,
'process.env.IS_ELECTRON_MAIN': false,
- 'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames)
+ 'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
+ 'process.env.GEOLOCATION_NAMES': JSON.stringify(readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', ''))),
+ 'process.env.SWIPER_VERSION': `'${swiperVersion}'`
}),
new HtmlWebpackPlugin({
excludeChunks: ['processTaskWorker'],
@@ -136,7 +140,7 @@ const config = {
patterns: [
{
from: path.join(__dirname, '../node_modules/swiper/modules/{a11y,navigation,pagination}-element.css').replaceAll('\\', '/'),
- to: 'swiper.css',
+ to: `swiper-${swiperVersion}.css`,
context: path.join(__dirname, '../node_modules/swiper/modules'),
transformAll: (assets) => {
return Buffer.concat(assets.map(asset => asset.data))
diff --git a/_scripts/webpack.web.config.js b/_scripts/webpack.web.config.js
index 9dd0e20f1a22c..5113f06a7caed 100644
--- a/_scripts/webpack.web.config.js
+++ b/_scripts/webpack.web.config.js
@@ -11,6 +11,8 @@ const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
const isDevMode = process.env.NODE_ENV === 'development'
+const { version: swiperVersion } = JSON.parse(fs.readFileSync(path.join(__dirname, '../node_modules/swiper/package.json')))
+
const config = {
name: 'web',
mode: process.env.NODE_ENV,
@@ -114,6 +116,7 @@ const config = {
new webpack.DefinePlugin({
'process.env.IS_ELECTRON': false,
'process.env.IS_ELECTRON_MAIN': false,
+ 'process.env.SWIPER_VERSION': `'${swiperVersion}'`,
// video.js' vhs-utils supports both atob() in web browsers and Buffer in node
// As the FreeTube web build only runs in web browsers, we can override their check for atob() here: https://github.com/videojs/vhs-utils/blob/main/src/decode-b64-to-uint8-array.js#L3
@@ -145,7 +148,7 @@ const config = {
patterns: [
{
from: path.join(__dirname, '../node_modules/swiper/modules/{a11y,navigation,pagination}-element.css').replaceAll('\\', '/'),
- to: 'swiper.css',
+ to: `swiper-${swiperVersion}.css`,
context: path.join(__dirname, '../node_modules/swiper/modules'),
transformAll: (assets) => {
return Buffer.concat(assets.map(asset => asset.data))
diff --git a/jsconfig.json b/jsconfig.json
index 8f5ea8a228e3c..6efa53c23ad98 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -1,5 +1,8 @@
{
"vueCompilerOptions": {
"target": 2.7
+ },
+ "compilerOptions": {
+ "strictNullChecks": true
}
}
diff --git a/package.json b/package.json
index e0fe5fb099682..52472b28b3b6c 100644
--- a/package.json
+++ b/package.json
@@ -62,10 +62,10 @@
"autolinker": "^4.0.0",
"electron-context-menu": "^3.6.1",
"lodash.debounce": "^4.0.8",
- "marked": "^11.2.0",
+ "marked": "^12.0.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
- "swiper": "^11.0.5",
+ "swiper": "^11.0.7",
"video.js": "7.21.5",
"videojs-contrib-quality-levels": "^3.0.0",
"videojs-http-source-selector": "^1.1.6",
@@ -77,21 +77,21 @@
"vue-observe-visibility": "^1.0.0",
"vue-router": "^3.6.5",
"vuex": "^3.6.2",
- "youtubei.js": "^8.2.0"
+ "youtubei.js": "^9.1.0"
},
"devDependencies": {
- "@babel/core": "^7.23.9",
- "@babel/eslint-parser": "^7.23.9",
+ "@babel/core": "^7.24.0",
+ "@babel/eslint-parser": "^7.23.10",
"@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/preset-env": "^7.23.9",
- "@double-great/stylelint-a11y": "^3.0.0",
+ "@babel/preset-env": "^7.24.0",
+ "@double-great/stylelint-a11y": "^3.0.2",
"babel-loader": "^9.1.3",
"copy-webpack-plugin": "^12.0.2",
- "css-loader": "^6.9.1",
+ "css-loader": "^6.10.0",
"css-minimizer-webpack-plugin": "^6.0.0",
- "electron": "^28.2.0",
- "electron-builder": "^24.9.1",
- "eslint": "^8.56.0",
+ "electron": "^29.1.0",
+ "electron-builder": "^24.13.3",
+ "eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.29.1",
@@ -99,23 +99,23 @@
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-promise": "^6.1.1",
- "eslint-plugin-unicorn": "^50.0.1",
- "eslint-plugin-vue": "^9.20.1",
+ "eslint-plugin-unicorn": "^51.0.1",
+ "eslint-plugin-vue": "^9.22.0",
"eslint-plugin-vuejs-accessibility": "^2.2.1",
"eslint-plugin-yml": "^1.12.2",
"html-webpack-plugin": "^5.6.0",
"js-yaml": "^4.1.0",
"json-minimizer-webpack-plugin": "^5.0.0",
- "lefthook": "^1.6.1",
- "mini-css-extract-plugin": "^2.7.7",
+ "lefthook": "^1.6.4",
+ "mini-css-extract-plugin": "^2.8.1",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.33",
+ "postcss": "^8.4.35",
"postcss-scss": "^4.0.9",
"prettier": "^2.8.8",
"rimraf": "^5.0.5",
- "sass": "^1.70.0",
- "sass-loader": "^14.0.0",
- "stylelint": "^16.2.0",
+ "sass": "^1.71.1",
+ "sass-loader": "^14.1.1",
+ "stylelint": "^16.2.1",
"stylelint-config-sass-guidelines": "^11.0.0",
"stylelint-config-standard": "^36.0.0",
"stylelint-high-performance-animation": "^1.10.0",
@@ -124,9 +124,9 @@
"vue-devtools": "^5.1.4",
"vue-eslint-parser": "^9.4.2",
"vue-loader": "^15.10.0",
- "webpack": "^5.90.0",
+ "webpack": "^5.90.3",
"webpack-cli": "^5.1.4",
- "webpack-dev-server": "^4.15.1",
+ "webpack-dev-server": "^5.0.2",
"webpack-watch-external-files-plugin": "^3.0.0",
"yaml-eslint-parser": "^1.2.2"
}
diff --git a/src/main/index.js b/src/main/index.js
index 23b561cee10b4..f9c8fd7a901d5 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -64,7 +64,9 @@ function runApp() {
const path = urlParts[1]
if (path) {
- visible = ['/playlist', '/channel', '/watch'].some(p => path.startsWith(p))
+ visible = ['/channel', '/watch'].some(p => path.startsWith(p)) ||
+ // Only show copy link entry for non user playlists
+ (path.startsWith('/playlist') && !/playlistType=user/.test(path))
}
} else {
visible = true
@@ -103,17 +105,17 @@ function runApp() {
let url
if (toYouTube) {
- url = `https://youtu.be/${id}`
+ url = new URL(`https://youtu.be/${id}`)
} else {
- url = `https://redirect.invidious.io/watch?v=${id}`
+ url = new URL(`https://redirect.invidious.io/watch?v=${id}`)
}
if (query) {
const params = new URLSearchParams(query)
- const newParams = new URLSearchParams()
+ const newParams = new URLSearchParams(url.search)
let hasParams = false
- if (params.has('playlistId')) {
+ if (params.has('playlistId') && params.get('playlistType') !== 'user') {
newParams.set('list', params.get('playlistId'))
hasParams = true
}
@@ -124,11 +126,11 @@ function runApp() {
}
if (hasParams) {
- url += '?' + newParams.toString()
+ url.search = newParams.toString()
}
}
- return url
+ return url.toString()
}
}
}
@@ -493,6 +495,8 @@ function runApp() {
return '#ffd1dc'
case 'hot-pink':
return '#de1c85'
+ case 'nordic':
+ return '#2b2f3a'
case 'system':
default:
return nativeTheme.shouldUseDarkColors ? '#212121' : '#f1f1f1'
diff --git a/src/renderer/components/data-settings/data-settings.js b/src/renderer/components/data-settings/data-settings.js
index 4f036a9f8001d..f5ae352fc48f0 100644
--- a/src/renderer/components/data-settings/data-settings.js
+++ b/src/renderer/components/data-settings/data-settings.js
@@ -1133,7 +1133,7 @@ export default defineComponent({
})
if (process.env.IS_ELECTRON && this.backendFallback && this.backendPreference === 'invidious') {
- showToast(this.$t('Falling back to the local API'))
+ showToast(this.$t('Falling back to Local API'))
resolve(this.getChannelInfoLocal(channelId))
} else {
resolve([])
diff --git a/src/renderer/components/ft-age-restricted/ft-age-restricted.js b/src/renderer/components/ft-age-restricted/ft-age-restricted.js
index 7e925441b4650..c9cd917bc8e88 100644
--- a/src/renderer/components/ft-age-restricted/ft-age-restricted.js
+++ b/src/renderer/components/ft-age-restricted/ft-age-restricted.js
@@ -3,10 +3,14 @@ import { defineComponent } from 'vue'
export default defineComponent({
name: 'FtAgeRestricted',
props: {
- contentTypeString: {
- type: String,
- required: true
- }
+ isChannel: {
+ type: Boolean,
+ default: false,
+ },
+ isVideo: {
+ type: Boolean,
+ default: false,
+ },
},
computed: {
emoji: function () {
@@ -15,8 +19,11 @@ export default defineComponent({
},
restrictedMessage: function () {
- const contentType = this.$t('Age Restricted.Type.' + this.contentTypeString)
- return this.$t('Age Restricted.This {videoOrPlaylist} is age restricted', { videoOrPlaylist: contentType })
+ if (this.isChannel) {
+ return this.$t('Age Restricted.This channel is age restricted')
+ }
+
+ return this.$t('Age Restricted.This video is age restricted:')
}
}
})
diff --git a/src/renderer/components/ft-community-post/ft-community-post.js b/src/renderer/components/ft-community-post/ft-community-post.js
index 350eccc102020..6be036209b80e 100644
--- a/src/renderer/components/ft-community-post/ft-community-post.js
+++ b/src/renderer/components/ft-community-post/ft-community-post.js
@@ -40,7 +40,6 @@ export default defineComponent({
voteCount: '',
postContent: '',
commentCount: '',
- isLoading: true,
author: '',
authorId: '',
}
@@ -73,7 +72,7 @@ export default defineComponent({
injectStylesUrls: [
// This file is created with the copy webpack plugin in the web and renderer webpack configs.
// If you add more modules, please remember to add their CSS files to the list in webpack config files.
- createWebURL('/swiper.css')
+ createWebURL(`/swiper-${process.env.SWIPER_VERSION}.css`)
],
a11y: true,
@@ -132,7 +131,6 @@ export default defineComponent({
this.type = (this.data.postContent !== null && this.data.postContent !== undefined) ? this.data.postContent.type : 'text'
this.author = this.data.author
this.authorId = this.data.authorId
- this.isLoading = false
},
getBestQualityImage(imageArray) {
diff --git a/src/renderer/components/ft-community-post/ft-community-post.vue b/src/renderer/components/ft-community-post/ft-community-post.vue
index 053bd4c61a59d..f65e379e47824 100644
--- a/src/renderer/components/ft-community-post/ft-community-post.vue
+++ b/src/renderer/components/ft-community-post/ft-community-post.vue
@@ -1,6 +1,5 @@
{
+ return video.videoId === this.loneToBeAddedToPlaylistVideo.videoId
+ ? accumulator + 1
+ : accumulator
+ }, 0)
+ // Don't display zero value
+ return v === 0 ? null : v
+ },
+ loneVideoPresenceCountInPlaylistText() {
+ if (this.loneVideoPresenceCountInPlaylist == null) { return null }
+
+ return this.$tc('User Playlists.AddVideoPrompt.Added {count} Times', this.loneVideoPresenceCountInPlaylist, {
+ count: this.loneVideoPresenceCountInPlaylist,
+ })
+ },
+ videoPresenceCountInPlaylistTextVisible() {
+ if (!this.videoPresenceCountInPlaylistTextShouldBeVisible) { return false }
+
+ return this.loneVideoPresenceCountInPlaylistText != null
+ },
},
created: function () {
this.parseUserData()
},
methods: {
parseUserData: function () {
- this.title = this.data.playlistName
- if (this.data.videos.length > 0) {
- const thumbnailURL = `https://i.ytimg.com/vi/${this.data.videos[0].videoId}/mqdefault.jpg`
+ this.title = this.playlist.playlistName
+ if (this.playlist.videos.length > 0) {
+ const thumbnailURL = `https://i.ytimg.com/vi/${this.playlist.videos[0].videoId}/mqdefault.jpg`
if (this.backendPreference === 'invidious') {
this.thumbnail = thumbnailURL.replace('https://i.ytimg.com', this.currentInvidiousInstance)
} else {
this.thumbnail = thumbnailURL
}
}
- this.videoCount = this.data.videos.length
+ this.videoCount = this.playlist.videos.length
},
toggleSelection: function () {
this.$emit('selected', this.index)
},
+ onVisibilityChanged(visible) {
+ if (!visible) { return }
+
+ this.videoPresenceCountInPlaylistTextShouldBeVisible = true
+ },
+
...mapActions([
'openInExternalPlayer'
])
diff --git a/src/renderer/components/ft-playlist-selector/ft-playlist-selector.scss b/src/renderer/components/ft-playlist-selector/ft-playlist-selector.scss
index a90ee4aff8f60..f887a9962b92e 100644
--- a/src/renderer/components/ft-playlist-selector/ft-playlist-selector.scss
+++ b/src/renderer/components/ft-playlist-selector/ft-playlist-selector.scss
@@ -54,6 +54,10 @@
word-wrap: break-word;
word-break: break-word;
}
+
+ .videoPresenceCount {
+ margin-block-start: 4px;
+ }
}
&.grid {
diff --git a/src/renderer/components/ft-playlist-selector/ft-playlist-selector.vue b/src/renderer/components/ft-playlist-selector/ft-playlist-selector.vue
index aa63385fe781d..060043169c60f 100644
--- a/src/renderer/components/ft-playlist-selector/ft-playlist-selector.vue
+++ b/src/renderer/components/ft-playlist-selector/ft-playlist-selector.vue
@@ -29,12 +29,24 @@
-
-
+
{{ titleForDisplay }}
-
+
+
+ {{ loneVideoPresenceCountInPlaylistText }}
+
diff --git a/src/renderer/components/ft-timestamp-catcher/ft-timestamp-catcher.js b/src/renderer/components/ft-timestamp-catcher/ft-timestamp-catcher.js
index 940213031b0bc..1006ea5944499 100644
--- a/src/renderer/components/ft-timestamp-catcher/ft-timestamp-catcher.js
+++ b/src/renderer/components/ft-timestamp-catcher/ft-timestamp-catcher.js
@@ -9,18 +9,29 @@ export default defineComponent({
}
},
methods: {
- catchTimestampClick: function(event) {
- const match = event.detail.match(/(\d+):(\d+):?(\d+)?/)
- if (match[3] !== undefined) { // HH:MM:SS
- const seconds = 3600 * Number(match[1]) + 60 * Number(match[2]) + Number(match[3])
- this.$emit('timestamp-event', seconds)
- } else { // MM:SS
- const seconds = 60 * Number(match[1]) + Number(match[2])
- this.$emit('timestamp-event', seconds)
- }
+ catchTimestampClick: function (event) {
+ this.$emit('timestamp-event', event.detail)
},
detectTimestamps: function (input) {
- return input.replaceAll(/(\d+(:\d+)+)/g, '$1')
+ const videoId = this.$route.params.id
+
+ return input.replaceAll(/(?:(\d+):)?(\d+):(\d+)/g, (timestamp, hours, minutes, seconds) => {
+ let time = 60 * Number(minutes) + Number(seconds)
+
+ if (hours) {
+ time += 3600 * Number(hours)
+ }
+
+ const url = this.$router.resolve({
+ path: `/watch/${videoId}`,
+ query: {
+ timestamp: time
+ }
+ }).href
+
+ // Adding the URL lets the user open the video in a new window at this timestamp
+ return `${timestamp}`
+ })
}
}
})
diff --git a/src/renderer/components/playlist-info/playlist-info.js b/src/renderer/components/playlist-info/playlist-info.js
index 616a7d99bee8c..52d9198408e9d 100644
--- a/src/renderer/components/playlist-info/playlist-info.js
+++ b/src/renderer/components/playlist-info/playlist-info.js
@@ -5,10 +5,12 @@ import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
import FtIconButton from '../ft-icon-button/ft-icon-button.vue'
import FtInput from '../ft-input/ft-input.vue'
import FtPrompt from '../ft-prompt/ft-prompt.vue'
+import FtButton from '../ft-button/ft-button.vue'
import {
formatNumber,
showToast,
} from '../../helpers/utils'
+import debounce from 'lodash.debounce'
export default defineComponent({
name: 'PlaylistInfo',
@@ -18,6 +20,7 @@ export default defineComponent({
'ft-icon-button': FtIconButton,
'ft-input': FtInput,
'ft-prompt': FtPrompt,
+ 'ft-button': FtButton,
},
props: {
id: {
@@ -83,6 +86,9 @@ export default defineComponent({
},
data: function () {
return {
+ searchVideoMode: false,
+ query: '',
+ updateQueryDebounce: function() {},
editMode: false,
showDeletePlaylistPrompt: false,
showRemoveVideosOnWatchPrompt: false,
@@ -232,6 +238,8 @@ export default defineComponent({
created: function () {
this.newTitle = this.title
this.newDescription = this.description
+
+ this.updateQueryDebounce = debounce(this.updateQuery, 500)
},
methods: {
toggleCopyVideosPrompt: function (force = false) {
@@ -373,6 +381,30 @@ export default defineComponent({
showToast(this.$t('User Playlists.SinglePlaylistView.Toast.Quick bookmark disabled'))
},
+ updateQuery(query) {
+ this.query = query
+ this.$emit('search-video-query-change', query)
+ },
+ enableVideoSearchMode() {
+ this.searchVideoMode = true
+ this.$emit('search-video-mode-on')
+
+ nextTick(() => {
+ // Some elements only present after rendering update
+ this.$refs.searchInput.focus()
+ })
+ },
+ disableVideoSearchMode() {
+ this.searchVideoMode = false
+ this.updateQuery('')
+ this.$emit('search-video-mode-off')
+
+ nextTick(() => {
+ // Some elements only present after rendering update
+ this.$refs.enableSearchModeButton?.focus()
+ })
+ },
+
...mapActions([
'showAddToPlaylistPromptForManyVideos',
'updatePlaylist',
diff --git a/src/renderer/components/playlist-info/playlist-info.scss b/src/renderer/components/playlist-info/playlist-info.scss
index 3fb13c0c0fe8a..8bf11cf0882e4 100644
--- a/src/renderer/components/playlist-info/playlist-info.scss
+++ b/src/renderer/components/playlist-info/playlist-info.scss
@@ -72,3 +72,20 @@
column-gap: 8px;
justify-content: flex-end;
}
+
+.searchInputsRow {
+ margin-block-start: 8px;
+
+ display: grid;
+
+ /* 2 columns */
+ grid-template-columns: 1fr auto;
+ column-gap: 8px;
+}
+
+@media only screen and (max-width: 1250px) {
+ :deep(.sharePlaylistIcon .iconDropdown) {
+ inset-inline-start: auto;
+ inset-inline-end: auto;
+ }
+}
diff --git a/src/renderer/components/playlist-info/playlist-info.vue b/src/renderer/components/playlist-info/playlist-info.vue
index d5af7424e0b15..4f25a297a7754 100644
--- a/src/renderer/components/playlist-info/playlist-info.vue
+++ b/src/renderer/components/playlist-info/playlist-info.vue
@@ -76,6 +76,7 @@
+
@@ -186,6 +196,28 @@
@click="handleRemoveVideosOnWatchPromptAnswer"
/>
+
+
+ updateQueryDebounce(input)"
+ @clear="updateQueryDebounce('')"
+ />
+
+
diff --git a/src/renderer/components/side-nav-more-options/side-nav-more-options.vue b/src/renderer/components/side-nav-more-options/side-nav-more-options.vue
index 6541150f21a3f..07f17810e3a1a 100644
--- a/src/renderer/components/side-nav-more-options/side-nav-more-options.vue
+++ b/src/renderer/components/side-nav-more-options/side-nav-more-options.vue
@@ -44,6 +44,7 @@
/>
diff --git a/src/renderer/components/subscriptions-community/subscriptions-community.js b/src/renderer/components/subscriptions-community/subscriptions-community.js
index e975e97c79e62..38c804c865c01 100644
--- a/src/renderer/components/subscriptions-community/subscriptions-community.js
+++ b/src/renderer/components/subscriptions-community/subscriptions-community.js
@@ -200,7 +200,7 @@ export default defineComponent({
copyToClipboard(err)
})
if (process.env.IS_ELECTRON && this.backendPreference === 'invidious' && this.backendFallback) {
- showToast(this.$t('Falling back to the local API'))
+ showToast(this.$t('Falling back to Local API'))
resolve(this.getChannelPostsLocal(channel))
} else {
resolve([])
diff --git a/src/renderer/components/subscriptions-live/subscriptions-live.js b/src/renderer/components/subscriptions-live/subscriptions-live.js
index b9bd1ded3b8c2..ca227b271655b 100644
--- a/src/renderer/components/subscriptions-live/subscriptions-live.js
+++ b/src/renderer/components/subscriptions-live/subscriptions-live.js
@@ -282,7 +282,7 @@ export default defineComponent({
break
case 1:
if (process.env.IS_ELECTRON && this.backendFallback) {
- showToast(this.$t('Falling back to the local API'))
+ showToast(this.$t('Falling back to Local API'))
resolve(this.getChannelLiveLocal(channel, failedAttempts + 1))
} else {
resolve([])
@@ -321,7 +321,7 @@ export default defineComponent({
return this.getChannelLiveInvidious(channel, failedAttempts + 1)
case 1:
if (process.env.IS_ELECTRON && this.backendFallback) {
- showToast(this.$t('Falling back to the local API'))
+ showToast(this.$t('Falling back to Local API'))
return this.getChannelLiveLocalRSS(channel, failedAttempts + 1)
} else {
return []
diff --git a/src/renderer/components/subscriptions-shorts/subscriptions-shorts.js b/src/renderer/components/subscriptions-shorts/subscriptions-shorts.js
index 3bd7be4c049ec..def9312e2e954 100644
--- a/src/renderer/components/subscriptions-shorts/subscriptions-shorts.js
+++ b/src/renderer/components/subscriptions-shorts/subscriptions-shorts.js
@@ -213,7 +213,7 @@ export default defineComponent({
switch (failedAttempts) {
case 0:
if (process.env.IS_ELECTRON && this.backendFallback) {
- showToast(this.$t('Falling back to the local API'))
+ showToast(this.$t('Falling back to Local API'))
return this.getChannelShortsLocal(channel, failedAttempts + 1)
} else {
return []
diff --git a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
index 6980bcb8e58b9..27e98b30b8d96 100644
--- a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
+++ b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.js
@@ -110,7 +110,7 @@ export default defineComponent({
case 'r':
case 'R':
case 'F5':
- if (!this.isLoading) {
+ if (!this.isLoading && this.activeSubscriptionList.length > 0) {
this.$emit('refresh')
}
break
diff --git a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
index db03719e1a604..73d5f303b191b 100644
--- a/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
+++ b/src/renderer/components/subscriptions-tab-ui/subscriptions-tab-ui.vue
@@ -59,7 +59,7 @@
+
{{ chapter.timestamp }}
diff --git a/src/renderer/components/watch-video-comments/watch-video-comments.js b/src/renderer/components/watch-video-comments/watch-video-comments.js
index f4f4535440ae1..702a3f117aa89 100644
--- a/src/renderer/components/watch-video-comments/watch-video-comments.js
+++ b/src/renderer/components/watch-video-comments/watch-video-comments.js
@@ -298,7 +298,7 @@ export default defineComponent({
copyToClipboard(err)
})
if (process.env.IS_ELECTRON && this.backendFallback && this.backendPreference === 'invidious') {
- showToast(this.$t('Falling back to local API'))
+ showToast(this.$t('Falling back to Local API'))
this.getCommentDataLocal()
} else {
this.isLoading = false
diff --git a/src/renderer/components/watch-video-comments/watch-video-comments.vue b/src/renderer/components/watch-video-comments/watch-video-comments.vue
index f893a420628be..39518ec86fdca 100644
--- a/src/renderer/components/watch-video-comments/watch-video-comments.vue
+++ b/src/renderer/components/watch-video-comments/watch-video-comments.vue
@@ -268,7 +268,7 @@
v-else-if="showComments && !isLoading"
>
- {{ publishedString }} {{ dateString }} • {{ parsedViewCount }}
+ {{ publishedString }} {{ dateString }}
+
+ • {{ parsedViewCount }}
+
fetch(input, init),
cache,
- generate_session_locally: !!options.generateSessionLocally
+ generate_session_locally: !!generateSessionLocally
})
}
@@ -290,7 +290,9 @@ export async function getLocalChannelVideos(id) {
// if the channel doesn't have a videos tab, YouTube returns the home tab instead
// so we need to check that we got the right tab
if (videosTab.current_tab?.endpoint.metadata.url?.endsWith('/videos')) {
- return parseLocalChannelVideos(videosTab.videos, videosTab.header.author)
+ const { id: channelId = id, name } = parseLocalChannelHeader(videosTab)
+
+ return parseLocalChannelVideos(videosTab.videos, channelId, name)
} else {
return []
}
@@ -320,7 +322,9 @@ export async function getLocalChannelLiveStreams(id) {
// 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
if (liveStreamsTab.current_tab?.endpoint.metadata.url?.endsWith('/streams')) {
- return parseLocalChannelVideos(liveStreamsTab.videos, liveStreamsTab.header.author)
+ const { id: channelId = id, name } = parseLocalChannelHeader(liveStreamsTab)
+
+ return parseLocalChannelVideos(liveStreamsTab.videos, channelId, name)
} else {
return []
}
@@ -364,17 +368,159 @@ export async function getLocalChannelCommunity(id) {
}
}
+/**
+ * @param {YT.Channel} channel
+ */
+export function parseLocalChannelHeader(channel) {
+ /** @type {string=} */
+ let id
+ /** @type {string} */
+ let name
+ /** @type {string=} */
+ let thumbnailUrl
+ /** @type {string=} */
+ let bannerUrl
+ /** @type {string=} */
+ let subscriberText
+ /** @type {string[]} */
+ const tags = []
+
+ switch (channel.header.type) {
+ case 'C4TabbedHeader': {
+ // example: Linus Tech Tips
+ // https://www.youtube.com/channel/UCXuqSBlHAE6Xw-yeJA0Tunw
+
+ /**
+ * @type {import('youtubei.js').YTNodes.C4TabbedHeader}
+ */
+ const header = channel.header
+
+ id = header.author.id
+ name = header.author.name
+ thumbnailUrl = header.author.best_thumbnail.url
+ bannerUrl = header.banner?.[0]?.url
+ subscriberText = header.subscribers?.text
+ break
+ }
+ case 'CarouselHeader': {
+ // examples: Music and YouTube Gaming
+ // https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ
+ // https://www.youtube.com/channel/UCOpNcN46UbXVtpKMrmU4Abg
+
+ /**
+ * @type {import('youtubei.js').YTNodes.CarouselHeader}
+ */
+ const header = channel.header
+
+ /**
+ * @type {import('youtubei.js').YTNodes.TopicChannelDetails}
+ */
+ const topicChannelDetails = header.contents.find(node => node.type === 'TopicChannelDetails')
+ name = topicChannelDetails.title.text
+ subscriberText = topicChannelDetails.subtitle.text
+ thumbnailUrl = topicChannelDetails.avatar[0].url
+
+ if (channel.metadata.external_id) {
+ id = channel.metadata.external_id
+ } else {
+ id = topicChannelDetails.subscribe_button.channel_id
+ }
+ break
+ }
+ case 'InteractiveTabbedHeader': {
+ // example: Minecraft - Topic
+ // https://www.youtube.com/channel/UCQvWX73GQygcwXOTSf_VDVg
+
+ /**
+ * @type {import('youtubei.js').YTNodes.InteractiveTabbedHeader}
+ */
+ const header = channel.header
+ name = header.title.text
+ thumbnailUrl = header.box_art.at(-1).url
+ bannerUrl = header.banner[0]?.url
+
+ const badges = header.badges.map(badge => badge.label).filter(tag => tag)
+ tags.push(...badges)
+
+ id = channel.current_tab?.endpoint.payload.browseId
+ break
+ }
+ case 'PageHeader': {
+ // example: YouTube Gaming
+ // https://www.youtube.com/channel/UCOpNcN46UbXVtpKMrmU4Abg
+
+ // User channels (an A/B test at the time of writing)
+
+ /**
+ * @type {import('youtubei.js').YTNodes.PageHeader}
+ */
+ const header = channel.header
+
+ name = header.content.title.text.text
+ if (header.content.image) {
+ if (header.content.image.type === 'ContentPreviewImageView') {
+ /** @type {import('youtubei.js').YTNodes.ContentPreviewImageView} */
+ const image = header.content.image
+
+ thumbnailUrl = image.image[0].url
+ } else {
+ /** @type {import('youtubei.js').YTNodes.DecoratedAvatarView} */
+ const image = header.content.image
+ thumbnailUrl = image.avatar?.image[0].url
+ }
+ }
+
+ if (!thumbnailUrl && channel.metadata.thumbnail) {
+ thumbnailUrl = channel.metadata.thumbnail[0].url
+ }
+
+ if (header.content.banner) {
+ bannerUrl = header.content.banner.image[0]?.url
+ }
+
+ if (header.content.actions) {
+ const modal = header.content.actions.actions_rows[0].actions[0].on_tap.modal
+
+ if (modal && modal.type === 'ModalWithTitleAndButton') {
+ /** @type {import('youtubei.js').YTNodes.ModalWithTitleAndButton} */
+ const typedModal = modal
+
+ id = typedModal.button.endpoint.next_endpoint?.payload.browseId
+ }
+ } else if (channel.metadata.external_id) {
+ id = channel.metadata.external_id
+ }
+
+ if (header.content.metadata) {
+ subscriberText = header.content.metadata.metadata_rows[0].metadata_parts[1].text.text
+ }
+
+ break
+ }
+ }
+
+ return {
+ id,
+ name,
+ thumbnailUrl,
+ bannerUrl,
+ subscriberText,
+ tags
+ }
+}
+
/**
* @param {import('youtubei.js').YTNodes.Video[]} videos
- * @param {Misc.Author} author
+ * @param {string} channelId
+ * @param {string} channelName
*/
-export function parseLocalChannelVideos(videos, author) {
+export function parseLocalChannelVideos(videos, channelId, channelName) {
const parsedVideos = videos.map(parseLocalListVideo)
// fix empty author info
parsedVideos.forEach(video => {
- video.author = author.name
- video.authorId = author.id
+ video.author = channelName
+ video.authorId = channelId
})
return parsedVideos
@@ -382,17 +528,18 @@ export function parseLocalChannelVideos(videos, author) {
/**
* @param {import('youtubei.js').YTNodes.ReelItem[]} shorts
- * @param {Misc.Author} author
+ * @param {string} channelId
+ * @param {string} channelName
*/
-export function parseLocalChannelShorts(shorts, author) {
+export function parseLocalChannelShorts(shorts, channelId, channelName) {
return shorts.map(short => {
return {
type: 'video',
videoId: short.id,
title: short.title.text,
- author: author.name,
- authorId: author.id,
- viewCount: parseLocalSubscriberCount(short.views.text),
+ author: channelName,
+ authorId: channelId,
+ viewCount: short.views.isEmpty() ? null : parseLocalSubscriberCount(short.views.text),
lengthSeconds: ''
}
})
@@ -405,40 +552,43 @@ export function parseLocalChannelShorts(shorts, author) {
/**
* @param {Playlist|GridPlaylist} playlist
- * @param {Misc.Author} author
+ * @param {string} channelId
+ * @param {string} chanelName
*/
-export function parseLocalListPlaylist(playlist, author = undefined) {
- let channelName
- let channelId = null
- /** @type {import('youtubei.js').YTNodes.PlaylistVideoThumbnail} */
- const thumbnailRenderer = playlist.thumbnail_renderer
+export function parseLocalListPlaylist(playlist, channelId = undefined, channelName = undefined) {
+ let internalChannelName
+ let internalChannelId = null
+
if (playlist.author && playlist.author.id !== 'N/A') {
if (playlist.author instanceof Misc.Text) {
- channelName = playlist.author.text
+ internalChannelName = playlist.author.text
- if (author) {
- channelId = author.id
+ if (channelId) {
+ internalChannelId = channelId
}
} else {
- channelName = playlist.author.name
- channelId = playlist.author.id
+ internalChannelName = playlist.author.name
+ internalChannelId = playlist.author.id
}
- } else if (author) {
- channelName = author.name
- channelId = author.id
+ } else if (channelId || channelName) {
+ internalChannelName = channelName
+ internalChannelId = channelId
} else if (playlist.author?.name) {
// auto-generated album playlists don't have an author
// so in search results, the author text is "Playlist" and doesn't have a link or channel ID
- channelName = playlist.author.name
+ internalChannelName = playlist.author.name
}
+ /** @type {import('youtubei.js').YTNodes.PlaylistVideoThumbnail} */
+ const thumbnailRenderer = playlist.thumbnail_renderer
+
return {
type: 'playlist',
dataSource: 'local',
title: playlist.title.text,
thumbnail: thumbnailRenderer ? thumbnailRenderer.thumbnail[0].url : playlist.thumbnails[0].url,
- channelName,
- channelId,
+ channelName: internalChannelName,
+ channelId: internalChannelId,
playlistId: playlist.id,
videoCount: extractNumberFromString(playlist.video_count.text)
}
@@ -742,7 +892,7 @@ export function parseLocalTextRuns(runs, emojiSize = 16, options = { looseChanne
case 'WEB_PAGE_TYPE_CHANNEL': {
const trimmedText = text.trim()
// In comments, mention can be `@Channel Name` (not handle, but name)
- if (CHANNEL_HANDLE_REGEX.test(trimmedText) || (options.looseChannelNameDetection && trimmedText.startsWith('@'))) {
+ if (CHANNEL_HANDLE_REGEX.test(trimmedText) || options.looseChannelNameDetection) {
// Note that in regex `\s` must be used since the text contain non-default space (the half-width space char when we press spacebar)
const spacesBefore = (spacesBeforeRegex.exec(text) || [''])[0]
const spacesAfter = (spacesAfterRegex.exec(text) || [''])[0]
diff --git a/src/renderer/helpers/utils.js b/src/renderer/helpers/utils.js
index 0a4f3d5a8489e..4fde63b77c033 100644
--- a/src/renderer/helpers/utils.js
+++ b/src/renderer/helpers/utils.js
@@ -616,9 +616,10 @@ export function getVideoParamsFromUrl(url) {
/**
* This will match sequences of upper case characters and convert them into title cased words.
+ * This will also match excessive strings of punctionation and convert them to one representative character
* @param {string} title the title to process
* @param {number} minUpperCase the minimum number of consecutive upper case characters to match
- * @returns {string} the title with upper case characters removed
+ * @returns {string} the title with upper case characters removed and punctuation normalized
*/
export function toDistractionFreeTitle(title, minUpperCase = 3) {
const firstValidCharIndex = (word) => {
@@ -634,7 +635,10 @@ export function toDistractionFreeTitle(title, minUpperCase = 3) {
}
const reg = RegExp(`[\\p{Lu}|']{${minUpperCase},}`, 'ug')
- return title.replace(reg, x => capitalizedWord(x.toLowerCase()))
+ return title
+ .replaceAll(/!{2,}/g, '!')
+ .replaceAll(/[!?]{2,}/g, '?')
+ .replace(reg, x => capitalizedWord(x.toLowerCase()))
}
export function formatNumber(number, options = undefined) {
diff --git a/src/renderer/store/modules/invidious.js b/src/renderer/store/modules/invidious.js
index c104ccf09741b..b7b9aa41431f3 100644
--- a/src/renderer/store/modules/invidious.js
+++ b/src/renderer/store/modules/invidious.js
@@ -1,5 +1,4 @@
import fs from 'fs/promises'
-import { pathExists } from '../../helpers/filesystem'
import { createWebURL, fetchWithTimeout } from '../../helpers/utils'
const state = {
@@ -40,6 +39,7 @@ const actions = {
console.error(err)
}
}
+
// If the invidious instance fetch isn't returning anything interpretable
if (instances.length === 0) {
// Fallback: read from static file
@@ -47,15 +47,13 @@ const actions = {
/* eslint-disable-next-line n/no-path-concat */
const fileLocation = process.env.NODE_ENV === 'development' ? './static/' : `${__dirname}/static/`
const filePath = `${fileLocation}${fileName}`
- if (!process.env.IS_ELECTRON || await pathExists(filePath)) {
- console.warn('reading static file for invidious instances')
- const fileData = process.env.IS_ELECTRON ? await fs.readFile(filePath, 'utf8') : await (await fetch(createWebURL(filePath))).text()
- instances = JSON.parse(fileData).filter(e => {
- return process.env.IS_ELECTRON || e.cors
- }).map(e => {
- return e.url
- })
- }
+ console.warn('reading static file for invidious instances')
+ const fileData = process.env.IS_ELECTRON ? await fs.readFile(filePath, 'utf8') : await (await fetch(createWebURL(filePath))).text()
+ instances = JSON.parse(fileData).filter(e => {
+ return process.env.IS_ELECTRON || e.cors
+ }).map(e => {
+ return e.url
+ })
}
commit('setInvidiousInstancesList', instances)
},
diff --git a/src/renderer/store/modules/settings.js b/src/renderer/store/modules/settings.js
index 27c37dffd1d0d..9e561418c48b4 100644
--- a/src/renderer/store/modules/settings.js
+++ b/src/renderer/store/modules/settings.js
@@ -289,7 +289,7 @@ const state = {
videoPlaybackRateInterval: 0.25,
downloadAskPath: true,
downloadFolderPath: '',
- downloadBehavior: 'download',
+ downloadBehavior: 'open',
enableScreenshot: false,
screenshotFormat: 'png',
screenshotQuality: 95,
diff --git a/src/renderer/store/modules/subscriptions.js b/src/renderer/store/modules/subscriptions.js
index 76f34bcb993cb..c851684238731 100644
--- a/src/renderer/store/modules/subscriptions.js
+++ b/src/renderer/store/modules/subscriptions.js
@@ -54,6 +54,10 @@ const actions = {
commit('updateShortsCacheByChannel', payload)
},
+ updateSubscriptionShortsCacheWithChannelPageShorts: ({ commit }, payload) => {
+ commit('updateShortsCacheWithChannelPageShorts', payload)
+ },
+
updateSubscriptionLiveCacheByChannel: ({ commit }, payload) => {
commit('updateLiveCacheByChannel', payload)
},
@@ -86,6 +90,31 @@ const mutations = {
if (videos != null) { newObject.videos = videos }
state.shortsCache[channelId] = newObject
},
+ updateShortsCacheWithChannelPageShorts(state, { channelId, videos }) {
+ const cachedObject = state.shortsCache[channelId]
+
+ if (cachedObject && cachedObject.videos.length > 0) {
+ cachedObject.videos.forEach(cachedVideo => {
+ const channelVideo = videos.find(short => cachedVideo.videoId === short.videoId)
+
+ if (channelVideo) {
+ // authorId probably never changes, so we don't need to update that
+
+ cachedVideo.title = channelVideo.title
+ cachedVideo.author = channelVideo.author
+
+ // as the channel shorts page only has compact view counts for numbers above 1000 e.g. 12k
+ // and the RSS feeds include an exact value, we only want to overwrite it when the number is larger than the cached value
+ // 12345 vs 12000 => 12345
+ // 12345 vs 15000 => 15000
+
+ if (channelVideo.viewCount > cachedVideo.viewCount) {
+ cachedVideo.viewCount = channelVideo.viewCount
+ }
+ }
+ })
+ }
+ },
clearShortsCache(state) {
state.shortsCache = {}
},
diff --git a/src/renderer/store/modules/utils.js b/src/renderer/store/modules/utils.js
index 428c92e69ac73..243520044a821 100644
--- a/src/renderer/store/modules/utils.js
+++ b/src/renderer/store/modules/utils.js
@@ -358,14 +358,10 @@ const actions = {
},
async getRegionData ({ commit }, { locale }) {
- let localePathExists
+ const localePathExists = process.env.GEOLOCATION_NAMES.includes(locale)
// Exclude __dirname from path if not in electron
const fileLocation = `${process.env.IS_ELECTRON ? process.env.NODE_ENV === 'development' ? '.' : __dirname : ''}/static/geolocations/`
- if (process.env.IS_ELECTRON) {
- localePathExists = await pathExists(`${fileLocation}${locale}.json`)
- } else {
- localePathExists = process.env.GEOLOCATION_NAMES.includes(locale)
- }
+
const pathName = `${fileLocation}${localePathExists ? locale : 'en-US'}.json`
const countries = process.env.IS_ELECTRON ? JSON.parse(await fs.readFile(pathName)) : await (await fetch(createWebURL(pathName))).json()
@@ -601,15 +597,10 @@ const actions = {
async getExternalPlayerCmdArgumentsData ({ commit }, payload) {
const fileName = 'external-player-map.json'
- let fileData
/* eslint-disable-next-line n/no-path-concat */
const fileLocation = process.env.NODE_ENV === 'development' ? './static/' : `${__dirname}/static/`
- if (await pathExists(`${fileLocation}${fileName}`)) {
- fileData = await fs.readFile(`${fileLocation}${fileName}`)
- } else {
- fileData = '[{"name":"None","value":"","cmdArguments":null}]'
- }
+ const fileData = await fs.readFile(`${fileLocation}${fileName}`)
const externalPlayerMap = JSON.parse(fileData).map((entry) => {
return { name: entry.name, nameTranslationKey: entry.nameTranslationKey, value: entry.value, cmdArguments: entry.cmdArguments }
diff --git a/src/renderer/themes.css b/src/renderer/themes.css
index 0e6ddecf4a285..fd100cc5f5f2f 100644
--- a/src/renderer/themes.css
+++ b/src/renderer/themes.css
@@ -5,7 +5,8 @@
.dracula,
.catppuccinMocha,
.pastelPink,
-.hotPink {
+.hotPink,
+.nordic {
--primary-input-color: rgba(0, 0, 0, 0.50);
}
@@ -15,7 +16,8 @@
.dracula,
.catppuccinMocha,
.pastelPink,
-.hotPink {
+.hotPink,
+.nordic {
--link-color: var(--accent-color);
--link-visited-color: var(--accent-color-visited);
--instance-menu-color: var(--search-bar-color);
@@ -27,7 +29,8 @@
.gray,
.dracula,
.catppuccinMocha,
-.pastelPink {
+.pastelPink,
+.nordic {
--primary-input-color: rgba(0, 0, 0, 0.50);
--side-nav-hover-text-color: var(--primary-text-color);
}
@@ -37,7 +40,8 @@
.black,
.gray,
.dracula,
-.catppuccinMocha {
+.catppuccinMocha,
+.nordic {
--side-nav-active-text-color: var(--primary-text-color);
--scrollbar-text-color-hover: var(--primary-text-color);
@@ -56,7 +60,8 @@
.gray,
.dracula,
.catppuccinMocha,
-.hotPink {
+.hotPink,
+.nordic {
--primary-shadow-color: rgba(0, 0, 0, 0.75);
}
@@ -237,6 +242,25 @@ it can be safely elided. This looks quite pleasant on this theme. */
text-decoration: underline;
}
+.nordic {
+ --primary-text-color: #EEEEEE;
+ --secondary-text-color: #ddd;
+ --tertiary-text-color: #EEEEEE;
+ --title-color: #EEEEEE;
+ --bg-color: #2b2f3a;
+ --favorite-icon-color: #FFEA00;
+ --card-bg-color: #2e3440;
+ --secondary-card-bg-color: rgba(59, 66, 82, 0.75);
+ --scrollbar-color: #4b566a;
+ --scrollbar-color-hover: #4b566a;
+ --side-nav-color: #2e3440;
+ --side-nav-hover-color: #3b4252;
+ --side-nav-active-color: #3b4252;
+ --search-bar-color: #4b566a;
+ --logo-icon: url("../../_icons/iconNordicLightSmall.png");
+ --logo-text: url("../../_icons/textNordicLightSmall.png");
+}
+
.mainRed,
.mainPink,
.mainPurple,
diff --git a/src/renderer/views/Channel/Channel.css b/src/renderer/views/Channel/Channel.css
index e2b9b521360b6..a1324d2bb8237 100644
--- a/src/renderer/views/Channel/Channel.css
+++ b/src/renderer/views/Channel/Channel.css
@@ -217,6 +217,23 @@
}
}
+@media only screen and (max-width: 680px) {
+ .channelInfo {
+ flex-direction: column;
+ margin-block: 20px 10px;
+ }
+ .card {
+ max-inline-size: none;
+ inline-size: 100%;
+ }
+ .channelInfoActionsContainer {
+ flex-direction: row-reverse;
+ justify-content: left;
+ gap: 10px;
+ margin-block-start: 5px;
+ }
+}
+
@media only screen and (max-width: 400px) {
.channelInfo {
justify-content: center;
@@ -224,7 +241,11 @@
}
.channelInfoActionsContainer {
- flex-direction: column-reverse;
+ justify-content: center;
+ }
+
+ .channelLineContainer {
+ padding-inline-start: 0;
}
.thumbnailContainer {
diff --git a/src/renderer/views/Channel/Channel.js b/src/renderer/views/Channel/Channel.js
index 9b5171584c099..3c33f4b508569 100644
--- a/src/renderer/views/Channel/Channel.js
+++ b/src/renderer/views/Channel/Channel.js
@@ -26,6 +26,7 @@ import {
import {
getLocalChannel,
getLocalChannelId,
+ parseLocalChannelHeader,
parseLocalChannelShorts,
parseLocalChannelVideos,
parseLocalCommunityPosts,
@@ -33,6 +34,10 @@ import {
parseLocalListVideo,
parseLocalSubscriberCount
} from '../../helpers/api/local'
+import {
+ addPublishedDatesInvidious,
+ addPublishedDatesLocal
+} from '../../helpers/subscriptions'
export default defineComponent({
name: 'Channel',
@@ -172,6 +177,13 @@ export default defineComponent({
return this.subscriptionInfo !== null
},
+ isSubscribedInAnyProfile: function () {
+ const profileList = this.$store.getters.getProfileList
+
+ // check the all channels profile
+ return profileList[0].subscriptions.some((channel) => channel.id === this.id)
+ },
+
videoLiveSelectNames: function () {
return [
this.$t('Channel.Videos.Sort Types.Newest'),
@@ -534,90 +546,22 @@ export default defineComponent({
return
}
- let channelId
- let subscriberText = null
- let tags = []
-
- switch (channel.header.type) {
- case 'C4TabbedHeader': {
- // example: Linus Tech Tips
- // https://www.youtube.com/channel/UCXuqSBlHAE6Xw-yeJA0Tunw
-
- /**
- * @type {import('youtubei.js').YTNodes.C4TabbedHeader}
- */
- const header = channel.header
-
- channelId = header.author.id
- channelName = header.author.name
- channelThumbnailUrl = header.author.best_thumbnail.url
- subscriberText = header.subscribers?.text
- break
- }
- case 'CarouselHeader': {
- // examples: Music and YouTube Gaming
- // https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ
- // https://www.youtube.com/channel/UCOpNcN46UbXVtpKMrmU4Abg
-
- /**
- * @type {import('youtubei.js').YTNodes.CarouselHeader}
- */
- const header = channel.header
-
- /**
- * @type {import('youtubei.js').YTNodes.TopicChannelDetails}
- */
- const topicChannelDetails = header.contents.find(node => node.type === 'TopicChannelDetails')
- channelName = topicChannelDetails.title.text
- subscriberText = topicChannelDetails.subtitle.text
- channelThumbnailUrl = topicChannelDetails.avatar[0].url
-
- if (channel.metadata.external_id) {
- channelId = channel.metadata.external_id
- } else {
- channelId = topicChannelDetails.subscribe_button.channel_id
- }
- break
- }
- case 'InteractiveTabbedHeader': {
- // example: Minecraft - Topic
- // https://www.youtube.com/channel/UCQvWX73GQygcwXOTSf_VDVg
-
- /**
- * @type {import('youtubei.js').YTNodes.InteractiveTabbedHeader}
- */
- const header = channel.header
- channelName = header.title.text
- channelId = this.id
- channelThumbnailUrl = header.box_art.at(-1).url
-
- const badges = header.badges.map(badge => badge.label).filter(tag => tag)
- tags.push(...badges)
- break
- }
- case 'PageHeader': {
- // example: YouTube Gaming (an A/B test at the time of writing)
- // https://www.youtube.com/channel/UCOpNcN46UbXVtpKMrmU4Abg
+ const parsedHeader = parseLocalChannelHeader(channel)
- /**
- * @type {import('youtubei.js').YTNodes.PageHeader}
- */
- const header = channel.header
+ const channelId = parsedHeader.id ?? this.id
+ const subscriberText = parsedHeader.subscriberText ?? null
+ let tags = parsedHeader.tags
- channelName = header.content.title.text
- channelThumbnailUrl = header.content.image.image[0].url
- channelId = this.id
+ channelThumbnailUrl = parsedHeader.thumbnailUrl ?? this.subscriptionInfo?.thumbnail
+ channelName = parsedHeader.name ?? this.subscriptionInfo?.name
- break
- }
- }
-
- if (channelThumbnailUrl.startsWith('//')) {
+ if (channelThumbnailUrl?.startsWith('//')) {
channelThumbnailUrl = `https:${channelThumbnailUrl}`
}
this.channelName = channelName
this.thumbnailUrl = channelThumbnailUrl
+ this.bannerUrl = parsedHeader.bannerUrl ?? null
this.isFamilyFriendly = !!channel.metadata.is_family_safe
if (channel.metadata.tags) {
@@ -648,12 +592,6 @@ export default defineComponent({
this.updateSubscriptionDetails({ channelThumbnailUrl, channelName, channelId })
- if (channel.header.banner?.length > 0) {
- this.bannerUrl = channel.header.banner[0].url
- } else {
- this.bannerUrl = null
- }
-
let relatedChannels = channel.channels.map(({ author }) => ({
name: author.name,
id: author.id,
@@ -839,9 +777,20 @@ export default defineComponent({
return
}
- this.latestVideos = parseLocalChannelVideos(videosTab.videos, channel.header.author)
+ this.latestVideos = parseLocalChannelVideos(videosTab.videos, this.id, this.channelName)
this.videoContinuationData = videosTab.has_continuation ? videosTab : null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && this.latestVideos.length > 0 && this.videoSortBy === 'newest') {
+ addPublishedDatesLocal(this.latestVideos)
+ this.updateSubscriptionVideosCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, the store will get angry at us for modifying it outside of the store,
+ // when the user clicks load more
+ videos: [...this.latestVideos]
+ })
+ }
} catch (err) {
console.error(err)
const errorMessage = this.$t('Local API Error (Click to copy)')
@@ -864,7 +813,7 @@ export default defineComponent({
*/
const continuation = await this.videoContinuationData.getContinuation()
- this.latestVideos = this.latestVideos.concat(parseLocalChannelVideos(continuation.videos, this.channelInstance.header.author))
+ this.latestVideos = this.latestVideos.concat(parseLocalChannelVideos(continuation.videos, this.id, this.channelName))
this.videoContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
console.error(err)
@@ -897,9 +846,19 @@ export default defineComponent({
return
}
- this.latestShorts = parseLocalChannelShorts(shortsTab.videos, channel.header.author)
+ this.latestShorts = parseLocalChannelShorts(shortsTab.videos, this.id, this.channelName)
this.shortContinuationData = shortsTab.has_continuation ? shortsTab : null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && this.latestShorts.length > 0 && this.shortSortBy === 'newest') {
+ // As the shorts tab API response doesn't include the published dates,
+ // we can't just write the results to the subscriptions cache like we do with videos and live (can't sort chronologically without the date).
+ // However we can still update the metadata in the cache such as the view count and title that might have changed since it was cached
+ this.updateSubscriptionShortsCacheWithChannelPageShorts({
+ channelId: this.id,
+ videos: this.latestShorts
+ })
+ }
} catch (err) {
console.error(err)
const errorMessage = this.$t('Local API Error (Click to copy)')
@@ -922,7 +881,7 @@ export default defineComponent({
*/
const continuation = await this.shortContinuationData.getContinuation()
- this.latestShorts.push(...parseLocalChannelShorts(continuation.videos, this.channelInstance.header.author))
+ this.latestShorts.push(...parseLocalChannelShorts(continuation.videos, this.id, this.channelName))
this.shortContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
console.error(err)
@@ -955,9 +914,20 @@ export default defineComponent({
return
}
- this.latestLive = parseLocalChannelVideos(liveTab.videos, channel.header.author)
+ this.latestLive = parseLocalChannelVideos(liveTab.videos, this.id, this.channelName)
this.liveContinuationData = liveTab.has_continuation ? liveTab : null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && this.latestLive.length > 0 && this.liveSortBy === 'newest') {
+ addPublishedDatesLocal(this.latestLive)
+ this.updateSubscriptionLiveCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, the store will get angry at us for modifying it outside of the store,
+ // when the user clicks load more
+ videos: [...this.latestLive]
+ })
+ }
} catch (err) {
console.error(err)
const errorMessage = this.$t('Local API Error (Click to copy)')
@@ -980,7 +950,7 @@ export default defineComponent({
*/
const continuation = await this.liveContinuationData.getContinuation()
- this.latestLive.push(...parseLocalChannelVideos(continuation.videos, this.channelInstance.header.author))
+ this.latestLive.push(...parseLocalChannelVideos(continuation.videos, this.id, this.channelName))
this.liveContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
console.error(err)
@@ -1127,6 +1097,16 @@ export default defineComponent({
}
this.videoContinuationData = response.continuation || null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && !more && this.latestVideos.length > 0 && this.videoSortBy === 'newest') {
+ addPublishedDatesInvidious(this.latestVideos)
+ this.updateSubscriptionVideosCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, it will also contain all the next pages
+ videos: [...this.latestVideos]
+ })
+ }
}).catch((err) => {
console.error(err)
const errorMessage = this.$t('Invidious API Error (Click to copy)')
@@ -1176,6 +1156,17 @@ export default defineComponent({
}
this.shortContinuationData = response.continuation || null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && !more && this.latestShorts.length > 0 && this.shortSortBy === 'newest') {
+ // As the shorts tab API response doesn't include the published dates,
+ // we can't just write the results to the subscriptions cache like we do with videos and live (can't sort chronologically without the date).
+ // However we can still update the metadata in the cache e.g. adding the duration, as that isn't included in the RSS feeds
+ // and updating the view count and title that might have changed since it was cached
+ this.updateSubscriptionShortsCacheWithChannelPageShorts({
+ channelId: this.id,
+ videos: this.latestShorts
+ })
+ }
}).catch((err) => {
console.error(err)
const errorMessage = this.$t('Invidious API Error (Click to copy)')
@@ -1217,6 +1208,17 @@ export default defineComponent({
}
this.liveContinuationData = response.continuation || null
this.isElementListLoading = false
+
+ if (this.isSubscribedInAnyProfile && !more && this.latestLive.length > 0 && this.liveSortBy === 'newest') {
+ addPublishedDatesInvidious(this.latestLive)
+ this.updateSubscriptionLiveCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, the store will get angry at us for modifying it outside of the store,
+ // when the user clicks load more
+ videos: [...this.latestLive]
+ })
+ }
}).catch((err) => {
console.error(err)
const errorMessage = this.$t('Invidious API Error (Click to copy)')
@@ -1272,7 +1274,7 @@ export default defineComponent({
return
}
- this.latestPlaylists = playlistsTab.playlists.map(playlist => parseLocalListPlaylist(playlist, channel.header.author))
+ this.latestPlaylists = playlistsTab.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.playlistContinuationData = playlistsTab.has_continuation ? playlistsTab : null
this.isElementListLoading = false
} catch (err) {
@@ -1297,7 +1299,7 @@ export default defineComponent({
*/
const continuation = await this.playlistContinuationData.getContinuation()
- const parsedPlaylists = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.channelInstance.header.author))
+ const parsedPlaylists = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.latestPlaylists = this.latestPlaylists.concat(parsedPlaylists)
this.playlistContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
@@ -1395,7 +1397,7 @@ export default defineComponent({
return
}
- this.latestReleases = releaseTab.playlists.map(playlist => parseLocalListPlaylist(playlist, channel.header.author))
+ this.latestReleases = releaseTab.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.releaseContinuationData = releaseTab.has_continuation ? releaseTab : null
this.isElementListLoading = false
} catch (err) {
@@ -1420,7 +1422,7 @@ export default defineComponent({
*/
const continuation = await this.releaseContinuationData.getContinuation()
- const parsedReleases = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.channelInstance.header.author))
+ const parsedReleases = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.latestReleases = this.latestReleases.concat(parsedReleases)
this.releaseContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
@@ -1508,7 +1510,7 @@ export default defineComponent({
return
}
- this.latestPodcasts = podcastTab.playlists.map(playlist => parseLocalListPlaylist(playlist, channel.header.author))
+ this.latestPodcasts = podcastTab.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.podcastContinuationData = podcastTab.has_continuation ? podcastTab : null
this.isElementListLoading = false
} catch (err) {
@@ -1519,7 +1521,7 @@ export default defineComponent({
})
if (this.backendPreference === 'local' && this.backendFallback) {
showToast(this.$t('Falling back to Invidious API'))
- this.getChannelPodcastsInvidious()
+ this.channelInvidiousPodcasts()
} else {
this.isLoading = false
}
@@ -1533,7 +1535,7 @@ export default defineComponent({
*/
const continuation = await this.podcastContinuationData.getContinuation()
- const parsedPodcasts = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.channelInstance.header.author))
+ const parsedPodcasts = continuation.playlists.map(playlist => parseLocalListPlaylist(playlist, this.id, this.channelName))
this.latestPodcasts = this.latestPodcasts.concat(parsedPodcasts)
this.releaseContinuationData = continuation.has_continuation ? continuation : null
} catch (err) {
@@ -1634,6 +1636,19 @@ export default defineComponent({
this.latestCommunityPosts = parseLocalCommunityPosts(posts)
this.communityContinuationData = communityTab.has_continuation ? communityTab : null
+
+ if (this.latestCommunityPosts.length > 0) {
+ this.latestCommunityPosts.forEach(post => {
+ post.authorId = this.id
+ })
+ this.updateSubscriptionPostsCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, the store will get angry at us for modifying it outside of the store,
+ // when the user clicks load more
+ posts: [...this.latestCommunityPosts]
+ })
+ }
} catch (err) {
console.error(err)
const errorMessage = this.$t('Local API Error (Click to copy)')
@@ -1685,6 +1700,19 @@ export default defineComponent({
this.latestCommunityPosts = posts
}
this.communityContinuationData = continuation
+
+ if (this.isSubscribedInAnyProfile && !more && this.latestCommunityPosts.length > 0) {
+ this.latestCommunityPosts.forEach(post => {
+ post.authorId = this.id
+ })
+ this.updateSubscriptionPostsCacheByChannel({
+ channelId: this.id,
+ // create a copy so that we only cache the first page
+ // if we use the same array, the store will get angry at us for modifying it outside of the store,
+ // when the user clicks load more
+ posts: [...this.latestCommunityPosts]
+ })
+ }
}).catch(async (err) => {
console.error(err)
const errorMessage = this.$t('Invidious API Error (Click to copy)')
@@ -1859,7 +1887,7 @@ export default defineComponent({
if (item.type === 'Video') {
return parseLocalListVideo(item)
} else {
- return parseLocalListPlaylist(item, this.channelInstance.header.author)
+ return parseLocalListPlaylist(item, this.id, this.channelName)
}
})
@@ -1924,7 +1952,11 @@ export default defineComponent({
...mapActions([
'showOutlines',
- 'updateSubscriptionDetails'
+ 'updateSubscriptionDetails',
+ 'updateSubscriptionVideosCacheByChannel',
+ 'updateSubscriptionLiveCacheByChannel',
+ 'updateSubscriptionShortsCacheWithChannelPageShorts',
+ 'updateSubscriptionPostsCacheByChannel'
])
}
})
diff --git a/src/renderer/views/Channel/Channel.vue b/src/renderer/views/Channel/Channel.vue
index 59c2f0230b39d..83d79062c8801 100644
--- a/src/renderer/views/Channel/Channel.vue
+++ b/src/renderer/views/Channel/Channel.vue
@@ -421,7 +421,7 @@
diff --git a/src/renderer/views/Playlist/Playlist.js b/src/renderer/views/Playlist/Playlist.js
index 768ee8fc5e8ba..e4fcb162bfdc2 100644
--- a/src/renderer/views/Playlist/Playlist.js
+++ b/src/renderer/views/Playlist/Playlist.js
@@ -62,6 +62,9 @@ export default defineComponent({
getPlaylistInfoDebounce: function() {},
playlistInEditMode: false,
+ playlistInVideoSearchMode: false,
+ videoSearchQuery: '',
+
promptOpen: false,
}
},
@@ -106,7 +109,7 @@ export default defineComponent({
moreVideoDataAvailable() {
if (this.isUserPlaylistRequested) {
- return this.userPlaylistVisibleLimit < this.videoCount
+ return this.userPlaylistVisibleLimit < this.sometimesFilteredUserPlaylistItems.length
} else {
return this.continuationData !== null
}
@@ -125,17 +128,29 @@ export default defineComponent({
return this.selectedUserPlaylist?._id !== this.quickBookmarkPlaylistId
},
+ sometimesFilteredUserPlaylistItems() {
+ if (!this.isUserPlaylistRequested) { return this.playlistItems }
+ if (this.processedVideoSearchQuery === '') { return this.playlistItems }
+
+ return this.playlistItems.filter((v) => {
+ return v.title.toLowerCase().includes(this.processedVideoSearchQuery)
+ })
+ },
visiblePlaylistItems: function () {
if (!this.isUserPlaylistRequested) {
+ // No filtering for non user playlists yet
return this.playlistItems
}
- if (this.userPlaylistVisibleLimit < this.videoCount) {
- return this.playlistItems.slice(0, this.userPlaylistVisibleLimit)
+ if (this.userPlaylistVisibleLimit < this.sometimesFilteredUserPlaylistItems.length) {
+ return this.sometimesFilteredUserPlaylistItems.slice(0, this.userPlaylistVisibleLimit)
} else {
- return this.playlistItems
+ return this.sometimesFilteredUserPlaylistItems
}
- }
+ },
+ processedVideoSearchQuery() {
+ return this.videoSearchQuery.trim().toLowerCase()
+ },
},
watch: {
$route () {
@@ -271,7 +286,7 @@ export default defineComponent({
const dateString = new Date(result.updated * 1000)
this.lastUpdated = dateString.toLocaleDateString(this.currentLocale, { year: 'numeric', month: 'short', day: 'numeric' })
- this.allPlaylistItems = result.videos
+ this.playlistItems = result.videos
this.isLoading = false
}).catch((err) => {
diff --git a/src/renderer/views/Playlist/Playlist.scss b/src/renderer/views/Playlist/Playlist.scss
index e8c2b7681d952..939f3a5cc4a5c 100644
--- a/src/renderer/views/Playlist/Playlist.scss
+++ b/src/renderer/views/Playlist/Playlist.scss
@@ -7,7 +7,6 @@
box-sizing: border-box;
block-size: calc(100vh - 132px);
margin-inline-end: 1em;
- overflow-y: auto;
padding: 10px;
position: sticky;
inset-block-start: 96px;
diff --git a/src/renderer/views/Playlist/Playlist.vue b/src/renderer/views/Playlist/Playlist.vue
index 69fca4917c3ca..0f030d676a69a 100644
--- a/src/renderer/views/Playlist/Playlist.vue
+++ b/src/renderer/views/Playlist/Playlist.vue
@@ -28,6 +28,9 @@
}"
@enter-edit-mode="playlistInEditMode = true"
@exit-edit-mode="playlistInEditMode = false"
+ @search-video-mode-on="playlistInVideoSearchMode = true"
+ @search-video-mode-off="playlistInVideoSearchMode = false"
+ @search-video-query-change="(v) => videoSearchQuery = v"
@prompt-open="promptOpen = true"
@prompt-close="promptOpen = false"
/>
@@ -39,51 +42,62 @@
-
-
-
-
-
-
+
-
-
-
+
+ {{ $t("User Playlists['Empty Search Message']") }}
+
+
-
@@ -186,6 +186,7 @@ User Playlists:
Save: حفظ
Search in Playlists: البحث في قوائم التشغيل
N playlists selected: تم تحديد {playlistCount}
+ Added {count} Times: تمت إضافة {count} الوقت | تمت إضافة {count} مرة
CreatePlaylistPrompt:
Toast:
There is already a playlist with this name. Please pick a different name.: توجد
@@ -276,6 +277,7 @@ Settings:
Catppuccin Mocha: كاتبوتشين موكا
Pastel Pink: الباستيل الوردي
Hot Pink: وردي فاقع
+ Nordic: بلدان الشمال الأوروبي
Main Color Theme:
Main Color Theme: 'لون السِمة الأساسي'
Red: 'أحمر'
@@ -517,8 +519,8 @@ Settings:
Hide Upcoming Premieres: إخفاء العروض الأولى القادمة
Hide Channels: إخفاء مقاطع الفيديو من القنوات
Hide Channels Placeholder: معرف القناة
- Display Titles Without Excessive Capitalisation: عرض العناوين بدون احرف كبيرة
- بشكل مفرط
+ Display Titles Without Excessive Capitalisation: عرض العناوين بدون استخدام الأحرف
+ الكبيرة وعلامات الترقيم بشكل مفرط
Hide Featured Channels: إخفاء القنوات المميزة
Hide Channel Playlists: إخفاء قوائم تشغيل القناة
Hide Channel Community: إخفاء مجتمع القناة
@@ -930,6 +932,7 @@ Video:
Pause on Current Video: توقف مؤقتًا على الفيديو الحالي
Unhide Channel: عرض القناة
Hide Channel: إخفاء القناة
+ More Options: المزيد من الخيارات
Videos:
#& Sort By
Sort By:
@@ -1006,7 +1009,7 @@ Up Next: 'التالي'
Local API Error (Click to copy): 'خطأ API المحلي (انقر للنسخ)'
Invidious API Error (Click to copy): 'خطأ Invidious API ( انقر للنسخ)'
Falling back to Invidious API: 'التراجع إلى Invidious API'
-Falling back to the local API: 'التراجع إلى API المحلي'
+Falling back to Local API: 'التراجع إلى API المحلي'
Subscriptions have not yet been implemented: 'لم يتم تنفيذ الاشتراكات بعد'
Loop is now disabled: 'تم تعطيل التكرار'
Loop is now enabled: 'تم تمكين التكرار'
@@ -1130,11 +1133,6 @@ Starting download: بدء تنزيل "{videoTitle}"
Screenshot Success: تم حفظ لقطة الشاشة كا"{filePath}"
Screenshot Error: فشل أخذ لقطة للشاشة. {error}
New Window: نافذة جديدة
-Age Restricted:
- Type:
- Channel: القناة
- Video: فيديو
- This {videoOrPlaylist} is age restricted: 'هذا {videoOrPlaylist} مقيد بالعمر'
Channels:
Count: تم العثور على قناة (قنوات) {number}.
Unsubscribed: 'تمت إزالة {channelName} من اشتراكاتك'
@@ -1171,3 +1169,7 @@ Trimmed input must be at least N characters long: يجب أن يكون طول ا
حرفًا واحدًا على الأقل | يجب أن يبلغ طول الإدخال المقتطع {length} من الأحرف على
الأقل
Tag already exists: العلامة "{tagName}" موجودة بالفعل
+Age Restricted:
+ This channel is age restricted: هذه القناة مقيدة بالعمر
+ This video is age restricted: هذا الفيديو مقيد بالفئة العمرية
+Close Banner: إغلاق الشعار
diff --git a/static/locales/be.yaml b/static/locales/be.yaml
index de57d1d0a21d3..8473113723766 100644
--- a/static/locales/be.yaml
+++ b/static/locales/be.yaml
@@ -813,7 +813,7 @@ Tooltips:
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
-Falling back to the local API: ''
+Falling back to Local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
@@ -833,11 +833,6 @@ Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
-Age Restricted:
- This {videoOrPlaylist} is age restricted: ''
- Type:
- Channel: ''
- Video: ''
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml
index cde9c8a377987..e0454b566edf5 100644
--- a/static/locales/bg.yaml
+++ b/static/locales/bg.yaml
@@ -1023,7 +1023,7 @@ Up Next: 'Следващ'
Local API Error (Click to copy): 'Грешка в локалния интерфейс (щракнете за копиране)'
Invidious API Error (Click to copy): 'Грешка в Invidious интерфейса (щракнете за копиране)'
Falling back to Invidious API: 'Връщане към Invidious интерфейса'
-Falling back to the local API: 'Връщане към локалния интерфейс'
+Falling back to Local API: 'Връщане към локалния интерфейс'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Видеото
не е достъпно поради липсващи формати. Това може да се дължи на ограничен достъп
за страната.'
@@ -1148,12 +1148,6 @@ Downloading failed: Имаше проблем при изтеглянето на
Screenshot Error: Снимката на екрана е неуспешна. {error}
Screenshot Success: Запазена снимка на екрана като "{filePath}"
New Window: Нов прозорец
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Този {videoOrPlaylist} е с възрастово
- ограничение
- Type:
- Channel: Канал
- Video: Видео
Channels:
Count: Намерени са {number} канала.
Unsubscribe: Отписване
diff --git a/static/locales/bn.yaml b/static/locales/bn.yaml
index 8288ad17422eb..82cb20befde09 100644
--- a/static/locales/bn.yaml
+++ b/static/locales/bn.yaml
@@ -135,10 +135,6 @@ External link opening has been disabled in the general settings: সাধার
বহিঃসংযোগ খোলা নিষ্ক্রিয় রাখা হয়েছে
Are you sure you want to open this link?: তুমি কি এই সংযোগটি খোলার ব্যাপারে নিশ্চিত?
Preferences: পছন্দসমূহ
-Age Restricted:
- Type:
- Channel: চ্যানেল
- Video: ভিডিও
Most Popular: অতিপরিচিত
Channels:
Search bar placeholder: চ্যানেল খুঁজুন
diff --git a/static/locales/ckb.yaml b/static/locales/ckb.yaml
index dbde21cea041a..10df3f5a8a224 100644
--- a/static/locales/ckb.yaml
+++ b/static/locales/ckb.yaml
@@ -829,7 +829,7 @@ Tooltips:
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
-Falling back to the local API: ''
+Falling back to Local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
@@ -849,11 +849,6 @@ Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
-Age Restricted:
- This {videoOrPlaylist} is age restricted: ''
- Type:
- Channel: 'کەناڵ'
- Video: 'ڤیدیۆ'
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml
index fab5bbc22d745..386b60ddbb639 100644
--- a/static/locales/cs.yaml
+++ b/static/locales/cs.yaml
@@ -146,6 +146,7 @@ User Playlists:
Select a playlist to add your N videos to: Vyberte playlist, do kterého přidat
vaše video | Vyberte playlist, do kterého přidat vašich {videoCount} videí
N playlists selected: Vybráno {playlistCount}
+ Added {count} Times: Přidáno {count}krát | Přidáno {count}krát
SinglePlaylistView:
Toast:
There were no videos to remove.: Nejsou zde žádná videa k odstranění.
@@ -234,7 +235,7 @@ Settings:
General Settings:
General Settings: 'Obecné nastavení'
Check for Updates: 'Kontrolovat aktualizace'
- Check for Latest Blog Posts: 'Kontrolovat nejnovější příspěvky blogů'
+ Check for Latest Blog Posts: 'Kontrolovat nejnovější příspěvky na blogu'
Fallback to Non-Preferred Backend on Failure: 'Při chybě přepnout na nepreferovaný
backend'
Enable Search Suggestions: 'Zapnout návrhy vyhledávání'
@@ -292,6 +293,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Horká růžová
Pastel Pink: Pastelově růžová
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Hlavní barva motivu'
Red: 'Červená'
@@ -443,7 +445,7 @@ Settings:
Hide Channels: Skrýt videa z kanálů
Hide Channels Placeholder: ID kanálu
Display Titles Without Excessive Capitalisation: Zobrazit názvy bez nadměrného
- použití velkých písmen
+ použití velkých písmen a interpunkce
Hide Featured Channels: Skrýt doporučené kanály
Hide Channel Playlists: Skrýt playlisty kanálu
Hide Channel Community: Skrýt komunitu kanálu
@@ -925,6 +927,7 @@ Video:
Pause on Current Video: Pozastavit na současném videu
Unhide Channel: Zobrazit kanál
Hide Channel: Skrýt kanál
+ More Options: Další možnosti
Videos:
#& Sort By
Sort By:
@@ -1024,10 +1027,10 @@ Tooltips:
otevřít ve FreeTube.\nVe výchozím nastavení otevře FreeTube odkaz ve vašem výchozím
prohlížeči.\n"
Player Settings:
- Force Local Backend for Legacy Formats: 'Funguje pouze v případě, že je výchozím
- nastavením API Invidious. Je-li povoleno, spustí se místní API a použije starší
+ Force Local Backend for Legacy Formats: 'Funguje pouze v případě, že je jako výchozí
+ nastaveno API Invidious. Je-li povoleno, spustí se místní API a použije starší
formáty místo těch, které vrátí Invidious. Může pomoci, pokud videa z Invidious
- nemohou být přehrána kvůli regionálnímu omezení.'
+ nemohou být přehrána z důvodu regionálních omezení.'
Proxy Videos Through Invidious: 'Připojí se k Invidious, aby poskytoval videa
namísto přímého připojení k YouTube. Toto přepíše předvolby API.'
Default Video Format: 'Nastavte formáty použité při přehrávání videa. Formáty
@@ -1089,7 +1092,7 @@ Tooltips:
Local API Error (Click to copy): 'Chyba lokálního API (kliknutím zkopírujete)'
Invidious API Error (Click to copy): 'Chyba Invidious API (kliknutím zkopírujete)'
Falling back to Invidious API: 'Přepínám na Invidious API'
-Falling back to the local API: 'Přepínám na lokální API'
+Falling back to Local API: 'Přepínám na lokální API'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Toto
video není k dispozici z důvodu chybějících formátů. K tomu může dojít z důvodu
nedostupnosti země.'
@@ -1128,11 +1131,6 @@ Downloading has completed: Bylo dokončeno stahování "{videoTitle}"
Downloading failed: Došlo k problému při stahování "{videoTitle}"
Starting download: Zahájení stahování "{videoTitle}"
New Window: Nové okno
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Toto {videoOrPlaylist} je omezeno věkem
- Type:
- Channel: kanál
- Video: Video
Channels:
Channels: Kanály
Title: Seznam kanálů
@@ -1169,3 +1167,7 @@ Channel Unhidden: Kanál {channel} odebrán z filtrů kanálů
Trimmed input must be at least N characters long: Oříznutý vstup musí být dlouhý alespoň
1 znak | Oříznutý vstup musí být dlouhý alespoň {length} znaků
Tag already exists: Štítek „{tagName}“ již existuje
+Close Banner: Zavřít panel
+Age Restricted:
+ This channel is age restricted: Tento kanál je omezen věkem
+ This video is age restricted: Toto video je omezeno věkem
diff --git a/static/locales/cy.yaml b/static/locales/cy.yaml
index 922555bdab267..6f277d93c3d35 100644
--- a/static/locales/cy.yaml
+++ b/static/locales/cy.yaml
@@ -831,7 +831,7 @@ Tooltips:
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
-Falling back to the local API: ''
+Falling back to Local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
@@ -851,11 +851,6 @@ Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
-Age Restricted:
- This {videoOrPlaylist} is age restricted: ''
- Type:
- Channel: 'Sianel'
- Video: 'Fideo'
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
diff --git a/static/locales/da.yaml b/static/locales/da.yaml
index ba0d7a074b3af..b38b566573cd2 100644
--- a/static/locales/da.yaml
+++ b/static/locales/da.yaml
@@ -769,7 +769,7 @@ Up Next: 'Næste'
Local API Error (Click to copy): 'Lokal API-Fejl (Klik for at kopiere)'
Invidious API Error (Click to copy): 'Invidious-API-Fejl (Klik for at kopiere)'
Falling back to Invidious API: 'Falder tilbage til Invidious-API'
-Falling back to the local API: 'Falder tilbage til den lokale API'
+Falling back to Local API: 'Falder tilbage til den lokale API'
Subscriptions have not yet been implemented: 'Abonnementer er endnu ikke blevet implementerede'
Loop is now disabled: 'Gentagelse er nu deaktiveret'
Loop is now enabled: 'Gentagelse er nu aktiveret'
@@ -858,11 +858,6 @@ Default Invidious instance has been cleared: Standard Invidious-instans er bleve
Are you sure you want to open this link?: Er du sikker på at du vil åbne dette link?
Search Bar:
Clear Input: Ryd Input
-Age Restricted:
- Type:
- Video: Video
- Channel: Kanal
- This {videoOrPlaylist} is age restricted: Denne {videoOrPlaylist} er aldersbegrænset
Downloading failed: Der var et problem med at downloade "{videoTitle}"
Unknown YouTube url type, cannot be opened in app: Ukendt YouTube URL-type, kan ikke
åbnes i appen
diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml
index f67cb6fef43fc..74d8ce1291610 100644
--- a/static/locales/de-DE.yaml
+++ b/static/locales/de-DE.yaml
@@ -294,6 +294,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Pink
Pastel Pink: Pastellrosa
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: Hauptfarbe des Farbschemas
Red: Rot
@@ -1013,7 +1014,7 @@ Up Next: Nächster Titel
Local API Error (Click to copy): Lokaler API-Fehler (Zum Kopieren anklicken)
Invidious API Error (Click to copy): Invidious-API-Fehler (Zum Kopieren anklicken)
Falling back to Invidious API: Rückgriff auf Invidious-API
-Falling back to the local API: Rückgriff auf lokale API
+Falling back to Local API: Rückgriff auf lokale API
This video is unavailable because of missing formats. This can happen due to country unavailability.: Dieses
Video ist aufgrund fehlender Formate nicht verfügbar. Zugriffsbeschränkungen im
Land kann dafür der Grund sein.
@@ -1203,11 +1204,6 @@ Downloading failed: Beim Herunterladen von „{videoTitle}“ gab es ein Problem
Screenshot Success: Bildschirmfoto als „{filePath}“ gespeichert
Screenshot Error: Bildschirmfoto fehlgeschlagen. {error}
New Window: Neues Fenster
-Age Restricted:
- Type:
- Video: Video
- Channel: Kanal
- This {videoOrPlaylist} is age restricted: Dieses {videoOrPlaylist} ist altersbeschränkt
Channels:
Channels: Kanäle
Title: Kanalliste
@@ -1244,4 +1240,4 @@ Channel Unhidden: '{channel} wurde aus dem Kanalfilter entfernt'
Trimmed input must be at least N characters long: Gekürzte Eingaben müssen mindestens
1 Zeichen lang sein | Gekürzte Eingaben müssen mindestens {length} Zeichen lang
sein
-Tag already exists: Der Tag "{tagName}" existiert bereits
+Tag already exists: Die Markierung „{tagName}“ existiert bereits
diff --git a/static/locales/el.yaml b/static/locales/el.yaml
index 0c00398776d61..31e8a2fe01ecf 100644
--- a/static/locales/el.yaml
+++ b/static/locales/el.yaml
@@ -945,7 +945,7 @@ Local API Error (Click to copy): 'Τοπικό σφάλμα Διεπαφής π
Invidious API Error (Click to copy): 'Σφάλμα Διεπαφής προγραμματισμού εφαρμογής Invidious(*API)
(Κάντε κλικ για αντιγραφή)'
Falling back to Invidious API: 'Επιστροφή στο Invidious API'
-Falling back to the local API: 'Επιστροφή στη τοπική Διεπαφή προγραμματισμού εφαρμογής
+Falling back to Local API: 'Επιστροφή στη τοπική Διεπαφή προγραμματισμού εφαρμογής
(API)'
Subscriptions have not yet been implemented: 'Οι συνδρομές δεν έχουν ακόμη υλοποιηθεί'
Loop is now disabled: 'Η επανάληψη είναι πλέον απενεργοποιημένη'
@@ -1097,12 +1097,6 @@ Chapters:
Chapters: Κεφάλαια
'Chapters list visible, current chapter: {chapterName}': 'Ορατή λίστα κεφαλαίων,
τρέχον κεφάλαιο: {chapterName}'
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Αυτό το {videoOrPlaylist} έχει περιορισμό
- ηλικίας
- Type:
- Channel: Κανάλι
- Video: Βίντεο
Ok: Εντάξει
Preferences: Προτιμήσεις
Screenshot Success: Αποθηκευμένο στιγμιότυπο οθόνης ως "{filePath}"
diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml
index 5ce6ffd92f88a..76597566762e4 100644
--- a/static/locales/en-US.yaml
+++ b/static/locales/en-US.yaml
@@ -32,6 +32,7 @@ Back: Back
Forward: Forward
Open New Window: Open New Window
Go to page: Go to {page}
+Close Banner: Close Banner
Version {versionNumber} is now available! Click for more details: Version {versionNumber} is now available! Click
for more details
@@ -186,6 +187,8 @@ User Playlists:
EarliestPlayedFirst: 'Earliest Played'
SinglePlaylistView:
+ Search for Videos: Search for Videos
+
Toast:
This video cannot be moved up.: This video cannot be moved up.
This video cannot be moved down.: This video cannot be moved down.
@@ -213,6 +216,8 @@ User Playlists:
Search in Playlists: Search in Playlists
Save: Save
+ Added {count} Times: 'Added {count} Time | Added {count} Times'
+
Toast:
You haven't selected any playlist yet.: You haven't selected any playlist yet.
"{videoCount} video(s) added to 1 playlist": "1 video added to 1 playlist | {videoCount} videos added to 1 playlist"
@@ -299,6 +304,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pink
Hot Pink: Hot Pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: Main Color Theme
Red: Red
@@ -453,7 +459,7 @@ Settings:
Hide Video Description: Hide Video Description
Hide Comments: Hide Comments
Hide Profile Pictures in Comments: Hide Profile Pictures in Comments
- Display Titles Without Excessive Capitalisation: Display Titles Without Excessive Capitalisation
+ Display Titles Without Excessive Capitalisation: Display Titles Without Excessive Capitalisation And Punctuation
Hide Live Streams: Hide Live Streams
Hide Upcoming Premieres: Hide Upcoming Premieres
Hide Sharing Actions: Hide Sharing Actions
@@ -724,6 +730,7 @@ Channel:
Hide Answers: Hide Answers
Video hidden by FreeTube: Video hidden by FreeTube
Video:
+ More Options: More Options
Mark As Watched: Mark As Watched
Remove From History: Remove From History
Video has been marked as watched: Video has been marked as watched
@@ -957,7 +964,7 @@ Tooltips:
By default FreeTube will open the clicked link in your default browser.
Player Settings:
Force Local Backend for Legacy Formats: Only works when the Invidious API is your
- default. When enabled, the local API will run and use the legacy formats returned
+ default. When enabled, the Local API will run and use the legacy formats returned
by that instead of the ones returned by Invidious. Helps when the videos returned
by Invidious don't play due to country restrictions.
Proxy Videos Through Invidious: Will connect to Invidious to serve videos instead
@@ -1011,7 +1018,7 @@ Tooltips:
Local API Error (Click to copy): Local API Error (Click to copy)
Invidious API Error (Click to copy): Invidious API Error (Click to copy)
Falling back to Invidious API: Falling back to Invidious API
-Falling back to the local API: Falling back to the local API
+Falling back to Local API: Falling back to Local API
This video is unavailable because of missing formats. This can happen due to country unavailability.: This
video is unavailable because of missing formats. This can happen due to country
unavailability.
@@ -1035,10 +1042,8 @@ Default Invidious instance has been cleared: Default Invidious instance has been
'The playlist has ended. Enable loop to continue playing': 'The playlist has ended. Enable
loop to continue playing'
Age Restricted:
- This {videoOrPlaylist} is age restricted: This {videoOrPlaylist} is age restricted
- Type:
- Channel: Channel
- Video: Video
+ This channel is age restricted: This channel is age restricted
+ This video is age restricted: This video is age restricted
External link opening has been disabled in the general settings: 'External link opening has been disabled in the general settings'
Downloading has completed: '"{videoTitle}" has finished downloading'
Starting download: 'Starting download of "{videoTitle}"'
diff --git a/static/locales/en_GB.yaml b/static/locales/en_GB.yaml
index 5c6b5c5ec283b..5b9b51b1d9ef2 100644
--- a/static/locales/en_GB.yaml
+++ b/static/locales/en_GB.yaml
@@ -43,6 +43,8 @@ Global:
View Count: 1 view | {count} views
Watching Count: 1 watching | {count} watching
Channel Count: 1 channel | {count} channels
+ Input Tags:
+ Length Requirement: Tag must be at least {number} characters long
Version {versionNumber} is now available! Click for more details: 'Version {versionNumber}
is now available! Click for more details'
Download From Site: 'Download from site'
@@ -119,14 +121,14 @@ Playlists: 'Playlists'
User Playlists:
Your Playlists: 'Your playlists'
Playlist Message: This page is not reflective of fully working playlists. It only
- lists videos that you have saved or favourited. When the work has finished, all
- videos currently here will be migrated to a ‘Favourites’ playlist.
+ lists videos that you have saved or made a Favourite. When the work has finished,
+ all videos currently here will be migrated to a ‘Favourites’ playlist.
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Your
saved videos are empty. Click on the save button on the corner of a video to have
it listed here
Search bar placeholder: Search in playlist
Empty Search Message: There are no videos in this playlist that match your search
- Create New Playlist: Create new playlist
+ Create New Playlist: Create new Playlist
Add to Playlist: Add to playlist
This playlist currently has no videos.: This playlist currently has no videos.
Move Video Down: Move video down
@@ -167,6 +169,14 @@ User Playlists:
There was an issue with updating this playlist.: There was an issue with updating
this playlist.
There were no videos to remove.: There were no videos to remove.
+ Reverted to use {oldPlaylistName} for quick bookmark: Reverted to use {oldPlaylistName}
+ for quick bookmark
+ This playlist is now used for quick bookmark: This playlist is now used for
+ quick bookmark
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: This
+ playlist is now used for quick bookmark instead of {oldPlaylistName}. Click
+ here to undo
+ Quick bookmark disabled: Quick bookmark disabled
AddVideoPrompt:
N playlists selected: '{playlistCount} selected'
Search in Playlists: Search in playlists
@@ -175,11 +185,21 @@ User Playlists:
"{videoCount} video(s) added to 1 playlist": 1 video added to 1 playlist | {videoCount}
videos added to 1 playlist
You haven't selected any playlist yet.: You haven't selected any playlist yet.
+ "{videoCount} video(s) added to {playlistCount} playlists": 1 video added to
+ {playlistCount} playlists | {videoCount} videos added to {playlistCount}
+ playlists
Select a playlist to add your N videos to: Select a playlist to add your video
to | Select a playlist to add your {videoCount} videos to
CreatePlaylistPrompt:
- New Playlist Name: New playlist name
+ New Playlist Name: New Playlist name
Create: Create
+ Toast:
+ Playlist {playlistName} has been successfully created.: Playlist {playlistName}
+ has been successfully created.
+ There was an issue with creating the playlist.: There was an problem when creating
+ the playlist.
+ There is already a playlist with this name. Please pick a different name.: There
+ is already a Playlist with this name. Please pick a different name.
You have no playlists. Click on the create new playlist button to create a new one.: You
have no playlists. Click on the create new playlist button to create a new one.
Move Video Up: Move video up
@@ -193,6 +213,9 @@ User Playlists:
Are you sure you want to delete this playlist? This cannot be undone: Are you sure
you want to delete this playlist? This cannot be undone.
Add to Favorites: Add to {playlistName}
+ Remove from Favorites: Remove from {playlistName}
+ Enable Quick Bookmark With This Playlist: Enable quick bookmark with this playlist
+ Disable Quick Bookmark: Disable quick bookmark
History:
# On History Page
History: 'History'
@@ -230,38 +253,39 @@ Settings:
Hidden: Hidden
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious Instance
(Default is https://invidious.snopyta.org)'
- Region for Trending: 'Region for Trending'
+ Region for Trending: 'Region for trending'
#! List countries
View all Invidious instance information: View all Invidious instance information
System Default: System default
External Player: External Player
External Player Executable: Custom External Player Executable
Clear Default Instance: Clear default instance
- Set Current Instance as Default: Set Current Instance as Default
+ Set Current Instance as Default: Set current instance as default
Current instance will be randomized on startup: Current instance will be randomised
- on startup
+ on Startup
No default instance has been set: No default instance has been set
The currently set default instance is {instance}: The currently set default instance
is {instance}
Current Invidious Instance: Current Invidious Instance
External Link Handling:
- No Action: No Action
- Ask Before Opening Link: Ask Before Opening Link
- Open Link: Open Link
- External Link Handling: External Link Handling
+ No Action: No action
+ Ask Before Opening Link: Ask before opening link
+ Open Link: Open link
+ External Link Handling: External link handling
Theme Settings:
- Theme Settings: 'Theme Settings'
+ Theme Settings: 'Theme settings'
Match Top Bar with Main Color: 'Match top bar with main colour'
Base Theme:
Base Theme: 'Base theme'
Black: 'Black'
Dark: 'Dark'
- System Default: 'System Default'
+ System Default: 'System default'
Light: 'Light'
Dracula: 'Dracula'
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel pink
Hot Pink: Hot pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Main colour theme'
Red: 'Red'
@@ -307,7 +331,7 @@ Settings:
Disable Smooth Scrolling: Disable smooth scrolling
Expand Side Bar by Default: Expand side bar by default
Hide Side Bar Labels: Hide side bar labels
- Hide FreeTube Header Logo: Hide FreeTube Header Logo
+ Hide FreeTube Header Logo: Hide FreeTube header logo
Player Settings:
Player Settings: 'Player settings'
Force Local Backend for Legacy Formats: 'Force local back-end for legacy formats'
@@ -581,6 +605,7 @@ Settings:
Remove Password: Remove password
Password Settings: Password settings
Set Password: Set password
+ Expand All Settings Sections: Expand all settings sections
About:
#On About page
About: About
@@ -951,7 +976,7 @@ Up Next: 'Up Next'
Local API Error (Click to copy): 'Local API Error (Click to copy)'
Invidious API Error (Click to copy): 'Invidious API Error (Click to copy)'
Falling back to Invidious API: 'Falling back to Invidious API'
-Falling back to the local API: 'Falling back to the local API'
+Falling back to Local API: 'Falling back to Local API'
Subscriptions have not yet been implemented: 'Subscriptions have not yet been implemented'
Loop is now disabled: 'Loop is now disabled'
Loop is now enabled: 'Loop is now enabled'
@@ -983,7 +1008,7 @@ Tooltips:
Proxy Videos Through Invidious: Will connect to Invidious to serve videos instead
of making a direct connection to YouTube. Overrides API preference.
Force Local Backend for Legacy Formats: Only works when the Invidious API is your
- default. When enabled, the local API will run and use the legacy formats returned
+ default. When enabled, the Local API will run and use the legacy formats returned
by that instead of the ones returned by Invidious. Helps when the videos returned
by Invidious don’t play due to country restrictions.
Scroll Playback Rate Over Video Player: While the cursor is over the video, press
@@ -1067,17 +1092,15 @@ New Window: New window
Channels:
Empty: Your channel list is currently empty.
Unsubscribe: Unsubscribe
- Unsubscribed: '{channelName} has been removed from your subscriptions'
- Unsubscribe Prompt: Are you sure you want to unsubscribe from ‘{channelName}’?
+ Unsubscribed: '{channelName} has been removed from your Subscriptions'
+ Unsubscribe Prompt: Are you sure you want to Unsubscribe from ‘{channelName}’?
Title: Channel list
Search bar placeholder: Search channels
Channels: Channels
Count: '{number} channel(s) found.'
Age Restricted:
- This {videoOrPlaylist} is age restricted: This {videoOrPlaylist} is age restricted
- Type:
- Video: Video
- Channel: Channel
+ This channel is age restricted: This channel is age restricted
+ This video is age restricted: This video is age restricted
Chapters:
'Chapters list visible, current chapter: {chapterName}': 'Chapters list visible,
current chapter: {chapterName}'
@@ -1099,3 +1122,5 @@ Playlist will pause when current video is finished: Playlist will pause when cur
Playlist will not pause when current video is finished: Playlist will not pause when
current video is finished
Go to page: Go to {page}
+Tag already exists: ‘{tagName}’ tag already exists
+Close Banner: Close Banner
diff --git a/static/locales/es-MX.yaml b/static/locales/es-MX.yaml
index dc169144d7a62..61ee2146e64ee 100644
--- a/static/locales/es-MX.yaml
+++ b/static/locales/es-MX.yaml
@@ -678,7 +678,7 @@ Local API Error (Click to copy): 'Error de la API local (Presione para copiar)'
Invidious API Error (Click to copy): 'Error de la API de Invidious (Presione para
copiar)'
Falling back to Invidious API: 'Recurriendo a la API de Invidious'
-Falling back to the local API: 'Recurriendo a la API local'
+Falling back to Local API: 'Recurriendo a la API local'
Subscriptions have not yet been implemented: 'Las suscripciones aún no se han implementado'
Loop is now disabled: 'El bucle esta desactivado'
Loop is now enabled: 'El bucle esta activado'
diff --git a/static/locales/es.yaml b/static/locales/es.yaml
index 09c74e9462cbe..cd081e8b88611 100644
--- a/static/locales/es.yaml
+++ b/static/locales/es.yaml
@@ -142,6 +142,7 @@ User Playlists:
a la que añadir su vídeo | Seleccione una lista de reproducción a la que añadir
sus {videoCount} vídeos
N playlists selected: '{playlistCount} seleccionada'
+ Added {count} Times: Añadido {count} vez | Añadido {count} veces
SinglePlaylistView:
Toast:
There were no videos to remove.: No había vídeos que eliminar.
@@ -287,6 +288,7 @@ Settings:
Catppuccin Mocha: Catppuccin Moca
Pastel Pink: Rosa pastel
Hot Pink: Rosa fuerte
+ Nordic: Nórdico
Main Color Theme:
Main Color Theme: 'Color principal'
Red: 'Rojo'
@@ -531,8 +533,8 @@ Settings:
Hide Upcoming Premieres: Ocultar los próximos estrenos
Hide Channels: Ocultar vídeos de los canales
Hide Channels Placeholder: ID del canal
- Display Titles Without Excessive Capitalisation: Mostrar títulos sin demasiadas
- mayúsculas
+ Display Titles Without Excessive Capitalisation: Mostrar títulos sin mayúsculas
+ ni signos de puntuación excesivos
Hide Featured Channels: Ocultar canales recomendados
Hide Channel Playlists: Ocultar las listas de reproducción de los canales
Hide Channel Community: Ocultar canales de la comunidad
@@ -954,6 +956,7 @@ Video:
Pause on Current Video: Pausa en el vídeo actual
Unhide Channel: Mostrar el canal
Hide Channel: Ocultar el canal
+ More Options: Más opciones
Videos:
#& Sort By
Sort By:
@@ -1037,7 +1040,7 @@ Local API Error (Click to copy): 'Error de la API local (Clic para copiar el có
Invidious API Error (Click to copy): 'Error de la API de Invidious (Clic para copiar
el código)'
Falling back to Invidious API: 'Recurriendo a la API de Invidious'
-Falling back to the local API: 'Recurriendo a la API local'
+Falling back to Local API: 'Recurriendo a la API local'
Subscriptions have not yet been implemented: 'Todavía no se han implementado las suscripciones'
Loop is now disabled: 'Reproducción en bucle desactivada'
Loop is now enabled: 'Reproducción en bucle activada'
@@ -1076,10 +1079,11 @@ Tooltips:
Proxy Videos Through Invidious: Se conectará a Invidious para obtener vídeos en
lugar de conectar directamente con YouTube. Sobreescribirá la preferencia de
API.
- Force Local Backend for Legacy Formats: Solo funciona cuando la API de Invidious
- es la predeterminada. la API local se ejecutará y usará los formatos heredados
- en lugar de Invidious. Esto ayudará cuando Invidious no pueda reproducir un
- vídeo por culpa de las restricciones regionales.
+ Force Local Backend for Legacy Formats: Sólo funciona cuando la API de Invidious
+ es la predeterminada. Si está activada, la API local se ejecutará y utilizará
+ los formatos heredados devueltos por ella en lugar de los devueltos por Invidious.
+ Es útil cuando los vídeos devueltos por Invidious no se reproducen debido a
+ restricciones nacionales.
Scroll Playback Rate Over Video Player: Cuando el cursor esté sobre el vídeo,
presiona y mantén la tecla Control (Comando en Mac) y desplaza la rueda del
ratón hacia arriba o abajo para cambiar la velocidad de reproducción. Presiona
@@ -1183,12 +1187,6 @@ Channels:
Unsubscribe: Cancelar la suscripción
Unsubscribed: '{channelName} ha sido eliminado de tus suscripciones'
Unsubscribe Prompt: ¿Está seguro/segura de querer desuscribirse de «{channelName}»?
-Age Restricted:
- Type:
- Channel: Canal
- Video: Vídeo
- This {videoOrPlaylist} is age restricted: Este {videoOrPlaylist} tiene restricción
- de edad
Clipboard:
Copy failed: Error al copiar al portapapeles
Cannot access clipboard without a secure connection: No se puede acceder al portapapeles
@@ -1215,3 +1213,7 @@ Channel Unhidden: '{channel} eliminado del filtro de canales'
Tag already exists: La etiqueta "{tagName}" ya existe
Trimmed input must be at least N characters long: La entrada recortada debe tener
al menos 1 carácter | La entrada recortada debe tener al menos {length} caracteres
+Close Banner: Cerrar el banner
+Age Restricted:
+ This channel is age restricted: Este canal está restringido por edad
+ This video is age restricted: Este vídeo está restringido por edad
diff --git a/static/locales/et.yaml b/static/locales/et.yaml
index c70d8e3072a68..8a375cdb3993c 100644
--- a/static/locales/et.yaml
+++ b/static/locales/et.yaml
@@ -161,6 +161,7 @@ User Playlists:
Select a playlist to add your N videos to: Vali esitusloend, kuhu soovid oma video
lisada | Vali esitusloend, kuhu soovid oma {videoCount} videot lisada
N playlists selected: '{playlistCount} valitud'
+ Added {count} Times: Lisatud {count} kord | Lisatud {count} korda
SinglePlaylistView:
Toast:
There were no videos to remove.: Ei leidnud ühtegi videot, mida saaks eemaldada.
@@ -286,6 +287,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastelne roosa
Hot Pink: Säravroosa
+ Nordic: Põhjala
Main Color Theme:
Main Color Theme: 'Põhiline värviteema'
Red: 'Punane'
@@ -496,7 +498,7 @@ Settings:
Hide Channels: Peida kanalites leiduvad videod
Hide Channels Placeholder: Kanali tunnus
Display Titles Without Excessive Capitalisation: Näita pealkirju ilma liigsete
- suurtähtedeta
+ suurtähtede ja kirjavahemärkideta
Sections:
General: Üldist
Side Bar: Külgpaan
@@ -883,6 +885,7 @@ Video:
Pause on Current Video: Peata hetkel esitatav video
Unhide Channel: Näita kanalit
Hide Channel: Peida kanal
+ More Options: Veel valikuid
Videos:
#& Sort By
Sort By:
@@ -963,7 +966,7 @@ Up Next: 'Järgmisena'
Local API Error (Click to copy): 'Kohaliku API viga (kopeerimiseks klõpsi)'
Invidious API Error (Click to copy): 'Invidious''e API viga (kopeerimiseks klõpsi)'
Falling back to Invidious API: 'Varuvariandina kasutan Invidious''e API''t'
-Falling back to the local API: 'Varuvariandina kasutan kohalikku API''t'
+Falling back to Local API: 'Varuvariandina kasutan kohalikku API''t'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Kuna
vajalikke vorminguid ei leidu, siis see video pole saadaval. Niisugune viga võib
juhtuda ka maapiirangute tõttu.'
@@ -1092,11 +1095,6 @@ Channels:
Unsubscribe: Loobu tellimusest
Unsubscribed: '{channelName} on sinu tellimustest eemaldatud'
Unsubscribe Prompt: Kas oled kindel, et soovid „{channelName}“ tellimusest loobuda?
-Age Restricted:
- This {videoOrPlaylist} is age restricted: See {videoOrPlaylist} on vanusepiiranguga
- Type:
- Channel: Kanal
- Video: Video
Screenshot Success: Kuvatõmmis on salvestatud faili „{filePath}“
Clipboard:
Copy failed: Lõikelauale kopeerimine ei õnnestunud
@@ -1124,3 +1122,7 @@ Channel Unhidden: '{channel} on eemaldatud kanalite filtrist'
Tag already exists: Silt „{tagName}“ on juba olemas
Trimmed input must be at least N characters long: Kärbitud sisend peab olema vähemalt
1 tähemärgi pikkune | Kärbitud sisend peab olema vähemalt {length} tähemärgi pikkune
+Age Restricted:
+ This channel is age restricted: Kanali vaatamisel on vanusepiirang
+ This video is age restricted: Video vaatamisel on vanusepiirang
+Close Banner: Sulge rekaampilt
diff --git a/static/locales/eu.yaml b/static/locales/eu.yaml
index 206b613e3f36a..1c5f78063fecb 100644
--- a/static/locales/eu.yaml
+++ b/static/locales/eu.yaml
@@ -34,6 +34,17 @@ Forward: 'Aurrera'
Global:
Videos: 'Bideoak'
+ Counts:
+ Subscriber Count: 1.harpideduna| {count} harpidedun
+ Watching Count: 1. ikuslea | {count} ikusle
+ Channel Count: 1. kanala ! {count} kanal
+ Video Count: 1. bideoa | {count} bideo
+ View Count: 1. ikustaldia | {count} ikustaldi
+ Live: Zuzenekoa
+ Shorts: Laburrak
+ Input Tags:
+ Length Requirement: Etiketak {zenbaki} karaktere izan behar ditu gutxienez
+ Community: Komunitatea
Version {versionNumber} is now available! Click for more details: '{versionNumber}
bertsioa erabilgarri! Klikatu azalpen gehiagorako'
Download From Site: 'Webgunetik jaitsi'
@@ -90,6 +101,14 @@ Subscriptions:
Refresh Subscriptions: 'Harpidetzak freskatu'
Load More Videos: 'Bideo gehiago kargatu'
Error Channels: Akatsak dituzten kateak
+ Disabled Automatic Fetching: Harpidetza-bilaketa automatikoa desgaitu duzu. Freskatu
+ harpidetzak hemen ikusteko.
+ Empty Channels: Harpidetutako kanalek ez dute bideorik.
+ Empty Posts: Harpidetutako kanalek ez dute argitalpenik.
+ Load More Posts: Kargatu mezu gehiago
+ Subscriptions Tabs: Harpidetzen fitxak
+ All Subscription Tabs Hidden: Harpidetza fitxa guztiak ezkutatuta daude. Hemen edukia
+ ikusteko, erakutsi fitxa batzuk "{azpisection}" ataleko "{settingsSection}"-ean.
More: 'Gehiago'
Trending:
Trending: 'Joerak'
@@ -111,6 +130,99 @@ User Playlists:
Search bar placeholder: Bilatu Erreprodukzio-zerrendan
Empty Search Message: Erreprodukzio-zerrenda honetan ez dago zure bilaketarekin
bat datorren bideorik
+ Remove Watched Videos: Kendu ikusitako bideoak
+ You have no playlists. Click on the create new playlist button to create a new one.: Ez
+ duzu erreprodukzio-zerrendarik. Egin klik sortu erreprodukzio-zerrenda berria
+ botoian berri bat sortzeko.
+ This playlist currently has no videos.: Erreprodukzio-zerrenda honek ez du bideorik.
+ Create New Playlist: Sortu erreprodukzio zerrenda berria
+ Add to Playlist: Gehitu erreprodukzio zerrendara
+ Add to Favorites: Gehitu {playlistName}-ra
+ Remove from Favorites: Kendu {playlistName}tik
+ Move Video Up: Mugitu bideoa gora
+ Move Video Down: Mugitu bideoa behera
+ Remove from Playlist: Kendu erreprodukzio zerrendatik
+ Playlist Name: Erreprodukzio zerrendaren izena
+ Playlist Description: Erreprodukzio-zerrendaren deskribapena
+ Save Changes: Gorde aldaketak
+ Cancel: Utzi
+ Edit Playlist Info: Editatu erreprodukzio zerrendaren informazioa
+ Copy Playlist: Kopiatu Erreprodukzio zerrenda
+ CreatePlaylistPrompt:
+ New Playlist Name: Erreprodukzio-zerrendaren izen berria
+ Toast:
+ Playlist {playlistName} has been successfully created.: '{playlistName} erreprodukzio-zerrenda
+ behar bezala sortu da.'
+ There was an issue with creating the playlist.: Arazo bat izan da erreprodukzio-zerrenda
+ sortzearekin.
+ There is already a playlist with this name. Please pick a different name.: Badago
+ dagoeneko izen honekin erreprodukzio-zerrenda bat. Mesedez, aukeratu beste
+ izen bat.
+ Create: Sortu
+ Enable Quick Bookmark With This Playlist: Gaitu laster-marka azkarra erreprodukzio-zerrenda
+ honekin
+ Disable Quick Bookmark: Desgaitu laster-marka azkarra
+ Sort By:
+ NameDescending: Z-A
+ LatestCreatedFirst: Sortu berria
+ EarliestCreatedFirst: Lehenen sortuak
+ LatestPlayedFirst: Duela gutxi erreproduzitua
+ EarliestPlayedFirst: Lehenen erreproduzitua
+ Sort By: Ordenatu honen arabera
+ NameAscending: A-Z
+ EarliestUpdatedFirst: Lehenen eguneratuak
+ LatestUpdatedFirst: Eguneratu berriak
+ Delete Playlist: Ezabatu erreprodukzio zerrenda
+ Are you sure you want to delete this playlist? This cannot be undone: Ziur erreprodukzio-zerrenda
+ ezabatu nahi duzula? Hau ezin da desegin.
+ SinglePlaylistView:
+ Toast:
+ Playlist has been updated.: Erreprodukzio-zerrenda eguneratu da.
+ "{videoCount} video(s) have been removed": bideo 1 kendu da | {videoCount} bideo
+ kendu dira
+ This video cannot be moved up.: Bideo hau ezin da gora eraman.
+ This video cannot be moved down.: Bideoa ezin da behera eraman.
+ Video has been removed: Bideoa kendu da
+ There was a problem with removing this video: Arazo bat izan da bideoa kentzean
+ This playlist is now used for quick bookmark: Erreprodukzio-zerrenda hau laster-markak
+ egiteko erabiltzen da orain
+ Quick bookmark disabled: Laster-marka azkarra desgaituta dago
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Erreprodukzio-zerrenda
+ hau laster-marketarako erabiltzen da orain {oldPlaylistName}-ren ordez. Egin
+ klik hemen desegiteko
+ Reverted to use {oldPlaylistName} for quick bookmark: '{oldPlaylistName} erabili
+ da berriro azkar markatzeko'
+ Some videos in the playlist are not loaded yet. Click here to copy anyway.: Erreprodukzio-zerrendako
+ bideo batzuk oraindik ez dira kargatu. Egin klik hemen kopiatzeko hala ere.
+ Playlist name cannot be empty. Please input a name.: Erreprodukzio zerrendaren
+ izena ezin da hutsik egon. Mesedez, idatzi izena.
+ There was an issue with updating this playlist.: Arazo bat izan da erreprodukzio-zerrenda
+ eguneratzean.
+ There were no videos to remove.: Ez zegoen kentzeko bideorik.
+ This playlist is protected and cannot be removed.: Erreprodukzio-zerrenda hau
+ babestuta dago eta ezin da kendu.
+ Playlist {playlistName} has been deleted.: '{playlistName} erreprodukzio-zerrenda
+ ezabatu da.'
+ This playlist does not exist: Erreprodukzio-zerrenda hau ez da existitzen
+ AddVideoPrompt:
+ Added {count} Times: Gehitu da {count} Time | {count} aldiz gehitu da
+ Toast:
+ "{videoCount} video(s) added to 1 playlist": Bideo 1 gehitu da erreprodukzio-zerrenda
+ batera | {videoCount} bideo gehitu dira erreprodukzio-zerrenda batera
+ You haven't selected any playlist yet.: Oraindik ez duzu erreprodukzio zerrendarik
+ hautatu.
+ "{videoCount} video(s) added to {playlistCount} playlists": Bideo 1 gehitu da
+ {playlistCount} erreprodukzio zerrendetan | {videoCount} bideo gehitu dira
+ {playlistCount} erreprodukzio-zerrendetan
+ Select a playlist to add your N videos to: Hautatu erreprodukzio-zerrenda zure
+ bideoa -ra gehitzeko | Hautatu erreprodukzio-zerrenda zure {videoCount} bideoak
+ gehitzeko
+ N playlists selected: '{playlistCount} hautatuta'
+ Search in Playlists: Bilatu erreprodukzio-zerrendetan
+ Save: Gorde
+ Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Ziur
+ ikusitako bideo guztiak erreprodukzio-zerrenda honetatik kendu nahi dituzula?
+ Hau ezin da desegin.
History:
# On History Page
History: 'Historikoa'
@@ -147,6 +259,8 @@ Settings:
Beginning: 'Hasiera'
Middle: 'Erdian'
End: 'Bukaera'
+ Hidden: Ezkutatuta
+ Blur: Lausotzea
View all Invidious instance information: 'Invidious instantzia guztien informazioa
ikusi'
Region for Trending: 'Joeren eskualdea'
@@ -179,6 +293,9 @@ Settings:
Dracula: Drakula
System Default: Sistemak lehenetsia
Catppuccin Mocha: Catppuccin Motxa
+ Nordic: nordikoa
+ Pastel Pink: Pastel arrosa
+ Hot Pink: Arrosa beroa
Main Color Theme:
Main Color Theme: 'Oinarrizko koloreen gaia'
Red: 'Gorria'
@@ -221,6 +338,7 @@ Settings:
Secondary Color Theme: 'Gaiaren bigarren mailako kolorea'
#* Main Color Theme
Hide Side Bar Labels: Ezkutatu alboko barraren etiketak
+ Hide FreeTube Header Logo: Ezkutatu FreeTube goiburuko logotipoa
Player Settings:
Player Settings: 'Erreprodukzioaren ezarpenak'
Force Local Backend for Legacy Formats: 'Behartu backend lokala Legacy formatuentzat'
@@ -272,6 +390,11 @@ Settings:
Display Play Button In Video Player: Bistaratu Erreproduzitzeko botoia bideo erreproduzitzailean
Max Video Playback Rate: Gehienezko bideoen erreprodukzio-tasa
Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea
+ Comment Auto Load:
+ Comment Auto Load: Iruzkin karga automatikoa
+ Skip by Scrolling Over Video Player: Saltatu bideo-erreproduzitzailean korrituz
+ Enter Fullscreen on Display Rotate: Sartu pantaila osoko pantaila biratu pantailan
+ Allow DASH AV1 formats: Baimendu DASH AV1 formatuak
Privacy Settings:
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
Remember History: 'Historikoa oroitu'
@@ -289,11 +412,20 @@ Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: 'Ziur
al zaude zure profil eta harpidetza guztiak ezabatu nahi dituzula? Ezingo duzu
atzera egin.'
+ All playlists have been removed: Erreprodukzio-zerrenda guztiak kendu dira
+ Save Watched Videos With Last Viewed Playlist: Gorde ikusitako bideoak ikusitako
+ azken erreprodukzio-zerrendarekin
+ Remove All Playlists: Kendu erreprodukzio-zerrenda guztiak
+ Are you sure you want to remove all your playlists?: Ziur erreprodukzio-zerrenda
+ guztiak kendu nahi dituzula?
Subscription Settings:
Subscription Settings: 'Harpidetzen ezarpenak'
Hide Videos on Watch: 'Ikusten ari zaren bideoa ezkutatu'
Fetch Feeds from RSS: 'RSS jarioak eskuratu'
Manage Subscriptions: 'Harpidetzak kudeatu'
+ Fetch Automatically: Eskuratu jarioa automatikoki
+ Only Show Latest Video for Each Channel: Erakutsi soilik kanal bakoitzeko azken
+ bideoa
Distraction Free Settings:
Distraction Free Settings: 'Oharkabetasunak ekiditeko ezarpenak'
Hide Video Views: 'Bideoen ikustaldi kopurua ezkutatu'
@@ -310,6 +442,38 @@ Settings:
Hide Video Description: Bideoaren deskribapena ezkutatu
Hide Comments: Iruzkinak ezkutatu
Hide Live Streams: Zuzeneko emanaldiak ezkutatu
+ Sections:
+ Side Bar: Alboko Barra
+ Subscriptions Page: Harpidetzak Orria
+ Channel Page: Kanalaren Orria
+ General: Orokorra
+ Watch Page: Ikusi Orria
+ Hide Profile Pictures in Comments: Ezkutatu profileko argazkiak iruzkinetan
+ Display Titles Without Excessive Capitalisation: Bistaratu izenburuak gehiegizko
+ letra larriz eta puntuaziorik gabe
+ Hide Channels Placeholder: Kanalaren IDa
+ Hide Channel Playlists: Ezkutatu kanaleko erreprodukzio-zerrendak
+ Hide Channel Community: Ezkutatu kanalaren komunitatea
+ Hide Channel Podcasts: Ezkutatu kanaleko podcastak
+ Hide Videos and Playlists Containing Text: Ezkutatu testua duten bideoak eta erreprodukzio-zerrendak
+ Hide Channels: Ezkutatu bideoak kanaletatik
+ Hide Upcoming Premieres: Ezkutatu datozen estreinaldiak
+ Hide Subscriptions Videos: Ezkutatu harpidetza-bideoak
+ Hide Subscriptions Shorts: Ezkutatu bideo laburren harpidetzak
+ Hide Channel Releases: Ezkutatu kanalen kaleratzeak
+ Hide Chapters: Ezkutatu kapituluak
+ Hide Channels Invalid: Emandako kanalaren IDa baliogabea da
+ Hide Channels API Error: Errore bat gertatu da emandako IDa duen erabiltzailea
+ berreskuratzean. Mesedez, egiaztatu berriro IDa zuzena den.
+ Hide Channels Already Exists: Kanalaren IDa badago jada
+ Hide Channel Shorts: Ezkutatu kanalaren bideo laburrak
+ Hide Videos and Playlists Containing Text Placeholder: Hitza, Hitzaren zatia edo
+ esaldia
+ Hide Subscriptions Live: Ezkutatu zuzenekoen harpidetzak
+ Hide Subscriptions Community: Ezkutatu harpidetzen komunitateak
+ Hide Featured Channels: Ezkutatu nabarmendutako kanalak
+ Hide Channels Disabled Message: Kanal batzuk IDa erabiliz blokeatu dira eta ez
+ dira prozesatu. Eginbidea blokeatuta dago ID horiek eguneratzen ari diren bitartean
Data Settings:
Data Settings: 'Datuen ezarpenak'
Select Import Type: 'Hautatu Inportazio mota'
@@ -357,6 +521,18 @@ Settings:
esportatu dira
Playlist insufficient data: Ez da datu nahikorik "{playlist}" erreprodukzio zerrendarentzat,
elementutik ateratzen
+ History File: Historikoaren fitxategia
+ Playlist File: Erreprodukzio-zerrendaren fitxategia
+ Export Playlists For Older FreeTube Versions:
+ Label: Esportatu erreprodukzio zerrendak FreeTube bertsio zaharretarako
+ Tooltip: "Aukera honek erreprodukzio-zerrenda guztietako bideoak \"Gogokoak\"\
+ \ izeneko erreprodukzio-zerrenda batera esportatzen ditu.\nNola esportatu
+ eta inportatu bideoak erreprodukzio-zerrendetan FreeTube-ren bertsio zaharrago
+ baterako:\n 1. Esportatu zure erreprodukzio zerrendak aukera hau gaituta.\n
+ 2. Ezabatu lehendik dituzun erreprodukzio-zerrenda guztiak Pribatutasun-ezarpenetan
+ dagoen Kendu zerrenda guztiak aukera erabiliz.\n 3. Abiarazi FreeTube-ren
+ bertsio zaharra eta inportatu esportatutako erreprodukzio-zerrendak.\""
+ Subscription File: Harpidetza Fitxategia
Proxy Settings:
Proxy Settings: 'Proxy-aren ezarpenak'
Enable Tor / Proxy: 'Tor / Proxy ahalbidetu'
@@ -381,6 +557,10 @@ Settings:
External Player: Kanpoko erreproduzitzailea
Custom External Player Executable: Lehenetsitako kanpo erreproduzitzailea exekutagarria
Custom External Player Arguments: Lehenetsitako kanpo erreproduzitzailea argudioak
+ Ignore Default Arguments: Ez ikusi lehenetsitako argudioak
+ Players:
+ None:
+ Name: Bat ere ez
Download Settings:
Download Settings: Deskargen ezarpenak
Ask Download Path: Deskargaren ibilbidea galdetu
@@ -402,11 +582,31 @@ Settings:
'SponsorBlock API Url (Default is https://sponsor.ajay.app)': Babesleak blokeatzeko
API Url (lehenetsia https://sponsor.ajay.app da)
SponsorBlock Settings: Babesleak blokeatzeko ezarpenak
+ UseDeArrowTitles: Erabili DeArrow bideo-izenburuak
+ UseDeArrowThumbnails: Erabili DeArrow irudi txikietarako
+ 'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': DeArrow
+ Thumbnail Generator API URLa (lehenetsia https://dearrow-thumb.ajay.app da)
Parental Control Settings:
Show Family Friendly Only: Erakutsi familientzat aproposa dena bakarrik
Hide Unsubscribe Button: Harpidetza kendu botoia ezkutatu
Parental Control Settings: Gurasoen kontrolaren ezarpenak
Hide Search Bar: Bilaketa barra ezkutatu
+ Password Dialog:
+ Password: Pasahitza
+ Password Incorrect: Pasahitza okerra
+ Unlock: Desblokeatu
+ Enter Password To Unlock: Sartu pasahitza ezarpenak desblokeatzeko
+ Experimental Settings:
+ Replace HTTP Cache: Ordeztu HTTP cachea
+ Experimental Settings: Ezarpen esperimentalak
+ Warning: Ezarpen hauek esperimentalak dira, aktibatuta dauden bitartean hutsegiteak
+ eragin ditzakete. Oso gomendagarria da babeskopiak egitea. Erabili zure ardurapean!
+ Password Settings:
+ Password Settings: Pasahitz ezarpenak
+ Set Password To Prevent Access: Ezarri pasahitz bat ezarpenetara sarbidea galarazteko
+ Remove Password: Pasahitza ezabatu
+ Set Password: Ezarri pasahitza
+ Expand All Settings Sections: Zabaldu ezarpen guztien atalak
About:
#On About page
About: 'Honi buruz'
@@ -436,6 +636,7 @@ About:
these people and projects: 'Hurrengo pertsonak eta proiektuak'
Donate: 'Donazioa egin'
+ Discussions: Eztabaidak
Profile:
Profile Select: 'Hautatu profila'
Profile Filter: 'Profilaren iragazkiak'
@@ -480,6 +681,12 @@ Profile:
batetik ezabatuko.'
#On Channel Page
Profile Settings: Profilaren ezarpenak
+ Close Profile Dropdown: Itxi goitibeherako profila
+ Open Profile Dropdown: Ireki goitibeherako profila
+ Toggle Profile List: Aldatu profilen zerrenda
+ Edit Profile Name: Editatu profilaren izena
+ Create Profile Name: Sortu profilaren izena
+ Profile Name: Profilaren izena
Channel:
Subscribe: 'Harpidetu'
Unsubscribe: 'Harpidetza kendu'
@@ -510,6 +717,39 @@ Channel:
About: 'Honi buruz'
Channel Description: 'Kanalaren deskribapena'
Featured Channels: 'Nabarmendutako kanalak'
+ Joined: Bat eginda
+ Location: Kokapena
+ Tags:
+ Tags: Etiketak
+ Search for: Bilatu "{tag}"
+ Details: Xehetasunak
+ This channel does not exist: Kanal hau ez da existitzen
+ This channel is age-restricted and currently cannot be viewed in FreeTube.: Kanal
+ hau adin mugatuta dago eta une honetan ezin da ikusi FreeTube-n.
+ Shorts:
+ This channel does not currently have any shorts: Une honetan kanal honek ez du
+ bideo laburrik
+ Releases:
+ This channel does not currently have any releases: Une honetan kanal honek ez
+ du argitalpenik
+ Releases: Argitalpenak
+ Community:
+ Hide Answers: Erantzunak ezkutatu
+ votes: '{votes} bozka'
+ This channel currently does not have any posts: Une honetan kanal honek ez du
+ argitalpenik
+ Reveal Answers: Erantzunak agerian utzi
+ Video hidden by FreeTube: FreeTube-k ezkutatutako bideoa
+ Channel Tabs: Kanalaren fitxak
+ This channel does not allow searching: Kanal honek ez du bilaketarik onartzen
+ Live:
+ Live: Zuzenekoak
+ This channel does not currently have any live streams: Kanal honek ez du zuzeneko
+ erreprodukziorik
+ Podcasts:
+ Podcasts: Podcastak
+ This channel does not currently have any podcasts: Une honetan kanal honek ez
+ du podcastik
Video:
Mark As Watched: 'Ikusitako gisa jarri'
Remove From History: 'Historikotik ezabatu'
@@ -592,6 +832,7 @@ Video:
Years: 'Urteak'
Ago: 'Duela'
Upcoming: 'Estreinaldiak'
+ In less than a minute: Minutu bat baino gutxiagoan
Published on: 'Noiz argitaratua'
Streamed on: 'Noiz zuzenean emana'
Started streaming on: 'Noiz hasi zen zuzenekoa'
@@ -636,6 +877,16 @@ Video:
intro: Sarrera
Skipped segment: Saltatu egin da segmentua
Premieres on: Estreinaldiak
+ Hide Channel: Kanala ezkutatu
+ Unhide Channel: Kanala erakutsi
+ Premieres: Estreinaldiak
+ 'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Zuzeneko
+ txata ez dago erabilgarri zuzeneko honentzat. Baliteke igo duenak desgaitu izana.
+ Show Super Chat Comment: Erakutsi Super txat iruzkina
+ Pause on Current Video: Gelditu uneko bideoa
+ More Options: Aukera gehiago
+ Upcoming: Datozenak
+ Scroll to Bottom: Joan Beherantz
Videos:
#& Sort By
Sort By:
@@ -685,6 +936,7 @@ Share:
YouTube Channel URL copied to clipboard: 'Youtube-ko kanalaren URL-a arbelean itsatsi
da'
+ Share Channel: Kanala partekatu
Mini Player: 'Erreproduzitzaile txikia'
Comments:
Comments: 'Iruzkinak'
@@ -710,6 +962,10 @@ Comments:
Show More Replies: Erantzun gehiago erakutsi
And others: eta bestelakoak
Pinned by: Honengatik ainguratuta
+ Hearted: Bihotzez
+ From {channelName}: '{channelName}-tik'
+ View {replyCount} replies: Ikusi {replyCount} erantzunak
+ Subscribed: Harpidetuta
Up Next: 'Hurrengoa'
#Tooltips
@@ -749,11 +1005,19 @@ Tooltips:
eta mantendu (Komando tekla MAC-etan) eta ondoren saguaren ezkerreko botoia
sakatu, lehenetsitako erreprodukzio tasara itzultzeko (1x baldin eta ezarpenetan
aldaketarik egin ez bada).
+ Skip by Scrolling Over Video Player: Erabili korritze-gurpila bideoa saltatzeko,
+ MPV estiloa.
+ Allow DASH AV1 formats: DASH AV1 formatuak DASH H.264 formatuak baino itxura hobea
+ izan dezake. DASH AV1 formatuek potentzia gehiago behar dute erreproduzitzeko!
+ Ez daude bideo guztietan eskuragarri, kasu horietan erreproduzitzaileak DASH
+ H.264 formatuak erabiliko ditu ordez.
Subscription Settings:
Fetch Feeds from RSS: 'Posible denean, Freetube-k bere lehenetsitako metodoa erabili
beharrean RSS-ak baliatuko ditu zure harpidetzen jariora konektatzeko. RSS arinagoa
izateaz gain, IP-en blokeoak saihesten ditu. Aldiz, zuzenekoaren egoeraren edo
bideoaren iraupenaren informaziorik ez du ematen, besteak beste'
+ Fetch Automatically: Gaituta dagoenean, FreeTubek automatikoki eskuratuko du zure
+ 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
@@ -772,11 +1036,34 @@ Tooltips:
Individious-en ezarpenek ez dituzte kanpo erreproduzitzaileak trabatzen.
Custom External Player Arguments: Komando-lerroko argumentu pertsonalizatuak,
puntu eta komaz bereizita (';'), kanpoko erreproduzitzailera pasatzea nahi duzu.
+ Ignore Default Arguments: Ez bidali argumentu lehenetsirik kanpoko erreproduzitzaileari
+ bideoaren URLaz gain (adibidez, erreprodukzio-tasa, erreprodukzio-zerrendaren
+ URLa, etab.). Argumentu pertsonalizatuak transmitituko dira oraindik.
+ Distraction Free Settings:
+ Hide Channels: Sartu kanalaren ID bat bideo, erreprodukzio-zerrenda eta kanala
+ bera bilaketetan, joeran, ezagunenetan eta gomendagarrienetan ager ez dadin
+ ezkutatzeko. Sartutako kanalaren IDak guztiz bat etorri behar du eta maiuskulak
+ eta minuskulak bereizten ditu.
+ Hide Videos and Playlists Containing Text: Idatzi hitz bat, hitz-zati bat edo
+ esaldi bat (maiuskulak eta minuskulak bereizten ez diren) jatorrizko izenburuak
+ FreeTube osoan duten bideo eta erreprodukzio-zerrenda guztiak ezkutatzeko, historia,
+ zure erreprodukzio-zerrendak eta erreprodukzio-zerrenden barneko bideoak soilik
+ kenduta.
+ Hide Subscriptions Live: Ezarpen hau aplikazio osorako "{appWideSetting}" ezarpenak
+ ordezkatzen du, "{settingsSection}" ataleko "{azpisekzioa}" atalean
+ Experimental Settings:
+ Replace HTTP Cache: Electron-en diskoan oinarritutako HTTP cachea desgaitzen du
+ eta memoriako irudien cache pertsonalizatua gaitu. RAM erabilera handitzea ekarriko
+ du.
+ SponsorBlock Settings:
+ UseDeArrowThumbnails: Ordeztu bideoaren miniaturak DeArrow-en miniaturaz.
+ UseDeArrowTitles: Ordeztu bideoen izenburuak DeArrow-en erabiltzaileek bidalitako
+ tituluekin.
Local API Error (Click to copy): 'Tokiko API-ak huts egin du (klikatu kopiatzeko)'
Invidious API Error (Click to copy): 'Individious-eko APIak huts egin du (klikatu
kopiatzeko)'
Falling back to Invidious API: 'Individious-eko APIra itzultzen'
-Falling back to the local API: 'Tokiko APIra itzultzen'
+Falling back to Local API: 'Tokiko APIra itzultzen'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Bideo
hau ez dago erabilgarri, zenbait formatu eskas baitira. Honakoa zure herrialdean
erabilgarri ez dagoelako gerta daiteke.'
@@ -827,9 +1114,34 @@ Channels:
Unsubscribe Prompt: Ziur al zaude "{channelName}"-ren harpidetza kendu nahi duzula?
Count: '{number} kanal aurkitu dira.'
Empty: Zure kanalen zerrenda hutsik da.
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Honako {videoOrPlaylist} adin muga du
- Type:
- Channel: Kanala
- Video: Bideoa
Preferences: Hobespenak
+Go to page: Joan {page}-ra
+Close Banner: Itxi iragarkia
+Age Restricted:
+ This channel is age restricted: Kanal hau adin mugatuta dago
+ This video is age restricted: Bideo hau adin mugatuta dago
+Playlist will not pause when current video is finished: Erreprodukzio-zerrenda ez
+ da etengo uneko bideoa amaitzen denean
+Playlist will pause when current video is finished: Erreprodukzio-zerrenda pausatu
+ egingo da uneko bideoa amaitzen denean
+Channel Unhidden: '{channel} kanalaren iragazkitik kendu da'
+Clipboard:
+ Cannot access clipboard without a secure connection: Ezin da arbelera sartu konexio
+ segururik gabe
+ Copy failed: Ezin izan da kopiatu arbelean
+Tag already exists: '"{tagName}" etiketa badago jada'
+Trimmed input must be at least N characters long: Moztutako sarrerak karaktere bat
+ izan behar du gutxienez | Moztutako sarrerak gutxienez {length} karaktere izan behar
+ ditu
+Chapters:
+ 'Chapters list hidden, current chapter: {chapterName}': 'Kapituluen zerrenda ezkutatuta
+ dago, uneko kapitulua: {chapterName}'
+ Chapters: Kapituluak
+ 'Chapters list visible, current chapter: {chapterName}': 'Kapituluen zerrenda ikusgai,
+ uneko kapitulua: {chapterName}'
+Hashtag:
+ Hashtag: Traola
+ This hashtag does not currently have any videos: Traola honek ez du bideorik une
+ honetan
+Ok: Ados
+Channel Hidden: '{channel} gehitu da kanalaren iragazkian'
diff --git a/static/locales/fa.yaml b/static/locales/fa.yaml
index fd125828790af..7d62641c54218 100644
--- a/static/locales/fa.yaml
+++ b/static/locales/fa.yaml
@@ -900,12 +900,6 @@ Screenshot Success: اسکرین شات به عنوان «{filePath}» ذخیر
Ok: تایید
Downloading has completed: دانلود '{videoTitle}' به پایان رسید
Loop is now enabled: حلقه اکنون فعال است
-Age Restricted:
- Type:
- Video: ویدیو
- Channel: کانال
- This {videoOrPlaylist} is age restricted: این {videoOrPlaylist} دارای محدودیت سنی
- است
Shuffle is now enabled: Shuffle اکنون فعال است
Falling back to Invidious API: بازگشت به Invidious API
Local API Error (Click to copy): خطای Local API (برای کپی کلیک کنید)
@@ -913,7 +907,7 @@ Shuffle is now disabled: Shuffle اکنون غیرفعال است
Canceled next video autoplay: پخش خودکار ویدیوی بعدی لغو شد
Unknown YouTube url type, cannot be opened in app: نوع URL ناشناخته YouTube، در برنامه
باز نمی شود
-Falling back to the local API: بازگشت به API محلی
+Falling back to Local API: بازگشت به API محلی
This video is unavailable because of missing formats. This can happen due to country unavailability.: این
ویدیو به دلیل عدم وجود قالب در دسترس نیست. این ممکن است به دلیل در دسترس نبودن کشور
اتفاق بیفتد.
diff --git a/static/locales/fi.yaml b/static/locales/fi.yaml
index a141cd51d5d8b..9bd141deb8442 100644
--- a/static/locales/fi.yaml
+++ b/static/locales/fi.yaml
@@ -175,6 +175,7 @@ User Playlists:
on luotu.
Add to Favorites: Lisää soittolistaan {playlistName}
Remove from Favorites: Poista soittolistalta {playlistName}
+ Remove Watched Videos: Poista katsotut videot
History:
# On History Page
History: 'Historia'
@@ -903,7 +904,7 @@ Up Next: 'Seuraavaksi'
Local API Error (Click to copy): 'Paikallinen API-virhe (Kopioi napsauttamalla)'
Invidious API Error (Click to copy): 'Invidious API-virhe (Kopioi napsauttamalla)'
Falling back to Invidious API: 'Palaa takaisin Invidious-sovellusliittymään'
-Falling back to the local API: 'Palaa takaisin paikalliseen sovellusliittymään'
+Falling back to Local API: 'Palaa takaisin paikalliseen sovellusliittymään'
Subscriptions have not yet been implemented: 'Tilauksia ei ole vielä jalkautettu'
Loop is now disabled: 'Silmukka on poistettu käytöstä'
Loop is now enabled: 'Silmukka on nyt käytössä'
@@ -1063,11 +1064,6 @@ Downloading has completed: Videon "{videoTitle}" lataus on valmis
Starting download: Aloitetaan lataamaan "{videoTitle}"
Screenshot Success: Kuvakaappaus tallennettu nimellä ”{filePath}”
New Window: Uusi Ikkuna
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Tämä {videoOrPlaylist} on ikärajoitettu
- Type:
- Video: Video
- Channel: Kanava
Screenshot Error: Ruutukaappaus epäonnistui. {error}
Channels:
Channels: Kanavat
diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml
index 242445b0a6335..2fbb3856c1067 100644
--- a/static/locales/fr-FR.yaml
+++ b/static/locales/fr-FR.yaml
@@ -145,9 +145,10 @@ User Playlists:
You haven't selected any playlist yet.: Vous n'avez pas encore sélectionné de
liste de lecture.
"{videoCount} video(s) added to {playlistCount} playlists": 1 vidéo ajoutée
- à {playlistCount} liste de lecture | {videoCount} vidéos ajoutées à {playlistCount}
- listes de lecture.
+ à {playlistCount} listes de lecture | {videoCount} vidéos ajoutées à {playlistCount}
+ listes de lecture
N playlists selected: '{playlistCount} Sélectionnée(s)'
+ Added {count} Times: Ajouté {count} Fois | Ajouté {count} Fois
SinglePlaylistView:
Toast:
There were no videos to remove.: Il n'y avait aucune vidéo à supprimer.
@@ -299,6 +300,7 @@ Settings:
Catppuccin Mocha: Catppuccin Moka
Pastel Pink: Rose pastel
Hot Pink: Rose vif
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Couleur principale du thème'
Red: 'Rouge'
@@ -467,7 +469,7 @@ Settings:
sûr(e) de vouloir supprimer tous les abonnements et les profils ? Cette action
est définitive.
Remove All Subscriptions / Profiles: Supprimer tous les Abonnements / Profils
- Automatically Remove Video Meta Files: Suppression automatiquement les métafichiers
+ 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
avec la dernière liste de lecture vue
@@ -556,7 +558,7 @@ Settings:
Hide Channels: Masquer les vidéos des chaînes
Hide Channels Placeholder: Identifiant de la chaîne
Display Titles Without Excessive Capitalisation: Afficher les titres sans majuscules
- excessives
+ ni ponctuation excessives
Hide Channel Playlists: Masquer les listes de lecture des chaînes
Hide Featured Channels: Masquer les chaînes en vedette
Hide Channel Community: Masquer la communauté de la chaîne
@@ -945,6 +947,7 @@ Video:
Pause on Current Video: Pause sur la vidéo en cours
Hide Channel: Cacher la chaîne
Unhide Channel: Rétablir la chaîne
+ More Options: Plus d'options
Videos:
#& Sort By
Sort By:
@@ -1029,7 +1032,7 @@ Up Next: 'À suivre'
Local API Error (Click to copy): 'Erreur d''API locale (Cliquez pour copier)'
Invidious API Error (Click to copy): 'Erreur d''API Invidious (Cliquez pour copier)'
Falling back to Invidious API: 'Revenir à l''API Invidious'
-Falling back to the local API: 'Revenir à l''API locale'
+Falling back to Local API: 'Revenir à l''API locale'
Subscriptions have not yet been implemented: 'Les abonnements n''ont pas encore été
implémentés'
Loop is now disabled: 'La boucle est maintenant désactivée'
@@ -1225,12 +1228,6 @@ Download folder does not exist: 'Le répertoire "$" de téléchargement n''exist
Screenshot Success: Capture d'écran enregistrée sous « {filePath} »
Screenshot Error: La capture d'écran a échoué. {error}
New Window: Nouvelle fenêtre
-Age Restricted:
- Type:
- Video: Vidéo
- Channel: Chaîne
- This {videoOrPlaylist} is age restricted: Ce {videoOrPlaylist} est soumis à une
- limite d'âge
Channels:
Channels: Chaînes
Title: Liste des chaînes
@@ -1265,4 +1262,8 @@ Channel Hidden: '{channel} ajouté au filtre de chaîne'
Channel Unhidden: '{channel} retiré du filtre de chaîne'
Trimmed input must be at least N characters long: L'entrée tronquée doit comporter
au moins 1 caractère | L'entrée tronquée doit comporter au moins {length} caractères
-Tag already exists: La balise "{tagName}" existe déjà
+Tag already exists: L'étiquette « {tagName} » existe déjà
+Age Restricted:
+ 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
+Close Banner: Fermer la bannière
diff --git a/static/locales/gl.yaml b/static/locales/gl.yaml
index 6138c6079e9a8..fd4cf960da73e 100644
--- a/static/locales/gl.yaml
+++ b/static/locales/gl.yaml
@@ -36,6 +36,10 @@ Global:
Videos: 'Vídeos'
Community: Comunidade
+ Shorts: Cortos
+ Input Tags:
+ Length Requirement: A etiqueta debe ser de polo menos {number} caracteres.
+ Live: En vivo
Version {versionNumber} is now available! Click for more details: 'A versión {versionNumber}
está dispoñible! Fai clic para veres máis detalles'
Download From Site: 'Descargar do sitio'
@@ -656,8 +660,8 @@ Video:
nesta versión.'
'Chat is disabled or the Live Stream has ended.': 'O chat foi desactivado ou a transmisión
en vivo rematou.'
- Live chat is enabled. Chat messages will appear here once sent.: 'Chat en vivo
- activado. As mensaxes aparecerán aquí ao seren enviadas.'
+ Live chat is enabled. Chat messages will appear here once sent.: 'Chat en vivo activado. As
+ mensaxes aparecerán aquí ao seren enviadas.'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Chat
en vivo actualmente non soportado coa API de Invidious. Precísase dunha conexión
directa con YouTube.'
@@ -844,9 +848,9 @@ Tooltips:
as chamadas da aplicacion.'
Region for Trending: 'A rexión das tendencias permíteche escoller os vídeos máis
populares nun Estado.'
- External Link Handling: "Escolla o comportamento predeterminado cando se fai clic\
- \ nunha ligazón, que non se pode abrir en FreeTube.\nDe forma predeterminada,\
- \ FreeTube abrirá a ligazón na que premeches no teu navegador predeterminado.\n"
+ External Link Handling: "Escolla o comportamento predeterminado cando se fai clic
+ nunha ligazón, que non se pode abrir en FreeTube.\nDe forma predeterminada,
+ FreeTube abrirá a ligazón na que premeches no teu navegador predeterminado.\n"
Player Settings:
Force Local Backend for Legacy Formats: 'Só funcionará se a API de Invidious está
escollida por defecto. Cando estea activa, a API local usará formatos antigos
@@ -907,7 +911,7 @@ Tooltips:
Local API Error (Click to copy): 'Erro de API local (Preme para copiar)'
Invidious API Error (Click to copy): 'Erro de API Invidious (Preme para copiar)'
Falling back to Invidious API: 'Recorrendo á API Invidious'
-Falling back to the local API: 'Recorrendo á API local'
+Falling back to Local API: 'Recorrendo á API local'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Este
vídeo non está dispoñible porque faltan formatos. Isto pode ocorrer debido á non
dispoñibilidade do país.'
@@ -954,12 +958,6 @@ Downloading has completed: '"{videoTitle}" rematou de descargarse'
External link opening has been disabled in the general settings: A apertura das ligazóns
externas desactivouse na configuración xeral
Starting download: Comenzando a descarga de "{videoTitle}"
-Age Restricted:
- Type:
- Channel: Canle
- Video: Vídeo
- This {videoOrPlaylist} is age restricted: Esta {videoOrPlaylist} ten restricións
- de idade
Default Invidious instance has been cleared: Borrouse a instancia predeterminada de
Invidious
Screenshot Error: Produciuse un erro na captura de pantalla. {error}
@@ -977,3 +975,4 @@ Chapters:
capítulo actual: {chapterName}'
Screenshot Success: Captura da pantalla gardada como "{filePath}"
Ok: De acordo
+Go to page: Ir a {page}
diff --git a/static/locales/gsw.yaml b/static/locales/gsw.yaml
index 2bb07638058e2..e964dc53aab8e 100644
--- a/static/locales/gsw.yaml
+++ b/static/locales/gsw.yaml
@@ -49,4 +49,3 @@ Settings:
SponsorBlock Settings: {}
Channel: {}
Tooltips: {}
-Age Restricted: {}
diff --git a/static/locales/he.yaml b/static/locales/he.yaml
index 83e9419123c02..7e353cc407fa7 100644
--- a/static/locales/he.yaml
+++ b/static/locales/he.yaml
@@ -874,7 +874,7 @@ Up Next: 'הסרטון הבא'
Local API Error (Click to copy): 'בעיה ב־API המקומי (יש ללחוץ להעתקה)'
Invidious API Error (Click to copy): 'בעיה ב־API של Invidious (יש ללחוץ להעתקה)'
Falling back to Invidious API: 'מתבצעת נסיגה ל־API של Invidious'
-Falling back to the local API: 'מתבצעת נסיגה ל־API המקומי'
+Falling back to Local API: 'מתבצעת נסיגה ל־API המקומי'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'חסרות
תצורות לסרטון הזה. הדבר יכול להיגרם בגלל חוסר זמינות למדינה.'
Subscriptions have not yet been implemented: 'מנגנון המינויים עדיין לא מוכן'
@@ -980,11 +980,6 @@ Playing Next Video Interval: הסרטון הבא יתחיל מייד. לחיצה
Screenshot Success: צילום המסך נשמר בתור „{filePath}”
Screenshot Error: צילום המסך נכשל. {error}
New Window: חלון חדש
-Age Restricted:
- Type:
- Channel: ערוץ
- Video: סרטון
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} זה מוגבל בגיל'
Channels:
Search bar placeholder: חיפוש ערוצים
Empty: רשימת הערוצים שלך ריקה כרגע.
diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml
index a57585b8ac84d..0c6dd7454b002 100644
--- a/static/locales/hr.yaml
+++ b/static/locales/hr.yaml
@@ -195,6 +195,7 @@ User Playlists:
videa dodana u 1 zbirku
Select a playlist to add your N videos to: Odaberi zbirku za dodavanje tvog videa
| Odaberi zbirku za dodavanje tvojih {videoCount} videa
+ Added {count} Times: Dodano {count} puta | Dodano {count} puta
CreatePlaylistPrompt:
Create: Stvori
Toast:
@@ -272,11 +273,12 @@ Settings:
Black: 'Crna'
Dark: 'Tamna'
Light: 'Svijetla'
- Dracula: 'Drakula'
+ Dracula: 'Dracula'
System Default: Standard sustava
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastelno ružičasta
Hot Pink: Vruća ružičasta
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: 'Glavna boja teme'
Red: 'Crvena'
@@ -521,7 +523,7 @@ Settings:
Hide Channels: Sakrij videa iz kanala
Hide Channels Placeholder: ID kanala
Display Titles Without Excessive Capitalisation: Prikaži naslove bez pretjeranog
- korištenja velikih slova
+ korištenja velikih slova i interpunkcije
Hide Featured Channels: Sakrij istaknute kanale
Hide Channel Playlists: Sakrij kanal zbirki
Hide Channel Community: Sakrij kanal zajednice
@@ -927,7 +929,7 @@ Video:
Resolution: Razlučivost
Player Dimensions: Dimenzije playera
Bitrate: Brzina prijenosa
- Volume: Glasnoća
+ Volume: Direktorij
Bandwidth: Propusnost
Buffered: Učitano u memoriju
Mimetype: Mimetype
@@ -942,6 +944,7 @@ Video:
Pause on Current Video: Zaustavi trenutačni video
Unhide Channel: Prikaži kanal
Hide Channel: Sakrij kanal
+ More Options: Više opcija
Videos:
#& Sort By
Sort By:
@@ -1022,7 +1025,7 @@ Up Next: 'Sljedeći'
Local API Error (Click to copy): 'Greška lokalnog sučelja (pritisni za kopiranje)'
Invidious API Error (Click to copy): 'Greška Invidious sučelja (pritisni za kopiranje)'
Falling back to Invidious API: 'Koristit će se Invidious sučelje'
-Falling back to the local API: 'Koristit će se lokalno sučelje'
+Falling back to Local API: 'Koristit će se lokalno sučelje'
Subscriptions have not yet been implemented: 'Pretplate još nisu implementirane'
Loop is now disabled: 'Ponavljanje je sada deaktivirano'
Loop is now enabled: 'Ponavljanje je sada aktivirano'
@@ -1053,7 +1056,7 @@ Tooltips:
Proxy Videos Through Invidious: Za reprodukciju videa povezat će se s Invidiousom
umjesto izravnog povezivanja s YouTubeom. Zanemaruje postavke sučelja.
Force Local Backend for Legacy Formats: Radi samo, kad se Invidious postavi kao
- standardno sučelje. Kada je aktivirano, lokalno sučelje će pokretati i koristiti
+ standardno sučelje. Kada je aktivirano, lokalno API sučelje će pokretati i koristiti
stare formate umjesto onih koje dostavlja Invidious. Pomaže u slučajevima, kad
je reprodukcija videa koje dostavlja Invidious u zemlji zabranjena/ograničena.
Scroll Playback Rate Over Video Player: Dok se pokazivač nalazi na videu, pritisni
@@ -1148,11 +1151,6 @@ Starting download: Početak preuzimanja „{videoTitle}”
Screenshot Success: Snimka ekrana je spremljena pod „{filePath}”
Screenshot Error: Neuspjela snimka ekrana. {error}
New Window: Novi prozor
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Ovaj {videoOrPlaylist} je dobno ograničen
- Type:
- Channel: Kanal
- Video: Video
Channels:
Channels: Kanali
Title: Popis kanala
@@ -1187,3 +1185,7 @@ Channel Unhidden: '{channel} je uklonjen iz filtra kanala'
Trimmed input must be at least N characters long: Skraćeni unos mora imati barem 1
znak | Skraćeni unos mora imati barem {length} znaka
Tag already exists: Oznaka „{tagName}” već postoji
+Age Restricted:
+ This channel is age restricted: Ovaj je dobno ograničeni kanal
+ This video is age restricted: Ovaj je dobno ograničeni video
+Close Banner: Zatvori natpis
diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml
index 0d431f89843d0..14f4d75982eb3 100644
--- a/static/locales/hu.yaml
+++ b/static/locales/hu.yaml
@@ -1,5 +1,5 @@
# Put the name of your locale in the same language
-Locale Name: 'English (US)'
+Locale Name: 'Magyar'
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
@@ -147,12 +147,13 @@ User Playlists:
lejátszási listákhoz
"{videoCount} video(s) added to 1 playlist": 1 videó hozzáadva 1 lejátszási
listához | {videoCount} videó hozzáadása 1 lejátszási listához
- You haven't selected any playlist yet.: Még nem választott ki lejátszási listát
- sem.
+ You haven't selected any playlist yet.: Még nem választott ki egyetlen lejátszási
+ listát sem.
Select a playlist to add your N videos to: Válasszon ki egy lejátszási listát
a videó hozzáadásához | Válasszon ki egy lejátszási listát a {videoCount} videó
hozzáadásához
N playlists selected: '{playlistCount} Kiválasztott'
+ Added {count} Times: Hozzáadva {count} Alkalommal | Hozzáadva {count} Alkalommal
SinglePlaylistView:
Toast:
There were no videos to remove.: Nem voltak eltávolítható videók.
@@ -296,6 +297,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pasztell rózsaszín
Hot Pink: Forró rózsaszín
+ Nordic: Skandináv
Main Color Theme:
Main Color Theme: 'Fő színtéma'
Red: 'Vörös'
@@ -533,14 +535,14 @@ Settings:
Hide Playlists: Lejátszási listák elrejtése
Hide Video Description: Videó leírásának elrejtése
Hide Comments: Megjegyzések elrejtése
- Hide Live Streams: Élő adatfolyamok elrejtése
+ Hide Live Streams: Élő közvetítések elrejtése
Hide Sharing Actions: Megosztási műveletek elrejtése
Hide Chapters: Fejezetek elrejtése
Hide Upcoming Premieres: Közelgő első előadások elrejtése
Hide Channels: Videók elrejtése a csatornákból
Hide Channels Placeholder: Csatornaazonosító
- Display Titles Without Excessive Capitalisation: Címek megjelenítése túlzott nagybetűk
- nélkül
+ Display Titles Without Excessive Capitalisation: Jelenítse meg a címeket túlzott
+ nagybetűs írás és írásjelek nélkül
Hide Featured Channels: Kiemelt csatornák elrejtése
Hide Channel Playlists: Csatorna lejátszási listák elrejtése
Hide Channel Community: Csatornaközösség elrejtése
@@ -952,6 +954,7 @@ Video:
Pause on Current Video: Jelenlegi videó szüneteltetése
Unhide Channel: Csatorna megjelenítése
Hide Channel: Csatorna elrejtése
+ More Options: További beállítások
Videos:
#& Sort By
Sort By:
@@ -1036,7 +1039,7 @@ Up Next: 'Következő'
Local API Error (Click to copy): 'Helyi-API hiba (kattintson a másoláshoz)'
Invidious API Error (Click to copy): 'Invidious-API hiba (Kattintson a másoláshoz)'
Falling back to Invidious API: 'Invidious-API visszatérve'
-Falling back to the local API: 'Helyi-API visszatérve'
+Falling back to Local API: 'Helyi-API visszatérve'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Ez
a videó hiányzó formátumok miatt nem érhető el. Ez az ország nem elérhetősége miatt
következhet be.'
@@ -1088,10 +1091,10 @@ Tooltips:
videókat szolgáltasson, ahelyett, hogy közvetlen kapcsolatot létesítene a YouTube
szolgáltatással. Felülbírálja az API beállítást.
Force Local Backend for Legacy Formats: Csak akkor működik, ha az Invidious API
- az alapértelmezett. Ha engedélyezve van, a helyi API futni fog, és az általa
- visszaadott örökölt formátumokat fogja használni az Invidious által visszaadottak
- helyett. Segít, ha az Invidious által visszaküldött videókat nem lehet lejátszani
- az ország korlátozása miatt.
+ az alapértelmezett. Ha engedélyezve van, a helyi API fut, és az általa visszaadott
+ régi formátumokat használja az Invidious által visszaadottak helyett. Segít,
+ ha az Invidious által visszaküldött videók nem játszódnak le az országos korlátozások
+ miatt.
Scroll Playback Rate Over Video Player: Amíg a kurzor a videó felett van, nyomja
meg és tartsa lenyomva a Control billentyűt (Mac gépen a Command billentyű),
és görgesse az egér görgőjét előre vagy hátra a lejátszási sebesség szabályozásához.
@@ -1170,11 +1173,6 @@ Channels:
Unsubscribe: Leiratkozás
Unsubscribed: '{channelName} eltávolítva az feliratkozásáiból'
Unsubscribe Prompt: Biztosan le szeretne iratkozni a(z) „{channelName}” csatornáról?
-Age Restricted:
- Type:
- Video: Videó
- Channel: Csatorna
- This {videoOrPlaylist} is age restricted: A(z) {videoOrPlaylist} korhatáros
Downloading failed: Hiba történt a(z) „{videoTitle}” letöltése során
Starting download: „{videoTitle}” letöltésének indítása
Downloading has completed: A(z) „{videoTitle}” letöltése befejeződött
@@ -1207,3 +1205,7 @@ Trimmed input must be at least N characters long: A vágott bemenetnek legalább
hosszúnak kell lennie | A vágott bemenetnek legalább {length} karakter hosszúnak
kell lennie
Tag already exists: '„{tagName}” címke már létezik'
+Close Banner: Banner bezárása
+Age Restricted:
+ This channel is age restricted: Ez a csatorna korhatáros
+ This video is age restricted: Ez a videó korhatáros
diff --git a/static/locales/id.yaml b/static/locales/id.yaml
index 999003a20429b..b471e1b32a715 100644
--- a/static/locales/id.yaml
+++ b/static/locales/id.yaml
@@ -753,7 +753,7 @@ Up Next: 'Akan Datang'
Local API Error (Click to copy): 'API Lokal Galat (Klik untuk menyalin)'
Invidious API Error (Click to copy): 'API Invidious Galat (Klik untuk menyalin)'
Falling back to Invidious API: 'Kembali ke API Invidious'
-Falling back to the local API: 'Kembali ke API lokal'
+Falling back to Local API: 'Kembali ke API lokal'
Subscriptions have not yet been implemented: 'Langganan masih belum diterapkan'
Loop is now disabled: 'Putar-Ulang sekarang dimatikan'
Loop is now enabled: 'Putar-Ulang sekarang diaktifkan'
diff --git a/static/locales/is.yaml b/static/locales/is.yaml
index d97840fcefbb2..5434496d6416f 100644
--- a/static/locales/is.yaml
+++ b/static/locales/is.yaml
@@ -44,6 +44,8 @@ Global:
Subscriber Count: 1 áskrifandi | {count} áskrifendur
View Count: 1 áhorf | {count} áhorf
Watching Count: 1 að horfa | {count} að horfa
+ Input Tags:
+ Length Requirement: Merki þarf að vera a.m.k. {number} stafa langt
Version {versionNumber} is now available! Click for more details: 'Útgáfa {versionNumber}
er tiltæk! Smelltu til að skoða nánar'
Download From Site: 'Sækja af vefsvæði'
@@ -174,6 +176,14 @@ User Playlists:
Some videos in the playlist are not loaded yet. Click here to copy anyway.: Sum
myndskeið í spilunarlistanum hafa ekki enn hlaðist inn. Smelltu hér til að
afrita samt.
+ This playlist is now used for quick bookmark: Þessi spilunarlisti er núna notaður
+ undir flýtibókamerki
+ Quick bookmark disabled: Flýtibókamerki óvirk
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Þessi
+ spilunarlisti er núna notaður undir flýtibókamerki í stað {oldPlaylistName}.
+ Smelltu hér til að afturkalla
+ Reverted to use {oldPlaylistName} for quick bookmark: Snéri aftur í að nota
+ {oldPlaylistName} undir flýtibókamerki
AddVideoPrompt:
N playlists selected: '{playlistCount} valin'
Search in Playlists: Leita í spilunarlistum
@@ -187,6 +197,7 @@ User Playlists:
| {videoCount} myndskeiðum bætt við 1 spilunarlista
Select a playlist to add your N videos to: Veldu spilunarlista til að bæta myndskeiðinu
þínu á | Veldu spilunarlista til að bæta {videoCount}̣ myndskeiðunum þínum á
+ Added {count} Times: Bætt við {count} sinni | Bætt við {count} sinnum
CreatePlaylistPrompt:
Create: Búa til
New Playlist Name: Heiti á nýjum spilunarlista
@@ -209,6 +220,10 @@ User Playlists:
Delete Playlist: Eyða spilunarlista
Are you sure you want to delete this playlist? This cannot be undone: Ertu viss
um að þú viljir eyða þessum spilunarlista? Aðgerðin er ekki afturkallanleg.
+ Add to Favorites: Bæta á {playlistName}
+ Remove from Favorites: Fjarlægja af {playlistName}
+ Enable Quick Bookmark With This Playlist: Virkja flýtibókamerki með þessum spilunarlista
+ Disable Quick Bookmark: Eyða flýtibókamerki
History:
# On History Page
History: 'Áhorf'
@@ -283,6 +298,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastelbleikt
Hot Pink: Dimmbleikt
+ Nordic: Norrænt
Main Color Theme:
Main Color Theme: 'Aðallitur þema'
Red: 'Rautt'
@@ -436,6 +452,7 @@ Settings:
Hide Channels: Fela myndskeið úr rásum
Hide Channels Placeholder: Auðkenni rásar
Display Titles Without Excessive Capitalisation: Birta titla án umfram-hástafa
+ og greinarmerkja
Sections:
Side Bar: Hliðarspjald
Channel Page: Rásasíða
@@ -461,6 +478,9 @@ Settings:
Hide Channels Already Exists: Auðkenni rásar er þegar til
Hide Channels API Error: Villa við að ná í notanda með uppgefið auðkenni. Athugaðu
aftur hvort auðkennið ré rétt.
+ Hide Videos and Playlists Containing Text: Fela myndskeið og spilunarlista sem
+ innihalda texta
+ Hide Videos and Playlists Containing Text Placeholder: Orð, orðhluti eða setning
Data Settings:
Data Settings: 'Stillingar gagna'
Select Import Type: 'Veldu tegund innflutnings'
@@ -721,6 +741,7 @@ Channel:
Reveal Answers: Birta svör
Hide Answers: Fela svör
votes: '{votes} atkvæði'
+ Video hidden by FreeTube: Myndskeið falið af FreeTube
Shorts:
This channel does not currently have any shorts: Þessi rás er í augnablikinu ekki
með neinar stuttmyndir
@@ -878,6 +899,7 @@ Video:
Pause on Current Video: Setja núverandi myndskeið í bið
Unhide Channel: Birta rás
Hide Channel: Fela rás
+ More Options: Fleiri valkostir
Videos:
#& Sort By
Sort By:
@@ -1043,7 +1065,7 @@ Local API Error (Click to copy): 'Villa í staðværu API-kerfisviðmóti (smell
Invidious API Error (Click to copy): 'Villa í Invidious API-kerfisviðmóti (smella
til að afrita)'
Falling back to Invidious API: 'Nota til vara Invidious API-kerfisviðmót'
-Falling back to the local API: 'Nota til vara staðvært API-kerfisviðmót'
+Falling back to Local API: 'Nota til vara staðvært API-kerfisviðmót'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Þetta
myndskeiðer ekki tiltækt vegna þess að það vantar skráasnið. Þetta getur gest ef
þau eru ekki tiltæk í viðkomandi landi.'
@@ -1084,11 +1106,6 @@ Starting download: Byrja að sækja "{videoTitle}"
Downloading failed: Vandamál kom upp við að sækja "{videoTitle}"
Screenshot Error: Skjámyndataka mistókst. {error}
Screenshot Success: Vistaði skjámynd sem "{filePath}"
-Age Restricted:
- Type:
- Channel: Rás
- Video: Myndskeið
- This {videoOrPlaylist} is age restricted: Þetta {videoOrPlaylist} er með aldurstakmörkunum
New Window: Nýr gluggi
Channels:
Search bar placeholder: Leita í rásum
@@ -1122,3 +1139,8 @@ Playlist will not pause when current video is finished: Spilunarlisti mun ekki f
Go to page: Fara á {page}
Channel Hidden: '{channel} bætt við rásasíu'
Channel Unhidden: '{channel} fjarlægt úr rásasíu'
+Close Banner: Loka borða
+Age Restricted:
+ This video is age restricted: Þetta myndskeið er með aldurstakmörkunum
+ This channel is age restricted: Þessi rás er með aldurstakmörkunum
+Tag already exists: '"{tagName}" merkið er þegar til staðar'
diff --git a/static/locales/it.yaml b/static/locales/it.yaml
index 39ad919c263a2..f09d519e0cf72 100644
--- a/static/locales/it.yaml
+++ b/static/locales/it.yaml
@@ -143,6 +143,7 @@ User Playlists:
Select a playlist to add your N videos to: Seleziona una playlist a cui aggiungere
il tuo video | Seleziona una playlist a cui aggiungere i tuoi {videoCount} video
N playlists selected: '{playlistCount} selezionate'
+ Added {count} Times: Aggiunto {count} volta | Aggiunti {count} volte
SinglePlaylistView:
Toast:
There were no videos to remove.: Non c'erano video da rimuovere.
@@ -287,6 +288,7 @@ Settings:
Catppuccin Mocha: Cappuccino moka
Pastel Pink: Rosa pastello
Hot Pink: Rosa caldo
+ Nordic: Nordico
Main Color Theme:
Main Color Theme: 'Colore principale del tema'
Red: 'Rosso'
@@ -536,8 +538,8 @@ Settings:
Hide Upcoming Premieres: Nascondi le prossime Première
Hide Channels: Nascondi i video dai canali
Hide Channels Placeholder: ID del canale
- Display Titles Without Excessive Capitalisation: Visualizza i titoli senza un
- uso eccessivo di maiuscole
+ Display Titles Without Excessive Capitalisation: Visualizza i titoli senza maiuscole
+ e punteggiatura eccessive
Hide Featured Channels: Nascondi i canali in evidenza
Hide Channel Playlists: Nascondi le playlist del canale
Hide Channel Community: Nascondi la comunità del canale
@@ -913,6 +915,7 @@ Video:
Pause on Current Video: Pausa sul video attuale
Unhide Channel: Mostra canale
Hide Channel: Nascondi canale
+ More Options: Più opzioni
Videos:
#& Sort By
Sort By:
@@ -996,7 +999,7 @@ Up Next: 'Prossimi video'
Local API Error (Click to copy): 'Errore API Locale (Clicca per copiare)'
Invidious API Error (Click to copy): 'Errore API Invidious (Clicca per copiare)'
Falling back to Invidious API: 'Torno alle API Invidious'
-Falling back to the local API: 'Torno alle API locali'
+Falling back to Local API: 'Torno alle API locali'
Subscriptions have not yet been implemented: 'Le Iscrizioni non sono ancora state
implementate'
Loop is now disabled: 'Il loop è ora disabilitato'
@@ -1177,13 +1180,6 @@ Starting download: Avvio del download di "{videoTitle}"
Downloading failed: Si è verificato un problema durante il download di "{videoTitle}"
Screenshot Success: Screenshot salvato come "{filePath}"
Screenshot Error: Screenshot non riuscito. {error}
-Age Restricted:
- The currently set default instance is {instance}: Questo {instance} è limitato dall'età
- Type:
- Channel: Canale
- Video: Video
- This {videoOrPlaylist} is age restricted: Questo {videoOrPlaylist} ha limiti di
- età
New Window: Nuova finestra
Channels:
Unsubscribed: '{channelName} è stato rimosso dalle tue iscrizioni'
@@ -1220,3 +1216,7 @@ Channel Unhidden: '{channel} rimosso dal filtro canali'
Tag already exists: Il tag "{tagName}" esiste già
Trimmed input must be at least N characters long: L'input troncato deve essere lungo
almeno 1 carattere | L'input troncato deve essere lungo almeno {length} caratteri
+Age Restricted:
+ This video is age restricted: Questo video è soggetto a limiti di età
+ This channel is age restricted: Questo canale è soggetto a limiti di età
+Close Banner: Chiudi banner
diff --git a/static/locales/ja.yaml b/static/locales/ja.yaml
index 9136a3fdc96d7..f851625cbf295 100644
--- a/static/locales/ja.yaml
+++ b/static/locales/ja.yaml
@@ -114,6 +114,10 @@ User Playlists:
このページは、完全に動作する動画リストではありません。保存またはお気に入りと設定した動画のみが表示されます。操作が完了すると、現在ここにあるすべての動画は「お気に入り」の動画リストに移動します。
Search bar placeholder: 動画リスト内の検索
Empty Search Message: この再生リストに、検索に一致する動画はありません
+ This playlist currently has no videos.: 存在、この再生リストには動画があっていません。
+ Create New Playlist: 新規再生リストを作られる
+ Sort By:
+ NameAscending: A-Z
History:
# On History Page
History: '履歴'
@@ -276,7 +280,7 @@ Settings:
Folder Button: フォルダーの選択
Enter Fullscreen on Display Rotate: 横画面時にフルスクリーンにする
Skip by Scrolling Over Video Player: 動画プレーヤーでスクロールしてスキップ可能にする
- Allow DASH AV1 formats: DASH AV1形式を許可する
+ Allow DASH AV1 formats: DASH AV1形式を許可
Comment Auto Load:
Comment Auto Load: コメント自動読み込み
Subscription Settings:
@@ -794,7 +798,7 @@ Up Next: '次の動画'
Local API Error (Click to copy): '内部 API エラー(クリックするとコピー)'
Invidious API Error (Click to copy): 'Invidious API エラー(クリックするとコピー)'
Falling back to Invidious API: '代替の Invidious API に切替'
-Falling back to the local API: '代替の内部 API に切替'
+Falling back to Local API: '代替の内部 API に切替'
Subscriptions have not yet been implemented: '登録チャンネルは未実装です'
Loop is now disabled: 'ループ再生を無効にしました'
Loop is now enabled: 'ループ再生を有効にしました'
@@ -850,7 +854,7 @@ The playlist has been reversed: 再生リストを逆順にしました
A new blog is now available, {blogTitle}. Click to view more: '新着ブログ公開、{blogTitle}。クリックしてブログを読む'
Download From Site: サイトからダウンロード
Version {versionNumber} is now available! Click for more details: 最新バージョン {versionNumber}
- 配信中! 詳細はクリックして確認してください
+ 配信中!詳細はクリックして確認してください
This video is unavailable because of missing formats. This can happen due to country unavailability.: この動画は、動画形式の情報が利用できないため再生できません。再生が許可されていない国で発生します。
Tooltips:
Subscription Settings:
@@ -866,8 +870,8 @@ Tooltips:
Scroll Playback Rate Over Video Player: カーソルが動画上にあるとき、Ctrl キー(Mac では Command キー)を押したまま、マウスホイールを前後にスクロールして再生速度を調整します。Control
キー(Mac では Command キー)を押したままマウスを左クリックすると、すぐにデフォルトの再生速度(設定を変更していない場合は 1 x)に戻ります。
Skip by Scrolling Over Video Player: スクロール ホイールを使用して、ビデオ、MPV スタイルをスキップします。
- Allow DASH AV1 formats: DASH H.264形式よりDASH AV1形式の方がきれいに見える可能性があるけど、再生には必要な電力がより多い。全ての動画でDASH
- AV1を利用できないため、プレイヤーはDASH H.264形式に自動変更する場合があります。
+ Allow DASH AV1 formats: DASH H.264形式よりもDASH AV1形式の方がきれいに見える可能性がありますが、再生にはより多くの処理能力が必要となります。DASH
+ AV1形式を使用できない場合、プレイヤーはDASH H.264形式を自動で使用します。
General Settings:
Invidious Instance: FreeTube が使用する Invidious API の接続先サーバーです。
Preferred API Backend: FreeTube が youtube からデータを取得する方法を選択します。「内部 API」とはアプリから取得する方法です。「Invidious
@@ -913,12 +917,6 @@ Are you sure you want to open this link?: このリンクを開きますか?
Starting download: '"{videoTitle}" のダウンロードを開始します'
Downloading has completed: '"{videoTitle}" のダウンロードが終了しました'
Downloading failed: '"{videoTitle}" のダウンロード中に問題が発生しました'
-Age Restricted:
- The currently set default instance is {instance}: '{instance} は 18 歳以上の視聴者向け動画です'
- Type:
- Channel: チャンネル
- Video: 動画
- This {videoOrPlaylist} is age restricted: この {videoOrPlaylist} は年齢制限があります
Channels:
Channels: チャンネル
Unsubscribe: 登録解除
@@ -947,3 +945,5 @@ Hashtag:
This hashtag does not currently have any videos: このハッシュタグには現在動画がありません
Playlist will pause when current video is finished: 現在のビデオが終了すると、プレイリストは停止します
Playlist will not pause when current video is finished: 現在のビデオが終了しても、プレイリストは停止しません
+Close Banner: バナーを閉じる
+Go to page: '{page}に行く'
diff --git a/static/locales/ko.yaml b/static/locales/ko.yaml
index 31e708ce5288f..48ab70bc08ce1 100644
--- a/static/locales/ko.yaml
+++ b/static/locales/ko.yaml
@@ -761,7 +761,7 @@ Tooltips:
Local API Error (Click to copy): '로컬 API 오류(복사하려면 클릭)'
Invidious API Error (Click to copy): 'Invidious API 오류(복사하려면 클릭)'
Falling back to Invidious API: 'Invidious API로 대체'
-Falling back to the local API: '로컬 API로 대체'
+Falling back to Local API: '로컬 API로 대체'
This video is unavailable because of missing formats. This can happen due to country unavailability.: '이
동영상은 형식이 누락되어 사용할 수 없습니다. 이는 국가를 사용할 수 없기 때문에 발생할 수 있습니다.'
Subscriptions have not yet been implemented: '구독이 아직 구현되지 않았습니다'
@@ -804,11 +804,6 @@ Channels:
Unsubscribe Prompt: '"{channelName}"에서 구독을 취소하시겠습니까?'
Count: '{number} 채널이 발견되었습니다.'
Unsubscribed: '{channelName} 구독에서 제거되었습니다'
-Age Restricted:
- Type:
- Video: 비디오
- Channel: 채널
- The currently set default instance is {instance}: 이 {instance}는 연령 제한입니다
Downloading has completed: '"{videoTitle}" 다운로드가 완료되었습니다'
Starting download: '"{videoTitle}" 다운로드를 시작하는 중'
Downloading failed: '"{videoTitle}"를 다운로드하는 동안 문제가 발생했습니다'
diff --git a/static/locales/lt.yaml b/static/locales/lt.yaml
index d3ba59417dcd5..47fd7d1ba9379 100644
--- a/static/locales/lt.yaml
+++ b/static/locales/lt.yaml
@@ -41,6 +41,9 @@ Global:
Counts:
Subscriber Count: 1 prenumeruoti | {count} prenumeratorių
Channel Count: 1 kanalas | {count} kanalai
+ Video Count: 1 vaizdo įrašas | {count} vaizdo įrašai
+ View Count: 1 peržiūrėti | {count} peržiūrų
+ Watching Count: 1 žiūri | {count} žiūri
Version {versionNumber} is now available! Click for more details: 'Versija {versionNumber}
jau prieinama! Spustelėkite, jei norite gauti daugiau informacijos'
Download From Site: 'Atsisiųsti iš svetainės'
@@ -842,7 +845,7 @@ Local API Error (Click to copy): 'Vietinė API klaida (spustelėkite, jei norite
Invidious API Error (Click to copy): 'Invidious API klaida (spustelėkite, jei norite
kopijuoti)'
Falling back to Invidious API: 'Grįžtama prie Invidious API'
-Falling back to the local API: 'Grįžtama prie vietinio API'
+Falling back to Local API: 'Grįžtama prie vietinio API'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Šis
vaizdo įrašas nepasiekiamas, nes trūksta formatų. Tai gali nutikti dėl to, kad šalis
yra nepasiekiama.'
@@ -887,12 +890,6 @@ Channels:
Unsubscribe: Atšaukti prenumeratą
Unsubscribed: '{channelName} buvo pašalintas iš jūsų prenumeratų'
Unsubscribe Prompt: Ar tikrai norite atšaukti {channelName} prenumeratą?
-Age Restricted:
- Type:
- Channel: Kanalas
- Video: Vaizdo įrašas
- This {videoOrPlaylist} is age restricted: Šis {videoOrPlaylist} ribojamas pagal
- amžių
Downloading has completed: „{videoTitle}“ atsisiuntimas baigtas
Starting download: Pradedamas „{videoTitle}“ atsisiuntimas
Downloading failed: Atsisiunčiant „{videoTitle}“ kilo problema
@@ -910,3 +907,4 @@ Clipboard:
be saugaus ryšio
Preferences: Nuostatos
Go to page: Eiti į {page}
+Close Banner: Uždaryti baneris
diff --git a/static/locales/lv.yaml b/static/locales/lv.yaml
index c08d4259a0616..130bb3cbfbf46 100644
--- a/static/locales/lv.yaml
+++ b/static/locales/lv.yaml
@@ -828,7 +828,7 @@ Tooltips:
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
-Falling back to the local API: ''
+Falling back to Local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
@@ -848,11 +848,6 @@ Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
-Age Restricted:
- This {videoOrPlaylist} is age restricted: ''
- Type:
- Channel: ''
- Video: ''
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
diff --git a/static/locales/nb_NO.yaml b/static/locales/nb_NO.yaml
index 06f3b86aa4417..86ec5a9de0b30 100644
--- a/static/locales/nb_NO.yaml
+++ b/static/locales/nb_NO.yaml
@@ -784,7 +784,7 @@ Up Next: 'Neste'
Local API Error (Click to copy): 'Lokal API-feil (Klikk her for å kopiere)'
Invidious API Error (Click to copy): 'Invidious-API-feil (Klikk her for å kopiere)'
Falling back to Invidious API: 'Faller tilbake til Invidious-API-et'
-Falling back to the local API: 'Faller tilbake til det lokale API-et'
+Falling back to Local API: 'Faller tilbake til det lokale API-et'
Subscriptions have not yet been implemented: 'Abonnement har ikke blitt implementert
enda'
Loop is now disabled: 'Gjenta er nå deaktivert'
@@ -947,11 +947,6 @@ Channels:
Unsubscribe: Opphev abonnement
Unsubscribed: '{channelName} ble fjernet fra dine abonnementer'
Unsubscribe Prompt: Opphev abonnement på «{channelName}»?
-Age Restricted:
- Type:
- Channel: Kanal
- Video: Video
- This {videoOrPlaylist} is age restricted: Denne {videoOrPlaylist} er aldersbegrenset
Chapters:
Chapters: Kapitler
'Chapters list visible, current chapter: {chapterName}': 'Kapittelliste synlig.
diff --git a/static/locales/nl.yaml b/static/locales/nl.yaml
index 6f6d323369fb7..2ae36cb08995e 100644
--- a/static/locales/nl.yaml
+++ b/static/locales/nl.yaml
@@ -45,6 +45,8 @@ Global:
Watching Count: 1 aan het kijken | {count} aan het kijken
Channel Count: 1 kanaal | {count} kanalen
Community: Gemeenschap
+ Input Tags:
+ Length Requirement: Tag moet minstens {number} tekens lang zijn
Search / Go to URL: 'Zoeken / Ga naar URL'
# In Filter Button
Search Filters:
@@ -135,12 +137,88 @@ User Playlists:
LatestCreatedFirst: Onlangs aangemaakt
NameDescending: Z - A
NameAscending: A - Z
+ EarliestPlayedFirst: Eerst gespeeld
+ EarliestCreatedFirst: Eerst aangemaakt
+ LatestUpdatedFirst: Laatst bijgewerkt
+ EarliestUpdatedFirst: Eerst bijgewerkt
+ LatestPlayedFirst: Meest recent afgespeeld
CreatePlaylistPrompt:
Create: Aanmaken
+ New Playlist Name: Naam voor nieuwe afspeellijst
+ Toast:
+ Playlist {playlistName} has been successfully created.: Afspeellijst ‘{playlistName}’
+ is succesvol aangemaakt.
+ There was an issue with creating the playlist.: Er is een probleem opgetreden
+ bij het maken van de afspeellijst.
+ There is already a playlist with this name. Please pick a different name.: Er
+ is al een afspeellijst met deze naam. Kies een andere naam.
AddVideoPrompt:
Save: Opslaan
+ N playlists selected: '{playlistCount} geselecteerd'
+ Search in Playlists: Zoeken in afspeellijsten
+ Toast:
+ You haven't selected any playlist yet.: U heeft nog geen afspeellijst geselecteerd.
+ "{videoCount} video(s) added to 1 playlist": 1 video toegevoegd aan een afspeellijst
+ | {videoCount} video's toegevoegd aan een afspeellijst
+ "{videoCount} video(s) added to {playlistCount} playlists": 1 video toegevoegd
+ aan {playlistCount} afspeellijsten | {videoCount} video's toegevoegd aan
+ {playlistCount} afspeellijsten
+ Select a playlist to add your N videos to: Selecteer een afspeellijst om uw video
+ aan toe te voegen | Selecteer een afspeellijst om uw {videoCount} video's aan
+ toe te voegen
+ Added {count} Times: '{count} keer toegevoegd | {count} keer toegevoegd'
Save Changes: Wijzigingen opslaan
Copy Playlist: Afspeellijst kopiëren
+ Create New Playlist: Nieuwe afspeellijst aanmaken
+ Add to Playlist: Toevoegen aan afspeellijst
+ Move Video Up: Video omhoog verplaatsen
+ Move Video Down: Video omlaag verplaatsen
+ Remove from Playlist: Verwijderen uit afspeellijst
+ Edit Playlist Info: Afspeellijstinfo bewerken
+ Remove Watched Videos: Bekeken video's verwijderen
+ Add to Favorites: Toevoegen aan {playlistName}
+ Remove from Favorites: Verwijderen uit {playlistName}
+ Disable Quick Bookmark: Snelle bladwijzers uitschakelen
+ SinglePlaylistView:
+ Toast:
+ Video has been removed: Video is verwijderd
+ Quick bookmark disabled: Snelle bladwijzers uitgeschakeld
+ Playlist has been updated.: De afspeellijst is bijgewerkt.
+ This video cannot be moved up.: Deze video kan niet omhoog verplaatst worden.
+ This video cannot be moved down.: Deze video kan niet omlaag verplaatst worden.
+ Playlist {playlistName} has been deleted.: Afspeellijst ‘{playlistName}’ is
+ verwijderd.
+ This playlist does not exist: Deze afspeellijst bestaat niet
+ There were no videos to remove.: Er zijn geen video's om te verwijderen.
+ There was a problem with removing this video: Er is een probleem opgetreden
+ bij het verwijderen van deze video
+ This playlist is now used for quick bookmark: Deze afspeellijst wordt nu gebruikt
+ voor snelle bladwijzers
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Deze
+ afspeellijst wordt nu gebruikt voor snelle bladwijzers in plaats van {oldPlaylistName}.
+ Druk hier om ongedaan te maken
+ Reverted to use {oldPlaylistName} for quick bookmark: Teruggekeerd naar het
+ gebruik van {oldPlaylistName} voor snelle bladwijzers
+ Some videos in the playlist are not loaded yet. Click here to copy anyway.: Sommige
+ video's in de afspeellijst zijn nog niet geladen. Druk hier om toch te kopiëren.
+ "{videoCount} video(s) have been removed": 1 video verwijderd | {videoCount}
+ video's verwijderd
+ This playlist is protected and cannot be removed.: Deze afspeellijst is beschermd
+ en kan niet worden verwijderd.
+ Playlist name cannot be empty. Please input a name.: De naam van de afspeellijst
+ mag niet leeg zijn. Voer een naam in.
+ There was an issue with updating this playlist.: Er is een probleem opgetreden
+ bij het bijwerken van deze afspeellijst.
+ You have no playlists. Click on the create new playlist button to create a new one.: U
+ heeft geen afspeellijsten. Druk op de knop om er één aan te maken.
+ This playlist currently has no videos.: Deze afspeellijst bevat geen video's.
+ Enable Quick Bookmark With This Playlist: Snelle bladwijzers inschakelen voor deze
+ afspeellijst
+ Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Weet
+ u zeker dat u alle bekeken video's uit deze afspeellijst wilt verwijderen? Dit
+ kan niet ongedaan gemaakt worden.
+ Are you sure you want to delete this playlist? This cannot be undone: Weet u zeker
+ dat u deze afspeellijst wilt verwijderen? Dit kan niet ongedaan gemaakt worden.
History:
# On History Page
History: 'Geschiedenis'
@@ -209,6 +287,7 @@ Settings:
Catppuccin Mocha: Catppuccin-mokka
Pastel Pink: Pastelroze
Hot Pink: Heet-roze
+ Nordic: Noords
Main Color Theme:
Main Color Theme: 'Primaire themakleur'
Red: 'Rood'
@@ -333,12 +412,18 @@ Settings:
verwijderen
Save Watched Videos With Last Viewed Playlist: Houd bekeken video's bij met de
afspeellijst ‘Laatst bekeken’
+ Remove All Playlists: Alle afspeellijsten verwijderen
+ All playlists have been removed: Alle afspeellijsten zijn verwijderd
+ Are you sure you want to remove all your playlists?: Weet u zeker dat u al uw
+ afspeellijsten wilt verwijderen?
Subscription Settings:
Subscription Settings: 'Abonnementinstellingen'
Hide Videos on Watch: 'Bekeken video''s verbergen'
Manage Subscriptions: 'Abonnementen beheren'
Fetch Feeds from RSS: Verzamel feeds via RSS
Fetch Automatically: Haal feed automatisch op
+ Only Show Latest Video for Each Channel: Alleen nieuwste video voor elk kanaal
+ tonen
Advanced Settings:
Advanced Settings: 'Geavanceerde Instellingen'
Enable Debug Mode (Prints data to the console): 'Schakel Debug Modus in (Print
@@ -415,6 +500,14 @@ Settings:
Subscription File: Abonnementenbestand
History File: Geschiedenisbestand
Playlist File: Afspeellijstbestand
+ Export Playlists For Older FreeTube Versions:
+ Label: Afspeellijsten exporteren voor oudere FreeTube-versies
+ Tooltip: "Deze optie exporteert video's van alle afspeellijsten naar één afspeellijst
+ met de naam ‘Favorieten’.\nVideo's exporteren en importeren in afspeellijsten
+ voor een oudere versie van FreeTube:\n1. Exporteer uw afspeellijsten met
+ deze optie ingeschakeld.\n2. Verwijder al uw bestaande afspeellijsten met
+ de optie ‘Alle afspeellijsten verwijderen’ onder ‘Privacyinstellingen’.\n
+ 3. Start de oudere versie van FreeTube en importeer de geëxporteerde afspeellijsten."
Distraction Free Settings:
Hide Live Chat: Livechat verbergen
Hide Popular Videos: Populaire video's verbergen
@@ -431,8 +524,8 @@ Settings:
Hide Video Description: Video-omschrijving verbergen
Hide Comments: Opmerkingen verbergen
Hide Live Streams: Verberg rechtstreekse uitzendingen
- Display Titles Without Excessive Capitalisation: Toon titels zonder overmatig
- hoofdlettergebruik
+ Display Titles Without Excessive Capitalisation: Titels tonen zonder overmatig
+ hoofdlettergebruik en interpunctie
Sections:
Side Bar: Zijbalk
General: Algemeen
@@ -456,6 +549,16 @@ Settings:
Hide Profile Pictures in Comments: Profielfoto's in opmerkingen verbergen
Hide Subscriptions Community: Abonnementgemeenschappen verbergen
Hide Channels Already Exists: Kanaal ID bestaat reeds
+ Hide Channels Invalid: Opgegeven kanaal-id is ongeldig
+ Hide Videos and Playlists Containing Text Placeholder: Woord, woordfragment of
+ zin
+ Hide Videos and Playlists Containing Text: Video's en afspeellijsten die tekst
+ bevatten verbergen
+ Hide Channels API Error: Fout bij het ophalen van de gebruiker met de opgegeven
+ ID. Controleer nogmaals of de ID correct is.
+ Hide Channels Disabled Message: Sommige kanalen zijn geblokkeerd met behulp van
+ ID en zijn niet verwerkt. De functie is geblokkeerd terwijl deze ID's worden
+ bijgewerkt
The app needs to restart for changes to take effect. Restart and apply change?: De
app moet opnieuw worden gestart om veranderingen aan te brengen. Wilt u de app
opnieuw starten en veranderingen toepassen?
@@ -490,6 +593,9 @@ Settings:
Do Nothing: Niets doen
Category Color: Categoriekleur
UseDeArrowTitles: DeArrow-videotitels gebruiken
+ UseDeArrowThumbnails: DeArrow gebruiken voor miniaturen
+ 'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': API-URL
+ van DeArrow-miniatuurgenerator (standaard is https://dearrow-thumb.ajay.app)
External Player Settings:
Custom External Player Arguments: Aangepaste argumenten voor externe videospeler
Custom External Player Executable: Uitvoerbaar bestand van externe videospeler
@@ -501,6 +607,7 @@ Settings:
Players:
None:
Name: Geen
+ Ignore Default Arguments: Standaardargumenten negeren
Download Settings:
Choose Path: Pad kiezen
Download Settings: Downloadinstellingen
@@ -529,6 +636,7 @@ Settings:
Password Incorrect: Wachtwoord onjuist
Unlock: Ontgrendelen
Enter Password To Unlock: Voer wachtwoord in om instellingen te ontgrendelen
+ Expand All Settings Sections: Alle instellingensecties uitvouwen
About:
#On About page
About: 'Over'
@@ -641,6 +749,7 @@ Channel:
votes: '{votes} stemmen'
This channel currently does not have any posts: Dit kanaal heeft momenteel geen
posts
+ Video hidden by FreeTube: Video verborgen door FreeTube
Releases:
Releases: Uitgaven
This channel does not currently have any releases: Dit kanaal heeft momenteel
@@ -794,6 +903,7 @@ Video:
is niet beschikbaar voor deze stream. Mogelijk is deze uitgeschakeld door de uploader.
Hide Channel: Kanaal verbergen
Unhide Channel: Kanaal tonen
+ More Options: Meer opties
Videos:
#& Sort By
Sort By:
@@ -877,7 +987,7 @@ Up Next: 'Volgende'
Local API Error (Click to copy): 'Fout in lokale API (Klik om te kopiëren)'
Invidious API Error (Click to copy): 'Fout in API van Invidious (Klik op te kopiëren)'
Falling back to Invidious API: 'Terugvallen op Invidious API'
-Falling back to the local API: 'Terugvallen op lokale API'
+Falling back to Local API: 'Terugvallen op lokale API'
Subscriptions have not yet been implemented: 'Abonnementen zijn nog niet geïmplementeerd'
Loop is now disabled: 'Herhalen is nu uitgeschakeld'
Loop is now enabled: 'Herhalen is nu ingeschakeld'
@@ -937,6 +1047,10 @@ Profile:
Profile Settings: Profielinstellingen
Toggle Profile List: Profiellijst omschakelen
Profile Name: Profielnaam
+ Edit Profile Name: Profielnaam wijzigen
+ Create Profile Name: Profielnaam aanmaken
+ Close Profile Dropdown: Profielmenu sluiten
+ Open Profile Dropdown: Profielmenu openen
A new blog is now available, {blogTitle}. Click to view more: Een nieuwe blogpost
is beschikbaar, {blogTitle}. Klik voor meer informatie
Download From Site: Van website downloaden
@@ -952,10 +1066,10 @@ Tooltips:
Legacy gaat niet hoger dan 720p maar gebruikt minder bandbreedte. Audio zal
alleen het geluid streamen.
Force Local Backend for Legacy Formats: Dit zal alleen werken wanneer Invidious
- is geselecteerd als de standaard API. Wanneer ingeschakeld zal de lokale API
- legacy video indelingen gebruiken in plaats van de video indeling die worden
- teruggegeven door Invidious. Dit kan helpen wanneer een video die wordt gestreamed
- via Invidious niet afspeelt in verband met regio restricties.
+ is geselecteerd als de standaard-API. Wanneer ingeschakeld zal de lokale API
+ legacy videoindelingen gebruiken in plaats van de videoindeling die worden
+ teruggegeven door Invidious. Dit kan helpen wanneer een video die wordt gestreamed
+ via Invidious niet afspeelt in verband met regiorestricties.
Proxy Videos Through Invidious: FreeTube zal verbinden met Invidious en daar de
video's downloaden in de plaats van de video's rechtstreeks bij YouTube vandaan
te halen. Dit overschrijft de ingestelde API voorkeur.
@@ -1010,16 +1124,23 @@ Tooltips:
in de gekozen externe videospeler kan worden geopend. Let op: Invidious-instellingen
beïnvloeden externe videospelers niet.'
DefaultCustomArgumentsTemplate: "(standaard: ‘{defaultCustomArguments}’)"
+ Ignore Default Arguments: Stuurt geen standaardargumenten naar de externe speler,
+ afgezien van de video-URL (bijvoorbeeld afspeelsnelheid, afspeellijst-URL,
+ enz.). Aangepaste argumenten worden nog steeds doorgegeven.
Distraction Free Settings:
- Hide Channels: Voer een kanaalnaam of kanaal-ID in om alle video's, afspeellijsten
- en het kanaal zelf te verbergen zodat ze niet worden weergegeven in zoeken,
- trending, populairst en aanbevolen. De ingevoerde kanaalnaam moet volledig overeenkomen
- en is hoofdlettergevoelig.
+ Hide Channels: Voer een kanaal-ID in om alle video's, afspeellijsten en het kanaal
+ zelf te verbergen zodat ze niet worden weergegeven in zoeken, trending, populairst
+ en aanbevolen. De ingevoerde kanaal-ID moet volledig overeenkomen en is hoofdlettergevoelig.
Hide Subscriptions Live: Deze instelling wordt overschreven door de app-brede
instelling ‘{appWideSetting}’, in het gedeelte ‘{subsection}’ van ‘{settingsSection}’
+ Hide Videos and Playlists Containing Text: Voer een woord, woordfragment of woordgroep
+ in (niet hoofdlettergevoelig) om alle video's en afspeellijsten waarvan de
+ oorspronkelijke titel dit bevat, in heel FreeTube te verbergen, met uitzondering
+ van alleen geschiedenis, uw afspeellijsten en video's in afspeellijsten.
SponsorBlock Settings:
UseDeArrowTitles: Vervangt videotitels met door gebruikers ingediende titels van
DeArrow.
+ UseDeArrowThumbnails: Videominiaturen vervangen met miniaturen van DeArrow.
Experimental Settings:
Replace HTTP Cache: Schakelt de schijfgebaseerde HTTP-cache van Electron uit en
schakelt een aangepaste afbeeldingscache in het geheugen in. Zal leiden tot
@@ -1048,12 +1169,6 @@ Downloading failed: Probleem bij download van "{videoTitle}"
Download folder does not exist: De download map "$" bestaat niet. Valt terug op "vraag
map" modus.
New Window: Nieuw venster
-Age Restricted:
- The currently set default instance is {instance}: Deze {instance} is leeftijdsbeperkt
- Type:
- Channel: Kanaal
- Video: Video
- This {videoOrPlaylist} is age restricted: Deze {videoOrPlaylist} heeft een leeftijdsbeperking
Screenshot Success: Schermafbeelding opgeslagen als "{filePath}"
Channels:
Title: Kanaallijst
@@ -1085,4 +1200,13 @@ Playlist will pause when current video is finished: Afspeellijst zal pauzeren wa
de huidige video is afgelopen
Playlist will not pause when current video is finished: Afspeellijst zal niet pauzeren
wanneer de huidige video is afgelopen
-Go to page: Naar pagina {page}
+Go to page: Ga naar {page}
+Tag already exists: Tag ‘{tagName}’ bestaat al
+Channel Unhidden: ‘{channel}’ verwijderd uit kanaalfilter
+Channel Hidden: ‘{channel}’ toegevoegd aan kanaalfilter
+Close Banner: Banier sluiten
+Age Restricted:
+ This channel is age restricted: Dit kanaal 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
+ 1 teken lang zijn | Bijgesneden invoer moet minimaal {length} tekens lang zijn
diff --git a/static/locales/nn.yaml b/static/locales/nn.yaml
index 096db71c1912c..8e454d553c7cc 100644
--- a/static/locales/nn.yaml
+++ b/static/locales/nn.yaml
@@ -770,9 +770,9 @@ Tooltips:
Invidious Instance: 'Invidious-førekomsten som FreeTube vil kople til for API-kall.'
Region for Trending: 'Trendsregionen lar deg enkelt velje kva lands populære videoar
du ynskjer å vise.'
- External Link Handling: "Vel kva FreeTube skal gjer, når ein trykker på ei lenke,\
- \ som ikkje kan bli opna av FreeTube. \nFreeTube vil vanlegvis opne lenka i\
- \ din standardnettlesar.\n"
+ External Link Handling: "Vel kva FreeTube skal gjer, når ein trykker på ei lenke,
+ som ikkje kan bli opna av FreeTube. \nFreeTube vil vanlegvis opne lenka i din
+ standardnettlesar.\n"
Player Settings:
Force Local Backend for Legacy Formats: 'Fungerer berre med Invidious-API-et som
standard. Når det er påslått, vil det lokale API-et køyre og bruke dei utdaterte
@@ -825,7 +825,7 @@ Tooltips:
Local API Error (Click to copy): 'Lokal API-feil (Klikk her for å kopiere)'
Invidious API Error (Click to copy): 'Invidious-API-feil (Klikk her for å kopiere)'
Falling back to Invidious API: 'Faller tilbake til Invidious-API-et'
-Falling back to the local API: 'Faller tilbake til det lokale API-et'
+Falling back to Local API: 'Faller tilbake til det lokale API-et'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Denne
videoen er utilgjengeleg grunna manglande format. Dette kan skuldast tilgangsavgrensingar
i ditt land.'
@@ -868,11 +868,6 @@ Channels:
Unsubscribe Prompt: Er du sikker på at du vil avslutte abonnementet på "{channelName}"?
Unsubscribe: Opphev abonnement
Screenshot Success: Lagra skjermbilete som "{filePath}"
-Age Restricted:
- This {videoOrPlaylist} is age restricted: Denne {videoOrPlaylist} er alderavgrensa
- Type:
- Video: Video
- Channel: Kanal
Screenshot Error: Skjermbilete feila. {error}
Downloading has completed: Nedlastinga av "{videoTitle}" er fullført
Ok: OK
diff --git a/static/locales/or.yaml b/static/locales/or.yaml
index 516c71bc3e6a0..357cce54e39c4 100644
--- a/static/locales/or.yaml
+++ b/static/locales/or.yaml
@@ -109,4 +109,3 @@ Channel:
Video:
External Player: {}
Tooltips: {}
-Age Restricted: {}
diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml
index d07c3209a655b..98b036de92eab 100644
--- a/static/locales/pl.yaml
+++ b/static/locales/pl.yaml
@@ -143,6 +143,7 @@ User Playlists:
dodać swój film | Wybierz playlistę, do której chcesz dodać swoje {videoCount}
film(y/ów)
N playlists selected: Zaznaczono {playlistCount}
+ Added {count} Times: Dodano {count} raz | Dodano {count} razy
SinglePlaylistView:
Toast:
There were no videos to remove.: Nie było żadnych filmów do usunięcia.
@@ -284,6 +285,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Hot Pink: Gorący róż
Pastel Pink: Pastelowy róż
+ Nordic: Nordycki
Main Color Theme:
Main Color Theme: 'Główny kolor motywu'
Red: 'Czerwony'
@@ -533,8 +535,8 @@ Settings:
Hide Upcoming Premieres: Schowaj nadchodzące premiery
Hide Channels: Schowaj filmy z kanałów
Hide Channels Placeholder: ID kanału
- Display Titles Without Excessive Capitalisation: Wyświetlaj tytuły bez nadmiernych
- wielkich liter
+ Display Titles Without Excessive Capitalisation: Wyświetlaj tytuły nie nadużywając
+ wielkich liter i interpunkcji
Hide Channel Community: Schowaj społeczność kanału
Hide Channel Shorts: Schowaj filmy Short kanału
Hide Featured Channels: Schowaj polecane kanały
@@ -916,6 +918,7 @@ Video:
Pause on Current Video: Zatrzymaj po tym filmie
Unhide Channel: Pokaż kanał
Hide Channel: Ukryj kanał
+ More Options: Więcej opcji
Videos:
#& Sort By
Sort By:
@@ -998,7 +1001,7 @@ Up Next: 'Następne'
Local API Error (Click to copy): 'Błąd lokalnego API (kliknij by skopiować)'
Invidious API Error (Click to copy): 'Błąd API Invidious (kliknij by skopiować)'
Falling back to Invidious API: 'Wycofywanie do API Invidious'
-Falling back to the local API: 'Wycofywanie do lokalnego API'
+Falling back to Local API: 'Wycofywanie do lokalnego API'
Subscriptions have not yet been implemented: 'Subskrypcje nie zostały jeszcze wprowadzone'
Loop is now disabled: 'Zapętlenie jest teraz wyłączone'
Loop is now enabled: 'Zapętlenie jest teraz włączone'
@@ -1180,13 +1183,6 @@ Download folder does not exist: Katalog pobierania "$" nie istnieje. Przełączo
tryb "pytaj o folder".
Screenshot Error: Wykonanie zrzutu nie powiodło się. {error}
Screenshot Success: Zapisano zrzut ekranu jako „{filePath}”
-Age Restricted:
- Type:
- Channel: kanał
- Video: film
- The currently set default instance is {instance}: Ten {instance} ma ograniczenie
- wiekowe
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} ma ograniczenie wiekowe'
New Window: Nowe okno
Channels:
Title: Lista kanałów
@@ -1223,3 +1219,7 @@ Channel Unhidden: '{channel} usunięty z filtra kanału'
Tag already exists: Tag „{tagName}” już istnieje
Trimmed input must be at least N characters long: Przycięte wyrażenie musi mieć przynajmniej
1 znak | Przycięte wyrażenie musi mieć przynajmniej {length} znaki/ów
+Age Restricted:
+ This video is age restricted: Ten film ma ograniczenie wiekowe
+ This channel is age restricted: Ten kanał ma ograniczenie wiekowe
+Close Banner: Zamknij Baner
diff --git a/static/locales/pt-BR.yaml b/static/locales/pt-BR.yaml
index a4ad27157ffb0..63af61b5f9d7f 100644
--- a/static/locales/pt-BR.yaml
+++ b/static/locales/pt-BR.yaml
@@ -1,8 +1,8 @@
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
- Esta parte do aplicativo ainda não está pronta. Volte mais tarde quando já houver
- progresso.
+ Esta parte do aplicativo ainda não está pronta. Volte mais tarde quando o progresso
+ tiver sido feito.
# Webkit Menu Bar
File: 'Arquivo'
@@ -13,7 +13,7 @@ Redo: 'Refazer'
Cut: 'Cortar'
Copy: 'Copiar'
Paste: 'Colar'
-Delete: 'Apagar'
+Delete: 'Excluir'
Select all: 'Selecionar tudo'
Reload: 'Recarregar'
Force Reload: 'Forçar recarga'
@@ -40,7 +40,7 @@ Global:
Counts:
Video Count: Contagem de videos
Channel Count: Contagem de Canais
- Subscriber Count: 1 assinante | {count} assinantes
+ Subscriber Count: 1 inscrito | {count} inscritos
View Count: 1 visualização | {count} visualizações
Watching Count: 1 assistindo | {count} assistindo
Input Tags:
@@ -72,7 +72,7 @@ Search Filters:
Movies: Filmes
Duration:
Duration: 'Duração'
- All Durations: 'Qualquer duração'
+ All Durations: 'Todas as durações'
Short (< 4 minutes): 'Curto (< 4 minutos)'
Long (> 20 minutes): 'Longo (> 20 minutos)'
# On Search Page
@@ -87,7 +87,7 @@ Subscriptions:
Subscriptions: 'Inscrições'
Latest Subscriptions: 'Últimas inscrições'
'Your Subscription list is currently empty. Start adding subscriptions to see them here.': 'Sua
- lista de inscrições está vazia. Comece a se inscrever para as ver aqui.'
+ lista de inscrições está vazia no momento. Adicione algumas para vê-las aqui.'
'Getting Subscriptions. Please wait.': 'Buscando inscrições. Por favor, aguarde.'
Refresh Subscriptions: Atualizar inscrições
'Getting Subscriptions. Please wait.': Obtendo inscrições. Por favor, espere.
@@ -96,14 +96,14 @@ Subscriptions:
perfil tem um grande número de inscrições. Forçando RSS para evitar limitação
de rede
Error Channels: Canais com erros
- Disabled Automatic Fetching: Você desativou a busca automática de assinaturas. Atualize-as
- para vê-las aqui.
- Empty Channels: No momento, seus canais inscritos não têm vídeos.
+ Disabled Automatic Fetching: Você desativou a busca automática de inscrições. Atualize
+ as inscrições para vê-las aqui.
+ Empty Channels: Atualmente, os canais em que você está inscrito não possuem vídeos.
Subscriptions Tabs: Abas de inscrição
All Subscription Tabs Hidden: Todos as abas de inscrição estão ocultas. Para ver
o conteúdo aqui, exiba algumas abas na seção "{subsection}" em "{settingsSection}".
Load More Posts: Carregar mais posts
- Empty Posts: No momento, seus canais inscritos não têm nenhum post.
+ Empty Posts: Atualmente, os canais em que você está inscrito não possuem postagens.
Trending:
Trending: 'Em alta'
Trending Tabs: Abas de Tendências
@@ -118,13 +118,14 @@ User Playlists:
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Os
seus vídeos salvos estão vazios. Clique no botão salvar no canto de um vídeo para
que ele seja listado aqui
- Playlist Message: Esta página não reflete playlists totalmente funcionais. Ele só
- lista vídeos que você salvou ou favoritou. Quando o trabalho estiver concluído,
- todos os vídeos atualmente aqui serão migrados para uma playlist 'Favoritos'.
+ Playlist Message: Esta página não reflete playlists totalmente funcionais. Ela lista
+ apenas os vídeos que você salvou ou adicionou aos favoritos. Quando o trabalho
+ terminar, todos os vídeos atualmente aqui serão migrados para uma playlist em
+ "Favoritos".
Search bar placeholder: Pesquisar na playlist
Empty Search Message: Não há vídeos nesta playlist que correspondam à sua pesquisa
You have no playlists. Click on the create new playlist button to create a new one.: Você
- não tem playlists. Clique no botão "criar playlist" para criar uma.
+ não tem playlists. Clique no botão "Criar playlist" para criar uma.
This playlist currently has no videos.: Esta playlist não tem vídeos atualmente.
Create New Playlist: Criar nova playlist
Add to Playlist: Adicionar à playlist
@@ -207,6 +208,7 @@ User Playlists:
N playlists selected: '{playlistCount} selecionadas'
Search in Playlists: Pesquisar nas playlists
Save: Salvar
+ Added {count} Times: Adicionado {count} vez | Adicionado {count} vezes
Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Tem
certeza de que deseja remover todos os vídeos assistidos desta playlist? Isto
não pode ser desfeito.
@@ -215,7 +217,7 @@ History:
# On History Page
History: 'Histórico'
Watch History: 'Histórico de visualizações'
- Your history list is currently empty.: 'Seu Histórico está vazio no momento.'
+ Your history list is currently empty.: 'Seu histórico está vazio no momento.'
Search bar placeholder: Pesquisar no histórico
Empty Search Message: Não há vídeos no seu histórico que correspondam à sua pesquisa
Settings:
@@ -246,26 +248,26 @@ Settings:
Blur: Desfocar
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Instância do
Invidious (A padrão é https://invidious.snopyta.org)'
- Region for Trending: 'Região para o “Em alta”'
+ Region for Trending: 'Região da Tendência'
#! List countries
- Check for Updates: Checar por atualizações
+ Check for Updates: Buscar por atualizações
Check for Latest Blog Posts: Verificar se há novas postagens no blog
View all Invidious instance information: Ver todas as informações da instância
Invidious
- System Default: Padrão do Sistema
+ System Default: Padrão do sistema
No default instance has been set: Nenhuma instância padrão foi definida
The currently set default instance is {instance}: A instância padrão atualmente
definida é {instance}
- Current instance will be randomized on startup: A instância atual será randomizada
+ Current instance will be randomized on startup: A instância atual será aleatória
na inicialização
Set Current Instance as Default: Definir instância atual como padrão
Clear Default Instance: Limpar instância padrão
- Current Invidious Instance: Instância do Invidious atual
+ Current Invidious Instance: Instância Invidious atual
External Link Handling:
No Action: Nenhuma ação
Ask Before Opening Link: Perguntar antes de abrir o link
Open Link: Abrir Link
- External Link Handling: Manuseio de link externo
+ External Link Handling: Tratamento de link externo
Theme Settings:
Theme Settings: 'Configurações de aparência'
Match Top Bar with Main Color: 'Usar a cor principal para a barra superior'
@@ -279,6 +281,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Rosa Pastel
Hot Pink: Rosa Choque
+ Nordic: Nordico
Main Color Theme:
Main Color Theme: 'Cor principal'
Red: 'Vermelha'
@@ -304,7 +307,7 @@ Settings:
Dracula Purple: 'Drácula Roxa'
Dracula Red: 'Drácula Vermelha'
Dracula Yellow: 'Drácula Amarelo'
- Catppuccin Mocha Rosewater: Catppuccin Mocha Rosewater
+ Catppuccin Mocha Rosewater: Catppuccin Mocha Água de Rosas
Catppuccin Mocha Flamingo: Catppuccin Mocha Flamingo
Catppuccin Mocha Mauve: Catppuccin Mocha Mauve
Catppuccin Mocha Pink: Catppuccin Mocha Rosa
@@ -317,23 +320,23 @@ Settings:
Catppuccin Mocha Yellow: Catppuccin Mocha Amarelo
Catppuccin Mocha Sky: Catppuccin Mocha Céu
Catppuccin Mocha Teal: Catppuccin Mocha Verde-azulado
- Catppuccin Mocha Lavender: Catppuccin moka lavanda
+ Catppuccin Mocha Lavender: Catppuccin Mocha Lavanda
Secondary Color Theme: 'Cor secundária'
#* Main Color Theme
UI Scale: Escala da Interface de Usuário
- Disable Smooth Scrolling: Desativar Rolagem Suave
- Expand Side Bar by Default: Expandir Barra Lateral por Padrão
- Hide Side Bar Labels: Ocultar etiquetas da barra lateral
- Hide FreeTube Header Logo: Esconder o logotipo do cabeçalho do FreeTube
+ Disable Smooth Scrolling: Desativar rolagem suave
+ Expand Side Bar by Default: Expandir barra lateral por padrão
+ Hide Side Bar Labels: Ocultar título na barra lateral
+ Hide FreeTube Header Logo: Ocultar logotipo FreeTube na barra superior
Player Settings:
- Player Settings: 'Configurações do vídeo'
+ Player Settings: 'Configurações do player'
Force Local Backend for Legacy Formats: 'Forçar motor local para formatos legados'
Remember History: 'Lembrar do histórico'
Play Next Video: 'Reproduzir próximo vídeo'
Turn on Subtitles by Default: 'Ativar legendas por padrão'
- Autoplay Videos: 'Reproduzir automaticamente'
+ Autoplay Videos: 'Reprodução automática dos vídeos'
Proxy Videos Through Invidious: 'Usar o Invidious como proxy'
- Autoplay Playlists: 'Reproduzir listas automaticamente'
+ Autoplay Playlists: 'Reprodução automática das playlists'
Enable Theatre Mode by Default: 'Habilitar modo teatro por padrão'
Default Volume: 'Volume padrão'
Default Playback Rate: 'Velocidade de reprodução'
@@ -356,18 +359,17 @@ Settings:
8k: '8k'
Playlist Next Video Interval: Intervalo do próximo vídeo da lista de reprodução
Next Video Interval: Próximo intervalo de vídeo
- Display Play Button In Video Player: Exibir botão de reprodução no tocador de
- vídeo
- Scroll Volume Over Video Player: Rolar volume sobre o reprodutor de vídeo
+ Display Play Button In Video Player: Mostrar botão "Reproduzir" no centro do player
+ Scroll Volume Over Video Player: Rolar volume sobre o player de vídeo
Fast-Forward / Rewind Interval: Intervalo de avanço / retrocesso rápido
- Scroll Playback Rate Over Video Player: Rolar a taxa de reprodução sobre o reprodutor
+ Scroll Playback Rate Over Video Player: Rolar a taxa de reprodução sobre o player
de vídeo
Max Video Playback Rate: Taxa máxima de reprodução de vídeo
Video Playback Rate Interval: Intervalo da taxa de reprodução de vídeo
Screenshot:
File Name Label: Padrão de nome de arquivo
Enable: Ativar captura de tela
- Ask Path: Perguntar onde salvar
+ Ask Path: Perguntar onde salvar os arquivos
Folder Label: Pasta de captura de tela
Folder Button: Selecionar pasta
Error:
@@ -381,13 +383,13 @@ Settings:
do vídeo 3 dígitos. %i ID do vídeo. Você também pode usar "\" ou "/" para
criar subpastas.
Enter Fullscreen on Display Rotate: Entrar em tela cheia ao girar a tela
- Skip by Scrolling Over Video Player: Pular rolando o tocador de vídeo
+ Skip by Scrolling Over Video Player: Ignorar ao deslocar por cima do player
Allow DASH AV1 formats: Permitir formatos DASH AV1
Comment Auto Load:
Comment Auto Load: Carregar automaticamente os comentários
Subscription Settings:
Subscription Settings: 'Configurações de inscrições'
- Hide Videos on Watch: 'Esconder vídeos após assisti-los'
+ Hide Videos on Watch: 'Ocultar vídeos após assisti-los'
Subscriptions Export Format:
Subscriptions Export Format: 'Formato de exportação das inscrições'
#& Freetube
@@ -398,7 +400,7 @@ Settings:
Export Subscriptions: 'Exportar inscrições'
How do I import my subscriptions?: 'Como posso importar minhas inscrições?'
Fetch Feeds from RSS: Buscar Informações através de RSS
- Fetch Automatically: Obter o feed automaticamente
+ Fetch Automatically: Buscar feed automaticamente
Only Show Latest Video for Each Channel: Exibe apenas o vídeo mais recente de
cada canal
Advanced Settings:
@@ -429,21 +431,21 @@ Settings:
#& No
Privacy Settings:
- Watch history has been cleared: Histórico de visualizações foi limpo
- Are you sure you want to remove your entire watch history?: Queres realmente remover
- todo o teu histórico de visualizações?
+ Watch history has been cleared: Histórico de visualizações foi apagado
+ Are you sure you want to remove your entire watch history?: Tem certeza de que
+ deseja remover todo o seu histórico de visualizações?
Remove Watch History: Remover histórico
- Search cache has been cleared: O cache de buscas foi limpo
- Are you sure you want to clear out your search cache?: Queres realmente limpar
- teu cache de buscas?
+ Search cache has been cleared: Cache de pesquisas foi apagado
+ Are you sure you want to clear out your search cache?: Tem certeza de que deseja
+ limpar o cache de pesquisa?
Clear Search Cache: Limpar cache de buscas
Save Watched Progress: Salvar progresso de visualização
Remember History: Lembrar histórico
Privacy Settings: Configurações de privacidade
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Tem
- certeza de que quer apagar todas as inscrições e perfis? Esta ação não pode
- ser desfeita.
- Remove All Subscriptions / Profiles: Remover Todas as Inscrições / Perfis
+ certeza de que deseja remover todas as inscrições e perfis? Isto não pode ser
+ desfeito.
+ 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
@@ -457,40 +459,40 @@ Settings:
sucesso
Invalid history file: Arquivo de histórico inválido
One or more subscriptions were unable to be imported: Uma ou mais inscrições não
- foram possíveis serem importadas
+ foram importadas
All subscriptions have been successfully imported: Todas as inscrições foram importadas
com sucesso
- Select Import Type: Selecione o tipo de importação
+ Select Import Type: Selecionar tipo de importação
Data Settings: Configurações de dados
- Export History: Exportar Histórico
- Import History: Importar Histórico
+ Export History: Exportar histórico
+ Import History: Importar histórico
Export NewPipe: Exportar NewPipe
Export YouTube: Exportar YouTube
Export FreeTube: Exportar FreeTube
- Export Subscriptions: Exportar Inscrições
+ Export Subscriptions: Exportar inscrições
Check for Legacy Subscriptions: Verificar se há inscrições em formato antigo
Import NewPipe: Importar NewPipe
Import YouTube: Importar YouTube
Import FreeTube: Importar FreeTube
- Import Subscriptions: Importar Inscrições
+ Import Subscriptions: Importar inscrições
Select Export Type: Escolher tipo de exportação
How do I import my subscriptions?: Como importo minhas inscrições?
Unknown data key: Chave de dados desconhecida
- Unable to write file: O arquivo não pôde ser escrito
+ Unable to write file: O arquivo não pôde ser salvo
Unable to read file: O arquivo não pôde ser lido
All watched history has been successfully exported: Todo o histórico de visualizações
foi exportado com sucesso
All watched history has been successfully imported: Todo o histórico de visualizações
foi importado com sucesso
- History object has insufficient data, skipping item: O objeto Histórico tem dados
- insuficientes, pulando item
+ History object has insufficient data, skipping item: O histórico tem dados insuficientes,
+ pulando item
This might take a while, please wait: Este processo pode demorar, por favor espere
Invalid subscriptions file: Arquivo de inscrições inválido
All subscriptions and profiles have been successfully imported: Todas as inscrições
e perfis foram importados com sucesso
- Profile object has insufficient data, skipping item: O objeto Perfil possui dados
- insuficientes, pulando item
- Manage Subscriptions: Administrar Inscrições
+ Profile object has insufficient data, skipping item: O perfil tem dados insuficientes,
+ ignorando o item
+ Manage Subscriptions: Administrar inscrições
Import Playlists: Importar playlists
Export Playlists: Exportar playlists
Playlist insufficient data: Dados insuficientes para a playlist "{playlist}",
@@ -499,9 +501,9 @@ Settings:
com sucesso
All playlists has been successfully imported: Todas as playlists foram importadas
com sucesso
- Subscription File: Arquivo de assinaturas
+ Subscription File: Arquivo de inscrições
History File: Arquivo de histórico
- Playlist File: Arquivo de Lista
+ Playlist File: Arquivo de playlist
Export Playlists For Older FreeTube Versions:
Label: Exportar playlists para versões mais antigas do FreeTube
Tooltip: "Esta opção exporta vídeos de todas as playlists para uma playlist
@@ -511,27 +513,27 @@ Settings:
Remover todas as playlists\" em \"Configurações de privacidade\".\n3. Inicie
a versão mais antiga do FreeTube e importe as playlists exportadas."
Distraction Free Settings:
- Hide Live Chat: Esconder chat ao vivo
- Hide Popular Videos: Esconder vídeos populares
- Hide Trending Videos: Esconder vídeos em alta
- Hide Recommended Videos: Esconder vídeos recomendados
- Hide Comment Likes: Esconder curtidas dos comentários
+ Hide Live Chat: Ocultar chat ao vivo
+ Hide Popular Videos: Ocultar vídeos populares
+ Hide Trending Videos: Ocultar vídeos em alta
+ Hide Recommended Videos: Ocultar vídeos recomendados
+ Hide Comment Likes: Ocultar "curtidas" em comentários
Distraction Free Settings: Configurações de Modo sem Distração
- Hide Channel Subscribers: Ocultar Assinantes do Canal
- Hide Video Likes And Dislikes: Ocultar curtidas e desgostos do vídeo
- Hide Video Views: Ocultar Visualizações de Vídeo
- Hide Active Subscriptions: Ocultar Inscrições Ativas
+ Hide Channel Subscribers: Ocultar número de inscritos
+ Hide Video Likes And Dislikes: Ocultar "curtidas" em vídeo
+ Hide Video Views: Ocultar visualizações de vídeo
+ Hide Active Subscriptions: Ocultar inscrições ativas
Hide Playlists: Ocultar playlist
Hide Video Description: Ocultar descrição do vídeo
Hide Sharing Actions: Ocultar ações de compartilhamento
Hide Comments: Ocultar comentários
Hide Live Streams: Ocultar transmissões ao vivo
Hide Chapters: Ocultar capítulos
- Hide Upcoming Premieres: Ocultar as Próximas Estréias
+ Hide Upcoming Premieres: Ocultar próximas estréias
Hide Channels Placeholder: ID do Canal
- Display Titles Without Excessive Capitalisation: Mostrar Títulos sem Capitalização
- Excessiva
- Hide Channels: Ocultar Vídeos dos Canais
+ Display Titles Without Excessive Capitalisation: Mostrar títulos sem capitalização
+ excessiva nem pontuação
+ Hide Channels: Ocultar vídeos dos canais
Sections:
Side Bar: Barra lateral
Channel Page: Página do canal
@@ -541,15 +543,15 @@ Settings:
Hide Featured Channels: Ocultar canais em destaque
Hide Channel Playlists: Ocultar playlists de canais
Hide Channel Community: Ocultar comunidade do canal
- Hide Channel Shorts: Ocultar Shorts do Canal
+ Hide Channel Shorts: Ocultar "Shorts" do canal
Hide Channel Podcasts: Ocultar podcasts do canal
Hide Channel Releases: Ocultar lançamentos do canal
Hide Subscriptions Videos: Ocultar vídeos de inscrições
- Hide Subscriptions Shorts: Ocultar Shorts de Inscrições
- Hide Subscriptions Live: Ocultar inscrições de transmissões ao vivo
- Hide Profile Pictures in Comments: Esconder imagens do perfil nos comentários
+ Hide Subscriptions Shorts: Ocultar "Shorts" de inscrições
+ Hide Subscriptions Live: Ocultar transmissões ao vivo de inscrições
+ Hide Profile Pictures in Comments: Ocultar imagens de perfil nos comentários
Blur Thumbnails: Desfocar Miniaturas
- Hide Subscriptions Community: Ocultar comunidade inscritas
+ Hide Subscriptions Community: Ocultar comunidade de inscrições
Hide Channels Invalid: ID de canal fornecido é inválido
Hide Channels Disabled Message: Alguns canais foram bloqueados por ID e não foram
processados. O recurso é bloqueado enquanto esses IDs estão sendo atualizados
@@ -570,10 +572,10 @@ Settings:
Test Proxy: Testar Proxy
Clicking on Test Proxy will send a request to: Clicando em Test Proxy, será enviado
uma solicitação para
- Proxy Port Number: Número da Porta de Proxy
+ Proxy Port Number: Porta do Proxy
Proxy Host: Host do Proxy
- Proxy Protocol: Protocolo de Proxy
- Enable Tor / Proxy: Ativar Tor / Proxy
+ Proxy Protocol: Protocolo do Proxy
+ Enable Tor / Proxy: Ativar Tor/Proxy
Proxy Settings: Configurações de Proxy
Error getting network information. Is your proxy configured properly?: Erro ao
obter informações da rede. Seu proxy está configurado corretamente?
@@ -584,8 +586,8 @@ Settings:
são pulados
'SponsorBlock API Url (Default is https://sponsor.ajay.app)': URL da API SponsorBlock
(o padrão é https://sponsor.ajay.app)
- Enable SponsorBlock: Ativar o Bloqueio de Patrocinadores
- SponsorBlock Settings: Configurações de Bloqueio de Patrocinadores
+ Enable SponsorBlock: Ativar SponsorBlock
+ SponsorBlock Settings: Configurações SponsorBlock
Skip Options:
Show In Seek Bar: Mostrar na barra de busca
Prompt To Skip: Solicitar para pular
@@ -609,7 +611,7 @@ Settings:
Ignore Default Arguments: Ignorar argumentos padrão
Download Settings:
Download Settings: Configurações de download
- Ask Download Path: Peça o caminho de download
+ Ask Download Path: Perguntar onde salvar o download
Choose Path: Escolha o caminho
Open in web browser: Abrir no navegador web
Download in app: Baixar no aplicativo
@@ -620,19 +622,19 @@ Settings:
Parental Control Settings: Configurações de Controle Parental
Hide Unsubscribe Button: Ocultar botão de cancelamento de inscrição
Experimental Settings:
- Experimental Settings: Configurações Experimentais
+ Experimental Settings: Configurações experimentais
Warning: Essas configurações são experimentais, elas podem causar travamentos
enquanto ativadas. Fazer backups é altamente recomendado. Use por sua conta
e risco!
Replace HTTP Cache: Repor Cache HTTP
Password Settings:
Password Settings: Configurações de senha
- Set Password: Definir Senha
+ Set Password: Definir senha
Remove Password: Remover senha
Set Password To Prevent Access: Defina uma senha para impedir o acesso às configurações
Password Dialog:
Unlock: Desbloquear
- Password Incorrect: Senha Incorreta
+ Password Incorrect: Senha incorreta
Password: Senha
Enter Password To Unlock: Digite a senha para desbloquear as configurações
Expand All Settings Sections: Expandir todas as seções de configurações
@@ -689,8 +691,8 @@ About:
Mastodon: Mastodon
Email: E-mail
Blog: Blog
- Website: Site web
- Please check for duplicates before posting: Verifique se há duplicatas antes de
+ Website: Site
+ Please check for duplicates before posting: Verifique se há duplicações antes de
postar
Discussions: Discussões
Channel:
@@ -710,7 +712,7 @@ Channel:
Oldest: 'Antigos'
Most Popular: 'Mais populares'
Playlists:
- Playlists: 'Listas'
+ Playlists: 'Playlists'
This channel does not currently have any playlists: 'Este canal não possui nenhuma
lista no momento'
Sort Types:
@@ -738,18 +740,18 @@ Channel:
Community:
This channel currently does not have any posts: Neste momento, este canal não
tem publicações
- votes: '{votes} Votos'
+ votes: '{votes} votos'
Reveal Answers: Revelar respostas
Hide Answers: Ocultar respostas
Video hidden by FreeTube: Vídeo escondido pelo FreeTube
- Channel Tabs: Abas dos Canais
+ Channel Tabs: Abas de canais
Live:
Live: Ao vivo
This channel does not currently have any live streams: Este canal não tem nenhuma
transmissão ao vivo no momento
Shorts:
- This channel does not currently have any shorts: Este canal não tem atualmente
- nenhum short
+ This channel does not currently have any shorts: Este canal não tem nenhum "Shorts"
+ no momento
Podcasts:
Podcasts: Podcasts
This channel does not currently have any podcasts: Este canal não possui podcasts
@@ -762,7 +764,7 @@ Video:
Mark As Watched: 'Marcar como assistido'
Remove From History: 'Remover do histórico'
Video has been marked as watched: 'O vídeo foi marcado como assistido'
- Video has been removed from your history: 'O vídeo foi removido do teu histórico'
+ Video has been removed from your history: 'O vídeo foi removido do seu histórico'
Open in YouTube: 'Abrir no YouTube'
Copy YouTube Link: 'Copiar link do YouTube'
Open YouTube Embedded Player: 'Abrir vídeo incorporado do YouTube'
@@ -779,7 +781,7 @@ Video:
Live Chat is currently not supported in this build.: 'Chat ao vivo não é suportado
nessa versão.'
'Chat is disabled or the Live Stream has ended.': 'O chat está desativado ou a transmissão
- ao vivo se encerrou.'
+ ao vivo terminou.'
Live chat is enabled. Chat messages will appear here once sent.: 'Chat ao vivo habilitado.
As mensagens irão aparecer uma vez enviadas.'
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'O
@@ -798,20 +800,20 @@ Video:
Oct: 'Out'
Nov: 'Nov'
Dec: 'Dez'
- Second: 'segundo'
- Seconds: 'segundos'
- Hour: 'hora'
- Hours: 'horas'
- Day: 'dia'
- Days: 'dias'
- Week: 'semana'
- Weeks: 'semanas'
- Month: 'mês'
- Months: 'meses'
- Year: 'ano'
- Years: 'anos'
- Ago: 'Atrás'
- Upcoming: 'Futuramente em'
+ Second: 'Segundo'
+ Seconds: 'Segundos'
+ Hour: 'Hora'
+ Hours: 'Horas'
+ Day: 'Dia'
+ Days: 'Dias'
+ Week: 'Semana'
+ Weeks: 'Semanas'
+ Month: 'Mês'
+ Months: 'Meses'
+ Year: 'Ano'
+ Years: 'Anos'
+ Ago: 'atrás'
+ Upcoming: 'Estreia em'
Minutes: Minutos
Minute: Minuto
Less than a minute: Menos de um minuto
@@ -828,17 +830,17 @@ Video:
High: Alta
audio only: somente áudio
video only: somente vídeo
- Download Video: Baixar Vídeo
+ Download Video: Baixar vídeo
Starting soon, please refresh the page to check again: Vai começar em breve, favor
atualizar a página para verificar novamente
Autoplay: Reprodução Automática
- Play Previous Video: Reproduzir o Vídeo Anterior
- Play Next Video: Reproduzir o Próximo Vídeo
+ Play Previous Video: Reproduzir vídeo anterior
+ Play Next Video: Reproduzir próximo vídeo
Reverse Playlist: Inverter ordem da playlist
Shuffle Playlist: Playlist aleatória
Loop Playlist: Repetir playlist
Copy Invidious Channel Link: Copiar link do canal no Invidious
- Open Channel in Invidious: Abrir Canal no Invidious
+ Open Channel in Invidious: Abrir canal no Invidious
Copy YouTube Channel Link: Copiar o link do canal no YouTube
Open Channel in YouTube: Abrir canal no YouTube
Video has been removed from your saved list: O vídeo foi removido da sua lista de
@@ -853,12 +855,12 @@ Video:
outro: Conclusão
intro: Introdução
sponsor: Patrocinador
- filler: Enchimento
+ filler: Preenchimento
recap: Recapitulação
Skipped segment: Segmentos pulados
External Player:
Unsupported Actions:
- shuffling playlists: embaralhar playlists
+ shuffling playlists: embaralhando playlists
opening specific video in a playlist (falling back to opening the video): abrir
um vídeo específico em uma playlist (voltar à abertura do vídeo)
reversing playlists: revertendo playlists
@@ -885,7 +887,7 @@ Video:
Video statistics are not available for legacy videos: As estatísticas de vídeo
não estão disponíveis para vídeos mais antigos
Video ID: ID do vídeo
- Player Dimensions: Dimensões do reprodutor
+ Player Dimensions: Dimensões do player
Bitrate: Taxa de bits
Volume: Volume
Bandwidth: Largura de banda
@@ -894,15 +896,16 @@ Video:
Dropped / Total Frames: Quadros perdidos / Total de quadros
Premieres in: Estréias em
Premieres: Estreia
- Scroll to Bottom: Rolar para o final
- Show Super Chat Comment: Mostrar Comentários do Super Chat
+ Scroll to Bottom: Ir para o final
+ Show Super Chat Comment: Mostrar comentários do Super Chat
Upcoming: Em breve
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': O
bate-papo ao vivo não está disponível para esta transmissão. Pode ter sido desativado
pelo responsável.
Pause on Current Video: Pausar no vídeo atual
- Unhide Channel: Mostrar Canal
- Hide Channel: Ocultar o canal
+ Unhide Channel: Mostrar canal
+ Hide Channel: Ocultar canal
+ More Options: Mais opções
Videos:
#& Sort By
Sort By:
@@ -934,34 +937,34 @@ Change Format:
este vídeo
Share:
Share Video: 'Compartilhar vídeo'
- Share Playlist: 'Compartilhar Lista'
+ Share Playlist: 'Compartilhar playlist'
Copy Link: 'Copiar link'
Open Link: 'Abrir link'
Copy Embed: 'Copiar incorporado'
Open Embed: 'Abrir incorporado'
# On Click
- Invidious URL copied to clipboard: 'O URL do Invidious está na área de transferência'
- Invidious Embed URL copied to clipboard: 'O URL incorporado do Invidious está na
- área de transferência'
- YouTube URL copied to clipboard: 'O URL do YouTube está na área de transferência'
- YouTube Embed URL copied to clipboard: 'O URL incorporado do YouTube está na área
- de transferência'
+ Invidious URL copied to clipboard: 'URL Invidious copiado para a área de transferência'
+ Invidious Embed URL copied to clipboard: 'URL incorporado do Invidious copiado para
+ a área de transferência'
+ YouTube URL copied to clipboard: 'O URL do YouTube copiado para a área de transferência'
+ YouTube Embed URL copied to clipboard: 'O URL incorporado do YouTube copiado para
+ a área de transferência'
YouTube Channel URL copied to clipboard: URL do Canal Youtube copiado para a área
de transferência
- Invidious Channel URL copied to clipboard: URL do Canal Invidious copiado para a
+ Invidious Channel URL copied to clipboard: URL do canal Invidious copiado para a
área de transferência
- Include Timestamp: Incluir Marcação de Tempo
- Share Channel: Compartilhar Canal
-Mini Player: 'Visualizador Pequeno'
+ Include Timestamp: Incluir marcação de tempo
+ Share Channel: Compartilhar canal
+Mini Player: 'Mini Player'
Comments:
Comments: 'Comentários'
Click to View Comments: 'Mostrar comentários'
Getting comment replies, please wait: 'Buscando respostas, por favor, aguarde'
Show Comments: 'Mostrar comentários'
- Hide Comments: 'Esconder comentários'
+ Hide Comments: 'Ocultar comentários'
# Context: View 10 Replies, View 1 Reply
View: 'Ver'
- Hide: 'Esconder'
+ Hide: 'Ocultar'
Replies: 'Respostas'
Reply: 'Resposta'
There are no comments available for this video: 'Não há comentários disponíveis
@@ -972,7 +975,7 @@ Comments:
Top comments: Melhores comentários
Sort by: Ordenar por
There are no more comments for this video: Não há mais comentários para este vídeo
- Show More Replies: Mostrar Mais Respostas
+ Show More Replies: Mostrar mais respostas
Pinned by: Fixado por
And others: e outros
From {channelName}: de {channelName}
@@ -986,7 +989,7 @@ Up Next: 'Próximo'
Local API Error (Click to copy): 'Erro da API local (clique para copiar)'
Invidious API Error (Click to copy): 'Erro da API do Invidious (clique para copiar)'
Falling back to Invidious API: 'Recorrendo à API do Invidious'
-Falling back to the local API: 'Recorrendo à API local'
+Falling back to Local API: 'Recorrendo à API local'
Subscriptions have not yet been implemented: 'Inscrições ainda não foram implementadas'
Loop is now disabled: 'O ciclo foi desativado'
Loop is now enabled: 'O ciclo está ativado'
@@ -1000,56 +1003,56 @@ Canceled next video autoplay: 'Auto-reprodução foi cancelada para o próximo v
Yes: 'Sim'
No: 'Não'
-Locale Name: português (BR)
+Locale Name: Português (BR)
Profile:
- Delete Profile: Deletar Perfil
- Update Profile: Atualizar Perfil
- Profile Preview: Visualização do Perfil
- Color Picker: Selecionador de Cores
- Create New Profile: Criar novo Perfil
- All Channels: Todos os Canais
- All subscriptions will also be deleted.: Todas as inscrições serão também deletadas.
- Profile could not be found: O perfil não pôde ser encontrado
- Are you sure you want to delete this profile?: Tem certeza de que quer apagar este
+ Delete Profile: Excluir perfil
+ Update Profile: Atualizar perfil
+ Profile Preview: Pré-visualização do perfil
+ Color Picker: Seletor de cores
+ Create New Profile: Criar novo perfil
+ All Channels: Todos os canais
+ All subscriptions will also be deleted.: Todas as inscrições serão também excluídas.
+ Profile could not be found: Perfil não encontrado
+ Are you sure you want to delete this profile?: Tem certeza de que quer excluir este
perfil?
- Make Default Profile: Tornar Perfil Padrão
- Create Profile: Criar Perfil
- Custom Color: Cor Personalizada
- Edit Profile: Editar Perfil
- Profile Manager: Gerenciador de Perfis
- Profile Select: Seleção de Perfil
+ Make Default Profile: Tornar perfil padrão
+ Create Profile: Criar perfil
+ Custom Color: Cor personalizada
+ Edit Profile: Editar perfil
+ Profile Manager: Gerenciador de perfis
+ Profile Select: Seleção de perfil
Are you sure you want to delete the selected channels? This will not delete the channel from any other profile.: Tem
- certeza de que quer apagar os canais slecionados? Esta ação não vai apagar os
+ certeza de que quer apagar os canais selecionados? Esta ação não vai excluir os
canais de nenhum outro perfil.
? This is your primary profile. Are you sure you want to delete the selected channels? The
same channels will be deleted in any profile they are found in.
- : Este é o seu perfil principal. Tem certeza de que quer apagar os canais selecionados?
- Os mesmos vão ser apagados em qualquer perfil em que se encontrem.
+ : Este é o seu perfil principal. Tem certeza de que quer excluir os canais selecionados?
+ Os mesmos vão ser excluídos em qualquer perfil em que se encontrem.
No channel(s) have been selected: Nenhum canal foi selecionado
- Add Selected To Profile: Adicionar Selecionado ao Perfil
- Delete Selected: Apagar Selecionados
- Select None: Selecionar Nenhum
- Select All: Selecionar Todos
+ Add Selected To Profile: Adicionar selecionado ao perfil
+ Delete Selected: Excluir selecionados
+ Select None: Selecionar nenhum
+ Select All: Selecionar todos
'{number} selected': '{number} selecionado'
- Other Channels: Outros Canais
+ Other Channels: Outros canais
Subscription List: Lista de Inscrições
'{profile} is now the active profile': '{profile} é agora o perfil ativo'
Your default profile has been changed to your primary profile: Seu perfil padrão
- foi mudado para o seu perfil principal
+ foi alterado para seu perfil principal
Removed {profile} from your profiles: '{profile} foi removido dos seus perfis'
Your default profile has been set to {profile}: Seu perfil padrão foi definido como
{profile}
Profile has been updated: Perfil atualizado
Profile has been created: Perfil criado
- Your profile name cannot be empty: Seu nome de perfil não pode ficar em branco
- Profile Filter: Filtro de Perfil
- Profile Settings: Configurações de Perfil
- Toggle Profile List: Ativar/Desativar Lista de Perfis
+ Your profile name cannot be empty: O nome do seu perfil não pode ficar vazio
+ Profile Filter: Filtro de perfil
+ Profile Settings: Configurações de perfil
+ Toggle Profile List: Alternar lista de perfis
Profile Name: Nome do perfil
- Edit Profile Name: Editar o nome do perfil
+ Edit Profile Name: Editar nome do perfil
Create Profile Name: Criar nome de perfil
- Open Profile Dropdown: Abrir Menu Suspenso de Perfil
- Close Profile Dropdown: Fechar Menu Suspenso de Perfil
+ Open Profile Dropdown: Abrir menu do perfil
+ Close Profile Dropdown: Fechar menu do perfil
Version {versionNumber} is now available! Click for more details: A versão {versionNumber}
já está disponível! Clique para mais detalhes
A new blog is now available, {blogTitle}. Click to view more: 'Um novo blog está disponível,
@@ -1062,7 +1065,7 @@ This video is unavailable because of missing formats. This can happen due to cou
Tooltips:
Subscription Settings:
Fetch Feeds from RSS: Quando ativado, o FreeTube usará RSS em vez de seu método
- padrão para obter o feed de sua assinatura. O RSS é mais rápido e evita bloqueio
+ padrão para obter o feed de sua inscrição. O RSS é mais rápido e evita bloqueio
de IP, mas não fornece certas informações como duração do vídeo ou status ao
vivo
Fetch Automatically: Quando habilitado, o FreeTube buscará automaticamente seu
@@ -1074,11 +1077,10 @@ Tooltips:
áudio são para transmissões sem vídeo.
Proxy Videos Through Invidious: Conectar-se-á ao Invidious para obter vídeos em
vez de fazer uma conexão direta com o YouTube. Ignora a preferência da API.
- Force Local Backend for Legacy Formats: Só funciona quando a API do Invidious
- é predefinida. Quando ativada, a API local será executada e usará os formatos
- antigos retornados por ela em vez dos retornados pelo Invidious. É útil quando
- os vídeos retornados pelo Invidious não são reproduzidos devido a restrições
- de país.
+ Force Local Backend for Legacy Formats: Funciona apenas quando a API do Invidious
+ é o padrão. Quando ativada, a API Local será executada e usará os formatos herdados
+ retornados por ela, em vez dos retornados pelo Invidious. Ajuda quando os vídeos
+ retornados pelo Invidious não são reproduzidos devido a restrições do país.
Scroll Playback Rate Over Video Player: Com o cursor sobre o vídeo, pressione
e segure a tecla Control (tecla Command no Mac) e role a roda do mouse para
frente ou para trás para controlar a taxa de reprodução. Pressione e segure
@@ -1089,7 +1091,7 @@ Tooltips:
estilo MPV.
Allow DASH AV1 formats: Os formatos DASH AV1 podem ter melhor aspecto do que os
formatos DASH H.264. Os formatos DASH AV1 requerem mais potência para reprodução!
- Eles não estão disponíveis em todos os vídeos, e nesses casos o reprodutor usará
+ Eles não estão disponíveis em todos os vídeos, e nesses casos o player usará
os formatos DASH H.264.
General Settings:
Region for Trending: A região de tendências lhe permite de escolher quais vídeos
@@ -1113,7 +1115,7 @@ Tooltips:
é fechada.
External Player Settings:
Custom External Player Arguments: Quaisquer argumentos de linha de comando personalizados,
- separados por ponto e vírgula (';'), você deseja que seja passado para o reprodutor
+ separados por ponto e vírgula (';'), você deseja que seja passado para o player
externo.
Ignore Warnings: Suprime os avisos para quando o player externo atual não suporta
a ação atual (por exemplo, reverter playlist, etc.).
@@ -1131,16 +1133,16 @@ Tooltips:
Replace HTTP Cache: Desabilita o cache HTTP baseado em disco do Electron e habilita
um cache de imagem em memória personalizado. Levará ao aumento do uso de RAM.
Distraction Free Settings:
- Hide Channels: Digite um nome ou ID de canal para ocultar todos os vídeos, as
- listas de reprodução e o próprio canal dos resultados da busca, tendências,
- mais populares e recomendados. O nome do canal digitado deve coincidir exatamente,
- observando maiúsculas e minúsculas.
+ Hide Channels: Insira o ID de um canal para impedir que todos os vídeos, playlists
+ e o próprio canal apareçam nas pesquisas, tendências, mais populares e recomendados.
+ O ID do canal inserido deve ser uma correspondência completa e diferenciar maiúsculas
+ de minúsculas.
Hide Subscriptions Live: Esta definição é substituída pela definição de toda a
aplicação "{appWideSetting}", na seção "{subsection}" da "{settingsSection}"
- Hide Videos and Playlists Containing Text: Insira uma palavra, trecho de palavra
+ Hide Videos and Playlists Containing Text: Insira uma palavra, trecho de uma palavra
ou frase (sem distinção entre maiúsculas e minúsculas) para ocultar todos os
vídeos e playlists cujos títulos originais a contenham em todo o FreeTube, excluindo
- apenas Histórico, Suas playlists e vídeos dentro das playlists.
+ apenas histórico, suas playlists e vídeos dentro das playlists.
SponsorBlock Settings:
UseDeArrowTitles: Substituir títulos de vídeo por títulos enviados pelo usuário
a partir do DeArrow.
@@ -1173,24 +1175,16 @@ Channels:
Search bar placeholder: Buscar canais
Empty: Sua lista de canais está vazia no momento.
Unsubscribe: Cancelar inscrição
- Unsubscribed: '{channelName} foi removido de suas assinaturas'
+ Unsubscribed: '{channelName} foi removido de suas inscrições'
Unsubscribe Prompt: Tem certeza de que quer cancelar a sua inscrição de "{channelName}"?
Count: '{number} canal(is) encontrado(s).'
-Age Restricted:
- The currently set default instance is {instance}: Este {instance} tem restrição
- de idade
- Type:
- Channel: Canal
- Video: Vídeo
- This {videoOrPlaylist} is age restricted: Esse(a) {videoOrPlaylist} tem restrição
- de idade
-Screenshot Success: Captura de tela salva como "{filePath}"
+Screenshot Success: Captura de tela salva em "{filePath}"
Screenshot Error: Falha na captura de tela. {error}
Preferences: Preferências
Clipboard:
- Copy failed: Copiar para a área de transferência falhou
- Cannot access clipboard without a secure connection: Não pode acessar a área de
- transferência sem uma conexão segura
+ Copy failed: Falha ao copiar para a área de transferência
+ Cannot access clipboard without a secure connection: Não é possível acessar a área
+ de transferência sem uma conexão segura
Chapters:
'Chapters list visible, current chapter: {chapterName}': 'Lista visível de capítulos,
capítulo atual: {chapterName}'
@@ -1212,3 +1206,7 @@ Channel Unhidden: '{channel} removido do filtro do canal'
Trimmed input must be at least N characters long: A entrada cortada deve ter pelo
menos 1 caractere | A entrada cortada precisa ter pelo menos {length} caracteres
Tag already exists: A tag "{tagName}" já existe
+Close Banner: Fechar Banner
+Age Restricted:
+ 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
diff --git a/static/locales/pt-PT.yaml b/static/locales/pt-PT.yaml
index 276c3c1a06061..679ca1b774360 100644
--- a/static/locales/pt-PT.yaml
+++ b/static/locales/pt-PT.yaml
@@ -1035,7 +1035,7 @@ Tooltips:
Local API Error (Click to copy): Erro na API local (clique para copiar)
Invidious API Error (Click to copy): Erro na API Invidious (clique para copiar)
Falling back to Invidious API: Ocorreu um erro e vamos usar a API Invidious
-Falling back to the local API: Ocorreu um erro e vamos usar a API local
+Falling back to Local API: Ocorreu um erro e vamos usar a API local
This video is unavailable because of missing formats. This can happen due to country unavailability.: Este
vídeo não está disponível porque faltam formatos. Isto pode acontecer devido à indisponibilidade
no seu país.
@@ -1083,13 +1083,6 @@ Channels:
Unsubscribe: Anular subscrição
Unsubscribed: '{channelName} foi removido das suas subscrições'
Unsubscribe Prompt: Tem a certeza de que pretende anular a subscrição de "{channelName}"?
-Age Restricted:
- The currently set default instance is {instance}: Este {instance} tem restrição
- de idade
- Type:
- Channel: Canal
- Video: Vídeo
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} tem restrição de idade'
Downloading has completed: '"{videoTitle}" foi descarregado'
Starting download: A descarregar "{videoTitle}"
Downloading failed: Ocorreu um erro ao descarregar "{videoTitle}"
diff --git a/static/locales/pt.yaml b/static/locales/pt.yaml
index a2004dfa1e31e..fc38aa0afb6b6 100644
--- a/static/locales/pt.yaml
+++ b/static/locales/pt.yaml
@@ -43,6 +43,8 @@ Global:
Subscriber Count: 1 assinante | {count} assinantes
View Count: 1 visualização | {contagem} visualizações
Watching Count: 1 a assistir | {count} a assistir
+ Input Tags:
+ Length Requirement: A etiqueta tem que ter, pelo menos, {number} caracteres
Version {versionNumber} is now available! Click for more details: 'A versão {versionNumber}
está disponível! Clique aqui para mais informações.'
Download From Site: 'Descarregar do site'
@@ -175,6 +177,9 @@ User Playlists:
Playlist {playlistName} has been deleted.: A lista de reprodução {playlistName}
foi eliminada.
This playlist does not exist: Esta lista de reprodução não existe
+ This playlist is now used for quick bookmark: Esta lista de reprodução é agora
+ usada como marcador rápido
+ Quick bookmark disabled: Marcador rápido desativado
AddVideoPrompt:
Search in Playlists: Pesquisar nas listas de reprodução
Save: Guardar
@@ -212,6 +217,9 @@ User Playlists:
Playlist Description: Descrição da lista de reprodução
Add to Favorites: Adicionar a {playlistName}
Remove from Favorites: Remover de {playlistName}
+ Enable Quick Bookmark With This Playlist: Ativar marcador rápido para esta lista
+ de reprodução
+ Disable Quick Bookmark: Desativar marcador rápido
History:
# On History Page
History: 'Histórico'
@@ -279,6 +287,7 @@ Settings:
Catppuccin Mocha: Cappuccino mocha
Pastel Pink: Rosa pastel
Hot Pink: Rosa choque
+ Nordic: Nórdico
Main Color Theme:
Main Color Theme: 'Cor principal'
Red: 'Vermelho'
@@ -516,6 +525,8 @@ Settings:
Category Color: Cor da categoria
UseDeArrowTitles: Utilizar títulos de vídeo DeArrow
UseDeArrowThumbnails: Usar 'DeArrow' para miniaturas
+ 'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': 'URL
+ da API do gerador de miniaturas DeArrow (padrão: https://dearrow-thumb.ajay.app)'
Proxy Settings:
Error getting network information. Is your proxy configured properly?: Erro ao
obter informações da rede. O seu proxy está configurado corretamente?
@@ -579,6 +590,10 @@ Settings:
Hide Channels Already Exists: Este ID já existe
Hide Channels API Error: Não foi possível obter o utilizador através do ID. Verifique
se o ID indicado está correto.
+ Hide Videos and Playlists Containing Text Placeholder: Palavra, fragmento de palavra
+ ou frase
+ Hide Videos and Playlists Containing Text: Ocultar vídeos e listas de reprodução
+ que contenham textos
External Player Settings:
Custom External Player Arguments: Argumentos do reprodutor externo
Custom External Player Executable: Executável do reprodutor externo
@@ -779,6 +794,7 @@ Channel:
Hide Answers: Ocultar respostas
Reveal Answers: Revelar respostas
votes: '{votes} votos'
+ Video hidden by FreeTube: Freetube ocultou este vídeo
Live:
Live: Em direto
This channel does not currently have any live streams: Este canal não tem, atualmente,
@@ -1021,7 +1037,7 @@ Up Next: 'A seguir'
Local API Error (Click to copy): 'Erro na API local (clique para copiar)'
Invidious API Error (Click to copy): 'Erro na API Invidious (clique para copiar)'
Falling back to Invidious API: 'Ocorreu um erro e vamos usar a API Invidious'
-Falling back to the local API: 'Ocorreu um erro e vamos usar a API local'
+Falling back to Local API: 'Ocorreu um erro e vamos usar a API local'
Subscriptions have not yet been implemented: 'As subscrições ainda não foram implementadas'
Loop is now disabled: 'Repetição desativada'
Loop is now enabled: 'Repetição ativada'
@@ -1126,6 +1142,7 @@ Tooltips:
SponsorBlock Settings:
UseDeArrowTitles: Substituir títulos de vídeo por títulos enviados pelo utilizador
a partir do DeArrow.
+ UseDeArrowThumbnails: Substituir miniaturas do vídeo por miniaturas DeArrow.
Search Bar:
Clear Input: Limpar entrada
Are you sure you want to open this link?: Tem a certeza de que deseja abrir a ligação?
@@ -1136,13 +1153,6 @@ Downloading failed: Ocorreu um erro ao descarregar "{videoTitle}"
Downloading has completed: '"{videoTitle}" foi descarregado'
Screenshot Success: Captura de ecrã guardada como "{filePath}"
Screenshot Error: Erro ao capturar o ecrã. {error}
-Age Restricted:
- The currently set default instance is {instance}: Este {instance} tem restrição
- de idade
- Type:
- Channel: Canal
- Video: Vídeo
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} tem restrição de idade'
New Window: Nova janela
Channels:
Count: '{number} canais encontrados.'
@@ -1176,3 +1186,4 @@ Playlist will not pause when current video is finished: A lista de reprodução
Channel Hidden: '{channel} adicionado ao filtro do canal'
Go to page: Ir para {page}
Channel Unhidden: '{channel} removido do filtro do canal'
+Tag already exists: '"{tagName}" já existe'
diff --git a/static/locales/ro.yaml b/static/locales/ro.yaml
index 74fcdd752fb30..652aad2d9771c 100644
--- a/static/locales/ro.yaml
+++ b/static/locales/ro.yaml
@@ -42,6 +42,8 @@ Global:
View Count: 1 vizionare | {count} vizionări
Channel Count: 1 canal | {count} canale
Watching Count: 1 se uită | {count} se uită
+ Input Tags:
+ Length Requirement: Tag-ul trebuie să aibă cel puțin {number} caractere
Version {versionNumber} is now available! Click for more details: 'Versiunea {versionNumber}
este acum disponibilă! Click pentru mai multe detalii'
Download From Site: 'Descărcați de pe site'
@@ -108,6 +110,8 @@ Subscriptions:
All Subscription Tabs Hidden: Toate filele de abonament sunt ascunse. Pentru a vedea
conținutul aici, vă rugăm să afișați unele file din secțiunea "{subsection}” din
"{settingsSection}”.
+ Empty Posts: Canalele tale abonate nu au momentan nicio postare.
+ Load More Posts: Încarcă mai multe postări
Trending:
Trending: 'Tendințe'
Trending Tabs: File în tendințe
@@ -853,7 +857,7 @@ Up Next: 'În continuare'
Local API Error (Click to copy): 'Eroare API locală (Faceți clic pentru a copia)'
Invidious API Error (Click to copy): 'Eroare API Invidious (Faceți clic pentru a copia)'
Falling back to Invidious API: 'Revenine la Invidious API'
-Falling back to the local API: 'Revenire la API-ul local'
+Falling back to Local API: 'Revenire la API-ul local'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Acest
videoclip nu este disponibil din cauza lipsei de formate. Acest lucru se poate întâmpla
din cauza indisponibilității țării.'
@@ -972,14 +976,6 @@ Starting download: Se începe descărcarea a "{videoTitle}"
Downloading failed: A existat o problemă la descărcarea "{videoTitle}"
Downloading has completed: '"{videoTitle}" s-a terminat de descărcat'
New Window: Fereastră nouă
-Age Restricted:
- The currently set default instance is {instance}: Acest {instance} este restricționat
- datorită vârstei
- Type:
- Channel: Canal
- Video: Video
- This {videoOrPlaylist} is age restricted: Acest {videoOrPlaylist} are restricții
- de vârstă
Channels:
Channels: Canale
Title: Listă de canale
@@ -1011,3 +1007,5 @@ Playlist will pause when current video is finished: Lista de redare se va între
când videoclipul curent este terminat
Playlist will not pause when current video is finished: Lista de redare nu se va întrerupe
când videoclipul curent este terminat
+Go to page: Mergeți la {page}
+Close Banner: Închideți bannerul
diff --git a/static/locales/ru.yaml b/static/locales/ru.yaml
index f980c8eb2df98..f1cec0bf7130d 100644
--- a/static/locales/ru.yaml
+++ b/static/locales/ru.yaml
@@ -955,7 +955,7 @@ Local API Error (Click to copy): 'Ошибка локального набора
Invidious API Error (Click to copy): 'Ошибка набора функций Invidious (Нажмите, чтобы
скопировать)'
Falling back to Invidious API: 'Возврат к набору функций Invidious'
-Falling back to the local API: 'Возврат к локальному набору функций'
+Falling back to Local API: 'Возврат к локальному набору функций'
Subscriptions have not yet been implemented: 'Подписки еще не реализованы'
Loop is now disabled: 'Повторение теперь отключено'
Loop is now enabled: 'Повторение теперь включено'
@@ -1089,9 +1089,9 @@ Tooltips:
позволяющий открыть видео (подборку, если поддерживается) во внешнем проигрывателе.
Внимание, настройки Invidious не применяются ко внешним проигрывателям.
DefaultCustomArgumentsTemplate: "(По умолчанию: '{defaultCustomArguments}')"
- Ignore Default Arguments: Не отправлять какие-либо умолчательные аргументы во
- внешний проигрыватель кроме адреса видео (например, частота проигрывания, адрес
- подборки и подобное). Пользовательские аргументы всё ещё будут передаваться.
+ Ignore Default Arguments: 'Не передавать никаких аргументов внешнему проигрывателю
+ по умолчанию, кроме адреса видео (напр.: частота проигрывания, адрес списка
+ воспроизведения и т. д.). Пользовательские аргументы всё ещё будут передаваться.'
Experimental Settings:
Replace HTTP Cache: Отключает дисковый HTTP-кэш Electron и включает пользовательский
кэш изображений в памяти. Приведёт к увеличению использования оперативной памяти.
@@ -1128,13 +1128,6 @@ Downloading failed: Возникла проблема с загрузкой «{v
Screenshot Success: Снимок экрана сохранён как «{filePath}»
Screenshot Error: Снимок экрана не удался. {error}
New Window: Новое окно
-Age Restricted:
- The currently set default instance is {instance}: У {instance} ограничение по возрасту
- Type:
- Channel: Канал
- Video: Видео
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} имеет ограничение по
- возрасту'
Channels:
Title: Список каналов
Count: '{number} канал(ов) найдено.'
diff --git a/static/locales/sk.yaml b/static/locales/sk.yaml
index 97bf0b728ef05..1882ad07665cf 100644
--- a/static/locales/sk.yaml
+++ b/static/locales/sk.yaml
@@ -646,7 +646,7 @@ Up Next: 'Nasledujúci'
Local API Error (Click to copy): 'Local API chyba (kliknutím skopírujete)'
Invidious API Error (Click to copy): 'Invidious API chyba (kliknutím skopírujete)'
Falling back to Invidious API: 'Návrat k Invidious API'
-Falling back to the local API: 'Návrat k local API'
+Falling back to Local API: 'Návrat k local API'
Subscriptions have not yet been implemented: 'Odbery ešte nie sú implementované'
Loop is now disabled: 'Opakovanie je teraz deaktivované'
Loop is now enabled: 'Opakovanie je teraz povolené'
diff --git a/static/locales/sl.yaml b/static/locales/sl.yaml
index 9390224e5b9f4..0d49e669876e7 100644
--- a/static/locales/sl.yaml
+++ b/static/locales/sl.yaml
@@ -709,7 +709,7 @@ Up Next: 'Naslednje na sporedu'
Local API Error (Click to copy): 'Napaka lokalnega APV (kliknite za kopiranje)'
Invidious API Error (Click to copy): 'Napaka Invidious APV (kliknite za kopiranje)'
Falling back to Invidious API: 'Začasno bo uporabljen Invidious APV'
-Falling back to the local API: 'Začasno bo uporabljen lokalni APV'
+Falling back to Local API: 'Začasno bo uporabljen lokalni APV'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Videoposnetek
zaradi mankajočih oblik ni dostopen. To se lahko zgodi, ko v vaši državi ni na razpolago.'
Subscriptions have not yet been implemented: 'Naročnine še niso bile implementirane'
diff --git a/static/locales/sm.yaml b/static/locales/sm.yaml
index 8984390b1663f..e80aadef6dabb 100644
--- a/static/locales/sm.yaml
+++ b/static/locales/sm.yaml
@@ -814,7 +814,7 @@ Tooltips:
Local API Error (Click to copy): ''
Invidious API Error (Click to copy): ''
Falling back to Invidious API: ''
-Falling back to the local API: ''
+Falling back to Local API: ''
This video is unavailable because of missing formats. This can happen due to country unavailability.: ''
Subscriptions have not yet been implemented: ''
Unknown YouTube url type, cannot be opened in app: ''
@@ -834,11 +834,6 @@ Canceled next video autoplay: ''
Default Invidious instance has been set to {instance}: ''
Default Invidious instance has been cleared: ''
'The playlist has ended. Enable loop to continue playing': ''
-Age Restricted:
- This {videoOrPlaylist} is age restricted: ''
- Type:
- Channel: ''
- Video: ''
External link opening has been disabled in the general settings: ''
Downloading has completed: ''
Starting download: ''
diff --git a/static/locales/sr.yaml b/static/locales/sr.yaml
index c948239758631..17e74ec1bc1ff 100644
--- a/static/locales/sr.yaml
+++ b/static/locales/sr.yaml
@@ -149,6 +149,7 @@ User Playlists:
да додате видео снимак | Изаберите плејлисту на коју желите да додате {videoCount}
видео снимака
N playlists selected: 'Изабрано: {playlistCount}'
+ Added {count} Times: Додато {count} пут | Додато {count} пута
SinglePlaylistView:
Toast:
There were no videos to remove.: Није било видео снимака за уклањање.
@@ -296,6 +297,7 @@ Settings:
Hot Pink: Врућа розе
Catppuccin Mocha: Catppuccin Mocha
System Default: Системски подразумевано
+ Nordic: Нордичка
Main Color Theme:
Main Color Theme: 'Главна тема боја'
Red: 'Црвена'
@@ -466,7 +468,7 @@ Settings:
Hide Subscriptions Live: Сакриј стримове уживо канала које пратите
Hide Subscriptions Shorts: Сакриј Shorts снимке канала које пратите
Display Titles Without Excessive Capitalisation: Прикажи наслове без претераног
- коришћења великих слова
+ писања великих слова и интерпункције
Hide Featured Channels: Сакриј истакнуте канале
Hide Profile Pictures in Comments: Сакриј слике профила у коментарима
Hide Upcoming Premieres: Сакриј предстојеће премијере
@@ -883,6 +885,7 @@ Video:
уживо није доступно за овај стрим. Можда га је онемогућио аутор.
Unhide Channel: Прикажи канал
Hide Channel: Сакриј канал
+ More Options: Више опција
Tooltips:
Subscription Settings:
Fetch Feeds from RSS: 'Када је омогућено, FreeTube ће користити RSS уместо свог
@@ -970,11 +973,6 @@ Tooltips:
Subscriptions have not yet been implemented: 'Праћења још увек нису имплементирана'
Open New Window: Отвори нови прозор
Shuffle is now disabled: Мешање је сада онемогућено
-Age Restricted:
- Type:
- Video: Видео снимак
- Channel: Канал
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} је старосно ограничен(а)'
New Window: Нови прозор
Clipboard:
Copy failed: Копирање у привремену меморију није успело
@@ -1044,7 +1042,7 @@ Share:
меморију
YouTube Embed URL copied to clipboard: YouTube уграђени URL је копиран у привремену
меморију
-Falling back to the local API: Повратак на локални API
+Falling back to Local API: Повратак на локални API
Unknown YouTube url type, cannot be opened in app: Непозната врста YouTube URL адресе,
не може се отворити у апликацији
Search Bar:
@@ -1118,3 +1116,7 @@ Channel Unhidden: '{channel} је уклоњен из филтера канал
Trimmed input must be at least N characters long: Исечени унос мора да има најмање
1 знак | Исечени унос мора да има најмање {length} знакова
Tag already exists: Ознака „{tagName}“ већ постоји
+Close Banner: Затвори банер
+Age Restricted:
+ This channel is age restricted: Овај канал је ограничен према узрасту
+ This video is age restricted: Овај видео снимак је ограничен према узрасту
diff --git a/static/locales/sv.yaml b/static/locales/sv.yaml
index 76b8c7417482e..1f8c8fac041f4 100644
--- a/static/locales/sv.yaml
+++ b/static/locales/sv.yaml
@@ -916,7 +916,7 @@ Up Next: 'Kommer härnäst'
Local API Error (Click to copy): 'Lokalt API-fel (Klicka för att kopiera koden)'
Invidious API Error (Click to copy): 'Invidious API-fel (Klicka för att kopiera koden)'
Falling back to Invidious API: 'Faller tillbaka till Invidious API'
-Falling back to the local API: 'Faller tillbaka till lokal API'
+Falling back to Local API: 'Faller tillbaka till lokal API'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Den
här videon är inte tillgänglig på grund av format som saknas. Detta kan hända på
grund av landets otillgänglighet.'
@@ -1037,11 +1037,6 @@ Preferences: Preferenser
Ok: Okej
Screenshot Success: Sparade skärmdump som "{filePath}"
Screenshot Error: Skärmdump misslyckades {felkod}
-Age Restricted:
- Type:
- Channel: Kanal
- Video: Video
- This {videoOrPlaylist} is age restricted: Denna {videoOrPlaylist} är åldersbegränsad
Clipboard:
Cannot access clipboard without a secure connection: Har inte tillgång till urklipp
utan en säker anslutning
diff --git a/static/locales/ti.yaml b/static/locales/ti.yaml
index c6f189c432bf0..4de64898df59f 100644
--- a/static/locales/ti.yaml
+++ b/static/locales/ti.yaml
@@ -1,5 +1,5 @@
# Put the name of your locale in the same language
-Locale Name: 'እንግሊዘኛ (us)'
+Locale Name: 'ትግርኛ'
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
diff --git a/static/locales/tig.yaml b/static/locales/tig.yaml
index e5aea5ac5cd51..5b8c6ca9b80d2 100644
--- a/static/locales/tig.yaml
+++ b/static/locales/tig.yaml
@@ -11,4 +11,3 @@ Channel:
About: {}
Video: {}
Tooltips: {}
-Age Restricted: {}
diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml
index 3be02d386ded2..57c6cd8f0c179 100644
--- a/static/locales/tr.yaml
+++ b/static/locales/tr.yaml
@@ -191,6 +191,7 @@ User Playlists:
| {videoCount} video 1 oynatma listesine eklendi
N playlists selected: '{playlistCount} Seçildi'
Search in Playlists: Oynatma Listelerinde Ara
+ Added {count} Times: '{count} Defa Eklendi | {count} Defa Eklendi'
CreatePlaylistPrompt:
New Playlist Name: Yeni Oynatma Listesi Adı
Create: Oluştur
@@ -288,6 +289,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pembe
Hot Pink: Sıcak Pembe
+ Nordic: Nord
Main Color Theme:
Main Color Theme: 'Ana Renk Teması'
Red: 'Kırmızı'
@@ -531,8 +533,8 @@ Settings:
Hide Upcoming Premieres: Yaklaşan İlk Gösterimleri Gizle
Hide Channels Placeholder: Kanal Kimliği
Hide Channels: Kanallardan Videoları Gizle
- Display Titles Without Excessive Capitalisation: Başlıkları Aşırı Büyük Harf Kullanmadan
- Görüntüle
+ Display Titles Without Excessive Capitalisation: Başlıkları Aşırı Büyük Harf ve
+ Noktalama İşaretleri Kullanmadan Görüntüle
Hide Featured Channels: Öne Çıkan Kanalları Gizle
Hide Channel Playlists: Kanal Oynatma Listelerini Gizle
Hide Channel Community: Kanal Topluluğunu Gizle
@@ -959,6 +961,7 @@ Video:
Pause on Current Video: Geçerli Videoda Duraklat
Unhide Channel: Kanalı Göster
Hide Channel: Kanalı Gizle
+ More Options: Daha Fazla Seçenek
Videos:
#& Sort By
Sort By:
@@ -1039,7 +1042,7 @@ Up Next: 'Sonraki'
Local API Error (Click to copy): 'Yerel API Hatası (Kopyalamak için tıklayın)'
Invidious API Error (Click to copy): 'Invidious API Hatası (Kopyalamak için tıklayın)'
Falling back to Invidious API: 'Invidious API''ye geri dönülüyor'
-Falling back to the local API: 'Yerel API''ye geri dönülüyor'
+Falling back to Local API: 'Yerel API''ye geri dönülüyor'
Subscriptions have not yet been implemented: 'Abonelikler henüz uygulanmadı'
Loop is now disabled: 'Döngü artık devre dışı'
Loop is now enabled: 'Döngü artık etkin'
@@ -1170,12 +1173,6 @@ Download folder does not exist: İndirme dizini "$" mevcut değil. "Klasör sor"
Screenshot Success: Ekran görüntüsü "{filePath}" olarak kaydedildi
Screenshot Error: Ekran görüntüsü başarısız oldu. {error}
New Window: Yeni Pencere
-Age Restricted:
- The currently set default instance is {instance}: Bu {instance} yaş kısıtlamalıdır
- Type:
- Channel: Kanal
- Video: Video
- This {videoOrPlaylist} is age restricted: Bu {videoOrPlaylist} yaş kısıtlamalıdır
Channels:
Empty: Kanal listeniz şu anda boş.
Channels: Kanallar
@@ -1211,3 +1208,7 @@ Channel Unhidden: '{channel} kanal filtresinden kaldırıldı'
Trimmed input must be at least N characters long: Kırpılan girdi en az 1 karakter
uzunluğunda olmalıdır | Kırpılan girdi en az {length} karakter uzunluğunda olmalıdır
Tag already exists: '"{tagName}" etiketi zaten var'
+Close Banner: Afişi Kapat
+Age Restricted:
+ This video is age restricted: Bu videoda yaş sınırlaması var
+ This channel is age restricted: Bu kanalda yaş sınırlaması var
diff --git a/static/locales/uk.yaml b/static/locales/uk.yaml
index 10dcb2b84b6a3..a69e6c904fe94 100644
--- a/static/locales/uk.yaml
+++ b/static/locales/uk.yaml
@@ -43,6 +43,8 @@ Global:
Subscriber Count: 1 підписник | {count} підписників
View Count: 1 перегляд | {count} переглядів
Watching Count: 1 глядач | {count} глядачів
+ Input Tags:
+ Length Requirement: Тег повинен мати довжину не менше {number} символів
Version {versionNumber} is now available! Click for more details: 'Доступна нова
версія {versionNumber}! Натисніть, щоб переглянути подробиці'
Download From Site: 'Завантажити з сайту'
@@ -116,17 +118,36 @@ Trending:
Music: Музика
Default: Типово
Most Popular: 'Найпопулярніші'
-Playlists: 'Добірки'
+Playlists: 'Списки відтворення'
User Playlists:
- Your Playlists: 'Ваші добірки'
+ Your Playlists: 'Ваші списки відтворення'
Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Збережені
відео порожні. Клацніть на кнопку збереження у куті відео, щоб воно було перелічено
тут
- Playlist Message: Ця сторінка не показує повністю робочих добірок. На ній перелічено
- лише відео, які ви зберегли або вибрали. Коли робота завершиться, усі відео, які
- зараз знаходяться тут, буде переміщено до добірки "Вибране".
+ Playlist Message: Ця сторінка не показує повністю робочих списків відтворення. На
+ ній перелічено лише відео, які ви зберегли або вибрали. Коли робота завершиться,
+ усі відео, які зараз знаходяться тут, буде переміщено до списку відтворення "Вибране".
Search bar placeholder: Шукати у добірці
Empty Search Message: Немає відео в цій добірці, які відповідають вашому запиту
+ Create New Playlist: Створити новий список відтворення
+ Add to Playlist: Додати список відтворення
+ Remove from Favorites: Вилучити з {playlistName}
+ Move Video Up: Посунути відео вгору
+ Move Video Down: Посунути відео вниз
+ Remove from Playlist: Вилучити зі списку відтворення
+ Playlist Description: Опис списку відтворення
+ Save Changes: Зберегти зміни
+ Cancel: Скасувати
+ Copy Playlist: Скопіювати список відтворення
+ You have no playlists. Click on the create new playlist button to create a new one.: У
+ вас немає списків відтворення. Натисніть на кнопку створити новий список відтворення,
+ щоб створити його.
+ This playlist currently has no videos.: Наразі у цьому списку відтворення немає
+ відео.
+ Add to Favorites: Додати до {playlistName}
+ Playlist Name: Назва списку відтворення
+ Edit Playlist Info: Змінити інформацію списку відтворення
+ Remove Watched Videos: Вилучити з переглянутих відео
History:
# On History Page
History: 'Історія'
@@ -321,8 +342,8 @@ Settings:
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: 'Налаштування підписки'
Hide Videos on Watch: 'Ховати відео при перегляді'
@@ -342,7 +363,7 @@ Settings:
Hide Popular Videos: 'Не показувати популярні відео'
Hide Live Chat: 'Не показувати живий чат'
Hide Active Subscriptions: Сховати активні підписки
- Hide Playlists: Сховати добірки
+ Hide Playlists: Сховати списки відтворення
Hide Video Description: Сховати опис відео
Hide Comments: Сховати коментарі
Hide Sharing Actions: Сховати дії поширення
@@ -354,7 +375,7 @@ Settings:
Display Titles Without Excessive Capitalisation: Показувати заголовки без надмірно
великих літер
Hide Featured Channels: Сховати пропоновані канали
- Hide Channel Playlists: Сховати добірки з каналів
+ Hide Channel Playlists: Сховати списки відтворення каналу
Hide Channel Community: Сховати спільноту каналу
Hide Channel Shorts: Сховати Shorts каналу
Sections:
@@ -414,13 +435,13 @@ Settings:
Unknown data key: 'Невідомий ключ даних'
How do I import my subscriptions?: 'Як імпортувати свої підписки?'
Manage Subscriptions: Керування підписками
- Playlist insufficient data: Недостатньо даних для добірки "{playlist}", пропуск
- елемента
- All playlists has been successfully exported: Усі добірки успішно експортовано
+ Playlist insufficient data: Недостатньо даних для списку відтворення "{playlist}",
+ пропуск елемента
+ All playlists has been successfully exported: Усі списки відтворення успішно експортовано
Import Playlists: Імпорт добірок
Export Playlists: Експорт добірок
- All playlists has been successfully imported: Усі добірки успішно імпортовано
- Playlist File: Файл добірки
+ All playlists has been successfully imported: Усі списки відтворення успішно імпортовано
+ Playlist File: Файл списку відтворення
Subscription File: Файл підписки
History File: Файл історії
Advanced Settings: {}
@@ -590,7 +611,7 @@ Channel:
Oldest: 'Найдавніші'
Most Popular: 'Найпопулярніші'
Playlists:
- Playlists: 'Добірки'
+ Playlists: 'Списки відтворення'
This channel does not currently have any playlists: 'Цей канал наразі не має добірок'
Sort Types:
Last Video Added: 'Останнє додане відео'
@@ -646,9 +667,9 @@ Video:
Open Channel in Invidious: 'Відкрити канал у Invidious'
Copy Invidious Channel Link: 'Копіювати посилання на канал Invidious'
Views: 'Перегляди'
- Loop Playlist: 'Зациклити добірку'
- Shuffle Playlist: 'Перемішати добірку'
- Reverse Playlist: 'Змінити напрямок добірки'
+ Loop Playlist: 'Повторювати список відтворення'
+ Shuffle Playlist: 'Перемішати список відтворення'
+ Reverse Playlist: 'Зворотний напрямок списку відтворення'
Play Next Video: 'Відтворити наступне відео'
Play Previous Video: 'Відтворити попереднє відео'
Watched: 'Переглянуто'
@@ -739,7 +760,7 @@ Video:
starting video at offset: запуск відео зі зміщенням
UnsupportedActionTemplate: '{externalPlayer} не підтримує: {action}'
OpeningTemplate: Відкриття {videoOrPlaylist} у {externalPlayer}...
- playlist: добірка
+ playlist: список відтворення
video: відео
OpenInTemplate: Відкрити у {externalPlayer}
Premieres on: Прем'єри
@@ -782,7 +803,7 @@ Videos:
#& Playlists
Playlist:
#& About
- View Full Playlist: 'Переглянути всю добірку'
+ View Full Playlist: 'Переглянути весь список відтворення'
Videos: 'Відео'
View: 'Перегляд'
Views: 'Переглядів'
@@ -791,7 +812,7 @@ Playlist:
# On Video Watch Page
#* Published
#& Views
- Playlist: Добірка
+ Playlist: Список відтворення
Toggle Theatre Mode: 'Перемкнути режим театру'
Change Format:
Change Media Formats: 'Зміна форматів відео'
@@ -804,7 +825,7 @@ Change Format:
відео'
Share:
Share Video: 'Поділитися відео'
- Share Playlist: 'Поділитися добіркою'
+ Share Playlist: 'Поділитися списком відтворення'
Include Timestamp: 'Включити позначку часу'
Copy Link: 'Копіювати посилання'
Open Link: 'Відкрити посилання'
@@ -915,8 +936,8 @@ Tooltips:
програвач можна знайти за допомогою змінної середовища PATH. Якщо потрібно,
тут можна призначити нетиповий шлях.
External Player: Якщо обрано зовнішній програвач, з'явиться піктограма для відкриття
- відео (добірка, якщо підтримується) у зовнішньому програвачі, на мініатюрі.
- Увага, налаштування Invidious не застосовуються до сторонніх програвачів.
+ відео (список відтворення, якщо підтримується) у зовнішньому програвачі, на
+ мініатюрі. Увага, налаштування Invidious не застосовуються до сторонніх програвачів.
DefaultCustomArgumentsTemplate: "(Типово: '{defaultCustomArguments}')"
Experimental Settings:
Replace HTTP Cache: Вимикає дисковий HTTP-кеш Electron і вмикає власний кеш зображень
@@ -932,7 +953,7 @@ Tooltips:
Local API Error (Click to copy): 'Помилка локального API (натисніть, щоб скопіювати)'
Invidious API Error (Click to copy): 'Помилка Invidious API (натисніть, щоб скопіювати)'
Falling back to Invidious API: 'Повернення до API Invidious'
-Falling back to the local API: 'Повернення до локального API'
+Falling back to Local API: 'Повернення до локального API'
This video is unavailable because of missing formats. This can happen due to country unavailability.: 'Це
відео недоступне через відсутність форматів. Це може статися через недоступність
країни.'
@@ -941,12 +962,12 @@ Loop is now disabled: 'Цикл вимкнено'
Loop is now enabled: 'Цикл увімкнено'
Shuffle is now disabled: 'Випадковий порядок вимкнено'
Shuffle is now enabled: 'Випадковий порядок увімкнено'
-The playlist has been reversed: 'Добірку обернено'
+The playlist has been reversed: 'Список відтворення обернено'
Playing Next Video: 'Відтворення наступного відео'
Playing Previous Video: 'Відтворення попереднього відео'
Canceled next video autoplay: 'Скасовано автовідтворення наступного відео'
-'The playlist has ended. Enable loop to continue playing': 'Добірка завершилася. Увімкніть
- цикл, щоб продовжити відтворення'
+'The playlist has ended. Enable loop to continue playing': 'Список відтворення завершився.
+ Увімкніть повторення, щоб продовжити відтворення'
Yes: 'Так'
No: 'Ні'
@@ -977,13 +998,6 @@ Download folder does not exist: Каталог завантаження "$" не
Screenshot Success: Знімок екрана збережено як «{filePath}»
Screenshot Error: Не вдалося зробити знімок екрана. {error}
New Window: Нове вікно
-Age Restricted:
- The currently set default instance is {instance}: Цей {instance} має обмеження за
- віком
- Type:
- Video: Відео
- Channel: Канал
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} має вікове обмеження'
Channels:
Count: 'Знайдено каналів: {number}.'
Empty: Ваш список каналів наразі порожній.
@@ -1008,10 +1022,11 @@ Ok: Гаразд
Hashtag:
Hashtag: Хештег
This hashtag does not currently have any videos: За цим хештегом наразі немає відео
-Playlist will pause when current video is finished: Добірка призупиняється, коли поточне
- відео завершено
-Playlist will not pause when current video is finished: Добірка не призупиняється,
+Playlist will pause when current video is finished: Список відтворення призупиняється,
+ коли поточне відео завершено
+Playlist will not pause when current video is finished: Список відтворення не призупиняється,
коли поточне відео завершено
Channel Hidden: '{channel} додано до фільтра каналу'
Go to page: Перейти до {page}
Channel Unhidden: '{channel} вилучено з фільтра каналу'
+Close Banner: Закрити банер
diff --git a/static/locales/ur.yaml b/static/locales/ur.yaml
index 6cd0a27a527ff..cd84b24059f31 100644
--- a/static/locales/ur.yaml
+++ b/static/locales/ur.yaml
@@ -230,10 +230,6 @@ Default Invidious instance has been cleared: 'ڈیفالٹ Invidious مثال ک
گیا ہے۔'
'The playlist has ended. Enable loop to continue playing': 'پلے لسٹ ختم ہو گئی ہے۔
فعال کھیل جاری رکھنے کے لیے لوپ'
-Age Restricted:
- Type:
- Channel: 'چینل'
- Video: 'ویڈیو'
External link opening has been disabled in the general settings: 'عام ترتیبات میں
بیرونی لنک کھولنے کو غیر فعال کر دیا گیا ہے۔'
Downloading has completed: '"{videoTitle}" نے ڈاؤن لوڈ مکمل کر لیا ہے۔'
diff --git a/static/locales/vi.yaml b/static/locales/vi.yaml
index 250c13c23e7db..b84a3936b3d24 100644
--- a/static/locales/vi.yaml
+++ b/static/locales/vi.yaml
@@ -1,4 +1,4 @@
-Locale Name: Tiếng Anh
+Locale Name: Tiếng Việt
FreeTube: 'FreeTube'
# Currently on Subscriptions, Playlists, and History
'This part of the app is not ready yet. Come back later when progress has been made.': >-
@@ -18,7 +18,7 @@ Select all: 'Chọn tất cả'
Reload: 'Tải lại'
Force Reload: 'Buộc tải lại'
Toggle Developer Tools: 'Chuyển đổi công cụ phát triển'
-Actual size: 'Kích thước thực sự'
+Actual size: 'Kích thước thực'
Zoom in: 'Phóng to'
Zoom out: 'Thu nhỏ'
Toggle fullscreen: 'Chuyển đổi toàn màn hình'
@@ -36,6 +36,15 @@ Global:
# Search Bar
Live: Trực tiếp
Shorts: Shorts
+ Community: Cộng đồng
+ Counts:
+ Subscriber Count: 1 người đăng ký | {count} người đăng ký
+ View Count: 1 lượt xem | {count} lượt xem
+ Channel Count: 1 kênh | {count} kênh
+ Video Count: 1 video | {count} video
+ Watching Count: 1 lượt xem | {count} lượt xem
+ Input Tags:
+ Length Requirement: 1 đang xem | {count} đang xem
Search / Go to URL: 'Tìm kiếm / Đi đến URL'
# In Filter Button
Search Filters:
@@ -45,7 +54,7 @@ Search Filters:
Most Relevant: 'Liên quan nhất'
Rating: 'Đánh giá'
Upload Date: 'Ngày tải lên'
- View Count: 'Lượng xem'
+ View Count: 'Lượt xem'
Time:
Time: 'Thời gian'
Any Time: 'Mọi lúc'
@@ -62,11 +71,12 @@ Search Filters:
#& Playlists
Movies: Phim ảnh
Duration:
- Duration: 'Thời hạn'
- All Durations: 'Tất cả thời hạn'
+ Duration: 'Thời lượng'
+ All Durations: 'Tất cả thời lượng'
Short (< 4 minutes): 'Ngắn (<4 phút)'
Long (> 20 minutes): 'Dài (> 20 phút)'
# On Search Page
+ Medium (4 - 20 minutes): Vừa (4 - 20 phút)
Search Results: 'Kết quả tìm kiếm'
Fetching results. Please wait: 'Đang lấy kết quả. Xin hãy chờ'
Fetch more results: 'Lấy thêm kết quả'
@@ -80,18 +90,26 @@ Subscriptions:
sách Đăng ký đang trống. Bắt đầu thêm đăng ký để xem chúng tại đây.'
'Getting Subscriptions. Please wait.': 'Đang lấy Đăng ký. Vui lòng đợi.'
'Getting Subscriptions. Please wait.': Đang lấy Đăng ký. Vui lòng chờ.
- Load More Videos: Load thêm video
- Refresh Subscriptions: Refresh đăng ký
- This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Kênh
- này có nhiều người đăng ký. Buộc RSS để tránh bị giới hạn
- Error Channels: Các kênh lỗi
+ Load More Videos: Tải thêm video
+ Refresh Subscriptions: Tải lại đăng ký
+ This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: Hồ
+ sơ này có nhiều đăng ký. Đang buộc RSS để tránh bị giới hạn
+ Error Channels: Các kênh có lỗi
+ Subscriptions Tabs: Trang đăng ký
+ Disabled Automatic Fetching: Bạn đã vô hiệu hóa tự động tải đăng ký. Hãy tải lại
+ danh sách đăng ký để xem chúng tại đây.
+ All Subscription Tabs Hidden: Tất cả các trang đăng ký đăng bị ẩn. Để xem nội dung
+ ở đây, vui lòng bỏ ẩn một số trang ở trong mục "{subsection}" của "{settingsSection}".
+ Load More Posts: Tải thêm bài đăng
+ Empty Channels: Các kênh bạn đăng ký hiện chưa đăng video nào.
+ Empty Posts: Các kênh bạn đăng ký hiện chưa đăng bài đăng nào.
Trending:
Trending: 'Xu hướng'
Movies: Phim
Music: Âm nhạc
Default: Mặc định
Gaming: Trò chơi
- Trending Tabs: Tab Xu hướng
+ Trending Tabs: Trang Xu hướng
Most Popular: 'Phổ biến nhất'
Playlists: 'Danh sách phát'
User Playlists:
@@ -104,12 +122,103 @@ User Playlists:
Playlist Message: Trang này không liệt kê tất cả danh sách video bạn đã theo giỏi.
Nó chỉ hiển thị các video mà bạn đã lưu hoặc thêm vào mục yêu thích. Khi xong
việc, tất cả các video trên trang này sẽ được chuyển vào danh sách 'yêu thích'.
+ Remove from Playlist: Xóa khỏi danh sách phát
+ Playlist Name: Tên danh sách phát
+ Save Changes: Lưu thay đổi
+ Remove Watched Videos: Xóa video đã xem
+ Sort By:
+ LatestUpdatedFirst: Được cập nhật gần đây
+ LatestPlayedFirst: Được phát gần đây
+ Sort By: Sắp xếp theo
+ EarliestUpdatedFirst: Được cập nhật sớm nhất
+ NameAscending: A-Z
+ NameDescending: Z-A
+ LatestCreatedFirst: Được tạo gần đây
+ EarliestCreatedFirst: Được tạo sớm nhất
+ EarliestPlayedFirst: Được phát sớm nhất
+ SinglePlaylistView:
+ Toast:
+ Video has been removed: Video đã được xóa
+ There was an issue with updating this playlist.: Đã có vấn đề xảy ra trong khi
+ cập nhập danh sách phát.
+ Reverted to use {oldPlaylistName} for quick bookmark: Đã quay lại dùng {oldPlaylistName}
+ cho dấu trang nhanh
+ Quick bookmark disabled: Đã tắt dấu trang nhanh
+ Some videos in the playlist are not loaded yet. Click here to copy anyway.: Một
+ số video trong danh sách phát này chưa được tải, bạn vẫn có thể nhấn vào đây
+ để sao chép.
+ This playlist is protected and cannot be removed.: Danh sách phát này được bảo
+ vệ và không thể bị xóa.
+ Playlist {playlistName} has been deleted.: Danh sách phát {playlistName} đã
+ được xóa.
+ This playlist does not exist: Danh sách phát này không tồn tại
+ This video cannot be moved up.: Video này không thể được chuyển lên.
+ This video cannot be moved down.: Video này không thể được chuyển xuống.
+ There was a problem with removing this video: Đã có vấn để xảy ra trong khi
+ xóa video này
+ This playlist is now used for quick bookmark: Danh sách này giờ đang được dùng
+ để tạo dấu trang nhanh
+ This playlist is now used for quick bookmark instead of {oldPlaylistName}. Click here to undo: Danh
+ sách này giờ đang được dùng để tạo dấu trang nhanh thay vì {oldPlaylistName}.
+ Nhấn đây để hoàn tác
+ Playlist name cannot be empty. Please input a name.: Tên danh sách phát không
+ thể để trống. Vui lòng nhập một tên.
+ Playlist has been updated.: Danh sách phát đã được cập nhật.
+ "{videoCount} video(s) have been removed": 1 video đã được xóa | {videoCount}
+ video đã được xóa
+ There were no videos to remove.: Không có video nào để xóa.
+ You have no playlists. Click on the create new playlist button to create a new one.: Bạn
+ đang không có danh sách phát nào. Nhấn vào nút tạo danh sách phát mới để tạo một
+ cái mới.
+ This playlist currently has no videos.: Danh sách phát này hiện không có video nào.
+ Edit Playlist Info: Chỉnh sửa thông tin danh sách phát
+ Are you sure you want to delete this playlist? This cannot be undone: Bạn có chắc
+ muốn xóa danh sách phát này?Việc này không thể hoàn tác.
+ CreatePlaylistPrompt:
+ Create: Tạo mới
+ Toast:
+ Playlist {playlistName} has been successfully created.: Danh sách phát {playlistName}
+ đã được tạo thành công.
+ There was an issue with creating the playlist.: Đã có vấn đề xảy ra trong khi
+ tạo danh sách phát này.
+ There is already a playlist with this name. Please pick a different name.: Hiện
+ đã có danh sách phát với tên này rồi. Vui lòng chọn một cái tên khác.
+ New Playlist Name: Tên danh sách phát mới
+ AddVideoPrompt:
+ Select a playlist to add your N videos to: Chọn một danh sách phát để lưu video
+ này vào | Chọn một danh sách phát để lưu {videoCount} video này vào
+ N playlists selected: Đã chọn {playlistCount}
+ Search in Playlists: Tìm trong danh sách phát
+ Toast:
+ "{videoCount} video(s) added to {playlistCount} playlists": Đã thêm 1 video
+ vào {playlistCount} danh sách phát | Đã thêm {videoCount} video vào {playlistCount}
+ danh sách phát
+ You haven't selected any playlist yet.: Bạn đang chưa chọn danh sách phát nào.
+ "{videoCount} video(s) added to 1 playlist": Đã thêm 1 video vào 1 danh sách
+ phát | Đã thêm {videoCount} vào 1 danh sách phát
+ Save: Lưu
+ Create New Playlist: Tạo danh sách phat mới
+ Playlist Description: Mô tả danh sách phát
+ Copy Playlist: Sao chép danh sách phát
+ Enable Quick Bookmark With This Playlist: Bật dấu trang nhanh với danh sách phát
+ này
+ Add to Playlist: Thêm vào danh sách phát
+ Cancel: Hủy bỏ
+ Add to Favorites: Thêm vào {playlistName}
+ Remove from Favorites: Xóa khỏi {playlistName}
+ Move Video Down: Chuyển video xuống
+ Move Video Up: Chuyển video lên
+ Disable Quick Bookmark: Tắt dấu trang nhanh
+ Delete Playlist: Xóa danh sách phát
+ Are you sure you want to remove all watched videos from this playlist? This cannot be undone: Bạn
+ có chắc muốn xóa tất cả các video đã xem khỏi danh sách phát này? Việc này không
+ thể được hoàn tác.
History:
# On History Page
History: 'Lịch sử'
Watch History: 'Lịch sử xem'
Your history list is currently empty.: Lịch sử của bạn hiện đang trống.
- Search bar placeholder: Tìm kiếm trong Lịch sử
+ Search bar placeholder: Tìm trong lịch sử
Empty Search Message: Không có video nào trong lịch sử của bạn trùng với những gì
bạn đang tìm kiếm
Settings:
@@ -123,8 +232,8 @@ Settings:
Default Landing Page: 'Trang mặc định'
Locale Preference: 'Ngôn ngữ'
Preferred API Backend:
- Preferred API Backend: 'Backend API'
- Local API: 'Local API'
+ Preferred API Backend: 'API Backend'
+ Local API: 'API địa phương'
Invidious API: 'API Invidious'
Video View Type:
Video View Type: 'Kiểu xem video'
@@ -133,16 +242,18 @@ Settings:
Thumbnail Preference:
Thumbnail Preference: 'Thumbnail'
Default: 'Mặc định'
- Beginning: 'Lúc đầu'
- Middle: 'Chính giữa'
- End: 'Đầu cuối'
+ Beginning: 'Đầu'
+ Middle: 'Giữa'
+ End: 'Cuối'
+ Blur: Làm mờ
+ Hidden: Ẩn
'Invidious Instance (Default is https://invidious.snopyta.org)': 'Phiên bản Invidious
(Mặc định là https://invidious.snopyta.org)'
Region for Trending: 'Phổ biến theo quốc gia'
#! List countries
- Check for Latest Blog Posts: Check Blog post mới nhất
+ Check for Latest Blog Posts: Kiểm tra bài đăng mới nhất
Check for Updates: Kiểm tra cập nhật
- Current Invidious Instance: Phiên bản invidious hiện tại
+ Current Invidious Instance: Phiên bản Invidious hiện tại
The currently set default instance is {instance}: Phiên bản Invidious mặc định
hiện được đặt thành {instance}
No default instance has been set: Không có phiên bản mặc định nào được đặt
@@ -156,7 +267,7 @@ Settings:
No Action: Không hành động
External Link Handling: Xử lý liên kết bên ngoài
View all Invidious instance information: Xem tất cả thông tin phiên bản Invidious
- System Default: Mặc định Hệ thống
+ System Default: Mặc định hệ thống
Theme Settings:
Theme Settings: 'Cài đặt chủ đề'
Match Top Bar with Main Color: 'Khớp thanh trên cùng với màu chính'
@@ -165,34 +276,37 @@ Settings:
Black: 'Đen'
Dark: 'Tối'
Light: 'Sáng'
- Dracula: 'Ma cà rồng'
+ Dracula: 'Dracula'
System Default: Mặc định hệ thống
- Catppuccin Mocha: Catppuccin Mocha - Màu cà phê
+ Catppuccin Mocha: Catppuccin Mocha
+ Nordic: Nordic
+ Pastel Pink: Hồng phấn tiên
+ Hot Pink: Hồng nóng bỏng
Main Color Theme:
Main Color Theme: 'Màu chủ đề chính'
Red: 'Đỏ'
Pink: 'Hồng'
Purple: 'Tím'
- Deep Purple: 'Tím Đậm'
- Indigo: 'Xanh Đậm'
- Blue: 'Xanh'
- Light Blue: 'Xanh Nhạt'
- Cyan: 'Lục Lam'
+ Deep Purple: 'Tím đậm'
+ Indigo: 'Chàm'
+ Blue: 'Xanh lam'
+ Light Blue: 'Xanh nước biển'
+ Cyan: 'Xanh lơ'
Teal: 'Xanh mòng két'
- Green: 'Xanh Lá'
- Light Green: 'Xanh Lợt'
- Lime: 'Vôi'
+ Green: 'Xanh lục'
+ Light Green: 'Xanh lợt'
+ Lime: 'Vàng chanh'
Yellow: 'Vàng'
- Amber: 'Hổ Phách'
+ Amber: 'Hổ phách'
Orange: 'Cam'
- Deep Orange: 'Cam Đậm'
- Dracula Cyan: 'Ma cà rồng Lục Lam'
- Dracula Green: 'Ma cà rồng Xanh Lá'
- Dracula Orange: 'Ma cà rồng Cam'
- Dracula Pink: 'Ma cà rồng Hồng'
- Dracula Purple: 'Ma cà rồng Tím'
- Dracula Red: 'Ma cà rồng Đỏ'
- Dracula Yellow: 'Ma cà rồng Vàng'
+ Deep Orange: 'Cam đậm'
+ Dracula Cyan: 'Xanh lơ Dracula'
+ Dracula Green: 'Xanh lục Dracula'
+ Dracula Orange: 'Cam Dracula'
+ Dracula Pink: 'Hồng Dracula'
+ Dracula Purple: 'Tím Dracula'
+ Dracula Red: 'Đỏ Dracula'
+ Dracula Yellow: 'Vàng Dracula'
Catppuccin Mocha Rosewater: Catppuccin Mocha Rosewater Màu hoa hồng
Catppuccin Mocha Flamingo: Catppuccin Mocha Flamingo Màu hồng hạc
Catppuccin Mocha Pink: Catppuccin Mocha Pink Màu hồng hạc
@@ -207,13 +321,13 @@ Settings:
Catppuccin Mocha Sapphire: Catppuccin Mocha Sapphire màu xanh
Catppuccin Mocha Lavender: Catppuccin Mocha Lavender Màu tím nhạt
Catppuccin Mocha Blue: Catppuccin Mocha Blue Màu xanh
- Secondary Color Theme: 'Màu chủ đề thứ hai'
+ Secondary Color Theme: 'Màu chủ đề phụ'
#* Main Color Theme
UI Scale: Tỉ lệ UI
Disable Smooth Scrolling: Tắt cuộn mượt
Expand Side Bar by Default: Mở rộng thanh bên theo mặc định
- Hide Side Bar Labels: Ẩn Nhãn Thanh Bên
- Hide FreeTube Header Logo: Ẩn Logo FreeTube trên thanh trên
+ Hide Side Bar Labels: Ẩn nhãn thanh bên
+ Hide FreeTube Header Logo: Ẩn logo FreeTube trên thanh trên
Player Settings:
Player Settings: 'Cài đặt trình phát'
Force Local Backend for Legacy Formats: 'Bắt buộc Local Backend cho định dạng
@@ -221,14 +335,14 @@ Settings:
Remember History: 'Nhớ lịch sử'
Play Next Video: 'Phát video tiếp theo'
Turn on Subtitles by Default: 'Bật phụ đề theo mặc định'
- Autoplay Videos: 'Tự phát videos'
+ Autoplay Videos: 'Tự phát video'
Proxy Videos Through Invidious: 'Proxy video qua Invidious'
Autoplay Playlists: 'Danh sách tự động phát'
Enable Theatre Mode by Default: 'Bật chế độ rạp hát theo mặc định'
Default Volume: 'Âm lượng mặc định'
Default Playback Rate: 'Tốc độ phát mặc định'
Default Video Format:
- Default Video Format: 'Định dạng video theo mặc định'
+ Default Video Format: 'Định dạng video mặc định'
Dash Formats: 'Định dạng DASH'
Legacy Formats: 'Định dạng Legacy'
Audio Formats: 'Định dạng âm thanh'
@@ -244,21 +358,21 @@ Settings:
1440p: '1440p'
4k: '4k'
8k: '8k'
- Scroll Playback Rate Over Video Player: Tốc độ Phát lại Cuộn qua Trình phát Video
- Scroll Volume Over Video Player: Cuộn Âm lượng qua Trình phát Video
+ Scroll Playback Rate Over Video Player: Con lăn chuột điểu chỉnh tốc độ phát lại
+ Scroll Volume Over Video Player: Con lăn chuột điểu chỉnh âm lượng
Display Play Button In Video Player: Hiển thị nút phát trong trình phát video
Next Video Interval: Khoảng thời gian Video Tiếp theo
Fast-Forward / Rewind Interval: Khoảng thời gian tua đi / tua lại
Screenshot:
- Enable: Bật chức năng Chụp màn hình
+ Enable: Bật chức năng chụp màn hình
Format Label: Định dạng chụp màn hình
Quality Label: Chất lượng chụp màn hình
- File Name Label: Kiểu tên tệp
- Folder Label: Chụp màn hình thư mục
+ File Name Label: Mẫu tên tệp
+ Folder Label: Thư mục ảnh chụp màn hình
Ask Path: Yêu cầu thứ mục lưu
Folder Button: Chọn thư mục
Error:
- Empty File Name: Tên tệp. trống
+ Empty File Name: Tên tệp trống
Forbidden Characters: Các ký từ bị cấm
File Name Tooltip: Bạn có thể dùng các biến số dưới đây. %Y Năm 4 chữ số. %M
Tháng 2 chữ số. %D Ngày 2 chữ số. %H Giờ 2 chữ số. %N Phút 2 chữ số. %S Giây
@@ -266,8 +380,12 @@ Settings:
3 chữ số. %i Video ID. Bạn cũng có thể dùng dấu "\" hoặc "/" để tạo các thư
mục con.
Max Video Playback Rate: Tốc độ phát lại tối đa
- Video Playback Rate Interval: khoảng cách phát lại video
+ Video Playback Rate Interval: Khoảng cách tốc độ phát
Enter Fullscreen on Display Rotate: Bật toàn màn hình khi xoay
+ Comment Auto Load:
+ Comment Auto Load: Tự động tải bình luận
+ Skip by Scrolling Over Video Player: Tua video bằng con lăn chuột
+ Allow DASH AV1 formats: Cho phép định dạng DASH AV1
Subscription Settings:
Subscription Settings: 'Cài đặt đăng ký'
Hide Videos on Watch: 'Ẩn video khi đã xem'
@@ -280,8 +398,9 @@ Settings:
Import Subscriptions: 'Nhập đăng ký'
Export Subscriptions: 'Xuất đăng ký'
How do I import my subscriptions?: 'Làm sao để nhập đăng ký của tôi?'
- Fetch Feeds from RSS: Lấy feeds từ RSS
+ Fetch Feeds from RSS: Cập nhật bảng tin qua RSS
Fetch Automatically: Tự động làm mới bảng tin
+ Only Show Latest Video for Each Channel: Chỉ hiện video mới nhất cho mỗi kênh
Advanced Settings:
Advanced Settings: 'Cài đặt nâng cao'
Enable Debug Mode (Prints data to the console): 'Bật chế độ Debug (Ghi data ra
@@ -310,27 +429,27 @@ Settings:
Data Settings:
How do I import my subscriptions?: Làm sao để tôi nhập đăng ký?
- Unknown data key: Key data không xác định
- Unable to write file: Không thể viết file
- Unable to read file: Không thể đọc file
+ Unknown data key: Key dữ liệu không xác định
+ Unable to write file: Không thể viết tệp
+ Unable to read file: Không thể đọc tệp
All watched history has been successfully exported: Tất cả lịch sử xem đã được
xuất ra thành công
All watched history has been successfully imported: Tất cả lịch sử xem đã được
nhập vào thành công
- History object has insufficient data, skipping item: Lịch sử object không đủ dữ
- liệu, bỏ qua
+ History object has insufficient data, skipping item: Lịch sử không đủ dữ liệu,
+ đang bỏ qua mục này
Subscriptions have been successfully exported: Đăng ký đã được xuất thành công
- Invalid history file: File lịch sử không hợp lệ
+ Invalid history file: Tệp lịch sử không hợp lệ
This might take a while, please wait: Điều này có thể tốn thời gian, xin hãy chờ
- Invalid subscriptions file: File đăng ký không hợp lệ
- One or more subscriptions were unable to be imported: Một hay hơn đăng ký không
+ Invalid subscriptions file: Tệp đăng ký không hợp lệ
+ One or more subscriptions were unable to be imported: Một hay nhiều đăng ký không
thể nhập
All subscriptions have been successfully imported: Tất cả đăng ký đã được nhập
vào thành công
- All subscriptions and profiles have been successfully imported: Tất cả đăng ký
- và profiles đã được nhập vào thành công
- Profile object has insufficient data, skipping item: Profile object không đủ dữ
- liệu, bỏ qua
+ All subscriptions and profiles have been successfully imported: Tất cả các đăng
+ ký và hồ sơ đã được nhập thành công
+ Profile object has insufficient data, skipping item: Hồ sơ không đủ dữ liệu, đang
+ bỏ qua mục này
Export History: Xuất lịch sử
Import History: Nhập lịch sử
Export NewPipe: Xuất NewPipe
@@ -344,9 +463,9 @@ Settings:
Import Subscriptions: Nhập đăng ký
Select Export Type: Chọn kiểu xuất ra
Select Import Type: Chọn kiểu nhập vào
- Data Settings: Dữ liệu
+ Data Settings: Cài đặt dữ liệu
Manage Subscriptions: Quản lý đăng ký
- Import Playlists: Thêm danh sách phát
+ Import Playlists: Nhập danh sách phát
All playlists has been successfully imported: Tất cả các danh sách phát đã được
thêm vào thành công
All playlists has been successfully exported: Tất cả các danh sách phát đã được
@@ -354,36 +473,64 @@ Settings:
Playlist insufficient data: Dữ liệu bị thiếu cho danh sách phát "{playlist}",
bỏ qua mục này
Export Playlists: Xuất danh sách phát
- History File: Tệp Lịch sử
- Playlist File: Tệp Danh sách phát
+ History File: Tệp lịch sử
+ Playlist File: Tệp danh sách phát
+ Subscription File: Tệp đăng ký
+ Export Playlists For Older FreeTube Versions:
+ Label: Xuất danh sách phát cho các phiên bản FreeTube cũ hơn
+ Tooltip: "Tùy chọn này sẽ gộp tất cả các danh sách phát vào một danh sách phát
+ mang tên 'Ưa thích'.\nCách để nhập & xuất video trong danh sách phát cho một
+ phiên bản cũ hơn của FreeTube:\n1. Xuất danh sách phát với tùy chọn này được
+ bật.\n2. Xóa tất cả các danh sách phát qua tùy chọn Xóa tất cả danh sách phát
+ trong mục Cài đặt quyền riêng tư.\n3. Mở phiên bản cũ hơn và nhập danh sách
+ phát đã được xuất ra."
Distraction Free Settings:
- Hide Live Chat: Giấu live chat
- Hide Popular Videos: Giấu video phổ biến
- Hide Trending Videos: Giấu video xu hướng
- Hide Recommended Videos: Giấu video nên xem
- Hide Comment Likes: Giấu bình luận like
- Hide Channel Subscribers: Giấu số người đăng ký
- Hide Video Likes And Dislikes: Giấu thích và không thích
- Hide Video Views: Giấu lượt xem
- Distraction Free Settings: Chế độ không phân tâm
- Hide Active Subscriptions: Ẩn Đăng ký Hiện hoạt
+ Hide Live Chat: Ẩn live chat
+ Hide Popular Videos: Ẩn video phổ biến
+ Hide Trending Videos: Ẩn video xu hướng
+ Hide Recommended Videos: Ẩn video tiếp theo
+ Hide Comment Likes: Ẩn lượt thích bình luận
+ Hide Channel Subscribers: Ẩn số người đăng ký
+ Hide Video Likes And Dislikes: Ẩn lượt thích và không thích
+ Hide Video Views: Ẩn lượt xem
+ Distraction Free Settings: Cài đặt không phân tâm
+ Hide Active Subscriptions: Ẩn đăng ký hiện hoạt
Hide Playlists: Ẩn danh sách phát
Hide Comments: Ẩn bình luận
Hide Live Streams: Ẩn phát trực tiếp
Hide Video Description: Ẩn mổ tả video
- Hide Sharing Actions: Ẩn hoạt động chia sẻ
+ Hide Sharing Actions: Ẩn nút chia sẻ
Sections:
General: Chung
+ Side Bar: Thanh bên
+ Channel Page: Trang kênh
+ Subscriptions Page: Trang đăng ký
+ Watch Page: Trang trình chiếu video
Hide Channel Playlists: Ẩn danh sách phát của kênh
Hide Featured Channels: Ẩn các kênh nổi bật
- Hide Channels Placeholder: Tên kênh hoặc ID
- Hide Profile Pictures in Comments: Ẩn ảnh đại diện trong Bình luận
+ Hide Channels Placeholder: ID kênh
+ Hide Profile Pictures in Comments: Ẩn ảnh đại diện trong bình luận
Hide Chapters: Ẩn các chương
- Hide Channels: Ẩn các videos khỏi kênh
+ Hide Channels: Ẩn các video khỏi kênh
+ Hide Channel Releases: Ẩn nhạc của kênh
+ Hide Videos and Playlists Containing Text: Ẩn các video và danh sách phát có chứa
+ Hide Channels Invalid: ID kênh không hợp lệ
+ Hide Channel Community: Ẩn cộng đồng của kênh
+ Hide Channel Shorts: Ẩn short của kênh
+ Hide Subscriptions Shorts: Ẩn short từ các đăng ký
+ Hide Subscriptions Live: Ẩn video phát trực tiếp từ các đăng ký
+ Hide Upcoming Premieres: Ẩn video sắp ra mắt
+ Hide Channel Podcasts: Ẩn podcast của kênh
+ Hide Subscriptions Community: Ẩn bài đăng cộng đồng từ các đăng ký
+ Hide Channels Already Exists: ID kênh đã tồn tại
+ Hide Videos and Playlists Containing Text Placeholder: Từ, tiếng, hoặc cụm từ
+ Hide Subscriptions Videos: Ẩn video từ các đăng ký
+ Display Titles Without Excessive Capitalisation: Hiển thị tiêu đề không viết hoa
+ quá mức
Privacy Settings:
Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Bạn
- có muốn xóa toàn bộ đăng ký và profiles không? Điều này không thể phục hồi.
- Remove All Subscriptions / Profiles: Xóa bỏ tất cả đăng ký / Profiles
+ có muốn xóa toàn bộ đăng ký và hồ sơ không? Điều này không thể phục hồi.
+ Remove All Subscriptions / Profiles: Xóa tất cả đăng ký / hồ sơ
Watch history has been cleared: Lịch sử xem đã được xóa
Are you sure you want to remove your entire watch history?: Bạn có thực sự muốn
xóa toàn bộ lịch sử xem?
@@ -391,58 +538,70 @@ Settings:
Search cache has been cleared: Bộ đệm của tìm kiếm đã xóa
Are you sure you want to clear out your search cache?: Bạn có chắc là muốn xóa
bộ đệm của tìm kiếm?
- Clear Search Cache: Xóa Tìm kiếm cache
+ Clear Search Cache: Xóa cache tìm kiếm
Save Watched Progress: Lưu quá trình xem
Remember History: Nhớ lịch sử
- Privacy Settings: Thiết lập quyền riêng tư
- Automatically Remove Video Meta Files: Tự động xúa các tệp meta video
- The app needs to restart for changes to take effect. Restart and apply change?: App
- cần khởi động lại để chỉnh sửa có hiệu nghiệm. Khởi động lại và áp đặt?
+ Privacy Settings: Cài đặt quyền riêng tư
+ Automatically Remove Video Meta Files: Tự động xóa các tệp meta video
+ Remove All Playlists: Xóa tất cả danh sách phát
+ Are you sure you want to remove all your playlists?: Bạn có chắc muốn xóa tất
+ cả các danh sách phát không?
+ All playlists have been removed: Đã xóa tất cả các danh sách phát
+ Save Watched Videos With Last Viewed Playlist: Lưu video đã xem với danh sách
+ phát được xem lần cuối
+ The app needs to restart for changes to take effect. Restart and apply change?: Ứng
+ dụng cần được khởi động lại để chỉnh sửa có hiệu nghiệm. Khởi động lại và áp dụng
+ cài đặt?
Proxy Settings:
- Proxy Host: Máy chủ Proxy
+ Proxy Host: Máy chủ proxy
Region: Vùng
Country: Quốc gia
Proxy Settings: Cài đặt proxy
Enable Tor / Proxy: Bật Tor / Proxy
Proxy Protocol: Giao thức proxy
- Proxy Port Number: Số Cổng Proxy
+ Proxy Port Number: Số cổng proxy
City: Thành phố
- Ip: Ip
+ Ip: IP
Your Info: Thông tin của bạn
Error getting network information. Is your proxy configured properly?: Lỗi nhận
thông tin mạng. Proxy của bạn đã được cài đặc đúng cách chưa?
- Clicking on Test Proxy will send a request to: Nhấn vào Proxy thử nghiệm sẽ gửi
- yêu cầu đến
- Test Proxy: Proxy thử nghiệm
+ Clicking on Test Proxy will send a request to: Nhấn vào Thử proxy sẽ gửi yêu cầu
+ đến
+ Test Proxy: Thử proxy
SponsorBlock Settings:
Enable SponsorBlock: Bật SponsorBlock
- 'SponsorBlock API Url (Default is https://sponsor.ajay.app)': SponsorBlock API
- Url (Mặc định là https://sponsor.ajay.app)
+ 'SponsorBlock API Url (Default is https://sponsor.ajay.app)': URL API SponsorBlock
+ (Mặc định là https://sponsor.ajay.app)
Skip Options:
- Skip Option: Tuỳ chọn lượt bỏ
- Show In Seek Bar: Hiển thị trong thanh tìm kiếm
- Auto Skip: Tự động lượt bỏ
- Prompt To Skip: Nhắc nhở lượt bỏ
- Do Nothing: Không làm gì hết
+ Skip Option: Tuỳ chọn bỏ qua
+ Show In Seek Bar: Hiển thị trong thanh tiến trình
+ Auto Skip: Tự động bỏ qua
+ Prompt To Skip: Nhắc nhở bỏ qua
+ Do Nothing: Không làm gì
Notify when sponsor segment is skipped: Thông báo khi đoạn quảng cáo bị bỏ qua
Category Color: Bản màu
SponsorBlock Settings: Cài đặt SponsorBlock
+ 'DeArrow Thumbnail Generator API Url (Default is https://dearrow-thumb.ajay.app)': URL
+ API ảnh xem trước DeArrow (Mặc định là https://dearrow-thumb.ajay.app)
+ UseDeArrowTitles: Dùng tiêu đề video từ DeArrow
+ UseDeArrowThumbnails: Dùng ảnh xem trước từ DeArrow
External Player Settings:
External Player Settings: Cài đặt trình phát video bên ngoài
External Player: Trình phát video bên ngoài
- Custom External Player Arguments: Chứng minh trình phát bên ngoài tùy chỉnh
+ Custom External Player Arguments: Tham số trình phát bên ngoài tùy chỉnh
Ignore Unsupported Action Warnings: Bỏ qua các cảnh bảo tác vụ không được hổ trợ
Custom External Player Executable: Chạy trình phát bên ngoài tuỳ chỉnh
Players:
None:
Name: Trống
+ Ignore Default Arguments: Bỏ qua tham số mặc định
Parental Control Settings:
- Parental Control Settings: Cài đặt trình kiểm soát của phụ huynh
- Hide Unsubscribe Button: Ẩn Nút Huỷ Đăng Ký
- Show Family Friendly Only: Chỉ hiển thị những nội dung gia đình và thân thiện
+ Parental Control Settings: Cài đặt kiểm soát của phụ huynh
+ Hide Unsubscribe Button: Ẩn nút huỷ đăng ký
+ Show Family Friendly Only: Chỉ hiển thị nội dung thân thiện với gia đình
Hide Search Bar: Ẩn thanh tìm kiếm
Download Settings:
- Download Behavior: Thói quen tải xuống
+ Download Behavior: Hành vi tải xuống
Download in app: Tải xuống trong ứng dụng
Open in web browser: Mở trên trình duyệt
Ask Download Path: Yêu cầu đường dẫn tải xuống
@@ -451,11 +610,11 @@ Settings:
Password Dialog:
Password: Mật khẩu
Password Incorrect: Mật khẩu sai
- Enter Password To Unlock: Nhập mật khẩu để mở Cài đặt
+ Enter Password To Unlock: Nhập mật khẩu để mở cài đặt
Unlock: Mở khoá
Password Settings:
Set Password To Prevent Access: Đặt mặt khẩu để ngăn truy cập cài đặt
- Password Settings: Cài đặt Mật khẩu
+ Password Settings: Cài đặt mật khẩu
Remove Password: Xoá mật khẩu
Set Password: Đặt mật khẩu
Experimental Settings:
@@ -463,6 +622,8 @@ Settings:
cài đặt này có thể gây ra hoạt động bất ổn định. Hãy tạo phương án dự phòng
trước khi bật!
Experimental Settings: Cài đặt thử nghiệm
+ Replace HTTP Cache: Thay thế bộ đệm HTTP
+ Expand All Settings Sections: Mở rộng tất cả các mục tùy chọn
About:
#On About page
About: 'Giới thiệu'
@@ -496,29 +657,29 @@ About:
#On Channel Page
Mastodon: Mastodon
- Email: Thư điện tử
+ Email: Email
Source code: Mã nguồn
FAQ: Câu hỏi thường gặp
Report a problem: Báo cáo sự cố
Licensed under the AGPLv3: Được cấp phép theo AGPLv3
- View License: Xem Giấy phép
+ View License: Xem giấy phép
Help: Trợ giúp
Translate: Phiên dịch
Website: Trang web
Blog: Blog
- Credits: Tín dụng
+ Credits: Ghi công
Donate: Quyên tặng
GitHub issues: Sự cố GitHub
FreeTube Wiki: FreeTube Wiki
Beta: Thử nghiệm
- Downloads / Changelog: Tải xuống / bản ghi changelog
- GitHub releases: Phiên bản GitHub
- Please check for duplicates before posting: Vui lòng kiểm tra các bản sao trước
- khi đăng
- Chat on Matrix: Trò chuyện trên Ma trận
+ Downloads / Changelog: Tải xuống / nhật ký thay đổi
+ GitHub releases: Tải xuống trên GitHub
+ Please check for duplicates before posting: Vui lòng kiểm tra trùng lặp trước khi
+ đăng
+ Chat on Matrix: Trò chuyện trên Matrix
room rules: quy định phòng chat
FreeTube is made possible by: FreeTube được tạo ra bởi
- these people and projects: những người và dự án
+ these people and projects: những người và dự án này
Please read the: Hãy đọc
Discussions: Thảo luận
Channel:
@@ -551,6 +712,7 @@ Channel:
Featured Channels: 'Kênh đặc sắc'
Tags:
Search for: Tìm kiếm cho "{tag}"
+ Tags: Thẻ
Joined: Đã tham gia
Location: Vị trí
Details: Chi tiết
@@ -572,10 +734,21 @@ Channel:
votes: '{votes} bình chọn'
Reveal Answers: Hiện Câu trả lời
Hide Answers: Ẩn Câu trả lời
+ Video hidden by FreeTube: FreeTube đã ẩn video này
Releases:
Releases: Xuất bản
+ This channel does not currently have any releases: Kênh này hiện không có bất
+ kỳ bản phát hành nào
This channel is age-restricted and currently cannot be viewed in FreeTube.: Kênh
này là kênh giới hạn độ tuổi và hiện tại không thể xem được trên FreeTube.
+ Channel Tabs: Trang kênh
+ Shorts:
+ This channel does not currently have any shorts: Kênh này hiện không có video
+ shorts
+ Podcasts:
+ Podcasts: Podcast
+ This channel does not currently have any podcasts: Kênh này hiện không có podcast
+ nào
Video:
Open in YouTube: 'Mở trong Youtube'
Copy YouTube Link: 'Sao chép liên kết Youtube'
@@ -706,6 +879,13 @@ Video:
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Trò
chuyện trực tiếp hiện không khả dụng trên luồng phát này. Chủ sở hữu có thể đã
tắt chức năng này.
+ Hide Channel: Ẩn kênh này
+ More Options: Tùy chọn khác
+ Pause on Current Video: Tạm dừng trên video hiện tại
+ Show Super Chat Comment: Hiển thị bình luận Super Chat
+ Upcoming: Sắp ra mắt
+ Premieres: Công chiếu
+ Unhide Channel: Hiển thị kênh này
Videos:
#& Sort By
Sort By:
@@ -750,6 +930,7 @@ Share:
Include Timestamp: Có kèm dấu thời gian
YouTube Channel URL copied to clipboard: Đã sao chép liên kết kênh Youtube
Invidious Channel URL copied to clipboard: URL của kênh ưu tiên đã được sao chép
+ Share Channel: Chia sẻ kênh
Mini Player: 'Trình phát Mini'
Comments:
Comments: 'Bình luận'
@@ -776,13 +957,15 @@ Comments:
Pinned by: Được ghim bởi
Show More Replies: Hiện thêm câu trả lời
View {replyCount} replies: Hiển thị {replyCount} câu trả lời
+ Hearted: Thả Tim
+ Subscribed: Đã đăng ký
Up Next: 'Tiếp theo'
# Toast Messages
Local API Error (Click to copy): 'Local API lỗi (Nhấn để copy)'
Invidious API Error (Click to copy): 'Invidious API lỗi (Nhấn để copy)'
Falling back to Invidious API: 'Quay trở về Invidious API'
-Falling back to the local API: 'Quay trở về local API'
+Falling back to Local API: 'Quay trở về local API'
Subscriptions have not yet been implemented: 'Danh sách đăng kí hiện chưa được áp
đặt'
Loop is now disabled: 'Lặp lại hiện đã tắt'
@@ -824,24 +1007,30 @@ Profile:
chỉnh về {profile}'
Profile has been updated: Profile đã được cập nhật
Profile has been created: Profile đã được tạo
- Your profile name cannot be empty: Tên Profile của bạn không được để trống
- Profile could not be found: Probile không thể tìm thấy được
+ Your profile name cannot be empty: Tên hồ sơ của bạn không được để trống
+ Profile could not be found: Hồ sơ không thể tìm thấy được
All subscriptions will also be deleted.: Tất cả đăng ký đều sẽ bị xóa.
- Are you sure you want to delete this profile?: Bạn có chắc là muốn xóa Profile này?
- Delete Profile: Xóa Profile
- Make Default Profile: Chọn làm Profile mặc định
- Update Profile: Cập nhật Profile
- Create Profile: Tạo Profile
- Profile Preview: Xem trước Profile
- Custom Color: Màu custom
+ Are you sure you want to delete this profile?: Bạn có chắc muốn xóa hồ sơ này?
+ Delete Profile: Xóa hồ sơ
+ Make Default Profile: Chọn làm hồ sơ mặc định
+ Update Profile: Cập nhật hồ sơ
+ Create Profile: Tạo hồ sơ
+ Profile Preview: Xem trước hồ sơ
+ Custom Color: Màu tùy chỉnh
Color Picker: Chọn màu
- Edit Profile: Chỉnh sửa Profile
- Create New Profile: Tạo Profile mới
- Profile Manager: Quản lý Profile
+ Edit Profile: Chỉnh sửa hồ sơ
+ Create New Profile: Tạo hồ sơ mới
+ Profile Manager: Quản lý hồ sơ
All Channels: Tất cả kênh
- Profile Select: Chọn Profile
+ Profile Select: Chọn hồ sơ
Profile Filter: Bộ lọc hồ sơ
- Profile Settings: Cài đặt hồ sơ cá nhân
+ Profile Settings: Cài đặt hồ sơ
+ Toggle Profile List: Mở/đóng danh sách hồ sơ
+ Edit Profile Name: Chỉnh sửa tên hồ sơ
+ Profile Name: Tên hồ sơ
+ Open Profile Dropdown: Mở danh sách hồ sơ
+ Create Profile Name: Tạo tên hồ sơ
+ Close Profile Dropdown: Đóng danh sách hồ sơ
A new blog is now available, {blogTitle}. Click to view more: Một blog mới đã có,
{blogTitle}. Nhấn để xem chi tiết
Download From Site: Tải từ website
@@ -853,15 +1042,15 @@ Search Bar:
More: Thêm
Are you sure you want to open this link?: Bạn có chắc là bạn muốn mở liên kết này
không?
-New Window: Cửa Sổ Mới
+New Window: Cửa sổ mới
Channels:
Channels: Kênh
Title: Danh sách kênh
- Search bar placeholder: Tìm Kênh
+ Search bar placeholder: Tìm kênh
Empty: Danh sách kênh của bạn hiện đang trống.
Unsubscribed: '{channelName} đã bị xoá khỏi danh sách kênh đã đăng ký của bạn'
Unsubscribe Prompt: Bạn có chắc răng bạn muốn huỷ đăng ký kênh "{channelName}"?
- Unsubscribe: Huỷ đăng ký kênh
+ Unsubscribe: Huỷ đăng ký
Count: '{number} kênh đã tìm được.'
Tooltips:
General Settings:
@@ -896,6 +1085,12 @@ Tooltips:
lui để kiểm soát tốc độ phát. Nhấn và giữ phím Control (Phím Command trên Mac)
và nhấp chuột trái để lập tức trở về tốc độ phát mặc định (1x trừ khi nó đã
được thay đổi trong cài đặt).
+ Skip by Scrolling Over Video Player: Sử dụng con lăn chuột để bỏ qua video, kiểu
+ MPV.
+ Allow DASH AV1 formats: Định dạng DASH AV1 có thể trông đẹp hơn định dạng DASH
+ H.264. Định dạng DASH AV1 yêu cầu nhiều năng lượng hơn để phát lại! Chúng không
+ có sẵn trên tất cả các video, trong những trường hợp đó trình phát sẽ sử dụng
+ định dạng DASH H.264 thay thế.
External Player Settings:
Custom External Player Arguments: Bất kỳ tham số dòng lệnh tùy chỉnh nào, được
phân tách bằng dấu chấm phẩy (';'), bạn muốn được chuyển đến trình phát bên
@@ -915,16 +1110,23 @@ Tooltips:
thức mặc định để lấy nguồn cấp dữ liệu đăng ký của bạn. RSS nhanh hơn và tránh
việc bị chặn IP, nhưng không cung cấp thông tin nhất định như thời lượng video
hoặc trạng thái phát trực tiếp
+ Fetch Automatically: Khi được bật, FreeTube sẽ tự động tìm nạp nguồn cấp dữ liệu
+ đăng ký của bạn khi cửa sổ mới được mở và khi chuyển đổi hồ sơ.
Privacy Settings:
Remove Video Meta Files: Khi được bật lên, FreeTube sẽ tự động xóa các tệp meta
được tạo trong quá trình phát lại video, khi trang xem bị đóng.
-Age Restricted:
- The currently set default instance is {instance}: '{instance} này bị giới hạn độ
- tuổi'
- Type:
- Channel: Kênh
- Video: Video
- This {videoOrPlaylist} is age restricted: '{videoOrPlaylist} bị giới hạn độ tuổi'
+ Distraction Free Settings:
+ Hide Channels: Nhập tên kênh hoặc ID kênh để ẩn tất cả video, danh sách phát và
+ chính kênh đó khỏi xuất hiện trong tìm kiếm, xu hướng, phổ biến nhất và được
+ đề xuất. Tên kênh đã nhập phải khớp hoàn toàn và có phân biệt chữ hoa chữ thường.
+ Hide Subscriptions Live: Cài đặt này bị ghi đè bởi cài đặt "{appWideSetting}"
+ trên toàn ứng dụng, trong phần "{subsection}" của "{settingsSection}"
+ SponsorBlock Settings:
+ UseDeArrowThumbnails: Thay thế thumbnail video bằng thumbnail gửi từ DeArrow.
+ UseDeArrowTitles: Thay thế tiêu đề video bằng tiêu đề do người dùng gửi từ DeArrow.
+ Experimental Settings:
+ Replace HTTP Cache: Tắt bộ nhớ đệm HTTP dựa trên đĩa của Electron và bật bộ nhớ
+ đệm hình ảnh trong bộ nhớ tùy chỉnh. Sẽ dẫn đến việc sử dụng RAM tăng lên.
Hashtags have not yet been implemented, try again later: Thẻ hashtag chưa thể dùng
được, hãy thử lại sau
Playing Next Video Interval: Phát video tiếp theo ngay lập tức. Nhấn vào để hủy. |
@@ -945,3 +1147,30 @@ Starting download: Bắt đầu tải xuống "{videoTitle}"
Ok: Ok
Clipboard:
Copy failed: Sao chép vào bộ nhớ tạm thất bại
+ Cannot access clipboard without a secure connection: Không thể truy cập clipboard
+ nếu không có kết nối an toàn
+Go to page: Đi đến {page}
+Close Banner: Đóng thanh trên
+Chapters:
+ 'Chapters list visible, current chapter: {chapterName}': 'Danh sách các chương hiển
+ thị, chương hiện tại: {chapterName}'
+ Chapters: Chương
+ 'Chapters list hidden, current chapter: {chapterName}': 'Danh sách các chương bị
+ ẩn, chương hiện tại: {chapterName}'
+Channel Unhidden: '{channel} đã bị xóa khỏi bộ lọc kênh'
+Tag already exists: Thẻ "{tagName}" đã tồn tại
+Hashtag:
+ This hashtag does not currently have any videos: Hashtag này hiện không có bất kỳ
+ video nào
+ Hashtag: Hashtag
+Age Restricted:
+ This channel is age restricted: Kênh này bị giới hạn độ tuổi
+ This video is age restricted: Video này bị giới hạn độ tuổi
+Preferences: Tuỳ chỉnh
+Playlist will not pause when current video is finished: Danh sách phát sẽ không tạm
+ dừng khi video hiện tại kết thúc
+Channel Hidden: '{channel} đã thêm vào bộ lọc kênh'
+Playlist will pause when current video is finished: Danh sách phát sẽ tạm dừng khi
+ video hiện tại kết thúc
+Trimmed input must be at least N characters long: Dữ liệu nhập bị cắt bớt phải dài
+ ít nhất 1 ký tự | Dữ liệu nhập bị cắt bớt phải dài ít nhất {length} ký tự
diff --git a/static/locales/zh-CN.yaml b/static/locales/zh-CN.yaml
index 9d0a0632c375d..1ca6bdbc544b1 100644
--- a/static/locales/zh-CN.yaml
+++ b/static/locales/zh-CN.yaml
@@ -128,6 +128,7 @@ User Playlists:
Select a playlist to add your N videos to: 选择一个播放列表来添加你的视频 | 选择一个播放列表来添加你的 {videoCount}
个视频
N playlists selected: 选中了 {playlistCount} 个播放列表
+ Added {count} Times: 添加了 {count} 次
SinglePlaylistView:
Toast:
There were no videos to remove.: 没有可删除的视频。
@@ -249,6 +250,7 @@ Settings:
Catppuccin Mocha: Catppuccin Mocha
Pastel Pink: Pastel Pink
Hot Pink: Hot Pink
+ Nordic: Nordic
Main Color Theme:
Main Color Theme: '主题色'
Red: '红'
@@ -468,7 +470,7 @@ Settings:
Hide Upcoming Premieres: 隐藏即将到来的首映
Hide Channels: 隐藏频道中的视频
Hide Channels Placeholder: 频道ID
- Display Titles Without Excessive Capitalisation: 不用过度大写字母的方式显示标题名称
+ Display Titles Without Excessive Capitalisation: 去除标题中对字母大写和标点符号的过度使用
Hide Featured Channels: 隐藏精选频道
Hide Channel Playlists: 隐藏频道播放列表
Hide Channel Community: 隐藏频道社区
@@ -805,6 +807,7 @@ Video:
Pause on Current Video: 当前视频播完后不自动播放列表中下一视频
Unhide Channel: 显示频道
Hide Channel: 隐藏频道
+ More Options: 更多选项
Videos:
#& Sort By
Sort By:
@@ -881,7 +884,7 @@ Up Next: 'Up Next'
Local API Error (Click to copy): '本地API错误(点击复制)'
Invidious API Error (Click to copy): 'Invidious API错误(点击复制)'
Falling back to Invidious API: '回退到Invidious API'
-Falling back to the local API: '回退到本地API'
+Falling back to Local API: '回退到本地API'
Subscriptions have not yet been implemented: '订阅功能尚未被推行'
Loop is now disabled: '循环播放现在被禁用'
Loop is now enabled: '循环播放现在被允许'
@@ -1006,12 +1009,6 @@ Download folder does not exist: 下载目录“$”不存在,退回到 “询
Screenshot Error: 截屏失败。{error}
Screenshot Success: 另存截屏为 “{filePath}”
New Window: 新窗口
-Age Restricted:
- Type:
- Channel: 频道
- Video: 视频
- The currently set default instance is {instance}: 此 {instance} 有年龄限制
- This {videoOrPlaylist} is age restricted: 此 {videoOrPlaylist} 有年龄限制
Channels:
Search bar placeholder: 搜索频道
Count: 找到了 {number} 个频道。
@@ -1041,3 +1038,7 @@ Channel Unhidden: 从频道过滤器删除了{channel} 频道
Tag already exists: '"{tagName}" 标签已存在'
Trimmed input must be at least N characters long: 缩减输入的长度需至少为 1 个字符 | 缩减输入的长度需至少为
{length} 个字符
+Close Banner: 关闭横幅
+Age Restricted:
+ This video is age restricted: 此视频有年龄限制
+ This channel is age restricted: 此频道有年龄限制
diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml
index 30b4ae5642182..a180c2a09e95b 100644
--- a/static/locales/zh-TW.yaml
+++ b/static/locales/zh-TW.yaml
@@ -170,6 +170,7 @@ User Playlists:
部影片新增至 1 個播放清單
"{videoCount} video(s) added to {playlistCount} playlists": 1 部影片新增至 {playlistCount}
個播放清單 | {videoCount} 部影片新增至 {playlistCount} 個播放清單
+ Added {count} Times: 新增了 {count} 次 | 新增了 {count} 次
CreatePlaylistPrompt:
New Playlist Name: 新播放清單名稱
Toast:
@@ -245,11 +246,12 @@ Settings:
Black: '黑色'
Dark: '深色'
Light: '淺色'
- Dracula: '德古拉'
+ Dracula: 'Dracula'
System Default: 系統預設值
Catppuccin Mocha: 卡布奇諾摩卡
Pastel Pink: 淡粉紅色
Hot Pink: 亮粉紅色
+ Nordic: 北歐
Main Color Theme:
Main Color Theme: '主題色'
Red: '紅'
@@ -469,7 +471,7 @@ Settings:
Hide Upcoming Premieres: 隱藏即將到來的首映
Hide Channels Placeholder: 頻道 ID
Hide Channels: 隱藏頻道中的影片
- Display Titles Without Excessive Capitalisation: 顯示沒有過多大寫的標題
+ Display Titles Without Excessive Capitalisation: 顯示沒有過多大寫與標點符號的標題
Hide Featured Channels: 隱藏精選頻道
Hide Channel Playlists: 隱藏頻道播放清單
Hide Channel Community: 隱藏頻道社群
@@ -814,6 +816,7 @@ Video:
Pause on Current Video: 暫停目前影片
Unhide Channel: 顯示頻道
Hide Channel: 隱藏頻道
+ More Options: 更多選項
Videos:
#& Sort By
Sort By:
@@ -890,7 +893,7 @@ Up Next: '觀看其他類似影片'
Local API Error (Click to copy): '區域API錯誤(點擊複製)'
Invidious API Error (Click to copy): 'Invidious API錯誤(點擊複製)'
Falling back to Invidious API: '回退到Invidious API'
-Falling back to the local API: '回退到區域API'
+Falling back to Local API: '回退到區域API'
Subscriptions have not yet been implemented: '訂閱功能尚未被推行'
Loop is now disabled: '循環播放現在被停用'
Loop is now enabled: '循環播放現在被啟用'
@@ -1016,12 +1019,6 @@ Starting download: 正在開始下載「{videoTitle}」
Screenshot Success: 已儲存螢幕截圖為 "{filePath}"
Screenshot Error: 螢幕截圖失敗。 {error}
New Window: 新視窗
-Age Restricted:
- The currently set default instance is {instance}: 此 {instance} 有年齡限制
- Type:
- Channel: 頻道
- Video: 影片
- This {videoOrPlaylist} is age restricted: 此 {videoOrPlaylist} 有年齡限制
Channels:
Channels: 頻道
Title: 頻道清單
@@ -1051,3 +1048,7 @@ Channel Unhidden: '{channel} 已從頻道過濾條件移除'
Trimmed input must be at least N characters long: 修剪後的輸入必須至少有 1 個字元長 | 修剪後的輸入必須至少有
{length} 個字元長
Tag already exists: 「{tagName}」標籤已存在
+Close Banner: 關閉橫幅
+Age Restricted:
+ This channel is age restricted: 此頻道有年齡限制
+ This video is age restricted: 此影片有年齡限制
diff --git a/yarn.lock b/yarn.lock
index a7b93dd187220..2f58c0d006139 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -28,36 +28,36 @@
"@babel/highlight" "^7.23.4"
chalk "^2.4.2"
-"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5":
+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5":
version "7.23.5"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
-"@babel/core@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1"
- integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==
+"@babel/core@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
+ integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
dependencies:
"@ampproject/remapping" "^2.2.0"
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
"@babel/helper-compilation-targets" "^7.23.6"
"@babel/helper-module-transforms" "^7.23.3"
- "@babel/helpers" "^7.23.9"
- "@babel/parser" "^7.23.9"
- "@babel/template" "^7.23.9"
- "@babel/traverse" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/helpers" "^7.24.0"
+ "@babel/parser" "^7.24.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/eslint-parser@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.9.tgz#052c13b39144e21fdd1e03fc9b67e98976a1ebfc"
- integrity sha512-xPndlO7qxiJbn0ATvfXQBjCS7qApc9xmKHArgI/FTEFxXas5dnjC/VqM37lfZun9dclRYcn+YQAr6uDFy0bB2g==
+"@babel/eslint-parser@^7.23.10":
+ version "7.23.10"
+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.10.tgz#2d4164842d6db798873b40e0c4238827084667a2"
+ integrity sha512-3wSYDPZVnhseRnxRJH6ZVTNknBz76AEnyC+AYYhasjP3Yy23qz0ERR7Fcd2SHmYuSFJ2kY9gaaDd3vyqU09eSw==
dependencies:
"@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1"
eslint-visitor-keys "^2.1.0"
@@ -269,10 +269,10 @@
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
- integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
"@babel/helper-remap-async-to-generator@^7.22.20":
version "7.22.20"
@@ -364,14 +364,14 @@
"@babel/template" "^7.22.15"
"@babel/types" "^7.22.19"
-"@babel/helpers@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d"
- integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==
+"@babel/helpers@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
+ integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
dependencies:
- "@babel/template" "^7.23.9"
- "@babel/traverse" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.0"
+ "@babel/types" "^7.24.0"
"@babel/highlight@^7.23.4":
version "7.23.4"
@@ -382,10 +382,10 @@
chalk "^2.4.2"
js-tokens "^4.0.0"
-"@babel/parser@^7.23.5", "@babel/parser@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b"
- integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==
+"@babel/parser@^7.23.5", "@babel/parser@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
+ integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
version "7.23.3"
@@ -789,14 +789,14 @@
"@babel/helper-plugin-utils" "^7.22.5"
"@babel/plugin-syntax-numeric-separator" "^7.10.4"
-"@babel/plugin-transform-object-rest-spread@^7.23.4":
- version "7.23.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83"
- integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==
+"@babel/plugin-transform-object-rest-spread@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1"
+ integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==
dependencies:
- "@babel/compat-data" "^7.23.3"
- "@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-plugin-utils" "^7.24.0"
"@babel/plugin-syntax-object-rest-spread" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.23.3"
@@ -939,14 +939,14 @@
"@babel/helper-create-regexp-features-plugin" "^7.22.15"
"@babel/helper-plugin-utils" "^7.22.5"
-"@babel/preset-env@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669"
- integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==
+"@babel/preset-env@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc"
+ integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==
dependencies:
"@babel/compat-data" "^7.23.5"
"@babel/helper-compilation-targets" "^7.23.6"
- "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.24.0"
"@babel/helper-validator-option" "^7.23.5"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3"
@@ -999,7 +999,7 @@
"@babel/plugin-transform-new-target" "^7.23.3"
"@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4"
"@babel/plugin-transform-numeric-separator" "^7.23.4"
- "@babel/plugin-transform-object-rest-spread" "^7.23.4"
+ "@babel/plugin-transform-object-rest-spread" "^7.24.0"
"@babel/plugin-transform-object-super" "^7.23.3"
"@babel/plugin-transform-optional-catch-binding" "^7.23.4"
"@babel/plugin-transform-optional-chaining" "^7.23.4"
@@ -1046,19 +1046,19 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a"
- integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==
+"@babel/template@^7.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
dependencies:
"@babel/code-frame" "^7.23.5"
- "@babel/parser" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
-"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.9":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950"
- integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==
+"@babel/traverse@^7.18.9", "@babel/traverse@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
+ integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
dependencies:
"@babel/code-frame" "^7.23.5"
"@babel/generator" "^7.23.6"
@@ -1066,15 +1066,15 @@
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.9"
- "@babel/types" "^7.23.9"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4":
- version "7.23.9"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002"
- integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==
+"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
dependencies:
"@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
@@ -1113,12 +1113,12 @@
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
-"@double-great/stylelint-a11y@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@double-great/stylelint-a11y/-/stylelint-a11y-3.0.0.tgz#da9eb5558f065a6488fe48f054fec64e4aae8aa1"
- integrity sha512-MdBk83+r4R7AhycEGi4uueUh6rFJYIZzRrkt4Dtqc0lzNTQ101/1n54qES0SMMty/pqBYykPt/B4xdZO+wibeg==
+"@double-great/stylelint-a11y@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@double-great/stylelint-a11y/-/stylelint-a11y-3.0.2.tgz#eddaa2c3ed952f285555eb5d7b00d7a493cac0ba"
+ integrity sha512-HPYUwHtn03cO7og4/hhBGyAJ8eF45HI20QQkIAWyiMPW68rigzltOiS98iBONznKXNwoSvMjlIX0q7JJeJnkDg==
dependencies:
- postcss "^8.4.32"
+ postcss "^8.4.33"
"@electron/asar@^3.2.1":
version "3.2.4"
@@ -1145,10 +1145,10 @@
optionalDependencies:
global-agent "^3.0.0"
-"@electron/notarize@2.1.0":
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.1.0.tgz#76aaec10c8687225e8d0a427cc9df67611c46ff3"
- integrity sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==
+"@electron/notarize@2.2.1":
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-2.2.1.tgz#d0aa6bc43cba830c41bfd840b85dbe0e273f59fe"
+ integrity sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==
dependencies:
debug "^4.1.1"
fs-extra "^9.0.1"
@@ -1166,10 +1166,10 @@
minimist "^1.2.6"
plist "^3.0.5"
-"@electron/universal@1.4.1":
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.4.1.tgz#3fbda2a5ed9ff9f3304c8e8316b94c1e3a7b3785"
- integrity sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ==
+"@electron/universal@1.5.1":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.5.1.tgz#f338bc5bcefef88573cf0ab1d5920fac10d06ee5"
+ integrity sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==
dependencies:
"@electron/asar" "^3.2.1"
"@malept/cross-spawn-promise" "^1.1.0"
@@ -1206,10 +1206,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.56.0":
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
- integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
"@fastify/busboy@^2.0.0":
version "2.0.0"
@@ -1247,13 +1247,13 @@
resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.10.tgz#b10721425d7efdee6d83fba21c64cad86fa51904"
integrity sha512-OTETSXz+3ygD2OK2/vy82cmUBpuJqeOAg4gfnnv+f2Rir1tDIhQg026Q3NQxznq83ZLz8iNqGG9XJm26inpDeg==
-"@humanwhocodes/config-array@^0.11.13":
- version "0.11.13"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
- integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
dependencies:
- "@humanwhocodes/object-schema" "^2.0.1"
- debug "^4.1.1"
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
minimatch "^3.0.5"
"@humanwhocodes/module-importer@^1.0.1":
@@ -1261,10 +1261,10 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
- integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
+ integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
"@isaacs/cliui@^8.0.2":
version "8.0.2"
@@ -1491,10 +1491,10 @@
"@types/connect" "*"
"@types/node" "*"
-"@types/bonjour@^3.5.9":
- version "3.5.10"
- resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275"
- integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==
+"@types/bonjour@^3.5.13":
+ version "3.5.13"
+ resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956"
+ integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==
dependencies:
"@types/node" "*"
@@ -1508,10 +1508,10 @@
"@types/node" "*"
"@types/responselike" "^1.0.0"
-"@types/connect-history-api-fallback@^1.3.5":
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
- integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==
+"@types/connect-history-api-fallback@^1.5.4":
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3"
+ integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==
dependencies:
"@types/express-serve-static-core" "*"
"@types/node" "*"
@@ -1551,7 +1551,7 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
-"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18":
+"@types/express-serve-static-core@*":
version "4.17.28"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8"
integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==
@@ -1560,13 +1560,23 @@
"@types/qs" "*"
"@types/range-parser" "*"
-"@types/express@*", "@types/express@^4.17.13":
- version "4.17.13"
- resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034"
- integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==
+"@types/express-serve-static-core@^4.17.33":
+ version "4.17.43"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54"
+ integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==
+ dependencies:
+ "@types/node" "*"
+ "@types/qs" "*"
+ "@types/range-parser" "*"
+ "@types/send" "*"
+
+"@types/express@*", "@types/express@^4.17.21":
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
+ integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
dependencies:
"@types/body-parser" "*"
- "@types/express-serve-static-core" "^4.17.18"
+ "@types/express-serve-static-core" "^4.17.33"
"@types/qs" "*"
"@types/serve-static" "*"
@@ -1587,6 +1597,11 @@
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+"@types/http-errors@*":
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
+ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
+
"@types/http-proxy@^1.17.8":
version "1.17.9"
resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a"
@@ -1635,15 +1650,29 @@
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
+"@types/mime@^1":
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
+ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
+
"@types/ms@*":
version "0.7.31"
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
-"@types/node@*", "@types/node@^18.11.18":
- version "18.17.12"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.12.tgz#c6bd7413a13e6ad9cfb7e97dd5c4e904c1821e50"
- integrity sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ==
+"@types/node-forge@^1.3.0":
+ version "1.3.11"
+ resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da"
+ integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*", "@types/node@^20.9.0":
+ version "20.11.24"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
+ integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
+ dependencies:
+ undici-types "~5.26.4"
"@types/normalize-package-data@^2.4.0":
version "2.4.1"
@@ -1675,30 +1704,39 @@
dependencies:
"@types/node" "*"
-"@types/retry@0.12.0":
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
- integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+"@types/retry@0.12.2":
+ version "0.12.2"
+ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a"
+ integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==
-"@types/serve-index@^1.9.1":
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278"
- integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==
+"@types/send@*":
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
+ integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
+ dependencies:
+ "@types/mime" "^1"
+ "@types/node" "*"
+
+"@types/serve-index@^1.9.4":
+ version "1.9.4"
+ resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898"
+ integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==
dependencies:
"@types/express" "*"
-"@types/serve-static@*", "@types/serve-static@^1.13.10":
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
- integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
+"@types/serve-static@*", "@types/serve-static@^1.15.5":
+ version "1.15.5"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033"
+ integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==
dependencies:
+ "@types/http-errors" "*"
"@types/mime" "*"
"@types/node" "*"
-"@types/sockjs@^0.3.33":
- version "0.3.33"
- resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f"
- integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==
+"@types/sockjs@^0.3.36":
+ version "0.3.36"
+ resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535"
+ integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==
dependencies:
"@types/node" "*"
@@ -1707,10 +1745,10 @@
resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.5.tgz#2a1413aded46e67a1fe2386800e291123ed75eb1"
integrity sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw==
-"@types/ws@^8.5.5":
- version "8.5.5"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb"
- integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==
+"@types/ws@^8.5.10":
+ version "8.5.10"
+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787"
+ integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==
dependencies:
"@types/node" "*"
@@ -2079,26 +2117,25 @@ app-builder-bin@4.0.0:
resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
-app-builder-lib@24.9.1:
- version "24.9.1"
- resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.9.1.tgz#bf3568529298b4de8595ed1acbb351fe27db5ba4"
- integrity sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==
+app-builder-lib@24.13.3:
+ version "24.13.3"
+ resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.13.3.tgz#36e47b65fecb8780bb73bff0fee4e0480c28274b"
+ integrity sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==
dependencies:
- "7zip-bin" "~5.2.0"
"@develar/schema-utils" "~2.6.5"
- "@electron/notarize" "2.1.0"
+ "@electron/notarize" "2.2.1"
"@electron/osx-sign" "1.0.5"
- "@electron/universal" "1.4.1"
+ "@electron/universal" "1.5.1"
"@malept/flatpak-bundler" "^0.4.0"
"@types/fs-extra" "9.0.13"
async-exit-hook "^2.0.1"
bluebird-lst "^1.0.9"
- builder-util "24.8.1"
- builder-util-runtime "9.2.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
chromium-pickle-js "^0.2.0"
debug "^4.3.4"
ejs "^3.1.8"
- electron-publish "24.8.1"
+ electron-publish "24.13.1"
form-data "^4.0.0"
fs-extra "^10.1.0"
hosted-git-info "^4.1.0"
@@ -2138,11 +2175,6 @@ array-flatten@1.1.1:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
-array-flatten@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
- integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-
array-includes@^3.1.7:
version "3.1.7"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda"
@@ -2366,15 +2398,13 @@ body-parser@1.20.0:
type-is "~1.6.18"
unpipe "1.0.0"
-bonjour-service@^1.0.11:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.12.tgz#28fbd4683f5f2e36feedb833e24ba661cac960c3"
- integrity sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==
+bonjour-service@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02"
+ integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==
dependencies:
- array-flatten "^2.1.2"
- dns-equal "^1.0.0"
fast-deep-equal "^3.1.3"
- multicast-dns "^7.2.4"
+ multicast-dns "^7.2.5"
boolbase@^1.0.0:
version "1.0.0"
@@ -2448,24 +2478,24 @@ buffer@^5.1.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
-builder-util-runtime@9.2.3:
- version "9.2.3"
- resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz#0a82c7aca8eadef46d67b353c638f052c206b83c"
- integrity sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==
+builder-util-runtime@9.2.4:
+ version "9.2.4"
+ resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz#13cd1763da621e53458739a1e63f7fcba673c42a"
+ integrity sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==
dependencies:
debug "^4.3.4"
sax "^1.2.4"
-builder-util@24.8.1:
- version "24.8.1"
- resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.8.1.tgz#594d45b0c86d1d17f5c7bebbb77405080b2571c2"
- integrity sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==
+builder-util@24.13.1:
+ version "24.13.1"
+ resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.13.1.tgz#4a4c4f9466b016b85c6990a0ea15aa14edec6816"
+ integrity sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==
dependencies:
"7zip-bin" "~5.2.0"
"@types/debug" "^4.1.6"
app-builder-bin "4.0.0"
bluebird-lst "^1.0.9"
- builder-util-runtime "9.2.3"
+ builder-util-runtime "9.2.4"
chalk "^4.1.2"
cross-spawn "^7.0.3"
debug "^4.3.4"
@@ -2497,6 +2527,13 @@ bundle-name@^3.0.0:
dependencies:
run-applescript "^5.0.0"
+bundle-name@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
+ integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
+ dependencies:
+ run-applescript "^7.0.0"
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -2597,10 +2634,10 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
- integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
@@ -2908,10 +2945,10 @@ css-functions-list@^3.2.1:
resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea"
integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==
-css-loader@^6.9.1:
- version "6.9.1"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.9.1.tgz#9ec9a434368f2bdfeffbf8f6901a1ce773586c6b"
- integrity sha512-OzABOh0+26JKFdMzlK6PY1u5Zx8+Ck7CVRlcGNZoY9qwJjdfu2VWFuprTIpPW+Av5TZTVViYWcFQaEEQURLknQ==
+css-loader@^6.10.0:
+ version "6.10.0"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.10.0.tgz#7c172b270ec7b833951b52c348861206b184a4b7"
+ integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==
dependencies:
icss-utils "^5.1.0"
postcss "^8.4.33"
@@ -3090,6 +3127,11 @@ default-browser-id@^3.0.0:
bplist-parser "^0.2.0"
untildify "^4.0.0"
+default-browser-id@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26"
+ integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==
+
default-browser@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
@@ -3100,6 +3142,14 @@ default-browser@^4.0.0:
execa "^7.1.1"
titleize "^3.0.0"
+default-browser@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf"
+ integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==
+ dependencies:
+ bundle-name "^4.1.0"
+ default-browser-id "^5.0.0"
+
default-gateway@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
@@ -3121,11 +3171,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.1:
gopd "^1.0.1"
has-property-descriptors "^1.0.0"
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
define-lazy-prop@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
@@ -3192,14 +3237,14 @@ dir-glob@^3.0.1:
dependencies:
path-type "^4.0.0"
-dmg-builder@24.9.1:
- version "24.9.1"
- resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.9.1.tgz#04bf6c0dcd235f6214511f2358a78ed2b9379421"
- integrity sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==
+dmg-builder@24.13.3:
+ version "24.13.3"
+ resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.13.3.tgz#95d5b99c587c592f90d168a616d7ec55907c7e55"
+ integrity sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==
dependencies:
- app-builder-lib "24.9.1"
- builder-util "24.8.1"
- builder-util-runtime "9.2.3"
+ app-builder-lib "24.13.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
fs-extra "^10.1.0"
iconv-lite "^0.6.2"
js-yaml "^4.1.0"
@@ -3220,11 +3265,6 @@ dmg-license@^1.0.11:
smart-buffer "^4.0.2"
verror "^1.10.0"
-dns-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
- integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-
dns-packet@^5.2.2:
version "5.4.0"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
@@ -3356,16 +3396,16 @@ ejs@^3.1.8:
dependencies:
jake "^10.8.5"
-electron-builder@^24.9.1:
- version "24.9.1"
- resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.9.1.tgz#4aee03947963b829a7f48a850fe02c219311ef63"
- integrity sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==
+electron-builder@^24.13.3:
+ version "24.13.3"
+ resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.13.3.tgz#c506dfebd36d9a50a83ee8aa32d803d83dbe4616"
+ integrity sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==
dependencies:
- app-builder-lib "24.9.1"
- builder-util "24.8.1"
- builder-util-runtime "9.2.3"
+ app-builder-lib "24.13.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
chalk "^4.1.2"
- dmg-builder "24.9.1"
+ dmg-builder "24.13.3"
fs-extra "^10.1.0"
is-ci "^3.0.0"
lazy-val "^1.0.5"
@@ -3396,14 +3436,14 @@ electron-is-dev@^2.0.0:
resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-2.0.0.tgz#833487a069b8dad21425c67a19847d9064ab19bd"
integrity sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==
-electron-publish@24.8.1:
- version "24.8.1"
- resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.8.1.tgz#4216740372bf4297a429543402a1a15ce8c3560b"
- integrity sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==
+electron-publish@24.13.1:
+ version "24.13.1"
+ resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.13.1.tgz#57289b2f7af18737dc2ad134668cdd4a1b574a0c"
+ integrity sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==
dependencies:
"@types/fs-extra" "^9.0.11"
- builder-util "24.8.1"
- builder-util-runtime "9.2.3"
+ builder-util "24.13.1"
+ builder-util-runtime "9.2.4"
chalk "^4.1.2"
fs-extra "^10.1.0"
lazy-val "^1.0.5"
@@ -3414,13 +3454,13 @@ electron-to-chromium@^1.4.648:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4"
integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==
-electron@^28.2.0:
- version "28.2.0"
- resolved "https://registry.yarnpkg.com/electron/-/electron-28.2.0.tgz#ecf7097d4a1e47dd08111c0229a9d03c44f485ad"
- integrity sha512-22SylXQQ9IHtwLw4D+Z4Si7OUpeDtpHfJVTjy3yv53iLg5zJKKPOCWT4ZwgYGHQZ0eldyBrYBHF/P9FPd2CcVQ==
+electron@^29.1.0:
+ version "29.1.0"
+ resolved "https://registry.yarnpkg.com/electron/-/electron-29.1.0.tgz#37f0e4915226db3c87bc54b187795272bf61fc39"
+ integrity sha512-giJVIm0sWVp+8V1GXrKqKTb+h7no0P3ooYqEd34AD9wMJzGnAeL+usj+R0155/0pdvvP1mgydnA7lcaFA2M9lw==
dependencies:
"@electron/get" "^2.0.0"
- "@types/node" "^18.11.18"
+ "@types/node" "^20.9.0"
extract-zip "^2.0.1"
emoji-regex@^10.0.0:
@@ -3772,10 +3812,10 @@ eslint-plugin-promise@^6.1.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816"
integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==
-eslint-plugin-unicorn@^50.0.1:
- version "50.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz#e539cdb02dfd893c603536264c4ed9505b70e3bf"
- integrity sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==
+eslint-plugin-unicorn@^51.0.1:
+ version "51.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-51.0.1.tgz#3641c5e110324c3739d6cb98fc1b99ada39f477b"
+ integrity sha512-MuR/+9VuB0fydoI0nIn2RDA5WISRn4AsJyNSaNKLVwie9/ONvQhxOBbkfSICBPnzKrB77Fh6CZZXjgTt/4Latw==
dependencies:
"@babel/helper-validator-identifier" "^7.22.20"
"@eslint-community/eslint-utils" "^4.4.0"
@@ -3794,17 +3834,17 @@ eslint-plugin-unicorn@^50.0.1:
semver "^7.5.4"
strip-indent "^3.0.0"
-eslint-plugin-vue@^9.20.1:
- version "9.20.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.20.1.tgz#7ed78846898574b2cd26939f28b0b87798a7b528"
- integrity sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==
+eslint-plugin-vue@^9.22.0:
+ version "9.22.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz#e8a625adb0b6ce3b65635dd74fec8345146f8e26"
+ integrity sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
natural-compare "^1.4.0"
nth-check "^2.1.1"
- postcss-selector-parser "^6.0.13"
- semver "^7.5.4"
- vue-eslint-parser "^9.4.0"
+ postcss-selector-parser "^6.0.15"
+ semver "^7.6.0"
+ vue-eslint-parser "^9.4.2"
xml-name-validator "^4.0.0"
eslint-plugin-vuejs-accessibility@^2.2.1:
@@ -3853,16 +3893,16 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
-eslint@^8.56.0:
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
- integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
+eslint@^8.57.0:
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.56.0"
- "@humanwhocodes/config-array" "^0.11.13"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
"@ungap/structured-clone" "^1.2.0"
@@ -4303,11 +4343,6 @@ fs-minipass@^2.0.0:
dependencies:
minipass "^3.0.0"
-fs-monkey@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
- integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
-
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -4698,10 +4733,10 @@ hpack.js@^2.1.6:
readable-stream "^2.0.1"
wbuf "^1.1.0"
-html-entities@^2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
- integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==
+html-entities@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061"
+ integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==
html-minifier-terser@^6.0.2:
version "6.1.0"
@@ -4971,10 +5006,10 @@ ipaddr.js@1.9.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-ipaddr.js@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
- integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+ipaddr.js@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f"
+ integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==
is-arguments@^1.0.4:
version "1.1.1"
@@ -5067,7 +5102,7 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
-is-docker@^2.0.0, is-docker@^2.1.1:
+is-docker@^2.0.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
@@ -5118,6 +5153,11 @@ is-negative-zero@^2.0.2:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+is-network-error@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.0.1.tgz#a68061a20387e9144e145571bea693056a370b92"
+ integrity sha512-OwQXkwBJeESyhFw+OumbJVD58BFBJJI5OM5S1+eyrDKlgDZPX2XNT5gXS56GSD3NPbbwUuMlR1Q71SRp5SobuQ==
+
is-number-object@^1.0.4:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
@@ -5244,6 +5284,13 @@ is-wsl@^2.2.0:
dependencies:
is-docker "^2.0.0"
+is-wsl@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2"
+ integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==
+ dependencies:
+ is-inside-container "^1.0.0"
+
isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
@@ -5492,72 +5539,72 @@ known-css-properties@^0.29.0:
resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f"
integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==
-launch-editor@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7"
- integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==
+launch-editor@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c"
+ integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==
dependencies:
picocolors "^1.0.0"
- shell-quote "^1.7.3"
+ shell-quote "^1.8.1"
lazy-val@^1.0.4, lazy-val@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
-lefthook-darwin-arm64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.1.tgz#387d245d39673ceede01da7de2a0d44d2c368e85"
- integrity sha512-q6+sYr2Dpt6YnBGXRjMFcXZUnVB97nH+s7EP/tX8m9ewvQxLPqIiUPyAumfyJ2Siomkc5WgAinG+kT63VjUN3A==
-
-lefthook-darwin-x64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.1.tgz#a677f7262d29317964c96f13509c06d3bf54e93f"
- integrity sha512-utm7FwtbW8SxGMALIw5/iG4loYS2FI0crDKp/YIamrZgQr6M4pS2C3rxGj5OwiHFIm3arVU+3VZywdvRLJAw0w==
-
-lefthook-freebsd-arm64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.1.tgz#3d527cfa40da0b57b2b81e853f7c11bd13fc618c"
- integrity sha512-F2BoDnGznkJyn6lyhmXpu62yq7SMCeHAl3Bl8c+P6mXfmatjjxEpVmrzRuzKMPd/MRGpy2B/glkuyO4wZZazow==
-
-lefthook-freebsd-x64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.1.tgz#fbc9a5a7c2acaacc5494cf0e21083f21bad8057d"
- integrity sha512-/NBjMUtnwvdc/p821sfPnZCbWZ6FQkAvnvjoaQu6tkajKZbZYSKsl7UtAicO0nT+79BQFt7TbaZjpua2T9tM5w==
-
-lefthook-linux-arm64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.1.tgz#5f50008da8fa164ba9d83542361a0c83429da6ae"
- integrity sha512-ke+2ni/bmxgYJSRsH+uIYYfTLj2It7WP+mcF4rfJHRbzn5yDYIjFgylUMC2CgW5urS4DSbxcRIbAqLY3OXAHnw==
-
-lefthook-linux-x64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.6.1.tgz#a1370cbfc2def92ff7dd1f7dcc71bddca97a8286"
- integrity sha512-/HLkl9jt3XRjT0RPaLpAgUQmvp4zV/KKZ/8x6xslPl89krv3ZkHKKrqeaHdhiengq3hzx3N+KbOfFcxBRzdT6A==
-
-lefthook-windows-arm64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.1.tgz#eaffe44e437182e417006ef7b68f49f219fb7e5e"
- integrity sha512-RyQ8S4/45BpJpRPy7KsOuJeXQ5FOa7MASoPtOYvrXt4A8kayCv1jlGs7MTv3XJbUosCJhfNpw3ReeHVGfw1KIw==
-
-lefthook-windows-x64@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.6.1.tgz#c3da7ec991918543be69fe268e91dc5f77ec7548"
- integrity sha512-poYLk2tfg1Ncr4aZeFuhHjv1qH6f9hX3tV1FOK2MfWkXkRTYPl6MF5h/ONMIv71BsLjGbAA7LNXM5Mj4/B//lQ==
-
-lefthook@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.6.1.tgz#56d35b18ba2231b93d669434c1bd52c4532299e9"
- integrity sha512-1T+tk0V6ubZgiZJGi39QlLMAcgEw+lhoDeSpT3L8Y/f8nUpJW9ntcMOmt+uvMfQ3TVjNcR1r/Lhtm7gTqgdcPg==
+lefthook-darwin-arm64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.4.tgz#3a2bd4ae1d0e44040f16b65ef3339f34cd7afe3d"
+ integrity sha512-dXIQXr02718sqJu8GwIFewEoFqxMReINy2nzVlx9X9pLEKylgIJ15K/hI3gMziZycAGaecQaWVOUh/yEKXM1zQ==
+
+lefthook-darwin-x64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.4.tgz#7b7e5d58c7a6a0ae8b144b8186b6b7d24e55d859"
+ integrity sha512-hPqoOPxpJFEKei7SyCbJUGXcz9u8Ir0GHQYkKKQA/8/dhkMOCQ91YbpeNozMnXcvFYcYaiDr+NB0bOZxn9DzAA==
+
+lefthook-freebsd-arm64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.4.tgz#91653afbc59971faad9da616d9575804157b64b9"
+ integrity sha512-9q/NBdZ41UL86AwGomW4AgIXviZZzZ1x8pWaWqwDeMc+l/JKwqEWPTbb2TVHzlk0rabZ2LEOLhx2RwYQXa9wcA==
+
+lefthook-freebsd-x64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.4.tgz#c625d6911cad392ba448f835d4c9f5957a872774"
+ integrity sha512-I4pJITBFf83lMxVEBgLkT3DF0uq0yo3I8YuB74dYOYzPhnNDr9IOp7CTT7KU7+hlMRRIWSvuup/ODsHP+J5Tfg==
+
+lefthook-linux-arm64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.4.tgz#2fa5bcaa953bd688906731fe2d1d2b1a8d437b06"
+ integrity sha512-Eh1rDmmH7IJbw5Wky+wWd6ZWPkL/mqJqts2BT/3m9/27GADPLaAVV8PMmjPbow8B+4leKdqM9xSr4L9Kte6/mA==
+
+lefthook-linux-x64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.6.4.tgz#5365dabce36906dcdcdfed7254f905cd810486da"
+ integrity sha512-prsTjZ2BwX21+Xk0/KVOi2OcZtFRtPqPbQ/nnrQNpFriDkMqp8s1uIywrAGtyG+LJ7YCPYVhgO5pZOQqp4zkEA==
+
+lefthook-windows-arm64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.4.tgz#a5a91617d74b0b0566029950a55f57954623e787"
+ integrity sha512-bJ+rkMMjJkKhRaCwSLX+5KaJgPoj5jIVBee8jOAXB1nPTlOCj6QJqeGqTLISr098SDhhEsmTbJoa+HyIBbs/ow==
+
+lefthook-windows-x64@1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.6.4.tgz#1847ed07dbb9fc475921a2632c19bc5e22b81b7c"
+ integrity sha512-XMA4mN/l5fK0FsTCKX3KywJv2Zcb9ZZ8hDV4dnjI7X1/DkLkByIOZesZN/8p3Oxbzdc9dOFKozo8RiLUsV19Og==
+
+lefthook@^1.6.4:
+ version "1.6.4"
+ resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.6.4.tgz#e12df47dac2e5e08fa54a34f40138cbed1ce3160"
+ integrity sha512-to9j+24a65g6YR1mmwu+GaCm08oZGalc1rIHp4xJ6kMtYFCQO533UNLQaFcryNkcXeW+ZOc6MNY1eoQtd7/PQQ==
optionalDependencies:
- lefthook-darwin-arm64 "1.6.1"
- lefthook-darwin-x64 "1.6.1"
- lefthook-freebsd-arm64 "1.6.1"
- lefthook-freebsd-x64 "1.6.1"
- lefthook-linux-arm64 "1.6.1"
- lefthook-linux-x64 "1.6.1"
- lefthook-windows-arm64 "1.6.1"
- lefthook-windows-x64 "1.6.1"
+ lefthook-darwin-arm64 "1.6.4"
+ lefthook-darwin-x64 "1.6.4"
+ lefthook-freebsd-arm64 "1.6.4"
+ lefthook-freebsd-x64 "1.6.4"
+ lefthook-linux-arm64 "1.6.4"
+ lefthook-linux-x64 "1.6.4"
+ lefthook-windows-arm64 "1.6.4"
+ lefthook-windows-x64 "1.6.4"
levn@^0.4.1:
version "0.4.1"
@@ -5714,10 +5761,10 @@ m3u8-parser@4.8.0:
"@videojs/vhs-utils" "^3.0.5"
global "^4.4.0"
-marked@^11.2.0:
- version "11.2.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-11.2.0.tgz#fc908aeca962b721b0392ee4205e6f90ebffb074"
- integrity sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==
+marked@^12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.0.tgz#051ea8c8c7f65148a63003df1499515a2c6de716"
+ integrity sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==
matcher@^3.0.0:
version "3.0.0"
@@ -5746,12 +5793,12 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
-memfs@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305"
- integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==
+memfs@^4.6.0:
+ version "4.7.6"
+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.7.6.tgz#ebb7c1c30e9ba4779ef452accdf8cec3f8ec04cf"
+ integrity sha512-PMxcVnZYdSFYZIzsbhd8XLvxrHaIarhyyfDQHThUwhAYAPDfDTvKhEjWbzPyGFr9CPvJJl+VUetfcnVVF9Wckg==
dependencies:
- fs-monkey "1.0.3"
+ tslib "^2.0.0"
memorystream@^0.3.1:
version "0.3.1"
@@ -5852,12 +5899,13 @@ min-indent@^1.0.0:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
-mini-css-extract-plugin@^2.7.7:
- version "2.7.7"
- resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.7.tgz#4acf02f362c641c38fb913bfcb7ca2fc4a7cf339"
- integrity sha512-+0n11YGyRavUR3IlaOzJ0/4Il1avMvJ1VJfhWfCn24ITQXhRr1gghbhhrda6tgtNcpZaWKdSuwKq20Jb7fnlyw==
+mini-css-extract-plugin@^2.8.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz#75245f3f30ce3a56dbdd478084df6fe475f02dc7"
+ integrity sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==
dependencies:
schema-utils "^4.0.0"
+ tapable "^2.2.1"
minimalistic-assert@^1.0.0:
version "1.0.1"
@@ -5950,10 +5998,10 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-multicast-dns@^7.2.4:
- version "7.2.4"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19"
- integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==
+multicast-dns@^7.2.5:
+ version "7.2.5"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
+ integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==
dependencies:
dns-packet "^5.2.2"
thunky "^1.0.2"
@@ -6181,14 +6229,15 @@ onetime@^6.0.0:
dependencies:
mimic-fn "^4.0.0"
-open@^8.0.9:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
- integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
+open@^10.0.3:
+ version "10.0.3"
+ resolved "https://registry.yarnpkg.com/open/-/open-10.0.3.tgz#f60d8db49fa126c50aec751957fb5d7de3308d4f"
+ integrity sha512-dtbI5oW7987hwC9qjJTyABldTaa19SuyJse1QboWv3b0qCcrrLNVDqBx1XgELAjh9QTVQaP/C5b1nhQebd1H2A==
dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
+ default-browser "^5.2.1"
+ define-lazy-prop "^3.0.0"
+ is-inside-container "^1.0.0"
+ is-wsl "^3.1.0"
open@^9.1.0:
version "9.1.0"
@@ -6259,12 +6308,13 @@ p-locate@^6.0.0:
dependencies:
p-limit "^4.0.0"
-p-retry@^4.5.0:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
- integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+p-retry@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd"
+ integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==
dependencies:
- "@types/retry" "0.12.0"
+ "@types/retry" "0.12.2"
+ is-network-error "^1.0.0"
retry "^0.13.1"
p-try@^2.0.0:
@@ -6739,10 +6789,10 @@ postcss@^7.0.36:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.4.14, postcss@^8.4.32, postcss@^8.4.33:
- version "8.4.33"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742"
- integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==
+postcss@^8.4.14, postcss@^8.4.33, postcss@^8.4.35:
+ version "8.4.35"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+ integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
dependencies:
nanoid "^3.3.7"
picocolors "^1.0.0"
@@ -7206,6 +7256,11 @@ run-applescript@^5.0.0:
dependencies:
execa "^5.0.0"
+run-applescript@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb"
+ integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
+
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -7268,17 +7323,17 @@ sanitize-filename@^1.6.3:
dependencies:
truncate-utf8-bytes "^1.0.0"
-sass-loader@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.0.0.tgz#fc8390f7cc16863622cd16f3ea07b36ba6ea8f91"
- integrity sha512-oceP9wWbep/yRJ2+sMbCzk0UsXsDzdNis+N8nu9i5GwPXjy6v3DNB6TqfJLSpPO9k4+B8x8p/CEgjA9ZLkoLug==
+sass-loader@^14.1.1:
+ version "14.1.1"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-14.1.1.tgz#2c9d2277c5b1c5fe789cd0570c046d8ad23cb7ca"
+ integrity sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==
dependencies:
neo-async "^2.6.2"
-sass@^1.70.0:
- version "1.70.0"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.70.0.tgz#761197419d97b5358cb25f9dd38c176a8a270a75"
- integrity sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==
+sass@^1.71.1:
+ version "1.71.1"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.71.1.tgz#dfb09c63ce63f89353777bbd4a88c0a38386ee54"
+ integrity sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==
dependencies:
chokidar ">=3.0.0 <4.0.0"
immutable "^4.0.0"
@@ -7313,11 +7368,12 @@ select-hose@^2.0.0:
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
-selfsigned@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61"
- integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==
+selfsigned@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0"
+ integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==
dependencies:
+ "@types/node-forge" "^1.3.0"
node-forge "^1"
semver-compare@^1.0.0:
@@ -7335,10 +7391,10 @@ semver@^6.2.0, semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4:
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
- integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.6, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
dependencies:
lru-cache "^6.0.0"
@@ -7463,10 +7519,10 @@ shell-quote@^1.6.1:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
-shell-quote@^1.7.3:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba"
- integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==
+shell-quote@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
+ integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
side-channel@^1.0.4:
version "1.0.4"
@@ -7830,10 +7886,10 @@ stylelint-use-logical-spec@^5.0.1:
resolved "https://registry.yarnpkg.com/stylelint-use-logical-spec/-/stylelint-use-logical-spec-5.0.1.tgz#d5aa254d615d373f18214297c0b49a03a6ca5980"
integrity sha512-UfLB4LW6iG4r3cXxjxkiHQrFyhWFqt8FpNNngD+TyvgMWSokk5TYwTvBHS3atUvZhOogllTOe/PUrGE+4z84AA==
-stylelint@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.2.0.tgz#60678f64d7660350fdd06415fd449f332b4fcbf6"
- integrity sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==
+stylelint@^16.2.1:
+ version "16.2.1"
+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-16.2.1.tgz#895d6d42523c5126ec0895f0ca2a58febeb77e89"
+ integrity sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==
dependencies:
"@csstools/css-parser-algorithms" "^2.5.0"
"@csstools/css-tokenizer" "^2.2.3"
@@ -7933,10 +7989,10 @@ svgo@^3.2.0:
csso "^5.0.5"
picocolors "^1.0.0"
-swiper@^11.0.5:
- version "11.0.5"
- resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.0.5.tgz#6ed1ad06e6906ba42fd4b93d4988f0626a49046e"
- integrity sha512-rhCwupqSyRnWrtNzWzemnBLMoyYuoDgGgspAm/8iBD3jCvAWycPLH4Z3TB0O5520DHLzMx94yUMH/B9Efpa48w==
+swiper@^11.0.7:
+ version "11.0.7"
+ resolved "https://registry.yarnpkg.com/swiper/-/swiper-11.0.7.tgz#fe51bb64546c2c21a1ec6914e7764af953443ded"
+ integrity sha512-cDfglW1B6uSmB6eB6pNmzDTNLmZtu5bWWa1vak0RU7fOI9qHjMzl7gVBvYSl34b0RU2N11HxxETJqQ5LeqI1cA==
synckit@^0.6.0:
version "0.6.2"
@@ -7964,7 +8020,7 @@ table@^6.8.1:
string-width "^4.2.3"
strip-ansi "^6.0.1"
-tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
+tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
@@ -8096,7 +8152,7 @@ tsconfig-paths@^3.15.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2:
+tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -8207,10 +8263,15 @@ underscore@1.13.1:
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1"
integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
undici@^5.19.1:
- version "5.26.3"
- resolved "https://registry.yarnpkg.com/undici/-/undici-5.26.3.tgz#ab3527b3d5bb25b12f898dfd22165d472dd71b79"
- integrity sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==
+ version "5.28.3"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b"
+ integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==
dependencies:
"@fastify/busboy" "^2.0.0"
@@ -8459,7 +8520,7 @@ vue-devtools@^5.1.4:
resolved "https://registry.yarnpkg.com/vue-devtools/-/vue-devtools-5.1.4.tgz#265a7458ade2affb291739176964256b597fa302"
integrity sha512-EBAEXvAHUinsPzoSiElps0JgtLXUnJXKIJbP6nfdz/R63VdKBMfJ34/rFip+4iT7iMbVS5lA4W6N1jq4Hj4LCg==
-vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.4.0, vue-eslint-parser@^9.4.2:
+vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.4.2:
version "9.4.2"
resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d"
integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==
@@ -8563,52 +8624,52 @@ webpack-cli@^5.1.4:
rechoir "^0.8.0"
webpack-merge "^5.7.3"
-webpack-dev-middleware@^5.3.1:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f"
- integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==
+webpack-dev-middleware@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.0.0.tgz#13595dc038a400e3ac9c76f0c9a8c75a59a7d4da"
+ integrity sha512-tZ5hqsWwww/8DislmrzXE3x+4f+v10H1z57mA2dWFrILb4i3xX+dPhTkcdR0DLyQztrhF2AUmO5nN085UYjd/Q==
dependencies:
colorette "^2.0.10"
- memfs "^3.4.1"
+ memfs "^4.6.0"
mime-types "^2.1.31"
range-parser "^1.2.1"
schema-utils "^4.0.0"
-webpack-dev-server@^4.15.1:
- version "4.15.1"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7"
- integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==
- dependencies:
- "@types/bonjour" "^3.5.9"
- "@types/connect-history-api-fallback" "^1.3.5"
- "@types/express" "^4.17.13"
- "@types/serve-index" "^1.9.1"
- "@types/serve-static" "^1.13.10"
- "@types/sockjs" "^0.3.33"
- "@types/ws" "^8.5.5"
+webpack-dev-server@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.2.tgz#3035972dae4b768de020f91418de471e4ef12b6c"
+ integrity sha512-IVj3qsQhiLJR82zVg3QdPtngMD05CYP/Am+9NG5QSl+XwUR/UPtFwllRBKrMwM9ttzFsC6Zj3DMgniPyn/Z0hQ==
+ dependencies:
+ "@types/bonjour" "^3.5.13"
+ "@types/connect-history-api-fallback" "^1.5.4"
+ "@types/express" "^4.17.21"
+ "@types/serve-index" "^1.9.4"
+ "@types/serve-static" "^1.15.5"
+ "@types/sockjs" "^0.3.36"
+ "@types/ws" "^8.5.10"
ansi-html-community "^0.0.8"
- bonjour-service "^1.0.11"
- chokidar "^3.5.3"
+ bonjour-service "^1.2.1"
+ chokidar "^3.6.0"
colorette "^2.0.10"
compression "^1.7.4"
connect-history-api-fallback "^2.0.0"
default-gateway "^6.0.3"
express "^4.17.3"
graceful-fs "^4.2.6"
- html-entities "^2.3.2"
+ html-entities "^2.4.0"
http-proxy-middleware "^2.0.3"
- ipaddr.js "^2.0.1"
- launch-editor "^2.6.0"
- open "^8.0.9"
- p-retry "^4.5.0"
- rimraf "^3.0.2"
- schema-utils "^4.0.0"
- selfsigned "^2.1.1"
+ ipaddr.js "^2.1.0"
+ launch-editor "^2.6.1"
+ open "^10.0.3"
+ p-retry "^6.2.0"
+ rimraf "^5.0.5"
+ schema-utils "^4.2.0"
+ selfsigned "^2.4.1"
serve-index "^1.9.1"
sockjs "^0.3.24"
spdy "^4.0.2"
- webpack-dev-middleware "^5.3.1"
- ws "^8.13.0"
+ webpack-dev-middleware "^7.0.0"
+ ws "^8.16.0"
webpack-merge@^5.7.3:
version "5.8.0"
@@ -8631,10 +8692,10 @@ webpack-watch-external-files-plugin@^3.0.0:
glob "10.3.10"
path "0.12.7"
-webpack@^5.90.0:
- version "5.90.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.0.tgz#313bfe16080d8b2fee6e29b6c986c0714ad4290e"
- integrity sha512-bdmyXRCXeeNIePv6R6tGPyy20aUobw4Zy8r0LUS2EWO+U+Ke/gYDgsCh7bl5rB6jPpr4r0SZa6dPxBxLooDT3w==
+webpack@^5.90.3:
+ version "5.90.3"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.3.tgz#37b8f74d3ded061ba789bb22b31e82eed75bd9ac"
+ integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^1.0.5"
@@ -8759,10 +8820,10 @@ write-file-atomic@^5.0.1:
imurmurhash "^0.1.4"
signal-exit "^4.0.1"
-ws@^8.13.0:
- version "8.13.0"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
- integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+ws@^8.16.0:
+ version "8.16.0"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4"
+ integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==
xml-name-validator@^4.0.0:
version "4.0.0"
@@ -8849,10 +8910,10 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
-youtubei.js@^8.2.0:
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/youtubei.js/-/youtubei.js-8.2.0.tgz#5b173f41fbe6240bb44cb733ce2c1f24e0b072ca"
- integrity sha512-i/F4PEURSQmSYCQCo4dWKxOCZXhqkgAuGzNG2RUCtGSmlMX8TvwNewVD/JBjH/czdNmh9SJ00onNZMMxHbt+YA==
+youtubei.js@^9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/youtubei.js/-/youtubei.js-9.1.0.tgz#bcf154c9fa21d3c8c1d00a5e10360d0a065c660e"
+ integrity sha512-C5GBJ4LgnS6vGAUkdIdQNOFFb5EZ1p3xBvUELNXmIG3Idr6vxWrKNBNy8ClZT3SuDVXaAJqDgF9b5jvY8lNKcg==
dependencies:
jintr "^1.1.0"
tslib "^2.5.0"