Compare commits

..

1 Commits

Author SHA1 Message Date
Émilien Devos 72f03cd9de add ability to disable notifications 3 years ago

@ -77,6 +77,10 @@ Metrics/CyclomaticComplexity:
# process_video_params(query, preferences) => [20/10] # process_video_params(query, preferences) => [20/10]
- src/invidious/videos.cr - src/invidious/videos.cr
# produce_search_params(page, sort, ...) => [29/10]
# process_search_query(query, page, ...) => [14/10]
- src/invidious/search.cr
#src/invidious/playlists.cr:327:5 #src/invidious/playlists.cr:327:5

@ -1,37 +0,0 @@
name: Close duplicates
on:
issues:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
permissions: write-all
steps:
- uses: iv-org/close-potential-duplicates@v1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Issue title filter work with anymatch https://www.npmjs.com/package/anymatch.
# Any matched issue will stop detection immediately.
# You can specify multi filters in each line.
filter: ''
# Exclude keywords in title before detecting.
exclude: ''
# Label to set, when potential duplicates are detected.
label: duplicate
# Get issues with state to compare. Supported state: 'all', 'closed', 'open'.
state: open
# If similarity is higher than this threshold([0,1]), issue will be marked as duplicate.
threshold: 0.9
# Reactions to be add to comment when potential duplicates are detected.
# Available reactions: "-1", "+1", "confused", "laugh", "heart", "hooray", "rocket", "eyes"
reactions: ''
close: true
# Comment to post when potential duplicates are detected.
comment: |
Hello, your issue is a duplicate of this/these issue(s): {{#issues}}
- #{{ number }} [accuracy: {{ accuracy }}%]
{{/issues}}
If this is a mistake please explain why and ping @\unixfox, @\SamantazFox and @\TheFrenchGhosty.
Please refrain from opening new issues, it won't help in solving your problem.

@ -38,27 +38,23 @@ jobs:
matrix: matrix:
stable: [true] stable: [true]
crystal: crystal:
- 1.4.1 - 1.0.0
- 1.5.1 - 1.1.1
- 1.6.2 - 1.2.2
- 1.7.3
- 1.8.1
include: include:
- crystal: nightly - crystal: nightly
stable: false stable: false
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
with:
submodules: true
- name: Install Crystal - name: Install Crystal
uses: crystal-lang/install-crystal@v1.7.0 uses: crystal-lang/install-crystal@v1.5.3
with: with:
crystal: ${{ matrix.crystal }} crystal: ${{ matrix.crystal }}
- name: Cache Shards - name: Cache Shards
uses: actions/cache@v3 uses: actions/cache@v2
with: with:
path: ./lib path: ./lib
key: shards-${{ hashFiles('shard.lock') }} key: shards-${{ hashFiles('shard.lock') }}
@ -88,7 +84,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
- name: Build Docker - name: Build Docker
run: docker-compose build --build-arg release=0 run: docker-compose build --build-arg release=0
@ -104,18 +100,18 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v2
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v1
with: with:
platforms: arm64 platforms: arm64
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v1
- name: Build Docker ARM64 image - name: Build Docker ARM64 image
uses: docker/build-push-action@v3 uses: docker/build-push-action@v2
with: with:
context: . context: .
file: docker/Dockerfile.arm64 file: docker/Dockerfile.arm64

@ -22,12 +22,12 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v2
- name: Install Crystal - name: Install Crystal
uses: crystal-lang/install-crystal@v1.6.0 uses: oprypin/install-crystal@v1.2.4
with: with:
crystal: 1.5.0 crystal: 1.2.2
- name: Run lint - name: Run lint
run: | run: |
@ -38,23 +38,23 @@ jobs:
fi fi
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v1
with: with:
platforms: arm64 platforms: arm64
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v1
- name: Login to registry - name: Login to registry
uses: docker/login-action@v2 uses: docker/login-action@v1
with: with:
registry: quay.io registry: quay.io
username: ${{ secrets.QUAY_USERNAME }} username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_PASSWORD }} password: ${{ secrets.QUAY_PASSWORD }}
- name: Build and push Docker AMD64 image without QUIC for Push Event - name: Build and push Docker AMD64 image for Push Event
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
uses: docker/build-push-action@v3 uses: docker/build-push-action@v2
with: with:
context: . context: .
file: docker/Dockerfile file: docker/Dockerfile
@ -62,44 +62,16 @@ jobs:
labels: quay.expires-after=12w labels: quay.expires-after=12w
push: true push: true
tags: quay.io/invidious/invidious:${{ github.sha }},quay.io/invidious/invidious:latest tags: quay.io/invidious/invidious:${{ github.sha }},quay.io/invidious/invidious:latest
build-args: |
"release=1"
"disable_quic=1"
- name: Build and push Docker ARM64 image without QUIC for Push Event
if: github.ref == 'refs/heads/master'
uses: docker/build-push-action@v3
with:
context: .
file: docker/Dockerfile.arm64
platforms: linux/arm64/v8
labels: quay.expires-after=12w
push: true
tags: quay.io/invidious/invidious:${{ github.sha }}-arm64,quay.io/invidious/invidious:latest-arm64
build-args: |
"release=1"
"disable_quic=1"
- name: Build and push Docker AMD64 image with QUIC for Push Event
if: github.ref == 'refs/heads/master'
uses: docker/build-push-action@v3
with:
context: .
file: docker/Dockerfile
platforms: linux/amd64
labels: quay.expires-after=12w
push: true
tags: quay.io/invidious/invidious:${{ github.sha }}-quic,quay.io/invidious/invidious:latest-quic
build-args: release=1 build-args: release=1
- name: Build and push Docker ARM64 image with QUIC for Push Event - name: Build and push Docker ARM64 image for Push Event
if: github.ref == 'refs/heads/master' if: github.ref == 'refs/heads/master'
uses: docker/build-push-action@v3 uses: docker/build-push-action@v2
with: with:
context: . context: .
file: docker/Dockerfile.arm64 file: docker/Dockerfile.arm64
platforms: linux/arm64/v8 platforms: linux/arm64/v8
labels: quay.expires-after=12w labels: quay.expires-after=12w
push: true push: true
tags: quay.io/invidious/invidious:${{ github.sha }}-arm64-quic,quay.io/invidious/invidious:latest-arm64-quic tags: quay.io/invidious/invidious:${{ github.sha }}-arm64,quay.io/invidious/invidious:latest-arm64
build-args: release=1 build-args: release=1

@ -10,7 +10,7 @@ jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v5 - uses: actions/stale@v3
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-stale: 365 days-before-stale: 365
@ -22,5 +22,3 @@ jobs:
stale-issue-label: "stale" stale-issue-label: "stale"
stale-pr-label: "stale" stale-pr-label: "stale"
ascending: true ascending: true
# Never mark feature requests/enhancements as stale
exempt-issue-labels: "feature-request,enhancement,exempt-stale"

2
.gitignore vendored

@ -1,4 +1,4 @@
/docs/ /doc/
/dev/ /dev/
/lib/ /lib/
/bin/ /bin/

3
.gitmodules vendored

@ -1,3 +0,0 @@
[submodule "mocks"]
path = mocks
url = ../mocks

@ -5,7 +5,7 @@
RELEASE := 1 RELEASE := 1
STATIC := 0 STATIC := 0
DISABLE_QUIC := 1 DISABLE_QUIC := 0
NO_DBG_SYMBOLS := 0 NO_DBG_SYMBOLS := 0
@ -31,10 +31,6 @@ ifeq ($(DISABLE_QUIC), 1)
FLAGS += -Ddisable_quic FLAGS += -Ddisable_quic
endif endif
ifeq ($(API_ONLY), 1)
FLAGS += -Dapi_only
endif
# ----------------------- # -----------------------
# Main # Main
@ -113,7 +109,6 @@ help:
@echo " RELEASE Make a release build (Default: 1)" @echo " RELEASE Make a release build (Default: 1)"
@echo " STATIC Link libraries statically (Default: 0)" @echo " STATIC Link libraries statically (Default: 0)"
@echo "" @echo ""
@echo " API_ONLY Build invidious without a GUI (Default: 0)"
@echo " DISABLE_QUIC Disable support for QUIC (Default: 0)" @echo " DISABLE_QUIC Disable support for QUIC (Default: 0)"
@echo " NO_DBG_SYMBOLS Strip debug symbols (Default: 0)" @echo " NO_DBG_SYMBOLS Strip debug symbols (Default: 0)"

@ -31,7 +31,7 @@
     
<a href="https://instances.invidious.io/">Instances list</a> <a href="https://instances.invidious.io/">Instances list</a>
&nbsp;&nbsp; &nbsp;&nbsp;
<a href="https://docs.invidious.io/faq/">FAQ</a> <a href="https://docs.invidious.io/FAQ.md">FAQ</a>
&nbsp;&nbsp; &nbsp;&nbsp;
<a href="https://docs.invidious.io/">Documentation</a> <a href="https://docs.invidious.io/">Documentation</a>
&nbsp;&nbsp; &nbsp;&nbsp;
@ -48,7 +48,7 @@
</a> </a>
<br> <br>
<a rel="me" href="https://social.tchncs.de/@invidious"> <a rel="me" href="https://social.tchncs.de/@invidious">
<img alt="Fediverse: @invidious@social.tchncs.de" src="https://img.shields.io/badge/Fediverse-%40invidious%40social.tchncs.de-darkgreen"> <img alt="Mastodon: @invidious@social.tchncs.de" src="https://img.shields.io/badge/Mastodon-%40invidious%40social.tchncs.de-darkgreen">
</a> </a>
<br> <br>
<a href="https://invidious.io/contact/"> <a href="https://invidious.io/contact/">
@ -88,7 +88,7 @@
**Technical features** **Technical features**
- Embedded video support - Embedded video support
- [Developer API](https://docs.invidious.io/api/) - [Developer API](https://docs.invidious.io/API.md)
- Does not use official YouTube APIs - Does not use official YouTube APIs
- No Contributor License Agreement (CLA) - No Contributor License Agreement (CLA)
@ -101,7 +101,7 @@
**Hosting invidious:** **Hosting invidious:**
- [Follow the installation instructions](https://docs.invidious.io/installation/) - [Follow the installation instructions](https://docs.invidious.io/Installation.md)
## Documentation ## Documentation
@ -119,7 +119,7 @@ embedded youtube videos on other websites with invidious.
The documentation contains a list of browser extensions that we recommended to use along with Invidious. The documentation contains a list of browser extensions that we recommended to use along with Invidious.
You can read more here: https://docs.invidious.io/applications/ You can read more here: https://docs.invidious.io/Extensions.md
## Contribute ## Contribute
@ -147,15 +147,9 @@ Weblate also allows you to log-in with major SSO providers like Github, Gitlab,
- [FreeTube](https://github.com/FreeTubeApp/FreeTube): A libre software YouTube app for privacy. - [FreeTube](https://github.com/FreeTubeApp/FreeTube): A libre software YouTube app for privacy.
- [CloudTube](https://sr.ht/~cadence/tube/): A JavaScript-rich alternate YouTube player. - [CloudTube](https://sr.ht/~cadence/tube/): A JavaScript-rich alternate YouTube player.
- [PeerTubeify](https://gitlab.com/Cha_de_L/peertubeify): On YouTube, displays a link to the same video on PeerTube, if it exists. - [PeerTubeify](https://gitlab.com/Cha_deL/peertubeify): On YouTube, displays a link to the same video on PeerTube, if it exists.
- [MusicPiped](https://github.com/deep-gaurav/MusicPiped): A material design music player that streams music from YouTube. - [MusicPiped](https://github.com/deep-gaurav/MusicPiped): A material design music player that streams music from YouTube.
- [HoloPlay](https://github.com/stephane-r/holoplay-wa): Progressive Web App connecting on Invidious API's with search, playlists and favorites. - [HoloPlay](https://github.com/stephane-r/HoloPlay): Funny Android application connecting on Invidious API's with search, playlists and favorites.
- [WatchTube](https://github.com/WatchTubeTeam/WatchTube): Powerful YouTube client for Apple Watch.
- [Yattee](https://github.com/yattee/yattee): Alternative YouTube frontend for iPhone, iPad, Mac and Apple TV.
- [TubiTui](https://codeberg.org/777/TubiTui): A lightweight, libre, TUI-based YouTube client.
- [Ytfzf](https://github.com/pystardust/ytfzf): A posix script to find and watch youtube videos from the terminal. (Without API).
- [Playlet](https://github.com/iBicha/playlet): Unofficial Youtube client for Roku TV.
- [Clipious](https://github.com/lamarios/clipious): Unofficial Invidious client for Android.
## Liability ## Liability

@ -15,11 +15,6 @@ body {
background-color: rgb(255, 0, 0, 0.5); background-color: rgb(255, 0, 0, 0.5);
} }
.underlined {
border-bottom: 1px solid;
margin-bottom: 20px;
}
.channel-profile > * { .channel-profile > * {
font-size: 1.17em; font-size: 1.17em;
font-weight: bold; font-weight: bold;
@ -46,7 +41,6 @@ body a.channel-owner {
} }
.creator-heart { .creator-heart {
display: inline-block;
position: relative; position: relative;
width: 16px; width: 16px;
height: 16px; height: 16px;
@ -67,7 +61,6 @@ body a.channel-owner {
} }
.creator-heart-small-container { .creator-heart-small-container {
display: block;
position: relative; position: relative;
width: 13px; width: 13px;
height: 13px; height: 13px;
@ -121,16 +114,13 @@ body a.pure-button {
button.pure-button-primary, button.pure-button-primary,
body a.pure-button-primary, body a.pure-button-primary,
.channel-owner:hover, .channel-owner:hover {
.channel-owner:focus {
background-color: #a0a0a0; background-color: #a0a0a0;
color: rgba(35, 35, 35, 1); color: rgba(35, 35, 35, 1);
} }
button.pure-button-primary:hover, button.pure-button-primary:hover,
body a.pure-button-primary:hover, body a.pure-button-primary:hover {
button.pure-button-primary:focus,
body a.pure-button-primary:focus {
background-color: rgba(0, 182, 240, 1); background-color: rgba(0, 182, 240, 1);
color: #fff; color: #fff;
} }
@ -150,24 +140,6 @@ img.thumbnail {
object-fit: cover; object-fit: cover;
} }
div.watched-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(255,255,255,.4);
}
div.watched-indicator {
position: absolute;
left: 0;
bottom: 0;
height: 4px;
width: 100%;
background-color: red;
}
.length { .length {
z-index: 100; z-index: 100;
position: absolute; position: absolute;
@ -227,20 +199,17 @@ div.watched-indicator {
margin: 1px; margin: 1px;
border: 1px solid; border: 1px solid;
border-color: rgba(0,0,0,0); border-color: #0000 #0000 #CCC #0000;
border-bottom-color: #CCC;
border-radius: 0; border-radius: 0;
box-shadow: none; box-shadow: none;
appearance: none;
-webkit-appearance: none; -webkit-appearance: none;
} }
.searchbar input[type="search"]:focus { .searchbar input[type="search"]:focus {
margin: 0; margin: 0 0 0.5px 0;
border: 2px solid; border: 2px solid;
border-color: rgba(0,0,0,0); border-color: #0000 #0000 #FED #0000;
border-bottom-color: #FED;
} }
/* https://stackoverflow.com/a/55170420 */ /* https://stackoverflow.com/a/55170420 */
@ -260,7 +229,7 @@ input[type="search"]::-webkit-search-cancel-button {
} }
.user-field div { .user-field div {
width: auto; width: initial;
} }
.user-field div:not(:last-child) { .user-field div:not(:last-child) {
@ -317,36 +286,12 @@ input[type="search"]::-webkit-search-cancel-button {
.flexible { display: flex; } .flexible { display: flex; }
.flex-left { flex: 1 1 100%; flex-wrap: wrap; } .flex-left { flex: 1 1 100%; flex-wrap: wrap; }
.flex-right { flex: 1 0 auto; flex-wrap: nowrap; } .flex-right { flex: 1 0 max-content; flex-wrap: nowrap; }
p.channel-name { margin: 0; } p.channel-name { margin: 0; }
p.video-data { margin: 0; font-weight: bold; font-size: 80%; } p.video-data { margin: 0; font-weight: bold; font-size: 80%; }
/*
* Comments & community posts
*/
#comments {
max-width: 800px;
margin: auto;
}
.video-iframe-wrapper {
position: relative;
height: 0;
padding-bottom: 56.25%;
}
.video-iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: none;
}
/* /*
* Footer * Footer
*/ */
@ -395,14 +340,11 @@ span > select {
.light-theme a:hover, .light-theme a:hover,
.light-theme a:active, .light-theme a:active,
.light-theme summary:hover, .light-theme summary:hover {
.light-theme a:focus,
.light-theme summary:focus {
color: #075A9E !important; color: #075A9E !important;
} }
.light-theme a.pure-button-primary:hover, .light-theme a.pure-button-primary:hover {
.light-theme a.pure-button-primary:focus {
color: #fff !important; color: #fff !important;
} }
@ -425,14 +367,11 @@ span > select {
@media (prefers-color-scheme: light) { @media (prefers-color-scheme: light) {
.no-theme a:hover, .no-theme a:hover,
.no-theme a:active, .no-theme a:active,
.no-theme summary:hover, .no-theme summary:hover {
.no-theme a:focus,
.no-theme summary:focus {
color: #075A9E !important; color: #075A9E !important;
} }
.no-theme a.pure-button-primary:hover, .no-theme a.pure-button-primary:hover {
.no-theme a.pure-button-primary:focus {
color: #fff !important; color: #fff !important;
} }
@ -459,9 +398,7 @@ span > select {
.dark-theme a:hover, .dark-theme a:hover,
.dark-theme a:active, .dark-theme a:active,
.dark-theme summary:hover, .dark-theme summary:hover {
.dark-theme a:focus,
.dark-theme summary:focus {
color: rgb(0, 182, 240); color: rgb(0, 182, 240);
} }
@ -500,8 +437,7 @@ body.dark-theme {
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
.no-theme a:hover, .no-theme a:hover,
.no-theme a:active, .no-theme a:active {
.no-theme a:focus {
color: rgb(0, 182, 240); color: rgb(0, 182, 240);
} }
@ -539,6 +475,30 @@ body.dark-theme {
} }
} }
#filters {
display: inline;
margin-top: 15px;
}
#filters > div {
display: inline-block;
}
#filters > summary {
display: block;
margin-bottom: 15px;
}
#filters > summary::before {
content: "[ + ]";
font-size: 1.5em;
}
#filters[open] > summary::before {
content: "[ - ]";
font-size: 1.5em;
}
/*With commit d9528f5 all contents of the page is now within a flexbox. However, /*With commit d9528f5 all contents of the page is now within a flexbox. However,
the hr element is rendered improperly within one. the hr element is rendered improperly within one.
See https://stackoverflow.com/a/34372979 for more info */ See https://stackoverflow.com/a/34372979 for more info */
@ -547,17 +507,13 @@ hr {
} }
/* Description Expansion Styling*/ /* Description Expansion Styling*/
#descexpansionbutton, #descexpansionbutton {
#music-desc-expansion { display: none
display: none;
} }
#descexpansionbutton ~ div { #descexpansionbutton ~ div {
overflow: hidden; overflow: hidden;
} height: 8.3em;
#descexpansionbutton:not(:checked) ~ div {
max-height: 8.3em;
} }
#descexpansionbutton:checked ~ div { #descexpansionbutton:checked ~ div {
@ -570,11 +526,6 @@ hr {
margin-top: 20px; margin-top: 20px;
} }
label[for="descexpansionbutton"]:hover,
label[for="music-desc-expansion"]:hover {
cursor: pointer;
}
/* Bidi (bidirectional text) support */ /* Bidi (bidirectional text) support */
h1, h1,
h2, h2,
@ -583,8 +534,7 @@ h4,
h5, h5,
p, p,
#descriptionWrapper, #descriptionWrapper,
#description-box, #description-box {
#music-description-box {
unicode-bidi: plaintext; unicode-bidi: plaintext;
text-align: start; text-align: start;
} }
@ -594,38 +544,5 @@ p,
white-space: pre-wrap; white-space: pre-wrap;
} }
#music-description-box {
display: none;
}
#music-desc-expansion:checked ~ #music-description-box {
display: block;
}
#music-desc-expansion ~ label > h3 > .ion-ios-arrow-up,
#music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-down {
display: none;
}
#music-desc-expansion:checked ~ label > h3 > .ion-ios-arrow-up,
#music-desc-expansion ~ label > h3 > .ion-ios-arrow-down {
display: inline;
}
/* Select all the music items except the first one */
.music-item + .music-item {
border-top: 1px solid #ffffff;
}
/* Center the "invidious" logo on the search page */ /* Center the "invidious" logo on the search page */
#logo > h1 { text-align: center; } #logo > h1 { text-align: center; }
/* IE11 fixes */
:-ms-input-placeholder { color: #888; }
/* Wider settings name to less word wrap */
.pure-form-aligned .pure-control-group label { width: 19em; }
.channel-emoji {
margin: 0 2px;
}

@ -21,7 +21,6 @@
color: white; color: white;
} }
.watch-on-invidious > a:hover, .watch-on-invidious > a:hover {
.watch-on-invidious > a:focus {
color: rgba(0, 182, 240, 1);; color: rgba(0, 182, 240, 1);;
} }

@ -70,9 +70,6 @@
margin-bottom: 2em; margin-bottom: 2em;
} }
.video-js.player-style-youtube .vjs-progress-control .vjs-progress-holder, .video-js.player-style-youtube .vjs-progress-control {height: 5px;
margin-bottom: 10px;}
ul.vjs-menu-content::-webkit-scrollbar { ul.vjs-menu-content::-webkit-scrollbar {
display: none; display: none;
} }
@ -101,25 +98,21 @@ ul.vjs-menu-content::-webkit-scrollbar {
order: 2; order: 2;
} }
.vjs-audio-button {
order: 3;
}
.vjs-quality-selector, .vjs-quality-selector,
.video-js .vjs-http-source-selector { .video-js .vjs-http-source-selector {
order: 4; order: 3;
} }
.vjs-playback-rate { .vjs-playback-rate {
order: 5; order: 4;
} }
.vjs-share-control { .vjs-share-control {
order: 6; order: 5;
} }
.vjs-fullscreen-control { .vjs-fullscreen-control {
order: 7; order: 6;
} }
.vjs-playback-rate > .vjs-menu { .vjs-playback-rate > .vjs-menu {
@ -175,14 +168,11 @@ ul.vjs-menu-content::-webkit-scrollbar {
.video-js.player-style-invidious .vjs-play-progress { .video-js.player-style-invidious .vjs-play-progress {
background-color: rgba(0, 182, 240, 1); background-color: rgba(0, 182, 240, 1);
} }
vjs-menu-content
/* Overlay */ /* Overlay */
.video-js .vjs-overlay { .video-js .vjs-overlay {
background-color: rgba(35, 35, 35, 0.75) !important; background-color: rgba(35, 35, 35, 0.75);
} color: rgba(255, 255, 255, 1);
.video-js .vjs-overlay * {
color: rgba(255, 255, 255, 1) !important;
text-align: center;
} }
/* ProgressBar marker */ /* ProgressBar marker */

@ -1,121 +0,0 @@
summary {
/* This should hide the marker */
display: block;
font-size: 1.17em;
font-weight: bold;
margin: 0 auto 10px auto;
cursor: pointer;
}
summary::-webkit-details-marker,
summary::marker { display: none; }
summary:before {
border-radius: 5px;
content: "[ + ]";
margin: -2px 10px 0 10px;
padding: 1px 0 3px 0;
text-align: center;
width: 40px;
}
details[open] > summary:before { content: "[ ]"; }
#filters-box {
padding: 10px 20px 20px 10px;
margin: 10px 15px;
}
#filters-flex {
display: flex;
flex-wrap: wrap;
flex-direction: row;
align-items: flex-start;
align-content: flex-start;
justify-content: flex-start;
}
fieldset, legend {
display: contents !important;
border: none !important;
margin: 0 !important;
padding: 0 !important;
}
.filter-column {
display: inline-block;
display: inline-flex;
width: max-content;
min-width: max-content;
max-width: 16em;
margin: 15px;
flex-grow: 2;
flex-basis: auto;
flex-direction: column;
}
.filter-name, .filter-options {
display: block;
padding: 5px 10px;
margin: 0;
text-align: start;
}
.filter-options div { margin: 6px 0; }
.filter-options div * { vertical-align: middle; }
.filter-options label { margin: 0 10px; }
#filters-apply {
text-align: right; /* IE11 only */
text-align: end; /* Override for compatible browsers */
}
/* Error message */
.no-results-error {
text-align: center;
line-height: 180%;
font-size: 110%;
padding: 15px 15px 125px 15px;
}
/* Responsive rules */
@media only screen and (max-width: 800px) {
summary { font-size: 1.30em; }
#filters-box {
margin: 10px 0 0 0;
padding: 0;
}
#filters-apply {
text-align: center;
padding: 15px;
}
}
/* Light theme */
.light-theme #filters-box {
background: #dfdfdf;
}
@media (prefers-color-scheme: light) {
.no-theme #filters-box {
background: #dfdfdf;
}
}
/* Dark theme */
.dark-theme #filters-box {
background: #373737;
}
@media (prefers-color-scheme: dark) {
.no-theme #filters-box {
background: #373737;
}
}

@ -1,254 +0,0 @@
'use strict';
// Contains only auxiliary methods
// May be included and executed unlimited number of times without any consequences
// Polyfills for IE11
Array.prototype.find = Array.prototype.find || function (condition) {
return this.filter(condition)[0];
};
Array.from = Array.from || function (source) {
return Array.prototype.slice.call(source);
};
NodeList.prototype.forEach = NodeList.prototype.forEach || function (callback) {
Array.from(this).forEach(callback);
};
String.prototype.includes = String.prototype.includes || function (searchString) {
return this.indexOf(searchString) >= 0;
};
String.prototype.startsWith = String.prototype.startsWith || function (prefix) {
return this.substr(0, prefix.length) === prefix;
};
Math.sign = Math.sign || function(x) {
x = +x;
if (!x) return x; // 0 and NaN
return x > 0 ? 1 : -1;
};
if (!window.hasOwnProperty('HTMLDetailsElement') && !window.hasOwnProperty('mockHTMLDetailsElement')) {
window.mockHTMLDetailsElement = true;
const style = 'details:not([open]) > :not(summary) {display: none}';
document.head.appendChild(document.createElement('style')).textContent = style;
addEventListener('click', function (e) {
if (e.target.nodeName !== 'SUMMARY') return;
const details = e.target.parentElement;
if (details.hasAttribute('open'))
details.removeAttribute('open');
else
details.setAttribute('open', '');
});
}
// Monstrous global variable for handy code
// Includes: clamp, xhr, storage.{get,set,remove}
window.helpers = window.helpers || {
/**
* https://en.wikipedia.org/wiki/Clamping_(graphics)
* @param {Number} num Source number
* @param {Number} min Low border
* @param {Number} max High border
* @returns {Number} Clamped value
*/
clamp: function (num, min, max) {
if (max < min) {
var t = max; max = min; min = t; // swap max and min
}
if (max < num)
return max;
if (min > num)
return min;
return num;
},
/** @private */
_xhr: function (method, url, options, callbacks) {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
// Default options
xhr.responseType = 'json';
xhr.timeout = 10000;
// Default options redefining
if (options.responseType)
xhr.responseType = options.responseType;
if (options.timeout)
xhr.timeout = options.timeout;
if (method === 'POST')
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// better than onreadystatechange because of 404 codes https://stackoverflow.com/a/36182963
xhr.onloadend = function () {
if (xhr.status === 200) {
if (callbacks.on200) {
// fix for IE11. It doesn't convert response to JSON
if (xhr.responseType === '' && typeof(xhr.response) === 'string')
callbacks.on200(JSON.parse(xhr.response));
else
callbacks.on200(xhr.response);
}
} else {
// handled by onerror
if (xhr.status === 0) return;
if (callbacks.onNon200)
callbacks.onNon200(xhr);
}
};
xhr.ontimeout = function () {
if (callbacks.onTimeout)
callbacks.onTimeout(xhr);
};
xhr.onerror = function () {
if (callbacks.onError)
callbacks.onError(xhr);
};
if (options.payload)
xhr.send(options.payload);
else
xhr.send();
},
/** @private */
_xhrRetry: function(method, url, options, callbacks) {
if (options.retries <= 0) {
console.warn('Failed to pull', options.entity_name);
if (callbacks.onTotalFail)
callbacks.onTotalFail();
return;
}
helpers._xhr(method, url, options, callbacks);
},
/**
* @callback callbackXhrOn200
* @param {Object} response - xhr.response
*/
/**
* @callback callbackXhrError
* @param {XMLHttpRequest} xhr
*/
/**
* @param {'GET'|'POST'} method - 'GET' or 'POST'
* @param {String} url - URL to send request to
* @param {Object} options - other XHR options
* @param {XMLHttpRequestBodyInit} [options.payload=null] - payload for POST-requests
* @param {'arraybuffer'|'blob'|'document'|'json'|'text'} [options.responseType=json]
* @param {Number} [options.timeout=10000]
* @param {Number} [options.retries=1]
* @param {String} [options.entity_name='unknown'] - string to log
* @param {Number} [options.retry_timeout=1000]
* @param {Object} callbacks - functions to execute on events fired
* @param {callbackXhrOn200} [callbacks.on200]
* @param {callbackXhrError} [callbacks.onNon200]
* @param {callbackXhrError} [callbacks.onTimeout]
* @param {callbackXhrError} [callbacks.onError]
* @param {callbackXhrError} [callbacks.onTotalFail] - if failed after all retries
*/
xhr: function(method, url, options, callbacks) {
if (!options.retries || options.retries <= 1) {
helpers._xhr(method, url, options, callbacks);
return;
}
if (!options.entity_name) options.entity_name = 'unknown';
if (!options.retry_timeout) options.retry_timeout = 1000;
const retries_total = options.retries;
let currentTry = 1;
const retry = function () {
console.warn('Pulling ' + options.entity_name + ' failed... ' + (currentTry++) + '/' + retries_total);
setTimeout(function () {
options.retries--;
helpers._xhrRetry(method, url, options, callbacks);
}, options.retry_timeout);
};
// Pack retry() call into error handlers
callbacks._onError = callbacks.onError;
callbacks.onError = function (xhr) {
if (callbacks._onError)
callbacks._onError(xhr);
retry();
};
callbacks._onTimeout = callbacks.onTimeout;
callbacks.onTimeout = function (xhr) {
if (callbacks._onTimeout)
callbacks._onTimeout(xhr);
retry();
};
helpers._xhrRetry(method, url, options, callbacks);
},
/**
* @typedef {Object} invidiousStorage
* @property {(key:String) => Object} get
* @property {(key:String, value:Object)} set
* @property {(key:String)} remove
*/
/**
* Universal storage, stores and returns JS objects. Uses inside localStorage or cookies
* @type {invidiousStorage}
*/
storage: (function () {
// access to localStorage throws exception in Tor Browser, so try is needed
let localStorageIsUsable = false;
try{localStorageIsUsable = !!localStorage.setItem;}catch(e){}
if (localStorageIsUsable) {
return {
get: function (key) {
let storageItem = localStorage.getItem(key)
if (!storageItem) return;
try {
return JSON.parse(decodeURIComponent(storageItem));
} catch(e) {
// Erase non parsable value
helpers.storage.remove(key);
}
},
set: function (key, value) {
let encoded_value = encodeURIComponent(JSON.stringify(value))
localStorage.setItem(key, encoded_value);
},
remove: function (key) { localStorage.removeItem(key); }
};
}
// TODO: fire 'storage' event for cookies
console.info('Storage: localStorage is disabled or unaccessible. Cookies used as fallback');
return {
get: function (key) {
const cookiePrefix = key + '=';
function findCallback(cookie) {return cookie.startsWith(cookiePrefix);}
const matchedCookie = document.cookie.split('; ').find(findCallback);
if (matchedCookie) {
const cookieBody = matchedCookie.replace(cookiePrefix, '');
if (cookieBody.length === 0) return;
try {
return JSON.parse(decodeURIComponent(cookieBody));
} catch(e) {
// Erase non parsable value
helpers.storage.remove(key);
}
}
},
set: function (key, value) {
const cookie_data = encodeURIComponent(JSON.stringify(value));
// Set expiration in 2 year
const date = new Date();
date.setFullYear(date.getFullYear()+2);
document.cookie = key + '=' + cookie_data + '; expires=' + date.toGMTString();
},
remove: function (key) {
document.cookie = key + '=; Max-Age=0';
}
};
})()
};

@ -1,13 +1,19 @@
'use strict'; var community_data = JSON.parse(document.getElementById('community_data').innerHTML);
var community_data = JSON.parse(document.getElementById('community_data').textContent);
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g, function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
});
}
function hide_youtube_replies(event) { function hide_youtube_replies(event) {
var target = event.target; var target = event.target;
var sub_text = target.getAttribute('data-inner-text'); sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text'); inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.children[1];
body.style.display = 'none'; body.style.display = 'none';
target.innerHTML = sub_text; target.innerHTML = sub_text;
@ -19,10 +25,10 @@ function hide_youtube_replies(event) {
function show_youtube_replies(event) { function show_youtube_replies(event) {
var target = event.target; var target = event.target;
var sub_text = target.getAttribute('data-inner-text'); sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text'); inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.children[1];
body.style.display = ''; body.style.display = '';
target.innerHTML = sub_text; target.innerHTML = sub_text;
@ -31,6 +37,13 @@ function show_youtube_replies(event) {
target.setAttribute('data-sub-text', sub_text); target.setAttribute('data-sub-text', sub_text);
} }
function number_with_separator(val) {
while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
return val;
}
function get_youtube_replies(target, load_more) { function get_youtube_replies(target, load_more) {
var continuation = target.getAttribute('data-continuation'); var continuation = target.getAttribute('data-continuation');
@ -44,13 +57,18 @@ function get_youtube_replies(target, load_more) {
'&hl=' + community_data.preferences.locale + '&hl=' + community_data.preferences.locale +
'&thin_mode=' + community_data.preferences.thin_mode + '&thin_mode=' + community_data.preferences.thin_mode +
'&continuation=' + continuation; '&continuation=' + continuation;
var xhr = new XMLHttpRequest();
helpers.xhr('GET', url, {}, { xhr.responseType = 'json';
on200: function (response) { xhr.timeout = 10000;
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
if (load_more) { if (load_more) {
body = body.parentNode.parentNode; body = body.parentNode.parentNode;
body.removeChild(body.lastElementChild); body.removeChild(body.lastElementChild);
body.innerHTML += response.contentHtml; body.innerHTML += xhr.response.contentHtml;
} else { } else {
body.removeChild(body.lastElementChild); body.removeChild(body.lastElementChild);
@ -62,21 +80,24 @@ function get_youtube_replies(target, load_more) {
a.onclick = hide_youtube_replies; a.onclick = hide_youtube_replies;
a.setAttribute('data-sub-text', community_data.hide_replies_text); a.setAttribute('data-sub-text', community_data.hide_replies_text);
a.setAttribute('data-inner-text', community_data.show_replies_text); a.setAttribute('data-inner-text', community_data.show_replies_text);
a.textContent = community_data.hide_replies_text; a.innerText = community_data.hide_replies_text;
var div = document.createElement('div'); var div = document.createElement('div');
div.innerHTML = response.contentHtml; div.innerHTML = xhr.response.contentHtml;
body.appendChild(p); body.appendChild(p);
body.appendChild(div); body.appendChild(div);
} }
}, } else {
onNon200: function (xhr) {
body.innerHTML = fallback; body.innerHTML = fallback;
}, }
onTimeout: function (xhr) { }
console.warn('Pulling comments failed'); }
xhr.ontimeout = function () {
console.log('Pulling comments failed.');
body.innerHTML = fallback; body.innerHTML = fallback;
} }
});
xhr.send();
} }

@ -1,62 +1,103 @@
'use strict'; var video_data = JSON.parse(document.getElementById('video_data').innerHTML);
var video_data = JSON.parse(document.getElementById('video_data').textContent);
function get_playlist(plid, retries) {
if (retries == undefined) retries = 5;
if (retries <= 0) {
console.log('Failed to pull playlist');
return;
}
function get_playlist(plid) {
var plid_url;
if (plid.startsWith('RD')) { if (plid.startsWith('RD')) {
plid_url = '/api/v1/mixes/' + plid + var plid_url = '/api/v1/mixes/' + plid +
'?continuation=' + video_data.id + '?continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale; '&format=html&hl=' + video_data.preferences.locale;
} else { } else {
plid_url = '/api/v1/playlists/' + plid + var plid_url = '/api/v1/playlists/' + plid +
'?index=' + video_data.index + '?index=' + video_data.index +
'&continuation' + video_data.id + '&continuation' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale; '&format=html&hl=' + video_data.preferences.locale;
} }
helpers.xhr('GET', plid_url, {retries: 5, entity_name: 'playlist'}, { var xhr = new XMLHttpRequest();
on200: function (response) { xhr.responseType = 'json';
if (!response.nextVideo) xhr.timeout = 10000;
return; xhr.open('GET', plid_url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
if (xhr.response.nextVideo) {
player.on('ended', function () { player.on('ended', function () {
var url = new URL('https://example.com/embed/' + response.nextVideo); var url = new URL('https://example.com/embed/' + xhr.response.nextVideo);
url.searchParams.set('list', plid); url.searchParams.set('list', plid);
if (!plid.startsWith('RD')) if (!plid.startsWith('RD')) {
url.searchParams.set('index', response.index); url.searchParams.set('index', xhr.response.index);
if (video_data.params.autoplay || video_data.params.continue_autoplay) }
if (video_data.params.autoplay || video_data.params.continue_autoplay) {
url.searchParams.set('autoplay', '1'); url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen) }
if (video_data.params.listen !== video_data.preferences.listen) {
url.searchParams.set('listen', video_data.params.listen); url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed) }
if (video_data.params.speed !== video_data.preferences.speed) {
url.searchParams.set('speed', video_data.params.speed); url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local) }
if (video_data.params.local !== video_data.preferences.local) {
url.searchParams.set('local', video_data.params.local); url.searchParams.set('local', video_data.params.local);
}
location.assign(url.pathname + url.search); location.assign(url.pathname + url.search);
}); });
} }
}); }
}
}
xhr.onerror = function () {
console.log('Pulling playlist failed... ' + retries + '/5');
setTimeout(function () { get_playlist(plid, retries - 1) }, 1000);
}
xhr.ontimeout = function () {
console.log('Pulling playlist failed... ' + retries + '/5');
get_playlist(plid, retries - 1);
}
xhr.send();
} }
addEventListener('load', function (e) { window.addEventListener('load', function (e) {
if (video_data.plid) { if (video_data.plid) {
get_playlist(video_data.plid); get_playlist(video_data.plid);
} else if (video_data.video_series) { } else if (video_data.video_series) {
player.on('ended', function () { player.on('ended', function () {
var url = new URL('https://example.com/embed/' + video_data.video_series.shift()); var url = new URL('https://example.com/embed/' + video_data.video_series.shift());
if (video_data.params.autoplay || video_data.params.continue_autoplay) if (video_data.params.autoplay || video_data.params.continue_autoplay) {
url.searchParams.set('autoplay', '1'); url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen) }
if (video_data.params.listen !== video_data.preferences.listen) {
url.searchParams.set('listen', video_data.params.listen); url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed) }
if (video_data.params.speed !== video_data.preferences.speed) {
url.searchParams.set('speed', video_data.params.speed); url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local) }
if (video_data.params.local !== video_data.preferences.local) {
url.searchParams.set('local', video_data.params.local); url.searchParams.set('local', video_data.params.local);
if (video_data.video_series.length !== 0) }
url.searchParams.set('playlist', video_data.video_series.join(','));
if (video_data.video_series.length !== 0) {
url.searchParams.set('playlist', video_data.video_series.join(','))
}
location.assign(url.pathname + url.search); location.assign(url.pathname + url.search);
}); });

@ -1,6 +1,8 @@
'use strict'; 'use strict';
(function () { (function () {
var n2a = function (n) { return Array.prototype.slice.call(n); };
var video_player = document.getElementById('player_html5_api'); var video_player = document.getElementById('player_html5_api');
if (video_player) { if (video_player) {
video_player.onmouseenter = function () { video_player['data-title'] = video_player['title']; video_player['title'] = ''; }; video_player.onmouseenter = function () { video_player['data-title'] = video_player['title']; video_player['title'] = ''; };
@ -9,124 +11,140 @@
} }
// For dynamically inserted elements // For dynamically inserted elements
addEventListener('click', function (e) { document.addEventListener('click', function (e) {
if (!e || !e.target) return; if (!e || !e.target) { return; }
e = e.target;
var t = e.target; var handler_name = e.getAttribute('data-onclick');
var handler_name = t.getAttribute('data-onclick');
switch (handler_name) { switch (handler_name) {
case 'jump_to_time': case 'jump_to_time':
e.preventDefault(); var time = e.getAttribute('data-jump-time');
var time = t.getAttribute('data-jump-time');
player.currentTime(time); player.currentTime(time);
break; break;
case 'get_youtube_replies': case 'get_youtube_replies':
var load_more = t.getAttribute('data-load-more') !== null; var load_more = e.getAttribute('data-load-more') !== null;
var load_replies = t.getAttribute('data-load-replies') !== null; var load_replies = e.getAttribute('data-load-replies') !== null;
get_youtube_replies(t, load_more, load_replies); get_youtube_replies(e, load_more, load_replies);
break; break;
case 'toggle_parent': case 'toggle_parent':
e.preventDefault(); toggle_parent(e);
toggle_parent(t);
break; break;
default: default:
break; break;
} }
}); });
document.querySelectorAll('[data-mouse="switch_classes"]').forEach(function (el) { n2a(document.querySelectorAll('[data-mouse="switch_classes"]')).forEach(function (e) {
var classes = el.getAttribute('data-switch-classes').split(','); var classes = e.getAttribute('data-switch-classes').split(',');
var classOnEnter = classes[0]; var ec = classes[0];
var classOnLeave = classes[1]; var lc = classes[1];
function toggle_classes(toAdd, toRemove) { var onoff = function (on, off) {
el.classList.add(toAdd); var cs = e.getAttribute('class');
el.classList.remove(toRemove); cs = cs.split(off).join(on);
} e.setAttribute('class', cs);
el.onmouseenter = function () { toggle_classes(classOnEnter, classOnLeave); }; };
el.onmouseleave = function () { toggle_classes(classOnLeave, classOnEnter); }; e.onmouseenter = function () { onoff(ec, lc); };
e.onmouseleave = function () { onoff(lc, ec); };
}); });
document.querySelectorAll('[data-onsubmit="return_false"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onsubmit="return_false"]')).forEach(function (e) {
el.onsubmit = function () { return false; }; e.onsubmit = function () { return false; };
}); });
document.querySelectorAll('[data-onclick="mark_watched"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="mark_watched"]')).forEach(function (e) {
el.onclick = function () { mark_watched(el); }; e.onclick = function () { mark_watched(e); };
}); });
document.querySelectorAll('[data-onclick="mark_unwatched"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="mark_unwatched"]')).forEach(function (e) {
el.onclick = function () { mark_unwatched(el); }; e.onclick = function () { mark_unwatched(e); };
}); });
document.querySelectorAll('[data-onclick="add_playlist_video"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="add_playlist_video"]')).forEach(function (e) {
el.onclick = function () { add_playlist_video(el); }; e.onclick = function () { add_playlist_video(e); };
}); });
document.querySelectorAll('[data-onclick="add_playlist_item"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="add_playlist_item"]')).forEach(function (e) {
el.onclick = function () { add_playlist_item(el); }; e.onclick = function () { add_playlist_item(e); };
}); });
document.querySelectorAll('[data-onclick="remove_playlist_item"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="remove_playlist_item"]')).forEach(function (e) {
el.onclick = function () { remove_playlist_item(el); }; e.onclick = function () { remove_playlist_item(e); };
}); });
document.querySelectorAll('[data-onclick="revoke_token"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="revoke_token"]')).forEach(function (e) {
el.onclick = function () { revoke_token(el); }; e.onclick = function () { revoke_token(e); };
}); });
document.querySelectorAll('[data-onclick="remove_subscription"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="remove_subscription"]')).forEach(function (e) {
el.onclick = function () { remove_subscription(el); }; e.onclick = function () { remove_subscription(e); };
}); });
document.querySelectorAll('[data-onclick="notification_requestPermission"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onclick="notification_requestPermission"]')).forEach(function (e) {
el.onclick = function () { Notification.requestPermission(); }; e.onclick = function () { Notification.requestPermission(); };
}); });
document.querySelectorAll('[data-onrange="update_volume_value"]').forEach(function (el) { n2a(document.querySelectorAll('[data-onrange="update_volume_value"]')).forEach(function (e) {
function update_volume_value() { var cb = function () { update_volume_value(e); }
document.getElementById('volume-value').textContent = el.value; e.oninput = cb;
} e.onchange = cb;
el.oninput = update_volume_value;
el.onchange = update_volume_value;
}); });
function update_volume_value(element) {
document.getElementById('volume-value').innerText = element.value;
}
function revoke_token(target) { function revoke_token(target) {
var row = target.parentNode.parentNode.parentNode.parentNode.parentNode; var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
row.style.display = 'none'; row.style.display = 'none';
var count = document.getElementById('count'); var count = document.getElementById('count');
count.textContent--; count.innerText = count.innerText - 1;
var referer = window.encodeURIComponent(document.location.href);
var url = '/token_ajax?action_revoke_token=1&redirect=false' + var url = '/token_ajax?action_revoke_token=1&redirect=false' +
'&referer=' + encodeURIComponent(location.href) + '&referer=' + referer +
'&session=' + target.getAttribute('data-session'); '&session=' + target.getAttribute('data-session');
var xhr = new XMLHttpRequest();
var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value; xhr.responseType = 'json';
xhr.timeout = 10000;
helpers.xhr('POST', url, {payload: payload}, { xhr.open('POST', url, true);
onNon200: function (xhr) { xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
count.textContent++;
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status != 200) {
count.innerText = parseInt(count.innerText) + 1;
row.style.display = ''; row.style.display = '';
} }
}); }
}
var csrf_token = target.parentNode.querySelector('input[name="csrf_token"]').value;
xhr.send('csrf_token=' + csrf_token);
} }
function remove_subscription(target) { function remove_subscription(target) {
var row = target.parentNode.parentNode.parentNode.parentNode.parentNode; var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
row.style.display = 'none'; row.style.display = 'none';
var count = document.getElementById('count'); var count = document.getElementById('count');
count.textContent--; count.innerText = count.innerText - 1;
var referer = window.encodeURIComponent(document.location.href);
var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' + var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
'&referer=' + encodeURIComponent(location.href) + '&referer=' + referer +
'&c=' + target.getAttribute('data-ucid'); '&c=' + target.getAttribute('data-ucid');
var xhr = new XMLHttpRequest();
var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value; xhr.responseType = 'json';
xhr.timeout = 10000;
helpers.xhr('POST', url, {payload: payload}, { xhr.open('POST', url, true);
onNon200: function (xhr) { xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
count.textContent++;
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status != 200) {
count.innerText = parseInt(count.innerText) + 1;
row.style.display = ''; row.style.display = '';
} }
}); }
}
var csrf_token = target.parentNode.querySelector('input[name="csrf_token"]').value;
xhr.send('csrf_token=' + csrf_token);
} }
// Handle keypresses // Handle keypresses
addEventListener('keydown', function (event) { window.addEventListener('keydown', (event) => {
// Ignore modifier keys // Ignore modifier keys
if (event.ctrlKey || event.metaKey) return; if (event.ctrlKey || event.metaKey) return;
@ -134,14 +152,14 @@
let focused_tag = document.activeElement.tagName.toLowerCase(); let focused_tag = document.activeElement.tagName.toLowerCase();
const allowed = /^(button|checkbox|file|radio|submit)$/; const allowed = /^(button|checkbox|file|radio|submit)$/;
if (focused_tag === 'textarea') return; if (focused_tag === "textarea") return;
if (focused_tag === 'input') { if (focused_tag === "input") {
let focused_type = document.activeElement.type.toLowerCase(); let focused_type = document.activeElement.type.toLowerCase();
if (!allowed.test(focused_type)) return; if (!focused_type.match(allowed)) return;
} }
// Focus search bar on '/' // Focus search bar on '/'
if (event.key === '/') { if (event.key == "/") {
document.getElementById('searchbox').focus(); document.getElementById('searchbox').focus();
event.preventDefault(); event.preventDefault();
} }

@ -1,30 +1,46 @@
'use strict'; var notification_data = JSON.parse(document.getElementById('notification_data').innerHTML);
var notification_data = JSON.parse(document.getElementById('notification_data').textContent);
/** Boolean meaning 'some tab have stream' */
const STORAGE_KEY_STREAM = 'stream';
/** Number of notifications. May be increased or reset */
const STORAGE_KEY_NOTIF_COUNT = 'notification_count';
var notifications, delivered; var notifications, delivered;
var notifications_mock = { close: function () { } };
function get_subscriptions(callback, retries) {
function get_subscriptions() { if (retries == undefined) retries = 5;
helpers.xhr('GET', '/api/v1/auth/subscriptions?fields=authorId', {
retries: 5, if (retries <= 0) {
entity_name: 'subscriptions' return;
}, { }
on200: create_notification_stream
}); var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('GET', '/api/v1/auth/subscriptions?fields=authorId', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
subscriptions = xhr.response;
callback(subscriptions);
}
}
}
xhr.onerror = function () {
console.log('Pulling subscriptions failed... ' + retries + '/5');
setTimeout(function () { get_subscriptions(callback, retries - 1) }, 1000);
}
xhr.ontimeout = function () {
console.log('Pulling subscriptions failed... ' + retries + '/5');
get_subscriptions(callback, retries - 1);
}
xhr.send();
} }
function create_notification_stream(subscriptions) { function create_notification_stream(subscriptions) {
// sse.js can't be replaced to EventSource in place as it lack support of payload and headers
// see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource
notifications = new SSE( notifications = new SSE(
'/api/v1/auth/notifications?fields=videoId,title,author,authorId,publishedText,published,authorThumbnails,liveNow', { '/api/v1/auth/notifications?fields=videoId,title,author,authorId,publishedText,published,authorThumbnails,liveNow', {
withCredentials: true, withCredentials: true,
payload: 'topics=' + subscriptions.map(function (subscription) { return subscription.authorId; }).join(','), payload: 'topics=' + subscriptions.map(function (subscription) { return subscription.authorId }).join(','),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' } headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
}); });
delivered = []; delivered = [];
@ -32,100 +48,96 @@ function create_notification_stream(subscriptions) {
var start_time = Math.round(new Date() / 1000); var start_time = Math.round(new Date() / 1000);
notifications.onmessage = function (event) { notifications.onmessage = function (event) {
if (!event.id) return; if (!event.id) {
return;
}
var notification = JSON.parse(event.data); var notification = JSON.parse(event.data);
console.info('Got notification:', notification); console.log('Got notification:', notification);
// Ignore not actual and delivered notifications
if (start_time > notification.published || delivered.includes(notification.videoId)) return;
delivered.push(notification.videoId);
let notification_count = helpers.storage.get(STORAGE_KEY_NOTIF_COUNT) || 0;
notification_count++;
helpers.storage.set(STORAGE_KEY_NOTIF_COUNT, notification_count);
update_ticker_count();
// permission for notifications handled on settings page. JS handler is in handlers.js if (start_time < notification.published && !delivered.includes(notification.videoId)) {
if (window.Notification && Notification.permission === 'granted') { if (Notification.permission === 'granted') {
var notification_text = notification.liveNow ? notification_data.live_now_text : notification_data.upload_text; var system_notification =
notification_text = notification_text.replace('`x`', notification.author); new Notification((notification.liveNow ? notification_data.live_now_text : notification_data.upload_text).replace('`x`', notification.author), {
var system_notification = new Notification(notification_text, {
body: notification.title, body: notification.title,
icon: '/ggpht' + new URL(notification.authorThumbnails[2].url).pathname, icon: '/ggpht' + new URL(notification.authorThumbnails[2].url).pathname,
img: '/ggpht' + new URL(notification.authorThumbnails[4].url).pathname img: '/ggpht' + new URL(notification.authorThumbnails[4].url).pathname,
tag: notification.videoId
}); });
system_notification.onclick = function (e) { system_notification.onclick = function (event) {
open('/watch?v=' + notification.videoId, '_blank'); window.open('/watch?v=' + event.currentTarget.tag, '_blank');
};
} }
};
notifications.addEventListener('error', function (e) {
console.warn('Something went wrong with notifications, trying to reconnect...');
notifications = notifications_mock;
setTimeout(get_subscriptions, 1000);
});
notifications.stream();
} }
function update_ticker_count() { delivered.push(notification.videoId);
localStorage.setItem('notification_count', parseInt(localStorage.getItem('notification_count') || '0') + 1);
var notification_ticker = document.getElementById('notification_ticker'); var notification_ticker = document.getElementById('notification_ticker');
const notification_count = helpers.storage.get(STORAGE_KEY_STREAM); if (parseInt(localStorage.getItem('notification_count')) > 0) {
if (notification_count > 0) {
notification_ticker.innerHTML = notification_ticker.innerHTML =
'<span id="notification_count">' + notification_count + '</span> <i class="icon ion-ios-notifications"></i>'; '<span id="notification_count">' + localStorage.getItem('notification_count') + '</span> <i class="icon ion-ios-notifications"></i>';
} else { } else {
notification_ticker.innerHTML = notification_ticker.innerHTML =
'<i class="icon ion-ios-notifications-outline"></i>'; '<i class="icon ion-ios-notifications-outline"></i>';
} }
} }
}
function start_stream_if_needed() { notifications.addEventListener('error', handle_notification_error);
// random wait for other tabs set 'stream' flag notifications.stream();
setTimeout(function () {
if (!helpers.storage.get(STORAGE_KEY_STREAM)) {
// if no one set 'stream', set it by yourself and start stream
helpers.storage.set(STORAGE_KEY_STREAM, true);
notifications = notifications_mock;
get_subscriptions();
} }
}, Math.random() * 1000 + 50); // [0.050 .. 1.050) second
function handle_notification_error(event) {
console.log('Something went wrong with notifications, trying to reconnect...');
notifications = { close: function () { } };
setTimeout(function () { get_subscriptions(create_notification_stream) }, 1000);
} }
window.addEventListener('load', function (e) {
localStorage.setItem('notification_count', document.getElementById('notification_count') ? document.getElementById('notification_count').innerText : '0');
addEventListener('storage', function (e) { if (localStorage.getItem('stream')) {
if (e.key === STORAGE_KEY_NOTIF_COUNT) localStorage.removeItem('stream');
update_ticker_count(); } else {
setTimeout(function () {
if (!localStorage.getItem('stream')) {
notifications = { close: function () { } };
localStorage.setItem('stream', true);
get_subscriptions(create_notification_stream);
}
}, Math.random() * 1000 + 50);
}
// if 'stream' key was removed window.addEventListener('storage', function (e) {
if (e.key === STORAGE_KEY_STREAM && !helpers.storage.get(STORAGE_KEY_STREAM)) { if (e.key === 'stream' && !e.newValue) {
if (notifications) { if (notifications) {
// restore it if we have active stream localStorage.setItem('stream', true);
helpers.storage.set(STORAGE_KEY_STREAM, true); } else {
setTimeout(function () {
if (!localStorage.getItem('stream')) {
notifications = { close: function () { } };
localStorage.setItem('stream', true);
get_subscriptions(create_notification_stream);
}
}, Math.random() * 1000 + 50);
}
} else if (e.key === 'notification_count') {
var notification_ticker = document.getElementById('notification_ticker');
if (parseInt(e.newValue) > 0) {
notification_ticker.innerHTML =
'<span id="notification_count">' + e.newValue + '</span> <i class="icon ion-ios-notifications"></i>';
} else { } else {
start_stream_if_needed(); notification_ticker.innerHTML =
'<i class="icon ion-ios-notifications-outline"></i>';
} }
} }
}); });
addEventListener('load', function () {
var notification_count_el = document.getElementById('notification_count');
var notification_count = notification_count_el ? parseInt(notification_count_el.textContent) : 0;
helpers.storage.set(STORAGE_KEY_NOTIF_COUNT, notification_count);
if (helpers.storage.get(STORAGE_KEY_STREAM))
helpers.storage.remove(STORAGE_KEY_STREAM);
start_stream_if_needed();
}); });
addEventListener('unload', function () { window.addEventListener('unload', function (e) {
// let chance to other tabs to be a streamer via firing 'storage' event if (notifications) {
if (notifications) helpers.storage.remove(STORAGE_KEY_STREAM); localStorage.removeItem('stream');
}
}); });

@ -1,6 +1,5 @@
'use strict'; var player_data = JSON.parse(document.getElementById('player_data').innerHTML);
var player_data = JSON.parse(document.getElementById('player_data').textContent); var video_data = JSON.parse(document.getElementById('video_data').innerHTML);
var video_data = JSON.parse(document.getElementById('video_data').textContent);
var options = { var options = {
preload: 'auto', preload: 'auto',
@ -17,7 +16,6 @@ var options = {
'remainingTimeDisplay', 'remainingTimeDisplay',
'Spacer', 'Spacer',
'captionsButton', 'captionsButton',
'audioTrackButton',
'qualitySelector', 'qualitySelector',
'playbackRateMenuButton', 'playbackRateMenuButton',
'fullscreenToggle' 'fullscreenToggle'
@ -29,7 +27,7 @@ var options = {
overrideNative: true overrideNative: true
} }
} }
}; }
if (player_data.aspect_ratio) { if (player_data.aspect_ratio) {
options.aspectRatio = player_data.aspect_ratio; options.aspectRatio = player_data.aspect_ratio;
@ -40,66 +38,21 @@ embed_url.searchParams.delete('v');
var short_url = location.origin + '/' + video_data.id + embed_url.search; var short_url = location.origin + '/' + video_data.id + embed_url.search;
embed_url = location.origin + '/embed/' + video_data.id + embed_url.search; embed_url = location.origin + '/embed/' + video_data.id + embed_url.search;
var save_player_pos_key = 'save_player_pos'; var save_player_pos_key = "save_player_pos";
videojs.Vhs.xhr.beforeRequest = function(options) { videojs.Vhs.xhr.beforeRequest = function(options) {
// set local if requested not videoplayback if (options.uri.indexOf('videoplayback') === -1 && options.uri.indexOf('local=true') === -1) {
if (!options.uri.includes('videoplayback')) { options.uri = options.uri + '?local=true';
if (!options.uri.includes('local=true'))
options.uri += '?local=true';
} }
return options; return options;
}; };
var player = videojs('player', options); var player = videojs('player', options);
player.on('error', function () {
if (video_data.params.quality === 'dash') return;
var localNotDisabled = (
!player.currentSrc().includes('local=true') && !video_data.local_disabled
);
var reloadMakesSense = (
player.error().code === MediaError.MEDIA_ERR_NETWORK ||
player.error().code === MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED
);
if (localNotDisabled) {
// add local=true to all current sources
player.src(player.currentSources().map(function (source) {
source.src += '&local=true';
return source;
}));
} else if (reloadMakesSense) {
setTimeout(function () {
console.warn('An error occurred in the player, reloading...');
// After load() all parameters are reset. Save them
var currentTime = player.currentTime();
var playbackRate = player.playbackRate();
var paused = player.paused();
player.load();
if (currentTime > 0.5) currentTime -= 0.5;
player.currentTime(currentTime);
player.playbackRate(playbackRate);
if (!paused) player.play();
}, 5000);
}
});
if (video_data.params.quality === 'dash') {
player.reloadSourceOnError({
errorInterval: 10
});
}
/** /**
* Function for add time argument to url * Function for add time argument to url
* @param {String} url * @param {String} url
* @returns {URL} urlWithTimeArg * @returns urlWithTimeArg
*/ */
function addCurrentTimeToURL(url) { function addCurrentTimeToURL(url) {
var urlUsed = new URL(url); var urlUsed = new URL(url);
@ -122,12 +75,18 @@ var shareOptions = {
description: player_data.description, description: player_data.description,
image: player_data.thumbnail, image: player_data.thumbnail,
get embedCode() { get embedCode() {
// Single quotes inside here required. HTML inserted as is into value attribute of input
return "<iframe id='ivplayer' width='640' height='360' src='" + return "<iframe id='ivplayer' width='640' height='360' src='" +
addCurrentTimeToURL(embed_url) + "' style='border:none;'></iframe>"; addCurrentTimeToURL(embed_url) + "' style='border:none;'></iframe>";
} }
}; };
const storage = (() => {
try { if (localStorage.length !== -1) return localStorage; }
catch (e) { console.info('No storage available: ' + e); }
return undefined;
})();
if (location.pathname.startsWith('/embed/')) { if (location.pathname.startsWith('/embed/')) {
var overlay_content = '<h1><a rel="noopener" target="_blank" href="' + location.origin + '/watch?v=' + video_data.id + '">' + player_data.title + '</a></h1>'; var overlay_content = '<h1><a rel="noopener" target="_blank" href="' + location.origin + '/watch?v=' + video_data.id + '">' + player_data.title + '</a></h1>';
player.overlay({ player.overlay({
@ -142,58 +101,78 @@ if (location.pathname.startsWith('/embed/')) {
// Detection code taken from https://stackoverflow.com/a/20293441 // Detection code taken from https://stackoverflow.com/a/20293441
function isMobile() { function isMobile() {
try{ document.createEvent('TouchEvent'); return true; } try{ document.createEvent("TouchEvent"); return true; }
catch(e){ return false; } catch(e){ return false; }
} }
if (isMobile()) { if (isMobile()) {
player.mobileUi({ touchControls: { seekSeconds: 5 * player.playbackRate() } }); player.mobileUi();
var buttons = ['playToggle', 'volumePanel', 'captionsButton']; buttons = ["playToggle", "volumePanel", "captionsButton"];
if (!video_data.params.listen && video_data.params.quality === 'dash') buttons.push('audioTrackButton'); if (video_data.params.quality !== 'dash') buttons.push("qualitySelector")
if (video_data.params.listen || video_data.params.quality !== 'dash') buttons.push('qualitySelector');
// Create new control bar object for operation buttons // Create new control bar object for operation buttons
const ControlBar = videojs.getComponent('controlBar'); const ControlBar = videojs.getComponent("controlBar");
let operations_bar = new ControlBar(player, { let operations_bar = new ControlBar(player, {
children: [], children: [],
playbackRates: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0] playbackRates: [0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0]
}); });
buttons.slice(1).forEach(function (child) {operations_bar.addChild(child);}); buttons.slice(1).forEach(child => operations_bar.addChild(child))
// Remove operation buttons from primary control bar // Remove operation buttons from primary control bar
var primary_control_bar = player.getChild('controlBar'); primary_control_bar = player.getChild("controlBar");
buttons.forEach(function (child) {primary_control_bar.removeChild(child);}); buttons.forEach(child => primary_control_bar.removeChild(child));
var operations_bar_element = operations_bar.el(); operations_bar_element = operations_bar.el();
operations_bar_element.classList.add('mobile-operations-bar'); operations_bar_element.className += " mobile-operations-bar"
player.addChild(operations_bar); player.addChild(operations_bar)
// Playback menu doesn't work when it's initialized outside of the primary control bar // Playback menu doesn't work when it's initialized outside of the primary control bar
var playback_element = document.getElementsByClassName('vjs-playback-rate')[0]; playback_element = document.getElementsByClassName("vjs-playback-rate")[0]
operations_bar_element.append(playback_element); operations_bar_element.append(playback_element)
// The share and http source selector element can't be fetched till the players ready. // The share and http source selector element can't be fetched till the players ready.
player.one('playing', function () { player.one("playing", () => {
var share_element = document.getElementsByClassName('vjs-share-control')[0]; share_element = document.getElementsByClassName("vjs-share-control")[0]
operations_bar_element.append(share_element); operations_bar_element.append(share_element)
if (!video_data.params.listen && video_data.params.quality === 'dash') { if (video_data.params.quality === 'dash') {
var http_source_selector = document.getElementsByClassName('vjs-http-source-selector vjs-menu-button')[0]; http_source_selector = document.getElementsByClassName("vjs-http-source-selector vjs-menu-button")[0]
operations_bar_element.append(http_source_selector); operations_bar_element.append(http_source_selector)
} }
}); })
}
player.on('error', function (event) {
if (player.error().code === 2 || player.error().code === 4) {
setTimeout(function (event) {
console.log('An error occurred in the player, reloading...');
var currentTime = player.currentTime();
var playbackRate = player.playbackRate();
var paused = player.paused();
player.load();
if (currentTime > 0.5) currentTime -= 0.5;
player.currentTime(currentTime);
player.playbackRate(playbackRate);
if (!paused) player.play();
}, 5000);
} }
});
// Enable VR video support // Enable VR video support
if (!video_data.params.listen && video_data.vr && video_data.params.vr_mode) { if (!video_data.params.listen && video_data.vr && video_data.params.vr_mode) {
player.crossOrigin('anonymous'); player.crossOrigin("anonymous")
switch (video_data.projection_type) { switch (video_data.projection_type) {
case 'EQUIRECTANGULAR': case "EQUIRECTANGULAR":
player.vr({projection: 'equirectangular'}); player.vr({projection: "equirectangular"});
default: // Should only be 'MESH' but we'll use this as a fallback. default: // Should only be "MESH" but we'll use this as a fallback.
player.vr({projection: 'EAC'}); player.vr({projection: "EAC"});
} }
} }
@ -221,76 +200,9 @@ if (video_data.params.video_start > 0 || video_data.params.video_end > 0) {
player.volume(video_data.params.volume / 100); player.volume(video_data.params.volume / 100);
player.playbackRate(video_data.params.speed); player.playbackRate(video_data.params.speed);
/**
* Method for getting the contents of a cookie
*
* @param {String} name Name of cookie
* @returns {String|null} cookieValue
*/
function getCookieValue(name) {
var cookiePrefix = name + '=';
var matchedCookie = document.cookie.split(';').find(function (item) {return item.includes(cookiePrefix);});
if (matchedCookie)
return matchedCookie.replace(cookiePrefix, '');
return null;
}
/**
* Method for updating the 'PREFS' cookie (or creating it if missing)
*
* @param {number} newVolume New volume defined (null if unchanged)
* @param {number} newSpeed New speed defined (null if unchanged)
*/
function updateCookie(newVolume, newSpeed) {
var volumeValue = newVolume !== null ? newVolume : video_data.params.volume;
var speedValue = newSpeed !== null ? newSpeed : video_data.params.speed;
var cookieValue = getCookieValue('PREFS');
var cookieData;
if (cookieValue !== null) {
var cookieJson = JSON.parse(decodeURIComponent(cookieValue));
cookieJson.volume = volumeValue;
cookieJson.speed = speedValue;
cookieData = encodeURIComponent(JSON.stringify(cookieJson));
} else {
cookieData = encodeURIComponent(JSON.stringify({ 'volume': volumeValue, 'speed': speedValue }));
}
// Set expiration in 2 year
var date = new Date();
date.setFullYear(date.getFullYear() + 2);
var ipRegex = /^((\d+\.){3}\d+|[\dA-Fa-f]*:[\d:A-Fa-f]*:[\d:A-Fa-f]+)$/;
var domainUsed = location.hostname;
// Fix for a bug in FF where the leading dot in the FQDN is not ignored
if (domainUsed.charAt(0) !== '.' && !ipRegex.test(domainUsed) && domainUsed !== 'localhost')
domainUsed = '.' + location.hostname;
var secure = location.protocol.startsWith("https") ? " Secure;" : "";
document.cookie = 'PREFS=' + cookieData + '; SameSite=Lax; path=/; domain=' +
domainUsed + '; expires=' + date.toGMTString() + ';' + secure;
video_data.params.volume = volumeValue;
video_data.params.speed = speedValue;
}
player.on('ratechange', function () {
updateCookie(null, player.playbackRate());
if (isMobile()) {
player.mobileUi({ touchControls: { seekSeconds: 5 * player.playbackRate() } });
}
});
player.on('volumechange', function () {
updateCookie(Math.ceil(player.volume() * 100), null);
});
player.on('waiting', function () { player.on('waiting', function () {
if (player.playbackRate() > 1 && player.liveTracker.isLive() && player.liveTracker.atLiveEdge()) { if (player.playbackRate() > 1 && player.liveTracker.isLive() && player.liveTracker.atLiveEdge()) {
console.info('Player has caught up to source, resetting playbackRate'); console.log('Player has caught up to source, resetting playbackRate.')
player.playbackRate(1); player.playbackRate(1);
} }
}); });
@ -301,13 +213,13 @@ if (video_data.premiere_timestamp && Math.round(new Date() / 1000) < video_data.
if (video_data.params.save_player_pos) { if (video_data.params.save_player_pos) {
const url = new URL(location); const url = new URL(location);
const hasTimeParam = url.searchParams.has('t'); const hasTimeParam = url.searchParams.has("t");
const rememberedTime = get_video_time(); const remeberedTime = get_video_time();
let lastUpdated = 0; let lastUpdated = 0;
if(!hasTimeParam) set_seconds_after_start(rememberedTime); if(!hasTimeParam) set_seconds_after_start(remeberedTime);
player.on('timeupdate', function () { const updateTime = () => {
const raw = player.currentTime(); const raw = player.currentTime();
const time = Math.floor(raw); const time = Math.floor(raw);
@ -315,7 +227,9 @@ if (video_data.params.save_player_pos) {
save_video_time(time); save_video_time(time);
lastUpdated = time; lastUpdated = time;
} }
}); };
player.on("timeupdate", updateTime);
} }
else remove_all_video_times(); else remove_all_video_times();
@ -325,13 +239,13 @@ if (video_data.params.autoplay) {
player.ready(function () { player.ready(function () {
new Promise(function (resolve, reject) { new Promise(function (resolve, reject) {
setTimeout(function () {resolve(1);}, 1); setTimeout(() => resolve(1), 1);
}).then(function (result) { }).then(function (result) {
var promise = player.play(); var promise = player.play();
if (promise !== undefined) { if (promise !== undefined) {
promise.then(function () { promise.then(_ => {
}).catch(function (error) { }).catch(error => {
bpb.show(); bpb.show();
}); });
} }
@ -342,47 +256,67 @@ if (video_data.params.autoplay) {
if (!video_data.params.listen && video_data.params.quality === 'dash') { if (!video_data.params.listen && video_data.params.quality === 'dash') {
player.httpSourceSelector(); player.httpSourceSelector();
if (video_data.params.quality_dash !== 'auto') { if (video_data.params.quality_dash != "auto") {
player.ready(function () { player.ready(() => {
player.on('loadedmetadata', function () { player.on("loadedmetadata", () => {
const qualityLevels = Array.from(player.qualityLevels()).sort(function (a, b) {return a.height - b.height;}); const qualityLevels = Array.from(player.qualityLevels()).sort((a, b) => a.height - b.height);
let targetQualityLevel; let targetQualityLevel;
switch (video_data.params.quality_dash) { switch (video_data.params.quality_dash) {
case 'best': case "best":
targetQualityLevel = qualityLevels.length - 1; targetQualityLevel = qualityLevels.length - 1;
break; break;
case 'worst': case "worst":
targetQualityLevel = 0; targetQualityLevel = 0;
break; break;
default: default:
const targetHeight = parseInt(video_data.params.quality_dash); const targetHeight = Number.parseInt(video_data.params.quality_dash, 10);
for (let i = 0; i < qualityLevels.length; i++) { for (let i = 0; i < qualityLevels.length; i++) {
if (qualityLevels[i].height <= targetHeight) if (qualityLevels[i].height <= targetHeight) {
targetQualityLevel = i; targetQualityLevel = i;
else } else {
break; break;
} }
} }
qualityLevels.forEach(function (level, index) { }
level.enabled = (index === targetQualityLevel); for (let i = 0; i < qualityLevels.length; i++) {
}); qualityLevels[i].enabled = (i == targetQualityLevel);
}
}); });
}); });
} }
} }
player.vttThumbnails({ player.vttThumbnails({
src: '/api/v1/storyboards/' + video_data.id + '?height=90', src: location.origin + '/api/v1/storyboards/' + video_data.id + '?height=90',
showTimestamp: true showTimestamp: true
}); });
// Enable annotations // Enable annotations
if (!video_data.params.listen && video_data.params.annotations) { if (!video_data.params.listen && video_data.params.annotations) {
addEventListener('load', function (e) { window.addEventListener('load', function (e) {
addEventListener('__ar_annotation_click', function (e) { var video_container = document.getElementById('player');
const url = e.detail.url, let xhr = new XMLHttpRequest();
target = e.detail.target, xhr.responseType = 'text';
seconds = e.detail.seconds; xhr.timeout = 60000;
xhr.open('GET', '/api/v1/annotations/' + video_data.id, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
videojs.registerPlugin('youtubeAnnotationsPlugin', youtubeAnnotationsPlugin);
if (!player.paused()) {
player.youtubeAnnotationsPlugin({ annotationXml: xhr.response, videoContainer: video_container });
} else {
player.one('play', function (event) {
player.youtubeAnnotationsPlugin({ annotationXml: xhr.response, videoContainer: video_container });
});
}
}
}
}
window.addEventListener('__ar_annotation_click', e => {
const { url, target, seconds } = e.detail;
var path = new URL(url); var path = new URL(url);
if (path.href.startsWith('https://www.youtube.com/watch?') && seconds) { if (path.href.startsWith('https://www.youtube.com/watch?') && seconds) {
@ -392,48 +326,41 @@ if (!video_data.params.listen && video_data.params.annotations) {
path = path.pathname + path.search; path = path.pathname + path.search;
if (target === 'current') { if (target === 'current') {
location.href = path; window.location.href = path;
} else if (target === 'new') { } else if (target === 'new') {
open(path, '_blank'); window.open(path, '_blank');
}
});
helpers.xhr('GET', '/api/v1/annotations/' + video_data.id, {
responseType: 'text',
timeout: 60000
}, {
on200: function (response) {
var video_container = document.getElementById('player');
videojs.registerPlugin('youtubeAnnotationsPlugin', youtubeAnnotationsPlugin);
if (player.paused()) {
player.one('play', function (event) {
player.youtubeAnnotationsPlugin({ annotationXml: response, videoContainer: video_container });
});
} else {
player.youtubeAnnotationsPlugin({ annotationXml: response, videoContainer: video_container });
}
} }
}); });
xhr.send();
}); });
} }
function change_volume(delta) { function increase_volume(delta) {
const curVolume = player.volume(); const curVolume = player.volume();
let newVolume = curVolume + delta; let newVolume = curVolume + delta;
newVolume = helpers.clamp(newVolume, 0, 1); if (newVolume > 1) {
newVolume = 1;
} else if (newVolume < 0) {
newVolume = 0;
}
player.volume(newVolume); player.volume(newVolume);
} }
function toggle_muted() { function toggle_muted() {
player.muted(!player.muted()); const isMuted = player.muted();
player.muted(!isMuted);
} }
function skip_seconds(delta) { function skip_seconds(delta) {
const duration = player.duration(); const duration = player.duration();
const curTime = player.currentTime(); const curTime = player.currentTime();
let newTime = curTime + delta; let newTime = curTime + delta;
newTime = helpers.clamp(newTime, 0, duration); if (newTime > duration) {
newTime = duration;
} else if (newTime < 0) {
newTime = 0;
}
player.currentTime(newTime); player.currentTime(newTime);
} }
@ -443,21 +370,57 @@ function set_seconds_after_start(delta) {
} }
function save_video_time(seconds) { function save_video_time(seconds) {
const videoId = video_data.id;
const all_video_times = get_all_video_times(); const all_video_times = get_all_video_times();
all_video_times[video_data.id] = seconds;
helpers.storage.set(save_player_pos_key, all_video_times); all_video_times[videoId] = seconds;
set_all_video_times(all_video_times);
} }
function get_video_time() { function get_video_time() {
return get_all_video_times()[video_data.id] || 0; try {
const videoId = video_data.id;
const all_video_times = get_all_video_times();
const timestamp = all_video_times[videoId];
return timestamp || 0;
}
catch {
return 0;
}
}
function set_all_video_times(times) {
if (storage) {
if (times) {
try {
storage.setItem(save_player_pos_key, JSON.stringify(times));
} catch (e) {
console.debug('set_all_video_times: ' + e);
}
} else {
storage.removeItem(save_player_pos_key);
}
}
} }
function get_all_video_times() { function get_all_video_times() {
return helpers.storage.get(save_player_pos_key) || {}; if (storage) {
const raw = storage.getItem(save_player_pos_key);
if (raw !== null) {
try {
return JSON.parse(raw);
} catch (e) {
console.debug('get_all_video_times: ' + e);
}
}
}
return {};
} }
function remove_all_video_times() { function remove_all_video_times() {
helpers.storage.remove(save_player_pos_key); set_all_video_times(null);
} }
function set_time_percent(percent) { function set_time_percent(percent) {
@ -473,23 +436,21 @@ function toggle_play() { player.paused() ? play() : pause(); }
const toggle_captions = (function () { const toggle_captions = (function () {
let toggledTrack = null; let toggledTrack = null;
const onChange = function (e) {
function bindChange(onOrOff) {
player.textTracks()[onOrOff]('change', function (e) {
toggledTrack = null; toggledTrack = null;
}); };
} const bindChange = function (onOrOff) {
player.textTracks()[onOrOff]('change', onChange);
};
// Wrapper function to ignore our own emitted events and only listen // Wrapper function to ignore our own emitted events and only listen
// to events emitted by Video.js on click on the captions menu items. // to events emitted by Video.js on click on the captions menu items.
function setMode(track, mode) { const setMode = function (track, mode) {
bindChange('off'); bindChange('off');
track.mode = mode; track.mode = mode;
setTimeout(function () { window.setTimeout(function () {
bindChange('on'); bindChange('on');
}, 0); }, 0);
} };
bindChange('on'); bindChange('on');
return function () { return function () {
if (toggledTrack !== null) { if (toggledTrack !== null) {
@ -537,11 +498,15 @@ function increase_playback_rate(steps) {
const maxIndex = options.playbackRates.length - 1; const maxIndex = options.playbackRates.length - 1;
const curIndex = options.playbackRates.indexOf(player.playbackRate()); const curIndex = options.playbackRates.indexOf(player.playbackRate());
let newIndex = curIndex + steps; let newIndex = curIndex + steps;
newIndex = helpers.clamp(newIndex, 0, maxIndex); if (newIndex > maxIndex) {
newIndex = maxIndex;
} else if (newIndex < 0) {
newIndex = 0;
}
player.playbackRate(options.playbackRates[newIndex]); player.playbackRate(options.playbackRates[newIndex]);
} }
addEventListener('keydown', function (e) { window.addEventListener('keydown', e => {
if (e.target.tagName.toLowerCase() === 'input') { if (e.target.tagName.toLowerCase() === 'input') {
// Ignore input when focus is on certain elements, e.g. form fields. // Ignore input when focus is on certain elements, e.g. form fields.
return; return;
@ -574,10 +539,10 @@ addEventListener('keydown', function (e) {
case 'MediaStop': action = stop; break; case 'MediaStop': action = stop; break;
case 'ArrowUp': case 'ArrowUp':
if (isPlayerFocused) action = change_volume.bind(this, 0.1); if (isPlayerFocused) action = increase_volume.bind(this, 0.1);
break; break;
case 'ArrowDown': case 'ArrowDown':
if (isPlayerFocused) action = change_volume.bind(this, -0.1); if (isPlayerFocused) action = increase_volume.bind(this, -0.1);
break; break;
case 'm': case 'm':
@ -628,11 +593,12 @@ addEventListener('keydown', function (e) {
// TODO: Add support to play back previous video. // TODO: Add support to play back previous video.
break; break;
// TODO: More precise step. Now FPS is taken equal to 29.97 case '.':
// Common FPS: https://forum.videohelp.com/threads/81868#post323588 // TODO: Add support for next-frame-stepping.
// Possible solution is new HTMLVideoElement.requestVideoFrameCallback() https://wicg.github.io/video-rvfc/ break;
case ',': action = function () { pause(); skip_seconds(-1/29.97); }; break; case ',':
case '.': action = function () { pause(); skip_seconds( 1/29.97); }; break; // TODO: Add support for previous-frame-stepping.
break;
case '>': action = increase_playback_rate.bind(this, 1); break; case '>': action = increase_playback_rate.bind(this, 1); break;
case '<': action = increase_playback_rate.bind(this, -1); break; case '<': action = increase_playback_rate.bind(this, -1); break;
@ -651,77 +617,84 @@ addEventListener('keydown', function (e) {
// Add support for controlling the player volume by scrolling over it. Adapted from // Add support for controlling the player volume by scrolling over it. Adapted from
// https://github.com/ctd1500/videojs-hotkeys/blob/bb4a158b2e214ccab87c2e7b95f42bc45c6bfd87/videojs.hotkeys.js#L292-L328 // https://github.com/ctd1500/videojs-hotkeys/blob/bb4a158b2e214ccab87c2e7b95f42bc45c6bfd87/videojs.hotkeys.js#L292-L328
(function () { (function () {
const volumeStep = 0.05;
const enableVolumeScroll = true;
const enableHoverScroll = true;
const doc = document;
const pEl = document.getElementById('player'); const pEl = document.getElementById('player');
var volumeHover = false; var volumeHover = false;
var volumeSelector = pEl.querySelector('.vjs-volume-menu-button') || pEl.querySelector('.vjs-volume-panel'); var volumeSelector = pEl.querySelector('.vjs-volume-menu-button') || pEl.querySelector('.vjs-volume-panel');
if (volumeSelector !== null) { if (volumeSelector != null) {
volumeSelector.onmouseover = function () { volumeHover = true; }; volumeSelector.onmouseover = function () { volumeHover = true; };
volumeSelector.onmouseout = function () { volumeHover = false; }; volumeSelector.onmouseout = function () { volumeHover = false; };
} }
function mouseScroll(event) { var mouseScroll = function mouseScroll(event) {
// When controls are disabled, hotkeys will be disabled as well var activeEl = doc.activeElement;
if (!player.controls() || !volumeHover) return; if (enableHoverScroll) {
// If we leave this undefined then it can match non-existent elements below
activeEl = 0;
}
// When controls are disabled, hotkeys will be disabled as well
if (player.controls()) {
if (volumeHover) {
if (enableVolumeScroll) {
event = window.event || event;
var delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
event.preventDefault(); event.preventDefault();
var wheelMove = event.wheelDelta || -event.detail;
var volumeSign = Math.sign(wheelMove);
change_volume(volumeSign * 0.05); // decrease/increase by 5% if (delta == 1) {
increase_volume(volumeStep);
} else if (delta == -1) {
increase_volume(-volumeStep);
}
}
}
} }
};
player.on('mousewheel', mouseScroll); player.on('mousewheel', mouseScroll);
player.on('DOMMouseScroll', mouseScroll); player.on("DOMMouseScroll", mouseScroll);
}()); }());
// Since videojs-share can sometimes be blocked, we defer it until last // Since videojs-share can sometimes be blocked, we defer it until last
if (player.share) player.share(shareOptions); if (player.share) {
player.share(shareOptions);
}
// show the preferred caption by default // show the preferred caption by default
if (player_data.preferred_caption_found) { if (player_data.preferred_caption_found) {
player.ready(function () { player.ready(() => {
if (!video_data.params.listen && video_data.params.quality === 'dash') {
// play.textTracks()[0] on DASH mode is showing some debug messages
player.textTracks()[1].mode = 'showing'; player.textTracks()[1].mode = 'showing';
} else {
player.textTracks()[0].mode = 'showing';
}
}); });
} }
// Safari audio double duration fix // Safari audio double duration fix
if (navigator.vendor === 'Apple Computer, Inc.' && video_data.params.listen) { if (navigator.vendor == "Apple Computer, Inc." && video_data.params.listen) {
player.on('loadedmetadata', function () { player.on('loadedmetadata', function () {
player.on('timeupdate', function () { player.on('timeupdate', function () {
if (player.remainingTime() < player.duration() / 2 && player.remainingTime() >= 2) { if (player.remainingTime() < player.duration() / 2) {
player.currentTime(player.duration() - 1); player.currentTime(player.duration() + 1);
} }
}); });
}); });
} }
// Watch on Invidious link // Watch on Invidious link
if (location.pathname.startsWith('/embed/')) { if (window.location.pathname.startsWith("/embed/")) {
const Button = videojs.getComponent('Button'); const Button = videojs.getComponent('Button');
let watch_on_invidious_button = new Button(player); let watch_on_invidious_button = new Button(player);
// Create hyperlink for current instance // Create hyperlink for current instance
var redirect_element = document.createElement('a'); redirect_element = document.createElement("a");
redirect_element.setAttribute('href', location.pathname.replace('/embed/', '/watch?v=')); redirect_element.setAttribute("href", `http://${window.location.host}/watch?v=${window.location.pathname.replace("/embed/","")}`)
redirect_element.appendChild(document.createTextNode('Invidious')); redirect_element.appendChild(document.createTextNode("Invidious"))
watch_on_invidious_button.el().appendChild(redirect_element);
watch_on_invidious_button.addClass('watch-on-invidious');
var cb = player.getChild('ControlBar'); watch_on_invidious_button.el().appendChild(redirect_element)
cb.addChild(watch_on_invidious_button); watch_on_invidious_button.addClass("watch-on-invidious")
}
addEventListener('DOMContentLoaded', function () { cb = player.getChild('ControlBar')
// Save time during redirection on another instance cb.addChild(watch_on_invidious_button)
const changeInstanceLink = document.querySelector('#watch-on-another-invidious-instance > a'); };
if (changeInstanceLink) changeInstanceLink.addEventListener('click', function () {
changeInstanceLink.href = addCurrentTimeToURL(changeInstanceLink.href);
});
});

@ -1,6 +1,4 @@
'use strict'; var playlist_data = JSON.parse(document.getElementById('playlist_data').innerHTML);
var playlist_data = JSON.parse(document.getElementById('playlist_data').textContent);
var payload = 'csrf_token=' + playlist_data.csrf_token;
function add_playlist_video(target) { function add_playlist_video(target) {
var select = target.parentNode.children[0].children[1]; var select = target.parentNode.children[0].children[1];
@ -9,12 +7,21 @@ function add_playlist_video(target) {
var url = '/playlist_ajax?action_add_video=1&redirect=false' + var url = '/playlist_ajax?action_add_video=1&redirect=false' +
'&video_id=' + target.getAttribute('data-id') + '&video_id=' + target.getAttribute('data-id') +
'&playlist_id=' + option.getAttribute('data-plid'); '&playlist_id=' + option.getAttribute('data-plid');
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
helpers.xhr('POST', url, {payload: payload}, { xhr.onreadystatechange = function () {
on200: function (response) { if (xhr.readyState == 4) {
option.textContent = '✓' + option.textContent; if (xhr.status == 200) {
option.innerText = '✓' + option.innerText;
} }
}); }
}
xhr.send('csrf_token=' + playlist_data.csrf_token);
} }
function add_playlist_item(target) { function add_playlist_item(target) {
@ -24,12 +31,21 @@ function add_playlist_item(target) {
var url = '/playlist_ajax?action_add_video=1&redirect=false' + var url = '/playlist_ajax?action_add_video=1&redirect=false' +
'&video_id=' + target.getAttribute('data-id') + '&video_id=' + target.getAttribute('data-id') +
'&playlist_id=' + target.getAttribute('data-plid'); '&playlist_id=' + target.getAttribute('data-plid');
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
helpers.xhr('POST', url, {payload: payload}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
if (xhr.status != 200) {
tile.style.display = ''; tile.style.display = '';
} }
}); }
}
xhr.send('csrf_token=' + playlist_data.csrf_token);
} }
function remove_playlist_item(target) { function remove_playlist_item(target) {
@ -39,10 +55,19 @@ function remove_playlist_item(target) {
var url = '/playlist_ajax?action_remove_video=1&redirect=false' + var url = '/playlist_ajax?action_remove_video=1&redirect=false' +
'&set_video_id=' + target.getAttribute('data-index') + '&set_video_id=' + target.getAttribute('data-index') +
'&playlist_id=' + target.getAttribute('data-plid'); '&playlist_id=' + target.getAttribute('data-plid');
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
helpers.xhr('POST', url, {payload: payload}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
if (xhr.status != 200) {
tile.style.display = ''; tile.style.display = '';
} }
}); }
}
xhr.send('csrf_token=' + playlist_data.csrf_token);
} }

File diff suppressed because one or more lines are too long

@ -1,9 +1,7 @@
'use strict'; var subscribe_data = JSON.parse(document.getElementById('subscribe_data').innerHTML);
var subscribe_data = JSON.parse(document.getElementById('subscribe_data').textContent);
var payload = 'csrf_token=' + subscribe_data.csrf_token;
var subscribe_button = document.getElementById('subscribe'); var subscribe_button = document.getElementById('subscribe');
subscribe_button.parentNode.action = 'javascript:void(0)'; subscribe_button.parentNode['action'] = 'javascript:void(0)';
if (subscribe_button.getAttribute('data-type') === 'subscribe') { if (subscribe_button.getAttribute('data-type') === 'subscribe') {
subscribe_button.onclick = subscribe; subscribe_button.onclick = subscribe;
@ -11,34 +9,82 @@ if (subscribe_button.getAttribute('data-type') === 'subscribe') {
subscribe_button.onclick = unsubscribe; subscribe_button.onclick = unsubscribe;
} }
function subscribe() { function subscribe(retries = 5) {
var fallback = subscribe_button.innerHTML; if (retries <= 0) {
subscribe_button.onclick = unsubscribe; console.log('Failed to subscribe.');
subscribe_button.innerHTML = '<b>' + subscribe_data.unsubscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>'; return;
}
var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' + var url = '/subscription_ajax?action_create_subscription_to_channel=1&redirect=false' +
'&c=' + subscribe_data.ucid; '&c=' + subscribe_data.ucid;
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = unsubscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.unsubscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'subscribe request'}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
if (xhr.status != 200) {
subscribe_button.onclick = subscribe; subscribe_button.onclick = subscribe;
subscribe_button.innerHTML = fallback; subscribe_button.innerHTML = fallback;
} }
}); }
} }
function unsubscribe() { xhr.onerror = function () {
var fallback = subscribe_button.innerHTML; console.log('Subscribing failed... ' + retries + '/5');
subscribe_button.onclick = subscribe; setTimeout(function () { subscribe(retries - 1) }, 1000);
subscribe_button.innerHTML = '<b>' + subscribe_data.subscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>'; }
xhr.ontimeout = function () {
console.log('Subscribing failed... ' + retries + '/5');
subscribe(retries - 1);
}
xhr.send('csrf_token=' + subscribe_data.csrf_token);
}
function unsubscribe(retries = 5) {
if (retries <= 0) {
console.log('Failed to subscribe');
return;
}
var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' + var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
'&c=' + subscribe_data.ucid; '&c=' + subscribe_data.ucid;
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var fallback = subscribe_button.innerHTML;
subscribe_button.onclick = subscribe;
subscribe_button.innerHTML = '<b>' + subscribe_data.subscribe_text + ' | ' + subscribe_data.sub_count_text + '</b>';
helpers.xhr('POST', url, {payload: payload, retries: 5, entity_name: 'unsubscribe request'}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
if (xhr.status != 200) {
subscribe_button.onclick = unsubscribe; subscribe_button.onclick = unsubscribe;
subscribe_button.innerHTML = fallback; subscribe_button.innerHTML = fallback;
} }
}); }
}
xhr.onerror = function () {
console.log('Unsubscribing failed... ' + retries + '/5');
setTimeout(function () { unsubscribe(retries - 1) }, 1000);
}
xhr.ontimeout = function () {
console.log('Unsubscribing failed... ' + retries + '/5');
unsubscribe(retries - 1);
}
xhr.send('csrf_token=' + subscribe_data.csrf_token);
} }

@ -1,46 +1,91 @@
'use strict';
var toggle_theme = document.getElementById('toggle_theme'); var toggle_theme = document.getElementById('toggle_theme');
toggle_theme.href = 'javascript:void(0)'; toggle_theme.href = 'javascript:void(0);';
const STORAGE_KEY_THEME = 'dark_mode';
const THEME_DARK = 'dark';
const THEME_LIGHT = 'light';
// TODO: theme state controlled by system
toggle_theme.addEventListener('click', function () { toggle_theme.addEventListener('click', function () {
const isDarkTheme = helpers.storage.get(STORAGE_KEY_THEME) === THEME_DARK; var dark_mode = document.body.classList.contains("light-theme");
const newTheme = isDarkTheme ? THEME_LIGHT : THEME_DARK;
setTheme(newTheme); var url = '/toggle_theme?redirect=false';
helpers.storage.set(STORAGE_KEY_THEME, newTheme); var xhr = new XMLHttpRequest();
helpers.xhr('GET', '/toggle_theme?redirect=false', {}, {}); xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('GET', url, true);
set_mode(dark_mode);
try {
window.localStorage.setItem('dark_mode', dark_mode ? 'dark' : 'light');
} catch {}
xhr.send();
}); });
/** @param {THEME_DARK|THEME_LIGHT} theme */ window.addEventListener('storage', function (e) {
function setTheme(theme) { if (e.key === 'dark_mode') {
// By default body element has .no-theme class that uses OS theme via CSS @media rules update_mode(e.newValue);
// It rewrites using hard className below
if (theme === THEME_DARK) {
toggle_theme.children[0].className = 'icon ion-ios-sunny';
document.body.className = 'dark-theme';
} else if (theme === THEME_LIGHT) {
toggle_theme.children[0].className = 'icon ion-ios-moon';
document.body.className = 'light-theme';
} else {
document.body.className = 'no-theme';
}
} }
});
// Handles theme change event caused by other tab window.addEventListener('DOMContentLoaded', function () {
addEventListener('storage', function (e) { const dark_mode = document.getElementById('dark_mode_pref').textContent;
if (e.key === STORAGE_KEY_THEME) try {
setTheme(helpers.storage.get(STORAGE_KEY_THEME)); // Update localStorage if dark mode preference changed on preferences page
window.localStorage.setItem('dark_mode', dark_mode);
} catch {}
update_mode(dark_mode);
}); });
// Set theme from preferences on page load
addEventListener('DOMContentLoaded', function () { var darkScheme = window.matchMedia('(prefers-color-scheme: dark)');
const prefTheme = document.getElementById('dark_mode_pref').textContent; var lightScheme = window.matchMedia('(prefers-color-scheme: light)');
if (prefTheme) {
setTheme(prefTheme); darkScheme.addListener(scheme_switch);
helpers.storage.set(STORAGE_KEY_THEME, prefTheme); lightScheme.addListener(scheme_switch);
function scheme_switch (e) {
// ignore this method if we have a preference set
try {
if (localStorage.getItem('dark_mode')) {
return;
} }
}); } catch {}
if (e.matches) {
if (e.media.includes("dark")) {
set_mode(true);
} else if (e.media.includes("light")) {
set_mode(false);
}
}
}
function set_mode (bool) {
if (bool) {
// dark
toggle_theme.children[0].setAttribute('class', 'icon ion-ios-sunny');
document.body.classList.remove('no-theme');
document.body.classList.remove('light-theme');
document.body.classList.add('dark-theme');
} else {
// light
toggle_theme.children[0].setAttribute('class', 'icon ion-ios-moon');
document.body.classList.remove('no-theme');
document.body.classList.remove('dark-theme');
document.body.classList.add('light-theme');
}
}
function update_mode (mode) {
if (mode === 'true' /* for backwards compatibility */ || mode === 'dark') {
// If preference for dark mode indicated
set_mode(true);
}
else if (mode === 'false' /* for backwards compatibility */ || mode === 'light') {
// If preference for light mode indicated
set_mode(false);
}
else if (document.getElementById('dark_mode_pref').textContent === '' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// If no preference indicated here and no preference indicated on the preferences page (backend), but the browser tells us that the operating system has a dark theme
set_mode(true);
}
// else do nothing, falling back to the mode defined by the `dark_mode` preference on the preferences page (backend)
}

@ -1,35 +1,32 @@
'use strict'; var video_data = JSON.parse(document.getElementById('video_data').innerHTML);
var video_data = JSON.parse(document.getElementById('video_data').textContent);
var spinnerHTML = '<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var spinnerHTMLwithHR = spinnerHTML + '<hr>';
String.prototype.supplant = function (o) { String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g, function (a, b) { return this.replace(/{([^{}]*)}/g, function (a, b) {
var r = o[b]; var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a; return typeof r === 'string' || typeof r === 'number' ? r : a;
}); });
}; }
function toggle_parent(target) { function toggle_parent(target) {
var body = target.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.children[1];
if (body.style.display === 'none') { if (body.style.display === null || body.style.display === '') {
target.textContent = '[ ]'; target.innerHTML = '[ + ]';
body.style.display = '';
} else {
target.textContent = '[ + ]';
body.style.display = 'none'; body.style.display = 'none';
} else {
target.innerHTML = '[ - ]';
body.style.display = '';
} }
} }
function toggle_comments(event) { function toggle_comments(event) {
var target = event.target; var target = event.target;
var body = target.parentNode.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.parentNode.children[1];
if (body.style.display === 'none') { if (body.style.display === null || body.style.display === '') {
target.textContent = '[ ]'; target.innerHTML = '[ + ]';
body.style.display = '';
} else {
target.textContent = '[ + ]';
body.style.display = 'none'; body.style.display = 'none';
} else {
target.innerHTML = '[ - ]';
body.style.display = '';
} }
} }
@ -46,13 +43,13 @@ function swap_comments(event) {
function hide_youtube_replies(event) { function hide_youtube_replies(event) {
var target = event.target; var target = event.target;
var sub_text = target.getAttribute('data-inner-text'); sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text'); inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.children[1];
body.style.display = 'none'; body.style.display = 'none';
target.textContent = sub_text; target.innerHTML = sub_text;
target.onclick = show_youtube_replies; target.onclick = show_youtube_replies;
target.setAttribute('data-inner-text', inner_text); target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text); target.setAttribute('data-sub-text', sub_text);
@ -61,13 +58,13 @@ function hide_youtube_replies(event) {
function show_youtube_replies(event) { function show_youtube_replies(event) {
var target = event.target; var target = event.target;
var sub_text = target.getAttribute('data-inner-text'); sub_text = target.getAttribute('data-inner-text');
var inner_text = target.getAttribute('data-sub-text'); inner_text = target.getAttribute('data-sub-text');
var body = target.parentNode.parentNode.children[1]; body = target.parentNode.parentNode.children[1];
body.style.display = ''; body.style.display = '';
target.textContent = sub_text; target.innerHTML = sub_text;
target.onclick = hide_youtube_replies; target.onclick = hide_youtube_replies;
target.setAttribute('data-inner-text', inner_text); target.setAttribute('data-inner-text', inner_text);
target.setAttribute('data-sub-text', sub_text); target.setAttribute('data-sub-text', sub_text);
@ -81,104 +78,165 @@ if (continue_button) {
function next_video() { function next_video() {
var url = new URL('https://example.com/watch?v=' + video_data.next_video); var url = new URL('https://example.com/watch?v=' + video_data.next_video);
if (video_data.params.autoplay || video_data.params.continue_autoplay) if (video_data.params.autoplay || video_data.params.continue_autoplay) {
url.searchParams.set('autoplay', '1'); url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen) }
if (video_data.params.listen !== video_data.preferences.listen) {
url.searchParams.set('listen', video_data.params.listen); url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed) }
if (video_data.params.speed !== video_data.preferences.speed) {
url.searchParams.set('speed', video_data.params.speed); url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local) }
if (video_data.params.local !== video_data.preferences.local) {
url.searchParams.set('local', video_data.params.local); url.searchParams.set('local', video_data.params.local);
url.searchParams.set('continue', '1'); }
url.searchParams.set('continue', '1');
location.assign(url.pathname + url.search); location.assign(url.pathname + url.search);
} }
function continue_autoplay(event) { function continue_autoplay(event) {
if (event.target.checked) { if (event.target.checked) {
player.on('ended', next_video); player.on('ended', function () {
next_video();
});
} else { } else {
player.off('ended'); player.off('ended');
} }
} }
function get_playlist(plid) { function number_with_separator(val) {
var playlist = document.getElementById('playlist'); while (/(\d+)(\d{3})/.test(val.toString())) {
val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
}
return val;
}
function get_playlist(plid, retries) {
if (retries == undefined) retries = 5;
playlist = document.getElementById('playlist');
if (retries <= 0) {
console.log('Failed to pull playlist');
playlist.innerHTML = '';
return;
}
playlist.innerHTML = spinnerHTMLwithHR; playlist.innerHTML = ' \
<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3> \
<hr>'
var plid_url;
if (plid.startsWith('RD')) { if (plid.startsWith('RD')) {
plid_url = '/api/v1/mixes/' + plid + var plid_url = '/api/v1/mixes/' + plid +
'?continuation=' + video_data.id + '?continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale; '&format=html&hl=' + video_data.preferences.locale;
} else { } else {
plid_url = '/api/v1/playlists/' + plid + var plid_url = '/api/v1/playlists/' + plid +
'?index=' + video_data.index + '?index=' + video_data.index +
'&continuation=' + video_data.id + '&continuation=' + video_data.id +
'&format=html&hl=' + video_data.preferences.locale; '&format=html&hl=' + video_data.preferences.locale;
} }
helpers.xhr('GET', plid_url, {retries: 5, entity_name: 'playlist'}, { var xhr = new XMLHttpRequest();
on200: function (response) { xhr.responseType = 'json';
playlist.innerHTML = response.playlistHtml; xhr.timeout = 10000;
xhr.open('GET', plid_url, true);
if (!response.nextVideo) return; xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var nextVideo = document.getElementById(response.nextVideo); if (xhr.status == 200) {
playlist.innerHTML = xhr.response.playlistHtml;
var nextVideo = document.getElementById(xhr.response.nextVideo);
nextVideo.parentNode.parentNode.scrollTop = nextVideo.offsetTop; nextVideo.parentNode.parentNode.scrollTop = nextVideo.offsetTop;
if (xhr.response.nextVideo) {
player.on('ended', function () { player.on('ended', function () {
var url = new URL('https://example.com/watch?v=' + response.nextVideo); var url = new URL('https://example.com/watch?v=' + xhr.response.nextVideo);
url.searchParams.set('list', plid); url.searchParams.set('list', plid);
if (!plid.startsWith('RD')) if (!plid.startsWith('RD')) {
url.searchParams.set('index', response.index); url.searchParams.set('index', xhr.response.index);
if (video_data.params.autoplay || video_data.params.continue_autoplay) }
if (video_data.params.autoplay || video_data.params.continue_autoplay) {
url.searchParams.set('autoplay', '1'); url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen) }
if (video_data.params.listen !== video_data.preferences.listen) {
url.searchParams.set('listen', video_data.params.listen); url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed) }
if (video_data.params.speed !== video_data.preferences.speed) {
url.searchParams.set('speed', video_data.params.speed); url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local) }
if (video_data.params.local !== video_data.preferences.local) {
url.searchParams.set('local', video_data.params.local); url.searchParams.set('local', video_data.params.local);
}
location.assign(url.pathname + url.search); location.assign(url.pathname + url.search);
}); });
}, }
onNon200: function (xhr) { } else {
playlist.innerHTML = ''; playlist.innerHTML = '';
document.getElementById('continue').style.display = ''; document.getElementById('continue').style.display = '';
},
onError: function (xhr) {
playlist.innerHTML = spinnerHTMLwithHR;
},
onTimeout: function (xhr) {
playlist.innerHTML = spinnerHTMLwithHR;
} }
}); }
}
xhr.onerror = function () {
playlist = document.getElementById('playlist');
playlist.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3><hr>';
console.log('Pulling playlist timed out... ' + retries + '/5');
setTimeout(function () { get_playlist(plid, retries - 1) }, 1000);
}
xhr.ontimeout = function () {
playlist = document.getElementById('playlist');
playlist.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3><hr>';
console.log('Pulling playlist timed out... ' + retries + '/5');
get_playlist(plid, retries - 1);
}
xhr.send();
} }
function get_reddit_comments() { function get_reddit_comments(retries) {
var comments = document.getElementById('comments'); if (retries == undefined) retries = 5;
comments = document.getElementById('comments');
if (retries <= 0) {
console.log('Failed to pull comments');
comments.innerHTML = '';
return;
}
var fallback = comments.innerHTML; var fallback = comments.innerHTML;
comments.innerHTML = spinnerHTML; comments.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var url = '/api/v1/comments/' + video_data.id + var url = '/api/v1/comments/' + video_data.id +
'?source=reddit&format=html' + '?source=reddit&format=html' +
'&hl=' + video_data.preferences.locale; '&hl=' + video_data.preferences.locale;
var xhr = new XMLHttpRequest();
var onNon200 = function (xhr) { comments.innerHTML = fallback; }; xhr.responseType = 'json';
if (video_data.params.comments[1] === 'youtube') xhr.timeout = 10000;
onNon200 = function (xhr) {}; xhr.open('GET', url, true);
helpers.xhr('GET', url, {retries: 5, entity_name: ''}, { xhr.onreadystatechange = function () {
on200: function (response) { if (xhr.readyState == 4) {
if (xhr.status == 200) {
comments.innerHTML = ' \ comments.innerHTML = ' \
<div> \ <div> \
<h3> \ <h3> \
<a href="javascript:void(0)">[ ]</a> \ <a href="javascript:void(0)">[ - ]</a> \
{title} \ {title} \
</h3> \ </h3> \
<p> \ <p> \
@ -194,41 +252,69 @@ function get_reddit_comments() {
</div> \ </div> \
<div>{contentHtml}</div> \ <div>{contentHtml}</div> \
<hr>'.supplant({ <hr>'.supplant({
title: response.title, title: xhr.response.title,
youtubeCommentsText: video_data.youtube_comments_text, youtubeCommentsText: video_data.youtube_comments_text,
redditPermalinkText: video_data.reddit_permalink_text, redditPermalinkText: video_data.reddit_permalink_text,
permalink: response.permalink, permalink: xhr.response.permalink,
contentHtml: response.contentHtml contentHtml: xhr.response.contentHtml
}); });
comments.children[0].children[0].children[0].onclick = toggle_comments; comments.children[0].children[0].children[0].onclick = toggle_comments;
comments.children[0].children[1].children[0].onclick = swap_comments; comments.children[0].children[1].children[0].onclick = swap_comments;
}, } else {
onNon200: onNon200, // declared above if (video_data.params.comments[1] === 'youtube') {
}); console.log('Pulling comments failed... ' + retries + '/5');
setTimeout(function () { get_youtube_comments(retries - 1) }, 1000);
} else {
comments.innerHTML = fallback;
}
}
}
}
xhr.onerror = function () {
console.log('Pulling comments failed... ' + retries + '/5');
setTimeout(function () { get_reddit_comments(retries - 1) }, 1000);
} }
function get_youtube_comments() { xhr.ontimeout = function () {
var comments = document.getElementById('comments'); console.log('Pulling comments failed... ' + retries + '/5');
get_reddit_comments(retries - 1);
}
xhr.send();
}
function get_youtube_comments(retries) {
if (retries == undefined) retries = 5;
comments = document.getElementById('comments');
if (retries <= 0) {
console.log('Failed to pull comments');
comments.innerHTML = '';
return;
}
var fallback = comments.innerHTML; var fallback = comments.innerHTML;
comments.innerHTML = spinnerHTML; comments.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var url = '/api/v1/comments/' + video_data.id + var url = '/api/v1/comments/' + video_data.id +
'?format=html' + '?format=html' +
'&hl=' + video_data.preferences.locale + '&hl=' + video_data.preferences.locale +
'&thin_mode=' + video_data.preferences.thin_mode; '&thin_mode=' + video_data.preferences.thin_mode;
var xhr = new XMLHttpRequest();
var onNon200 = function (xhr) { comments.innerHTML = fallback; }; xhr.responseType = 'json';
if (video_data.params.comments[1] === 'youtube') xhr.timeout = 10000;
onNon200 = function (xhr) {}; xhr.open('GET', url, true);
helpers.xhr('GET', url, {retries: 5, entity_name: 'comments'}, { xhr.onreadystatechange = function () {
on200: function (response) { if (xhr.readyState == 4) {
if (xhr.status == 200) {
comments.innerHTML = ' \ comments.innerHTML = ' \
<div> \ <div> \
<h3> \ <h3> \
<a href="javascript:void(0)">[ ]</a> \ <a href="javascript:void(0)">[ - ]</a> \
{commentsText} \ {commentsText} \
</h3> \ </h3> \
<b> \ <b> \
@ -239,28 +325,40 @@ function get_youtube_comments() {
</div> \ </div> \
<div>{contentHtml}</div> \ <div>{contentHtml}</div> \
<hr>'.supplant({ <hr>'.supplant({
contentHtml: response.contentHtml, contentHtml: xhr.response.contentHtml,
redditComments: video_data.reddit_comments_text, redditComments: video_data.reddit_comments_text,
commentsText: video_data.comments_text.supplant({ commentsText: video_data.comments_text.supplant(
// toLocaleString correctly splits number with local thousands separator. e.g.: { commentCount: number_with_separator(xhr.response.commentCount) }
// '1,234,567.89' for user with English locale )
// '1 234 567,89' for user with Russian locale
// '1.234.567,89' for user with Portuguese locale
commentCount: response.commentCount.toLocaleString()
})
}); });
comments.children[0].children[0].children[0].onclick = toggle_comments; comments.children[0].children[0].children[0].onclick = toggle_comments;
comments.children[0].children[1].children[0].onclick = swap_comments; comments.children[0].children[1].children[0].onclick = swap_comments;
}, } else {
onNon200: onNon200, // declared above if (video_data.params.comments[1] === 'youtube') {
onError: function (xhr) { setTimeout(function () { get_youtube_comments(retries - 1) }, 1000);
comments.innerHTML = spinnerHTML; } else {
}, comments.innerHTML = '';
onTimeout: function (xhr) { }
comments.innerHTML = spinnerHTML; }
} }
}); }
xhr.onerror = function () {
comments.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
console.log('Pulling comments failed... ' + retries + '/5');
setTimeout(function () { get_youtube_comments(retries - 1) }, 1000);
}
xhr.ontimeout = function () {
comments.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
console.log('Pulling comments failed... ' + retries + '/5');
get_youtube_comments(retries - 1);
}
xhr.send();
} }
function get_youtube_replies(target, load_more, load_replies) { function get_youtube_replies(target, load_more, load_replies) {
@ -268,21 +366,29 @@ function get_youtube_replies(target, load_more, load_replies) {
var body = target.parentNode.parentNode; var body = target.parentNode.parentNode;
var fallback = body.innerHTML; var fallback = body.innerHTML;
body.innerHTML = spinnerHTML; body.innerHTML =
'<h3 style="text-align:center"><div class="loading"><i class="icon ion-ios-refresh"></i></div></h3>';
var url = '/api/v1/comments/' + video_data.id + var url = '/api/v1/comments/' + video_data.id +
'?format=html' + '?format=html' +
'&hl=' + video_data.preferences.locale + '&hl=' + video_data.preferences.locale +
'&thin_mode=' + video_data.preferences.thin_mode + '&thin_mode=' + video_data.preferences.thin_mode +
'&continuation=' + continuation; '&continuation=' + continuation
if (load_replies) url += '&action=action_get_comment_replies'; if (load_replies) {
url += '&action=action_get_comment_replies';
helpers.xhr('GET', url, {}, { }
on200: function (response) { var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
if (load_more) { if (load_more) {
body = body.parentNode.parentNode; body = body.parentNode.parentNode;
body.removeChild(body.lastElementChild); body.removeChild(body.lastElementChild);
body.insertAdjacentHTML('beforeend', response.contentHtml); body.innerHTML += xhr.response.contentHtml;
} else { } else {
body.removeChild(body.lastElementChild); body.removeChild(body.lastElementChild);
@ -294,46 +400,57 @@ function get_youtube_replies(target, load_more, load_replies) {
a.onclick = hide_youtube_replies; a.onclick = hide_youtube_replies;
a.setAttribute('data-sub-text', video_data.hide_replies_text); a.setAttribute('data-sub-text', video_data.hide_replies_text);
a.setAttribute('data-inner-text', video_data.show_replies_text); a.setAttribute('data-inner-text', video_data.show_replies_text);
a.textContent = video_data.hide_replies_text; a.innerText = video_data.hide_replies_text;
var div = document.createElement('div'); var div = document.createElement('div');
div.innerHTML = response.contentHtml; div.innerHTML = xhr.response.contentHtml;
body.appendChild(p); body.appendChild(p);
body.appendChild(div); body.appendChild(div);
} }
}, } else {
onNon200: function (xhr) {
body.innerHTML = fallback; body.innerHTML = fallback;
}, }
onTimeout: function (xhr) { }
console.warn('Pulling comments failed'); }
xhr.ontimeout = function () {
console.log('Pulling comments failed.');
body.innerHTML = fallback; body.innerHTML = fallback;
} }
});
xhr.send();
} }
if (video_data.play_next) { if (video_data.play_next) {
player.on('ended', function () { player.on('ended', function () {
var url = new URL('https://example.com/watch?v=' + video_data.next_video); var url = new URL('https://example.com/watch?v=' + video_data.next_video);
if (video_data.params.autoplay || video_data.params.continue_autoplay) if (video_data.params.autoplay || video_data.params.continue_autoplay) {
url.searchParams.set('autoplay', '1'); url.searchParams.set('autoplay', '1');
if (video_data.params.listen !== video_data.preferences.listen) }
if (video_data.params.listen !== video_data.preferences.listen) {
url.searchParams.set('listen', video_data.params.listen); url.searchParams.set('listen', video_data.params.listen);
if (video_data.params.speed !== video_data.preferences.speed) }
if (video_data.params.speed !== video_data.preferences.speed) {
url.searchParams.set('speed', video_data.params.speed); url.searchParams.set('speed', video_data.params.speed);
if (video_data.params.local !== video_data.preferences.local) }
if (video_data.params.local !== video_data.preferences.local) {
url.searchParams.set('local', video_data.params.local); url.searchParams.set('local', video_data.params.local);
url.searchParams.set('continue', '1'); }
url.searchParams.set('continue', '1');
location.assign(url.pathname + url.search); location.assign(url.pathname + url.search);
}); });
} }
addEventListener('load', function (e) { window.addEventListener('load', function (e) {
if (video_data.plid) if (video_data.plid) {
get_playlist(video_data.plid); get_playlist(video_data.plid);
}
if (video_data.params.comments[0] === 'youtube') { if (video_data.params.comments[0] === 'youtube') {
get_youtube_comments(); get_youtube_comments();
@ -344,7 +461,7 @@ addEventListener('load', function (e) {
} else if (video_data.params.comments[1] === 'reddit') { } else if (video_data.params.comments[1] === 'reddit') {
get_reddit_comments(); get_reddit_comments();
} else { } else {
var comments = document.getElementById('comments'); comments = document.getElementById('comments');
comments.innerHTML = ''; comments.innerHTML = '';
} }
}); });

@ -1,24 +0,0 @@
'use strict';
var save_player_pos_key = 'save_player_pos';
function get_all_video_times() {
return helpers.storage.get(save_player_pos_key) || {};
}
document.querySelectorAll('.watched-indicator').forEach(function (indicator) {
var watched_part = get_all_video_times()[indicator.dataset.id];
var total = parseInt(indicator.dataset.length, 10);
if (watched_part === undefined) {
watched_part = total;
}
var percentage = Math.round((watched_part / total) * 100);
if (percentage < 5) {
percentage = 5;
}
if (percentage > 90) {
percentage = 100;
}
indicator.style.width = percentage + '%';
});

@ -1,6 +1,4 @@
'use strict'; var watched_data = JSON.parse(document.getElementById('watched_data').innerHTML);
var watched_data = JSON.parse(document.getElementById('watched_data').textContent);
var payload = 'csrf_token=' + watched_data.csrf_token;
function mark_watched(target) { function mark_watched(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode; var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
@ -8,27 +6,45 @@ function mark_watched(target) {
var url = '/watch_ajax?action_mark_watched=1&redirect=false' + var url = '/watch_ajax?action_mark_watched=1&redirect=false' +
'&id=' + target.getAttribute('data-id'); '&id=' + target.getAttribute('data-id');
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
helpers.xhr('POST', url, {payload: payload}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
if (xhr.status != 200) {
tile.style.display = ''; tile.style.display = '';
} }
}); }
}
xhr.send('csrf_token=' + watched_data.csrf_token);
} }
function mark_unwatched(target) { function mark_unwatched(target) {
var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode; var tile = target.parentNode.parentNode.parentNode.parentNode.parentNode;
tile.style.display = 'none'; tile.style.display = 'none';
var count = document.getElementById('count'); var count = document.getElementById('count')
count.textContent--; count.innerText = count.innerText - 1;
var url = '/watch_ajax?action_mark_unwatched=1&redirect=false' + var url = '/watch_ajax?action_mark_unwatched=1&redirect=false' +
'&id=' + target.getAttribute('data-id'); '&id=' + target.getAttribute('data-id');
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.timeout = 10000;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
helpers.xhr('POST', url, {payload: payload}, { xhr.onreadystatechange = function () {
onNon200: function (xhr) { if (xhr.readyState == 4) {
count.textContent++; if (xhr.status != 200) {
count.innerText = count.innerText - 1 + 2;
tile.style.display = ''; tile.style.display = '';
} }
}); }
}
xhr.send('csrf_token=' + watched_data.csrf_token);
} }

@ -255,7 +255,8 @@ https_only: false
#registration_enabled: true #registration_enabled: true
## ##
## Allow/Forbid users to log-in. ## Allow/Forbid users to log-in. This setting affects the ability
## to connect with BOTH Google and Invidious (local) accounts.
## ##
## Accepted values: true, false ## Accepted values: true, false
## Default: true ## Default: true
@ -294,17 +295,6 @@ https_only: false
## ##
#admins: [""] #admins: [""]
##
## Enable/Disable the user notifications for all users
##
## Note: On large instances, it is recommended to set this option to 'false'
## in order to reduce the amount of data written to the database, and hence
## improve the overall performance of the instance.
##
## Accepted values: true, false
## Default: true
##
#enable_user_notifications: true
# ----------------------------- # -----------------------------
# Background jobs # Background jobs
@ -314,8 +304,10 @@ https_only: false
## Number of threads to use when crawling channel videos (during ## Number of threads to use when crawling channel videos (during
## subscriptions update). ## subscriptions update).
## ##
## Notes: This setting is overridden if either "-c THREADS" or ## Notes:
## "--channel-threads=THREADS" is passed on the command line. ## - Setting this to 0 will disable the channel videos crawl job.
## - This setting is overridden if "-c THREADS" or
## "--channel-threads=THREADS" are passed on the command line.
## ##
## Accepted values: a positive integer ## Accepted values: a positive integer
## Default: 1 ## Default: 1
@ -343,8 +335,10 @@ full_refresh: false
## ##
## Number of threads to use when updating RSS feeds. ## Number of threads to use when updating RSS feeds.
## ##
## Notes: This setting is overridden if either "-f THREADS" or ## Notes:
## "--feed-threads=THREADS" is passed on the command line. ## - Setting this to 0 will disable the channel videos crawl job.
## - This setting is overridden if "-f THREADS" or
## "--feed-threads=THREADS" are passed on the command line.
## ##
## Accepted values: a positive integer ## Accepted values: a positive integer
## Default: 1 ## Default: 1
@ -355,49 +349,13 @@ feed_threads: 1
## Enable/Disable the polling job that keeps the decryption ## Enable/Disable the polling job that keeps the decryption
## function (for "secured" videos) up to date. ## function (for "secured" videos) up to date.
## ##
## Note: This part of the code generate a small amount of data every minute. ## Note: This part of the code is currently broken, so changing
## This may not be desired if you have bandwidth limits set by your ISP.
##
## Note 2: This part of the code is currently broken, so changing
## this setting has no impact. ## this setting has no impact.
## ##
## Accepted values: true, false ## Accepted values: true, false
## Default: false
##
#decrypt_polling: false
jobs:
## Options for the database cleaning job
clear_expired_items:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true ## Default: true
## ##
enable: true #decrypt_polling: true
## Options for the channels updater job
refresh_channels:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true
##
enable: true
## Options for the RSS feeds updater job
refresh_feeds:
## Enable/Disable job
##
## Accepted values: true, false
## Default: true
##
enable: true
# ----------------------------- # -----------------------------
@ -492,13 +450,7 @@ jobs:
## ##
#modified_source_code_url: "" #modified_source_code_url: ""
##
## Maximum custom playlist length limit.
##
## Accepted values: Integer
## Default: 500
##
#playlist_length_limit: 500
######################################### #########################################
# #
@ -623,10 +575,10 @@ default_user_preferences:
## ##
## Enable/Disable dark mode. ## Enable/Disable dark mode.
## ##
## Accepted values: "dark", "light", "auto" ## Accepted values: true, false
## Default: "auto" ## Default: <none>
## ##
#dark_mode: "auto" #dark_mode:
## ##
## Enable/Disable thin mode (no video thumbnails). ## Enable/Disable thin mode (no video thumbnails).
@ -817,16 +769,6 @@ default_user_preferences:
## ##
#vr_mode: true #vr_mode: true
##
## Save the playback position
## Allow to continue watching at the previous position when
## watching the same video.
##
## Accepted values: true, false
## Default: false
##
#save_player_pos: false
# ----------------------------- # -----------------------------
# Subscription feed # Subscription feed
# ----------------------------- # -----------------------------

@ -2,7 +2,7 @@
# Using it will build an image from the locally cloned repository. # Using it will build an image from the locally cloned repository.
# #
# If you want to use Invidious in production, see the docker-compose.yml file provided # If you want to use Invidious in production, see the docker-compose.yml file provided
# in the installation documentation: https://docs.invidious.io/installation/ # in the installation documentation: https://docs.invidious.io/Installation.md
version: "3" version: "3"
services: services:
@ -39,7 +39,7 @@ services:
- invidious-db - invidious-db
invidious-db: invidious-db:
image: docker.io/library/postgres:13 image: docker.io/library/postgres:14
restart: unless-stopped restart: unless-stopped
volumes: volumes:
- postgresdata:/var/lib/postgresql/data - postgresdata:/var/lib/postgresql/data

@ -1,8 +1,7 @@
FROM crystallang/crystal:1.4.1-alpine AS builder FROM crystallang/crystal:1.2.2-alpine AS builder
RUN apk add --no-cache sqlite-static yaml-static RUN apk add --no-cache sqlite-static yaml-static
ARG release ARG release
ARG disable_quic
WORKDIR /invidious WORKDIR /invidious
COPY ./shard.yml ./shard.yml COPY ./shard.yml ./shard.yml
@ -24,13 +23,7 @@ COPY ./videojs-dependencies.yml ./videojs-dependencies.yml
RUN crystal spec --warnings all \ RUN crystal spec --warnings all \
--link-flags "-lxml2 -llzma" --link-flags "-lxml2 -llzma"
RUN if [[ "${release}" == 1 && "${disable_quic}" == 1 ]] ; then \ RUN if [ "${release}" == 1 ] ; then \
crystal build ./src/invidious.cr \
--release \
-Ddisable_quic \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
elif [[ "${release}" == 1 ]] ; then \
crystal build ./src/invidious.cr \ crystal build ./src/invidious.cr \
--release \ --release \
--static --warnings all \ --static --warnings all \
@ -42,14 +35,14 @@ RUN if [[ "${release}" == 1 && "${disable_quic}" == 1 ]] ; then \
fi fi
FROM alpine:3.16 FROM alpine:latest
RUN apk add --no-cache librsvg ttf-opensans tini RUN apk add --no-cache librsvg ttf-opensans
WORKDIR /invidious WORKDIR /invidious
RUN addgroup -g 1000 -S invidious && \ RUN addgroup -g 1000 -S invidious && \
adduser -u 1000 -S invidious -G invidious adduser -u 1000 -S invidious -G invidious
COPY --chown=invidious ./config/config.* ./config/ COPY --chown=invidious ./config/config.* ./config/
RUN mv -n config/config.example.yml config/config.yml RUN mv -n config/config.example.yml config/config.yml
RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: invidious-db/' config/config.yml RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: postgres/' config/config.yml
COPY ./config/sql/ ./config/sql/ COPY ./config/sql/ ./config/sql/
COPY ./locales/ ./locales/ COPY ./locales/ ./locales/
COPY --from=builder /invidious/assets ./assets/ COPY --from=builder /invidious/assets ./assets/
@ -58,5 +51,4 @@ RUN chmod o+rX -R ./assets ./config ./locales
EXPOSE 3000 EXPOSE 3000
USER invidious USER invidious
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "/invidious/invidious" ] CMD [ "/invidious/invidious" ]

@ -1,8 +1,7 @@
FROM alpine:3.16 AS builder FROM alpine:3.15 AS builder
RUN apk add --no-cache 'crystal=1.4.1-r0' shards sqlite-static yaml-static yaml-dev libxml2-dev zlib-static openssl-libs-static openssl-dev musl-dev RUN apk add --no-cache 'crystal=1.2.2-r0' shards sqlite-static yaml-static yaml-dev libxml2-dev zlib-static openssl-libs-static openssl-dev musl-dev
ARG release ARG release
ARG disable_quic
WORKDIR /invidious WORKDIR /invidious
COPY ./shard.yml ./shard.yml COPY ./shard.yml ./shard.yml
@ -24,13 +23,7 @@ COPY ./videojs-dependencies.yml ./videojs-dependencies.yml
RUN crystal spec --warnings all \ RUN crystal spec --warnings all \
--link-flags "-lxml2 -llzma" --link-flags "-lxml2 -llzma"
RUN if [[ "${release}" == 1 && "${disable_quic}" == 1 ]] ; then \ RUN if [ ${release} == 1 ] ; then \
crystal build ./src/invidious.cr \
--release \
-Ddisable_quic \
--static --warnings all \
--link-flags "-lxml2 -llzma"; \
elif [[ "${release}" == 1 ]] ; then \
crystal build ./src/invidious.cr \ crystal build ./src/invidious.cr \
--release \ --release \
--static --warnings all \ --static --warnings all \
@ -41,14 +34,14 @@ RUN if [[ "${release}" == 1 && "${disable_quic}" == 1 ]] ; then \
--link-flags "-lxml2 -llzma"; \ --link-flags "-lxml2 -llzma"; \
fi fi
FROM alpine:3.16 FROM alpine:3.15
RUN apk add --no-cache librsvg ttf-opensans tini RUN apk add --no-cache librsvg ttf-opensans
WORKDIR /invidious WORKDIR /invidious
RUN addgroup -g 1000 -S invidious && \ RUN addgroup -g 1000 -S invidious && \
adduser -u 1000 -S invidious -G invidious adduser -u 1000 -S invidious -G invidious
COPY --chown=invidious ./config/config.* ./config/ COPY --chown=invidious ./config/config.* ./config/
RUN mv -n config/config.example.yml config/config.yml RUN mv -n config/config.example.yml config/config.yml
RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: invidious-db/' config/config.yml RUN sed -i 's/host: \(127.0.0.1\|localhost\)/host: postgres/' config/config.yml
COPY ./config/sql/ ./config/sql/ COPY ./config/sql/ ./config/sql/
COPY ./locales/ ./locales/ COPY ./locales/ ./locales/
COPY --from=builder /invidious/assets ./assets/ COPY --from=builder /invidious/assets ./assets/
@ -57,5 +50,4 @@ RUN chmod o+rX -R ./assets ./config ./locales
EXPOSE 3000 EXPOSE 3000
USER invidious USER invidious
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "/invidious/invidious" ] CMD [ "/invidious/invidious" ]

@ -1,6 +1,6 @@
dependencies: dependencies:
- name: postgresql - name: postgresql
repository: https://charts.bitnami.com/bitnami/ repository: https://kubernetes-charts.storage.googleapis.com/
version: 12.1.9 version: 8.3.0
digest: sha256:71ff342a6c0a98bece3d7fe199983afb2113f8db65a3e3819de875af2c45add7 digest: sha256:1feec3c396cbf27573dc201831ccd3376a4a6b58b2e7618ce30a89b8f5d707fd
generated: "2023-01-20T20:42:32.757707004Z" generated: "2020-02-07T13:39:38.624846+01:00"

@ -1,7 +1,7 @@
apiVersion: v2 apiVersion: v2
name: invidious name: invidious
description: Invidious is an alternative front-end to YouTube description: Invidious is an alternative front-end to YouTube
version: 1.1.1 version: 1.1.0
appVersion: 0.20.1 appVersion: 0.20.1
keywords: keywords:
- youtube - youtube
@ -17,6 +17,6 @@ maintainers:
email: mail@leonklingele.de email: mail@leonklingele.de
dependencies: dependencies:
- name: postgresql - name: postgresql
version: ~12.1.6 version: ~8.3.0
repository: "https://charts.bitnami.com/bitnami/" repository: "https://kubernetes-charts.storage.googleapis.com/"
engine: gotpl engine: gotpl

@ -14,7 +14,7 @@ autoscaling:
targetCPUUtilizationPercentage: 50 targetCPUUtilizationPercentage: 50
service: service:
type: ClusterIP type: clusterIP
port: 3000 port: 3000
#loadBalancerIP: #loadBalancerIP:
@ -32,19 +32,14 @@ securityContext:
runAsGroup: 1000 runAsGroup: 1000
fsGroup: 1000 fsGroup: 1000
# See https://github.com/bitnami/charts/tree/master/bitnami/postgresql # See https://github.com/helm/charts/tree/master/stable/postgresql
postgresql: postgresql:
image: postgresqlUsername: kemal
tag: 13 postgresqlPassword: kemal
auth: postgresqlDatabase: invidious
username: kemal initdbUsername: kemal
password: kemal initdbPassword: kemal
database: invidious initdbScriptsConfigMap: invidious-postgresql-init
primary:
initdb:
username: kemal
password: kemal
scriptsConfigMap: invidious-postgresql-init
# Adapted from ../config/config.yml # Adapted from ../config/config.yml
config: config:

@ -1,11 +1,11 @@
{ {
"LIVE": "مُباشِر", "LIVE": "مُباشِر",
"Shared `x` ago": "تمَّ الرفع مُنذ `x`", "Shared `x` ago": "تمَّ رفع المقطع المرئيّ مُنذ `x`",
"Unsubscribe": "إلغاء الاشتراك", "Unsubscribe": "إلغاء الاشتراك",
"Subscribe": "الاشتراك", "Subscribe": "الإشتراك",
"View channel on YouTube": "زيارة القناة على يوتيوب", "View channel on YouTube": "زيارة القناة على موقع يوتيوب",
"View playlist on YouTube": "عرض قائمة التشغيل على يوتيوب", "View playlist on YouTube": "عرض قائمة التشغيل على اليوتيوب",
"newest": "الأحدث", "newest": "الأجدد",
"oldest": "الأقدم", "oldest": "الأقدم",
"popular": "الأكثر شعبية", "popular": "الأكثر شعبية",
"last": "الأخيرة", "last": "الأخيرة",
@ -14,21 +14,22 @@
"Clear watch history?": "هل تريد محو سجل المشاهدة؟", "Clear watch history?": "هل تريد محو سجل المشاهدة؟",
"New password": "كلمة مرور جديدة", "New password": "كلمة مرور جديدة",
"New passwords must match": "يَجبُ أن تكون كلمتا المرور متطابقتين", "New passwords must match": "يَجبُ أن تكون كلمتا المرور متطابقتين",
"Cannot change password for Google accounts": "لا يُمكن تغيير كلمة المرور لِحسابات جوجل",
"Authorize token?": "رمز التفويض؟", "Authorize token?": "رمز التفويض؟",
"Authorize token for `x`?": "السماح بالرمز المميز ل 'x'؟", "Authorize token for `x`?": "السماح بالرمز المميز ل 'x'؟",
"Yes": "نعم", "Yes": "نعم",
"No": "لا", "No": "لا",
"Import and Export Data": "اِستيراد البيانات وتصديرها", "Import and Export Data": "اِستيراد البيانات وتصديرها",
"Import": "استيراد", "Import": "استيراد",
"Import Invidious data": "استيراد بيانات JSON Invidious", "Import Invidious data": "استيراد بيانات انفيدياس",
"Import YouTube subscriptions": "استيراد اشتراكات YouTube/OPML", "Import YouTube subscriptions": "استيراد اشتراكات يوتيوب",
"Import FreeTube subscriptions (.db)": "استيراد اشتراكات فريتيوب (.db)", "Import FreeTube subscriptions (.db)": "استيراد اشتراكات فريتيوب (.db)",
"Import NewPipe subscriptions (.json)": "استيراد اشتراكات نيو بايب (.json)", "Import NewPipe subscriptions (.json)": "استيراد اشتراكات نيو بايب (.json)",
"Import NewPipe data (.zip)": "استيراد بيانات نيو بايب (.zip)", "Import NewPipe data (.zip)": "استيراد بيانات نيو بايب (.zip)",
"Export": "تصدير", "Export": "تصدير",
"Export subscriptions as OPML": "تصدير الاشتراكات كـOPML", "Export subscriptions as OPML": "تصدير الاشتراكات كـOPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "تصدير الاشتراكات كـOPML (لِنيو بايب و فريتيوب)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "تصدير الاشتراكات كـOPML (لِنيو بايب و فريتيوب)",
"Export data as JSON": "تصدير بيانات Invidious كـ JSON", "Export data as JSON": "تصدير البيانات بتنسيق JSON",
"Delete account?": "حذف الحساب؟", "Delete account?": "حذف الحساب؟",
"History": "السِّجل", "History": "السِّجل",
"An alternative front-end to YouTube": "واجهة أمامية بديلة لموقع يوتيوب", "An alternative front-end to YouTube": "واجهة أمامية بديلة لموقع يوتيوب",
@ -36,6 +37,7 @@
"source": "المصدر", "source": "المصدر",
"Log in": "تسجيل الدخول", "Log in": "تسجيل الدخول",
"Log in/register": "تسجيل الدخول \\ إنشاء حساب", "Log in/register": "تسجيل الدخول \\ إنشاء حساب",
"Log in with Google": "تسجيل الدخول باستخدام جوجل",
"User ID": "مُعرِّف المُستخدم", "User ID": "مُعرِّف المُستخدم",
"Password": "كلمة المرور", "Password": "كلمة المرور",
"Time (h:mm:ss):": "الوقت (h:mm:ss):", "Time (h:mm:ss):": "الوقت (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "تسجيل الدخول", "Sign In": "تسجيل الدخول",
"Register": "التسجيل", "Register": "التسجيل",
"E-mail": "البريد الإلكتروني", "E-mail": "البريد الإلكتروني",
"Google verification code": "رمز تحقق جوجل",
"Preferences": "الإعدادات", "Preferences": "الإعدادات",
"preferences_category_player": "إعدادات المُشغِّل", "preferences_category_player": "إعدادات المُشغِّل",
"preferences_video_loop_label": "كرر المقطع المرئيّ دائما: ", "preferences_video_loop_label": "كرر المقطع المرئيّ دائما: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "اعرض الفيديوهات ذات الصلة: ", "preferences_related_videos_label": "اعرض الفيديوهات ذات الصلة: ",
"preferences_annotations_label": "اعرض الملاحظات في الفيديو تلقائيا: ", "preferences_annotations_label": "اعرض الملاحظات في الفيديو تلقائيا: ",
"preferences_extend_desc_label": "توسيع وصف الفيديو تلقائيا: ", "preferences_extend_desc_label": "توسيع وصف الفيديو تلقائيا: ",
"preferences_vr_mode_label": "مقاطع فيديو تفاعلية بزاوية 360 درجة (تتطلب WebGL): ", "preferences_vr_mode_label": "مقاطع فيديو تفاعلية ب درجة 360: ",
"preferences_category_visual": "التفضيلات المرئية", "preferences_category_visual": "التفضيلات المرئية",
"preferences_player_style_label": "شكل مشغل الفيديوهات: ", "preferences_player_style_label": "شكل مشغل الفيديوهات: ",
"Dark mode: ": "الوضع الليلي: ", "Dark mode: ": "الوضع الليلي: ",
@ -93,8 +96,8 @@
"`x` is live": "`x` في بث مباشر", "`x` is live": "`x` في بث مباشر",
"preferences_category_data": "إعدادات التفضيلات", "preferences_category_data": "إعدادات التفضيلات",
"Clear watch history": "حذف سجل المشاهدة", "Clear watch history": "حذف سجل المشاهدة",
"Import/export data": ستيراد و تصدير البيانات", "Import/export data": ضافة\\استخراج البيانات",
"Change password": "تغير كلمة السر", "Change password": "غير كلمة السر",
"Manage subscriptions": "إدارة الاشتراكات", "Manage subscriptions": "إدارة الاشتراكات",
"Manage tokens": "إدارة الرموز", "Manage tokens": "إدارة الرموز",
"Watch history": "سجل المشاهدة", "Watch history": "سجل المشاهدة",
@ -105,9 +108,9 @@
"preferences_show_nick_label": "إظهار اللقب في الأعلى: ", "preferences_show_nick_label": "إظهار اللقب في الأعلى: ",
"Top enabled: ": "تفعيل 'الأفضل' ؟ ", "Top enabled: ": "تفعيل 'الأفضل' ؟ ",
"CAPTCHA enabled: ": "تفعيل الكابتشا: ", "CAPTCHA enabled: ": "تفعيل الكابتشا: ",
"Login enabled: ": مكين تسجيل الدخول: ", "Login enabled: ": فعيل الولوج: ",
"Registration enabled: ": "تفعيل التسجيل: ", "Registration enabled: ": "تفعيل التسجيل: ",
"Report statistics: ": "تقرير الإحصائيات: ", "Report statistics: ": "الإبلاغ عن الإحصائيات: ",
"Save preferences": "حفظ الإعدادات", "Save preferences": "حفظ الإعدادات",
"Subscription manager": "مدير الاشتراكات", "Subscription manager": "مدير الاشتراكات",
"Token manager": "إداره الرمز", "Token manager": "إداره الرمز",
@ -118,7 +121,7 @@
"Subscriptions": "الاشتراكات", "Subscriptions": "الاشتراكات",
"search": "بحث", "search": "بحث",
"Log out": "تسجيل الخروج", "Log out": "تسجيل الخروج",
"Released under the AGPLv3 on Github.": "صدر تحت AGPLv3 على GitHub.", "Released under the AGPLv3 on Github.": "صدر تحت AGPLv3 على Github.",
"Source available here.": "الأكواد متوفرة هنا.", "Source available here.": "الأكواد متوفرة هنا.",
"View JavaScript license information.": "مشاهدة معلومات حول تراخيص الجافاسكريبت.", "View JavaScript license information.": "مشاهدة معلومات حول تراخيص الجافاسكريبت.",
"View privacy policy.": "عرض سياسة الخصوصية.", "View privacy policy.": "عرض سياسة الخصوصية.",
@ -134,39 +137,45 @@
"Title": "العنوان", "Title": "العنوان",
"Playlist privacy": "إعدادات الخصوصية", "Playlist privacy": "إعدادات الخصوصية",
"Editing playlist `x`": "تعديل قائمة التشغيل `x`", "Editing playlist `x`": "تعديل قائمة التشغيل `x`",
"Show more": "عرض المزيد", "Show more": "إظهار المزيد",
"Show less": "عرض اقل", "Show less": "عرض اقل",
"Watch on YouTube": "مشاهدة الفيديو على اليوتيوب", "Watch on YouTube": "مشاهدة الفيديو على اليوتيوب",
"Switch Invidious Instance": "تبديل المثيل Invidious", "Switch Invidious Instance": "تبديل المثيل Invidious",
"Broken? Try another Invidious Instance": "معطل؟ جرب مثيل Invidious آخر",
"Hide annotations": "إخفاء الملاحظات في الفيديو", "Hide annotations": "إخفاء الملاحظات في الفيديو",
"Show annotations": "عرض الملاحظات في الفيديو", "Show annotations": "عرض الملاحظات في الفيديو",
"Genre: ": "النوع: ", "Genre: ": "النوع: ",
"License: ": "التراخيص: ", "License: ": "التراخيص: ",
"Family friendly? ": "محتوى عائلي؟ ", "Family friendly? ": "محتوى عائلي؟ ",
"Wilson score: ": "درجة ويلسون: ", "Wilson score: ": "درجة ويلسون: ",
"Engagement: ": "نسبة التفاعل: ", "Engagement: ": "نسبة المشاركة: ",
"Whitelisted regions: ": "الدول المسموح فيها هذا الفيديو: ", "Whitelisted regions: ": "الدول المسموح فيها هذا الفيديو: ",
"Blacklisted regions: ": "الدول المحظور فيها هذا الفيديو: ", "Blacklisted regions: ": "الدول المحظور فيها هذا الفيديو: ",
"Shared `x`": "تمت المشاركة في `x`", "Shared `x`": "شارك منذ `x`",
"Premieres in `x`": "يعرض فى `x`", "Premieres in `x`": "يعرض فى `x`",
"Premieres `x`": "يعرض `x`", "Premieres `x`": "يعرض `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "أهلًا! يبدو أن جافاسكريبت معطلٌ لديك. اضغط هنا لعرض التعليقات، وَضَع في اعتبارك أنها ستأخذ وقتًا أطول للتحميل.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "أهلًا! يبدو أن جافاسكريبت معطلٌ لديك. اضغط هنا لعرض التعليقات، وَضَع في اعتبارك أنها ستأخذ وقتًا أطول للتحميل.",
"View YouTube comments": "عرض تعليقات اليوتيوب", "View YouTube comments": "عرض تعليقات اليوتيوب",
"View more comments on Reddit": "عرض المزيد من التعليقات على\\من موقع ريديت", "View more comments on Reddit": "عرض المزيد من التعليقات على\\من موقع Reddit",
"View `x` comments": { "View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "عرض `x` تعليقات", "([^.,0-9]|^)1([^.,0-9]|$)": "عرض `x` تعليقات",
"": "عرض `x` تعليقات" "": "عرض `x` تعليقات"
}, },
"View Reddit comments": "عرض تعليقات ريديت", "View Reddit comments": "عرض تعليقات ريدإت Reddit",
"Hide replies": "إخفاء الردود", "Hide replies": "إخفاء الردود",
"Show replies": "عرض الردود", "Show replies": "عرض الردود",
"Incorrect password": "كلمة السر غير صحيحة", "Incorrect password": "كلمة السر غير صحيحة",
"Quota exceeded, try again in a few hours": "تم تجاوز عدد المرات المسموح بها، حاول مجددًا بعد بضع ساعات",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "غير قادر على تسجيل الدخول، تأكد من تشغيل المصادقة الثنائية 2FA.",
"Invalid TFA code": "كود مصادقة ثنائية 2FA غير صحيح",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "فشل تسجيل الدخول. قد يكون هذا بسبب أن المصادقة الثنائية 2FA معطلة في حسابك.",
"Wrong answer": "إجابة خاطئة", "Wrong answer": "إجابة خاطئة",
"Erroneous CAPTCHA": "الكابتشا CAPTCHA غير صاحلة", "Erroneous CAPTCHA": "الكابتشا CAPTCHA غير صاحلة",
"CAPTCHA is a required field": "مكان الكابتشا CAPTCHA مطلوب", "CAPTCHA is a required field": "مكان الكابتشا CAPTCHA مطلوب",
"User ID is a required field": "مكان اسم المستخدم مطلوب", "User ID is a required field": "مكان اسم المستخدم مطلوب",
"Password is a required field": "مكان كلمة السر مطلوب", "Password is a required field": "مكان كلمة السر مطلوب",
"Wrong username or password": "اسم المستخدم او كلمة السر غير صحيح", "Wrong username or password": "اسم المستخدم او كلمة السر غير صحيح",
"Please sign in using 'Log in with Google'": "الرجاء تسجيل الدخول 'تسجيل الدخول بواسطة جوجل'",
"Password cannot be empty": "لا يمكن أن تكون كلمة السر فارغة", "Password cannot be empty": "لا يمكن أن تكون كلمة السر فارغة",
"Password cannot be longer than 55 characters": "يجب أن لا تتعدى كلمة السر 55 حرفًا", "Password cannot be longer than 55 characters": "يجب أن لا تتعدى كلمة السر 55 حرفًا",
"Please log in": "الرجاء تسجيل الدخول", "Please log in": "الرجاء تسجيل الدخول",
@ -174,20 +183,20 @@
"channel:`x`": "قناة:`x`", "channel:`x`": "قناة:`x`",
"Deleted or invalid channel": "قناة ممسوحة او غير صالحة", "Deleted or invalid channel": "قناة ممسوحة او غير صالحة",
"This channel does not exist.": "هذه القناة غير موجودة.", "This channel does not exist.": "هذه القناة غير موجودة.",
"Could not get channel info.": "لم يتمكن الحصول على معلومات القناة.", "Could not get channel info.": "لم يستطع الحصول على معلومات القناة.",
"Could not fetch comments": ا يتمكن إحضار التعليقات", "Could not fetch comments": م يتمكن من إحضار التعليقات",
"`x` ago": "`x` منذ", "`x` ago": "`x` منذ",
"Load more": "تحميل المزيد", "Load more": "عرض المزيد",
"Could not create mix.": "تعذر إنشاء مزيج.", "Could not create mix.": "لم يستطع عمل خلط.",
"Empty playlist": "قائمة التشغيل فارغة", "Empty playlist": "قائمة التشغيل فارغة",
"Not a playlist.": "قائمة التشغيل غير صالحة.", "Not a playlist.": "قائمة التشغيل غير صالحة.",
"Playlist does not exist.": "قائمة التشغيل غير موجودة.", "Playlist does not exist.": "قائمة التشغيل غير موجودة.",
"Could not pull trending pages.": ا يتمكن عرض الصفحات الراجئة.", "Could not pull trending pages.": م يستطع عرض الصفحات الراجئة.",
"Hidden field \"challenge\" is a required field": "الحقل المخفي \"تحدي\" حقل مطلوب", "Hidden field \"challenge\" is a required field": "مكان مخفي \"تحدي\" مكان مطلوب",
"Hidden field \"token\" is a required field": "الحقل المخفي \"رمز\" حقل مطلوب", "Hidden field \"token\" is a required field": "مكان مخفي \"رمز\" مكان مطلوب",
"Erroneous challenge": "تحدي خاطئ", "Erroneous challenge": "تحدي غير صالح",
"Erroneous token": مز مميز خاطئ", "Erroneous token": وز غير صالح",
"No such user": "مستخدم غير موجود", "No such user": "مستخدم غير صالح",
"Token is expired, please try again": "الرمز منتهى الصلاحية، الرجاء المحاولة مرة اخرى", "Token is expired, please try again": "الرمز منتهى الصلاحية، الرجاء المحاولة مرة اخرى",
"English": "إنجليزي", "English": "إنجليزي",
"English (auto-generated)": "إنجليزي (تم إنشائه تلقائيًا)", "English (auto-generated)": "إنجليزي (تم إنشائه تلقائيًا)",
@ -317,50 +326,51 @@
"`x` marked it with a ❤": "`x` أعجب بهذا", "`x` marked it with a ❤": "`x` أعجب بهذا",
"Audio mode": "الوضع الصوتي", "Audio mode": "الوضع الصوتي",
"Video mode": "وضع الفيديو", "Video mode": "وضع الفيديو",
"channel_tab_videos_label": "الفيديوهات", "Videos": "الفيديوهات",
"Playlists": "قوائم التشغيل", "Playlists": "قوائم التشغيل",
"channel_tab_community_label": "المجتمع", "Community": "المجتمع",
"search_filters_sort_option_relevance": "ملائمة", "relevance": "ملاؤم",
"search_filters_sort_option_rating": "تقييم", "rating": "تقييم",
"search_filters_sort_option_date": "التاريخ", "date": "التاريخ",
"search_filters_sort_option_views": "مشاهدات", "views": "مشاهدات",
"search_filters_type_label": "نوع المحتوى", "content_type": "نوع المحتوى",
"search_filters_duration_label": "المدة", "duration": "المدة الزمنية",
"search_filters_features_label": "الميزات", "features": "الميزات",
"search_filters_sort_label": "فرز", "sort": "فرز",
"search_filters_date_option_hour": "آخر ساعة", "hour": "ساعة",
"search_filters_date_option_today": "اليوم", "today": "اليوم",
"search_filters_date_option_week": "هذا الأسبوع", "week": "هذا الأسبوع",
"search_filters_date_option_month": "هذا الشهر", "month": "هذا الشهر",
"search_filters_date_option_year": "هذه السنة", "year": "هذه السنة",
"search_filters_type_option_video": "فيديو", "video": "فيديو",
"search_filters_type_option_channel": "قناة", "channel": "قناة",
"search_filters_type_option_playlist": "قائمة التشغيل", "playlist": "قائمة التشغيل",
"search_filters_type_option_movie": "فيلم", "movie": "فيلم",
"search_filters_type_option_show": "عرض", "show": "عرض",
"search_filters_features_option_hd": "عالية الدقة", "hd": "عالية الدقة",
"search_filters_features_option_subtitles": "ترجمات", "subtitles": "ترجمات",
"search_filters_features_option_c_commons": "المشاع الإبداعي", "creative_commons": "المشاع الإبداعي",
"search_filters_features_option_three_d": "ثلاثي الأبعاد", "3d": "ثلاثي الأبعاد",
"search_filters_features_option_live": "مباشر", "live": "مباشر",
"search_filters_features_option_four_k": "4K", "4k": "4k",
"search_filters_features_option_location": "المكان", "location": "الأماكن",
"search_filters_features_option_hdr": "وضع التباين العالي", "hdr": "وضع التباين العالي",
"filter": "معامل الفرز",
"Current version: ": "الإصدار الحالي: ", "Current version: ": "الإصدار الحالي: ",
"next_steps_error_message": "بعد ذلك يجب أن تحاول: ", "next_steps_error_message": "بعد ذلك يجب أن تحاول: ",
"next_steps_error_message_refresh": "تحديث", "next_steps_error_message_refresh": "تحديث",
"next_steps_error_message_go_to_youtube": "انتقل إلى يوتيوب", "next_steps_error_message_go_to_youtube": "انتقل إلى يوتيوب",
"search_filters_duration_option_short": "قصير (< 4 دقائق)", "short": "قصير (< 4 دقائق)",
"search_filters_duration_option_long": "طويل (> 20 دقيقة)", "long": "طويل (> 20 دقيقة)",
"footer_source_code": "الكود المصدر", "footer_source_code": "شفرة المصدر",
"footer_original_source_code": "الكود المصدر الأصلي", "footer_original_source_code": "شفرة المصدر الأصلية",
"footer_modfied_source_code": "الكود المصدر المعدل", "footer_modfied_source_code": "شفرة المصدر المعدلة",
"adminprefs_modified_source_code_url_label": "URL إلى مستودع الكود المصدر المعدل", "adminprefs_modified_source_code_url_label": "URL إلى مستودع التعليمات البرمجية المصدرية المعدلة",
"footer_documentation": "التوثيق", "footer_documentation": "التوثيق",
"footer_donate_page": "تبرّع", "footer_donate_page": "تبرّع",
"preferences_region_label": "بلد المحتوى: ", "preferences_region_label": "بلد المحتوى: ",
"preferences_quality_dash_label": "جودة فيديو DASH المفضلة: ", "preferences_quality_dash_label": "جودة فيديو DASH المفضلة: ",
"preferences_quality_option_dash": "DASH (الجودة التلقائية)", "preferences_quality_option_dash": "DASH (جودة تكييفية)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "متوسطة", "preferences_quality_option_medium": "متوسطة",
"preferences_quality_option_small": "صغيرة", "preferences_quality_option_small": "صغيرة",
@ -376,7 +386,7 @@
"preferences_quality_dash_option_360p": "360p", "preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"search_filters_features_option_purchased": "تم شراؤها", "purchased": "تم شراؤها",
"none": "لاشيء", "none": "لاشيء",
"videoinfo_started_streaming_x_ago": "بدأ البث منذ `x`", "videoinfo_started_streaming_x_ago": "بدأ البث منذ `x`",
"videoinfo_watch_on_youTube": "مشاهدة على يوتيوب", "videoinfo_watch_on_youTube": "مشاهدة على يوتيوب",
@ -385,160 +395,39 @@
"user_created_playlists": "'x' إنشاء قوائم التشغيل", "user_created_playlists": "'x' إنشاء قوائم التشغيل",
"user_saved_playlists": "قوائم التشغيل المحفوظة 'x'", "user_saved_playlists": "قوائم التشغيل المحفوظة 'x'",
"Video unavailable": "الفيديو غير متوفر", "Video unavailable": "الفيديو غير متوفر",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"download_subtitles": "ترجمات - 'x' (.vtt)", "download_subtitles": "ترجمات - 'x' (.vtt)",
"invidious": "الخيالي", "invidious": "الخيالي",
"preferences_save_player_pos_label": "حفظ موضع التشغيل: ", "preferences_save_player_pos_label": "احفظ وقت الفيديو الحالي: ",
"crash_page_you_found_a_bug": "يبدو أنك قد وجدت خطأً برمجيًّا في Invidious!", "crash_page_you_found_a_bug": "يبدو أنك قد وجدت خطأً برمجيًّا في Invidious!",
"generic_videos_count_0": "لا يوجد فيديوهات", "generic_videos_count_0": "لا فيديوهات",
"generic_videos_count_1": "فيديو واحد", "generic_videos_count_1": "فيديو واحد",
"generic_videos_count_2": "فيديوهين", "generic_videos_count_2": "فيديوهين",
"generic_videos_count_3": "{{count}} فيديوهات", "generic_videos_count_3": "{{count}} فيديوهات",
"generic_videos_count_4": "{{count}} فيديو", "generic_videos_count_4": "{{count}} فيديو",
"generic_videos_count_5": "{{count}} فيديو", "generic_videos_count_5": "{{count}} فيديو",
"generic_subscribers_count_0": "لا يوجد مشترك", "generic_subscribers_count_0": "لا مشتركين",
"generic_subscribers_count_1": "مشترك واحد", "generic_subscribers_count_1": "مشترك واحد",
"generic_subscribers_count_2": "مشتركان", "generic_subscribers_count_2": "مشتركان",
"generic_subscribers_count_3": "{{count}} مشتركين", "generic_subscribers_count_3": "{{count}} مشتركين",
"generic_subscribers_count_4": "{{count}} مشترك", "generic_subscribers_count_4": "{{count}} مشترك",
"generic_subscribers_count_5": "{{count}} مشترك", "generic_subscribers_count_5": "{{count}} مشترك",
"generic_views_count_0": "لا يوجد مشاهدة", "generic_views_count_0": "لا مشاهدات",
"generic_views_count_1": "مشاهدة واحدة", "generic_views_count_1": "مشاهدة واحدة",
"generic_views_count_2": "مشاهدتان", "generic_views_count_2": "مشاهدتان",
"generic_views_count_3": "{{count}} مشاهدات", "generic_views_count_3": "{{count}} مشاهدات",
"generic_views_count_4": "{{count}} مشاهدة", "generic_views_count_4": "{{count}} مشاهدة",
"generic_views_count_5": "{{count}} مشاهدة", "generic_views_count_5": "{{count}} مشاهدة",
"generic_subscriptions_count_0": "لا يوجد اشتراك", "generic_subscriptions_count_0": "لا اشتراكات",
"generic_subscriptions_count_1": "اشتراك واحد", "generic_subscriptions_count_1": "اشتراك واحد",
"generic_subscriptions_count_2": "اشتراكان", "generic_subscriptions_count_2": "اشتراكان",
"generic_subscriptions_count_3": "{{count}} اشتراكات", "generic_subscriptions_count_3": "{{count}} اشتراكات",
"generic_subscriptions_count_4": "{{count}} اشتراك", "generic_subscriptions_count_4": "{{count}} اشتراك",
"generic_subscriptions_count_5": "{{count}} اشتراك", "generic_subscriptions_count_5": "{{count}} اشتراك",
"generic_playlists_count_0": "لا يوجد قوائم تشغيل", "generic_playlists_count_0": "لا قوائم تشغيل",
"generic_playlists_count_1": "قائمة تشغيل واحدة", "generic_playlists_count_1": "قائمة تشغيل واحدة",
"generic_playlists_count_2": "قائمتا تشغيل", "generic_playlists_count_2": "قائمتا تشغيل",
"generic_playlists_count_3": "{{count}} قوائم تشغيل", "generic_playlists_count_3": "{{count}} قوائم تشغيل",
"generic_playlists_count_4": "{{count}} قائمة تشغيل", "generic_playlists_count_4": "{{count}} قائمة تشغيل",
"generic_playlists_count_5": "{{count}} قائمة تشغيل", "generic_playlists_count_5": "{{count}} قائمة تشغيل"
"English (United States)": "الإنجليزية (الولايات المتحدة)",
"Indonesian (auto-generated)": "إندونيسي (مُنشأ تلقائيًا)",
"Interlingue": "إنترلينغوي",
"Italian (auto-generated)": "الإيطالية (مُنشأة تلقائيًا)",
"Spanish (auto-generated)": "الأسبانية (تم إنشاؤه تلقائيًا)",
"crash_page_before_reporting": "قبل الإبلاغ عن خطأ، تأكد من وجود:",
"French (auto-generated)": "الفرنسية (مُنشأة تلقائيًا)",
"Portuguese (auto-generated)": "البرتغالية (تم إنشاؤه تلقائيًا)",
"Turkish (auto-generated)": "التركية (تم إنشاؤها تلقائيًا)",
"crash_page_refresh": "حاول <a href=\"`x`\"> تحديث الصفحة </a>",
"crash_page_switch_instance": "حاول <a href=\"`x`\"> استخدام مثيل آخر </a>",
"Korean (auto-generated)": "كوري (تم إنشاؤه تلقائيًا)",
"Spanish (Mexico)": "الإسبانية (المكسيك)",
"Vietnamese (auto-generated)": "فيتنامي (تم إنشاؤه تلقائيًا)",
"crash_page_report_issue": "إذا لم يساعد أي مما سبق، يرجى فتح <a href=\"`x`\"> مشكلة جديدة على GitHub </a> (ويفضل أن يكون باللغة الإنجليزية) وتضمين النص التالي في رسالتك (لا تترجم هذا النص):",
"crash_page_read_the_faq": "قراءة <a href=\"`x`\"> الأسئلة المتكررة (الأسئلة الشائعة) </a>",
"preferences_watch_history_label": "تمكين سجل المشاهدة: ",
"English (United Kingdom)": "الإنجليزية (المملكة المتحدة)",
"Cantonese (Hong Kong)": "الكانتونية (هونغ كونغ)",
"Chinese": "الصينية",
"Chinese (China)": "الصينية (الصين)",
"Chinese (Hong Kong)": "الصينية (هونج كونج)",
"Chinese (Taiwan)": "الصينية (تايوان)",
"Dutch (auto-generated)": "هولندي (تم إنشاؤه تلقائيًا)",
"German (auto-generated)": "ألماني (تم إنشاؤه تلقائيًا)",
"Japanese (auto-generated)": "اليابانية (مُنشأة تلقائيًا)",
"Portuguese (Brazil)": "البرتغالية (البرازيل)",
"Russian (auto-generated)": "الروسية (منشأة تلقائيا)",
"Spanish (Spain)": "الإسبانية (إسبانيا)",
"crash_page_search_issue": "بحثت عن <a href=\"`x`\"> المشكلات الموجودة على GitHub </a>",
"search_filters_title": "معامل الفرز",
"search_message_no_results": "لا توجد نتائج.",
"search_message_change_filters_or_query": "حاول توسيع استعلام البحث و / أو تغيير عوامل التصفية.",
"search_filters_date_label": "تاريخ الرفع",
"generic_count_weeks_0": "{{count}} أسبوع",
"generic_count_weeks_1": "أسبوع واحد",
"generic_count_weeks_2": "أسبوعين",
"generic_count_weeks_3": "{{count}} أسابيع",
"generic_count_weeks_4": "{{count}} أسبوع",
"generic_count_weeks_5": "{{count}} أسبوع",
"Popular enabled: ": "تم تمكين الشعبية: ",
"search_filters_duration_option_medium": "متوسط (4-20 دقيقة)",
"search_filters_date_option_none": "أي تاريخ",
"search_filters_type_option_all": "أي نوع",
"search_filters_features_option_vr180": "VR180",
"generic_count_minutes_0": "{{count}} دقيقة",
"generic_count_minutes_1": "دقيقة واحدة",
"generic_count_minutes_2": "دقيقتين",
"generic_count_minutes_3": "{{count}} دقائق",
"generic_count_minutes_4": "{{count}} دقيقة",
"generic_count_minutes_5": "{{count}} دقيقة",
"generic_count_hours_0": "{{count}} ساعة",
"generic_count_hours_1": "ساعة واحدة",
"generic_count_hours_2": "ساعتين",
"generic_count_hours_3": "{{count}} ساعات",
"generic_count_hours_4": "{{count}} ساعة",
"generic_count_hours_5": "{{count}} ساعة",
"comments_view_x_replies_0": "عرض رد {{count}}",
"comments_view_x_replies_1": "عرض رد {{count}}",
"comments_view_x_replies_2": "عرض رد {{count}}",
"comments_view_x_replies_3": "عرض رد {{count}}",
"comments_view_x_replies_4": "عرض الردود {{count}}",
"comments_view_x_replies_5": "عرض رد {{count}}",
"search_message_use_another_instance": " يمكنك أيضًا البحث عن <a href=\"`x`\"> في مثيل آخر </a>.",
"comments_points_count_0": "{{count}} نقطة",
"comments_points_count_1": "نقطة واحدة",
"comments_points_count_2": "نقطتان",
"comments_points_count_3": "{{count}} نقط",
"comments_points_count_4": "{{count}} نقطة",
"comments_points_count_5": "{{count}} نقطة",
"generic_count_years_0": "{{count}} السنة",
"generic_count_years_1": "{{count}} السنة",
"generic_count_years_2": "{{count}} السنة",
"generic_count_years_3": "{{count}} السنة",
"generic_count_years_4": "{{count}} سنوات",
"generic_count_years_5": "{{count}} السنة",
"tokens_count_0": "الرمز المميز {{count}}",
"tokens_count_1": "الرمز المميز {{count}}",
"tokens_count_2": "الرمز المميز {{count}}",
"tokens_count_3": "الرمز المميز {{count}}",
"tokens_count_4": "الرموز المميزة {{count}}",
"tokens_count_5": "الرمز المميز {{count}}",
"search_filters_apply_button": "تطبيق الفلاتر المحددة",
"search_filters_duration_option_none": "أي مدة",
"subscriptions_unseen_notifs_count_0": "{{count}} إشعار جديد",
"subscriptions_unseen_notifs_count_1": "إشعار واحد جديد",
"subscriptions_unseen_notifs_count_2": "إشعارين جديدين",
"subscriptions_unseen_notifs_count_3": "{{count}} إشعارات جديدة",
"subscriptions_unseen_notifs_count_4": "{{count}} إشعارا جديد",
"subscriptions_unseen_notifs_count_5": "{{count}} إشعار جديد",
"generic_count_days_0": "{{count}} يوم",
"generic_count_days_1": "يوم واحد",
"generic_count_days_2": "يومين",
"generic_count_days_3": "{{count}} أيام",
"generic_count_days_4": "{{count}} يوم",
"generic_count_days_5": "{{count}} يوم",
"generic_count_months_0": "{{count}} شهر",
"generic_count_months_1": "{{count}} شهر",
"generic_count_months_2": "{{count}} شهر",
"generic_count_months_3": "{{count}} شهر",
"generic_count_months_4": "{{count}} شهور",
"generic_count_months_5": "{{count}} شهر",
"generic_count_seconds_0": "{{count}} ثانية",
"generic_count_seconds_1": "ثانية واحدة",
"generic_count_seconds_2": "ثانيتين",
"generic_count_seconds_3": "{{count}} ثوانٍ",
"generic_count_seconds_4": "{{count}} ثانية",
"generic_count_seconds_5": "{{count}} ثانية",
"error_video_not_in_playlist": "الفيديو المطلوب غير موجود في قائمة التشغيل هذه. <a href=\"`x`\"> انقر هنا للحصول على الصفحة الرئيسية لقائمة التشغيل. </a>",
"channel_tab_shorts_label": "الفيديوهات القصيرة",
"channel_tab_streams_label": "البث المباشر",
"channel_tab_playlists_label": "قوائم التشغيل",
"channel_tab_channels_label": "القنوات",
"Music in this video": "الموسيقى في هذا الفيديو",
"Album: ": "الألبوم: ",
"Artist: ": "الفنان: ",
"Song: ": "أغنية: ",
"Channel Sponsor": "راعي القناة",
"Standard YouTube license": "ترخيص YouTube القياسي",
"Download is disabled": "تم تعطيل التحميلات",
"Import YouTube playlist (.csv)": "استيراد قائمة تشغيل YouTube (.csv)"
} }

@ -1,94 +0,0 @@
{
"Subscribe": "সাবস্ক্রাইব",
"View channel on YouTube": "ইউটিউবে চ্যানেল দেখুন",
"View playlist on YouTube": "ইউটিউবে প্লেলিস্ট দেখুন",
"newest": "সর্ব-নতুন",
"oldest": "পুরানতম",
"popular": "জনপ্রিয়",
"last": "শেষটা",
"Next page": "পরের পৃষ্ঠা",
"Previous page": "আগের পৃষ্ঠা",
"Clear watch history?": "দেখার ইতিহাস সাফ করবেন?",
"New password": "নতুন পাসওয়ার্ড",
"New passwords must match": "নতুন পাসওয়ার্ড অবশ্যই মিলতে হবে",
"Authorize token?": "টোকেন অনুমোদন করবেন?",
"Authorize token for `x`?": "`x` -এর জন্য টোকেন অনুমোদন?",
"Yes": "হ্যাঁ",
"No": "না",
"Import and Export Data": "তথ্য আমদানি ও রপ্তানি",
"Import": "আমদানি",
"Import Invidious data": "ইনভিডিয়াস তথ্য আমদানি",
"Import YouTube subscriptions": "ইউটিউব সাবস্ক্রিপশন আনুন",
"Import FreeTube subscriptions (.db)": "ফ্রিটিউব সাবস্ক্রিপশন (.db) আনুন",
"Import NewPipe subscriptions (.json)": "নতুন পাইপ সাবস্ক্রিপশন আনুন (.json)",
"Import NewPipe data (.zip)": "নিউপাইপ তথ্য আনুন (.zip)",
"Export": "তথ্য বের করুন",
"Export subscriptions as OPML": "সাবস্ক্রিপশন OPML হিসাবে আনুন",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML-এ সাবস্ক্রিপশন বের করুন(নিউ পাইপ এবং ফ্রিউটিউব এর জন্য)",
"Export data as JSON": "JSON হিসাবে তথ্য বের করুন",
"Delete account?": "অ্যাকাউন্ট মুছে ফেলবেন?",
"History": "ইতিহাস",
"An alternative front-end to YouTube": "ইউটিউবের একটি বিকল্পস্বরূপ সম্মুখ-প্রান্ত",
"JavaScript license information": "জাভাস্ক্রিপ্ট লাইসেন্সের তথ্য",
"source": "সূত্র",
"Log in": "লগ ইন",
"Log in/register": "লগ ইন/রেজিস্টার",
"User ID": "ইউজার আইডি",
"Password": "পাসওয়ার্ড",
"Time (h:mm:ss):": "সময় (ঘণ্টা:মিনিট:সেকেন্ড):",
"Text CAPTCHA": "টেক্সট ক্যাপচা",
"Image CAPTCHA": "চিত্র ক্যাপচা",
"Sign In": "সাইন ইন",
"Register": "নিবন্ধন",
"E-mail": "ই-মেইল",
"Preferences": "পছন্দসমূহ",
"preferences_category_player": "প্লেয়ারের পছন্দসমূহ",
"preferences_video_loop_label": "সর্বদা লুপ: ",
"preferences_autoplay_label": "স্বয়ংক্রিয় চালু: ",
"preferences_continue_label": "ডিফল্টভাবে পরবর্তী চালাও: ",
"preferences_continue_autoplay_label": "পরবর্তী ভিডিও স্বয়ংক্রিয়ভাবে চালাও: ",
"preferences_listen_label": "সহজাতভাবে শোনো: ",
"preferences_local_label": "ভিডিও প্রক্সি করো: ",
"preferences_speed_label": "সহজাত গতি: ",
"preferences_quality_label": "পছন্দের ভিডিও মান: ",
"preferences_volume_label": "প্লেয়ার শব্দের মাত্রা: ",
"LIVE": "লাইভ",
"Shared `x` ago": "`x` আগে শেয়ার করা হয়েছে",
"Unsubscribe": "আনসাবস্ক্রাইব",
"generic_views_count": "{{count}}জন দেখেছে",
"generic_views_count_plural": "{{count}}জন দেখেছে",
"generic_videos_count": "{{count}}টি ভিডিও",
"generic_videos_count_plural": "{{count}}টি ভিডিও",
"generic_subscribers_count": "{{count}}জন অনুসরণকারী",
"generic_subscribers_count_plural": "{{count}}জন অনুসরণকারী",
"preferences_watch_history_label": "দেখার ইতিহাস চালু করো: ",
"preferences_quality_option_dash": "ড্যাশ (সময়োপযোগী মান)",
"preferences_quality_dash_option_auto": "স্বয়ংক্রিয়",
"preferences_quality_dash_option_best": "সেরা",
"preferences_quality_dash_option_worst": "মন্দতম",
"preferences_quality_dash_option_4320p": "৪৩২০পি",
"preferences_quality_dash_option_2160p": "২১৬০পি",
"preferences_quality_dash_option_1440p": "১৪৪০পি",
"preferences_quality_dash_option_480p": "৪৮০পি",
"preferences_quality_dash_option_360p": "৩৬০পি",
"preferences_quality_dash_option_240p": "২৪০পি",
"preferences_quality_dash_option_144p": "১৪৪পি",
"preferences_comments_label": "সহজাত মন্তব্য: ",
"youtube": "ইউটিউব",
"Fallback captions: ": "বিকল্প উপাখ্যান: ",
"preferences_related_videos_label": "সম্পর্কিত ভিডিও দেখাও: ",
"preferences_annotations_label": "সহজাতভাবে টীকা দেখাও ",
"preferences_quality_option_hd720": "উচ্চ৭২০",
"preferences_quality_dash_label": "পছন্দের ড্যাশ ভিডিও মান: ",
"preferences_captions_label": "সহজাত উপাখ্যান: ",
"generic_playlists_count": "{{count}}টি চালুতালিকা",
"generic_playlists_count_plural": "{{count}}টি চালুতালিকা",
"reddit": "রেডিট",
"invidious": "ইনভিডিয়াস",
"generic_subscriptions_count": "{{count}}টি অনুসরণ",
"generic_subscriptions_count_plural": "{{count}}টি অনুসরণ",
"preferences_quality_option_medium": "মধ্যম",
"preferences_quality_option_small": "ছোট",
"preferences_quality_dash_option_1080p": "১০৮০পি",
"preferences_quality_dash_option_720p": "৭২০পি"
}

@ -14,6 +14,7 @@
"Clear watch history?": "দেখার ইতিহাস সাফ করবেন?", "Clear watch history?": "দেখার ইতিহাস সাফ করবেন?",
"New password": "নতুন পাসওয়ার্ড", "New password": "নতুন পাসওয়ার্ড",
"New passwords must match": "নতুন পাসওয়ার্ড অবশ্যই মিলতে হবে", "New passwords must match": "নতুন পাসওয়ার্ড অবশ্যই মিলতে হবে",
"Cannot change password for Google accounts": "গুগল অ্যাকাউন্টগুলোর জন্য পাসওয়ার্ড পরিবর্তন করা যায় না",
"Authorize token?": "টোকেন অনুমোদন করবেন?", "Authorize token?": "টোকেন অনুমোদন করবেন?",
"Authorize token for `x`?": "`x` -এর জন্য টোকেন অনুমোদন?", "Authorize token for `x`?": "`x` -এর জন্য টোকেন অনুমোদন?",
"Yes": "হ্যাঁ", "Yes": "হ্যাঁ",
@ -36,6 +37,7 @@
"source": "সূত্র", "source": "সূত্র",
"Log in": "লগ ইন", "Log in": "লগ ইন",
"Log in/register": "লগ ইন/রেজিস্টার", "Log in/register": "লগ ইন/রেজিস্টার",
"Log in with Google": "গুগল দিয়ে লগ ইন করুন",
"User ID": "ইউজার আইডি", "User ID": "ইউজার আইডি",
"Password": "পাসওয়ার্ড", "Password": "পাসওয়ার্ড",
"Time (h:mm:ss):": "সময় (ঘণ্টা:মিনিট:সেকেন্ড):", "Time (h:mm:ss):": "সময় (ঘণ্টা:মিনিট:সেকেন্ড):",
@ -44,6 +46,7 @@
"Sign In": "সাইন ইন", "Sign In": "সাইন ইন",
"Register": "নিবন্ধন", "Register": "নিবন্ধন",
"E-mail": "ই-মেইল", "E-mail": "ই-মেইল",
"Google verification code": "গুগল যাচাইকরণ কোড",
"Preferences": "পছন্দসমূহ", "Preferences": "পছন্দসমূহ",
"preferences_category_player": "প্লেয়ারের পছন্দসমূহ", "preferences_category_player": "প্লেয়ারের পছন্দসমূহ",
"preferences_video_loop_label": "সর্বদা লুপ: ", "preferences_video_loop_label": "সর্বদা লুপ: ",

@ -4,6 +4,7 @@
"preferences_quality_label": "Qualitat de vídeo preferida: ", "preferences_quality_label": "Qualitat de vídeo preferida: ",
"newest": "més nou", "newest": "més nou",
"No": "No", "No": "No",
"Google verification code": "Codi de verificació de Google",
"User ID": "ID d'usuari", "User ID": "ID d'usuari",
"Preferences": "Preferències", "Preferences": "Preferències",
"Dark mode: ": "Mode fosc: ", "Dark mode: ": "Mode fosc: ",
@ -50,22 +51,22 @@
"Movies": "Películes", "Movies": "Películes",
"Download": "Descarrega", "Download": "Descarrega",
"Download as: ": "Descarrega com: ", "Download as: ": "Descarrega com: ",
"channel_tab_videos_label": "Vídeos", "Videos": "Vídeos",
"search_filters_type_label": "Tipus", "content_type": "Tipus",
"search_filters_duration_label": "Duració", "duration": "Duració",
"search_filters_sort_label": "Ordena per", "sort": "Ordena per",
"search_filters_date_option_week": "Aquesta setmana", "week": "Aquesta setmana",
"search_filters_date_option_month": "Aquest mes", "month": "Aquest mes",
"search_filters_date_option_year": "Aquest any", "year": "Aquest any",
"search_filters_type_option_video": "Vídeo", "video": "Vídeo",
"search_filters_type_option_channel": "Canal", "channel": "Canal",
"search_filters_duration_option_short": "Curt (< 4 minuts)", "short": "Curt (< 4 minuts)",
"search_filters_duration_option_long": "Llarg (> 20 minuts)", "long": "Llarg (> 20 minuts)",
"Current version: ": "Versió actual: ", "Current version: ": "Versió actual: ",
"Malay": "Malai", "Malay": "Malai",
"Persian": "Persa", "Persian": "Persa",
"Slovak": "Eslovac", "Slovak": "Eslovac",
"Search": "Cerca", "Search": "Busca",
"Show annotations": "Mostra anotacions", "Show annotations": "Mostra anotacions",
"preferences_region_label": "País del contingut: ", "preferences_region_label": "País del contingut: ",
"preferences_sort_label": "Ordena vídeos per: ", "preferences_sort_label": "Ordena vídeos per: ",
@ -74,7 +75,7 @@
"Title": "Títol", "Title": "Títol",
"Belarusian": "Bielorús", "Belarusian": "Bielorús",
"Enable web notifications": "Activa notificacions web", "Enable web notifications": "Activa notificacions web",
"search": "Cerca", "search": "busca",
"Catalan": "Català", "Catalan": "Català",
"Croatian": "Croat", "Croatian": "Croat",
"preferences_category_admin": "Preferències d'administrador", "preferences_category_admin": "Preferències d'administrador",
@ -92,388 +93,11 @@
"Spanish": "Castellà", "Spanish": "Castellà",
"Vietnamese": "Vietnamita", "Vietnamese": "Vietnamita",
"News": "Notícies", "News": "Notícies",
"search_filters_type_option_show": "Mostra", "show": "Mostra",
"footer_documentation": "Documentació", "footer_documentation": "Documentació",
"Thai": "Tailandès", "Thai": "Tailandès",
"Music": "Música", "Music": "Música",
"search_filters_sort_option_relevance": "Rellevància", "relevance": "Rellevància",
"search_filters_date_option_hour": "Última hora", "hour": "Última hora",
"search_filters_date_option_today": "Avui", "today": "Avui"
"preferences_volume_label": "Volum del reproductor: ",
"invidious": "Invidious",
"preferences_quality_dash_option_144p": "144p",
"Turkish (auto-generated)": "Turc (generat automàticament)",
"Urdu": "Urdú",
"Vietnamese (auto-generated)": "Vietnamita (generat automàticament)",
"Welsh": "Gal·lès",
"Yoruba": "Ioruba",
"YouTube comment permalink": "Enllaç permanent de comentari de YouTube",
"Channel Sponsor": "Patrocinador del canal",
"Audio mode": "Mode d'àudio",
"search_filters_date_option_none": "Qualsevol data",
"search_filters_type_option_playlist": "Llista de reproducció",
"search_filters_type_option_movie": "Pel·lícula",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_subtitles": "Subtítols/CC",
"search_filters_features_option_live": "Directe",
"search_filters_features_option_hd": "HD",
"search_filters_features_option_hdr": "HDR",
"search_filters_features_option_location": "Ubicació",
"search_filters_apply_button": "Aplica els filtres seleccionats",
"videoinfo_started_streaming_x_ago": "Ha començat el directe fa `x`",
"next_steps_error_message_go_to_youtube": "Vés a YouTube",
"footer_donate_page": "Feu un donatiu",
"footer_original_source_code": "Codi font original",
"videoinfo_watch_on_youTube": "Veure a YouTube",
"user_saved_playlists": "`x` llistes de reproducció guardades",
"adminprefs_modified_source_code_url_label": "URL al repositori de codi font modificat",
"none": "cap",
"footer_modfied_source_code": "Codi font modificat",
"videoinfo_invidious_embed_link": "Incrusta l'enllaç",
"download_subtitles": "Subtítols - `x` (.vtt)",
"user_created_playlists": "`x`llistes de reproducció creades",
"Video unavailable": "Vídeo no disponible",
"channel_tab_channels_label": "Canals",
"channel_tab_playlists_label": "Llistes de reproducció",
"channel_tab_community_label": "Comunitat",
"Czech": "Txec",
"Default": "Per defecte",
"Amharic": "Amàric",
"preferences_automatic_instance_redirect_label": "Redirecció automàtica d'instàncies (retorna a redirect.invidious.io): ",
"Login enabled: ": "Activa inici de sessió: ",
"Registration enabled: ": "Activa registre: ",
"Whitelisted regions: ": "Regions a la llista blanca: ",
"Chinese (Simplified)": "Xinès (Simplificat)",
"Corsican": "Cors",
"Estonian": "Estonià",
"Japanese (auto-generated)": "Japonès (generat automàticament)",
"English (United States)": "Anglès (Estats Units)",
"English (auto-generated)": "Anglès (generat automàticament)",
"Cebuano": "Cebuà",
"Esperanto": "Esperanto",
"Scottish Gaelic": "Gaèlic escocès",
"Playlists": "Llistes de reproducció",
"search_filters_title": "Filtres",
"search_filters_type_option_all": "Qualsevol tipus",
"search_filters_duration_option_none": "Qualsevol duració",
"next_steps_error_message": "Després d'això, hauríeu d'intentar: ",
"next_steps_error_message_refresh": "Recarregar la pàgina",
"crash_page_refresh": "ha intentat <a href=\"`x`\">actualitzar la pàgina</a>",
"crash_page_report_issue": "Si cap de les anteriors no ha ajudat, <a href=\"`x`\">obre un nou issue a GitHub</a> (preferiblement en anglès) i inclou el text següent al missatge (NO tradueixis aquest text):",
"generic_subscriptions_count": "{{count}} subscripció",
"generic_subscriptions_count_plural": "{{count}} subscripcions",
"error_video_not_in_playlist": "El vídeo sol·licitat no existeix en aquesta llista de reproducció. <a href=\"`x`\">Feu clic aquí per a la pàgina d'inici de la llista de reproducció.</a>",
"comments_points_count": "{{count}} punt",
"comments_points_count_plural": "{{count}} punts",
"%A %B %-d, %Y": "%A %B %-d, %Y",
"Create playlist": "Crear llista de reproducció",
"Text CAPTCHA": "Text CAPTCHA",
"Next page": "Pàgina següent",
"preferences_category_visual": "Preferències visuals",
"preferences_unseen_only_label": "Mostra només no vistos: ",
"preferences_listen_label": "Escolta per defecte: ",
"Import": "Importar",
"Token": "Testimoni",
"Wilson score: ": "Puntuació de Wilson: ",
"search_filters_date_label": "Data de càrrega",
"search_filters_features_option_three_sixty": "360°",
"source": "font",
"preferences_default_home_label": "Pàgina d'inici per defecte: ",
"preferences_comments_label": "Comentaris per defecte: ",
"`x` uploaded a video": "`x` ha penjat un vídeo",
"Released under the AGPLv3 on Github.": "Publicat sota l'AGPLv3 a GitHub.",
"Token manager": "Gestor de testimonis",
"Watch history": "Historial de reproduccions",
"Authorize token?": "Autoritzar testimoni?",
"Source available here.": "Font disponible aquí.",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exporta subscripcions com a OPML (per a NewPipe i FreeTube)",
"Log in": "Inicia sessió",
"search_filters_sort_option_date": "Data de càrrega",
"Unlisted": "No llistat",
"View privacy policy.": "Veure política de privadesa.",
"Public": "Públic",
"View all playlists": "Veure totes les llistes de reproducció",
"reddit": "Reddit",
"Manage tokens": "Gestiona testimonis",
"Not a playlist.": "No és una llista de reproducció.",
"preferences_local_label": "Vídeos de Proxy: ",
"View channel on YouTube": "Veure canal a Youtube",
"preferences_quality_dash_option_1080p": "1080p",
"Top enabled: ": "Activa top: ",
"Delete playlist `x`?": "Eliminar llista de reproducció `x`?",
"View JavaScript license information.": "Consulta la informació de la llicència de JavaScript.",
"Playlist privacy": "Privacitat de la llista de reproducció",
"search_message_no_results": "No s'han trobat resultats.",
"search_message_use_another_instance": " També es pot <a href=\"`x`\">buscar en una altra instància</a>.",
"Genre: ": "Gènere: ",
"Hidden field \"challenge\" is a required field": "El camp ocult \"repte\" és un camp obligatori",
"Burmese": "Birmà",
"View as playlist": "Mostra com a llista de reproducció",
"preferences_category_subscription": "Preferències de subscripció",
"Music in this video": "Música en aquest vídeo",
"Artist: ": "Artista: ",
"Album: ": "Àlbum: ",
"Shared `x`": "Compartit `x`",
"Premieres `x`": "Estrena `x`",
"View more comments on Reddit": "Veure més comentaris a Reddit",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "Veure `x` comentari",
"": "Veure `x` comentaris"
},
"View Reddit comments": "Veure comentaris de Reddit",
"Incorrect password": "Contrasenya incorrecta",
"Erroneous CAPTCHA": "CAPTCHA erroni",
"CAPTCHA is a required field": "El CAPTCHA és un camp obligatori",
"Korean (auto-generated)": "Coreà (generat automàticament)",
"Kyrgyz": "Kirguís",
"Latin": "Llatí",
"Malagasy": "Malgaix",
"Maori": "Maori",
"Marathi": "Marathi",
"Norwegian Bokmål": "Bokmål Noruec",
"Nyanja": "Nyanja",
"Portuguese (Brazil)": "Portuguès (Brazil)",
"Punjabi": "Panjabi",
"Russian (auto-generated)": "Rus (generat automàticament)",
"Samoan": "Samoà",
"Somali": "Somali",
"Southern Sotho": "Sesotho",
"Spanish (Mexico)": "Espanyol (Mèxic)",
"Spanish (Spain)": "Espanyol (Espanya)",
"Sundanese": "Sondanès",
"Swahili": "Suahili",
"Tamil": "Tàmil",
"Telugu": "Telugu",
"Zulu": "Zulu",
"generic_count_months": "{{count}} mes",
"generic_count_months_plural": "{{count}} mesos",
"generic_count_weeks": "{{count}} setmana",
"generic_count_weeks_plural": "{{count}} setmanes",
"About": "Sobre",
"`x` marked it with a ❤": "`x`marca'l amb un ❤",
"Video mode": "Mode de vídeo",
"search_filters_features_label": "Característiques",
"search_filters_features_option_c_commons": "Creative Commons",
"search_filters_features_option_vr180": "VR180",
"search_filters_features_option_three_d": "3D",
"search_filters_features_option_purchased": "Comprat",
"Chinese (Hong Kong)": "Xinès (Hong Kong)",
"Chinese (Taiwan)": "Xinès (Taiwan)",
"Hmong": "Hmong",
"Kazakh": "Kazakh",
"Igbo": "Igbo",
"Javanese": "Javanès",
"Indonesian (auto-generated)": "Indonesi (generat automàticament)",
"Interlingue": "Interlingüe",
"Khmer": "Khmer",
"This channel does not exist.": "Aquest canal no existeix.",
"Song: ": "Cançó: ",
"channel:`x`": "canal: `x`",
"Deleted or invalid channel": "Canal suprimit o no vàlid",
"Could not get channel info.": "No s'ha pogut obtenir la informació del canal.",
"Could not pull trending pages.": "No s'han pogut extreure les pàgines de tendència.",
"comments_view_x_replies": "Veure {{count}} resposta",
"comments_view_x_replies_plural": "Veure {{count}} respostes",
"Subscriptions": "Subscripcions",
"generic_count_seconds": "{{count}} segon",
"generic_count_seconds_plural": "{{count}} segons",
"channel_tab_shorts_label": "Vídeos curts",
"preferences_save_player_pos_label": "Desa la posició de reproducció: ",
"crash_page_before_reporting": "Abans d'informar d'un error, assegureu-vos que teniu:",
"crash_page_switch_instance": "ha intentat <a href=\"`x`\">utilitzar una altra instància</a>",
"crash_page_read_the_faq": "heu llegit les <a href=\"`x`\">Preguntes més freqüents (FAQ)</a>",
"crash_page_search_issue": "ha cercat <a href=\"`x`\">problemes existents a GitHub</a>",
"User ID is a required field": "L'identificador d'usuari és un camp obligatori",
"Password is a required field": "La contrasenya és un camp obligatori",
"Wrong username or password": "Nom d'usuari o contrasenya incorrectes",
"Password cannot be longer than 55 characters": "La contrasenya no pot tenir més de 55 caràcters",
"Invidious Private Feed for `x`": "Feed privat Invidious per a `x`",
"generic_views_count": "{{count}} visualització",
"generic_views_count_plural": "{{count}} visualitzacions",
"generic_videos_count": "{{count}} vídeo",
"generic_videos_count_plural": "{{count}} vídeos",
"Token is expired, please try again": "El testimoni ha caducat, torna-ho a provar",
"English": "Anglès",
"Kannada": "Kanarès",
"Erroneous token": "Testimoni erroni",
"`x` ago": "fa `x`",
"Empty playlist": "Llista de reproducció buida",
"Playlist does not exist.": "La llista de reproducció no existeix.",
"No such user": "No hi ha tal usuari",
"Afrikaans": "Afrikàans",
"Azerbaijani": "Azerbaidjana",
"Cantonese (Hong Kong)": "Cantonès (Hong Kong)",
"Chinese": "Xinès",
"Chinese (China)": "Xinès (Xina)",
"Chinese (Traditional)": "Xinès (Tradicional)",
"Dutch": "Holandès",
"Dutch (auto-generated)": "Holandès (generat automàticament)",
"French (auto-generated)": "Francès (generat automàticament)",
"Georgian": "Georgià",
"German (auto-generated)": "Alemany (generat automàticament)",
"Gujarati": "Gujarati",
"Hawaiian": "Hawaià",
"generic_count_years": "{{count}} any",
"generic_count_years_plural": "{{count}} anys",
"Popular": "Popular",
"Rating: ": "Valoració: ",
"permalink": "enllaç permanent",
"preferences_quality_dash_option_worst": "Pitjor",
"Yiddish": "Ídix",
"preferences_quality_dash_option_auto": "Automàtic",
"Western Frisian": "Frisó occidental",
"Swedish": "Suec",
"Only show latest unwatched video from channel: ": "Mostra només l'últim vídeo no vist del canal: ",
"preferences_continue_label": "Reprodueix el següent per defecte: ",
"Import YouTube subscriptions": "Importar subscripcions de YouTube",
"search_filters_sort_option_rating": "Valoració",
"preferences_thin_mode_label": "Mode prim: ",
"preferences_quality_option_small": "Petit",
"CAPTCHA enabled: ": "activa CAPTCHA: ",
"Import and Export Data": "Importar i exportar dades",
"preferences_quality_dash_option_360p": "360p",
"Popular enabled: ": "Activa popular: ",
"Password": "Contrasenya",
"Blacklisted regions: ": "Regions a la llista negra: ",
"Register": "Registra't",
"Shared `x` ago": "Compartit fa `x`",
"search_filters_sort_option_views": "Recompte de visualitzacions",
"Import Invidious data": "Importa dades JSON d'Invidious",
"preferences_related_videos_label": "Mostra vídeos relacionats: ",
"preferences_show_nick_label": "Mostra l'àlies a la part superior: ",
"Time (h:mm:ss):": "Temps (h:mm:ss):",
"Could not fetch comments": "No s'han pogut obtenir els comentaris",
"New password": "Nova contrasenya",
"preferences_notifications_only_label": "Mostra només notificacions (si n'hi ha): ",
"preferences_annotations_label": "Mostra anotacions per defecte: ",
"Import FreeTube subscriptions (.db)": "Importar subscripcions de FreeTube (.db)",
"Fallback captions: ": "Subtítols alternatius: ",
"Log out": "Tancar sessió",
"preferences_quality_dash_option_2160p": "2160p",
"Unsubscribe": "Cancel·la la subscripció",
"Log in/register": "Inicia sessió/registra't",
"Nepali": "Nepalí",
"Xhosa": "Xosa",
"preferences_captions_label": "Subtítols per defecte: ",
"preferences_autoplay_label": "Reproducció automàtica: ",
"`x` is live": "`x` està en directe",
"Uzbek": "Uzbek",
"Hausa": "Haussa",
"Bosnian": "Bosnià",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Hola! Sembla que tens JavaScript desactivat. Feu clic aquí per veure els comentaris, tingueu en compte que poden trigar una mica més a carregar-se.",
"Password cannot be empty": "La contrasenya no pot estar buida",
"preferences_video_loop_label": "Sempre en bucle: ",
"preferences_quality_option_dash": "DASH (qualitat adaptativa)",
"Change password": "Canvia la contrasenya",
"Export data as JSON": "Exporta dades d'Invidious com a JSON",
"Wrong answer": "Resposta incorrecta",
"Clear watch history": "Neteja l'historial de reproduccions",
"Mongolian": "Mongol",
"preferences_quality_dash_option_best": "Millor",
"Authorize token for `x`?": "Autoritzar testimoni per a `x`?",
"Report statistics: ": "Estadístiques de l'informe: ",
"Switch Invidious Instance": "Canvia la instància d'Invidious",
"History": "Historial",
"Portuguese (auto-generated)": "Portuguès (generat automàticament)",
"footer_source_code": "Codi font",
"videoinfo_youTube_embed_link": "Insereix",
"generic_count_minutes": "{{count}} minut",
"generic_count_minutes_plural": "{{count}} minuts",
"preferences_category_player": "Preferències del reproductor",
"Sign In": "Inicia Sessió",
"preferences_continue_autoplay_label": "Reprodueix automàticament el següent vídeo: ",
"generic_playlists_count": "{{count}} llista de reproducció",
"generic_playlists_count_plural": "{{count}} llistes de reproducció",
"Delete account?": "Esborrar compte?",
"Please log in": "Si us plau inicieu sessió",
"Import NewPipe data (.zip)": "Importar dades de NewPipe (.zip)",
"Image CAPTCHA": "Imatge CAPTCHA",
"channel_tab_streams_label": "Transmissions en directe",
"preferences_category_misc": "Preferències diverses",
"preferences_annotations_subscribed_label": "Mostra les anotacions per defecte dels canals subscrits? ",
"Tajik": "Tadjik",
"preferences_player_style_label": "Estil del reproductor: ",
"Load more": "Carrega més",
"preferences_vr_mode_label": "Vídeos interactius de 360 graus (requereix WebGL): ",
"Manage subscriptions": "Gestionar les subscripcions",
"preferences_quality_option_medium": "Mitjà",
"Editing playlist `x`": "Editant la llista de reproducció `x`",
"search_filters_duration_option_medium": "Mitjà (4 - 20 minuts)",
"E-mail": "Correu electrònic",
"Spanish (auto-generated)": "Castellà (generat automàticament)",
"Export": "Exportar",
"preferences_quality_dash_option_4320p": "4320p",
"JavaScript license information": "Informació de la llicència de JavaScript",
"Hidden field \"token\" is a required field": "El camp ocult \"testimoni\" és un camp obligatori",
"Shona": "Xona",
"Family friendly? ": "Apte per a tots els públics? ",
"preferences_quality_dash_label": "Qualitat de vídeo DASH preferida: ",
"Hindi": "Hindi",
"An alternative front-end to YouTube": "Una interfície alternativa a YouTube",
"Export subscriptions as OPML": "Exporta subscripcions com a OPML",
"Watch on YouTube": "Veure a YouTube",
"Lao": "Laosià",
"search_message_change_filters_or_query": "Proveu d'ampliar la vostra consulta de cerca i/o canviar els filtres.",
"View YouTube comments": "Veure comentaris de YouTube",
"New passwords must match": "Les contrasenyes noves han de coincidir",
"Subscription manager": "Gestor de subscripcions",
"Premieres in `x`": "Estrena en `x`",
"youtube": "YouTube",
"Latvian": "Letó",
"LIVE": "EN VIU",
"Could not create mix.": "No s'ha pogut crear la barreja.",
"preferences_speed_label": "Velocitat per defecte: ",
"preferences_extend_desc_label": "Amplieu automàticament la descripció del vídeo: ",
"popular": "popular",
"Erroneous challenge": "Repte erroni",
"last": "darrer",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_1440p": "1440p",
"Previous page": "Pàgina anterior",
"Only show latest video from channel: ": "Mostra només l'últim vídeo del canal: ",
"unsubscribe": "cancel·la la subscripció",
"View playlist on YouTube": "Veure llista de reproducció a YouTube",
"Import NewPipe subscriptions (.json)": "Importar subscripcions de NewPipe (.json)",
"crash_page_you_found_a_bug": "Heu trobat un error a Invidious!",
"Subscribe": "Subscriu-me",
"generic_count_days": "{{count}} dia",
"generic_count_days_plural": "{{count}} dies",
"Trending": "Tendència",
"Updated `x` ago": "Actualitzat fa `x`",
"Haitian Creole": "Crioll Haitià",
"preferences_watch_history_label": "Habilita historial de reproduccions: ",
"generic_count_hours": "{{count}} hora",
"generic_count_hours_plural": "{{count}} hores",
"Malayalam": "Maialàiam",
"Clear watch history?": "Neteja historial de reproduccions?",
"Import/export data": "Importa/exporta dades",
"Sinhala": "Singalès",
"Delete playlist": "Eliminar llista de reproducció",
"Bangla": "Bengalí",
"Italian (auto-generated)": "Italià (generat automàticament)",
"License: ": "Llicència: ",
"(edited)": "(editat)",
"Pashto": "Paixtu",
"preferences_dark_mode_label": "Tema: ",
"revoke": "revocar",
"English (United Kingdom)": "Anglès (Regne Unit)",
"preferences_quality_option_hd720": "HD720",
"tokens_count": "{{count}} testimoni",
"tokens_count_plural": "{{count}} testimonis",
"subscriptions_unseen_notifs_count": "{{count}} notificació no vista",
"subscriptions_unseen_notifs_count_plural": "{{count}} notificacions no vistes",
"generic_subscribers_count": "{{count}} subscriptor",
"generic_subscribers_count_plural": "{{count}} subscriptors",
"Sindhi": "Sindhi",
"Slovenian": "Eslovè",
"preferences_feed_menu_label": "Menú del feed: ",
"Fallback comments: ": "Comentaris alternatius: ",
"Top": "Millors",
"preferences_max_results_label": "Nombre de vídeos mostrats al feed: ",
"Engagement: ": "Atracció: ",
"Redirect homepage to feed: ": "Redirigeix la pàgina d'inici al feed: ",
"Standard YouTube license": "Llicència estàndard de YouTube",
"Download is disabled": "Les baixades s'han inhabilitat"
} }

@ -1,6 +1,6 @@
{ {
"LIVE": "ŽIVĚ", "LIVE": "ŽIVĚ",
"Shared `x` ago": "Zveřejněno před `x`", "Shared `x` ago": "Sdíleno před `x`",
"Unsubscribe": "Odhlásit odběr", "Unsubscribe": "Odhlásit odběr",
"Subscribe": "Odebírat", "Subscribe": "Odebírat",
"View channel on YouTube": "Otevřít kanál na YouTube", "View channel on YouTube": "Otevřít kanál na YouTube",
@ -13,22 +13,23 @@
"Previous page": "Předchozí strana", "Previous page": "Předchozí strana",
"Clear watch history?": "Smazat historii?", "Clear watch history?": "Smazat historii?",
"New password": "Nové heslo", "New password": "Nové heslo",
"New passwords must match": "Hesla se musí shodovat", "New passwords must match": "Hesla se musí schodovat",
"Cannot change password for Google accounts": "Nelze změnit heslo pro účty Google",
"Authorize token?": "Autorizovat token?", "Authorize token?": "Autorizovat token?",
"Authorize token for `x`?": "Autorizovat token pro `x`?", "Authorize token for `x`?": "Autorizovat token pro `x`?",
"Yes": "Ano", "Yes": "Ano",
"No": "Ne", "No": "Ne",
"Import and Export Data": "Import a export dat", "Import and Export Data": "Import a Export údajů",
"Import": "Importovat", "Import": "Inport",
"Import Invidious data": "Importovat JSON údaje Invidious", "Import Invidious data": "Importovat údaje Invidious",
"Import YouTube subscriptions": "Importovat odběry z YouTube/OPML", "Import YouTube subscriptions": "Importovat odběry z YouTube",
"Import FreeTube subscriptions (.db)": "Importovat odběry z FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importovat odběry z FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importovat odběry z NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importovat odběry z NewPipe (.json)",
"Import NewPipe data (.zip)": "Importovat údeje z NewPipe (.zip)", "Import NewPipe data (.zip)": "Importovat údeje z NewPipe (.zip)",
"Export": "Exportovat", "Export": "Exportovat",
"Export subscriptions as OPML": "Exportovat odběry jako OPML", "Export subscriptions as OPML": "Exportovat odběry jako OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportovat údaje jako OPML (na NewPipe a FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportovat údaje jako OPML (na NewPipe a FreeTube)",
"Export data as JSON": "Exportovat data Invidious jako JSON", "Export data as JSON": "Exportovat data jako JSON",
"Delete account?": "Smazat účet?", "Delete account?": "Smazat účet?",
"History": "Historie", "History": "Historie",
"An alternative front-end to YouTube": "Alternativní front-end pro YouTube", "An alternative front-end to YouTube": "Alternativní front-end pro YouTube",
@ -36,7 +37,8 @@
"source": "zdrojový kód", "source": "zdrojový kód",
"Log in": "Přihlásit se", "Log in": "Přihlásit se",
"Log in/register": "Přihlásit se/vytvořit účet", "Log in/register": "Přihlásit se/vytvořit účet",
"User ID": "ID uživatele", "Log in with Google": "Přihlásit se s Googlem",
"User ID": "Uživatelské IČ",
"Password": "Heslo", "Password": "Heslo",
"Time (h:mm:ss):": "Čas (h:mm:ss):", "Time (h:mm:ss):": "Čas (h:mm:ss):",
"Text CAPTCHA": "Textové CAPTCHA", "Text CAPTCHA": "Textové CAPTCHA",
@ -44,23 +46,24 @@
"Sign In": "Přihlásit se", "Sign In": "Přihlásit se",
"Register": "Vytvořit účet", "Register": "Vytvořit účet",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Verifikační číslo Google",
"Preferences": "Nastavení", "Preferences": "Nastavení",
"preferences_category_player": "Nastavení přehravače", "preferences_category_player": "Nastavení přehravače",
"preferences_video_loop_label": "Vždy opakovat: ", "preferences_video_loop_label": "Vždy opakovat: ",
"preferences_autoplay_label": "Automatické přehrávání: ", "preferences_autoplay_label": "Automatické přehrávání: ",
"preferences_continue_label": "Automaticky přehrát další: ", "preferences_continue_label": "Přehrát další ve výchozím stavu: ",
"preferences_continue_autoplay_label": "Automaticky přehrát další video: ", "preferences_continue_autoplay_label": "Automaticky přehrát další video: ",
"preferences_listen_label": "Poslouchat ve výchozím nastavení: ", "preferences_listen_label": "Poslouchat ve výchozím nastavení: ",
"preferences_local_label": "Video přes proxy: ", "preferences_local_label": "Video přes proxy: ",
"preferences_speed_label": "Výchozí rychlost: ", "preferences_speed_label": "Základní Rychlost: ",
"preferences_quality_label": "Preferovaná kvalita videa: ", "preferences_quality_label": "Preferovaná kvalita videa: ",
"preferences_volume_label": "Hlasitost přehrávače: ", "preferences_volume_label": "Hlasitost přehrávače: ",
"preferences_comments_label": "Předpřipravené komentáře: ", "preferences_comments_label": "Předpřipravené komentáře: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "reddit",
"preferences_captions_label": "Výchozí titulky: ", "preferences_captions_label": "Standartní Titulky: ",
"Fallback captions: ": "Záložní titulky: ", "Fallback captions: ": "Záložní titulky: ",
"preferences_related_videos_label": "Zobrazit podobná videa: ", "preferences_related_videos_label": "Zobrazit podobné videa: ",
"preferences_annotations_label": "Zobrazovat poznámky ve výchozím nastavení: ", "preferences_annotations_label": "Zobrazovat poznámky ve výchozím nastavení: ",
"preferences_extend_desc_label": "Rozšířit automaticky popis u videa: ", "preferences_extend_desc_label": "Rozšířit automaticky popis u videa: ",
"preferences_category_visual": "Nastavení vzhledu", "preferences_category_visual": "Nastavení vzhledu",
@ -85,28 +88,28 @@
"Only show latest unwatched video from channel: ": "Zobrazit jen nejnovější nezhlédnuté video z daného kanálu: ", "Only show latest unwatched video from channel: ": "Zobrazit jen nejnovější nezhlédnuté video z daného kanálu: ",
"preferences_unseen_only_label": "Zobrazit jen již nezhlédnuté: ", "preferences_unseen_only_label": "Zobrazit jen již nezhlédnuté: ",
"preferences_notifications_only_label": "Zobrazit pouze upozornění (pokud nějaká jsou): ", "preferences_notifications_only_label": "Zobrazit pouze upozornění (pokud nějaká jsou): ",
"Enable web notifications": "Povolit webová upozornění", "Enable web notifications": "Povolit webové upozornění",
"`x` uploaded a video": "`x` nahrál(a) video", "`x` uploaded a video": "`x` nahrál(a) video",
"`x` is live": "`x` je živě", "`x` is live": "`x` je živě",
"preferences_category_data": "Nastavení dat", "preferences_category_data": "Nastavení dat",
"Clear watch history": "Smazat historii", "Clear watch history": "Smazat historii",
"Import/export data": "Importovat/exportovat data", "Import/export data": "importovat/exportovat data",
"Change password": "Změnit heslo", "Change password": "Změnit heslo",
"Manage subscriptions": "Spravovat odebírané kanály", "Manage subscriptions": "Spravovat odebírané kanály",
"Manage tokens": "Spravovat tokeny", "Manage tokens": "Spravovat klíče",
"Watch history": "Historie sledování", "Watch history": "Historie Sledování",
"Delete account": "Smazat účet", "Delete account": "Smazat Účet",
"preferences_category_admin": "Administrátorská nastavení", "preferences_category_admin": "Administrátorská nastavení",
"preferences_default_home_label": "Základní domovská stránka: ", "preferences_default_home_label": "Základní domovská stránka: ",
"preferences_feed_menu_label": "Menu doporučených: ", "preferences_feed_menu_label": "Menu doporučených: ",
"CAPTCHA enabled: ": "CAPTCHA povolena: ", "CAPTCHA enabled: ": "CAPTCHA povolen: ",
"Login enabled: ": "Přihlášení povoleno: ", "Login enabled: ": "Přihlášení povoleno: ",
"Registration enabled: ": "Registrace povolena ", "Registration enabled: ": "Registrace povolena ",
"Report statistics: ": "Oznámit statistiky: ", "Report statistics: ": "Oznámit statistiky: ",
"Save preferences": "Uložit nastavení", "Save preferences": "Uložit nastavení",
"Subscription manager": "Správa odběrů", "Subscription manager": "Správa Odběrů",
"Token manager": "Správa tokenů", "Token manager": "Správa klíčů",
"Token": "Token", "Token": "Klíč",
"Import/export": "Importovat/exportovat", "Import/export": "Importovat/exportovat",
"unsubscribe": "odhlásit odběr", "unsubscribe": "odhlásit odběr",
"revoke": "vrátit zpět", "revoke": "vrátit zpět",
@ -115,10 +118,10 @@
"Log out": "Odhlásit se", "Log out": "Odhlásit se",
"Source available here.": "Zdrojový kód dostupný zde.", "Source available here.": "Zdrojový kód dostupný zde.",
"View JavaScript license information.": "Zobrazit informace o licenci JavaScript .", "View JavaScript license information.": "Zobrazit informace o licenci JavaScript .",
"View privacy policy.": "Zobrazit zásady ochrany osobních údajů.", "View privacy policy.": "Zobrazit Zásady ochrany osobních údajů.",
"Trending": "Trendy", "Trending": "Trendy",
"Public": "Veřejné", "Public": "Veřejné",
"Unlisted": "Neveřejné", "Unlisted": "Nevypsáno",
"Private": "Soukromé", "Private": "Soukromé",
"View all playlists": "Zobrazit všechny playlisty", "View all playlists": "Zobrazit všechny playlisty",
"Updated `x` ago": "Aktualizováno před `x`", "Updated `x` ago": "Aktualizováno před `x`",
@ -130,12 +133,12 @@
"Show more": "Zobrazit více", "Show more": "Zobrazit více",
"Show less": "Zobrazit méně", "Show less": "Zobrazit méně",
"Watch on YouTube": "Sledovat na YouTube", "Watch on YouTube": "Sledovat na YouTube",
"Hide annotations": "Skrýt poznámky", "Hide annotations": "Skrýt vysvětlivky",
"Show annotations": "Zobrazit poznámky", "Show annotations": "Zobrazit vysvětlivky",
"Genre: ": "Žánr: ", "Genre: ": "Žánr: ",
"License: ": "Licence: ", "License: ": "Licence: ",
"Family friendly? ": "Vhodné pro rodiny? ", "Family friendly? ": "Vhodné pro děti? ",
"Engagement: ": "Zapojení: ", "Engagement: ": "Závaznost: ",
"English": "Angličtina", "English": "Angličtina",
"English (auto-generated)": "Angličtina (automaticky generováno)", "English (auto-generated)": "Angličtina (automaticky generováno)",
"Afrikaans": "Afrikánština", "Afrikaans": "Afrikánština",
@ -257,240 +260,29 @@
"`x` marked it with a ❤": "`x` to označil(a) se ❤", "`x` marked it with a ❤": "`x` to označil(a) se ❤",
"Audio mode": "Audiový režim", "Audio mode": "Audiový režim",
"Video mode": "Videový režim", "Video mode": "Videový režim",
"channel_tab_videos_label": "Videa", "Videos": "Videa",
"channel_tab_community_label": "Komunita", "Community": "Komunita",
"search_filters_sort_option_rating": "Hodnocení", "rating": "hodnocení",
"search_filters_sort_option_date": "Datum nahrání", "date": "datum",
"search_filters_sort_option_views": "Počet zhlédnutí", "views": "zhlédnutí",
"search_filters_duration_label": "Délka", "duration": "délka",
"search_filters_date_option_hour": "Poslední hodina", "hour": "hodina",
"search_filters_date_option_today": "Dnes", "today": "dnes",
"search_filters_date_option_week": "Tento týden", "week": "týden",
"search_filters_date_option_month": "Tento měsíc", "month": "měsíc",
"search_filters_date_option_year": "Tento rok", "year": "rok",
"search_filters_type_option_video": "Video", "video": "video",
"search_filters_type_option_channel": "Kanál", "channel": "kanál",
"search_filters_type_option_playlist": "Playlist", "playlist": "playlist",
"search_filters_type_option_movie": "Film", "movie": "film",
"search_filters_type_option_show": "Seriál", "show": "zobrazit",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Titulky", "subtitles": "titulky",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Živě", "live": "živě",
"search_filters_features_option_four_k": "4K", "4k": "4k",
"search_filters_features_option_location": "Umístění", "location": "umístění",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"generic_count_days_0": "{{count}} dnem", "filter": "filtr"
"generic_count_days_1": "{{count}} dny",
"generic_count_days_2": "{{count}} dny",
"generic_count_hours_0": "{{count}} hodinou",
"generic_count_hours_1": "{{count}} hodinami",
"generic_count_hours_2": "{{count}} hodinami",
"crash_page_refresh": "zkusili <a href=\"`x`\">obnovit stránku</a>",
"crash_page_switch_instance": "zkusili <a href=\"`x`\">použít jinou instanci</a>",
"preferences_vr_mode_label": "Interaktivní 360-stupňová videa (vyžaduje WebGL): ",
"English (United Kingdom)": "Angličtina (Spojené království)",
"Chinese (China)": "Čínština (Čína)",
"Chinese (Hong Kong)": "Čínština (Hong Kong)",
"Chinese (Taiwan)": "Čínština (Taiwan)",
"Portuguese (auto-generated)": "Portugalština (automaticky generováno)",
"Spanish (auto-generated)": "Španělština (automaticky generováno)",
"Spanish (Mexico)": "Španělština (Mexiko)",
"Spanish (Spain)": "Španělština (Španělsko)",
"generic_count_years_0": "{{count}} rokem",
"generic_count_years_1": "{{count}} lety",
"generic_count_years_2": "{{count}} lety",
"Fallback comments: ": "Záložní komentáře: ",
"Search": "Hledat",
"Top": "Nejlepší",
"Playlists": "Playlisty",
"videoinfo_started_streaming_x_ago": "Stream spuštěn před `x`",
"videoinfo_watch_on_youTube": "Sledovat na YouTube",
"videoinfo_youTube_embed_link": "Vložení",
"crash_page_read_the_faq": "si přečetli <a href=\"`x`\">často kladené otázky (FAQ)</a>",
"crash_page_before_reporting": "Před nahlášením chyby se ujistěte, že jste:",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_dash": "DASH (adaptivní kvalita)",
"generic_views_count_0": "{{count}} zhlédnutí",
"generic_views_count_1": "{{count}} zhlédnutí",
"generic_views_count_2": "{{count}} zhlédnutí",
"generic_subscriptions_count_0": "{{count}} odběr",
"generic_subscriptions_count_1": "{{count}} odběry",
"generic_subscriptions_count_2": "{{count}} odběrů",
"preferences_quality_dash_option_4320p": "4320p",
"generic_videos_count_0": "{{count}} video",
"generic_videos_count_1": "{{count}} videa",
"generic_videos_count_2": "{{count}} videí",
"preferences_quality_option_small": "Nízká",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_144p": "144p",
"preferences_quality_option_medium": "Střední",
"preferences_quality_dash_option_1440p": "1440p",
"invidious": "Invidious",
"View more comments on Reddit": "Zobrazit více komentářů na Redditu",
"generic_playlists_count_0": "{{count}} playlist",
"generic_playlists_count_1": "{{count}} playlisty",
"generic_playlists_count_2": "{{count}} playlistů",
"generic_subscribers_count_0": "{{count}} odběratel",
"generic_subscribers_count_1": "{{count}} odběratelé",
"generic_subscribers_count_2": "{{count}} odběratelů",
"preferences_watch_history_label": "Povolit historii sledování: ",
"preferences_quality_dash_option_240p": "240p",
"preferences_region_label": "Země obsahu: ",
"subscriptions_unseen_notifs_count_0": "{{count}} nezobrazené oznámení",
"subscriptions_unseen_notifs_count_1": "{{count}} nezobrazená oznámení",
"subscriptions_unseen_notifs_count_2": "{{count}} nezobrazených oznámení",
"Show replies": "Zobrazit odpovědi",
"Password cannot be longer than 55 characters": "Heslo nesmí být delší než 55 znaků",
"comments_view_x_replies_0": "Zobrazit {{count}} odpověď",
"comments_view_x_replies_1": "Zobrazit {{count}} odpovědi",
"comments_view_x_replies_2": "Zobrazit {{count}} odpovědí",
"comments_points_count_0": "{{count}} bod",
"comments_points_count_1": "{{count}} body",
"comments_points_count_2": "{{count}} bodů",
"German (auto-generated)": "Němčina (automaticky generováno)",
"Indonesian (auto-generated)": "Indonéština (automaticky generováno)",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italština (automaticky generováno)",
"Japanese (auto-generated)": "Japonština (automaticky generováno)",
"Korean (auto-generated)": "Korejština (automaticky generováno)",
"Russian (auto-generated)": "Ruština (automaticky generováno)",
"generic_count_months_0": "{{count}} měsícem",
"generic_count_months_1": "{{count}} měsíci",
"generic_count_months_2": "{{count}} měsíci",
"generic_count_weeks_0": "{{count}} týdnem",
"generic_count_weeks_1": "{{count}} týdny",
"generic_count_weeks_2": "{{count}} týdny",
"generic_count_minutes_0": "{{count}} minutou",
"generic_count_minutes_1": "{{count}} minutami",
"generic_count_minutes_2": "{{count}} minutami",
"footer_documentation": "Dokumentace",
"next_steps_error_message_refresh": "Obnovit stránku",
"Chinese": "Čínština",
"Dutch (auto-generated)": "Nizozemština (automaticky generováno)",
"Erroneous token": "Chybný token",
"tokens_count_0": "{{count}} token",
"tokens_count_1": "{{count}} tokeny",
"tokens_count_2": "{{count}} tokenů",
"Portuguese (Brazil)": "Portugalština (Brazílie)",
"Token is expired, please try again": "Token vypršel, zkuste to prosím znovu",
"English (United States)": "Angličtina (Spojené státy)",
"Cantonese (Hong Kong)": "Kantonština (Hong Kong)",
"French (auto-generated)": "Francouzština (automaticky generováno)",
"Turkish (auto-generated)": "Turečtina (automaticky generováno)",
"Vietnamese (auto-generated)": "Vietnamština (automaticky generováno)",
"Current version: ": "Aktuální verze: ",
"next_steps_error_message": "Měli byste zkusit: ",
"footer_donate_page": "Přispět",
"download_subtitles": "Titulky - `x` (.vtt)",
"%A %B %-d, %Y": "%A %B %-d, %Y",
"YouTube comment permalink": "Permanentní odkaz YouTube komentáře",
"permalink": "permalink",
"footer_original_source_code": "Původní zdrojový kód",
"adminprefs_modified_source_code_url_label": "URL repozitáře s upraveným zdrojovým kódem",
"Video unavailable": "Video není dostupné",
"next_steps_error_message_go_to_youtube": "Jít na YouTube",
"footer_modfied_source_code": "Upravený zdrojový kód",
"none": "žádné",
"videoinfo_invidious_embed_link": "Odkaz na vložení",
"user_saved_playlists": "`x` uložených playlistů",
"crash_page_you_found_a_bug": "Vypadá to, že jste našli chybu v Invidious!",
"user_created_playlists": "`x` vytvořených playlistů",
"crash_page_search_issue": "vyhledali <a href=\"`x`\">existující problémy na GitHubu</a>",
"crash_page_report_issue": "Pokud nepomohlo nic z výše uvedeného, <a href=\"`x`\">otevřete prosím nový problém na GitHubu</a> (pokud možno v angličtině) a zahrňte do zprávy následující text (NEpřekládejte jej):",
"preferences_quality_dash_label": "Preferovaná kvalita videí DASH: ",
"preferences_quality_dash_option_auto": "Automatická",
"preferences_quality_dash_option_best": "Nejlepší",
"preferences_quality_dash_option_worst": "Nejhorší",
"preferences_quality_dash_option_480p": "480p",
"Top enabled: ": "Povoleny nejlepší: ",
"generic_count_seconds_0": "{{count}} sekundou",
"generic_count_seconds_1": "{{count}} sekundami",
"generic_count_seconds_2": "{{count}} sekundami",
"preferences_save_player_pos_label": "Uložit pozici přehrávání: ",
"Incorrect password": "Nesprávné heslo",
"View as playlist": "Zobrazit jako playlist",
"View Reddit comments": "Zobrazit komentáře z Redditu",
"No such user": "Uživatel nenalezen",
"Playlist privacy": "Soukromí playlistu",
"Wrong answer": "Špatná odpověď",
"Could not pull trending pages.": "Nepodařilo se získat trendy stránky.",
"Erroneous CAPTCHA": "Chybná CAPTCHA",
"Password is a required field": "Heslo je vyžadované pole",
"preferences_automatic_instance_redirect_label": "Automatické přesměrování instance (fallback na redirect.invidious.io): ",
"Switch Invidious Instance": "Přepnout instanci Invidious",
"Empty playlist": "Prázdný playlist",
"footer_source_code": "Zdrojový kód",
"View YouTube comments": "Zobrazit YouTube komentáře",
"Blacklisted regions: ": "Oblasti na černé listině: ",
"Wrong username or password": "Nesprávné uživatelské jméno nebo heslo",
"Password cannot be empty": "Heslo nemůže být prázné",
"preferences_category_misc": "Různá nastavení",
"preferences_show_nick_label": "Zobrazit přezdívku na vrchu: ",
"Whitelisted regions: ": "Oblasti na bílé listině: ",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Zdravíme! Zdá se, že máte vypnutý JavaScript. Klikněte sem pro zobrazení komentářů - nezapomeňte, že se mohou načítat trochu déle.",
"User ID is a required field": "ID uživatele je vyžadované pole",
"Please log in": "Přihlaste se prosím",
"Invidious Private Feed for `x`": "Soukromý kanál Invidious pro `x`",
"Deleted or invalid channel": "Smazaný nebo neplatný kanál",
"This channel does not exist.": "Tento kanál neexistuje.",
"Hidden field \"token\" is a required field": "Skryté pole \"token\" je vyžadované",
"Wilson score: ": "Skóre Wilson: ",
"Shared `x`": "Zveřejněno `x`",
"Premieres in `x`": "Premiéra za `x`",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "Zobrazit `x` komentář",
"": "Zobrazit `x` komentářů"
},
"Could not get channel info.": "Nepodařilo se získat informace o kanálu.",
"Could not fetch comments": "Nepodařilo se získat komentáře",
"Could not create mix.": "Nepodařilo se vytvořit mix.",
"Hidden field \"challenge\" is a required field": "Skryté pole \"challenge\" je vyžadované",
"Released under the AGPLv3 on Github.": "Vydáno pod licencí AGPLv3 na GitHubu.",
"Hide replies": "Skrýt odpovědi",
"channel:`x`": "kanál: `x`",
"Load more": "Načíst další",
"Not a playlist.": "Není playlist.",
"Playlist does not exist.": "Playlist neexistuje.",
"Erroneous challenge": "Chybná výzva",
"Premieres `x`": "Premiéra `x`",
"CAPTCHA is a required field": "CAPTCHA je vyžadované pole",
"`x` ago": "Před `x`",
"search_message_change_filters_or_query": "Zkuste rozšířit vyhledávaný dotaz a/nebo změnit filtry.",
"search_filters_date_option_none": "Jakékoli datum",
"search_filters_date_label": "Datum nahrání",
"search_filters_type_option_all": "Jakýkoli typ",
"search_filters_duration_option_none": "Jakákoli délka",
"search_filters_type_label": "Typ",
"search_filters_duration_option_short": "Krátká (< 4 minuty)",
"search_message_no_results": "Nenalezeny žádné výsledky.",
"search_filters_title": "Filtry",
"search_filters_duration_option_medium": "Střední (4 - 20 minut)",
"search_filters_duration_option_long": "Dlouhá (> 20 minut)",
"search_message_use_another_instance": " Můžete také <a href=\"`x`\">hledat na jiné instanci</a>.",
"search_filters_features_label": "Vlastnosti",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_vr180": "VR180",
"search_filters_features_option_purchased": "Zakoupeno",
"search_filters_sort_label": "Řadit dle",
"search_filters_sort_option_relevance": "Relevantnost",
"search_filters_apply_button": "Použít vybrané filtry",
"Popular enabled: ": "Populární povoleno: ",
"error_video_not_in_playlist": "Požadované video v tomto playlistu neexistuje. <a href=\"`x`\">Klikněte sem pro navštívení domovské stránky playlistu.</a>",
"channel_tab_shorts_label": "Shorts",
"channel_tab_playlists_label": "Playlisty",
"channel_tab_channels_label": "Kanály",
"channel_tab_streams_label": "Živé přenosy",
"Music in this video": "Hudba v tomto videu",
"Artist: ": "Umělec: ",
"Album: ": "Album: ",
"Channel Sponsor": "Sponzor kanálu",
"Song: ": "Skladba: ",
"Standard YouTube license": "Standardní licence YouTube",
"Download is disabled": "Stahování je zakázáno",
"Import YouTube playlist (.csv)": "Importovat YouTube playlist (.csv)"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Ryd afspilningshistorik?", "Clear watch history?": "Ryd afspilningshistorik?",
"New password": "Nyt kodeord", "New password": "Nyt kodeord",
"New passwords must match": "Nye kodeord skal matche", "New passwords must match": "Nye kodeord skal matche",
"Cannot change password for Google accounts": "Kan ikke skifte kodeord til Google-konti",
"Authorize token?": "Godkend token?", "Authorize token?": "Godkend token?",
"Authorize token for `x`?": "Godkend token til `x`?", "Authorize token for `x`?": "Godkend token til `x`?",
"Yes": "Ja", "Yes": "Ja",
"No": "Nej", "No": "Nej",
"Import and Export Data": "Importer og Eksporter Data", "Import and Export Data": "Importer og Eksporter Data",
"Import": "Importer", "Import": "Importer",
"Import Invidious data": "Importer Invidious JSON-data", "Import Invidious data": "Importer Invidious data",
"Import YouTube subscriptions": "Importer YouTube/OPML-abonnementer", "Import YouTube subscriptions": "Importer YouTube abonnementer",
"Import FreeTube subscriptions (.db)": "Importer FreeTube abonnementer (.db)", "Import FreeTube subscriptions (.db)": "Importer FreeTube abonnementer (.db)",
"Import NewPipe subscriptions (.json)": "Importer NewPipe abonnementer (.json)", "Import NewPipe subscriptions (.json)": "Importer NewPipe abonnementer (.json)",
"Import NewPipe data (.zip)": "Importer NewPipe data (.zip)", "Import NewPipe data (.zip)": "Importer NewPipe data (.zip)",
"Export": "Exporter", "Export": "Exporter",
"Export subscriptions as OPML": "Exporter abonnementer som OPML", "Export subscriptions as OPML": "Exporter abonnementer som OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exporter abonnementer som OPML (til NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exporter abonnementer som OPML (til NewPipe & FreeTube)",
"Export data as JSON": "Eksporter Invidious-data som JSON", "Export data as JSON": "Exporter data som JSON",
"Delete account?": "Slet konto?", "Delete account?": "Slet konto?",
"History": "Historik", "History": "Historik",
"An alternative front-end to YouTube": "Et alternativt front-end til YouTube", "An alternative front-end to YouTube": "Et alternativt front-end til YouTube",
@ -36,6 +37,7 @@
"source": "kilde", "source": "kilde",
"Log in": "Log på", "Log in": "Log på",
"Log in/register": "Log på/registrer", "Log in/register": "Log på/registrer",
"Log in with Google": "Log på med Google",
"User ID": "Bruger ID", "User ID": "Bruger ID",
"Password": "Kodeord", "Password": "Kodeord",
"Time (h:mm:ss):": "Tid (t:mm:ss):", "Time (h:mm:ss):": "Tid (t:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Log ind", "Sign In": "Log ind",
"Register": "Registrer", "Register": "Registrer",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Google-verifikationskode",
"Preferences": "Præferencer", "Preferences": "Præferencer",
"preferences_category_player": "Afspillerindstillinger", "preferences_category_player": "Afspillerindstillinger",
"preferences_video_loop_label": "Altid gentag: ", "preferences_video_loop_label": "Altid gentag: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Vis relaterede videoer: ", "preferences_related_videos_label": "Vis relaterede videoer: ",
"preferences_annotations_label": "Vis annotationer som standard: ", "preferences_annotations_label": "Vis annotationer som standard: ",
"preferences_extend_desc_label": "Automatisk udvid videoens beskrivelse: ", "preferences_extend_desc_label": "Automatisk udvid videoens beskrivelse: ",
"preferences_vr_mode_label": "Interaktive 360 graders videoer (kræver WebGL): ", "preferences_vr_mode_label": "Interaktiv 360 graders videoer: ",
"preferences_category_visual": "Visuelle præferencer", "preferences_category_visual": "Visuelle præferencer",
"preferences_player_style_label": "Afspiller stil: ", "preferences_player_style_label": "Afspiller stil: ",
"Dark mode: ": "Mørk tilstand: ", "Dark mode: ": "Mørk tilstand: ",
@ -156,12 +159,17 @@
"Hide replies": "Skjul svar", "Hide replies": "Skjul svar",
"Show replies": "Vis svar", "Show replies": "Vis svar",
"Incorrect password": "Forkert adgangskode", "Incorrect password": "Forkert adgangskode",
"Quota exceeded, try again in a few hours": "Kvota overskredet, prøv igen om et par timer",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Login fejlet, tjek at totrinsbekræftelse (Authenticator eller SMS) er slået til.",
"Invalid TFA code": "Ugyldig TFA kode",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Login fejlede. Dette kan skyldes, at to-faktor autentificering ikke er aktiveret for din konto.",
"Wrong answer": "Forkert svar", "Wrong answer": "Forkert svar",
"Erroneous CAPTCHA": "Fejlagtig CAPTCHA", "Erroneous CAPTCHA": "Fejlagtig CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA er et obligatorisk felt", "CAPTCHA is a required field": "CAPTCHA er et obligatorisk felt",
"User ID is a required field": "Bruger ID er et krævet felt", "User ID is a required field": "Bruger ID er et krævet felt",
"Password is a required field": "Adgangskode er et obligatorisk felt", "Password is a required field": "Adgangskode er et obligatorisk felt",
"Wrong username or password": "Forkert brugernavn eller adgangskode", "Wrong username or password": "Forkert brugernavn eller adgangskode",
"Please sign in using 'Log in with Google'": "Log ind via 'Log ind med Google'",
"Password cannot be empty": "Adgangskoden må ikke være tom", "Password cannot be empty": "Adgangskoden må ikke være tom",
"Password cannot be longer than 55 characters": "Adgangskoden må ikke være længere end 55 tegn", "Password cannot be longer than 55 characters": "Adgangskoden må ikke være længere end 55 tegn",
"Please log in": "Venligst log ind", "Please log in": "Venligst log ind",
@ -179,7 +187,7 @@
"Esperanto": "Esperanto", "Esperanto": "Esperanto",
"Czech": "Tjekkisk", "Czech": "Tjekkisk",
"Danish": "Dansk", "Danish": "Dansk",
"channel_tab_community_label": "Samfund", "Community": "Samfund",
"Afrikaans": "Afrikansk", "Afrikaans": "Afrikansk",
"Portuguese": "Portugisisk", "Portuguese": "Portugisisk",
"Ukrainian": "Ukrainsk", "Ukrainian": "Ukrainsk",
@ -194,7 +202,7 @@
"Hidden field \"challenge\" is a required field": "Det skjulte felt \"challenge\" er et påkrævet felt", "Hidden field \"challenge\" is a required field": "Det skjulte felt \"challenge\" er et påkrævet felt",
"Albanian": "Albansk", "Albanian": "Albansk",
"preferences_quality_dash_label": "Fortrukket DASH video kvalitet: ", "preferences_quality_dash_label": "Fortrukket DASH video kvalitet: ",
"search_filters_features_option_live": "Direkte", "live": "Direkte",
"Lao": "Lao-tse", "Lao": "Lao-tse",
"Filipino": "Filippinsk", "Filipino": "Filippinsk",
"Greek": "Græsk", "Greek": "Græsk",
@ -205,22 +213,23 @@
"preferences_locale_label": "Sprog: ", "preferences_locale_label": "Sprog: ",
"News": "Nyheder", "News": "Nyheder",
"permalink": "permalink", "permalink": "permalink",
"search_filters_sort_option_date": "Upload dato", "date": "Upload dato",
"search_filters_features_label": "Funktioner", "features": "Funktioner",
"filter": "Filter",
"Khmer": "Khmer", "Khmer": "Khmer",
"Finnish": "Finsk", "Finnish": "Finsk",
"search_filters_date_option_week": "Denne uge", "week": "Denne uge",
"Korean": "Koreansk", "Korean": "Koreansk",
"Telugu": "Telugu", "Telugu": "Telugu",
"Malayalam": "Malayalam", "Malayalam": "Malayalam",
"View as playlist": "Se som spilleliste", "View as playlist": "Se som spilleliste",
"Hungarian": "Ungarsk", "Hungarian": "Ungarsk",
"Welsh": "Walisisk", "Welsh": "Walisisk",
"search_filters_features_option_subtitles": "Undertekster/CC", "subtitles": "Undertekster/CC",
"Bosnian": "Bosnisk", "Bosnian": "Bosnisk",
"Yiddish": "Jiddisch", "Yiddish": "Jiddisch",
"Belarusian": "Belarussisk", "Belarusian": "Belarussisk",
"search_filters_date_option_today": "I dag", "today": "I dag",
"Shona": "Shona", "Shona": "Shona",
"Slovenian": "Slovensk", "Slovenian": "Slovensk",
"Gaming": "Gaming", "Gaming": "Gaming",
@ -237,35 +246,35 @@
"footer_documentation": "Dokumentation", "footer_documentation": "Dokumentation",
"Pashto": "Pashto", "Pashto": "Pashto",
"footer_modfied_source_code": "Modificeret Kildekode", "footer_modfied_source_code": "Modificeret Kildekode",
"Released under the AGPLv3 on Github.": "Udgivet under AGPLv3 på GitHub.", "Released under the AGPLv3 on Github.": "Udgivet under AGPLv3 på Github.",
"Tajik": "Tadsjikisk", "Tajik": "Tadsjikisk",
"search_filters_date_option_month": "Denne måned", "month": "Denne måned",
"Hebrew": "Hebraisk", "Hebrew": "Hebraisk",
"Kannada": "Kannada", "Kannada": "Kannada",
"Current version: ": "Nuværende version: ", "Current version: ": "Nuværende version: ",
"Amharic": "Amharisk", "Amharic": "Amharisk",
"Swedish": "Svensk", "Swedish": "Svensk",
"Corsican": "Korsikansk", "Corsican": "Korsikansk",
"search_filters_type_option_movie": "Film", "movie": "Film",
"Could not pull trending pages.": "Kunne ikke hente trending sider.", "Could not pull trending pages.": "Kunne ikke hente trending sider.",
"English": "Engelsk", "English": "Engelsk",
"search_filters_features_option_hd": "HD", "hd": "HD",
"Hausa": "Islandsk", "Hausa": "Islandsk",
"search_filters_date_option_year": "Dette år", "year": "Dette år",
"Japanese": "Japansk", "Japanese": "Japansk",
"search_filters_type_label": "Type", "content_type": "Type",
"Icelandic": "Islandsk", "Icelandic": "Islandsk",
"Basque": "Baskisk", "Basque": "Baskisk",
"search_filters_sort_option_rating": "Bedømmelse", "rating": "Bedømmelse",
"Yoruba": "Yoruba", "Yoruba": "Yoruba",
"Erroneous token": "Fejlagtig token", "Erroneous token": "Fejlagtig token",
"channel_tab_videos_label": "Videoer", "Videos": "Videoer",
"search_filters_type_option_show": "Vis", "show": "Vis",
"Luxembourgish": "Luxemboursk", "Luxembourgish": "Luxemboursk",
"Vietnamese": "Vietnamesisk", "Vietnamese": "Vietnamesisk",
"Latvian": "Lettisk", "Latvian": "Lettisk",
"Indonesian": "Indonesisk", "Indonesian": "Indonesisk",
"search_filters_duration_label": "Varighed", "duration": "Varighed",
"footer_original_source_code": "Original kildekode", "footer_original_source_code": "Original kildekode",
"Search": "Søg", "Search": "Søg",
"Serbian": "Serbisk", "Serbian": "Serbisk",
@ -280,8 +289,8 @@
"Rating: ": "Bedømmelse: ", "Rating: ": "Bedømmelse: ",
"Movies": "Film", "Movies": "Film",
"YouTube comment permalink": "Youtube kommentarer permalink", "YouTube comment permalink": "Youtube kommentarer permalink",
"search_filters_features_option_location": "Lokation", "location": "Lokation",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"Cebuano": "Cebuano (Sugbuanon)", "Cebuano": "Cebuano (Sugbuanon)",
"Nyanja": "Nyanja", "Nyanja": "Nyanja",
"Chinese (Simplified)": "Kinesisk (forenklet)", "Chinese (Simplified)": "Kinesisk (forenklet)",
@ -297,11 +306,11 @@
"German": "Tysk", "German": "Tysk",
"Maori": "Maori", "Maori": "Maori",
"Slovak": "Slovakisk", "Slovak": "Slovakisk",
"search_filters_sort_option_relevance": "Relevans", "relevance": "Relevans",
"search_filters_date_option_hour": "Sidste time", "hour": "Sidste time",
"search_filters_type_option_playlist": "Spilleliste", "playlist": "Spilleliste",
"search_filters_duration_option_long": "Lang (> 20 minutter)", "long": "Lang (> 20 minutter)",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"Marathi": "Marathi", "Marathi": "Marathi",
"Sindhi": "Sindhi", "Sindhi": "Sindhi",
"preferences_category_misc": "Diverse indstillinger", "preferences_category_misc": "Diverse indstillinger",
@ -318,8 +327,8 @@
"Western Frisian": "Vestfrisisk", "Western Frisian": "Vestfrisisk",
"Top": "Top", "Top": "Top",
"Music": "Musik", "Music": "Musik",
"search_filters_sort_option_views": "Antal visninger", "views": "Antal visninger",
"search_filters_sort_label": "Sorter efter", "sort": "Sorter efter",
"Zulu": "Zulu", "Zulu": "Zulu",
"Invidious Private Feed for `x`": "Invidious Privat Feed til `x`", "Invidious Private Feed for `x`": "Invidious Privat Feed til `x`",
"English (auto-generated)": "Engelsk (autogenereret)", "English (auto-generated)": "Engelsk (autogenereret)",
@ -340,6 +349,7 @@
"next_steps_error_message": "Efter det burde du prøve at: ", "next_steps_error_message": "Efter det burde du prøve at: ",
"Sinhala": "Singalesisk (Sinhala)", "Sinhala": "Singalesisk (Sinhala)",
"Thai": "Thai", "Thai": "Thai",
"Broken? Try another Invidious Instance": "I stykker? Prøv en anden Invidious instans",
"No such user": "Brugeren findes ikke", "No such user": "Brugeren findes ikke",
"Token is expired, please try again": "Token er udløbet, prøv igen", "Token is expired, please try again": "Token er udløbet, prøv igen",
"Catalan": "Catalansk", "Catalan": "Catalansk",
@ -349,16 +359,16 @@
"Scottish Gaelic": "Skotsk Gælisk", "Scottish Gaelic": "Skotsk Gælisk",
"Default": "Standard", "Default": "Standard",
"Video mode": "Videotilstand", "Video mode": "Videotilstand",
"search_filters_duration_option_short": "Kort (< 4 minutter)", "short": "Kort (< 4 minutter)",
"Hidden field \"token\" is a required field": "Det skjulte felt \"token\" er et påkrævet felt", "Hidden field \"token\" is a required field": "Det skjulte felt \"token\" er et påkrævet felt",
"Azerbaijani": "Aserbajdsjansk", "Azerbaijani": "Aserbajdsjansk",
"Georgian": "Georgisk", "Georgian": "Georgisk",
"Italian": "Italiensk", "Italian": "Italiensk",
"Audio mode": "Lydtilstand", "Audio mode": "Lydtilstand",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"Hmong": "Hmong", "Hmong": "Hmong",
"preferences_quality_option_medium": "Medium", "preferences_quality_option_medium": "Medium",
"preferences_quality_option_small": "Lille", "preferences_quality_option_small": "Lille",
@ -371,8 +381,8 @@
"preferences_quality_dash_option_360p": "360p", "preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_purchased": "Købt", "purchased": "Købt",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "ingen", "none": "ingen",
"videoinfo_started_streaming_x_ago": "Streamen blev startet for `x`siden", "videoinfo_started_streaming_x_ago": "Streamen blev startet for `x`siden",
"videoinfo_watch_on_youTube": "Se på YouTube", "videoinfo_watch_on_youTube": "Se på YouTube",
@ -382,75 +392,11 @@
"user_created_playlists": "`x`opretede spillelister", "user_created_playlists": "`x`opretede spillelister",
"user_saved_playlists": "´x`gemte spillelister", "user_saved_playlists": "´x`gemte spillelister",
"Video unavailable": "Video ikke tilgængelig", "Video unavailable": "Video ikke tilgængelig",
"preferences_save_player_pos_label": "Gem afspilningsposition: ", "preferences_save_player_pos_label": "Gem den nuværende videotid: ",
"preferences_quality_dash_option_auto": "Auto", "preferences_quality_dash_option_auto": "Auto",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_2160p": "2160p", "preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_option_dash": "DASH (adaptiv kvalitet)", "preferences_quality_option_dash": "DASH (adaptiv kvalitet)",
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p"
"subscriptions_unseen_notifs_count": "{{count}} uset notifikation",
"subscriptions_unseen_notifs_count_plural": "{{count}} usete notifikationer",
"comments_view_x_replies": "Vis {{count}} svar",
"comments_view_x_replies_plural": "Vis {{count}} svar",
"comments_points_count": "{{count}} point",
"comments_points_count_plural": "{{count}} point",
"generic_count_years": "{{count}} år",
"generic_count_years_plural": "{{count}} år",
"generic_count_months": "{{count}} måned",
"generic_count_months_plural": "{{count}} måneder",
"generic_count_days": "{{count}} dag",
"generic_count_days_plural": "{{count}} dage",
"generic_count_minutes": "{{count}} minut",
"generic_count_minutes_plural": "{{count}} minutter",
"generic_count_seconds": "{{count}} sekund",
"generic_count_seconds_plural": "{{count}} sekunder",
"generic_subscribers_count": "{{count}} abonnent",
"generic_subscribers_count_plural": "{{count}} abonnenter",
"generic_subscriptions_count": "{{count}} abonnement",
"generic_subscriptions_count_plural": "{{count}} abonnementer",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} videoer",
"English (United States)": "Engelsk (USA)",
"French (auto-generated)": "Fransk (autogenereret)",
"Spanish (auto-generated)": "Spansk (autogenereret)",
"crash_page_before_reporting": "Før du rapporterer en fejl, skal du sikre dig, at du har:",
"crash_page_refresh": "forsøgte at <a href=\"`x`\">opdatere siden</a>",
"generic_playlists_count": "{{count}} spilleliste",
"generic_playlists_count_plural": "{{count}} spillelister",
"preferences_watch_history_label": "Aktiver afspilningshistorik: ",
"tokens_count": "{{count}} token",
"tokens_count_plural": "{{count}} tokens",
"Cantonese (Hong Kong)": "Kantonesisk (Hongkong)",
"Chinese": "Kinesisk",
"Chinese (China)": "Kinesisk (Kina)",
"Chinese (Hong Kong)": "Kinesisk (Hongkong)",
"Chinese (Taiwan)": "Kinesisk (Taiwan)",
"Dutch (auto-generated)": "Hollandsk (autogenereret)",
"Indonesian (auto-generated)": "Indonesisk (autogenereret)",
"Interlingue": "Interlingue",
"Japanese (auto-generated)": "Japansk (autogenereret)",
"Korean (auto-generated)": "Koreansk (autogenereret)",
"Russian (auto-generated)": "Russisk (autogenereret)",
"Turkish (auto-generated)": "Tyrkisk (autogenereret)",
"Vietnamese (auto-generated)": "Vietnamesisk (autogenereret)",
"crash_page_report_issue": "Hvis intet af ovenstående hjalp, bedes du <a href=\"`x`\">åbne et nyt problem på GitHub</a> (helst på engelsk) og inkludere følgende tekst i din besked (oversæt IKKE denne tekst):",
"English (United Kingdom)": "Engelsk (Storbritannien)",
"Italian (auto-generated)": "Italiensk (autogenereret)",
"Portuguese (auto-generated)": "Portugisisk (autogenereret)",
"Portuguese (Brazil)": "Portugisisk (Brasilien)",
"generic_views_count": "{{count}} visning",
"generic_views_count_plural": "{{count}} visninger",
"generic_count_hours": "{{count}} time",
"generic_count_hours_plural": "{{count}} timer",
"Spanish (Spain)": "Spansk (Spanien)",
"crash_page_switch_instance": "forsøgte at <a href=\"`x`\">bruge en anden instans</a>",
"German (auto-generated)": "Tysk (autogenereret)",
"Spanish (Mexico)": "Spansk (Mexico)",
"generic_count_weeks": "{{count}} uge",
"generic_count_weeks_plural": "{{count}} uger",
"crash_page_you_found_a_bug": "Det ser ud til, at du har fundet en fejl i Invidious!",
"crash_page_read_the_faq": "læs <a href=\"`x`\">Ofte stillede spørgsmål (FAQ)</a>",
"crash_page_search_issue": "søgte efter <a href=\"`x`\">eksisterende problemer på GitHub</a>",
"search_filters_title": "Filter"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Verlauf löschen?", "Clear watch history?": "Verlauf löschen?",
"New password": "Neues Passwort", "New password": "Neues Passwort",
"New passwords must match": "Neue Passwörter müssen übereinstimmen", "New passwords must match": "Neue Passwörter müssen übereinstimmen",
"Cannot change password for Google accounts": "Ich kann das Passwort deines Google Kontos nicht ändern",
"Authorize token?": "Token autorisieren?", "Authorize token?": "Token autorisieren?",
"Authorize token for `x`?": "Token für `x` autorisieren?", "Authorize token for `x`?": "Token für `x` autorisieren?",
"Yes": "Ja", "Yes": "Ja",
"No": "Nein", "No": "Nein",
"Import and Export Data": "Daten importieren und exportieren", "Import and Export Data": "Daten importieren und exportieren",
"Import": "Importieren", "Import": "Importieren",
"Import Invidious data": "Invidious-JSON-Daten importieren", "Import Invidious data": "Invidious Daten importieren",
"Import YouTube subscriptions": "YouTube-/OPML-Abonnements importieren", "Import YouTube subscriptions": "YouTube Abonnements importieren",
"Import FreeTube subscriptions (.db)": "FreeTube Abonnements importieren (.db)", "Import FreeTube subscriptions (.db)": "FreeTube Abonnements importieren (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe Abonnements importieren (.json)", "Import NewPipe subscriptions (.json)": "NewPipe Abonnements importieren (.json)",
"Import NewPipe data (.zip)": "NewPipe Daten importieren (.zip)", "Import NewPipe data (.zip)": "NewPipe Daten importieren (.zip)",
"Export": "Exportieren", "Export": "Exportieren",
"Export subscriptions as OPML": "Abonnements als OPML exportieren", "Export subscriptions as OPML": "Abonnements als OPML exportieren",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnements als OPML exportieren (für NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnements als OPML exportieren (für NewPipe & FreeTube)",
"Export data as JSON": "Invidious-Daten als JSON exportieren", "Export data as JSON": "Daten als JSON exportieren",
"Delete account?": "Konto löschen?", "Delete account?": "Konto löschen?",
"History": "Verlauf", "History": "Verlauf",
"An alternative front-end to YouTube": "Eine alternative Oberfläche für YouTube", "An alternative front-end to YouTube": "Eine alternative Oberfläche für YouTube",
@ -36,6 +37,7 @@
"source": "Quelle", "source": "Quelle",
"Log in": "Anmelden", "Log in": "Anmelden",
"Log in/register": "Anmelden/registrieren", "Log in/register": "Anmelden/registrieren",
"Log in with Google": "Mit Google anmelden",
"User ID": "Benutzer-ID", "User ID": "Benutzer-ID",
"Password": "Passwort", "Password": "Passwort",
"Time (h:mm:ss):": "Zeit (h:mm:ss):", "Time (h:mm:ss):": "Zeit (h:mm:ss):",
@ -44,14 +46,15 @@
"Sign In": "Anmelden", "Sign In": "Anmelden",
"Register": "Registrieren", "Register": "Registrieren",
"E-mail": "E-Mail", "E-mail": "E-Mail",
"Google verification code": "Google-Bestätigungscode",
"Preferences": "Einstellungen", "Preferences": "Einstellungen",
"preferences_category_player": "Wiedergabeeinstellungen", "preferences_category_player": "Wiedergabeeinstellungen",
"preferences_video_loop_label": "Immer wiederholen: ", "preferences_video_loop_label": "Immer wiederholen: ",
"preferences_autoplay_label": "Automatisch abspielen: ", "preferences_autoplay_label": "Automatisch abspielen: ",
"preferences_continue_label": "Immer automatisch nächstes Video abspielen: ", "preferences_continue_label": "Immer automatisch nächstes Video spielen: ",
"preferences_continue_autoplay_label": "Nächstes Video automatisch abspielen: ", "preferences_continue_autoplay_label": "nächstes Video automatisch abspielen: ",
"preferences_listen_label": "Nur Ton als Standard: ", "preferences_listen_label": "Nur Ton als Standard: ",
"preferences_local_label": "Videos durch Proxy leiten: ", "preferences_local_label": "Proxy-Videos: ",
"preferences_speed_label": "Standardgeschwindigkeit: ", "preferences_speed_label": "Standardgeschwindigkeit: ",
"preferences_quality_label": "Bevorzugte Videoqualität: ", "preferences_quality_label": "Bevorzugte Videoqualität: ",
"preferences_volume_label": "Wiedergabelautstärke: ", "preferences_volume_label": "Wiedergabelautstärke: ",
@ -60,12 +63,12 @@
"reddit": "Reddit", "reddit": "Reddit",
"preferences_captions_label": "Standarduntertitel: ", "preferences_captions_label": "Standarduntertitel: ",
"Fallback captions: ": "Ersatzuntertitel: ", "Fallback captions: ": "Ersatzuntertitel: ",
"preferences_related_videos_label": "Ähnliche Videos anzeigen: ", "preferences_related_videos_label": "Ähnliche Videos anzeigen? ",
"preferences_annotations_label": "Anmerkungen standardmäßig anzeigen: ", "preferences_annotations_label": "Standardmäßig Anmerkungen anzeigen? ",
"preferences_extend_desc_label": "Videobeschreibung automatisch erweitern: ", "preferences_extend_desc_label": "Videobeschreibung automatisch erweitern: ",
"preferences_vr_mode_label": "Interaktive 360-Grad-Videos (erfordert WebGL): ", "preferences_vr_mode_label": "Interaktive 360 Grad Videos: ",
"preferences_category_visual": "Anzeigeeinstellungen", "preferences_category_visual": "Anzeigeeinstellungen",
"preferences_player_style_label": "Player-Stil: ", "preferences_player_style_label": "Abspielgeräterstil: ",
"Dark mode: ": "Nachtmodus: ", "Dark mode: ": "Nachtmodus: ",
"preferences_dark_mode_label": "Modus: ", "preferences_dark_mode_label": "Modus: ",
"dark": "Nachtmodus", "dark": "Nachtmodus",
@ -118,7 +121,7 @@
"Subscriptions": "Abonnements", "Subscriptions": "Abonnements",
"search": "Suchen", "search": "Suchen",
"Log out": "Abmelden", "Log out": "Abmelden",
"Released under the AGPLv3 on Github.": "Auf GitHub unter der AGPLv3 Lizenz veröffentlicht.", "Released under the AGPLv3 on Github.": "Auf Github unter der AGPLv3 Lizenz veröffentlicht.",
"Source available here.": "Quellcode verfügbar hier.", "Source available here.": "Quellcode verfügbar hier.",
"View JavaScript license information.": "Javascript Lizenzinformationen anzeigen.", "View JavaScript license information.": "Javascript Lizenzinformationen anzeigen.",
"View privacy policy.": "Datenschutzerklärung einsehen.", "View privacy policy.": "Datenschutzerklärung einsehen.",
@ -138,6 +141,7 @@
"Show less": "Weniger anzeigen", "Show less": "Weniger anzeigen",
"Watch on YouTube": "Video auf YouTube ansehen", "Watch on YouTube": "Video auf YouTube ansehen",
"Switch Invidious Instance": "Invidious Instanz wechseln", "Switch Invidious Instance": "Invidious Instanz wechseln",
"Broken? Try another Invidious Instance": "Funktioniert nicht? Probiere eine andere Invidious Instanz aus",
"Hide annotations": "Anmerkungen ausblenden", "Hide annotations": "Anmerkungen ausblenden",
"Show annotations": "Anmerkungen anzeigen", "Show annotations": "Anmerkungen anzeigen",
"Genre: ": "Genre: ", "Genre: ": "Genre: ",
@ -161,12 +165,17 @@
"Hide replies": "Antworten verstecken", "Hide replies": "Antworten verstecken",
"Show replies": "Antworten anzeigen", "Show replies": "Antworten anzeigen",
"Incorrect password": "Falsches Passwort", "Incorrect password": "Falsches Passwort",
"Quota exceeded, try again in a few hours": "Kontingent überschritten, versuche es in ein paar Stunden erneut",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Anmeldung nicht möglich, stellen Sie sicher, dass die Zwei-Faktor-Authentisierung (Authenticator oder SMS) aktiviert ist.",
"Invalid TFA code": "Ungültiger TFA Code",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Die Anmeldung ist fehlgeschlagen. Dies kann daran liegen, dass die Zwei-Faktor-Authentisierung für Ihr Konto nicht aktiviert ist.",
"Wrong answer": "Ungültige Antwort", "Wrong answer": "Ungültige Antwort",
"Erroneous CAPTCHA": "Ungültiges CAPTCHA", "Erroneous CAPTCHA": "Ungültiges CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA ist eine erforderliche Eingabe", "CAPTCHA is a required field": "CAPTCHA ist eine erforderliche Eingabe",
"User ID is a required field": "Benutzer ID ist eine erforderliche Eingabe", "User ID is a required field": "Benutzer ID ist eine erforderliche Eingabe",
"Password is a required field": "Passwort ist eine erforderliche Eingabe", "Password is a required field": "Passwort ist eine erforderliche Eingabe",
"Wrong username or password": "Ungültiger Benutzername oder Passwort", "Wrong username or password": "Ungültiger Benutzername oder Passwort",
"Please sign in using 'Log in with Google'": "Bitte melden Sie sich mit „Mit Google anmelden“ an",
"Password cannot be empty": "Passwort darf nicht leer sein", "Password cannot be empty": "Passwort darf nicht leer sein",
"Password cannot be longer than 55 characters": "Passwort darf nicht länger als 55 Zeichen sein", "Password cannot be longer than 55 characters": "Passwort darf nicht länger als 55 Zeichen sein",
"Please log in": "Bitte anmelden", "Please log in": "Bitte anmelden",
@ -317,49 +326,50 @@
"`x` marked it with a ❤": "`x` markierte es mit einem ❤", "`x` marked it with a ❤": "`x` markierte es mit einem ❤",
"Audio mode": "Audiomodus", "Audio mode": "Audiomodus",
"Video mode": "Videomodus", "Video mode": "Videomodus",
"channel_tab_videos_label": "Videos", "Videos": "Videos",
"Playlists": "Wiedergabelisten", "Playlists": "Wiedergabelisten",
"channel_tab_community_label": "Gemeinschaft", "Community": "Gemeinschaft",
"search_filters_sort_option_relevance": "Relevanz", "relevance": "Relevanz",
"search_filters_sort_option_rating": "Bewertung", "rating": "Bewertung",
"search_filters_sort_option_date": "Datum", "date": "Datum",
"search_filters_sort_option_views": "Aufrufe", "views": "Aufrufe",
"search_filters_type_label": "Inhaltstyp", "content_type": "Inhaltstyp",
"search_filters_duration_label": "Dauer", "duration": "Dauer",
"search_filters_features_label": "Eigenschaften", "features": "Eigenschaften",
"search_filters_sort_label": "sortieren", "sort": "sortieren",
"search_filters_date_option_hour": "Letzte Stunde", "hour": "Letzte Stunde",
"search_filters_date_option_today": "Heute", "today": "Heute",
"search_filters_date_option_week": "Diese Woche", "week": "Diese Woche",
"search_filters_date_option_month": "Diesen Monat", "month": "Diesen Monat",
"search_filters_date_option_year": "Dieses Jahr", "year": "Dieses Jahr",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"search_filters_type_option_playlist": "Wiedergabeliste", "playlist": "Wiedergabeliste",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_type_option_show": "Anzeigen", "show": "Anzeigen",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Untertitel / CC", "subtitles": "Untertitel / CC",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Live", "live": "Live",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Standort", "location": "Standort",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Filtern",
"Current version: ": "Aktuelle Version: ", "Current version: ": "Aktuelle Version: ",
"next_steps_error_message": "Danach folgendes versuchen: ", "next_steps_error_message": "Danach folgendes versuchen: ",
"next_steps_error_message_refresh": "Aktualisieren", "next_steps_error_message_refresh": "Aktualisieren",
"next_steps_error_message_go_to_youtube": "Zu YouTube gehen", "next_steps_error_message_go_to_youtube": "Zu YouTube gehen",
"footer_donate_page": "Spende", "footer_donate_page": "Spende",
"search_filters_duration_option_long": "Lang (> 20 Minuten)", "long": "Lang (> 20 Minuten)",
"footer_original_source_code": "Original Quellcode", "footer_original_source_code": "Original Quellcode",
"footer_modfied_source_code": "Modifizierter Quellcode", "footer_modfied_source_code": "Modifizierter Quellcode",
"footer_documentation": "Dokumentation", "footer_documentation": "Dokumentation",
"footer_source_code": "Quellcode", "footer_source_code": "Quellcode",
"adminprefs_modified_source_code_url_label": "URL zum Repositorie des modifizierten Quellcodes", "adminprefs_modified_source_code_url_label": "URL zum Repositorie des modifizierten Quellcodes",
"search_filters_duration_option_short": "Kurz (< 4 Minuten)", "short": "Kurz (< 4 Minuten)",
"preferences_region_label": "Land der Inhalte: ", "preferences_region_label": "Land der Inhalte: ",
"preferences_quality_option_dash": "DASH (adaptive Qualität)", "preferences_quality_option_dash": "DASH (automatische Qualität)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Mittel", "preferences_quality_option_medium": "Mittel",
"preferences_quality_option_small": "Niedrig", "preferences_quality_option_small": "Niedrig",
@ -378,102 +388,15 @@
"Video unavailable": "Video nicht verfügbar", "Video unavailable": "Video nicht verfügbar",
"user_created_playlists": "`x` Wiedergabelisten erstellt", "user_created_playlists": "`x` Wiedergabelisten erstellt",
"user_saved_playlists": "`x` Wiedergabelisten gespeichert", "user_saved_playlists": "`x` Wiedergabelisten gespeichert",
"preferences_save_player_pos_label": "Wiedergabeposition speichern: ", "preferences_save_player_pos_label": "Aktuelle Position speichern: ",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"preferences_quality_dash_option_best": "Höchste", "preferences_quality_dash_option_best": "Höchste",
"preferences_quality_dash_option_worst": "Niedrigste", "preferences_quality_dash_option_worst": "Niedrigste",
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"videoinfo_youTube_embed_link": "Eingebettet", "videoinfo_youTube_embed_link": "Eingebettet",
"search_filters_features_option_purchased": "Gekauft", "purchased": "Gekauft",
"none": "keine", "none": "keine",
"videoinfo_started_streaming_x_ago": "Stream begann vor `x`", "videoinfo_started_streaming_x_ago": "Stream begann vor `x`",
"videoinfo_watch_on_youTube": "Auf YouTube ansehen", "videoinfo_watch_on_youTube": "Auf YouTube ansehen",
"preferences_quality_dash_label": "Bevorzugte DASH-Videoqualität: ", "preferences_quality_dash_label": "Bevorzugte DASH-Videoqualität: "
"generic_subscribers_count": "{{count}} Abonnent",
"generic_subscribers_count_plural": "{{count}} Abonnenten",
"generic_videos_count": "{{count}} Video",
"generic_videos_count_plural": "{{count}} Videos",
"subscriptions_unseen_notifs_count": "{{count}} ungesehene Benachrichtung",
"subscriptions_unseen_notifs_count_plural": "{{count}} ungesehene Benachrichtungen",
"crash_page_refresh": "Versucht haben, <a href=\"`x`\">die Seite neu zu laden</a>",
"comments_view_x_replies": "{{count}} Antwort anzeigen",
"comments_view_x_replies_plural": "{{count}} Antworten anzeigen",
"generic_count_years": "{{count}} Jahr",
"generic_count_years_plural": "{{count}} Jahre",
"generic_count_weeks": "{{count}} Woche",
"generic_count_weeks_plural": "{{count}} Wochen",
"generic_count_days": "{{count}} Tag",
"generic_count_days_plural": "{{count}} Tage",
"crash_page_before_reporting": "Bevor Sie einen Bug melden, stellen Sie sicher, dass Sie:",
"crash_page_switch_instance": "Eine <a href=\"`x`\">andere Instanz</a> versucht haben",
"generic_count_hours": "{{count}} Stunde",
"generic_count_hours_plural": "{{count}} Stunden",
"generic_count_minutes": "{{count}} Minute",
"generic_count_minutes_plural": "{{count}} Minuten",
"crash_page_read_the_faq": "Das <a href=\"`x`\">FAQ</a> gelesen haben",
"crash_page_search_issue": "Nach <a href=\"`x`\">bereits gemeldeten Bugs auf GitHub</a> gesucht haben",
"crash_page_report_issue": "Wenn all dies nicht geholfen hat, <a href=\"`x`\">öffnen Sie bitte ein neues Problem (issue) auf Github</a> (vorzugsweise auf Englisch) und fügen Sie den folgenden Text in Ihre Nachricht ein (bitte übersetzen Sie diesen Text NICHT):",
"generic_views_count": "{{count}} Aufruf",
"generic_views_count_plural": "{{count}} Aufrufe",
"generic_count_seconds": "{{count}} Sekunde",
"generic_count_seconds_plural": "{{count}} Sekunden",
"generic_subscriptions_count": "{{count}} Abo",
"generic_subscriptions_count_plural": "{{count}} Abos",
"tokens_count": "{{count}} Token",
"tokens_count_plural": "{{count}} Tokens",
"comments_points_count": "{{count}} Punkt",
"comments_points_count_plural": "{{count}} Punkte",
"crash_page_you_found_a_bug": "Anscheinend haben Sie einen Fehler in Invidious gefunden!",
"generic_count_months": "{{count}} Monat",
"generic_count_months_plural": "{{count}} Monaten",
"Cantonese (Hong Kong)": "Kantonesisch (Hong Kong)",
"Chinese (Hong Kong)": "Chinesisch (Hong Kong)",
"generic_playlists_count": "{{count}} Wiedergabeliste",
"generic_playlists_count_plural": "{{count}} Wiedergabelisten",
"preferences_watch_history_label": "Wiedergabeverlauf aktivieren: ",
"English (United Kingdom)": "Englisch (Vereinigtes Königreich)",
"English (United States)": "Englisch (Vereinigte Staaten)",
"Dutch (auto-generated)": "Niederländisch (automatisch generiert)",
"French (auto-generated)": "Französisch (automatisch generiert)",
"German (auto-generated)": "Deutsch (automatisch generiert)",
"Indonesian (auto-generated)": "Indonesisch (automatisch generiert)",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italienisch (automatisch generiert)",
"Japanese (auto-generated)": "Japanisch (automatisch generiert)",
"Spanish (Mexico)": "Spanisch (Mexiko)",
"Spanish (Spain)": "Spanisch (Spanien)",
"Vietnamese (auto-generated)": "Vietnamesisch (automatisch generiert)",
"Russian (auto-generated)": "Russisch (automatisch generiert)",
"Chinese": "Chinesisch",
"Portuguese (Brazil)": "Portugiesisch (Brasilien)",
"Spanish (auto-generated)": "Spanisch (automatisch generiert)",
"Turkish (auto-generated)": "Türkisch (automatisch generiert)",
"Chinese (China)": "Chinesisch (China)",
"Chinese (Taiwan)": "Chinesisch (Taiwan)",
"Korean (auto-generated)": "Koreanisch (automatisch generiert)",
"Portuguese (auto-generated)": "Portugiesisch (automatisch generiert)",
"search_filters_title": "Filtern",
"search_message_change_filters_or_query": "Versuchen Sie, Ihre Suchanfrage zu erweitern und/oder die Filter zu ändern.",
"search_message_use_another_instance": " Sie können auch <a href=\"`x`\">auf einer anderen Instanz suchen</a>.",
"Popular enabled: ": "„Beliebt“-Seite aktiviert: ",
"search_message_no_results": "Keine Ergebnisse gefunden.",
"search_filters_duration_option_medium": "Mittel (4 - 20 Minuten)",
"search_filters_features_option_vr180": "VR180",
"search_filters_type_option_all": "Beliebiger Typ",
"search_filters_apply_button": "Ausgewählte Filter anwenden",
"search_filters_duration_option_none": "Beliebige Länge",
"search_filters_date_label": "Upload-Datum",
"search_filters_date_option_none": "Beliebiges Datum",
"error_video_not_in_playlist": "Das angeforderte Video existiert nicht in dieser Wiedergabeliste. <a href=\"`x`\">Klicken Sie hier, um zur Startseite der Wiedergabeliste zu gelangen.</a>",
"channel_tab_shorts_label": "Shorts",
"channel_tab_streams_label": "Livestreams",
"Music in this video": "Musik in diesem Video",
"Artist: ": "Künstler: ",
"Album: ": "Album: ",
"channel_tab_playlists_label": "Wiedergabelisten",
"channel_tab_channels_label": "Kanäle",
"Channel Sponsor": "Kanalsponsor",
"Standard YouTube license": "Standard YouTube-Lizenz",
"Song: ": "Musik: ",
"Download is disabled": "Herunterladen ist deaktiviert"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Διαγραφή ιστορικού προβολής;", "Clear watch history?": "Διαγραφή ιστορικού προβολής;",
"New password": "Νέος κωδικός πρόσβασης", "New password": "Νέος κωδικός πρόσβασης",
"New passwords must match": "Οι νέοι κωδικοί πρόσβασης πρέπει να ταιριάζουν", "New passwords must match": "Οι νέοι κωδικοί πρόσβασης πρέπει να ταιριάζουν",
"Cannot change password for Google accounts": "Δεν επιτρέπεται η αλλαγή κωδικού πρόσβασης λογαριασμών Google",
"Authorize token?": "Εξουσιοδότηση διασύνδεσης;", "Authorize token?": "Εξουσιοδότηση διασύνδεσης;",
"Authorize token for `x`?": "Εξουσιοδότηση διασύνδεσης με `x`;", "Authorize token for `x`?": "Εξουσιοδότηση διασύνδεσης με `x`;",
"Yes": "Ναι", "Yes": "Ναι",
@ -36,6 +37,7 @@
"source": "πηγή", "source": "πηγή",
"Log in": "Σύνδεση", "Log in": "Σύνδεση",
"Log in/register": "Σύνδεση/εγγραφή", "Log in/register": "Σύνδεση/εγγραφή",
"Log in with Google": "Σύνδεση με Google",
"User ID": "Ταυτότητα χρήστη", "User ID": "Ταυτότητα χρήστη",
"Password": "Κωδικός πρόσβασης", "Password": "Κωδικός πρόσβασης",
"Time (h:mm:ss):": "Ώρα (ω:λλ:δδ):", "Time (h:mm:ss):": "Ώρα (ω:λλ:δδ):",
@ -44,6 +46,7 @@
"Sign In": "Σύνδεση", "Sign In": "Σύνδεση",
"Register": "Εγγραφή", "Register": "Εγγραφή",
"E-mail": "Ηλεκτρονικό ταχυδρομείο", "E-mail": "Ηλεκτρονικό ταχυδρομείο",
"Google verification code": "Κωδικός επαλήθευσης Google",
"Preferences": "Προτιμήσεις", "Preferences": "Προτιμήσεις",
"preferences_category_player": "Προτιμήσεις αναπαραγωγής", "preferences_category_player": "Προτιμήσεις αναπαραγωγής",
"preferences_video_loop_label": "Αυτόματη επανάληψη: ", "preferences_video_loop_label": "Αυτόματη επανάληψη: ",
@ -152,12 +155,17 @@
"Hide replies": "Απόκρυψη απαντήσεων", "Hide replies": "Απόκρυψη απαντήσεων",
"Show replies": "Προβολή απαντήσεων", "Show replies": "Προβολή απαντήσεων",
"Incorrect password": "Λανθασμένος κωδικός πρόσβασης", "Incorrect password": "Λανθασμένος κωδικός πρόσβασης",
"Quota exceeded, try again in a few hours": "Έχετε υπερβεί το όριο προσπαθειών, δοκιμάστε ξανα σε λίγες ώρες",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Αδυναμία σύνδεσης, βεβαιωθείτε πως ο έλεγχος ταυτότητας δύο παραγόντων (με Authenticator ή SMS) είναι ενεργοποιημένος.",
"Invalid TFA code": "Μη έγκυρος κωδικός ελέγχου ταυτότητας δύο παραγόντων",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Αποτυχία σύνδεσης. Ίσως ευθύνεται η έλλειψη ελέγχου ταυτότητας δύο παραγόντων για το λογαριασμό σας.",
"Wrong answer": "Λανθασμένη απάντηση", "Wrong answer": "Λανθασμένη απάντηση",
"Erroneous CAPTCHA": "Λανθασμένο CAPTCHA", "Erroneous CAPTCHA": "Λανθασμένο CAPTCHA",
"CAPTCHA is a required field": "Το CAPTCHA είναι απαιτούμενο πεδίο", "CAPTCHA is a required field": "Το CAPTCHA είναι απαιτούμενο πεδίο",
"User ID is a required field": "Η ταυτότητα χρήστη είναι απαιτούμενο πεδίο", "User ID is a required field": "Η ταυτότητα χρήστη είναι απαιτούμενο πεδίο",
"Password is a required field": "Ο κωδικός πρόσβασης είναι απαιτούμενο πεδίο", "Password is a required field": "Ο κωδικός πρόσβασης είναι απαιτούμενο πεδίο",
"Wrong username or password": "Λανθασμένο όνομα χρήστη ή κωδικός πρόσβασης", "Wrong username or password": "Λανθασμένο όνομα χρήστη ή κωδικός πρόσβασης",
"Please sign in using 'Log in with Google'": "Συνδεθείτε με την επιλογή 'Σύνδεση με Google'",
"Password cannot be empty": "Ο κωδικός πρόσβασης δεν γίνεται να είναι κενός", "Password cannot be empty": "Ο κωδικός πρόσβασης δεν γίνεται να είναι κενός",
"Password cannot be longer than 55 characters": "Ο κωδικός πρόσβασης δεν γίνεται να υπερβαίνει τους 55 χαρακτήρες", "Password cannot be longer than 55 characters": "Ο κωδικός πρόσβασης δεν γίνεται να υπερβαίνει τους 55 χαρακτήρες",
"Please log in": "Συνδεθείτε", "Please log in": "Συνδεθείτε",
@ -307,9 +315,9 @@
"`x` marked it with a ❤": "Ο χρηστης `x` έβαλε ❤", "`x` marked it with a ❤": "Ο χρηστης `x` έβαλε ❤",
"Audio mode": "Λειτουργία ήχου", "Audio mode": "Λειτουργία ήχου",
"Video mode": "Λειτουργία βίντεο", "Video mode": "Λειτουργία βίντεο",
"channel_tab_videos_label": "Βίντεο", "Videos": "Βίντεο",
"Playlists": "Λίστες Αναπαραγωγής", "Playlists": "Λίστες Αναπαραγωγής",
"channel_tab_community_label": "Κοινότητα", "Community": "Κοινότητα",
"Current version: ": "Τρέχουσα έκδοση: ", "Current version: ": "Τρέχουσα έκδοση: ",
"generic_playlists_count": "{{count}} λίστα αναπαραγωγής", "generic_playlists_count": "{{count}} λίστα αναπαραγωγής",
"generic_playlists_count_plural": "{{count}} λίστες αναπαραγωγής", "generic_playlists_count_plural": "{{count}} λίστες αναπαραγωγής",
@ -350,7 +358,7 @@
"crash_page_before_reporting": "Πριν αναφέρετε ένα σφάλμα, βεβαιωθείτε ότι έχετε:", "crash_page_before_reporting": "Πριν αναφέρετε ένα σφάλμα, βεβαιωθείτε ότι έχετε:",
"crash_page_refresh": "προσπαθήσει να <a href=\"`x`\">ανανεώσετε τη σελίδα</a>", "crash_page_refresh": "προσπαθήσει να <a href=\"`x`\">ανανεώσετε τη σελίδα</a>",
"crash_page_read_the_faq": "διαβάσει τις <a href=\"`x`\">Συχνές Ερωτήσεις (ΣΕ)</a>", "crash_page_read_the_faq": "διαβάσει τις <a href=\"`x`\">Συχνές Ερωτήσεις (ΣΕ)</a>",
"crash_page_search_issue": "αναζητήσει για <a href=\"`x`\">υπάρχοντα θέματα στο GitHub</a>", "crash_page_search_issue": "αναζητήσει για <a href=\"`x`\">υπάρχοντα θέματα στο Github</a>",
"generic_views_count": "{{count}} προβολή", "generic_views_count": "{{count}} προβολή",
"generic_views_count_plural": "{{count}} προβολές", "generic_views_count_plural": "{{count}} προβολές",
"generic_videos_count": "{{count}} βίντεο", "generic_videos_count": "{{count}} βίντεο",
@ -358,57 +366,58 @@
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Μεσαία", "preferences_quality_option_medium": "Μεσαία",
"preferences_quality_option_small": "Μικρό", "preferences_quality_option_small": "Μικρό",
"preferences_quality_option_dash": "DASH (προσαρμόσιμη ποιότητα)", "preferences_quality_option_dash": "DASH (προσαρμοστική ποιότητα)",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_720p": "720p", "preferences_quality_dash_option_720p": "720p",
"invidious": "Invidious", "invidious": "Invidious",
"preferences_region_label": "Χώρα περιεχομένου: ", "preferences_region_label": "Χώρα περιεχομένου: ",
"preferences_category_misc": "Διάφορες προτιμήσεις", "preferences_category_misc": "Διάφορες προτιμήσεις",
"Show more": "Εμφάνιση περισσότερων", "Show more": "Εμφάνιση περισσότερων",
"search_filters_date_option_today": "Σήμερα", "today": "Σήμερα",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"videoinfo_started_streaming_x_ago": "Ξεκίνησε η ροή `x` πριν από", "videoinfo_started_streaming_x_ago": "Ξεκίνησε η ροή `x` πριν από",
"videoinfo_watch_on_youTube": "Παρακολουθήστε στο YouTube", "videoinfo_watch_on_youTube": "Παρακολουθήστε στο YouTube",
"download_subtitles": "Υπότιτλοι - `x` (.vtt)", "download_subtitles": "Υπότιτλοι - `x` (.vtt)",
"user_created_playlists": "`x` δημιουργημένες λίστες αναπαραγωγής", "user_created_playlists": "`x` δημιουργημένες λίστες αναπαραγωγής",
"user_saved_playlists": "`x` αποθηκευμένες λίστες αναπαραγωγής", "user_saved_playlists": "`x` αποθηκευμένες λίστες αναπαραγωγής",
"search_filters_sort_option_rating": "Αξιολόγηση", "rating": "Αξιολόγηση",
"search_filters_sort_option_relevance": "Συνάφεια", "relevance": "Συνάφεια",
"search_filters_features_option_purchased": "Αγορασμένο", "purchased": "Αγορασμένο",
"search_filters_sort_option_date": "Ημερομηνία μεταφόρτωσης", "date": "Ημερομηνία μεταφόρτωσης",
"search_filters_type_label": "Τύπος", "content_type": "Τύπος",
"search_filters_duration_label": "Διάρκεια", "duration": "Διάρκεια",
"search_filters_date_option_week": "Αυτή την εβδομάδα", "week": "Αυτή την εβδομάδα",
"search_filters_date_option_year": "Φέτος", "year": "Φέτος",
"search_filters_type_option_channel": "Κανάλι", "channel": "Κανάλι",
"search_filters_type_option_playlist": "Λίστα αναπαραγωγής", "playlist": "Λίστα αναπαραγωγής",
"search_filters_duration_option_long": "Μεγάλο (> 20 λεπτά)", "long": "Μεγάλο (> 20 λεπτά)",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_location": "Τοποθεσία", "location": "Τοποθεσία",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"next_steps_error_message": "Μετά από αυτό θα πρέπει να προσπαθήσετε να: ", "next_steps_error_message": "Μετά από αυτό θα πρέπει να προσπαθήσετε να: ",
"next_steps_error_message_go_to_youtube": "Μεταβείτε στο YouTube", "next_steps_error_message_go_to_youtube": "Μεταβείτε στο YouTube",
"footer_donate_page": "Δωρεά", "footer_donate_page": "Δωρεά",
"footer_original_source_code": "Πρωτότυπος πηγαίος κώδικας", "footer_original_source_code": "Πρωτότυπος πηγαίος κώδικας",
"preferences_show_nick_label": "Εμφάνιση ψευδώνυμου στην κορυφή: ", "preferences_show_nick_label": "Εμφάνιση ψευδώνυμου στην κορυφή: ",
"search_filters_date_option_hour": "Τελευταία ώρα", "hour": "Τελευταία ώρα",
"adminprefs_modified_source_code_url_label": "URL σε αποθετήριο τροποποιημένου πηγαίου κώδικα", "adminprefs_modified_source_code_url_label": "URL σε αποθετήριο τροποποιημένου πηγαίου κώδικα",
"search_filters_features_option_subtitles": "Υπότιτλοι/CC", "subtitles": "Υπότιτλοι/CC",
"search_filters_date_option_month": "Αυτόν τον μήνα", "month": "Αυτόν τον μήνα",
"Released under the AGPLv3 on Github.": "Κυκλοφορεί υπό την AGPLv3 στο GitHub.", "Released under the AGPLv3 on Github.": "Κυκλοφορεί υπό την AGPLv3 στο Github.",
"search_filters_sort_label": "Ταξινόμηση κατά", "sort": "Ταξινόμηση κατά",
"search_filters_type_option_movie": "Ταινία", "filter": "Φίλτρο",
"movie": "Ταινία",
"footer_modfied_source_code": "Τροποποιημένος πηγαίος κώδικας", "footer_modfied_source_code": "Τροποποιημένος πηγαίος κώδικας",
"search_filters_features_label": "Χαρακτηριστικά", "features": "Χαρακτηριστικά",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"footer_documentation": "Τεκμηρίωση", "footer_documentation": "Τεκμηρίωση",
"search_filters_duration_option_short": "Σύντομο (< 4 λεπτά)", "short": "Σύντομο (< 4 λεπτά)",
"next_steps_error_message_refresh": "Ανανέωση", "next_steps_error_message_refresh": "Ανανέωση",
"search_filters_type_option_video": "Βίντεο", "video": "Βίντεο",
"search_filters_features_option_live": "Ζωντανά", "live": "Ζωντανά",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"Search": "Αναζήτηση", "Search": "Αναζήτηση",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"preferences_extend_desc_label": "Αυτόματη επέκταση της περιγραφής του βίντεο: ", "preferences_extend_desc_label": "Αυτόματη επέκταση της περιγραφής του βίντεο: ",
"preferences_vr_mode_label": "Διαδραστικά βίντεο 360 μοιρών (απαιτεί WebGL): ", "preferences_vr_mode_label": "Διαδραστικά βίντεο 360 μοιρών (απαιτεί WebGL): ",
"Show less": "Εμφάνιση λιγότερων", "Show less": "Εμφάνιση λιγότερων",
@ -439,8 +448,5 @@
"none": "κανένα", "none": "κανένα",
"videoinfo_youTube_embed_link": "Ενσωμάτωση", "videoinfo_youTube_embed_link": "Ενσωμάτωση",
"videoinfo_invidious_embed_link": "Σύνδεσμος Ενσωμάτωσης", "videoinfo_invidious_embed_link": "Σύνδεσμος Ενσωμάτωσης",
"search_filters_type_option_show": "Μπάρα προόδου διαβάσματος", "show": "Μπάρα προόδου διαβάσματος"
"preferences_watch_history_label": "Ενεργοποίηση ιστορικού παρακολούθησης: ",
"search_filters_title": "Φίλτρο",
"search_message_no_results": "Δε βρέθηκαν αποτελέσματα."
} }

@ -24,6 +24,7 @@
"Clear watch history?": "Clear watch history?", "Clear watch history?": "Clear watch history?",
"New password": "New password", "New password": "New password",
"New passwords must match": "New passwords must match", "New passwords must match": "New passwords must match",
"Cannot change password for Google accounts": "Cannot change password for Google accounts",
"Authorize token?": "Authorize token?", "Authorize token?": "Authorize token?",
"Authorize token for `x`?": "Authorize token for `x`?", "Authorize token for `x`?": "Authorize token for `x`?",
"Yes": "Yes", "Yes": "Yes",
@ -32,7 +33,6 @@
"Import": "Import", "Import": "Import",
"Import Invidious data": "Import Invidious JSON data", "Import Invidious data": "Import Invidious JSON data",
"Import YouTube subscriptions": "Import YouTube/OPML subscriptions", "Import YouTube subscriptions": "Import YouTube/OPML subscriptions",
"Import YouTube playlist (.csv)": "Import YouTube playlist (.csv)",
"Import FreeTube subscriptions (.db)": "Import FreeTube subscriptions (.db)", "Import FreeTube subscriptions (.db)": "Import FreeTube subscriptions (.db)",
"Import NewPipe subscriptions (.json)": "Import NewPipe subscriptions (.json)", "Import NewPipe subscriptions (.json)": "Import NewPipe subscriptions (.json)",
"Import NewPipe data (.zip)": "Import NewPipe data (.zip)", "Import NewPipe data (.zip)": "Import NewPipe data (.zip)",
@ -47,6 +47,7 @@
"source": "source", "source": "source",
"Log in": "Log in", "Log in": "Log in",
"Log in/register": "Log in/register", "Log in/register": "Log in/register",
"Log in with Google": "Log in with Google",
"User ID": "User ID", "User ID": "User ID",
"Password": "Password", "Password": "Password",
"Time (h:mm:ss):": "Time (h:mm:ss):", "Time (h:mm:ss):": "Time (h:mm:ss):",
@ -55,6 +56,7 @@
"Sign In": "Sign In", "Sign In": "Sign In",
"Register": "Register", "Register": "Register",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Google verification code",
"Preferences": "Preferences", "Preferences": "Preferences",
"preferences_category_player": "Player preferences", "preferences_category_player": "Player preferences",
"preferences_video_loop_label": "Always loop: ", "preferences_video_loop_label": "Always loop: ",
@ -64,9 +66,10 @@
"preferences_listen_label": "Listen by default: ", "preferences_listen_label": "Listen by default: ",
"preferences_local_label": "Proxy videos: ", "preferences_local_label": "Proxy videos: ",
"preferences_watch_history_label": "Enable watch history: ", "preferences_watch_history_label": "Enable watch history: ",
"preferences_notifications_label": "Enable notifications: ",
"preferences_speed_label": "Default speed: ", "preferences_speed_label": "Default speed: ",
"preferences_quality_label": "Preferred video quality: ", "preferences_quality_label": "Preferred video quality: ",
"preferences_quality_option_dash": "DASH (adaptive quality)", "preferences_quality_option_dash": "DASH (adaptative quality)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Medium", "preferences_quality_option_medium": "Medium",
"preferences_quality_option_small": "Small", "preferences_quality_option_small": "Small",
@ -134,7 +137,6 @@
"preferences_default_home_label": "Default homepage: ", "preferences_default_home_label": "Default homepage: ",
"preferences_feed_menu_label": "Feed menu: ", "preferences_feed_menu_label": "Feed menu: ",
"preferences_show_nick_label": "Show nickname on top: ", "preferences_show_nick_label": "Show nickname on top: ",
"Popular enabled: ": "Popular enabled: ",
"Top enabled: ": "Top enabled: ", "Top enabled: ": "Top enabled: ",
"CAPTCHA enabled: ": "CAPTCHA enabled: ", "CAPTCHA enabled: ": "CAPTCHA enabled: ",
"Login enabled: ": "Login enabled: ", "Login enabled: ": "Login enabled: ",
@ -154,7 +156,7 @@
"subscriptions_unseen_notifs_count_plural": "{{count}} unseen notifications", "subscriptions_unseen_notifs_count_plural": "{{count}} unseen notifications",
"search": "search", "search": "search",
"Log out": "Log out", "Log out": "Log out",
"Released under the AGPLv3 on Github.": "Released under the AGPLv3 on GitHub.", "Released under the AGPLv3 on Github.": "Released under the AGPLv3 on Github.",
"Source available here.": "Source available here.", "Source available here.": "Source available here.",
"View JavaScript license information.": "View JavaScript license information.", "View JavaScript license information.": "View JavaScript license information.",
"View privacy policy.": "View privacy policy.", "View privacy policy.": "View privacy policy.",
@ -174,23 +176,16 @@
"Show less": "Show less", "Show less": "Show less",
"Watch on YouTube": "Watch on YouTube", "Watch on YouTube": "Watch on YouTube",
"Switch Invidious Instance": "Switch Invidious Instance", "Switch Invidious Instance": "Switch Invidious Instance",
"search_message_no_results": "No results found.", "Broken? Try another Invidious Instance": "Broken? Try another Invidious Instance",
"search_message_change_filters_or_query": "Try widening your search query and/or changing the filters.",
"search_message_use_another_instance": " You can also <a href=\"`x`\">search on another instance</a>.",
"Hide annotations": "Hide annotations", "Hide annotations": "Hide annotations",
"Show annotations": "Show annotations", "Show annotations": "Show annotations",
"Genre: ": "Genre: ", "Genre: ": "Genre: ",
"License: ": "License: ", "License: ": "License: ",
"Standard YouTube license": "Standard YouTube license",
"Family friendly? ": "Family friendly? ", "Family friendly? ": "Family friendly? ",
"Wilson score: ": "Wilson score: ", "Wilson score: ": "Wilson score: ",
"Engagement: ": "Engagement: ", "Engagement: ": "Engagement: ",
"Whitelisted regions: ": "Whitelisted regions: ", "Whitelisted regions: ": "Whitelisted regions: ",
"Blacklisted regions: ": "Blacklisted regions: ", "Blacklisted regions: ": "Blacklisted regions: ",
"Music in this video": "Music in this video",
"Artist: ": "Artist: ",
"Song: ": "Song: ",
"Album: ": "Album: ",
"Shared `x`": "Shared `x`", "Shared `x`": "Shared `x`",
"Premieres in `x`": "Premieres in `x`", "Premieres in `x`": "Premieres in `x`",
"Premieres `x`": "Premieres `x`", "Premieres `x`": "Premieres `x`",
@ -205,12 +200,17 @@
"Hide replies": "Hide replies", "Hide replies": "Hide replies",
"Show replies": "Show replies", "Show replies": "Show replies",
"Incorrect password": "Incorrect password", "Incorrect password": "Incorrect password",
"Quota exceeded, try again in a few hours": "Quota exceeded, try again in a few hours",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.",
"Invalid TFA code": "Invalid TFA code",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Login failed. This may be because two-factor authentication is not turned on for your account.",
"Wrong answer": "Wrong answer", "Wrong answer": "Wrong answer",
"Erroneous CAPTCHA": "Erroneous CAPTCHA", "Erroneous CAPTCHA": "Erroneous CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA is a required field", "CAPTCHA is a required field": "CAPTCHA is a required field",
"User ID is a required field": "User ID is a required field", "User ID is a required field": "User ID is a required field",
"Password is a required field": "Password is a required field", "Password is a required field": "Password is a required field",
"Wrong username or password": "Wrong username or password", "Wrong username or password": "Wrong username or password",
"Please sign in using 'Log in with Google'": "Please sign in using 'Log in with Google'",
"Password cannot be empty": "Password cannot be empty", "Password cannot be empty": "Password cannot be empty",
"Password cannot be longer than 55 characters": "Password cannot be longer than 55 characters", "Password cannot be longer than 55 characters": "Password cannot be longer than 55 characters",
"Please log in": "Please log in", "Please log in": "Please log in",
@ -395,54 +395,47 @@
"Movies": "Movies", "Movies": "Movies",
"Download": "Download", "Download": "Download",
"Download as: ": "Download as: ", "Download as: ": "Download as: ",
"Download is disabled": "Download is disabled",
"%A %B %-d, %Y": "%A %B %-d, %Y", "%A %B %-d, %Y": "%A %B %-d, %Y",
"(edited)": "(edited)", "(edited)": "(edited)",
"YouTube comment permalink": "YouTube comment permalink", "YouTube comment permalink": "YouTube comment permalink",
"permalink": "permalink", "permalink": "permalink",
"`x` marked it with a ❤": "`x` marked it with a ❤", "`x` marked it with a ❤": "`x` marked it with a ❤",
"Channel Sponsor": "Channel Sponsor",
"Audio mode": "Audio mode", "Audio mode": "Audio mode",
"Video mode": "Video mode", "Video mode": "Video mode",
"Videos": "Videos",
"Playlists": "Playlists", "Playlists": "Playlists",
"search_filters_title": "Filters", "Community": "Community",
"search_filters_date_label": "Upload date", "relevance": "Relevance",
"search_filters_date_option_none": "Any date", "rating": "Rating",
"search_filters_date_option_hour": "Last Hour", "date": "Upload date",
"search_filters_date_option_today": "Today", "views": "View count",
"search_filters_date_option_week": "This week", "content_type": "Type",
"search_filters_date_option_month": "This month", "duration": "Duration",
"search_filters_date_option_year": "This year", "features": "Features",
"search_filters_type_label": "Type", "sort": "Sort By",
"search_filters_type_option_all": "Any type", "hour": "Last Hour",
"search_filters_type_option_video": "Video", "today": "Today",
"search_filters_type_option_channel": "Channel", "week": "This week",
"search_filters_type_option_playlist": "Playlist", "month": "This month",
"search_filters_type_option_movie": "Movie", "year": "This year",
"search_filters_type_option_show": "Show", "video": "Video",
"search_filters_duration_label": "Duration", "channel": "Channel",
"search_filters_duration_option_none": "Any duration", "playlist": "Playlist",
"search_filters_duration_option_short": "Short (< 4 minutes)", "movie": "Movie",
"search_filters_duration_option_medium": "Medium (4 - 20 minutes)", "show": "Show",
"search_filters_duration_option_long": "Long (> 20 minutes)", "short": "Short (< 4 minutes)",
"search_filters_features_label": "Features", "long": "Long (> 20 minutes)",
"search_filters_features_option_live": "Live", "hd": "HD",
"search_filters_features_option_four_k": "4K", "subtitles": "Subtitles/CC",
"search_filters_features_option_hd": "HD", "creative_commons": "Creative Commons",
"search_filters_features_option_subtitles": "Subtitles/CC", "3d": "3D",
"search_filters_features_option_c_commons": "Creative Commons", "live": "Live",
"search_filters_features_option_three_sixty": "360°", "4k": "4K",
"search_filters_features_option_vr180": "VR180", "location": "Location",
"search_filters_features_option_three_d": "3D", "hdr": "HDR",
"search_filters_features_option_hdr": "HDR", "purchased": "Purchased",
"search_filters_features_option_location": "Location", "360": "360°",
"search_filters_features_option_purchased": "Purchased", "filter": "Filter",
"search_filters_sort_label": "Sort By",
"search_filters_sort_option_relevance": "Relevance",
"search_filters_sort_option_rating": "Rating",
"search_filters_sort_option_date": "Upload Date",
"search_filters_sort_option_views": "View count",
"search_filters_apply_button": "Apply selected filters",
"Current version: ": "Current version: ", "Current version: ": "Current version: ",
"next_steps_error_message": "After which you should try to: ", "next_steps_error_message": "After which you should try to: ",
"next_steps_error_message_refresh": "Refresh", "next_steps_error_message_refresh": "Refresh",
@ -451,7 +444,7 @@
"footer_documentation": "Documentation", "footer_documentation": "Documentation",
"footer_source_code": "Source code", "footer_source_code": "Source code",
"footer_original_source_code": "Original source code", "footer_original_source_code": "Original source code",
"footer_modfied_source_code": "Modified source code", "footer_modfied_source_code": "Modified Source code",
"adminprefs_modified_source_code_url_label": "URL to modified source code repository", "adminprefs_modified_source_code_url_label": "URL to modified source code repository",
"none": "none", "none": "none",
"videoinfo_started_streaming_x_ago": "Started streaming `x` ago", "videoinfo_started_streaming_x_ago": "Started streaming `x` ago",
@ -467,14 +460,7 @@
"crash_page_before_reporting": "Before reporting a bug, make sure that you have:", "crash_page_before_reporting": "Before reporting a bug, make sure that you have:",
"crash_page_refresh": "tried to <a href=\"`x`\">refresh the page</a>", "crash_page_refresh": "tried to <a href=\"`x`\">refresh the page</a>",
"crash_page_switch_instance": "tried to <a href=\"`x`\">use another instance</a>", "crash_page_switch_instance": "tried to <a href=\"`x`\">use another instance</a>",
"crash_page_read_the_faq": "read the <a href=\"`x`\">Frequently Asked Questions (FAQ)</a>", "crash_page_read_the_faq": "read the <a href=\"`x`\">Frenquently Asked Questions (FAQ)</a>",
"crash_page_search_issue": "searched for <a href=\"`x`\">existing issues on GitHub</a>", "crash_page_search_issue": "searched for <a href=\"`x`\">existing issues on Github</a>",
"crash_page_report_issue": "If none of the above helped, please <a href=\"`x`\">open a new issue on GitHub</a> (preferably in English) and include the following text in your message (do NOT translate that text):", "crash_page_report_issue": "If none of the above helped, please <a href=\"`x`\">open a new issue on GitHub</a> (preferably in English) and include the following text in your message (do NOT translate that text):"
"error_video_not_in_playlist": "The requested video doesn't exist in this playlist. <a href=\"`x`\">Click here for the playlist home page.</a>",
"channel_tab_videos_label": "Videos",
"channel_tab_shorts_label": "Shorts",
"channel_tab_streams_label": "Livestreams",
"channel_tab_playlists_label": "Playlists",
"channel_tab_community_label": "Community",
"channel_tab_channels_label": "Channels"
} }

@ -5,8 +5,8 @@
"Subscribe": "Abonu", "Subscribe": "Abonu",
"View channel on YouTube": "Vidu kanalon en JuTubo", "View channel on YouTube": "Vidu kanalon en JuTubo",
"View playlist on YouTube": "Vidu ludliston en JuTubo", "View playlist on YouTube": "Vidu ludliston en JuTubo",
"newest": "plej novaj", "newest": "pli novaj",
"oldest": "plej malnovaj", "oldest": "pli malnovaj",
"popular": "popularaj", "popular": "popularaj",
"last": "lasta", "last": "lasta",
"Next page": "Sekva paĝo", "Next page": "Sekva paĝo",
@ -14,21 +14,22 @@
"Clear watch history?": "Ĉu forigi vidohistorion?", "Clear watch history?": "Ĉu forigi vidohistorion?",
"New password": "Nova pasvorto", "New password": "Nova pasvorto",
"New passwords must match": "Novaj pasvortoj devas kongrui", "New passwords must match": "Novaj pasvortoj devas kongrui",
"Cannot change password for Google accounts": "Ne eblas ŝanĝi pasvorton por kontoj de Google",
"Authorize token?": "Ĉu rajtigi ĵetonon?", "Authorize token?": "Ĉu rajtigi ĵetonon?",
"Authorize token for `x`?": "Ĉu rajtigi ĵetonon por `x`?", "Authorize token for `x`?": "Ĉu rajtigi ĵetonon por `x`?",
"Yes": "Jes", "Yes": "Jes",
"No": "Ne", "No": "Ne",
"Import and Export Data": "Importi kaj Eksporti Datumojn", "Import and Export Data": "Importi kaj Eksporti Datumojn",
"Import": "Importi", "Import": "Importi",
"Import Invidious data": "Importi JSON-datumojn de Invidious", "Import Invidious data": "Importi datumojn de Invidious",
"Import YouTube subscriptions": "Importi abonojn de YouTube/OPML", "Import YouTube subscriptions": "Importi abonojn de JuTubo",
"Import FreeTube subscriptions (.db)": "Importi abonojn de FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importi abonojn de FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importi abonojn de NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importi abonojn de NewPipe (.json)",
"Import NewPipe data (.zip)": "Importi datumojn de NewPipe (.zip)", "Import NewPipe data (.zip)": "Importi datumojn de NewPipe (.zip)",
"Export": "Eksporti", "Export": "Eksporti",
"Export subscriptions as OPML": "Eksporti abonojn kiel OPML", "Export subscriptions as OPML": "Eksporti abonojn kiel OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksporti abonojn kiel OPML (por NewPipe kaj FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksporti abonojn kiel OPML (por NewPipe kaj FreeTube)",
"Export data as JSON": "Eksporti Invidious-datumojn kiel JSON", "Export data as JSON": "Eksporti datumojn kiel JSON",
"Delete account?": "Ĉu forigi konton?", "Delete account?": "Ĉu forigi konton?",
"History": "Historio", "History": "Historio",
"An alternative front-end to YouTube": "Alternativa fasado al JuTubo", "An alternative front-end to YouTube": "Alternativa fasado al JuTubo",
@ -36,6 +37,7 @@
"source": "fonto", "source": "fonto",
"Log in": "Ensaluti", "Log in": "Ensaluti",
"Log in/register": "Ensaluti/Registriĝi", "Log in/register": "Ensaluti/Registriĝi",
"Log in with Google": "Ensaluti al Google",
"User ID": "Uzula identigilo", "User ID": "Uzula identigilo",
"Password": "Pasvorto", "Password": "Pasvorto",
"Time (h:mm:ss):": "Horo (h:mm:ss):", "Time (h:mm:ss):": "Horo (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Ensaluti", "Sign In": "Ensaluti",
"Register": "Registriĝi", "Register": "Registriĝi",
"E-mail": "Retpoŝto", "E-mail": "Retpoŝto",
"Google verification code": "Kontrolkodo de Google",
"Preferences": "Agordoj", "Preferences": "Agordoj",
"preferences_category_player": "Spektilaj agordoj", "preferences_category_player": "Spektilaj agordoj",
"preferences_video_loop_label": "Ĉiam ripeti: ", "preferences_video_loop_label": "Ĉiam ripeti: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Ĉu montri rilatajn filmetojn? ", "preferences_related_videos_label": "Ĉu montri rilatajn filmetojn? ",
"preferences_annotations_label": "Ĉu montri prinotojn defaŭlte? ", "preferences_annotations_label": "Ĉu montri prinotojn defaŭlte? ",
"preferences_extend_desc_label": "Aŭtomate etendi priskribon de filmeto: ", "preferences_extend_desc_label": "Aŭtomate etendi priskribon de filmeto: ",
"preferences_vr_mode_label": "Interagaj 360-gradaj filmoj (postulas WebGL-n): ", "preferences_vr_mode_label": "Interagaj 360-gradaj filmetoj: ",
"preferences_category_visual": "Vidaj preferoj", "preferences_category_visual": "Vidaj preferoj",
"preferences_player_style_label": "Ludila stilo: ", "preferences_player_style_label": "Ludila stilo: ",
"Dark mode: ": "Malhela reĝimo: ", "Dark mode: ": "Malhela reĝimo: ",
@ -72,7 +75,7 @@
"light": "hela", "light": "hela",
"preferences_thin_mode_label": "Maldika reĝimo: ", "preferences_thin_mode_label": "Maldika reĝimo: ",
"preferences_category_misc": "Aliaj agordoj", "preferences_category_misc": "Aliaj agordoj",
"preferences_automatic_instance_redirect_label": "Aŭtomata alidirektado de nodo (retropaŝo al redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Aŭtomata alidirektado de instalaĵo (retropaŝo al redirect.invidious.io): ",
"preferences_category_subscription": "Abonaj agordoj", "preferences_category_subscription": "Abonaj agordoj",
"preferences_annotations_subscribed_label": "Ĉu montri prinotojn defaŭlte por abonitaj kanaloj? ", "preferences_annotations_subscribed_label": "Ĉu montri prinotojn defaŭlte por abonitaj kanaloj? ",
"Redirect homepage to feed: ": "Alidirekti hejmpâgon al fluo: ", "Redirect homepage to feed: ": "Alidirekti hejmpâgon al fluo: ",
@ -118,7 +121,7 @@
"Subscriptions": "Abonoj", "Subscriptions": "Abonoj",
"search": "serĉi", "search": "serĉi",
"Log out": "Elsaluti", "Log out": "Elsaluti",
"Released under the AGPLv3 on Github.": "Eldonita sub la AGPLv3 en GitHub.", "Released under the AGPLv3 on Github.": "Eldonita sub la AGPLv3 en Github.",
"Source available here.": "Fonto havebla ĉi tie.", "Source available here.": "Fonto havebla ĉi tie.",
"View JavaScript license information.": "Vidi Ĝavoskriptan licencan informon.", "View JavaScript license information.": "Vidi Ĝavoskriptan licencan informon.",
"View privacy policy.": "Vidi regularon pri privateco.", "View privacy policy.": "Vidi regularon pri privateco.",
@ -137,7 +140,8 @@
"Show more": "Montri pli", "Show more": "Montri pli",
"Show less": "Montri malpli", "Show less": "Montri malpli",
"Watch on YouTube": "Vidi filmeton en JuTubo", "Watch on YouTube": "Vidi filmeton en JuTubo",
"Switch Invidious Instance": "Ŝanĝi nodon de Indivious", "Switch Invidious Instance": "Ŝanĝi instalaĵon de Indivious",
"Broken? Try another Invidious Instance": "Ĉu misfunkcio? Provu alian instalaĵon de Indivious",
"Hide annotations": "Kaŝi prinotojn", "Hide annotations": "Kaŝi prinotojn",
"Show annotations": "Montri prinotojn", "Show annotations": "Montri prinotojn",
"Genre: ": "Ĝenro: ", "Genre: ": "Ĝenro: ",
@ -161,12 +165,17 @@
"Hide replies": "Kaŝi respondojn", "Hide replies": "Kaŝi respondojn",
"Show replies": "Montri respondojn", "Show replies": "Montri respondojn",
"Incorrect password": "Malbona pasvorto", "Incorrect password": "Malbona pasvorto",
"Quota exceeded, try again in a few hours": "Kvoto transpasita, provu denove post iuj horoj",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Ne povas ensaluti, certigu, ke dufaktora aŭtentigo (Authenticator aŭ SMS) estas ebligita.",
"Invalid TFA code": "Nevalida TFA-kodo",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Ensalutado fiaskis. Eble ĉar la dufaktora aŭtentigo estas malebligita en via konto.",
"Wrong answer": "Nevalida respondo", "Wrong answer": "Nevalida respondo",
"Erroneous CAPTCHA": "Nevalida CAPTCHA", "Erroneous CAPTCHA": "Nevalida CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA estas deviga kampo", "CAPTCHA is a required field": "CAPTCHA estas deviga kampo",
"User ID is a required field": "Uzula identigilo estas deviga kampo", "User ID is a required field": "Uzula identigilo estas deviga kampo",
"Password is a required field": "Pasvorto estas deviga kampo", "Password is a required field": "Pasvorto estas deviga kampo",
"Wrong username or password": "Nevalida uzantnomo aŭ pasvorto", "Wrong username or password": "Nevalida uzantnomo aŭ pasvorto",
"Please sign in using 'Log in with Google'": "Bonvolu ensaluti per 'Ensaluti per Google'",
"Password cannot be empty": "Pasvorto ne povas esti malplena", "Password cannot be empty": "Pasvorto ne povas esti malplena",
"Password cannot be longer than 55 characters": "Pasvorto ne povas esti pli longa ol 55 signoj", "Password cannot be longer than 55 characters": "Pasvorto ne povas esti pli longa ol 55 signoj",
"Please log in": "Bonvolu ensaluti", "Please log in": "Bonvolu ensaluti",
@ -317,41 +326,42 @@
"`x` marked it with a ❤": "`x` markis ĝin per ❤", "`x` marked it with a ❤": "`x` markis ĝin per ❤",
"Audio mode": "Aŭda reĝimo", "Audio mode": "Aŭda reĝimo",
"Video mode": "Videa reĝimo", "Video mode": "Videa reĝimo",
"channel_tab_videos_label": "Videoj", "Videos": "Filmetoj",
"Playlists": "Ludlistoj", "Playlists": "Ludlistoj",
"channel_tab_community_label": "Komunumo", "Community": "Komunumo",
"search_filters_sort_option_relevance": "rilateco", "relevance": "rilateco",
"search_filters_sort_option_rating": "takso", "rating": "takso",
"search_filters_sort_option_date": "dato", "date": "dato",
"search_filters_sort_option_views": "vidoj", "views": "vidoj",
"search_filters_type_label": "enhavtipo", "content_type": "enhavtipo",
"search_filters_duration_label": "daŭro", "duration": "daŭro",
"search_filters_features_label": "trajtoj", "features": "trajtoj",
"search_filters_sort_label": "ordigi", "sort": "ordigi",
"search_filters_date_option_hour": "horo", "hour": "horo",
"search_filters_date_option_today": "hodiaŭ", "today": "hodiaŭ",
"search_filters_date_option_week": "semajno", "week": "semajno",
"search_filters_date_option_month": "monato", "month": "monato",
"search_filters_date_option_year": "jaro", "year": "jaro",
"search_filters_type_option_video": "filmeto", "video": "filmeto",
"search_filters_type_option_channel": "kanalo", "channel": "kanalo",
"search_filters_type_option_playlist": "ludlisto", "playlist": "ludlisto",
"search_filters_type_option_movie": "filmo", "movie": "filmo",
"search_filters_type_option_show": "spektaĵo", "show": "spektaĵo",
"search_filters_features_option_hd": "altdistingiva", "hd": "altdistingiva",
"search_filters_features_option_subtitles": "subtekstoj", "subtitles": "subtekstoj",
"search_filters_features_option_c_commons": "Krea Komunaĵo", "creative_commons": "Krea Komunaĵo",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "nuna", "live": "nuna",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "loko", "location": "loko",
"search_filters_features_option_hdr": "granddinamikgama", "hdr": "granddinamikgama",
"filter": "filtri",
"Current version: ": "Nuna versio: ", "Current version: ": "Nuna versio: ",
"next_steps_error_message": "Poste, vi provu: ", "next_steps_error_message": "Poste, vi provu: ",
"next_steps_error_message_refresh": "Reŝargi", "next_steps_error_message_refresh": "Reŝargi",
"next_steps_error_message_go_to_youtube": "Iri al JuTubo", "next_steps_error_message_go_to_youtube": "Iri al JuTubo",
"search_filters_duration_option_long": "Longa (> 20 minutos)", "long": "Longa (> 20 minutos)",
"search_filters_duration_option_short": "Mallonga (< 4 minutos)", "short": "Mallonga (< 4 minutos)",
"footer_documentation": "Dokumentaro", "footer_documentation": "Dokumentaro",
"footer_source_code": "Fontkodo", "footer_source_code": "Fontkodo",
"adminprefs_modified_source_code_url_label": "URL al modifita deponejo de fontkodo", "adminprefs_modified_source_code_url_label": "URL al modifita deponejo de fontkodo",
@ -359,122 +369,5 @@
"footer_original_source_code": "Originala fontkodo", "footer_original_source_code": "Originala fontkodo",
"footer_donate_page": "Donaci", "footer_donate_page": "Donaci",
"preferences_region_label": "Lando de la enhavo: ", "preferences_region_label": "Lando de la enhavo: ",
"preferences_quality_dash_label": "Preferata DASH-a videkvalito: ", "preferences_quality_dash_label": "Preferata DASH-a videkvalito: "
"search_filters_title": "Filtri",
"preferences_quality_dash_option_best": "Plej bona",
"preferences_quality_dash_option_worst": "Malplej bona",
"Popular enabled: ": "Populara sekcio ebligita: ",
"search_message_no_results": "Neniu rezulto trovita.",
"search_message_use_another_instance": " Vi ankaŭ povas <a href=\"`x`\">serĉi en alia nodo</a>.",
"tokens_count": "{{count}} ĵetono",
"tokens_count_plural": "{{count}} ĵetonoj",
"subscriptions_unseen_notifs_count": "{{count}} nevidita sciigo",
"subscriptions_unseen_notifs_count_plural": "{{count}} neviditaj sciigoj",
"Indonesian (auto-generated)": "Indonezia (aŭtomate generita)",
"Interlingue": "Interlingvo",
"Italian (auto-generated)": "Itala (aŭtomate generita)",
"Korean (auto-generated)": "Korea (aŭtomate generita)",
"Portuguese (Brazil)": "Portugala (Brazilo)",
"Portuguese (auto-generated)": "Portugala (aŭtomate generita)",
"Russian (auto-generated)": "Rusa (aŭtomate generita)",
"Spanish (Spain)": "Hispana (Hispanio)",
"generic_count_years": "{{count}} jaro",
"generic_count_years_plural": "{{count}} jaroj",
"Turkish (auto-generated)": "Turka (aŭtomate generita)",
"Vietnamese (auto-generated)": "Vjetnama (aŭtomate generita)",
"generic_count_hours": "{{count}} horo",
"generic_count_hours_plural": "{{count}} horoj",
"generic_count_minutes": "{{count}} minuto",
"generic_count_minutes_plural": "{{count}} minutoj",
"search_filters_date_label": "Alŝutdato",
"search_filters_date_option_none": "Ajna dato",
"search_filters_duration_option_medium": "Meza (4 - 20 minutoj)",
"search_filters_features_option_three_sixty": "360º",
"search_filters_features_option_vr180": "VR180",
"user_created_playlists": "`x`kreitaj ludlistoj",
"user_saved_playlists": "`x`konservitaj ludlistoj",
"crash_page_switch_instance": "klopodis <a href=\"`x`\">uzi alian nodon</a>",
"crash_page_read_the_faq": "legis la <a href=\"`x`\">oftajn demandojn</a>",
"error_video_not_in_playlist": "La petita video ne ekzistas en ĉi tiu ludlisto. <a href=\"`x`\">Alklaku ĉi tie por iri al la ludlista hejmpaĝo.</a>",
"crash_page_search_issue": "serĉis por <a href=\"`x`\">ekzistantaj problemoj en GitHub</a>",
"generic_count_seconds": "{{count}} sekundo",
"generic_count_seconds_plural": "{{count}} sekundoj",
"preferences_quality_dash_option_144p": "144p",
"comments_view_x_replies": "Vidi {{count}} respondon",
"comments_view_x_replies_plural": "Vidi {{count}} respondojn",
"preferences_quality_dash_option_360p": "360p",
"invidious": "Invidious",
"Chinese (Taiwan)": "Ĉina (Tajvano)",
"English (United Kingdom)": "Angla (Britio)",
"search_filters_features_option_purchased": "Aĉetita",
"Japanese (auto-generated)": "Japana (aŭtomate generita)",
"search_message_change_filters_or_query": "Provu vastigi vian serĉpeton kaj/aŭ ŝanĝi la filtrilojn.",
"preferences_quality_dash_option_1080p": "1080p",
"generic_count_weeks": "{{count}} semajno",
"generic_count_weeks_plural": "{{count}} semajnoj",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_auto": "Aŭtomate",
"preferences_quality_dash_option_2160p": "2160p",
"English (United States)": "Angla (Usono)",
"Chinese": "Ĉina",
"videoinfo_watch_on_youTube": "Vidi en YouTube",
"crash_page_you_found_a_bug": "Ŝajnas, ke vi trovis eraron en Invidious!",
"comments_points_count": "{{count}} poento",
"comments_points_count_plural": "{{count}} poentoj",
"Cantonese (Hong Kong)": "Kantona (Honkongo)",
"preferences_watch_history_label": "Ebligi vidohistorion: ",
"preferences_quality_option_small": "Eta",
"generic_playlists_count": "{{count}} ludlisto",
"generic_playlists_count_plural": "{{count}} ludlistoj",
"videoinfo_youTube_embed_link": "Enigi",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Meza",
"generic_subscriptions_count": "{{count}} abono",
"generic_subscriptions_count_plural": "{{count}} abonoj",
"videoinfo_started_streaming_x_ago": "Komercis elsendi antaŭ `x`",
"download_subtitles": "Subtitoloj - `x` (.vtt)",
"videoinfo_invidious_embed_link": "Enigi Ligilon",
"crash_page_report_issue": "Se neniu el la antaŭaj agoj helpis, bonvolu <a href=\"`x`\">estigi novan problemon en GitHub</a> (prefere angle) kaj inkludi la jenan tekston en via mesaĝo (NE traduku tiun tekston):",
"preferences_quality_option_dash": "DASH (adapta kvalito)",
"Chinese (Hong Kong)": "Ĉina (Honkongo)",
"Chinese (China)": "Ĉina (Ĉinio)",
"Dutch (auto-generated)": "Nederlanda (aŭtomate generita)",
"German (auto-generated)": "Germana (aŭtomate generita)",
"French (auto-generated)": "Franca (aŭtomate generita)",
"Spanish (Mexico)": "Hispana (Meksiko)",
"Spanish (auto-generated)": "Hispana (aŭtomate generita)",
"generic_count_days": "{{count}} jaro",
"generic_count_days_plural": "{{count}} jaroj",
"search_filters_type_option_all": "Ajna speco",
"search_filters_duration_option_none": "Ajna daŭro",
"search_filters_apply_button": "Uzi elektitajn filtrilojn",
"none": "neniu",
"Video unavailable": "Nedisponebla video",
"crash_page_before_reporting": "Antaŭ ol informi pri eraro certigu, ke vi:",
"crash_page_refresh": "klopodis <a href=\"`x`\">reŝarĝi la paĝon</a>",
"generic_views_count": "{{count}} spekto",
"generic_views_count_plural": "{{count}} spektoj",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} videoj",
"generic_subscribers_count": "{{count}} abonanto",
"generic_subscribers_count_plural": "{{count}} abonantoj",
"generic_count_months": "{{count}} monato",
"generic_count_months_plural": "{{count}} monatoj",
"preferences_save_player_pos_label": "Konservi ludadan pozicion: ",
"channel_tab_streams_label": "Tujelsendoj",
"channel_tab_playlists_label": "Ludlistoj",
"channel_tab_channels_label": "Kanaloj",
"channel_tab_shorts_label": "Mallongaj",
"Music in this video": "Muziko en ĉi tiu video",
"Artist: ": "Artisto: ",
"Album: ": "Albumo: ",
"Channel Sponsor": "Kanala sponsoro",
"Song: ": "Muzikaĵo: ",
"Standard YouTube license": "Implicita YouTube-licenco",
"Download is disabled": "Elŝuto estas malebligita",
"Import YouTube playlist (.csv)": "Importi YouTube-ludliston (.csv)"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "¿Quiere borrar el historial de reproducción?", "Clear watch history?": "¿Quiere borrar el historial de reproducción?",
"New password": "Nueva contraseña", "New password": "Nueva contraseña",
"New passwords must match": "Las nuevas contraseñas deben coincidir", "New passwords must match": "Las nuevas contraseñas deben coincidir",
"Cannot change password for Google accounts": "No se puede cambiar la contraseña de la cuenta de Google",
"Authorize token?": "¿Autorizar el token?", "Authorize token?": "¿Autorizar el token?",
"Authorize token for `x`?": "¿Autorizar el token para `x`?", "Authorize token for `x`?": "¿Autorizar el token para `x`?",
"Yes": "Sí", "Yes": "Sí",
@ -36,6 +37,7 @@
"source": "código fuente", "source": "código fuente",
"Log in": "Iniciar sesión", "Log in": "Iniciar sesión",
"Log in/register": "Iniciar sesión/Registrarse", "Log in/register": "Iniciar sesión/Registrarse",
"Log in with Google": "Iniciar sesión en Google",
"User ID": "Nombre", "User ID": "Nombre",
"Password": "Contraseña", "Password": "Contraseña",
"Time (h:mm:ss):": "Hora (h:mm:ss):", "Time (h:mm:ss):": "Hora (h:mm:ss):",
@ -44,26 +46,27 @@
"Sign In": "Iniciar sesión", "Sign In": "Iniciar sesión",
"Register": "Registrarse", "Register": "Registrarse",
"E-mail": "Correo", "E-mail": "Correo",
"Google verification code": "Código de verificación de Google",
"Preferences": "Preferencias", "Preferences": "Preferencias",
"preferences_category_player": "Preferencias del reproductor", "preferences_category_player": "Preferencias del reproductor",
"preferences_video_loop_label": "Repetir siempre: ", "preferences_video_loop_label": "Repetir siempre: ",
"preferences_autoplay_label": "Reproducción automática: ", "preferences_autoplay_label": "Reproducción automática: ",
"preferences_continue_label": "Reproducir siguiente por defecto: ", "preferences_continue_label": "Reproducir siguiente por defecto: ",
"preferences_continue_autoplay_label": "Reproducir automáticamente el video siguiente: ", "preferences_continue_autoplay_label": "Reproducir automáticamente el vídeo siguiente: ",
"preferences_listen_label": "Activar el sonido por defecto: ", "preferences_listen_label": "Activar el sonido por defecto: ",
"preferences_local_label": "¿Usar un proxy para los videos? ", "preferences_local_label": "¿Usar un proxy para los vídeos? ",
"preferences_speed_label": "Velocidad por defecto: ", "preferences_speed_label": "Velocidad por defecto: ",
"preferences_quality_label": "Calidad de video preferida: ", "preferences_quality_label": "Calidad de vídeo preferida: ",
"preferences_volume_label": "Volumen del reproductor: ", "preferences_volume_label": "Volumen del reproductor: ",
"preferences_comments_label": "Comentarios por defecto: ", "preferences_comments_label": "Comentarios por defecto: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "Reddit",
"preferences_captions_label": "Subtítulos por defecto: ", "preferences_captions_label": "Subtítulos por defecto: ",
"Fallback captions: ": "Subtítulos alternativos: ", "Fallback captions: ": "Subtítulos alternativos: ",
"preferences_related_videos_label": "¿Mostrar videos relacionados? ", "preferences_related_videos_label": "¿Mostrar vídeos relacionados? ",
"preferences_annotations_label": "¿Mostrar anotaciones por defecto? ", "preferences_annotations_label": "¿Mostrar anotaciones por defecto? ",
"preferences_extend_desc_label": "Extender automáticamente la descripción del video: ", "preferences_extend_desc_label": "Extender automáticamente la descripción del vídeo: ",
"preferences_vr_mode_label": "Videos interactivos de 360 grados (necesita WebGL): ", "preferences_vr_mode_label": "Vídeos interactivos de 360 grados (necesita WebGL): ",
"preferences_category_visual": "Preferencias visuales", "preferences_category_visual": "Preferencias visuales",
"preferences_player_style_label": "Estilo de reproductor: ", "preferences_player_style_label": "Estilo de reproductor: ",
"Dark mode: ": "Modo oscuro: ", "Dark mode: ": "Modo oscuro: ",
@ -76,16 +79,16 @@
"preferences_category_subscription": "Preferencias de la suscripción", "preferences_category_subscription": "Preferencias de la suscripción",
"preferences_annotations_subscribed_label": "¿Mostrar anotaciones por defecto para los canales suscritos? ", "preferences_annotations_subscribed_label": "¿Mostrar anotaciones por defecto para los canales suscritos? ",
"Redirect homepage to feed: ": "Redirigir la página de inicio a la fuente: ", "Redirect homepage to feed: ": "Redirigir la página de inicio a la fuente: ",
"preferences_max_results_label": "Número de videos mostrados en la fuente: ", "preferences_max_results_label": "Número de vídeos mostrados en la fuente: ",
"preferences_sort_label": "Ordenar los videos por: ", "preferences_sort_label": "Ordenar los vídeos por: ",
"published": "fecha de publicación", "published": "fecha de publicación",
"published - reverse": "fecha de publicación: orden inverso", "published - reverse": "fecha de publicación: orden inverso",
"alphabetically": "alfabéticamente", "alphabetically": "alfabéticamente",
"alphabetically - reverse": "alfabéticamente: orden inverso", "alphabetically - reverse": "alfabéticamente: orden inverso",
"channel name": "nombre del canal", "channel name": "nombre del canal",
"channel name - reverse": "nombre del canal: orden inverso", "channel name - reverse": "nombre del canal: orden inverso",
"Only show latest video from channel: ": "Mostrar solo el último video del canal: ", "Only show latest video from channel: ": "Mostrar solo el último vídeo del canal: ",
"Only show latest unwatched video from channel: ": "Mostrar solo el último video sin ver del canal: ", "Only show latest unwatched video from channel: ": "Mostrar solo el último vídeo sin ver del canal: ",
"preferences_unseen_only_label": "Mostrar solo los no vistos: ", "preferences_unseen_only_label": "Mostrar solo los no vistos: ",
"preferences_notifications_only_label": "Mostrar solo notificaciones (si hay alguna): ", "preferences_notifications_only_label": "Mostrar solo notificaciones (si hay alguna): ",
"Enable web notifications": "Habilitar notificaciones web", "Enable web notifications": "Habilitar notificaciones web",
@ -111,14 +114,14 @@
"Save preferences": "Guardar las preferencias", "Save preferences": "Guardar las preferencias",
"Subscription manager": "Gestor de suscripciones", "Subscription manager": "Gestor de suscripciones",
"Token manager": "Gestor de tokens", "Token manager": "Gestor de tokens",
"Token": "Ficha", "Token": "Token",
"Import/export": "Importar/Exportar", "Import/export": "Importar/Exportar",
"unsubscribe": "Desuscribirse", "unsubscribe": "Desuscribirse",
"revoke": "revocar", "revoke": "revocar",
"Subscriptions": "Suscripciones", "Subscriptions": "Suscripciones",
"search": "buscar", "search": "buscar",
"Log out": "Cerrar la sesión", "Log out": "Cerrar la sesión",
"Released under the AGPLv3 on Github.": "Publicado bajo la AGPLv3 en GitHub.", "Released under the AGPLv3 on Github.": "Publicado bajo la AGPLv3 en Github.",
"Source available here.": "Código fuente disponible aquí.", "Source available here.": "Código fuente disponible aquí.",
"View JavaScript license information.": "Ver información de licencia de JavaScript.", "View JavaScript license information.": "Ver información de licencia de JavaScript.",
"View privacy policy.": "Ver la política de privacidad.", "View privacy policy.": "Ver la política de privacidad.",
@ -136,8 +139,9 @@
"Editing playlist `x`": "Editando la lista de reproducción 'x'", "Editing playlist `x`": "Editando la lista de reproducción 'x'",
"Show more": "Mostrar más", "Show more": "Mostrar más",
"Show less": "Mostrar menos", "Show less": "Mostrar menos",
"Watch on YouTube": "Ver en YouTube", "Watch on YouTube": "Ver el vídeo en YouTube",
"Switch Invidious Instance": "Cambiar Instancia de Invidious", "Switch Invidious Instance": "Cambiar Instancia de Invidious",
"Broken? Try another Invidious Instance": "¿Algún error? Prueba otra instancia de Invidious",
"Hide annotations": "Ocultar anotaciones", "Hide annotations": "Ocultar anotaciones",
"Show annotations": "Mostrar anotaciones", "Show annotations": "Mostrar anotaciones",
"Genre: ": "Género: ", "Genre: ": "Género: ",
@ -150,7 +154,7 @@
"Shared `x`": "Compartido `x`", "Shared `x`": "Compartido `x`",
"Premieres in `x`": "Se estrena en `x`", "Premieres in `x`": "Se estrena en `x`",
"Premieres `x`": "Estrenos `x`", "Premieres `x`": "Estrenos `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "¡Hola! Parece que tienes JavaScript desactivado. Haz clic aquí para ver los comentarios, pero tengas en cuenta que pueden tardar un poco más en cargarse.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "¡Hola! Parece que tiene JavaScript desactivado. Haga clic aquí para ver los comentarios, pero tenga en cuenta que pueden tardar un poco más en cargarse.",
"View YouTube comments": "Ver los comentarios de YouTube", "View YouTube comments": "Ver los comentarios de YouTube",
"View more comments on Reddit": "Ver más comentarios en Reddit", "View more comments on Reddit": "Ver más comentarios en Reddit",
"View `x` comments": { "View `x` comments": {
@ -161,14 +165,19 @@
"Hide replies": "Ocultar las respuestas", "Hide replies": "Ocultar las respuestas",
"Show replies": "Mostrar las respuestas", "Show replies": "Mostrar las respuestas",
"Incorrect password": "Contraseña incorrecta", "Incorrect password": "Contraseña incorrecta",
"Quota exceeded, try again in a few hours": "Cuota excedida, pruebe otra vez en unas horas",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "No se puede iniciar sesión, asegúrese de que la autentificación de dos factores (autentificador o SMS) esté habilitada.",
"Invalid TFA code": "Código TFA no válido",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Error de inicio de sesion. Puede deberse a que la autentificación de dos factores no está habilitada en su cuenta.",
"Wrong answer": "Respuesta no válida", "Wrong answer": "Respuesta no válida",
"Erroneous CAPTCHA": "CAPTCHA no válido", "Erroneous CAPTCHA": "CAPTCHA no válido",
"CAPTCHA is a required field": "El CAPTCHA es un campo obligatorio", "CAPTCHA is a required field": "El CAPTCHA es un campo obligatorio",
"User ID is a required field": "El nombre es un campo obligatorio", "User ID is a required field": "El nombre es un campo obligatorio",
"Password is a required field": "La contraseña es un campo obligatorio", "Password is a required field": "La contraseña es un campo obligatorio",
"Wrong username or password": "Nombre o contraseña incorrecto", "Wrong username or password": "Nombre o contraseña incorrecto",
"Please sign in using 'Log in with Google'": "Inicie sesión con «Iniciar sesión con Google»",
"Password cannot be empty": "La contraseña no puede estar en blanco", "Password cannot be empty": "La contraseña no puede estar en blanco",
"Password cannot be longer than 55 characters": "La contraseña no debe tener más de 55 caracteres", "Password cannot be longer than 55 characters": "La contraseña no puede tener más de 55 caracteres",
"Please log in": "Inicie sesión, por favor", "Please log in": "Inicie sesión, por favor",
"Invidious Private Feed for `x`": "Fuente privada de Invidious para `x`", "Invidious Private Feed for `x`": "Fuente privada de Invidious para `x`",
"channel:`x`": "canal: `x`", "channel:`x`": "canal: `x`",
@ -187,10 +196,10 @@
"Hidden field \"token\" is a required field": "El campo oculto «símbolo» es un campo obligatorio", "Hidden field \"token\" is a required field": "El campo oculto «símbolo» es un campo obligatorio",
"Erroneous challenge": "Desafío no válido", "Erroneous challenge": "Desafío no válido",
"Erroneous token": "Símbolo no válido", "Erroneous token": "Símbolo no válido",
"No such user": "Usuario no existe", "No such user": "Usuario no válido",
"Token is expired, please try again": "El símbolo ha caducado, inténtelo de nuevo", "Token is expired, please try again": "El símbolo ha caducado, inténtelo de nuevo",
"English": "Inglés", "English": "Inglés",
"English (auto-generated)": "Inglés (generado automáticamente)", "English (auto-generated)": "Inglés (generados automáticamente)",
"Afrikaans": "Afrikáans", "Afrikaans": "Afrikáans",
"Albanian": "Albanés", "Albanian": "Albanés",
"Amharic": "Amárico", "Amharic": "Amárico",
@ -316,51 +325,51 @@
"permalink": "enlace permanente", "permalink": "enlace permanente",
"`x` marked it with a ❤": "`x` lo ha marcado con un ❤", "`x` marked it with a ❤": "`x` lo ha marcado con un ❤",
"Audio mode": "Modo de audio", "Audio mode": "Modo de audio",
"Video mode": "Modo de video", "Video mode": "Modo de vídeo",
"channel_tab_videos_label": "Videos", "Videos": "Vídeos",
"Playlists": "Listas de reproducción", "Playlists": "Listas de reproducción",
"channel_tab_community_label": "Comunidad", "Community": "Comunidad",
"search_filters_sort_option_relevance": "Relevancia", "relevance": "relevancia",
"search_filters_sort_option_rating": "Valoración", "rating": "valoración",
"search_filters_sort_option_date": "Fecha de subida", "date": "fecha",
"search_filters_sort_option_views": "Visualizaciones", "views": "visualizaciones",
"search_filters_type_label": "tipo de contenido", "content_type": "content_type",
"search_filters_duration_label": "duración", "duration": "duración",
"search_filters_features_label": "funcionalidades", "features": "funcionalidades",
"search_filters_sort_label": "ordenar", "sort": "ordenar",
"search_filters_date_option_hour": "Última hora", "hour": "hora",
"search_filters_date_option_today": "Hoy", "today": "hoy",
"search_filters_date_option_week": "Esta semana", "week": "semana",
"search_filters_date_option_month": "Este mes", "month": "mes",
"search_filters_date_option_year": "Este año", "year": "año",
"search_filters_type_option_video": "Video", "video": "vídeo",
"search_filters_type_option_channel": "Canal", "channel": "canal",
"search_filters_type_option_playlist": "Lista de reproducción", "playlist": "lista de reproducción",
"search_filters_type_option_movie": "Película", "movie": "película",
"search_filters_type_option_show": "Programa", "show": "programa",
"search_filters_features_option_hd": "HD", "hd": "hd",
"search_filters_features_option_subtitles": "Subtítulos", "subtitles": "subtítulos",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "creative_commons",
"search_filters_features_option_three_d": "3D", "3d": "3d",
"search_filters_features_option_live": "En directo", "live": "directo",
"search_filters_features_option_four_k": "4K", "4k": "4k",
"search_filters_features_option_location": "Ubicación", "location": "ubicación",
"search_filters_features_option_hdr": "HDR", "hdr": "hdr",
"filter": "filtro",
"Current version: ": "Versión actual: ", "Current version: ": "Versión actual: ",
"next_steps_error_message": "Después de lo cual debes intentar: ", "next_steps_error_message": "Después de lo cual deberías intentar: ",
"next_steps_error_message_refresh": "Recargar la página", "next_steps_error_message_refresh": "Recargar",
"next_steps_error_message_go_to_youtube": "Ir a YouTube", "next_steps_error_message_go_to_youtube": "Ir a YouTube",
"search_filters_duration_option_short": "Menos de 4 minutos", "short": "Corto (< 4 minutos)",
"search_filters_duration_option_medium": "De 4 a 20 minutos", "long": "Largo (> 20 minutos)",
"search_filters_duration_option_long": "Más de 20 minutos",
"footer_documentation": "Documentación", "footer_documentation": "Documentación",
"footer_original_source_code": "Código fuente original", "footer_original_source_code": "Código fuente original",
"adminprefs_modified_source_code_url_label": "Enlace al repositorio de código fuente modificado", "adminprefs_modified_source_code_url_label": "URL al repositorio de código fuente modificado",
"footer_source_code": "Código fuente", "footer_source_code": "Código fuente",
"footer_modfied_source_code": "Código fuente modificado", "footer_modfied_source_code": "Código fuente modificado",
"footer_donate_page": "Donar", "footer_donate_page": "Donar",
"preferences_region_label": "País del contenido: ", "preferences_region_label": "País del contenido: ",
"preferences_quality_dash_label": "Calidad de video DASH preferida: ", "preferences_quality_dash_label": "Calidad de vídeo DASH preferida: ",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Intermedia", "preferences_quality_option_medium": "Intermedia",
"preferences_quality_dash_option_auto": "Automática", "preferences_quality_dash_option_auto": "Automática",
@ -369,7 +378,7 @@
"download_subtitles": "Subtítulos- `x` (.vtt)", "download_subtitles": "Subtítulos- `x` (.vtt)",
"user_created_playlists": "`x` listas de reproducción creadas", "user_created_playlists": "`x` listas de reproducción creadas",
"user_saved_playlists": "`x` listas de reproducción guardadas", "user_saved_playlists": "`x` listas de reproducción guardadas",
"Video unavailable": "Video no disponible", "Video unavailable": "Vídeo no disponible",
"videoinfo_youTube_embed_link": "Insertar", "videoinfo_youTube_embed_link": "Insertar",
"preferences_quality_dash_option_2160p": "2160p", "preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
@ -386,8 +395,8 @@
"preferences_quality_dash_option_worst": "La peor", "preferences_quality_dash_option_worst": "La peor",
"videoinfo_invidious_embed_link": "Enlace para Insertar", "videoinfo_invidious_embed_link": "Enlace para Insertar",
"preferences_quality_dash_option_1080p": "1080p", "preferences_quality_dash_option_1080p": "1080p",
"search_filters_features_option_purchased": "Comprado", "purchased": "Comprado",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"videoinfo_watch_on_youTube": "Ver en YouTube", "videoinfo_watch_on_youTube": "Ver en YouTube",
"preferences_save_player_pos_label": "Guardar posición de reproducción: ", "preferences_save_player_pos_label": "Guardar posición de reproducción: ",
"generic_views_count": "{{count}} visualización", "generic_views_count": "{{count}} visualización",
@ -405,9 +414,9 @@
"generic_count_weeks": "{{count}} semana", "generic_count_weeks": "{{count}} semana",
"generic_count_weeks_plural": "{{count}} semanas", "generic_count_weeks_plural": "{{count}} semanas",
"generic_playlists_count": "{{count}} lista de reproducción", "generic_playlists_count": "{{count}} lista de reproducción",
"generic_playlists_count_plural": "{{count}} listas de reproducciones", "generic_playlists_count_plural": "{{count}} listas de reproducción",
"generic_videos_count": "{{count}} video", "generic_videos_count": "{{count}} vídeo",
"generic_videos_count_plural": "{{count}} video", "generic_videos_count_plural": "{{count}} vídeos",
"generic_count_months": "{{count}} mes", "generic_count_months": "{{count}} mes",
"generic_count_months_plural": "{{count}} meses", "generic_count_months_plural": "{{count}} meses",
"comments_points_count": "{{count}} punto", "comments_points_count": "{{count}} punto",
@ -423,10 +432,10 @@
"crash_page_before_reporting": "Antes de notificar un error asegúrate de que has:", "crash_page_before_reporting": "Antes de notificar un error asegúrate de que has:",
"crash_page_switch_instance": "probado a <a href=\"`x`\">usar otra instancia</a>", "crash_page_switch_instance": "probado a <a href=\"`x`\">usar otra instancia</a>",
"crash_page_read_the_faq": "leído las <a href=\"`x`\">Preguntas Frecuentes</a>", "crash_page_read_the_faq": "leído las <a href=\"`x`\">Preguntas Frecuentes</a>",
"crash_page_search_issue": "buscado <a href=\"`x`\">problemas existentes en GitHub</a>", "crash_page_search_issue": "buscado <a href=\"`x`\">problemas existentes en Github</a>",
"crash_page_you_found_a_bug": "¡Parece que has encontrado un error en Invidious!", "crash_page_you_found_a_bug": "¡Parece que has encontrado un error en Invidious!",
"crash_page_refresh": "probado a <a href=\"`x`\">recargar la página</a>", "crash_page_refresh": "probado a <a href=\"`x`\">recargar la página</a>",
"crash_page_report_issue": "Si nada de lo anterior ha sido de ayuda, por favor, <a href=\"`x`\">abre una nueva incidencia en GitHub</a> (preferiblemente en inglés) e incluye verbatim el siguiente texto en tu mensaje:", "crash_page_report_issue": "Si nada de lo anterior ha sido de ayuda, por favor, <a href=\"`x`\">abre una nueva incidencia en GitHub</a> (preferiblemente en inglés) e incluye el siguiente texto en tu mensaje (NO traduzcas este texto):",
"English (United States)": "Inglés (Estados Unidos)", "English (United States)": "Inglés (Estados Unidos)",
"Cantonese (Hong Kong)": "Cantonés (Hong Kong)", "Cantonese (Hong Kong)": "Cantonés (Hong Kong)",
"Dutch (auto-generated)": "Neerlandés (generados automáticamente)", "Dutch (auto-generated)": "Neerlandés (generados automáticamente)",
@ -450,31 +459,5 @@
"Korean (auto-generated)": "Coreano (generados automáticamente)", "Korean (auto-generated)": "Coreano (generados automáticamente)",
"Spanish (Mexico)": "Español (Méjico)", "Spanish (Mexico)": "Español (Méjico)",
"Spanish (auto-generated)": "Español (generados automáticamente)", "Spanish (auto-generated)": "Español (generados automáticamente)",
"preferences_watch_history_label": "Habilitar historial de reproducciones: ", "preferences_watch_history_label": "Habilitar historial de reproducciones: "
"search_message_no_results": "No se han encontrado resultados.",
"search_message_change_filters_or_query": "Pruebe ampliar la consulta de búsqueda y/o a cambiar los filtros.",
"search_filters_title": "Filtros",
"search_filters_date_label": "fecha de subida",
"search_filters_date_option_none": "Cualquier fecha",
"search_filters_type_option_all": "Cualquier tipo",
"search_filters_duration_option_none": "Cualquier duración",
"search_filters_features_option_vr180": "VR180",
"search_filters_apply_button": "Aplicar filtros",
"tokens_count": "{{count}} token",
"tokens_count_plural": "{{count}} tokens",
"search_message_use_another_instance": " También puede <a href=\"`x`\">buscar en otra instancia</a>.",
"Popular enabled: ": "¿Habilitar la sección popular? ",
"error_video_not_in_playlist": "El video que solicitaste no existe en esta lista de reproducción. <a href=\"`x`\">Haz clic aquí para acceder a la página de inicio de la lista de reproducción.</a>",
"channel_tab_streams_label": "Directos",
"channel_tab_channels_label": "Canales",
"channel_tab_shorts_label": "Cortos",
"channel_tab_playlists_label": "Listas de reproducción",
"Music in this video": "Música en este video",
"Artist: ": "Artista: ",
"Album: ": "Álbum: ",
"Song: ": "Canción: ",
"Channel Sponsor": "Patrocinador del canal",
"Standard YouTube license": "Licencia de YouTube estándar",
"Download is disabled": "La descarga está deshabilitada",
"Import YouTube playlist (.csv)": "Importar lista de reproducción de YouTube (.csv)"
} }

@ -1,332 +0,0 @@
{
"generic_playlists_count": "{{count}} esitusloend",
"generic_playlists_count_plural": "{{count}} esindusloendit",
"LIVE": "OTSEÜLEKANNE",
"View channel on YouTube": "Vaata kanalit YouTube'is",
"Log in": "Logi sisse",
"Log in/register": "Logi sisse/registreeru",
"Dark mode: ": "Tume režiim: ",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} videot",
"generic_subscribers_count": "{{count}} tellija",
"generic_subscribers_count_plural": "{{count}} tellijat",
"generic_subscriptions_count": "{{count}} tellimus",
"generic_subscriptions_count_plural": "{{count}} tellimust",
"Shared `x` ago": "Jagatud `x` tagasi",
"Unsubscribe": "Loobu tellimusest",
"Subscribe": "Telli",
"View playlist on YouTube": "Vaata esitusloendit YouTube'is",
"newest": "uusimad",
"oldest": "vanimad",
"popular": "populaarsed",
"last": "viimane",
"Next page": "Järgmine leht",
"Previous page": "Eelmine leht",
"Clear watch history?": "Kustuta vaatamiste ajalugu?",
"New password": "Uus salasõna",
"New passwords must match": "Uued salasõnad peavad ühtima",
"Import and Export Data": "Impordi ja ekspordi andmed",
"Import": "Impordi",
"Import YouTube subscriptions": "Impordi tellimused Youtube'ist/OPML-ist",
"Import FreeTube subscriptions (.db)": "Impordi tellimused FreeTube'ist (.db)",
"Import NewPipe data (.zip)": "Impordi NewPipe'i andmed (.zip)",
"Export": "Ekspordi",
"Export subscriptions as OPML": "Ekspordi tellimused OPML-ina",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Ekspordi tellimused OPML-ina (NewPipe'i ja FreeTube'i jaoks)",
"Delete account?": "Kustuta kasutaja?",
"History": "Ajalugu",
"JavaScript license information": "JavaScripti litsentsi info",
"source": "allikas",
"User ID": "Kasutada ID",
"Password": "Salasõna",
"Time (h:mm:ss):": "Aeg (h:mm:ss):",
"Text CAPTCHA": "CAPTCHA-tekst",
"Image CAPTCHA": "CAPTCHA-foto",
"Sign In": "Logi sisse",
"Register": "Registreeru",
"E-mail": "E-post",
"Preferences": "Eelistused",
"preferences_category_player": "Mängija eelistused",
"preferences_continue_autoplay_label": "Mängi järgmine video automaatselt: ",
"preferences_quality_label": "Eelistatud videokvaliteet: ",
"preferences_quality_option_dash": "DASH (kohanduv kvaliteet)",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Keskmine",
"preferences_quality_option_small": "Väike",
"preferences_quality_dash_label": "Eelistatav DASH-video kvaliteet: ",
"preferences_quality_dash_option_auto": "Automaatne",
"preferences_quality_dash_option_best": "Parim",
"preferences_quality_dash_option_worst": "Halvim",
"preferences_volume_label": "Video helitugevus: ",
"youtube": "YouTube",
"reddit": "Reddit",
"preferences_related_videos_label": "Näita sarnaseid videosid: ",
"preferences_vr_mode_label": "Interaktiivne 360-kraadine video (vajalik WebGL): ",
"preferences_dark_mode_label": "Teema: ",
"dark": "tume",
"light": "hele",
"preferences_category_subscription": "Tellimuse seaded",
"preferences_max_results_label": "Avalehel näidatavate videote arv: ",
"preferences_sort_label": "Sorteeri: ",
"published": "avaldatud",
"alphabetically": "tähestikulises järjekorras",
"alphabetically - reverse": "vastupidi tähestikulises järjekorras",
"channel name": "kanali nimi",
"preferences_unseen_only_label": "Näita ainult vaatamata videosid: ",
"Only show latest video from channel: ": "Näita ainult viimast videot: ",
"preferences_notifications_only_label": "Näita ainult teavitusi (kui neid on): ",
"Enable web notifications": "Luba veebiteavitused",
"`x` uploaded a video": "`x` laadis video üles",
"`x` is live": "`x` teeb otseülekannet",
"preferences_category_data": "Andme-eelistused",
"Clear watch history": "Puhasta vaatamisajalugu",
"Import/export data": "Impordi/ekspordi andmed",
"Change password": "Muuda salasõna",
"Watch history": "Vaatamisajalugu",
"Delete account": "Kustuta kasutaja",
"Save preferences": "Salvesta eelistused",
"Token": "Token",
"Import/export": "Imprort/eksport",
"unsubscribe": "loobu tellimusest",
"Subscriptions": "Tellimused",
"search": "otsi",
"Source available here.": "Allikas on kättesaadaval siin.",
"View privacy policy.": "Vaata privaatsuspoliitikat.",
"Public": "Avalik",
"Private": "Privaatne",
"View all playlists": "Vaata kõiki esitusloendeid",
"Updated `x` ago": "Uuendas `x` tagasi",
"Delete playlist `x`?": "Kustuta esitusloend `x`?",
"Delete playlist": "Kustuta esitusloend",
"Create playlist": "Loo esitlusloend",
"Title": "Pealkiri",
"Playlist privacy": "Esitusloendi privaatsus",
"Show more": "Näita rohkem",
"Show less": "Näita vähem",
"Watch on YouTube": "Vaata YouTube'is",
"search_message_no_results": "Tulemusi ei leitud.",
"search_message_change_filters_or_query": "Proovi otsingut laiendada või filtreid muuta.",
"Genre: ": "Žanr: ",
"License: ": "Litsents: ",
"Family friendly? ": "Peresõbralik? ",
"Shared `x`": "Jagas `x`",
"Premieres in `x`": "Esilinastub `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Tundub, et oled JavaScripti välja lülitanud. Vajuta siia, et kommentaare vaadata; nende laadimine võib võtta natukene rohkem aega.",
"View Reddit comments": "Vaata Redditi kommentaare",
"Hide replies": "Peida vastused",
"Show replies": "Näita vastuseid",
"Incorrect password": "Vale salasõna",
"Wrong answer": "Vale vastus",
"User ID is a required field": "Kasutaja ID on kohustuslik väli",
"Password is a required field": "Salasõna on kohustuslik väli",
"Wrong username or password": "Vale kasutajanimi või salasõna",
"Password cannot be longer than 55 characters": "Salasõna ei tohi olla pikem kui 55 tähemärki",
"Password cannot be empty": "Salasõna ei tohi olla tühi",
"Please log in": "Palun logige sisse",
"channel:`x`": "kanal:`x`",
"Deleted or invalid channel": "Kanal on kustutatud või seda ei leitud",
"This channel does not exist.": "Sellist kanalit pole olemas.",
"comments_view_x_replies": "{{count}} vastus",
"comments_view_x_replies_plural": "{{count}} vastust",
"`x` ago": "`x` tagasi",
"Load more": "Laadi rohkem",
"Empty playlist": "Tühi esitusloend",
"Not a playlist.": "Tegu pole esitusloendiga.",
"Playlist does not exist.": "Seda esitusloendit pole olemas.",
"No such user": "Sellist kasutajat pole",
"English": "Inglise",
"English (United Kingdom)": "Inglise (Suurbritannia)",
"English (United States)": "Inglise (USA)",
"English (auto-generated)": "Inglise (automaatselt koostatud)",
"Afrikaans": "Afrikaani",
"Albanian": "Albaania",
"Arabic": "Araabia",
"Armenian": "Armeenia",
"Bangla": "Bengali",
"Basque": "Baski",
"Belarusian": "Valgevene",
"Bulgarian": "Bulgaaria",
"Burmese": "Birma",
"Cantonese (Hong Kong)": "Kantoni (Hong Konk)",
"Chinese (China)": "Hiina (Hiina)",
"Chinese (Hong Kong)": "Hiina (Hong Kong)",
"Chinese (Simplified)": "Hiina (lihtsustatud)",
"Chinese (Taiwan)": "Hiina (Taiwan)",
"Croatian": "Horvaatia",
"Czech": "Tšehhi",
"Danish": "Taani",
"Dutch": "Hollandi",
"Esperanto": "Esperanto",
"Estonian": "Eesti",
"Filipino": "Filipiini",
"Finnish": "Soome",
"French": "Prantsuse",
"French (auto-generated)": "Prantsuse (automaatne)",
"Dutch (auto-generated)": "Hollandi (automaatne)",
"Galician": "Kaliitsia",
"Georgian": "Gruusia",
"Haitian Creole": "Haiti kreool",
"Hausa": "Hausa",
"Hawaiian": "Havaii",
"Hebrew": "Heebrea",
"Hindi": "Hindi",
"Hungarian": "Ungari",
"Icelandic": "Islandi",
"Indonesian": "Indoneesia",
"Japanese (auto-generated)": "Jaapani (automaatne)",
"Kannada": "Kannada",
"Kazakh": "Kasahhi",
"Luxembourgish": "Luksemburgi",
"Macedonian": "Makedoonia",
"Malay": "Malai",
"Maltese": "Malta",
"Maori": "Maori",
"Marathi": "Marathi",
"Mongolian": "Mongoli",
"Nepali": "Nepaali",
"Norwegian Bokmål": "Norra (Bokmål)",
"Persian": "Pärsia",
"Polish": "Poola",
"Portuguese": "Portugali",
"Portuguese (auto-generated)": "Portugali (automaatne)",
"Portuguese (Brazil)": "Portugali (Brasiilia)",
"Romanian": "Rumeenia",
"Russian": "Vene",
"Russian (auto-generated)": "Vene (automaatne)",
"Scottish Gaelic": "Šoti (Gaeli)",
"Serbian": "Serbia",
"Slovak": "Slovaki",
"Slovenian": "Sloveeni",
"Somali": "Somaali",
"Spanish": "Hispaania",
"Spanish (auto-generated)": "Hispaania (automaatne)",
"Spanish (Latin America)": "Hispaania (Ladina-Ameerika)",
"Spanish (Mexico)": "Hispaania (Mehhiko)",
"Spanish (Spain)": "Hispaania (Hispaania)",
"Swahili": "Suahili",
"Swedish": "Rootsi",
"Tajik": "Tadžiki",
"Tamil": "Tamiili",
"Thai": "Tai",
"Turkish": "Türgi",
"Turkish (auto-generated)": "Türgi (automaatne)",
"Ukrainian": "Ukraina",
"Uzbek": "Usbeki",
"Vietnamese": "Vietnami",
"Vietnamese (auto-generated)": "Vietnami (automaatne)",
"generic_count_years": "{{count}} aasta",
"generic_count_years_plural": "{{count}} aastat",
"generic_count_months": "{{count}} kuu",
"generic_count_months_plural": "{{count}} kuud",
"generic_count_weeks": "{{count}} nädal",
"generic_count_weeks_plural": "{{count}} nädalat",
"generic_count_days": "{{count}} päev",
"generic_count_days_plural": "{{count}} päeva",
"generic_count_hours": "{{count}} tund",
"generic_count_hours_plural": "{{count}} tundi",
"generic_count_minutes": "{{count}} minut",
"generic_count_minutes_plural": "{{count}} minutit",
"Popular": "Populaarne",
"Search": "Otsi",
"Top": "Top",
"About": "Leheküljest",
"preferences_locale_label": "Keel: ",
"View as playlist": "Vaata esitusloendina",
"Movies": "Filmid",
"Download as: ": "Laadi kui: ",
"(edited)": "(muudetud)",
"`x` marked it with a ❤": "`x` märkis ❤",
"Audio mode": "Audiorežiim",
"Video mode": "Videorežiim",
"search_filters_date_label": "Üleslaadimise kuupäev",
"search_filters_date_option_none": "Ükskõik mis kuupäev",
"search_filters_date_option_today": "Täna",
"search_filters_date_option_week": "Sel nädalal",
"search_filters_date_option_hour": "Viimasel tunnil",
"search_filters_date_option_month": "Sel kuul",
"search_filters_date_option_year": "Sel aastal",
"search_filters_type_label": "Tüüp",
"search_filters_type_option_all": "Ükskõik mis tüüp",
"search_filters_duration_label": "Kestus",
"search_filters_type_option_show": "Näita",
"search_filters_duration_option_none": "Ükskõik mis kestus",
"search_filters_duration_option_short": "Lühike (alla 4 minuti)",
"search_filters_duration_option_medium": "Keskmine (4 - 20 minutit)",
"search_filters_duration_option_long": "Pikk (üle 20 minuti)",
"search_filters_features_option_live": "Otseülekanne",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_hd": "HD",
"search_filters_features_option_subtitles": "Subtiitrid",
"search_filters_features_option_location": "Asukoht",
"search_filters_sort_label": "Sorteeri",
"search_filters_sort_option_views": "Vaatamiste arv",
"next_steps_error_message": "Pärast mida võiksite proovida: ",
"videoinfo_started_streaming_x_ago": "Alustas otseülekannet `x` tagasi",
"Yes": "Jah",
"generic_views_count": "{{count}} vaatamine",
"generic_views_count_plural": "{{count}} vaatamist",
"Import NewPipe subscriptions (.json)": "Impordi tellimused NewPipe'ist (.json)",
"No": "Ei",
"preferences_region_label": "Riik: ",
"View YouTube comments": "Vaata YouTube'i kommentaare",
"preferences_extend_desc_label": "Ava video kirjeldus automaatselt: ",
"German (auto-generated)": "Saksa (automaatne)",
"Italian": "Itaalia",
"preferences_player_style_label": "Mängija stiil: ",
"subscriptions_unseen_notifs_count": "{{count}} lugemata teavitus",
"subscriptions_unseen_notifs_count_plural": "{{count}} lugemata teavitust",
"View more comments on Reddit": "Vaata teisi kommentaare Redditis",
"Only show latest unwatched video from channel: ": "Näita ainult viimast vaatamata videot: ",
"tokens_count": "{{count}} token",
"tokens_count_plural": "{{count}} tokenit",
"Log out": "Logi välja",
"Premieres `x`": "Linastub`x`",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "Vaata `x` kommentaari",
"": "Vaata `x` kommentaare"
},
"Khmer": "Khmeeri",
"Bosnian": "Bosnia",
"Corsican": "Korsika",
"Javanese": "Jaava",
"Lithuanian": "Leedu",
"channel_tab_videos_label": "Videod",
"channel_tab_community_label": "Kogukond",
"CAPTCHA is a required field": "CAPTCHA on kohustuslik väli",
"comments_points_count": "{{count}} punkt",
"comments_points_count_plural": "{{count}} punkti",
"Chinese": "Hiina",
"German": "Saksa",
"Indonesian (auto-generated)": "Indoneesia (automaatne)",
"Italian (auto-generated)": "Itaalia (automaatne)",
"Kyrgyz": "Kirkiisi",
"Latin": "Ladina",
"generic_count_seconds": "{{count}} sekund",
"generic_count_seconds_plural": "{{count}} sekundit",
"Catalan": "Katalaani",
"Chinese (Traditional)": "Hiina (traditsiooniline)",
"Greek": "Kreeka",
"Kurdish": "Kurdi",
"Latvian": "Läti",
"Irish": "Iiri",
"Korean": "Korea",
"Japanese": "Jaapani",
"Korean (auto-generated)": "Korea (automaatne)",
"Music": "Muusika",
"Playlists": "Esitusloendid",
"search_filters_type_option_video": "Video",
"search_filters_sort_option_date": "Üleslaadimise kuupäev",
"Current version: ": "Praegune versioon: ",
"footer_documentation": "Dokumentatsioon",
"Gaming": "Mängud",
"News": "Uudised",
"Download": "Laadi alla",
"search_filters_title": "Filtrid",
"search_filters_type_option_channel": "Kanal",
"search_filters_type_option_playlist": "Esitusloend",
"search_filters_type_option_movie": "Film",
"next_steps_error_message_go_to_youtube": "Minna YouTube'i",
"next_steps_error_message_refresh": "Laadida uuesti",
"footer_donate_page": "Anneta",
"videoinfo_watch_on_youTube": "Vaata YouTube'is"
}

@ -14,20 +14,21 @@
"Clear watch history?": "Garbitu ikusitakoen historia?", "Clear watch history?": "Garbitu ikusitakoen historia?",
"New password": "Pasahitz berria", "New password": "Pasahitz berria",
"New passwords must match": "Pasahitza berriek bat egin behar dute", "New passwords must match": "Pasahitza berriek bat egin behar dute",
"Cannot change password for Google accounts": "Ezin da pasahitza aldatu Google kontuetan",
"Authorize token?": "Baimendu tokena?", "Authorize token?": "Baimendu tokena?",
"Yes": "Bai", "Yes": "Bai",
"No": "Ez", "No": "Ez",
"Import and Export Data": "Datuak inportatu eta esportatu", "Import and Export Data": "Datuak inportatu eta esportatu",
"Import": "Inportatu", "Import": "Inportatu",
"Import Invidious data": "Inportatu Invidiouseko JSON datuak", "Import Invidious data": "Inportatu Invidiouseko datuak",
"Import YouTube subscriptions": "Inportatu YouTubeko/OPML harpidetzak", "Import YouTube subscriptions": "Inportatu YouTubeko harpidetzak",
"Import FreeTube subscriptions (.db)": "Inportatu FreeTubeko harpidetzak (.db)", "Import FreeTube subscriptions (.db)": "Inportatu FreeTubeko harpidetzak (.db)",
"Import NewPipe subscriptions (.json)": "Inportatu NewPipeko harpidetzak (.json)", "Import NewPipe subscriptions (.json)": "Inportatu NewPipeko harpidetzak (.json)",
"Import NewPipe data (.zip)": "Inportatu NewPipeko datuak (.zip)", "Import NewPipe data (.zip)": "Inportatu NewPipeko datuak (.zip)",
"Export": "Esportatu", "Export": "Esportatu",
"Export subscriptions as OPML": "Esportatu harpidetzak OPML bezala", "Export subscriptions as OPML": "Esportatu harpidetzak OPML bezala",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Esportatu harpidetzak OPML bezala (NewPipe eta FreeTuberako)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Esportatu harpidetzak OPML bezala (NewPipe eta FreeTuberako)",
"Export data as JSON": "Esportatu Invidious datuak JSON gisa", "Export data as JSON": "Esportatu datuak JSON bezala",
"Delete account?": "Kontua ezabatu?", "Delete account?": "Kontua ezabatu?",
"History": "Historia", "History": "Historia",
"An alternative front-end to YouTube": "YouTuberako interfaze alternatibo bat", "An alternative front-end to YouTube": "YouTuberako interfaze alternatibo bat",
@ -35,6 +36,7 @@
"source": "iturburua", "source": "iturburua",
"Log in": "Saioa hasi", "Log in": "Saioa hasi",
"Log in/register": "Hasi saioa / Eman izena", "Log in/register": "Hasi saioa / Eman izena",
"Log in with Google": "Hasi saioa Googlekin",
"User ID": "Erabiltzaile IDa", "User ID": "Erabiltzaile IDa",
"Password": "Pasahitza", "Password": "Pasahitza",
"Time (h:mm:ss):": "Denbora (h:mm:ss):", "Time (h:mm:ss):": "Denbora (h:mm:ss):",
@ -51,7 +53,7 @@
"preferences_volume_label": "Erreproduzigailuaren bolumena: ", "preferences_volume_label": "Erreproduzigailuaren bolumena: ",
"preferences_comments_label": "Lehenetsitako iruzkinak: ", "preferences_comments_label": "Lehenetsitako iruzkinak: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "reddit",
"preferences_captions_label": "Lehenetsitako azpitituluak: ", "preferences_captions_label": "Lehenetsitako azpitituluak: ",
"preferences_related_videos_label": "Erakutsi erlazionatutako bideoak: ", "preferences_related_videos_label": "Erakutsi erlazionatutako bideoak: ",
"preferences_annotations_label": "Erakutsi oharrak modu lehenetsian: ", "preferences_annotations_label": "Erakutsi oharrak modu lehenetsian: ",
@ -60,210 +62,5 @@
"Dark mode: ": "Gai iluna: ", "Dark mode: ": "Gai iluna: ",
"preferences_dark_mode_label": "Gaia: ", "preferences_dark_mode_label": "Gaia: ",
"dark": "iluna", "dark": "iluna",
"light": "argia", "light": "argia"
"generic_subscriptions_count": "{{count}} harpidetza",
"generic_subscriptions_count_plural": "{{count}} harpidetzak",
"tokens_count": "{{count}} tokena",
"tokens_count_plural": "{{count}} tokenak",
"comments_points_count": "{{count}} puntua",
"comments_points_count_plural": "{{count}} puntuak",
"View more comments on Reddit": "Iruzkin gehiago Redditen",
"Fallback captions: ": "Ordezko azpitituluak: ",
"generic_subscribers_count": "{{count}} harpidedun",
"generic_subscribers_count_plural": "{{count}} harpidedunak",
"preferences_quality_option_dash": "DASH (kalitate egokitua)",
"preferences_listen_label": "Lehenetsiz jo: ",
"preferences_speed_label": "Abiadura lehenetsia: ",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_144p": "144p",
"preferences_quality_dash_option_auto": "Auto",
"preferences_quality_dash_option_worst": "Txarrena",
"preferences_quality_dash_option_best": "Hoberena",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_240p": "240p",
"preferences_extend_desc_label": "Bideoaren azalpena automatikoki zabaldu: ",
"preferences_annotations_subscribed_label": "Harpidetutako kanalen oharrak erakutsi lehenetsiz? ",
"Redirect homepage to feed: ": "Hasierako orrira bidali jarraitzeko: ",
"channel name - reverse": "kanalaren izena - alderantziz",
"preferences_notifications_only_label": "Jakinarazpenak soilik erakutsi (baldin badago): ",
"Top enabled: ": "Goikoa gaitu: ",
"Import/export data": "Inportatu/exportatu data",
"Create playlist": "Zerrenda sortu",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Aditu! JavaScript itzalita dakazula ematen du. Hemen sakatu iruzkinak ikusteko. Denbora luza leikeela kontuan hartu.",
"generic_views_count": "{{count}}ikusia",
"generic_views_count_plural": "{{count}}ikusiak",
"generic_playlists_count": "{{count}}zerrenda",
"generic_playlists_count_plural": "{{count}}zerrendak",
"Could not fetch comments": "Iruzkinei ezin heldu",
"Erroneous token": "Token okerra",
"Albanian": "Albaniarra",
"Azerbaijani": "Azerbaitarra",
"No such user": "Ez dago erabiltzailerik",
"Bulgarian": "Bulgariarra",
"Filipino": "Filipinera",
"French": "Frantsesa",
"French (auto-generated)": "Frantsesa (auto-sortua)",
"Show more": "Erakutsi gehiago",
"Show less": "Erakutsi gutxiago",
"Delete playlist": "Zerrenda ezabatu",
"Delete account": "Kontua ezabatu",
"User ID is a required field": "Erabiltzailearen IDa beharrezkoa da",
"English (United Kingdom)": "Ingelesa (Britania Handia",
"preferences_vr_mode_label": "360 graduko bideo interaktiboak (WebGL beharko): ",
"English (United States)": "Estatu batuarra (AEB)",
"English (auto-generated)": "Ingelesa (autosortua)",
"Arabic": "Arabiarra",
"Armenian": "Armeniarra",
"Bangla": "Banglera",
"Belarusian": "Bielorrusiara",
"Burmese": "Burmesera",
"Chinese (Simplified)": "Txinera (sinplifikatua)",
"preferences_watch_history_label": "Baimendu historia ikusi ",
"generic_videos_count": "{{count}}bideo",
"generic_videos_count_plural": "{{count}}bideoak",
"View privacy policy.": "Pribatutasun politika ikusi.",
"Cantonese (Hong Kong)": "Kantoniera (Hong Kong)",
"subscriptions_unseen_notifs_count": "{{count}} ezikusitako oharra",
"subscriptions_unseen_notifs_count_plural": "{{count}} ezikusitako oharrak",
"Trending": "Joera",
"Playlist privacy": "Zerrendaren privatutasuna",
"Switch Invidious Instance": "Invidious adibidea aldatu",
"Genre: ": "Genero: ",
"License: ": "Lizentzia: ",
"Family friendly? ": "Adeikorra familiarekin? ",
"Wilson score: ": "Wilsonen puntuazioa: ",
"comments_view_x_replies": "{{count}} erantzuna ikusi",
"comments_view_x_replies_plural": "{{count}} erantzunak ikusi",
"Catalan": "Katalaniera",
"Chinese": "Txinera",
"Chinese (China)": "Txinatarra",
"Chinese (Hong Kong)": "Hongkondarra",
"Chinese (Taiwan)": "Taiwandarra",
"Corsican": "Korsikera",
"Dutch (auto-generated)": "Alemaniera (auto-sortua)",
"Estonian": "Estoniera",
"Finnish": "Finlandiera",
"Galician": "Galizera",
"German (auto-generated)": "Alemaiera (auto-sortua)",
"Greek": "Greziera",
"crash_page_report_issue": "Aurreko ezerk ez badizu lagundu, arren <a href=\"`x`\"> GitHuben gai berri bat zabaldu </a> (ingelesez ahal bada) eta zure mezuan hurrengo testua sartu (testuari EZ itzulpena egin):",
"crash_page_search_issue": "GitHuben dauden gaiak <a href=\"`x`\"> buruz</a>",
"preferences_quality_option_medium": "Erdixka",
"preferences_quality_option_small": "Txikia",
"preferences_quality_dash_label": "DASH bideo kalitate lehenetsia: ",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_360p": "360p",
"invidious": "Invidious",
"Source available here.": "Iturburua hemen eskura.",
"View JavaScript license information.": "JavaScriptaren lizentzi adierazpena ikusi.",
"Blacklisted regions: ": "zerrenda beltzaren zonaldeak: ",
"Premieres `x`": "'x' estrenaldiak",
"Wrong answer": "Erantzun ez zuzena",
"Password is a required field": "Pasahitza beharrezkoa da",
"Wrong username or password": "Pasahitza edo ezizena gaizki",
"Password cannot be longer than 55 characters": "Pasahitza 55 karaktere baino luzeagoa ezin da izan",
"This channel does not exist.": "Kanal hau ez dago.",
"`x` ago": "duela 'x'",
"Czech": "Txekiera",
"preferences_region_label": "Herrialdeko edukiera: ",
"preferences_sort_label": "Bideoak ordenatu: ",
"published": "argitaratuta",
"Only show latest video from channel: ": "Kanalaren azken bideoa soilik erakutsi ",
"preferences_category_admin": "Administratzailearen lehentasunak",
"Registration enabled: ": "Harpidetza gaituta: ",
"Save preferences": "Baloreak gorde",
"Token manager": "Token kudeatzailea",
"unsubscribe": "Baja eman",
"search": "Bilatu",
"Log out": "Irten",
"English": "Ingelesa",
"Afrikaans": "Afrikarra",
"Amharic": "Amharerra",
"Basque": "Euskera",
"Bosnian": "Bosniarra",
"Cebuano": "Zebuera",
"Chinese (Traditional)": "Txinera (Tradizionala)",
"Croatian": "Croaziera",
"Danish": "Daniera",
"Dutch": "Alemaniera",
"Esperanto": "Esperanto",
"Erroneous challenge": "Erronka okerra",
"View all playlists": "Zerrenda guztiak ikusi",
"Show annotations": "Oharrak erakutsi",
"Empty playlist": "Zerrenda hutsik",
"Please log in": "Sartu, mesedez",
"CAPTCHA is a required field": "CAPTCHA beharrezko eremua da",
"preferences_category_data": "Dataren lehentasunak",
"preferences_default_home_label": "Homepage lehenetsia: ",
"preferences_automatic_instance_redirect_label": "berbideratze adibide automatikoa (atzera egin berbideratzeko: invidious.io) ",
"`x` uploaded a video": "' x'(e)k bideo bat igo du",
"published - reverse": "argitaratuta - alderantziz",
"Could not get channel info.": "Kanalaren adierazpena ezin lortu.",
"alphabetically - reverse": "alfabetikoki - alderantziz",
"Public": "Orokorra",
"Unlisted": "Ez zerrendatua",
"Subscription manager": "Harpidetzen kudeatzailea",
"Updated `x` ago": "Duela 'x' eguneratua",
"Hide replies": "Erantzunak izkutatu",
"preferences_thin_mode_label": "Urri eran: ",
"Show replies": "Erantzunak erakutsi",
"Watch on YouTube": "YouTuben ikusi",
"Premieres in `x`": "'x'eko estrenaldiak",
"Delete playlist `x`?": "'x' zerrenda ezabatu nahi?",
"Token is expired, please try again": "Token kadukatua, saiatu berriro",
"CAPTCHA enabled: ": "CAPTCHA gaitu: ",
"Released under the AGPLv3 on Github.": "GitHubeko AGPLv3pean argitaratuta.",
"channel:`x`": "Kanal: 'x'",
"Georgian": "Georgiera",
"Incorrect password": "Pasahitza gaizki",
"Playlist does not exist.": "Zerrenda ez da existitzen.",
"preferences_category_misc": "Askotariko lehentasunak",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "'x' iruzkina ikusi",
"": "'x' iruzkinak ikusi"
},
"Report statistics: ": "Estatistikak adierazi: ",
"preferences_max_results_label": "Jotzeko bideo zerrendaren luzera: ",
"Subscriptions": "Harpidetzak",
"Load more": "Gehiago atera",
"Change password": "Pasahitza aldatu",
"preferences_show_nick_label": "Erakutsi ezizena goian: ",
"View Reddit comments": "Redditeko iruzkinak ikusi",
"preferences_category_subscription": "Harpidetzaren lehentasunak",
"Hidden field \"challenge\" is a required field": "\"challenge\" eremu ezkutua beharrezkoa da",
"German": "Alemaniarra",
"View YouTube comments": "YouTubeko iruzkinak ikusi",
"`x` is live": "'x' bizirik darrai",
"Password cannot be empty": "Pasahitza ezin da hutsik utzi",
"preferences_video_loop_label": "Beti begiztatu: ",
"Only show latest unwatched video from channel: ": "kanalaren azken bideo ezikusia erakutsi soilik ",
"Enable web notifications": "Webaren jakinarazpenak baimendu",
"revoke": "ukatu",
"preferences_continue_label": "Hurrengo lehenetsia jo: ",
"Whitelisted regions: ": "Zuri zerrendaren zonaldeak: ",
"Erroneous CAPTCHA": "CAPTCHA gaizki",
"Deleted or invalid channel": "Ezgai edota ezabatutako kanala",
"Could not create mix.": "Nahastea ezin sortu.",
"Not a playlist.": "Ez da zerrenda.",
"Hidden field \"token\" is a required field": "\"token\" eremu ezkutua beharrezkoa da",
"Import/export": "Inportatu/esportatu",
"alphabetically": "alfabetikoki",
"preferences_unseen_only_label": "Ezikusiak besterik ez erakutsi: ",
"Clear watch history": "Historia ezabatu",
"Manage subscriptions": "Harpidetzak kudeatu",
"Manage tokens": "Fitxak kudeatu",
"Watch history": "Historia ikusi",
"Login enabled: ": "Login gaitu: ",
"Hide annotations": "Oharrak izkutatu",
"Title": "Titulua",
"channel name": "Kanalaren izena",
"Authorize token for `x`?": "Baimendu tokena 'x'tzako?",
"Private": "Pribatua",
"Editing playlist `x`": "'x' zerrenda editatu",
"Could not pull trending pages.": "Ezin ekarri orri arrakastatsuak.",
"crash_page_read_the_faq": "Bide <a href=\"`x`\"> (FAQ) ohiko galderak</a>"
} }

@ -19,21 +19,22 @@
"Clear watch history?": "پاک کردن تاریخچه نمایش؟", "Clear watch history?": "پاک کردن تاریخچه نمایش؟",
"New password": "گذرواژه تازه", "New password": "گذرواژه تازه",
"New passwords must match": "گذارواژه های تازه باید باهم همخوانی داشته باشند", "New passwords must match": "گذارواژه های تازه باید باهم همخوانی داشته باشند",
"Cannot change password for Google accounts": "نمیتوان گذرواژه را برای حساب های کاربری گوگل تغییر داد",
"Authorize token?": "توکن دسترسی؟", "Authorize token?": "توکن دسترسی؟",
"Authorize token for `x`?": "توکن دسترسی برای `x`؟", "Authorize token for `x`?": "توکن دسترسی برای `x`؟",
"Yes": "بله", "Yes": "بله",
"No": "خیر", "No": "خیر",
"Import and Export Data": "درون‌برد و برون‌برد داده", "Import and Export Data": "درون‌برد و برون‌برد داده",
"Import": "درون‌برد", "Import": "درون‌برد",
"Import Invidious data": "وارد کردن داده JSON اینویدیوس", "Import Invidious data": "درون‌برد داده اینویدیوس",
"Import YouTube subscriptions": "وارد کردن اشتراک OPML/ یوتیوب", "Import YouTube subscriptions": "درون‌برد اشتراک‌های یوتیوب",
"Import FreeTube subscriptions (.db)": "درون‌برد اشتراک‌های فری‌تیوب (.db)", "Import FreeTube subscriptions (.db)": "درون‌برد اشتراک‌های فری‌تیوب (.db)",
"Import NewPipe subscriptions (.json)": "درون‌برد اشتراک‌های نیوپایپ (.json)", "Import NewPipe subscriptions (.json)": "درون‌برد اشتراک‌های نیوپایپ (.json)",
"Import NewPipe data (.zip)": "درون‌برد داده نیوپایپ (.zip)", "Import NewPipe data (.zip)": "درون‌برد داده نیوپایپ (.zip)",
"Export": "برون‌برد", "Export": "برون‌برد",
"Export subscriptions as OPML": "برون‌برد اشتراک‌ها در قالب OPML", "Export subscriptions as OPML": "برون‌برد اشتراک‌ها در قالب OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "برون‌برد اشتراک‌ها در قالب OPML (برای نیوپایپ و فری‌تیوب)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "برون‌برد اشتراک‌ها در قالب OPML (برای نیوپایپ و فری‌تیوب)",
"Export data as JSON": "گرفتن(خارج کردن) اطلاعات اینویدیوس با فرمت JSON", "Export data as JSON": "برون‌برد داده در قالب JSON",
"Delete account?": "حذف حساب کاربری؟", "Delete account?": "حذف حساب کاربری؟",
"History": "تاریخچه", "History": "تاریخچه",
"An alternative front-end to YouTube": "یک پیشانه جایگزین برای یوتیوب", "An alternative front-end to YouTube": "یک پیشانه جایگزین برای یوتیوب",
@ -41,6 +42,7 @@
"source": "منبع", "source": "منبع",
"Log in": "ورود", "Log in": "ورود",
"Log in/register": "ورود/ثبت نام", "Log in/register": "ورود/ثبت نام",
"Log in with Google": "ورود با گوگل",
"User ID": "شناسه کاربری", "User ID": "شناسه کاربری",
"Password": "گذرواژه", "Password": "گذرواژه",
"Time (h:mm:ss):": "زمان (h:mm:ss):", "Time (h:mm:ss):": "زمان (h:mm:ss):",
@ -49,6 +51,7 @@
"Sign In": "ورود", "Sign In": "ورود",
"Register": "ثبت نام", "Register": "ثبت نام",
"E-mail": "ایمیل", "E-mail": "ایمیل",
"Google verification code": "کد تایید گوگل",
"Preferences": "ترجیحات", "Preferences": "ترجیحات",
"preferences_category_player": "ترجیحات نمایش‌دهنده", "preferences_category_player": "ترجیحات نمایش‌دهنده",
"preferences_video_loop_label": "همواره ویدئو را بازپخش کن ", "preferences_video_loop_label": "همواره ویدئو را بازپخش کن ",
@ -68,7 +71,7 @@
"preferences_related_videos_label": "نمایش ویدیو های مرتبط: ", "preferences_related_videos_label": "نمایش ویدیو های مرتبط: ",
"preferences_annotations_label": "نمایش حاشیه نویسی ها به طور پیشفرض: ", "preferences_annotations_label": "نمایش حاشیه نویسی ها به طور پیشفرض: ",
"preferences_extend_desc_label": "گسترش خودکار توضیحات ویدئو: ", "preferences_extend_desc_label": "گسترش خودکار توضیحات ویدئو: ",
"preferences_vr_mode_label": "ویدئوها ۳۶۰ درجه تعاملی(نیازمند WebGL): ", "preferences_vr_mode_label": "ویدئوها ۳۶۰ درجه تعاملی: ",
"preferences_category_visual": "ترجیحات بصری", "preferences_category_visual": "ترجیحات بصری",
"preferences_player_style_label": "حالت پخش کننده: ", "preferences_player_style_label": "حالت پخش کننده: ",
"Dark mode: ": "حالت تاریک: ", "Dark mode: ": "حالت تاریک: ",
@ -77,7 +80,7 @@
"light": "روشن", "light": "روشن",
"preferences_thin_mode_label": "حالت نازک: ", "preferences_thin_mode_label": "حالت نازک: ",
"preferences_category_misc": "ترجیحات متفرقه", "preferences_category_misc": "ترجیحات متفرقه",
"preferences_automatic_instance_redirect_label": "هدایت خودکار نمونه (انتقال به redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "هدایت خودکار نمونه (به طور پیش‌فرض به redirect.invidious.io): ",
"preferences_category_subscription": "ترجیحات اشتراک", "preferences_category_subscription": "ترجیحات اشتراک",
"preferences_annotations_subscribed_label": "نمایش حاشیه نویسی ها به طور پیشفرض برای کانال های مشترک شده: ", "preferences_annotations_subscribed_label": "نمایش حاشیه نویسی ها به طور پیشفرض برای کانال های مشترک شده: ",
"Redirect homepage to feed: ": "تغییر مسیر صفحه خانه به خوراک: ", "Redirect homepage to feed: ": "تغییر مسیر صفحه خانه به خوراک: ",
@ -145,6 +148,7 @@
"Show less": "نمایش کم‌تر", "Show less": "نمایش کم‌تر",
"Watch on YouTube": "تماشا در یوتیوب", "Watch on YouTube": "تماشا در یوتیوب",
"Switch Invidious Instance": "تعویض نمونه اینویدیوس", "Switch Invidious Instance": "تعویض نمونه اینویدیوس",
"Broken? Try another Invidious Instance": "کار نمی‌کند؟ نمونه دیگری از اینویدیوس را امتحان کنید",
"Hide annotations": "مخفی کردن حاشیه نویسی ها", "Hide annotations": "مخفی کردن حاشیه نویسی ها",
"Show annotations": "نمایش حاشیه نویسی ها", "Show annotations": "نمایش حاشیه نویسی ها",
"Genre: ": "ژانر: ", "Genre: ": "ژانر: ",
@ -154,7 +158,7 @@
"Engagement: ": "نامزدی: ", "Engagement: ": "نامزدی: ",
"Whitelisted regions: ": "مناطق لیست سفید: ", "Whitelisted regions: ": "مناطق لیست سفید: ",
"Blacklisted regions: ": "مناطق لیست سیاه: ", "Blacklisted regions: ": "مناطق لیست سیاه: ",
"Shared `x`": "`x` به اشتراک گذاشته شد", "Shared `x`": "به اشتراک گذاشته شده `x`",
"Premieres in `x`": "برای اولین بار در `x`", "Premieres in `x`": "برای اولین بار در `x`",
"Premieres `x`": "برای اولین بار `x`", "Premieres `x`": "برای اولین بار `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "سلام! مثل اینکه تو جاوا اسکریپت رو خاموش کرده ای. اینجا کلیک کن تا نظرات را ببینی، این رو یادت باشه که ممکنه بارگذاری اونها کمی طول بکشه.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "سلام! مثل اینکه تو جاوا اسکریپت رو خاموش کرده ای. اینجا کلیک کن تا نظرات را ببینی، این رو یادت باشه که ممکنه بارگذاری اونها کمی طول بکشه.",
@ -168,12 +172,17 @@
"Hide replies": "مخفی کردن پاسخ ها", "Hide replies": "مخفی کردن پاسخ ها",
"Show replies": "نمایش پاسخ ها", "Show replies": "نمایش پاسخ ها",
"Incorrect password": "گذرواژه نا درست", "Incorrect password": "گذرواژه نا درست",
"Quota exceeded, try again in a few hours": "سهمیه بیشتر شده است، چند ساعت بعد دوباره تلاش کنید",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "قادر به ورود نیستید، مطمئن شوید احراز تایید-دو‌مرحله (Authenticator یا پیام‌کوتاه) خاموش باشد.",
"Invalid TFA code": "کد TFA نادرست است",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "ورود با خطا مواجه شد. این ممکن است به خاطر احراز تایید-دو‌مرحله باشد که برای حساب کاربری شما فعال نشده است.",
"Wrong answer": "پاسخ غلط", "Wrong answer": "پاسخ غلط",
"Erroneous CAPTCHA": "CAPTCHA نا درست", "Erroneous CAPTCHA": "CAPTCHA نا درست",
"CAPTCHA is a required field": "CAPTCHA یک فیلد ضروری است", "CAPTCHA is a required field": "CAPTCHA یک فیلد ضروری است",
"User ID is a required field": "شناسه کاربری یک فیلد ضروری است", "User ID is a required field": "شناسه کاربری یک فیلد ضروری است",
"Password is a required field": "گذرواژه یک فیلد ضروری است", "Password is a required field": "گذرواژه یک فیلد ضروری است",
"Wrong username or password": "نام کاربری یا گذرواژه غلط است", "Wrong username or password": "نام کاربری یا گذرواژه غلط است",
"Please sign in using 'Log in with Google'": "لطفا با استفاده از 'ورود توسط گوگل' وارد شوید",
"Password cannot be empty": "گذرواژه نمیتواند خالی باشد", "Password cannot be empty": "گذرواژه نمیتواند خالی باشد",
"Password cannot be longer than 55 characters": "گذر واژه نمیتواند از ۵۵ کاراکتر بیشتر باشد", "Password cannot be longer than 55 characters": "گذر واژه نمیتواند از ۵۵ کاراکتر بیشتر باشد",
"Please log in": "لطفا وارد شوید", "Please log in": "لطفا وارد شوید",
@ -333,41 +342,42 @@
"`x` marked it with a ❤": "`x` نشان گذاری شده با یک ❤", "`x` marked it with a ❤": "`x` نشان گذاری شده با یک ❤",
"Audio mode": "حالت صدا", "Audio mode": "حالت صدا",
"Video mode": "حالت ویدیو", "Video mode": "حالت ویدیو",
"channel_tab_videos_label": "ویدیو ها", "Videos": "ویدیو ها",
"Playlists": "سیاهه‌های پخش", "Playlists": "سیاهه‌های پخش",
"channel_tab_community_label": "اجتماع", "Community": "اجتماع",
"search_filters_sort_option_relevance": "مرتبط بودن", "relevance": "مرتبط بودن",
"search_filters_sort_option_rating": "امتیاز", "rating": "امتیاز",
"search_filters_sort_option_date": "تاریخ بارگذاری", "date": "تاریخ بارگذاری",
"search_filters_sort_option_views": "تعداد بازدید", "views": "تعداد بازدید",
"search_filters_type_label": "نوع", "content_type": "نوع",
"search_filters_duration_label": "مدت", "duration": "مدت",
"search_filters_features_label": "ویژگی‌ها", "features": "ویژگی‌ها",
"search_filters_sort_label": "به ترتیب", "sort": "به ترتیب",
"search_filters_date_option_hour": "یک ساعت گذشته", "hour": "یک ساعت گذشته",
"search_filters_date_option_today": "امروز", "today": "امروز",
"search_filters_date_option_week": "این هفته", "week": "این هفته",
"search_filters_date_option_month": "این ماه", "month": "این ماه",
"search_filters_date_option_year": "امسال", "year": "امسال",
"search_filters_type_option_video": "ویدئو", "video": "ویدئو",
"search_filters_type_option_channel": "کانال", "channel": "کانال",
"search_filters_type_option_playlist": "سیاههٔ پخش", "playlist": "سیاههٔ پخش",
"search_filters_type_option_movie": "فیلم", "movie": "فیلم",
"search_filters_type_option_show": "نمایش", "show": "نمایش",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "زیرنویس", "subtitles": "زیرنویس",
"search_filters_features_option_c_commons": "کریتیو کامونز", "creative_commons": "کریتیو کامونز",
"search_filters_features_option_three_d": "سه‌بعدی", "3d": "سه‌بعدی",
"search_filters_features_option_live": "زنده", "live": "زنده",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "مکان", "location": "مکان",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "پالایه",
"Current version: ": "نسخه فعلی: ", "Current version: ": "نسخه فعلی: ",
"next_steps_error_message": "اکنون بایستی یکی از این موارد را امتحان کنید: ", "next_steps_error_message": "اکنون بایستی یکی از این موارد را امتحان کنید: ",
"next_steps_error_message_refresh": "تازه‌سازی", "next_steps_error_message_refresh": "تازه‌سازی",
"next_steps_error_message_go_to_youtube": "رفتن به یوتیوب", "next_steps_error_message_go_to_youtube": "رفتن به یوتیوب",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_dash": "DASH (کیفیت تطبیفی)", "preferences_quality_option_dash": "DASH (کیفیت قابل تطبیق)",
"preferences_quality_option_medium": "میانه", "preferences_quality_option_medium": "میانه",
"preferences_quality_option_small": "پایین", "preferences_quality_option_small": "پایین",
"preferences_quality_dash_option_auto": "خودکار", "preferences_quality_dash_option_auto": "خودکار",
@ -383,7 +393,7 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "اینویدیوس", "invidious": "اینویدیوس",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"footer_donate_page": "کمک مالی", "footer_donate_page": "کمک مالی",
"footer_source_code": "کد منبع", "footer_source_code": "کد منبع",
"footer_modfied_source_code": "کد منبع ویرایش شده", "footer_modfied_source_code": "کد منبع ویرایش شده",
@ -395,55 +405,12 @@
"download_subtitles": "زیرنویس‌ها - `x` (.vtt)", "download_subtitles": "زیرنویس‌ها - `x` (.vtt)",
"Video unavailable": "ویدئو دردسترس نیست", "Video unavailable": "ویدئو دردسترس نیست",
"preferences_save_player_pos_label": "ذخیره زمان کنونی ویدئو: ", "preferences_save_player_pos_label": "ذخیره زمان کنونی ویدئو: ",
"search_filters_features_option_purchased": "خریداری شده", "purchased": "خریداری شده",
"preferences_quality_dash_label": "کیفیت ترجیحی ویدئو DASH: ", "preferences_quality_dash_label": "کیفیت ترجیحی ویدئو DASH: ",
"preferences_region_label": "کشور محتوا: ", "preferences_region_label": "کشور محتوا: ",
"footer_documentation": "مستندات", "footer_documentation": "مستندات",
"footer_original_source_code": "کد منبع اصلی", "footer_original_source_code": "کد منبع اصلی",
"search_filters_duration_option_long": "بلند (> ۲۰ دقیقه)", "long": "بلند (> 20 دقیقه)",
"adminprefs_modified_source_code_url_label": "URL مخزن کد منبع ویریش شده", "adminprefs_modified_source_code_url_label": "URL مخزن کد منبع ویریش شده",
"search_filters_duration_option_short": "کوتاه (< ۴ دقیقه)", "short": "کوتاه (< 4 دقیقه)"
"search_filters_title": "پالایه",
"Chinese (Hong Kong)": "چینی (هنگ‌کنگ)",
"Dutch (auto-generated)": "هلندی (تولید خودکار)",
"preferences_watch_history_label": "فعال‌سازی تاریخچه‌ی پخش ",
"Indonesian (auto-generated)": "اندونزیایی (تولید خودکار)",
"English (United States)": "انگلیسی (ایالات متحده)",
"Chinese": "چینی",
"Chinese (Taiwan)": "چینی (تایوان)",
"French (auto-generated)": "فرانسوی (تولید خودکار)",
"English (United Kingdom)": "انگلیسی (ایالات بریتانیا)",
"search_message_no_results": "نتیجه‌ای یافت نشد.",
"search_message_change_filters_or_query": "سعی کنید جست‌و‌جوی خود را وسیع‌تر کنید و/یا فیلترها را تغییر دهید.",
"Chinese (China)": "چینی (چین)",
"German (auto-generated)": "آلمانی (تولید خودکار)",
"Japanese (auto-generated)": "ژاپنی (تولید خودکار)",
"Korean (auto-generated)": "کره‌ای (تولید خودکار)",
"Portuguese (Brazil)": "پرتغالی (برزیل)",
"search_filters_apply_button": "اعمال فیلترهای انتخاب شده",
"Italian (auto-generated)": "ایتالیایی (تولید خودکار)",
"Vietnamese (auto-generated)": "ویتنامی (تولید خودکار)",
"search_filters_type_option_all": "هر نوعی",
"search_filters_duration_option_none": "هر مدت زمانی",
"search_filters_date_label": "تاریخ بارگذاری",
"search_filters_date_option_none": "هر تاریخی",
"user_created_playlists": "`x` فهرست پخش ایجاد شد",
"Interlingue": "سرخپوستی",
"Russian (auto-generated)": "روسی (تولید خودکار)",
"Spanish (auto-generated)": "اسپانیایی (تولید خودکار)",
"search_filters_duration_option_medium": "متوسط (۴ تا ۲۰ دقیقه)",
"Portuguese (auto-generated)": "پرتغالی (تولید خودکار)",
"Cantonese (Hong Kong)": "کانتونی (هنگ کنگ)",
"Spanish (Spain)": "اسپانیایی (اسپانیا)",
"Turkish (auto-generated)": "ترکی (تولید خودکار)",
"search_filters_features_option_vr180": "VR180",
"Spanish (Mexico)": "اسپانیایی (مکزیک)",
"Popular enabled: ": "محبوب ها فعال شد: ",
"Music in this video": "آهنگ در این ویدیو",
"Artist: ": "هنرمند: ",
"Album: ": "آلبوم: ",
"Song: ": "آهنگ: ",
"Channel Sponsor": "اسپانسر کانال",
"Standard YouTube license": "پروانه استاندارد YouTube",
"search_message_use_another_instance": " شما همچنین می‌توانید <a href=\"`x`\">در نمونه دیگر هم جستجو کنید</a>."
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Tyhjennä katseluhistoria?", "Clear watch history?": "Tyhjennä katseluhistoria?",
"New password": "Uusi salasana", "New password": "Uusi salasana",
"New passwords must match": "Uusien salasanojen täytyy täsmätä", "New passwords must match": "Uusien salasanojen täytyy täsmätä",
"Cannot change password for Google accounts": "Google-tilien salasanaa ei voi vaihtaa",
"Authorize token?": "Valuutetaanko tunnus?", "Authorize token?": "Valuutetaanko tunnus?",
"Authorize token for `x`?": "Valtuutetaanko tunnus `x`:lle?", "Authorize token for `x`?": "Valtuutetaanko tunnus `x`:lle?",
"Yes": "Kyllä", "Yes": "Kyllä",
"No": "Ei", "No": "Ei",
"Import and Export Data": "Tuo ja vie tietoja", "Import and Export Data": "Tuo ja vie tietoja",
"Import": "Tuo", "Import": "Tuo",
"Import Invidious data": "Tuo Invidiousin JSON-tietoja", "Import Invidious data": "Tuo Invidious-tietoja",
"Import YouTube subscriptions": "Tuo YouTube/OPML-tilaukset", "Import YouTube subscriptions": "Tuo YouTube-tilaukset",
"Import FreeTube subscriptions (.db)": "Tuo FreeTube-tilaukset (.db)", "Import FreeTube subscriptions (.db)": "Tuo FreeTube-tilaukset (.db)",
"Import NewPipe subscriptions (.json)": "Tuo NewPipe-tilaukset (.json)", "Import NewPipe subscriptions (.json)": "Tuo NewPipe-tilaukset (.json)",
"Import NewPipe data (.zip)": "Tuo NewPipe-tietoja (.zip)", "Import NewPipe data (.zip)": "Tuo NewPipe-tietoja (.zip)",
"Export": "Vie", "Export": "Vie",
"Export subscriptions as OPML": "Vie tilaukset OPML-muodossa", "Export subscriptions as OPML": "Vie tilaukset OPML-muodossa",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Vie tilaukset OPML-muodossa (NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Vie tilaukset OPML-muodossa (NewPipe & FreeTube)",
"Export data as JSON": "Vie Invidious-data JSON-muodossa", "Export data as JSON": "Vie data JSON-muodossa",
"Delete account?": "Poista tili?", "Delete account?": "Poista tili?",
"History": "Historia", "History": "Historia",
"An alternative front-end to YouTube": "Vaihtoehtoinen front-end YouTubelle", "An alternative front-end to YouTube": "Vaihtoehtoinen front-end YouTubelle",
@ -36,6 +37,7 @@
"source": "lähde", "source": "lähde",
"Log in": "Kirjaudu sisään", "Log in": "Kirjaudu sisään",
"Log in/register": "Kirjaudu sisään/rekisteröidy", "Log in/register": "Kirjaudu sisään/rekisteröidy",
"Log in with Google": "Kirjaudu sisään Googlella",
"User ID": "Käyttäjätunnus", "User ID": "Käyttäjätunnus",
"Password": "Salasana", "Password": "Salasana",
"Time (h:mm:ss):": "Aika (h:mm:ss):", "Time (h:mm:ss):": "Aika (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Kirjaudu sisään", "Sign In": "Kirjaudu sisään",
"Register": "Rekisteröidy", "Register": "Rekisteröidy",
"E-mail": "Sähköposti", "E-mail": "Sähköposti",
"Google verification code": "Google-vahvistuskoodi",
"Preferences": "Asetukset", "Preferences": "Asetukset",
"preferences_category_player": "Soittimen asetukset", "preferences_category_player": "Soittimen asetukset",
"preferences_video_loop_label": "Toista jatkuvasti aina: ", "preferences_video_loop_label": "Toista jatkuvasti aina: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Näytä aiheeseen liittyviä videoita: ", "preferences_related_videos_label": "Näytä aiheeseen liittyviä videoita: ",
"preferences_annotations_label": "Näytä huomautukset oletuksena: ", "preferences_annotations_label": "Näytä huomautukset oletuksena: ",
"preferences_extend_desc_label": "Laajenna automaattisesti videon kuvausta: ", "preferences_extend_desc_label": "Laajenna automaattisesti videon kuvausta: ",
"preferences_vr_mode_label": "Interaktiiviset 360-asteiset videot (vaatii WebGL:n): ", "preferences_vr_mode_label": "Interaktiiviset 360-asteiset videot: ",
"preferences_category_visual": "Visuaaliset asetukset", "preferences_category_visual": "Visuaaliset asetukset",
"preferences_player_style_label": "Soittimen tyyli: ", "preferences_player_style_label": "Soittimen tyyli: ",
"Dark mode: ": "Tumma tila: ", "Dark mode: ": "Tumma tila: ",
@ -137,6 +140,7 @@
"Show less": "Näytä vähemmän", "Show less": "Näytä vähemmän",
"Watch on YouTube": "Katso YouTubessa", "Watch on YouTube": "Katso YouTubessa",
"Switch Invidious Instance": "Vaihda Invidious-instanssia", "Switch Invidious Instance": "Vaihda Invidious-instanssia",
"Broken? Try another Invidious Instance": "Rikki? Kokeile toista Invidious-instanssia",
"Hide annotations": "Piilota merkkaukset", "Hide annotations": "Piilota merkkaukset",
"Show annotations": "Näytä merkkaukset", "Show annotations": "Näytä merkkaukset",
"Genre: ": "Genre: ", "Genre: ": "Genre: ",
@ -160,12 +164,17 @@
"Hide replies": "Piilota vastaukset", "Hide replies": "Piilota vastaukset",
"Show replies": "Näytä vastaukset", "Show replies": "Näytä vastaukset",
"Incorrect password": "Väärä salasana", "Incorrect password": "Väärä salasana",
"Quota exceeded, try again in a few hours": "Kiintiö ylitetty, yritä parin tunnin kuluttua uudestaan",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Sisäänkirjautuminen epäonnistui. Varmista, että kaksivaiheinen tunnistautuminen (Authenticator tai tekstiviesti) on käytössä.",
"Invalid TFA code": "Virheellinen turvakoodi",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Sisäänkirjautuminen epäonnistui. Tämä voi johtua siitä, että kaksivaiheinen tunnistautuminen on pois käytöstä tunnuksellasi.",
"Wrong answer": "Väärä vastaus", "Wrong answer": "Väärä vastaus",
"Erroneous CAPTCHA": "Virheellinen CAPTCHA", "Erroneous CAPTCHA": "Virheellinen CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA-kenttä vaaditaan", "CAPTCHA is a required field": "CAPTCHA-kenttä vaaditaan",
"User ID is a required field": "Käyttäjätunnus vaaditaan", "User ID is a required field": "Käyttäjätunnus vaaditaan",
"Password is a required field": "Salasana vaaditaan", "Password is a required field": "Salasana vaaditaan",
"Wrong username or password": "Väärä käyttäjänimi tai salasana", "Wrong username or password": "Väärä käyttäjänimi tai salasana",
"Please sign in using 'Log in with Google'": "Ole hyvä ja kirjaudu sisään Google-tunnuksella",
"Password cannot be empty": "Salasana ei voi olla tyhjä", "Password cannot be empty": "Salasana ei voi olla tyhjä",
"Password cannot be longer than 55 characters": "Salasana ei voi olla yli 55 merkkiä pitkä", "Password cannot be longer than 55 characters": "Salasana ei voi olla yli 55 merkkiä pitkä",
"Please log in": "Kirjaudu sisään, ole hyvä", "Please log in": "Kirjaudu sisään, ole hyvä",
@ -316,35 +325,36 @@
"`x` marked it with a ❤": "`x` merkkasi ❤:llä", "`x` marked it with a ❤": "`x` merkkasi ❤:llä",
"Audio mode": "Äänitila", "Audio mode": "Äänitila",
"Video mode": "Videotila", "Video mode": "Videotila",
"channel_tab_videos_label": "Videot", "Videos": "Videot",
"Playlists": "Soittolistat", "Playlists": "Soittolistat",
"channel_tab_community_label": "Yhteisö", "Community": "Yhteisö",
"search_filters_sort_option_relevance": "Osuvuus", "relevance": "Osuvuus",
"search_filters_sort_option_rating": "Arvostelu", "rating": "Arvostelu",
"search_filters_sort_option_date": "Latauspäivämäärä", "date": "Latauspäivämäärä",
"search_filters_sort_option_views": "Katselukerrat", "views": "Katselukerrat",
"search_filters_type_label": "Tyyppi", "content_type": "Tyyppi",
"search_filters_duration_label": "Kesto", "duration": "Kesto",
"search_filters_features_label": "Ominaisuudet", "features": "Ominaisuudet",
"search_filters_sort_label": "Luokittele", "sort": "Luokittele",
"search_filters_date_option_hour": "Viimeisin tunti", "hour": "Viimeisin tunti",
"search_filters_date_option_today": "Tänään", "today": "Tänään",
"search_filters_date_option_week": "Tämä viikko", "week": "Tämä viikko",
"search_filters_date_option_month": "Tämä kuukausi", "month": "Tämä kuukausi",
"search_filters_date_option_year": "Tämä vuosi", "year": "Tämä vuosi",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanava", "channel": "Kanava",
"search_filters_type_option_playlist": "Soittolista", "playlist": "Soittolista",
"search_filters_type_option_movie": "Elokuva", "movie": "Elokuva",
"search_filters_type_option_show": "Ohjelma", "show": "Ohjelma",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Tekstitys/CC", "subtitles": "Tekstitys/CC",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Suora lähetys", "live": "Suora lähetys",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Sijainti", "location": "Sijainti",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Suodatin",
"Current version: ": "Tämänhetkinen versio: ", "Current version: ": "Tämänhetkinen versio: ",
"next_steps_error_message": "Sinun tulisi kokeilla seuraavia: ", "next_steps_error_message": "Sinun tulisi kokeilla seuraavia: ",
"next_steps_error_message_refresh": "Päivitä", "next_steps_error_message_refresh": "Päivitä",
@ -380,7 +390,7 @@
"crash_page_before_reporting": "Varmista ennen bugin ilmoittamista, että sinä olet:", "crash_page_before_reporting": "Varmista ennen bugin ilmoittamista, että sinä olet:",
"crash_page_refresh": "yrittänyt <a href=\"`x`\">päivittää sivun</a>", "crash_page_refresh": "yrittänyt <a href=\"`x`\">päivittää sivun</a>",
"crash_page_read_the_faq": "lukenut <a href=\"`x`\">Usein kysytyt kysymykset (FAQ)</a>", "crash_page_read_the_faq": "lukenut <a href=\"`x`\">Usein kysytyt kysymykset (FAQ)</a>",
"crash_page_search_issue": "etsinyt <a href=\"`x`\">olemassa olevia issueita GitHubissa</a>", "crash_page_search_issue": "etsinyt <a href=\"`x`\">olemassa olevia issueita Githubissa</a>",
"generic_views_count": "{{count}} katselu", "generic_views_count": "{{count}} katselu",
"generic_views_count_plural": "{{count}} katselua", "generic_views_count_plural": "{{count}} katselua",
"preferences_quality_dash_option_720p": "720p", "preferences_quality_dash_option_720p": "720p",
@ -413,8 +423,8 @@
"preferences_quality_dash_label": "Haluttava DASH-videolaatu: ", "preferences_quality_dash_label": "Haluttava DASH-videolaatu: ",
"generic_count_years": "{{count}} vuosi", "generic_count_years": "{{count}} vuosi",
"generic_count_years_plural": "{{count}} vuotta", "generic_count_years_plural": "{{count}} vuotta",
"search_filters_features_option_purchased": "Ostettu", "purchased": "Ostettu",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"videoinfo_watch_on_youTube": "Katso YouTubessa", "videoinfo_watch_on_youTube": "Katso YouTubessa",
"none": "ei mikään", "none": "ei mikään",
"videoinfo_started_streaming_x_ago": "Striimaaminen aloitettu `x` sitten", "videoinfo_started_streaming_x_ago": "Striimaaminen aloitettu `x` sitten",
@ -423,46 +433,9 @@
"footer_source_code": "Lähdekoodi", "footer_source_code": "Lähdekoodi",
"adminprefs_modified_source_code_url_label": "URL muokattuun lähdekoodirepositoryyn", "adminprefs_modified_source_code_url_label": "URL muokattuun lähdekoodirepositoryyn",
"Released under the AGPLv3 on Github.": "Julkaistu AGPLv3-lisenssin alla GitHubissa.", "Released under the AGPLv3 on Github.": "Julkaistu AGPLv3-lisenssin alla GitHubissa.",
"search_filters_duration_option_short": "Lyhyt (< 4 minuuttia)", "short": "Lyhyt (< 4 minuuttia)",
"search_filters_duration_option_long": "Pitkä (> 20 minuuttia)", "long": "Pitkä (> 20 minuuttia)",
"footer_documentation": "Dokumentaatio", "footer_documentation": "Dokumentaatio",
"footer_original_source_code": "Alkuperäinen lähdekoodi", "footer_original_source_code": "Alkuperäinen lähdekoodi",
"footer_modfied_source_code": "Muokattu lähdekoodi", "footer_modfied_source_code": "Muokattu lähdekoodi"
"Japanese (auto-generated)": "Japani (automaattisesti luotu)",
"German (auto-generated)": "Saksa (automaattisesti luotu)",
"Portuguese (auto-generated)": "portugali (automaattisesti luotu)",
"Russian (auto-generated)": "Venäjä (automaattisesti luotu)",
"preferences_watch_history_label": "Ota katseluhistoria käyttöön: ",
"English (United Kingdom)": "Englanti (Iso-Britannia)",
"English (United States)": "Englanti (Yhdysvallat)",
"Cantonese (Hong Kong)": "Kantoninkiina (Hong Kong)",
"Chinese": "Kiina",
"Chinese (China)": "Kiina (Kiina)",
"Chinese (Hong Kong)": "Kiina (Hong Kong)",
"Chinese (Taiwan)": "Kiina (Taiwan)",
"Dutch (auto-generated)": "Hollanti (automaattisesti luotu)",
"French (auto-generated)": "Ranska (automaattisesti luotu)",
"Indonesian (auto-generated)": "Indonesia (automaattisesti luotu)",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italia (automaattisesti luotu)",
"Korean (auto-generated)": "Korea (automaattisesti luotu)",
"Portuguese (Brazil)": "portugali (Brasilia)",
"Spanish (auto-generated)": "Espanja (automaattisesti luotu)",
"Spanish (Mexico)": "Espanja (Meksiko)",
"Spanish (Spain)": "Espanja (Espanja)",
"Turkish (auto-generated)": "Turkki (automaattisesti luotu)",
"Vietnamese (auto-generated)": "Vietnam (automaattisesti luotu)",
"search_filters_title": "Suodatin",
"search_message_no_results": "Ei tuloksia löydetty.",
"search_message_change_filters_or_query": "Yritä hakukyselysi laajentamista ja/tai suodattimien muuttamista.",
"search_filters_duration_option_none": "Mikä tahansa kesto",
"search_filters_features_option_vr180": "VR180",
"search_filters_apply_button": "Ota valitut suodattimet käyttöön",
"search_filters_date_label": "Latausaika",
"search_filters_duration_option_medium": "Keskipituinen (4 - 20 minuuttia)",
"search_message_use_another_instance": " Voit myös <a href=\"`x`\">hakea toisella instanssilla</a>.",
"search_filters_date_option_none": "Milloin tahansa",
"search_filters_type_option_all": "Mikä tahansa tyyppi",
"Popular enabled: ": "Suosittu käytössä: ",
"error_video_not_in_playlist": "Pyydettyä videota ei löydy tästä soittolistasta. <a href=\"`x`\">Klikkaa tähän päästäksesi soittolistan etusivulle.</a>"
} }

@ -24,6 +24,7 @@
"Clear watch history?": "Êtes-vous sûr de vouloir supprimer l'historique des vidéos regardées ?", "Clear watch history?": "Êtes-vous sûr de vouloir supprimer l'historique des vidéos regardées ?",
"New password": "Nouveau mot de passe", "New password": "Nouveau mot de passe",
"New passwords must match": "Les nouveaux mots de passe doivent correspondre", "New passwords must match": "Les nouveaux mots de passe doivent correspondre",
"Cannot change password for Google accounts": "Le mot de passe d'un compte Google ne peut pas être changé depuis Invidious",
"Authorize token?": "Autoriser le token ?", "Authorize token?": "Autoriser le token ?",
"Authorize token for `x`?": "Autoriser le token pour `x` ?", "Authorize token for `x`?": "Autoriser le token pour `x` ?",
"Yes": "Oui", "Yes": "Oui",
@ -46,6 +47,7 @@
"source": "source", "source": "source",
"Log in": "Se connecter", "Log in": "Se connecter",
"Log in/register": "Se connecter/S'inscrire", "Log in/register": "Se connecter/S'inscrire",
"Log in with Google": "Se connecter avec Google",
"User ID": "Identifiant utilisateur", "User ID": "Identifiant utilisateur",
"Password": "Mot de passe", "Password": "Mot de passe",
"Time (h:mm:ss):": "Heure (h:mm:ss) :", "Time (h:mm:ss):": "Heure (h:mm:ss) :",
@ -54,6 +56,7 @@
"Sign In": "Se connecter", "Sign In": "Se connecter",
"Register": "S'inscrire", "Register": "S'inscrire",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Code de vérification Google",
"Preferences": "Préférences", "Preferences": "Préférences",
"preferences_category_player": "Préférences du lecteur", "preferences_category_player": "Préférences du lecteur",
"preferences_video_loop_label": "Lire en boucle : ", "preferences_video_loop_label": "Lire en boucle : ",
@ -113,7 +116,6 @@
"preferences_default_home_label": "Page d'accueil par défaut : ", "preferences_default_home_label": "Page d'accueil par défaut : ",
"preferences_feed_menu_label": "Préferences des abonnements : ", "preferences_feed_menu_label": "Préferences des abonnements : ",
"preferences_show_nick_label": "Afficher le nom d'utilisateur en haut à droite : ", "preferences_show_nick_label": "Afficher le nom d'utilisateur en haut à droite : ",
"Popular enabled: ": "Page \"populaire\" activée: ",
"Top enabled: ": "Top activé : ", "Top enabled: ": "Top activé : ",
"CAPTCHA enabled: ": "CAPTCHA activé : ", "CAPTCHA enabled: ": "CAPTCHA activé : ",
"Login enabled: ": "Autoriser l'ouverture de sessions utilisateur : ", "Login enabled: ": "Autoriser l'ouverture de sessions utilisateur : ",
@ -133,7 +135,7 @@
"subscriptions_unseen_notifs_count_plural": "{{count}} notifications non vues", "subscriptions_unseen_notifs_count_plural": "{{count}} notifications non vues",
"search": "rechercher", "search": "rechercher",
"Log out": "Se déconnecter", "Log out": "Se déconnecter",
"Released under the AGPLv3 on Github.": "Publié sous licence AGPLv3 sur GitHub.", "Released under the AGPLv3 on Github.": "Publié sous licence AGPLv3 sur Github.",
"Source available here.": "Code source disponible ici.", "Source available here.": "Code source disponible ici.",
"View JavaScript license information.": "Informations des licences JavaScript.", "View JavaScript license information.": "Informations des licences JavaScript.",
"View privacy policy.": "Politique de confidentialité.", "View privacy policy.": "Politique de confidentialité.",
@ -153,6 +155,7 @@
"Show less": "Afficher moins", "Show less": "Afficher moins",
"Watch on YouTube": "Voir la vidéo sur Youtube", "Watch on YouTube": "Voir la vidéo sur Youtube",
"Switch Invidious Instance": "Changer d'instance", "Switch Invidious Instance": "Changer d'instance",
"Broken? Try another Invidious Instance": "Instance Invidious défectueuse ? Essayez-en une autre",
"Hide annotations": "Masquer les annotations", "Hide annotations": "Masquer les annotations",
"Show annotations": "Afficher les annotations", "Show annotations": "Afficher les annotations",
"Genre: ": "Genre : ", "Genre: ": "Genre : ",
@ -176,12 +179,17 @@
"Hide replies": "Masquer les réponses", "Hide replies": "Masquer les réponses",
"Show replies": "Afficher les réponses", "Show replies": "Afficher les réponses",
"Incorrect password": "Mot de passe incorrect", "Incorrect password": "Mot de passe incorrect",
"Quota exceeded, try again in a few hours": "Nombre de tentatives de connexion dépassé, réessayez dans quelques heures",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Impossible de se connecter, si après plusieurs tentative vous ne parvenez toujours pas à vous connecter, assurez-vous que l'authentification à deux facteurs (Authenticator ou SMS) est activée.",
"Invalid TFA code": "Code d'authentification à deux facteurs invalide",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "La connexion a échoué. Cela peut être dû au fait que l'authentification à deux facteurs n'est pas activée sur votre compte.",
"Wrong answer": "Réponse invalide", "Wrong answer": "Réponse invalide",
"Erroneous CAPTCHA": "CAPTCHA invalide", "Erroneous CAPTCHA": "CAPTCHA invalide",
"CAPTCHA is a required field": "Veuillez entrer un CAPTCHA", "CAPTCHA is a required field": "Veuillez entrer un CAPTCHA",
"User ID is a required field": "Veuillez entrer un Identifiant Utilisateur", "User ID is a required field": "Veuillez entrer un Identifiant Utilisateur",
"Password is a required field": "Veuillez entrer un Mot de passe", "Password is a required field": "Veuillez entrer un Mot de passe",
"Wrong username or password": "Nom d'utilisateur ou mot de passe invalide", "Wrong username or password": "Nom d'utilisateur ou mot de passe invalide",
"Please sign in using 'Log in with Google'": "Veuillez vous connecter en utilisant \"Se connecter avec Google\"",
"Password cannot be empty": "Le mot de passe ne peut pas être vide", "Password cannot be empty": "Le mot de passe ne peut pas être vide",
"Password cannot be longer than 55 characters": "Le mot de passe ne doit pas comporter plus de 55 caractères", "Password cannot be longer than 55 characters": "Le mot de passe ne doit pas comporter plus de 55 caractères",
"Please log in": "Veuillez vous connecter", "Please log in": "Veuillez vous connecter",
@ -350,35 +358,36 @@
"`x` marked it with a ❤": "`x` l'a marqué d'un ❤", "`x` marked it with a ❤": "`x` l'a marqué d'un ❤",
"Audio mode": "Mode audio", "Audio mode": "Mode audio",
"Video mode": "Mode vidéo", "Video mode": "Mode vidéo",
"channel_tab_videos_label": "Vidéos", "Videos": "Vidéos",
"Playlists": "Listes de lecture", "Playlists": "Listes de lecture",
"channel_tab_community_label": "Communauté", "Community": "Communauté",
"search_filters_sort_option_relevance": "Pertinence", "relevance": "pertinence",
"search_filters_sort_option_rating": "Notation", "rating": "évaluation",
"search_filters_sort_option_date": "Date d'ajout", "date": "date",
"search_filters_sort_option_views": "Nombre de vues", "views": "nombre de vues",
"search_filters_type_label": "Type de contenu", "content_type": "type",
"search_filters_duration_label": "Durée", "duration": "durée",
"search_filters_features_label": "Fonctionnalités", "features": "fonctionnalités",
"search_filters_sort_label": "Trier par", "sort": "Trier par",
"search_filters_date_option_hour": "Dernière heure", "hour": "dernière heure",
"search_filters_date_option_today": "Aujourd'hui", "today": "aujourd'hui",
"search_filters_date_option_week": "Cette semaine", "week": "semaine",
"search_filters_date_option_month": "Ce mois-ci", "month": "mois",
"search_filters_date_option_year": "Cette année", "year": "année",
"search_filters_type_option_video": "Vidéo", "video": "vidéo",
"search_filters_type_option_channel": "Chaîne", "channel": "chaîne",
"search_filters_type_option_playlist": "Liste de lecture", "playlist": "liste de lecture",
"search_filters_type_option_movie": "Film", "movie": "film",
"search_filters_type_option_show": "Émission", "show": "émission",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Sous-titres (CC)", "subtitles": "sous-titres / CC",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "En direct", "live": "en direct",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "emplacement", "location": "emplacement",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "filtrer",
"Current version: ": "Version actuelle : ", "Current version: ": "Version actuelle : ",
"next_steps_error_message": "Vous pouvez essayer de : ", "next_steps_error_message": "Vous pouvez essayer de : ",
"next_steps_error_message_refresh": "Rafraîchir la page", "next_steps_error_message_refresh": "Rafraîchir la page",
@ -388,8 +397,8 @@
"preferences_region_label": "Pays du contenu : ", "preferences_region_label": "Pays du contenu : ",
"footer_donate_page": "Faire un don", "footer_donate_page": "Faire un don",
"footer_modfied_source_code": "Code source modifié", "footer_modfied_source_code": "Code source modifié",
"search_filters_duration_option_short": "Courte (< 4 minutes)", "short": "Courte (< 4 minutes)",
"search_filters_duration_option_long": "Longue (> 20 minutes)", "long": "Longue (> 20 minutes)",
"adminprefs_modified_source_code_url_label": "URL du dépôt du code source modifié", "adminprefs_modified_source_code_url_label": "URL du dépôt du code source modifié",
"footer_documentation": "Documentation", "footer_documentation": "Documentation",
"footer_original_source_code": "Code source original", "footer_original_source_code": "Code source original",
@ -406,12 +415,12 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "aucun", "none": "aucun",
"videoinfo_started_streaming_x_ago": "En stream depuis `x`", "videoinfo_started_streaming_x_ago": "En stream depuis `x`",
"videoinfo_watch_on_youTube": "Regarder sur YouTube", "videoinfo_watch_on_youTube": "Regarder sur YouTube",
"videoinfo_youTube_embed_link": "Intégrer", "videoinfo_youTube_embed_link": "Intégrer",
"search_filters_features_option_purchased": "Acheté", "purchased": "Acheter",
"videoinfo_invidious_embed_link": "Lien intégré", "videoinfo_invidious_embed_link": "Lien intégré",
"download_subtitles": "Sous-titres - `x` (.vtt)", "download_subtitles": "Sous-titres - `x` (.vtt)",
"user_saved_playlists": "`x` listes de lecture sauvegardées", "user_saved_playlists": "`x` listes de lecture sauvegardées",
@ -426,7 +435,7 @@
"crash_page_refresh": "tenté de <a href=\"`x`\">rafraîchir la page</a>", "crash_page_refresh": "tenté de <a href=\"`x`\">rafraîchir la page</a>",
"crash_page_switch_instance": "essayé d'<a href=\"`x`\">utiliser une autre instance</a>", "crash_page_switch_instance": "essayé d'<a href=\"`x`\">utiliser une autre instance</a>",
"crash_page_read_the_faq": "lu la <a href=\"`x`\">Foire Aux Questions (FAQ)</a>", "crash_page_read_the_faq": "lu la <a href=\"`x`\">Foire Aux Questions (FAQ)</a>",
"crash_page_search_issue": "<a href=\"`x`\">cherché ce bug sur GitHub</a>", "crash_page_search_issue": "<a href=\"`x`\">cherché ce bug sur Github</a>",
"crash_page_before_reporting": "Avant de signaler un bug, veuillez vous assurez que vous avez :", "crash_page_before_reporting": "Avant de signaler un bug, veuillez vous assurez que vous avez :",
"crash_page_report_issue": "Si aucune des solutions proposées ci-dessus ne vous a aidé, veuillez <a href=\"`x`\">ouvrir une \"issue\" sur GitHub</a> (de préférence en anglais) et d'y inclure le message suivant (ne PAS traduire le texte) :", "crash_page_report_issue": "Si aucune des solutions proposées ci-dessus ne vous a aidé, veuillez <a href=\"`x`\">ouvrir une \"issue\" sur GitHub</a> (de préférence en anglais) et d'y inclure le message suivant (ne PAS traduire le texte) :",
"English (United States)": "Anglais (Etats-Unis)", "English (United States)": "Anglais (Etats-Unis)",
@ -452,29 +461,5 @@
"Vietnamese (auto-generated)": "Vietnamien (auto-généré)", "Vietnamese (auto-generated)": "Vietnamien (auto-généré)",
"Russian (auto-generated)": "Russe (auto-généré)", "Russian (auto-generated)": "Russe (auto-généré)",
"Spanish (Spain)": "Espagnol (Espagne)", "Spanish (Spain)": "Espagnol (Espagne)",
"preferences_watch_history_label": "Activer l'historique de visionnage : ", "preferences_watch_history_label": "Activer l'historique de visionnage : "
"search_filters_title": "Filtres",
"search_message_change_filters_or_query": "Essayez d'élargir votre recherche et/ou de changer les filtres.",
"search_filters_date_option_none": "Toutes les dates",
"search_filters_duration_option_medium": "Moyenne (de 4 à 20 minutes)",
"search_filters_apply_button": "Appliquer les filtres",
"search_message_no_results": "Aucun résultat.",
"search_message_use_another_instance": " Vous pouvez également <a href=\"`x`\">effectuer votre recherche sur une autre instance</a>.",
"search_filters_type_option_all": "Tous les types",
"search_filters_date_label": "Date d'ajout",
"search_filters_features_option_vr180": "VR180",
"search_filters_duration_option_none": "Toutes les durées",
"error_video_not_in_playlist": "La vidéo demandée n'existe pas dans cette liste de lecture. <a href=\"`x`\">Cliquez ici pour retourner à la liste de lecture.</a>",
"channel_tab_shorts_label": "Vidéos courtes",
"channel_tab_streams_label": "Vidéos en direct",
"channel_tab_playlists_label": "Listes de lecture",
"channel_tab_channels_label": "Chaînes",
"Song: ": "Chanson : ",
"Artist: ": "Artiste : ",
"Album: ": "Album : ",
"Standard YouTube license": "Licence YouTube Standard",
"Music in this video": "Musique dans cette vidéo",
"Channel Sponsor": "Soutien de la chaîne",
"Download is disabled": "Le téléchargement est désactivé",
"Import YouTube playlist (.csv)": "Importer des listes de lecture de Youtube (.csv)"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "לנקות את היסטוריית הצפייה?", "Clear watch history?": "לנקות את היסטוריית הצפייה?",
"New password": "סיסמה חדשה", "New password": "סיסמה חדשה",
"New passwords must match": "על הסיסמאות החדשות להתאים", "New passwords must match": "על הסיסמאות החדשות להתאים",
"Cannot change password for Google accounts": "לא ניתן לשנות את הסיסמה לחשבונות Google",
"Authorize token?": "לאשר את האסימון?", "Authorize token?": "לאשר את האסימון?",
"Authorize token for `x`?": "האם לאשר את האסימון עבור `x`?", "Authorize token for `x`?": "האם לאשר את האסימון עבור `x`?",
"Yes": "כן", "Yes": "כן",
@ -36,6 +37,7 @@
"source": "source", "source": "source",
"Log in": "כניסה", "Log in": "כניסה",
"Log in/register": "כניסה/הרשמה", "Log in/register": "כניסה/הרשמה",
"Log in with Google": "כניסה עם Google",
"User ID": "שם משתמש", "User ID": "שם משתמש",
"Password": "סיסמה", "Password": "סיסמה",
"Time (h:mm:ss):": "זמן (h:mm:ss):", "Time (h:mm:ss):": "זמן (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "התחברות", "Sign In": "התחברות",
"Register": "הרשמה", "Register": "הרשמה",
"E-mail": "דוא״ל", "E-mail": "דוא״ל",
"Google verification code": "קוד האימות של Google",
"Preferences": "העדפות", "Preferences": "העדפות",
"preferences_category_player": "העדפות הנגן", "preferences_category_player": "העדפות הנגן",
"preferences_autoplay_label": "ניגון אוטומטי: ", "preferences_autoplay_label": "ניגון אוטומטי: ",
@ -134,6 +137,7 @@
"User ID is a required field": "חובה למלא את שדה שם המשתמש", "User ID is a required field": "חובה למלא את שדה שם המשתמש",
"Password is a required field": "חובה למלא את שדה הסיסמה", "Password is a required field": "חובה למלא את שדה הסיסמה",
"Wrong username or password": "שם משתמש שגוי או סיסמה שגויה", "Wrong username or password": "שם משתמש שגוי או סיסמה שגויה",
"Please sign in using 'Log in with Google'": "נא להתחבר בעזרת \"התחברות עם Google\"",
"Password cannot be longer than 55 characters": "על אורך הסיסמה להיות 55 תווים לכל היותר", "Password cannot be longer than 55 characters": "על אורך הסיסמה להיות 55 תווים לכל היותר",
"Please log in": "נא להתחבר", "Please log in": "נא להתחבר",
"channel:`x`": "ערוץ:`x`", "channel:`x`": "ערוץ:`x`",
@ -267,35 +271,35 @@
"`x` marked it with a ❤": "סומנה ב־❤ על ידי `x`", "`x` marked it with a ❤": "סומנה ב־❤ על ידי `x`",
"Audio mode": "Audio mode", "Audio mode": "Audio mode",
"Video mode": "Video mode", "Video mode": "Video mode",
"channel_tab_videos_label": "סרטונים", "Videos": "סרטונים",
"Playlists": "פלייליסטים", "Playlists": "פלייליסטים",
"channel_tab_community_label": "קהילה", "Community": "קהילה",
"search_filters_sort_option_relevance": "רלוונטיות", "relevance": "רלוונטיות",
"search_filters_sort_option_rating": "דירוג", "rating": "דירוג",
"search_filters_sort_option_date": "תאריך העלאה", "date": "תאריך העלאה",
"search_filters_sort_option_views": "מספר צפיות", "views": "מספר צפיות",
"search_filters_type_label": "סוג", "content_type": "סוג",
"search_filters_duration_label": "משך זמן", "duration": "משך זמן",
"search_filters_features_label": "תכונות", "features": "תכונות",
"search_filters_sort_label": "מיון לפי", "sort": "מיון לפי",
"search_filters_date_option_hour": "השעה האחרונה", "hour": "השעה האחרונה",
"search_filters_date_option_today": "היום", "today": "היום",
"search_filters_date_option_week": "השבוע", "week": "השבוע",
"search_filters_date_option_month": "החודש", "month": "החודש",
"search_filters_date_option_year": "השנה", "year": "השנה",
"search_filters_type_option_video": "סרטון", "video": "סרטון",
"search_filters_type_option_channel": "ערוץ", "channel": "ערוץ",
"search_filters_type_option_playlist": "פלייליסט", "playlist": "פלייליסט",
"search_filters_type_option_movie": "סרט", "movie": "סרט",
"search_filters_type_option_show": "תכנית טלוויזיה", "show": "תכנית טלוויזיה",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "כתוביות", "subtitles": "כתוביות",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Live", "live": "Live",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "מיקום", "location": "מיקום",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"Current version: ": "הגרסה הנוכחית: ", "filter": "סינון",
"search_filters_title": "סינון" "Current version: ": "הגרסה הנוכחית: "
} }

@ -1,475 +0,0 @@
{
"last": "आखिरी",
"Yes": "हाँ",
"No": "नहीं",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML के रूप में सदस्यताएँ निर्यात करें (NewPipe और FreeTube के लिए)",
"Log in/register": "लॉग-इन/पंजीकृत करें",
"preferences_autoplay_label": "अपने आप चलाने की सुविधा: ",
"preferences_dark_mode_label": "थीम: ",
"preferences_default_home_label": "डिफ़ॉल्ट मुखपृष्ठ: ",
"Could not fetch comments": "टिप्पणियाँ प्राप्त न की जा सकीं",
"comments_points_count": "{{count}} पॉइंट",
"comments_points_count_plural": "{{count}} पॉइंट्स",
"Subscription manager": "सदस्यता प्रबंधन",
"License: ": "लाइसेंस: ",
"Wilson score: ": "Wilson स्कोर: ",
"Wrong answer": "गलत जवाब",
"Erroneous CAPTCHA": "गलत CAPTCHA",
"Please log in": "कृपया लॉग-इन करें",
"Bosnian": "बोस्नियाई",
"Bulgarian": "बुल्गारियाई",
"Burmese": "बर्मी",
"Chinese (Traditional)": "चीनी (पारंपरिक)",
"Kurdish": "कुर्द",
"Punjabi": "पंजाबी",
"Sinhala": "सिंहली",
"Slovak": "स्लोवाक",
"generic_count_days": "{{count}} दिन",
"generic_count_days_plural": "{{count}} दिन",
"generic_count_hours": "{{count}} घंटे",
"generic_count_hours_plural": "{{count}} घंटे",
"generic_count_minutes": "{{count}} मिनट",
"generic_count_minutes_plural": "{{count}} मिनट",
"generic_count_seconds": "{{count}} सेकंड",
"generic_count_seconds_plural": "{{count}} सेकंड",
"generic_playlists_count": "{{count}} प्लेलिस्ट",
"generic_playlists_count_plural": "{{count}} प्लेलिस्ट्स",
"crash_page_report_issue": "अगर इनमें से कुछ भी काम नहीं करता, कृपया <a href=\"`x`\">GitHub पर एक नया मुद्दा खोल दें</a> (अंग्रेज़ी में) और अपने संदेश में यह टेक्स्ट दर्ज करें (इसे अनुवादित न करें!):",
"generic_views_count": "{{count}} बार देखा गया",
"generic_views_count_plural": "{{count}} बार देखा गया",
"generic_videos_count": "{{count}} वीडियो",
"generic_videos_count_plural": "{{count}} वीडियो",
"generic_subscribers_count": "{{count}} सदस्य",
"generic_subscribers_count_plural": "{{count}} सदस्य",
"generic_subscriptions_count": "{{count}} सदस्यता",
"generic_subscriptions_count_plural": "{{count}} सदस्यताएँ",
"LIVE": "लाइव",
"Shared `x` ago": "`x` पहले बाँटा गया",
"Unsubscribe": "सदस्यता छोड़ें",
"Subscribe": "सदस्यता लें",
"View channel on YouTube": "चैनल YouTube पर देखें",
"View playlist on YouTube": "प्लेलिस्ट YouTube पर देखें",
"newest": "सबसे नया",
"oldest": "सबसे पुराना",
"popular": "सर्वाधिक लोकप्रिय",
"Next page": "अगला पृष्ठ",
"Previous page": "पिछला पृष्ठ",
"Clear watch history?": "देखने का इतिहास मिटाएँ?",
"New password": "नया पासवर्ड",
"New passwords must match": "पासवर्ड्स को मेल खाना होगा",
"Authorize token?": "टोकन को प्रमाणित करें?",
"Authorize token for `x`?": "`x` के लिए टोकन को प्रमाणित करें?",
"Import and Export Data": "डेटा को आयात और निर्यात करें",
"Import": "आयात करें",
"Import Invidious data": "Invidious JSON डेटा आयात करें",
"Import YouTube subscriptions": "YouTube/OPML सदस्यताएँ आयात करें",
"Import FreeTube subscriptions (.db)": "FreeTube सदस्यताएँ आयात करें (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe सदस्यताएँ आयात करें (.json)",
"Import NewPipe data (.zip)": "NewPipe डेटा आयात करें (.zip)",
"Export": "निर्यात करें",
"Export subscriptions as OPML": "OPML के रूप में सदस्यताएँ निर्यात करें",
"Export data as JSON": "Invidious डेटा को JSON के रूप में निर्यात करें",
"Delete account?": "खाता हटाएँ?",
"History": "देखे गए वीडियो",
"An alternative front-end to YouTube": "YouTube का एक वैकल्पिक फ्रंट-एंड",
"JavaScript license information": "जावास्क्रिप्ट लाइसेंस की जानकारी",
"source": "स्रोत",
"Log in": "लॉग-इन करें",
"User ID": "सदस्य ID",
"Password": "पासवर्ड",
"Register": "पंजीकृत करें",
"E-mail": "ईमेल",
"Time (h:mm:ss):": "समय (घं:मिमि:सेसे):",
"Text CAPTCHA": "टेक्स्ट CAPTCHA",
"Image CAPTCHA": "चित्र CAPTCHA",
"Sign In": "साइन इन करें",
"Preferences": "प्राथमिकताएँ",
"preferences_category_player": "प्लेयर की प्राथमिकताएँ",
"preferences_video_loop_label": "हमेशा लूप करें: ",
"preferences_continue_label": "डिफ़ॉल्ट से अगला चलाएँ: ",
"preferences_continue_autoplay_label": "अगला वीडियो अपने आप चलाएँ: ",
"preferences_listen_label": "डिफ़ॉल्ट से सुनें: ",
"preferences_local_label": "प्रॉक्सी वीडियो: ",
"preferences_watch_history_label": "देखने का इतिहास सक्षम करें: ",
"preferences_speed_label": "वीडियो चलाने की डिफ़ॉल्ट रफ़्तार: ",
"preferences_quality_label": "वीडियो की प्राथमिक क्वालिटी: ",
"preferences_quality_option_dash": "DASH (अनुकूली गुणवत्ता)",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "मध्यम",
"preferences_quality_option_small": "छोटा",
"preferences_quality_dash_label": "प्राथमिक DASH वीडियो क्वालिटी: ",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_auto": "अपने-आप",
"preferences_quality_dash_option_best": "सबसे अच्छा",
"preferences_quality_dash_option_worst": "सबसे खराब",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p",
"preferences_comments_label": "डिफ़ॉल्ट टिप्पणियाँ: ",
"preferences_volume_label": "प्लेयर का वॉल्यूम: ",
"youtube": "YouTube",
"reddit": "Reddit",
"invidious": "Invidious",
"preferences_captions_label": "डिफ़ॉल्ट कैप्शन: ",
"Fallback captions: ": "वैकल्पिक कैप्शन: ",
"preferences_related_videos_label": "संबंधित वीडियो दिखाएँ: ",
"preferences_annotations_label": "डिफ़ॉल्ट से टिप्पणियाँ दिखाएँ: ",
"preferences_extend_desc_label": "अपने आप वीडियो के विवरण का विस्तार करें: ",
"preferences_vr_mode_label": "उत्तरदायी 360 डिग्री वीडियो (WebGL की ज़रूरत है): ",
"preferences_category_visual": "यथादृश्य प्राथमिकताएँ",
"preferences_region_label": "सामग्री का राष्ट्र: ",
"preferences_player_style_label": "प्लेयर का स्टाइल: ",
"Dark mode: ": "डार्क मोड: ",
"dark": "डार्क",
"light": "लाइट",
"preferences_thin_mode_label": "हल्का मोड: ",
"preferences_category_misc": "विविध प्राथमिकताएँ",
"preferences_automatic_instance_redirect_label": "अपने आप अनुप्रेषित करें (redirect.invidious.io पर फ़ॉलबैक करें): ",
"preferences_category_subscription": "सदस्यताओं की प्राथमिकताएँ",
"preferences_annotations_subscribed_label": "सदस्यता लिए गए चैनलों पर डिफ़ॉल्ट से टिप्पणियाँ दिखाएँ? ",
"Redirect homepage to feed: ": "फ़ीड पर मुखपृष्ठ को अनुप्रेषित करें: ",
"preferences_max_results_label": "फ़ीड में दिखाए जाने वाले वीडियों की संख्या: ",
"preferences_sort_label": "वीडियों को इस मानदंड पर छाँटें: ",
"published": "प्रकाशित",
"published - reverse": "प्रकाशित - उल्टा",
"Only show latest video from channel: ": "चैनल से सिर्फ नवीनतम वीडियो ही दिखाएँ: ",
"alphabetically": "वर्णक्रमानुसार",
"Only show latest unwatched video from channel: ": "चैनल से सिर्फ न देखा गया नवीनतम वीडियो ही दिखाएँ: ",
"alphabetically - reverse": "वर्णक्रमानुसार - उल्टा",
"channel name": "चैनल का नाम",
"channel name - reverse": "चैनल का नाम - उल्टा",
"preferences_unseen_only_label": "सिर्फ न देखे गए वीडियो ही दिखाएँ: ",
"preferences_notifications_only_label": "सिर्फ सूचनाएँ दिखाएँ (अगर हो तो): ",
"Enable web notifications": "वेब सूचनाएँ सक्षम करें",
"`x` uploaded a video": "`x` ने वीडियो अपलोड किया",
"`x` is live": "`x` लाइव हैं",
"preferences_category_data": "डेटा की प्राथमिकताएँ",
"Clear watch history": "देखने का इतिहास साफ़ करें",
"Import/export data": "डेटा को आयात/निर्यात करें",
"Change password": "पासवर्ड बदलें",
"Manage subscriptions": "सदस्यताएँ प्रबंधित करें",
"Manage tokens": "टोकन प्रबंधित करें",
"Watch history": "देखने का इतिहास",
"Delete account": "खाता हटाएँ",
"preferences_category_admin": "प्रबंधक प्राथमिकताएँ",
"preferences_feed_menu_label": "फ़ीड मेन्यू: ",
"preferences_show_nick_label": "ऊपर उपनाम दिखाएँ: ",
"Top enabled: ": "ऊपर का हिस्सा सक्षम है: ",
"CAPTCHA enabled: ": "CAPTCHA सक्षम है: ",
"Login enabled: ": "लॉग-इन सक्षम है: ",
"Registration enabled: ": "पंजीकरण सक्षम है: ",
"Report statistics: ": "सांख्यिकी रिपोर्ट करें: ",
"Released under the AGPLv3 on Github.": "GitHub पर AGPLv3 के अंतर्गत प्रकाशित।",
"Save preferences": "प्राथमिकताएँ सहेजें",
"Token manager": "टोकन प्रबंधन",
"Token": "टोकन",
"tokens_count": "{{count}} टोकन",
"tokens_count_plural": "{{count}} टोकन",
"Import/export": "आयात/निर्यात करें",
"unsubscribe": "सदस्यता छोड़ें",
"revoke": "हटाएँ",
"Subscriptions": "सदस्यताएँ",
"subscriptions_unseen_notifs_count": "{{count}} अपठित सूचना",
"subscriptions_unseen_notifs_count_plural": "{{count}} अपठित सूचना",
"search": "खोजें",
"Log out": "लॉग-आउट करें",
"Source available here.": "स्रोत यहाँ उपलब्ध है।",
"View JavaScript license information.": "जावास्क्रिप्ट लाइसेंस की जानकारी देखें।",
"View privacy policy.": "निजता नीति देखें।",
"Trending": "रुझान में",
"Public": "सार्वजनिक",
"Unlisted": "सबके लिए उपलब्ध नहीं",
"Private": "निजी",
"View all playlists": "सभी प्लेलिस्ट देखें",
"Create playlist": "प्लेलिस्ट बनाएँ",
"Updated `x` ago": "`x` पहले अपडेट किया गया",
"Delete playlist `x`?": "प्लेलिस्ट `x` हटाएँ?",
"Delete playlist": "प्लेलिस्ट हटाएँ",
"Title": "शीर्षक",
"Playlist privacy": "प्लेलिस्ट की निजता",
"Editing playlist `x`": "प्लेलिस्ट `x` को संपादित किया जा रहा है",
"Show more": "अधिक देखें",
"Show less": "कम देखें",
"Watch on YouTube": "YouTube पर देखें",
"Switch Invidious Instance": "Invidious उदाहरण बदलें",
"search_message_no_results": "कोई परिणाम नहीं मिला।",
"search_message_change_filters_or_query": "अपने खोज क्वेरी को और चौड़ा करें और/या फ़िल्टर बदलें।",
"search_message_use_another_instance": " आप <a href=\"`x`\">दूसरे उदाहरण पर भी खोज सकते हैं</a>।",
"Hide annotations": "टिप्पणियाँ छिपाएँ",
"Show annotations": "टिप्पणियाँ दिखाएँ",
"Genre: ": "श्रेणी: ",
"Family friendly? ": "परिवार के लिए ठीक है? ",
"Engagement: ": "सगाई: ",
"Whitelisted regions: ": "स्वीकृत क्षेत्र: ",
"Blacklisted regions: ": "अस्वीकृत क्षेत्र: ",
"Shared `x`": "`x` बाँटा गया",
"Premieres in `x`": "`x` बाद प्रीमियर होगा",
"Premieres `x`": "`x` को प्रीमिर होगा",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "नमस्कार! ऐसा लगता है कि आपका जावास्क्रिप्ट अक्षम है। टिप्पणियाँ देखने के लिए यहाँ क्लिक करें, लेकिन याद रखें कि इन्हें लोड होने में थोड़ा ज़्यादा समय लग सकता है।",
"View YouTube comments": "YouTube टिप्पणियाँ देखें",
"View more comments on Reddit": "Reddit पर अधिक टिप्पणियाँ देखें",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` टिप्पणी देखें",
"": "`x` टिप्पणियाँ देखें"
},
"View Reddit comments": "Reddit पर टिप्पणियाँ",
"Hide replies": "जवाब छिपाएँ",
"Show replies": "जवाब दिखाएँ",
"Incorrect password": "गलत पासवर्ड",
"CAPTCHA is a required field": "CAPTCHA एक ज़रूरी फ़ील्ड है",
"User ID is a required field": "सदस्य ID एक ज़रूरी फ़ील्ड है",
"Password is a required field": "पासवर्ड एक ज़रूरी फ़ील्ड है",
"Wrong username or password": "गलत सदस्यनाम या पासवर्ड",
"Password cannot be empty": "पासवर्ड खाली नहीं हो सकता",
"Password cannot be longer than 55 characters": "पासवर्ड में अधिकतम 55 अक्षर हो सकते हैं",
"Invidious Private Feed for `x`": "`x` के लिए Invidious निजी फ़ीड",
"channel:`x`": "चैनल:`x`",
"Deleted or invalid channel": "हटाया गया या अमान्य चैनल",
"This channel does not exist.": "यह चैनल मौजूद नहीं है।",
"Could not get channel info.": "चैनल की जानकारी प्राप्त न की जा सकी।",
"comments_view_x_replies": "{{count}} टिप्पणी देखें",
"comments_view_x_replies_plural": "{{count}} टिप्पणियाँ देखें",
"`x` ago": "`x` पहले",
"Load more": "अधिक लोड करें",
"Could not create mix.": "मिक्स न बनाया जा सका।",
"Empty playlist": "खाली प्लेलिस्ट",
"Not a playlist.": "यह प्लेलिस्ट नहीं है।",
"Playlist does not exist.": "प्लेलिस्ट मौजूद नहीं है।",
"Could not pull trending pages.": "रुझान के पृष्ठ प्राप्त न किए जा सके।",
"Hidden field \"challenge\" is a required field": "छिपाया गया फ़ील्ड \"चुनौती\" एक आवश्यक फ़ील्ड है",
"Hidden field \"token\" is a required field": "छिपाया गया फ़ील्ड \"टोकन\" एक आवश्यक फ़ील्ड है",
"Erroneous challenge": "त्रुटिपूर्ण चुनौती",
"Erroneous token": "त्रुटिपूर्ण टोकन",
"No such user": "यह सदस्य मौजूद नहीं हैं",
"Token is expired, please try again": "टोकन की समय-सीमा समाप्त हो चुकी है, कृपया दोबारा कोशिश करें",
"English": "अंग्रेज़ी",
"English (United Kingdom)": "अंग्रेज़ी (यूनाइटेड किंग्डम)",
"English (United States)": "अंग्रेज़ी (संयुक्त राष्ट्र)",
"English (auto-generated)": "अंग्रेज़ी (अपने-आप जनरेट हुआ)",
"Afrikaans": "अफ़्रीकी",
"Albanian": "अल्बानियाई",
"Amharic": "अम्हेरी",
"Arabic": "अरबी",
"Armenian": "आर्मेनियाई",
"Belarusian": "बेलारूसी",
"Azerbaijani": "अज़रबैजानी",
"Bangla": "बंगाली",
"Basque": "बास्क",
"Cantonese (Hong Kong)": "कैंटोनीज़ (हाँग काँग)",
"Catalan": "कातालान",
"Cebuano": "सेबुआनो",
"Chinese": "चीनी",
"Chinese (China)": "चीनी (चीन)",
"Chinese (Hong Kong)": "चीनी (हाँग काँग)",
"Chinese (Simplified)": "चीनी (सरलीकृत)",
"Chinese (Taiwan)": "चीनी (ताइवान)",
"Corsican": "कोर्सिकन",
"Croatian": "क्रोएशियाई",
"Czech": "चेक",
"Danish": "डेनिश",
"Dutch": "डच",
"Dutch (auto-generated)": "डच (अपने-आप जनरेट हुआ)",
"Esperanto": "एस्पेरांतो",
"Estonian": "एस्टोनियाई",
"Filipino": "फ़िलिपीनो",
"Finnish": "फ़िनिश",
"French": "फ़्रेंच",
"French (auto-generated)": "फ़्रेंच (अपने-आप जनरेट हुआ)",
"Galician": "गैलिशियन",
"Georgian": "जॉर्जियाई",
"German": "जर्मन",
"German (auto-generated)": "जर्मन (अपने-आप जनरेट हुआ)",
"Greek": "यूनानी",
"Gujarati": "गुजराती",
"Haitian Creole": "हैती क्रियोल",
"Hausa": "हौसा",
"Hawaiian": "हवाई",
"Hebrew": "हीब्रू",
"Hindi": "हिन्दी",
"Hmong": "हमोंग",
"Hungarian": "हंगेरी",
"Icelandic": "आइसलैंडिक",
"Igbo": "इग्बो",
"Indonesian": "इंडोनेशियाई",
"Indonesian (auto-generated)": "इंडोनेशियाई (अपने-आप जनरेट हुआ)",
"Interlingue": "इंटरलिंगुआ",
"Irish": "आयरिश",
"Italian": "इतालवी",
"Italian (auto-generated)": "इतालवी (अपने-आप जनरेट हुआ)",
"Japanese": "जापानी",
"Japanese (auto-generated)": "जापानी (अपने-आप जनरेट हुआ)",
"Javanese": "जावानीज़",
"Kannada": "कन्नड़",
"Kazakh": "कज़ाख़",
"Khmer": "खमेर",
"Korean": "कोरियाई",
"Korean (auto-generated)": "कोरियाई (अपने-आप जनरेट हुआ)",
"Kyrgyz": "किर्गीज़",
"Lao": "लाओ",
"Latin": "लैटिन",
"Latvian": "लातवियाई",
"Lithuanian": "लिथुएनियाई",
"Luxembourgish": "लग्ज़मबर्गी",
"Macedonian": "मकादूनियाई",
"Malagasy": "मालागासी",
"Malay": "मलय",
"Malayalam": "मलयालम",
"Maltese": "माल्टीज़",
"Maori": "माओरी",
"Marathi": "मराठी",
"Mongolian": "मंगोलियाई",
"Nepali": "नेपाली",
"Norwegian Bokmål": "नॉर्वेजियाई",
"Nyanja": "न्यानजा",
"Pashto": "पश्तो",
"Persian": "फ़ारसी",
"Polish": "पोलिश",
"Portuguese": "पुर्तगाली",
"Portuguese (auto-generated)": "पुर्तगाली (अपने-आप जनरेट हुआ)",
"Portuguese (Brazil)": "पुर्तगाली (ब्राज़ील)",
"Romanian": "रोमेनियाई",
"Russian": "रूसी",
"Russian (auto-generated)": "रूसी (अपने-आप जनरेट हुआ)",
"Samoan": "सामोन",
"Scottish Gaelic": "स्कॉटिश गाएलिक",
"Serbian": "सर्बियाई",
"Shona": "शोणा",
"Sindhi": "सिंधी",
"Slovenian": "स्लोवेनियाई",
"Somali": "सोमाली",
"Southern Sotho": "दक्षिणी सोथो",
"Spanish": "स्पेनी",
"Spanish (auto-generated)": "स्पेनी (अपने-आप जनरेट हुआ)",
"Spanish (Latin America)": "स्पेनी (लातिन अमेरिकी)",
"Spanish (Mexico)": "स्पेनी (मेक्सिको)",
"Spanish (Spain)": "स्पेनी (स्पेन)",
"Sundanese": "सुंडानी",
"Swahili": "स्वाहिली",
"Swedish": "स्वीडिश",
"Tajik": "ताजीक",
"Tamil": "तमिल",
"Telugu": "तेलुगु",
"Thai": "थाई",
"Turkish": "तुर्की",
"Turkish (auto-generated)": "तुर्की (अपने-आप जनरेट हुआ)",
"Ukrainian": "यूक्रेनी",
"Urdu": "उर्दू",
"Uzbek": "उज़्बेक",
"Vietnamese": "वियतनामी",
"Vietnamese (auto-generated)": "वियतनामी (अपने-आप जनरेट हुआ)",
"Welsh": "Welsh",
"Western Frisian": "पश्चिमी फ़्रिसियाई",
"Xhosa": "खोसा",
"Yiddish": "यहूदी",
"generic_count_years": "{{count}} वर्ष",
"generic_count_years_plural": "{{count}} वर्ष",
"Yoruba": "योरुबा",
"generic_count_months": "{{count}} महीने",
"generic_count_months_plural": "{{count}} महीने",
"Zulu": "ज़ूलू",
"generic_count_weeks": "{{count}} हफ़्ते",
"generic_count_weeks_plural": "{{count}} हफ़्ते",
"Fallback comments: ": "फ़ॉलबैक टिप्पणियाँ: ",
"Popular": "प्रसिद्ध",
"Search": "खोजें",
"Top": "ऊपर",
"About": "जानकारी",
"Rating: ": "रेटिंग: ",
"preferences_locale_label": "भाषा: ",
"View as playlist": "प्लेलिस्ट के रूप में देखें",
"Default": "डिफ़ॉल्ट",
"Download": "डाउनलोड करें",
"Download as: ": "इस रूप में डाउनलोड करें: ",
"%A %B %-d, %Y": "%A %B %-d, %Y",
"Music": "संगीत",
"Gaming": "गेमिंग",
"News": "समाचार",
"Movies": "फ़िल्में",
"(edited)": "(संपादित)",
"YouTube comment permalink": "YouTube पर टिप्पणी की स्थायी कड़ी",
"permalink": "स्थायी कड़ी",
"channel_tab_videos_label": "वीडियो",
"`x` marked it with a ❤": "`x` ने इसे एक ❤ से चिह्नित किया",
"Audio mode": "ऑडियो मोड",
"Playlists": "प्लेलिस्ट्स",
"Video mode": "वीडियो मोड",
"channel_tab_community_label": "समुदाय",
"search_filters_title": "फ़िल्टर",
"search_filters_date_label": "अपलोड करने का समय",
"search_filters_date_option_none": "कोई भी समय",
"search_filters_date_option_week": "इस हफ़्ते",
"search_filters_date_option_month": "इस महीने",
"search_filters_date_option_hour": "पिछला घंटा",
"search_filters_date_option_today": "आज",
"search_filters_date_option_year": "इस साल",
"search_filters_type_label": "प्रकार",
"search_filters_type_option_all": "कोई भी प्रकार",
"search_filters_type_option_video": "वीडियो",
"search_filters_type_option_channel": "चैनल",
"search_filters_sort_option_relevance": "प्रासंगिकता",
"search_filters_type_option_playlist": "प्लेलिस्ट",
"search_filters_type_option_movie": "फ़िल्म",
"search_filters_type_option_show": "शो",
"search_filters_duration_label": "अवधि",
"search_filters_duration_option_none": "कोई भी अवधि",
"search_filters_duration_option_short": "4 मिनट से कम",
"search_filters_duration_option_medium": "4 से 20 मिनट तक",
"search_filters_duration_option_long": "20 मिनट से ज़्यादा",
"search_filters_features_label": "सुविधाएँ",
"search_filters_features_option_live": "लाइव",
"search_filters_sort_option_rating": "रेटिंग",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_hd": "HD",
"search_filters_features_option_subtitles": "उपशीर्षक/कैप्शन",
"search_filters_features_option_c_commons": "क्रिएटिव कॉमन्स",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_vr180": "VR180",
"search_filters_features_option_three_d": "3D",
"search_filters_features_option_hdr": "HDR",
"search_filters_features_option_location": "जगह",
"search_filters_features_option_purchased": "खरीदा गया",
"search_filters_sort_label": "इस क्रम से लगाएँ",
"search_filters_sort_option_date": "अपलोड की ताऱीख",
"search_filters_sort_option_views": "देखे जाने की संख्या",
"search_filters_apply_button": "चयनित फ़िल्टर लागू करें",
"footer_documentation": "प्रलेख",
"footer_source_code": "स्रोत कोड",
"footer_original_source_code": "मूल स्रोत कोड",
"footer_modfied_source_code": "बदला गया स्रोत कोड",
"Current version: ": "वर्तमान संस्करण: ",
"next_steps_error_message": "इसके बाद आपके ये आज़माने चाहिए: ",
"next_steps_error_message_refresh": "साफ़ करें",
"next_steps_error_message_go_to_youtube": "YouTube पर जाएँ",
"footer_donate_page": "दान करें",
"adminprefs_modified_source_code_url_label": "बदले गए स्रोत कोड के रिपॉज़िटरी का URL",
"none": "कुछ नहीं",
"videoinfo_started_streaming_x_ago": "`x` पहले स्ट्रीम करना शुरू किया",
"videoinfo_watch_on_youTube": "YouTube पर देखें",
"Video unavailable": "वीडियो उपलब्ध नहीं है",
"preferences_save_player_pos_label": "यहाँ से चलाना शुरू करें: ",
"crash_page_you_found_a_bug": "शायद आपको Invidious में कोई बग नज़र आ गया है!",
"videoinfo_youTube_embed_link": "एम्बेड करें",
"videoinfo_invidious_embed_link": "एम्बेड करने की कड़ी",
"download_subtitles": "उपशीर्षक - `x` (.vtt)",
"user_created_playlists": "बनाए गए `x` प्लेलिस्ट्स",
"user_saved_playlists": "सहेजे गए `x` प्लेलिस्ट्स",
"crash_page_before_reporting": "बग रिपोर्ट करने से पहले:",
"crash_page_switch_instance": "<a href=\"`x`\">किसी दूसरे उदाहरण का इस्तेमाल करें</a>",
"crash_page_read_the_faq": "<a href=\"`x`\">अक्सर पूछे जाने वाले प्रश्न (FAQ)</a> पढ़ें",
"crash_page_refresh": "<a href=\"`x`\">पृष्ठ को एक बार साफ़ करें</a>",
"crash_page_search_issue": "<a href=\"`x`\">GitHub पर मौजूदा मुद्दे</a> ढूँढ़ें",
"Popular enabled: ": "लोकप्रिय सक्षम: ",
"Artist: ": "कलाकार: ",
"Music in this video": "इस वीडियो में संगीत",
"Album: ": "एल्बम: ",
"error_video_not_in_playlist": "अनुरोधित वीडियो इस प्लेलिस्ट में मौजूद नहीं है। <a href=\"`x`\">प्लेलिस्ट के मुखपृष्ठ पर जाने के लिए यहाँ क्लिक करें।</a>",
"channel_tab_shorts_label": "शॉर्ट्स",
"channel_tab_streams_label": "लाइवस्ट्रीम्स",
"channel_tab_playlists_label": "प्लेलिस्ट्स",
"channel_tab_channels_label": "चैनल्स"
}

@ -7,13 +7,14 @@
"View playlist on YouTube": "Prikaži zbirku na YouTubeu", "View playlist on YouTube": "Prikaži zbirku na YouTubeu",
"newest": "najnovije", "newest": "najnovije",
"oldest": "najstarije", "oldest": "najstarije",
"popular": "popularne", "popular": "popularni",
"last": "zadnje", "last": "zadnji",
"Next page": "Sljedeća stranica", "Next page": "Sljedeća stranica",
"Previous page": "Prethodna stranica", "Previous page": "Prethodna stranica",
"Clear watch history?": "Izbrisati povijest gledanja?", "Clear watch history?": "Izbrisati povijest gledanja?",
"New password": "Nova lozinka", "New password": "Nova lozinka",
"New passwords must match": "Nove lozinke se moraju poklapati", "New passwords must match": "Nove lozinke se moraju poklapati",
"Cannot change password for Google accounts": "Nije moguće promijeniti lozinku za Google račune",
"Authorize token?": "Autorizirati token?", "Authorize token?": "Autorizirati token?",
"Authorize token for `x`?": "Autorizirati token za `x`?", "Authorize token for `x`?": "Autorizirati token za `x`?",
"Yes": "Da", "Yes": "Da",
@ -36,14 +37,16 @@
"source": "izvor", "source": "izvor",
"Log in": "Prijavi se", "Log in": "Prijavi se",
"Log in/register": "Prijavi se/registriraj se", "Log in/register": "Prijavi se/registriraj se",
"Log in with Google": "Prijavi se pomoću Googlea",
"User ID": "Korisnički ID", "User ID": "Korisnički ID",
"Password": "Lozinka", "Password": "Lozinka",
"Time (h:mm:ss):": "Vrijeme (h:mm:ss):", "Time (h:mm:ss):": "Vrijeme (h:mm:ss):",
"Text CAPTCHA": "Tekstualni CAPTCHA", "Text CAPTCHA": "Tekstualni CAPTCHA",
"Image CAPTCHA": "Slikovni CAPTCHA", "Image CAPTCHA": "Slikovni CAPTCHA",
"Sign In": "Prijavi se", "Sign In": "Prijava",
"Register": "Registriraj se", "Register": "Registriraj se",
"E-mail": "E-mail adresa", "E-mail": "E-mail",
"Google verification code": "Googleov potvrdni kod",
"Preferences": "Postavke", "Preferences": "Postavke",
"preferences_category_player": "Postavke playera", "preferences_category_player": "Postavke playera",
"preferences_video_loop_label": "Uvijek ponavljaj: ", "preferences_video_loop_label": "Uvijek ponavljaj: ",
@ -85,7 +88,7 @@
"channel name": "ime kanala", "channel name": "ime kanala",
"channel name - reverse": "ime kanala obrnuto", "channel name - reverse": "ime kanala obrnuto",
"Only show latest video from channel: ": "Prikaži samo najnovija videa kanala: ", "Only show latest video from channel: ": "Prikaži samo najnovija videa kanala: ",
"Only show latest unwatched video from channel: ": "Prikaži samo najnovija nepogledana videa od kanala: ", "Only show latest unwatched video from channel: ": "Prikaži samo najnovija nepogledana videa kanala: ",
"preferences_unseen_only_label": "Prikaži samo nepogledane: ", "preferences_unseen_only_label": "Prikaži samo nepogledane: ",
"preferences_notifications_only_label": "Prikaži samo obavijesti (ako ih ima): ", "preferences_notifications_only_label": "Prikaži samo obavijesti (ako ih ima): ",
"Enable web notifications": "Aktiviraj web-obavijesti", "Enable web notifications": "Aktiviraj web-obavijesti",
@ -104,7 +107,7 @@
"preferences_feed_menu_label": "Izbornik za feedove: ", "preferences_feed_menu_label": "Izbornik za feedove: ",
"preferences_show_nick_label": "Prikaži nadimak na vrhu: ", "preferences_show_nick_label": "Prikaži nadimak na vrhu: ",
"Top enabled: ": "Najbolji aktivirani: ", "Top enabled: ": "Najbolji aktivirani: ",
"CAPTCHA enabled: ": "CAPTCHA aktiviran: ", "CAPTCHA enabled: ": "Aktivirani CAPTCHA: ",
"Login enabled: ": "Prijava aktivirana: ", "Login enabled: ": "Prijava aktivirana: ",
"Registration enabled: ": "Registracija aktivirana: ", "Registration enabled: ": "Registracija aktivirana: ",
"Report statistics: ": "Izvještaj o statistici: ", "Report statistics: ": "Izvještaj o statistici: ",
@ -118,7 +121,7 @@
"Subscriptions": "Pretplate", "Subscriptions": "Pretplate",
"search": "traži", "search": "traži",
"Log out": "Odjavi se", "Log out": "Odjavi se",
"Released under the AGPLv3 on Github.": "Izdano pod licencom AGPLv3 na GitHub-u.", "Released under the AGPLv3 on Github.": "Izdano pod licencom AGPLv3 na Github-u.",
"Source available here.": "Izvor je ovdje dostupan.", "Source available here.": "Izvor je ovdje dostupan.",
"View JavaScript license information.": "Prikaži informacije o JavaScript licenci.", "View JavaScript license information.": "Prikaži informacije o JavaScript licenci.",
"View privacy policy.": "Prikaži politiku privatnosti.", "View privacy policy.": "Prikaži politiku privatnosti.",
@ -134,10 +137,11 @@
"Title": "Naslov", "Title": "Naslov",
"Playlist privacy": "Privatnost zbirke", "Playlist privacy": "Privatnost zbirke",
"Editing playlist `x`": "Uređivanje zbirke `x`", "Editing playlist `x`": "Uređivanje zbirke `x`",
"Show more": "Prikaži više", "Show more": "Pokaži više",
"Show less": "Prikaži manje", "Show less": "Pokaži manje",
"Watch on YouTube": "Gledaj na YouTubeu", "Watch on YouTube": "Gledaj na YouTubeu",
"Switch Invidious Instance": "Promijeni Invidious instancu", "Switch Invidious Instance": "Promijeni Invidious instancu",
"Broken? Try another Invidious Instance": "Pokvarena? Probaj jednu drugu Invidious instancu",
"Hide annotations": "Sakrij napomene", "Hide annotations": "Sakrij napomene",
"Show annotations": "Prikaži napomene", "Show annotations": "Prikaži napomene",
"Genre: ": "Žanr: ", "Genre: ": "Žanr: ",
@ -161,12 +165,17 @@
"Hide replies": "Sakrij odgovore", "Hide replies": "Sakrij odgovore",
"Show replies": "Prikaži odgovore", "Show replies": "Prikaži odgovore",
"Incorrect password": "Neispravna lozinka", "Incorrect password": "Neispravna lozinka",
"Quota exceeded, try again in a few hours": "Kvota je prekoračena. Pokušaj ponovo za par sati",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Prijava neuspjela. Provjeri da je dvofaktorska autentifikacija uključena (Authenticator ili SMS).",
"Invalid TFA code": "Neispravan TFA kod",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Prijava neuspjela. Možda zato što za tvoj račun nije uključena dvofaktorska autentifikacija.",
"Wrong answer": "Krivi odgovor", "Wrong answer": "Krivi odgovor",
"Erroneous CAPTCHA": "Neispravan CAPTCHA", "Erroneous CAPTCHA": "Neispravan CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA je obavezno polje", "CAPTCHA is a required field": "CAPTCHA je obavezno polje",
"User ID is a required field": "Korisnički ID je obavezno polje", "User ID is a required field": "Korisnički ID je obavezno polje",
"Password is a required field": "Polje lozinke je obavezno polje", "Password is a required field": "Polje lozinke je obavezno polje",
"Wrong username or password": "Krivo korisničko ime ili lozinka", "Wrong username or password": "Krivo korisničko ime ili lozinka",
"Please sign in using 'Log in with Google'": "Za prijavu koristi „Prijavi se pomoću Googlea”",
"Password cannot be empty": "Polje lozinke ne smije ostati prazno", "Password cannot be empty": "Polje lozinke ne smije ostati prazno",
"Password cannot be longer than 55 characters": "Lozinka ne može biti duža od 55 znakova", "Password cannot be longer than 55 characters": "Lozinka ne može biti duža od 55 znakova",
"Please log in": "Prijavi se", "Please log in": "Prijavi se",
@ -310,54 +319,55 @@
"Movies": "Filmovi", "Movies": "Filmovi",
"Download": "Preuzmi", "Download": "Preuzmi",
"Download as: ": "Preuzmi kao: ", "Download as: ": "Preuzmi kao: ",
"%A %B %-d, %Y": "%A, %-d. %B %Y.", "%A %B %-d, %Y": "%A, %-d. %B %Y",
"(edited)": "(uređeno)", "(edited)": "(uređeno)",
"YouTube comment permalink": "Stalna poveznica YouTube komentara", "YouTube comment permalink": "Stalna poveznica YouTube komentara",
"permalink": "stalna poveznica", "permalink": "stalna poveznica",
"`x` marked it with a ❤": "Označeno sa ❤ od `x`", "`x` marked it with a ❤": "Označeno sa ❤ od `x`",
"Audio mode": "Audio modus", "Audio mode": "Audio modus",
"Video mode": "Videomodus", "Video mode": "Videomodus",
"channel_tab_videos_label": "Videa", "Videos": "Videa",
"Playlists": "Zbirke", "Playlists": "Zbirke",
"channel_tab_community_label": "Zajednica", "Community": "Zajednica",
"search_filters_sort_option_relevance": "Značaj", "relevance": "značaj",
"search_filters_sort_option_rating": "Ocjena", "rating": "ocjena",
"search_filters_sort_option_date": "Datum prijenosa", "date": "datum",
"search_filters_sort_option_views": "Broj gledanja", "views": "prikazi",
"search_filters_type_label": "Vrsta", "content_type": "vrsta_sadržaja",
"search_filters_duration_label": "Trajanje", "duration": "trajanje",
"search_filters_features_label": "Funkcije", "features": "funkcije",
"search_filters_sort_label": "Redoslijed", "sort": "redoslijed",
"search_filters_date_option_hour": "Zadnjih sat vremena", "hour": "sat",
"search_filters_date_option_today": "Danas", "today": "danas",
"search_filters_date_option_week": "Ovaj tjedan", "week": "tjedan",
"search_filters_date_option_month": "Ovaj mjesec", "month": "mjesec",
"search_filters_date_option_year": "Ova godina", "year": "godina",
"search_filters_type_option_video": "Video", "video": "video",
"search_filters_type_option_channel": "Kanal", "channel": "kanal",
"search_filters_type_option_playlist": "Zbirka", "playlist": "Zbirka",
"search_filters_type_option_movie": "Film", "movie": "film",
"search_filters_type_option_show": "Emisija", "show": "emisija",
"search_filters_features_option_hd": "HD", "hd": "hd",
"search_filters_features_option_subtitles": "Titlovi/CC", "subtitles": "titlovi",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "creative_commons",
"search_filters_features_option_three_d": "3D", "3d": "3d",
"search_filters_features_option_live": "Uživo", "live": "uživo",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "Lokacija", "location": "lokacija",
"search_filters_features_option_hdr": "HDR", "hdr": "hdr",
"filter": "filtar",
"Current version: ": "Trenutačna verzija: ", "Current version: ": "Trenutačna verzija: ",
"next_steps_error_message": "Nakon toga bi trebali pokušati sljedeće: ", "next_steps_error_message": "Nakon toga bi trebali pokušati sljedeće: ",
"next_steps_error_message_refresh": "Aktualiziraj stranicu", "next_steps_error_message_refresh": "Aktualiziraj stranicu",
"next_steps_error_message_go_to_youtube": "Idi na YouTube", "next_steps_error_message_go_to_youtube": "Idi na YouTube",
"footer_donate_page": "Doniraj", "footer_donate_page": "Doniraj",
"adminprefs_modified_source_code_url_label": "URL do repozitorija prilagođenog izvornog koda", "adminprefs_modified_source_code_url_label": "URL do repozitorija izmijenjenog izvornog koda",
"search_filters_duration_option_short": "Kratko (< 4 minute)", "short": "Kratki (< 4 minute)",
"search_filters_duration_option_long": "Dugo (> 20 minute)", "long": "Dugi (> 20 minute)",
"footer_source_code": "Izvorni kod", "footer_source_code": "Izvorni kod",
"footer_modfied_source_code": "Prilagođen izvorni kod", "footer_modfied_source_code": "Izmijenjeni izvorni kod",
"footer_documentation": "Dokumentacija", "footer_documentation": "Dokumentacija",
"footer_original_source_code": "Prvobitan izvorni kod", "footer_original_source_code": "Izvoran izvorni kod",
"preferences_region_label": "Zemlja sadržaja: ", "preferences_region_label": "Zemlja sadržaja: ",
"preferences_quality_dash_label": "Preferirana DASH videokvaliteta: ", "preferences_quality_dash_label": "Preferirana DASH videokvaliteta: ",
"preferences_quality_option_dash": "DASH (adaptativna kvaliteta)", "preferences_quality_option_dash": "DASH (adaptativna kvaliteta)",
@ -372,12 +382,12 @@
"preferences_quality_dash_option_240p": "240 p", "preferences_quality_dash_option_240p": "240 p",
"preferences_quality_dash_option_144p": "144 p", "preferences_quality_dash_option_144p": "144 p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_purchased": "Kupljeno", "purchased": "Kupljeno",
"search_filters_features_option_three_sixty": "360 °", "360": "360 °",
"none": "bez", "none": "bez",
"videoinfo_youTube_embed_link": "Ugradi", "videoinfo_youTube_embed_link": "Ugradi",
"user_created_playlists": "`x` je stvorio/la zbirke", "user_created_playlists": "`x` stvorene zbirke",
"user_saved_playlists": "`x` je spremio/la zbirke", "user_saved_playlists": "`x` spremljene zbirke",
"Video unavailable": "Video nedostupan", "Video unavailable": "Video nedostupan",
"preferences_save_player_pos_label": "Spremi mjesto reprodukcije: ", "preferences_save_player_pos_label": "Spremi mjesto reprodukcije: ",
"videoinfo_watch_on_youTube": "Gledaj na YouTubeu", "videoinfo_watch_on_youTube": "Gledaj na YouTubeu",
@ -424,7 +434,7 @@
"generic_subscriptions_count_2": "{{count}} pretplata", "generic_subscriptions_count_2": "{{count}} pretplata",
"generic_playlists_count_0": "{{count}} zbirka", "generic_playlists_count_0": "{{count}} zbirka",
"generic_playlists_count_1": "{{count}} zbirke", "generic_playlists_count_1": "{{count}} zbirke",
"generic_playlists_count_2": "{{count}} zbiraka", "generic_playlists_count_2": "{{count}} zbirka",
"generic_videos_count_0": "{{count}} video", "generic_videos_count_0": "{{count}} video",
"generic_videos_count_1": "{{count}} videa", "generic_videos_count_1": "{{count}} videa",
"generic_videos_count_2": "{{count}} videa", "generic_videos_count_2": "{{count}} videa",
@ -442,7 +452,7 @@
"crash_page_refresh": "pokušaj <a href=\"`x`\">aktualizirati stranicu</a>", "crash_page_refresh": "pokušaj <a href=\"`x`\">aktualizirati stranicu</a>",
"crash_page_switch_instance": "pokušaj <a href=\"`x`\">koristiti jednu drugu instancu</a>", "crash_page_switch_instance": "pokušaj <a href=\"`x`\">koristiti jednu drugu instancu</a>",
"crash_page_read_the_faq": "pročitaj <a href=\"`x`\">Često postavljena pitanja (ČPP)</a>", "crash_page_read_the_faq": "pročitaj <a href=\"`x`\">Često postavljena pitanja (ČPP)</a>",
"crash_page_search_issue": "pretraži <a href=\"`x`\">postojeće probleme na GitHub-u</a>", "crash_page_search_issue": "pretraži <a href=\"`x`\">postojeće probleme na Github-u</a>",
"crash_page_report_issue": "Ako ništa od gore navedenog ne pomaže, <a href=\"`x`\">prijavi novi problem na GitHub-u</a> (po mogućnosti na engleskom) i uključi sljedeći tekst u poruku (NEMOJ prevoditi taj tekst):", "crash_page_report_issue": "Ako ništa od gore navedenog ne pomaže, <a href=\"`x`\">prijavi novi problem na GitHub-u</a> (po mogućnosti na engleskom) i uključi sljedeći tekst u poruku (NEMOJ prevoditi taj tekst):",
"English (United Kingdom)": "Engleski (Ujedinjeno Kraljevstvo)", "English (United Kingdom)": "Engleski (Ujedinjeno Kraljevstvo)",
"English (United States)": "Engleski (Sjedinjene Američke Države)", "English (United States)": "Engleski (Sjedinjene Američke Države)",
@ -466,31 +476,5 @@
"Chinese (Hong Kong)": "Kineski (Hong Kong)", "Chinese (Hong Kong)": "Kineski (Hong Kong)",
"Korean (auto-generated)": "Korejski (automatski generiran)", "Korean (auto-generated)": "Korejski (automatski generiran)",
"Portuguese (auto-generated)": "Portugalski (automatski generiran)", "Portuguese (auto-generated)": "Portugalski (automatski generiran)",
"Spanish (auto-generated)": "Španjolski (automatski generiran)", "Spanish (auto-generated)": "Španjolski (automatski generiran)"
"preferences_watch_history_label": "Aktiviraj povijest gledanja: ",
"search_filters_title": "Filtri",
"search_filters_date_option_none": "Bilo koji datum",
"search_filters_date_label": "Datum prijenosa",
"search_message_no_results": "Nema rezultata.",
"search_message_use_another_instance": " Također možeš <a href=\"`x`\">tražiti na jednoj drugoj instanci</a>.",
"search_message_change_filters_or_query": "Pokušaj proširiti upit za pretragu i/ili promijeni filtre.",
"search_filters_features_option_vr180": "VR180",
"search_filters_duration_option_none": "Bilo koje duljine",
"search_filters_duration_option_medium": "Srednje (4 20 minuta)",
"search_filters_apply_button": "Primijeni odabrane filtre",
"search_filters_type_option_all": "Bilo koja vrsta",
"Popular enabled: ": "Popularni aktivirani: ",
"error_video_not_in_playlist": "Traženi video ne postoji u ovoj zbirci. <a href=\"`x`\">Pritisni ovdje za početnu stranicu zbirke.</a>",
"channel_tab_streams_label": "Prijenosi uživo",
"channel_tab_playlists_label": "Zbirke",
"channel_tab_channels_label": "Kanali",
"channel_tab_shorts_label": "Kratka videa",
"Music in this video": "Glazba u ovom videu",
"Album: ": "Album: ",
"Artist: ": "Izvođač: ",
"Channel Sponsor": "Sponzor kanala",
"Song: ": "Pjesma: ",
"Standard YouTube license": "Standardna YouTube licenca",
"Download is disabled": "Preuzimanje je deaktivirano",
"Import YouTube playlist (.csv)": "Uvezi YouTube zbirku (.csv)"
} }

@ -24,21 +24,22 @@
"Clear watch history?": "Törölve legyen a megnézett videók naplója?", "Clear watch history?": "Törölve legyen a megnézett videók naplója?",
"New password": "Új jelszó", "New password": "Új jelszó",
"New passwords must match": "Az új jelszavaknak egyezniük kell.", "New passwords must match": "Az új jelszavaknak egyezniük kell.",
"Cannot change password for Google accounts": "A Google-fiók jelszavát nem lehet megváltoztatni.",
"Authorize token?": "Engedélyezve legyen a token?", "Authorize token?": "Engedélyezve legyen a token?",
"Authorize token for `x`?": "Engedélyezve legyen a token erre? „`x`”", "Authorize token for `x`?": "Engedélyezve legyen a token erre? „`x`”",
"Yes": "Igen", "Yes": "Igen",
"No": "Nem", "No": "Nem",
"Import and Export Data": "Adatok importálása és exportálása", "Import and Export Data": "Adatok importálása és exportálása",
"Import": "Importálás", "Import": "Importálás",
"Import Invidious data": "Az Invidious JSON-adatainak importálása", "Import Invidious data": "Az Invidious adatainak importálása",
"Import YouTube subscriptions": "YouTube- vagy OPML-feliratkozások importálása", "Import YouTube subscriptions": "YouTube-feliratkozások importálása",
"Import FreeTube subscriptions (.db)": "FreeTube-feliratkozások importálása (.db)", "Import FreeTube subscriptions (.db)": "FreeTube-feliratkozások importálása (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe-feliratkozások importálása (.json)", "Import NewPipe subscriptions (.json)": "NewPipe-feliratkozások importálása (.json)",
"Import NewPipe data (.zip)": "NewPipe adatainak importálása (.zip)", "Import NewPipe data (.zip)": "NewPipe adatainak importálása (.zip)",
"Export": "Exportálás", "Export": "Exportálás",
"Export subscriptions as OPML": "Feliratkozások exportálása OPML-ként", "Export subscriptions as OPML": "Feliratkozások exportálása OPML-ként",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Feliratkozások exportálása OPML-ként (NewPipe-hoz és FreeTube-hoz)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Feliratkozások exportálása OPML-ként (NewPipe-hoz és FreeTube-hoz)",
"Export data as JSON": "Az Invidious JSON-adatainak exportálása", "Export data as JSON": "Adat exportálása JSON-ként",
"Delete account?": "Törlésre kerüljön a fiók?", "Delete account?": "Törlésre kerüljön a fiók?",
"History": "Megnézett videók naplója", "History": "Megnézett videók naplója",
"An alternative front-end to YouTube": "Ez az oldal egyike a YouTube alternatív kezelőfelületeinek", "An alternative front-end to YouTube": "Ez az oldal egyike a YouTube alternatív kezelőfelületeinek",
@ -46,6 +47,7 @@
"source": "forrás", "source": "forrás",
"Log in": "Bejelentkezés", "Log in": "Bejelentkezés",
"Log in/register": "Bejelentkezés/Regisztrálás", "Log in/register": "Bejelentkezés/Regisztrálás",
"Log in with Google": "Bejelentkezés Google-fiókkal",
"User ID": "Felhasználói azonosító", "User ID": "Felhasználói azonosító",
"Password": "Jelszó", "Password": "Jelszó",
"Time (h:mm:ss):": "A pontos idő (ó:pp:mm):", "Time (h:mm:ss):": "A pontos idő (ó:pp:mm):",
@ -54,6 +56,7 @@
"Sign In": "Bejelentkezés", "Sign In": "Bejelentkezés",
"Register": "Regisztrálás", "Register": "Regisztrálás",
"E-mail": "E-mail-cím", "E-mail": "E-mail-cím",
"Google verification code": "A Google ellenőrző kódja",
"Preferences": "Beállítások", "Preferences": "Beállítások",
"preferences_category_player": "Lejátszó beállításai", "preferences_category_player": "Lejátszó beállításai",
"preferences_video_loop_label": "Videó állandó ismétlése: ", "preferences_video_loop_label": "Videó állandó ismétlése: ",
@ -156,7 +159,7 @@
"Engagement: ": "Visszajelzési mutató: ", "Engagement: ": "Visszajelzési mutató: ",
"Whitelisted regions: ": "Engedélyezett régiók: ", "Whitelisted regions: ": "Engedélyezett régiók: ",
"Blacklisted regions: ": "Tiltott régiók: ", "Blacklisted regions: ": "Tiltott régiók: ",
"Shared `x`": "`x` dátummal osztották meg", "Shared `x`": "`x` napon osztották meg",
"Premieres in `x`": "`x` később lesz a premierje", "Premieres in `x`": "`x` később lesz a premierje",
"Premieres `x`": "`x` lesz a premierje", "Premieres `x`": "`x` lesz a premierje",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Helló! Úgy tűnik a JavaScript ki van kapcsolva a böngészőben. Ide kattintva lehet olvasni a hozzászólásokat, de a betöltésük így kicsit több időbe telik.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Helló! Úgy tűnik a JavaScript ki van kapcsolva a böngészőben. Ide kattintva lehet olvasni a hozzászólásokat, de a betöltésük így kicsit több időbe telik.",
@ -170,12 +173,16 @@
"Hide replies": "Válaszok elrejtése", "Hide replies": "Válaszok elrejtése",
"Show replies": "Válaszok mutatása", "Show replies": "Válaszok mutatása",
"Incorrect password": "A jelszó nem megfelelő", "Incorrect password": "A jelszó nem megfelelő",
"Quota exceeded, try again in a few hours": "A kvótát meghaladták. Néhány órával később próbáld meg újból betölteni.",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Nem sikerült bejelentkezni. A kétlépcsős (hitelesítő vagy szöveges üzenet általi) hitelesítésnek bekapcsolva kell lennie.",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Nem sikerült bejelentkezni. Ennek oka lehet, hogy a kétlépcsős hitelesítés nincs bekapcsolva a fiók beállításaiban.",
"Wrong answer": "Nem jól válaszoltál.", "Wrong answer": "Nem jól válaszoltál.",
"Erroneous CAPTCHA": "A CAPTCHA hibás.", "Erroneous CAPTCHA": "A CAPTCHA hibás.",
"CAPTCHA is a required field": "A CAPTCHA-mezőt ki kell tölteni.", "CAPTCHA is a required field": "A CAPTCHA-mezőt ki kell tölteni.",
"User ID is a required field": "A felhasználói azonosítót meg kell adni.", "User ID is a required field": "A felhasználói azonosítót meg kell adni.",
"Password is a required field": "Meg kell adni egy jelszót.", "Password is a required field": "Meg kell adni egy jelszót.",
"Wrong username or password": "Vagy a felhasználói név, vagy pedig a jelszó nem megfelelő.", "Wrong username or password": "Vagy a felhasználói név, vagy pedig a jelszó nem megfelelő.",
"Please sign in using 'Log in with Google'": "A „Bejelentkezés Google-el” gombbal jelentkezz be.",
"Password cannot be empty": "A jelszót nem lehet kihagyni.", "Password cannot be empty": "A jelszót nem lehet kihagyni.",
"Password cannot be longer than 55 characters": "A jelszó nem lehet hosszabb 55 karakternél.", "Password cannot be longer than 55 characters": "A jelszó nem lehet hosszabb 55 karakternél.",
"Please log in": "Kérjük, jelentkezz be.", "Please log in": "Kérjük, jelentkezz be.",
@ -341,9 +348,9 @@
"`x` marked it with a ❤": "`x` ❤jelet adott a hozzászóláshoz", "`x` marked it with a ❤": "`x` ❤jelet adott a hozzászóláshoz",
"Audio mode": "Csak hanggal", "Audio mode": "Csak hanggal",
"Video mode": "Hanggal és képpel", "Video mode": "Hanggal és képpel",
"channel_tab_videos_label": "Videói", "Videos": "Videói",
"Playlists": "Lejátszási listái", "Playlists": "Lejátszási listái",
"channel_tab_community_label": "Közösség", "Community": "Közösség",
"Current version: ": "Jelenlegi verzió: ", "Current version: ": "Jelenlegi verzió: ",
"preferences_quality_option_medium": "Közepes", "preferences_quality_option_medium": "Közepes",
"preferences_quality_dash_option_auto": "Automatikus", "preferences_quality_dash_option_auto": "Automatikus",
@ -358,14 +365,14 @@
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"videoinfo_started_streaming_x_ago": "`x` ezelőtt kezdte streamelni", "videoinfo_started_streaming_x_ago": "`x` ezelőtt kezdte streamelni",
"search_filters_sort_option_views": "Mennyien látták", "views": "Mennyien látták",
"search_filters_features_option_purchased": "Megvásárolt", "purchased": "Megvásárolva",
"search_filters_features_option_three_sixty": "360°-os virtuális valóság", "360": "360°-os",
"footer_original_source_code": "Eredeti forráskód", "footer_original_source_code": "Eredeti forráskód",
"none": "egyik sem", "none": "egyik sem",
"videoinfo_watch_on_youTube": "YouTube-on megnézni", "videoinfo_watch_on_youTube": "YouTube-on megnézni",
"videoinfo_youTube_embed_link": "beágyazva", "videoinfo_youTube_embed_link": "beágyazva",
"videoinfo_invidious_embed_link": "Beágyazott hivatkozás", "videoinfo_invidious_embed_link": "Beágyazás linkje",
"download_subtitles": "Felirat `x` (.vtt)", "download_subtitles": "Felirat `x` (.vtt)",
"user_created_playlists": "`x` létrehozott lejátszási lista", "user_created_playlists": "`x` létrehozott lejátszási lista",
"user_saved_playlists": "`x` mentett lejátszási lista", "user_saved_playlists": "`x` mentett lejátszási lista",
@ -375,13 +382,14 @@
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_label": "DASH-videó minősége: ", "preferences_quality_dash_label": "DASH-videó minősége: ",
"preferences_quality_option_small": "Rossz", "preferences_quality_option_small": "Rossz",
"search_filters_sort_option_date": "Feltöltés dátuma", "date": "Feltöltés dátuma",
"Video unavailable": "A videó nem érhető el", "Video unavailable": "A videó nem érhető el",
"preferences_save_player_pos_label": "A videó folytatása onnan, ahol félbe lett hagyva: ", "preferences_save_player_pos_label": "A videó folytatása onnan, ahol félbe lett hagyva: ",
"preferences_show_nick_label": "Becenév mutatása felül: ", "preferences_show_nick_label": "Becenév mutatása felül: ",
"Released under the AGPLv3 on Github.": "AGPLv3 licenc alapján a GitHubon", "Released under the AGPLv3 on Github.": "AGPLv3 licenc alapján a GitHubon",
"search_filters_features_option_three_d": "3D-ben", "3d": "3D-ben",
"search_filters_features_option_live": "Élőben", "live": "Élőben",
"filter": "Szűrők",
"next_steps_error_message_refresh": "Újratöltés", "next_steps_error_message_refresh": "Újratöltés",
"footer_donate_page": "Adakozás", "footer_donate_page": "Adakozás",
"footer_source_code": "Forráskód", "footer_source_code": "Forráskód",
@ -389,38 +397,40 @@
"adminprefs_modified_source_code_url_label": "A módosított forráskód repositoryjának URL-je:", "adminprefs_modified_source_code_url_label": "A módosított forráskód repositoryjának URL-je:",
"preferences_automatic_instance_redirect_label": "Váltáskor másik Invidious oldal automatikus betöltése (redirect.invidious.io töltődik, ha nem működne): ", "preferences_automatic_instance_redirect_label": "Váltáskor másik Invidious oldal automatikus betöltése (redirect.invidious.io töltődik, ha nem működne): ",
"preferences_region_label": "Ország tartalmainak mutatása: ", "preferences_region_label": "Ország tartalmainak mutatása: ",
"search_filters_sort_option_relevance": "Relevancia", "relevance": "Relevancia",
"search_filters_sort_option_rating": "Pontszám", "rating": "Pontszám",
"search_filters_type_label": "Típus", "content_type": "Típus",
"search_filters_date_option_today": "Mai napon", "today": "Mai napon",
"search_filters_type_option_channel": "Csatorna", "channel": "Csatorna",
"search_filters_type_option_video": "Videó", "video": "Videó",
"search_filters_type_option_playlist": "Lejátszási lista", "playlist": "Lejátszási lista",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_label": "Jellemzők", "features": "Jellemzők",
"search_filters_sort_label": "Rendezés módja", "sort": "Rendezés módja",
"preferences_category_misc": "További beállítások", "preferences_category_misc": "További beállítások",
"%A %B %-d, %Y": "%Y. %B %-d %A", "%A %B %-d, %Y": "%Y. %B %-d %A",
"search_filters_duration_option_long": "Hosszú (20 percnél hosszabb)", "long": "Hosszú (20 percnél hosszabb)",
"search_filters_date_option_year": "Ebben az évben", "year": "Ebben az évben",
"search_filters_date_option_hour": "Az elmúlt órában", "hour": "Az elmúlt órában",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"search_filters_duration_label": "Játékidő", "Broken? Try another Invidious Instance": "Nem működik? Próbáld meg egy másik Invidious oldallal.",
"duration": "Játékidő",
"next_steps_error_message": "Az alábbi lehetőségek állnak rendelkezésre: ", "next_steps_error_message": "Az alábbi lehetőségek állnak rendelkezésre: ",
"Xhosa": "xhosza", "Xhosa": "xhosza",
"Switch Invidious Instance": "Váltás másik Invidious-oldalra", "Switch Invidious Instance": "Váltás másik Invidious-oldalra",
"Urdu": "urdu", "Urdu": "urdu",
"search_filters_date_option_week": "Ezen a héten", "week": "Ezen a héten",
"Invalid TFA code": "A kétlépéses hitelesítés kódja nem megfelelő",
"footer_documentation": "Dokumentáció", "footer_documentation": "Dokumentáció",
"search_filters_features_option_hd": "HD", "hd": "HD",
"next_steps_error_message_go_to_youtube": "Ugrás a YouTube-ra", "next_steps_error_message_go_to_youtube": "Ugrás a YouTube-ra",
"search_filters_type_option_show": "Műsor", "show": "Műsor",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_duration_option_short": "Rövid (4 percnél nem több)", "short": "Rövid (4 percnél nem több)",
"search_filters_date_option_month": "Ebben a hónapban", "month": "Ebben a hónapban",
"search_filters_features_option_subtitles": "Felirattal", "subtitles": "Felirattal",
"search_filters_features_option_location": "Közelben", "location": "Közelben",
"crash_page_you_found_a_bug": "Úgy néz ki, találtál egy hibát az Invidiousban.", "crash_page_you_found_a_bug": "Úgy néz ki, találtál egy hibát az Invidiousban.",
"crash_page_before_reporting": "Mielőtt jelentenéd a hibát:", "crash_page_before_reporting": "Mielőtt jelentenéd a hibát:",
"crash_page_read_the_faq": "olvasd el a <a href=\"`x`\">Gyakran Ismételt Kérdéseket (GYIK)</a>", "crash_page_read_the_faq": "olvasd el a <a href=\"`x`\">Gyakran Ismételt Kérdéseket (GYIK)</a>",
@ -450,19 +460,5 @@
"Italian (auto-generated)": "olasz (automatikusan generált)", "Italian (auto-generated)": "olasz (automatikusan generált)",
"Dutch (auto-generated)": "holland (automatikusan generált)", "Dutch (auto-generated)": "holland (automatikusan generált)",
"French (auto-generated)": "francia (automatikusan generált)", "French (auto-generated)": "francia (automatikusan generált)",
"Vietnamese (auto-generated)": "vietnámi (automatikusan generált)", "Vietnamese (auto-generated)": "vietnámi (automatikusan generált)"
"search_filters_title": "Szűrők",
"preferences_watch_history_label": "Megnézett videók naplózása: ",
"search_message_no_results": "Nincs találat.",
"search_message_change_filters_or_query": "Próbálj meg bővebben rákeresni vagy a szűrőkön állítani.",
"search_message_use_another_instance": " Megpróbálhatod <a href=\"`x`\">egy másik</a> Invidious-oldalon is a keresést.",
"search_filters_date_label": "Feltöltés ideje",
"search_filters_date_option_none": "Mindegy mikor",
"search_filters_type_option_all": "Bármilyen",
"search_filters_duration_option_none": "Mindegy",
"search_filters_duration_option_medium": "Átlagos (4 és 20 perc között)",
"search_filters_features_option_vr180": "180°-os virtuális valóság",
"search_filters_apply_button": "Keresés a megadott szűrőkkel",
"Popular enabled: ": "Népszerű engedélyezve ",
"error_video_not_in_playlist": "A lejátszási listában keresett videó nem létezik. <a href=\"`x`\">Kattintson ide a lejátszási listához jutáshoz.</a>"
} }

@ -19,21 +19,22 @@
"Clear watch history?": "Bersihkan riwayat tontonan?", "Clear watch history?": "Bersihkan riwayat tontonan?",
"New password": "Kata sandi baru", "New password": "Kata sandi baru",
"New passwords must match": "Kata sandi baru harus cocok", "New passwords must match": "Kata sandi baru harus cocok",
"Cannot change password for Google accounts": "Tidak dapat mengganti kata sandi untuk akun Google",
"Authorize token?": "Otorisasi token?", "Authorize token?": "Otorisasi token?",
"Authorize token for `x`?": "Otorisasi token untuk `x`?", "Authorize token for `x`?": "Otorisasi token untuk `x`?",
"Yes": "Ya", "Yes": "Ya",
"No": "Tidak", "No": "Tidak",
"Import and Export Data": "Impor dan Ekspor Data", "Import and Export Data": "Impor dan Ekspor Data",
"Import": "Impor", "Import": "Impor",
"Import Invidious data": "Impor JSON data Invidious", "Import Invidious data": "Impor data Invidious",
"Import YouTube subscriptions": "Impor langganan YouTube/OPML", "Import YouTube subscriptions": "Impor langganan YouTube",
"Import FreeTube subscriptions (.db)": "Impor langganan FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Impor langganan FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Impor langganan NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Impor langganan NewPipe (.json)",
"Import NewPipe data (.zip)": "Impor data NewPipe (.zip)", "Import NewPipe data (.zip)": "Impor data NewPipe (.zip)",
"Export": "Ekspor", "Export": "Ekspor",
"Export subscriptions as OPML": "Ekspor langganan sebagai OPML", "Export subscriptions as OPML": "Ekspor langganan sebagai OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Ekspor langganan sebagai OPML (untuk NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Ekspor langganan sebagai OPML (untuk NewPipe & FreeTube)",
"Export data as JSON": "Ekspor data Invidious sebagai JSON", "Export data as JSON": "Ekspor data sebagai JSON",
"Delete account?": "Hapus akun?", "Delete account?": "Hapus akun?",
"History": "Riwayat", "History": "Riwayat",
"An alternative front-end to YouTube": "Sebuah alternatif layar depan untuk YouTube", "An alternative front-end to YouTube": "Sebuah alternatif layar depan untuk YouTube",
@ -41,6 +42,7 @@
"source": "sumber", "source": "sumber",
"Log in": "Masuk", "Log in": "Masuk",
"Log in/register": "Masuk/Daftar", "Log in/register": "Masuk/Daftar",
"Log in with Google": "Masuk dengan Google",
"User ID": "ID Pengguna", "User ID": "ID Pengguna",
"Password": "Kata Sandi", "Password": "Kata Sandi",
"Time (h:mm:ss):": "Waktu (j:mm:dd):", "Time (h:mm:ss):": "Waktu (j:mm:dd):",
@ -49,6 +51,7 @@
"Sign In": "Masuk", "Sign In": "Masuk",
"Register": "Daftar", "Register": "Daftar",
"E-mail": "Surel", "E-mail": "Surel",
"Google verification code": "Kode verifikasi Google",
"Preferences": "Preferensi", "Preferences": "Preferensi",
"preferences_category_player": "Preferensi pemutar", "preferences_category_player": "Preferensi pemutar",
"preferences_video_loop_label": "Selalu ulangi: ", "preferences_video_loop_label": "Selalu ulangi: ",
@ -68,7 +71,7 @@
"preferences_related_videos_label": "Tampilkan video terkait: ", "preferences_related_videos_label": "Tampilkan video terkait: ",
"preferences_annotations_label": "Tampilkan anotasi secara baku: ", "preferences_annotations_label": "Tampilkan anotasi secara baku: ",
"preferences_extend_desc_label": "Perluas deskripsi video secara otomatis: ", "preferences_extend_desc_label": "Perluas deskripsi video secara otomatis: ",
"preferences_vr_mode_label": "Video interaktif 360° (memerlukan WebGL): ", "preferences_vr_mode_label": "Video interaktif 360°: ",
"preferences_category_visual": "Preferensi visual", "preferences_category_visual": "Preferensi visual",
"preferences_player_style_label": "Gaya pemutar: ", "preferences_player_style_label": "Gaya pemutar: ",
"Dark mode: ": "Mode gelap: ", "Dark mode: ": "Mode gelap: ",
@ -123,9 +126,9 @@
"revoke": "cabut", "revoke": "cabut",
"Subscriptions": "Langganan", "Subscriptions": "Langganan",
"subscriptions_unseen_notifs_count_0": "{{count}} pemberitahuan belum dilihat", "subscriptions_unseen_notifs_count_0": "{{count}} pemberitahuan belum dilihat",
"search": "Telusuri", "search": "cari",
"Log out": "Keluar", "Log out": "Keluar",
"Released under the AGPLv3 on Github.": "Dirilis di bawah AGPLv3 di GitHub.", "Released under the AGPLv3 on Github.": "Dirilis di bawah AGPLv3 di Github.",
"Source available here.": "Sumber tersedia di sini.", "Source available here.": "Sumber tersedia di sini.",
"View JavaScript license information.": "Tampilkan informasi lisensi JavaScript.", "View JavaScript license information.": "Tampilkan informasi lisensi JavaScript.",
"View privacy policy.": "Lihat kebijakan privasi.", "View privacy policy.": "Lihat kebijakan privasi.",
@ -145,6 +148,7 @@
"Show less": "Tampilkan lebih sedikit", "Show less": "Tampilkan lebih sedikit",
"Watch on YouTube": "Tonton di YouTube", "Watch on YouTube": "Tonton di YouTube",
"Switch Invidious Instance": "Ganti peladen Invidious", "Switch Invidious Instance": "Ganti peladen Invidious",
"Broken? Try another Invidious Instance": "Rusak? Coba peladen Invidious yang lain",
"Hide annotations": "Sembunyikan anotasi", "Hide annotations": "Sembunyikan anotasi",
"Show annotations": "Tampilkan anotasi", "Show annotations": "Tampilkan anotasi",
"Genre: ": "Genre: ", "Genre: ": "Genre: ",
@ -168,12 +172,17 @@
"Hide replies": "Sembunyikan balasan", "Hide replies": "Sembunyikan balasan",
"Show replies": "Lihat balasan", "Show replies": "Lihat balasan",
"Incorrect password": "Kata sandi salah", "Incorrect password": "Kata sandi salah",
"Quota exceeded, try again in a few hours": "Kuota penuh, coba lagi dalam beberapa jam",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Tidak dapat masuk, pastikan autentikasi dua-faktor (autentikator atau SMS) sudah nyala.",
"Invalid TFA code": "Kode TFA tidak valid",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Gagal masuk. Ini mungkin disebabkan autentikasi dua-faktor tidak dinyalakan untuk akun Anda.",
"Wrong answer": "Jawaban salah", "Wrong answer": "Jawaban salah",
"Erroneous CAPTCHA": "CAPTCHA salah", "Erroneous CAPTCHA": "CAPTCHA salah",
"CAPTCHA is a required field": "CAPTCHA perlu diisi", "CAPTCHA is a required field": "CAPTCHA perlu diisi",
"User ID is a required field": "ID pengguna perlu diisi", "User ID is a required field": "ID pengguna perlu diisi",
"Password is a required field": "Kata sandi perlu diisi", "Password is a required field": "Kata sandi perlu diisi",
"Wrong username or password": "Nama pengguna atau kata sandi salah", "Wrong username or password": "Nama pengguna atau kata sandi salah",
"Please sign in using 'Log in with Google'": "Harap masuk menggunakan 'Masuk dengan Google'",
"Password cannot be empty": "Kata sandi tidak boleh kosong", "Password cannot be empty": "Kata sandi tidak boleh kosong",
"Password cannot be longer than 55 characters": "Kata sandi tidak boleh lebih dari 55 karakter", "Password cannot be longer than 55 characters": "Kata sandi tidak boleh lebih dari 55 karakter",
"Please log in": "Harap masuk", "Please log in": "Harap masuk",
@ -333,35 +342,36 @@
"`x` marked it with a ❤": "`x` telah ditandai dengan ❤", "`x` marked it with a ❤": "`x` telah ditandai dengan ❤",
"Audio mode": "Mode audio", "Audio mode": "Mode audio",
"Video mode": "Mode video", "Video mode": "Mode video",
"channel_tab_videos_label": "Video", "Videos": "Video",
"Playlists": "Daftar putar", "Playlists": "Daftar putar",
"channel_tab_community_label": "Komunitas", "Community": "Komunitas",
"search_filters_sort_option_relevance": "Relevansi", "relevance": "Relevansi",
"search_filters_sort_option_rating": "Penilaian", "rating": "Penilaian",
"search_filters_sort_option_date": "Tanggal Unggah", "date": "Tanggal unggah",
"search_filters_sort_option_views": "Jumlah ditonton", "views": "Jumlah ditonton",
"search_filters_type_label": "Tipe", "content_type": "Tipe",
"search_filters_duration_label": "Durasi", "duration": "Durasi",
"search_filters_features_label": "Fitur", "features": "Fitur",
"search_filters_sort_label": "Urut Berdasarkan", "sort": "Urut Berdasarkan",
"search_filters_date_option_hour": "Jam Terakhir", "hour": "Jam Terakhir",
"search_filters_date_option_today": "Hari Ini", "today": "Hari Ini",
"search_filters_date_option_week": "Pekan Ini", "week": "Pekan Ini",
"search_filters_date_option_month": "Bulan Ini", "month": "Bulan Ini",
"search_filters_date_option_year": "Tahun Ini", "year": "Tahun Ini",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"search_filters_type_option_playlist": "Daftar Putar", "playlist": "Daftar Putar",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_type_option_show": "Pertunjukan/Acara", "show": "Pertunjukan/Acara",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Takarir", "subtitles": "Takarir",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Siaran Langsung", "live": "Siaran Langsung",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Lokasi", "location": "Lokasi",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Saring",
"Current version: ": "Versi saat ini: ", "Current version: ": "Versi saat ini: ",
"next_steps_error_message": "Setelah itu Anda harus mencoba: ", "next_steps_error_message": "Setelah itu Anda harus mencoba: ",
"next_steps_error_message_refresh": "Segarkan", "next_steps_error_message_refresh": "Segarkan",
@ -370,8 +380,8 @@
"adminprefs_modified_source_code_url_label": "URL ke repositori kode sumber yang dimodifikasi", "adminprefs_modified_source_code_url_label": "URL ke repositori kode sumber yang dimodifikasi",
"footer_source_code": "Kode sumber", "footer_source_code": "Kode sumber",
"footer_original_source_code": "Kode sumber yang asli", "footer_original_source_code": "Kode sumber yang asli",
"search_filters_duration_option_short": "Pendek (< 4 menit)", "short": "Pendek (< 4 menit)",
"search_filters_duration_option_long": "Panjang (> 20 menit)", "long": "Panjang (> 20 menit)",
"footer_modfied_source_code": "Kode sumber yang dimodifikasi", "footer_modfied_source_code": "Kode sumber yang dimodifikasi",
"footer_documentation": "Dokumentasi", "footer_documentation": "Dokumentasi",
"preferences_region_label": "Konten dari negara: ", "preferences_region_label": "Konten dari negara: ",
@ -388,8 +398,8 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_purchased": "Dibeli", "purchased": "Dibeli",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "tidak ada", "none": "tidak ada",
"videoinfo_watch_on_youTube": "Tonton di YouTube", "videoinfo_watch_on_youTube": "Tonton di YouTube",
"videoinfo_youTube_embed_link": "Tersemat", "videoinfo_youTube_embed_link": "Tersemat",
@ -406,45 +416,5 @@
"Video unavailable": "Video tidak tersedia", "Video unavailable": "Video tidak tersedia",
"preferences_save_player_pos_label": "Simpan posisi pemutaran: ", "preferences_save_player_pos_label": "Simpan posisi pemutaran: ",
"crash_page_you_found_a_bug": "Sepertinya kamu telah menemukan masalah di invidious!", "crash_page_you_found_a_bug": "Sepertinya kamu telah menemukan masalah di invidious!",
"crash_page_before_reporting": "Sebelum melaporkan masalah, pastikan anda memiliki:", "crash_page_before_reporting": "Sebelum melaporkan masalah, pastikan anda memiliki:"
"English (United States)": "Inggris (US)",
"preferences_watch_history_label": "Aktifkan riwayat tontonan: ",
"English (United Kingdom)": "Inggris (UK)",
"search_filters_title": "Saring",
"search_message_no_results": "Tidak ada hasil yang ditemukan.",
"search_message_change_filters_or_query": "Coba perbanyak kueri pencarian dan/atau ubah filter Anda.",
"search_message_use_another_instance": " Anda juga bisa <a href=\"`x`\">mencari di peladen lain</a>.",
"Indonesian (auto-generated)": "Indonesia (dibuat secara otomatis)",
"Japanese (auto-generated)": "Jepang (dibuat secara otomatis)",
"Korean (auto-generated)": "Korea (dibuat secara otomatis)",
"Portuguese (Brazil)": "Portugis (Brasil)",
"Russian (auto-generated)": "Rusia (dibuat secara otomatis)",
"Spanish (Mexico)": "Spanyol (Meksiko)",
"Spanish (Spain)": "Spanyol (Spanyol)",
"Vietnamese (auto-generated)": "Vietnam (dibuat secara otomatis)",
"search_filters_features_option_vr180": "VR180",
"Spanish (auto-generated)": "Spanyol (dibuat secara otomatis)",
"Chinese": "Bahasa Cina",
"Chinese (Taiwan)": "Bahasa Cina (Taiwan)",
"Chinese (Hong Kong)": "Bahasa Cina (Hong Kong)",
"Chinese (China)": "Bahasa Cina (China)",
"French (auto-generated)": "Perancis (dibuat secara otomatis)",
"German (auto-generated)": "Jerman (dibuat secara otomatis)",
"Italian (auto-generated)": "Italia (dibuat secara otomatis)",
"Portuguese (auto-generated)": "Portugis (dibuat secara otomatis)",
"Turkish (auto-generated)": "Turki (dibuat secara otomatis)",
"search_filters_date_label": "Tanggal unggah",
"search_filters_type_option_all": "Segala jenis",
"search_filters_apply_button": "Terapkan saringan yang dipilih",
"Dutch (auto-generated)": "Belanda (dihasilkan secara otomatis)",
"search_filters_date_option_none": "Tanggal berapa pun",
"search_filters_duration_option_none": "Durasi berapa pun",
"search_filters_duration_option_medium": "Sedang (4 - 20 menit)",
"Cantonese (Hong Kong)": "Bahasa Kanton (Hong Kong)",
"crash_page_refresh": "mencoba untuk <a href=\"`x`\">memuat ulang halaman</a>",
"crash_page_switch_instance": "mencoba untuk <a href=\"`x`\">menggunakan peladen lainnya</a>",
"crash_page_read_the_faq": "baca <a href=\"`x`\">Soal Sering Ditanya (SSD/FAQ)</a>",
"crash_page_search_issue": "mencari <a href=\"`x`\">isu yang ada di GitHub</a>",
"crash_page_report_issue": "Jika yang di atas tidak membantu, <a href=\"`x`\">buka isu baru di GitHub</a> (sebaiknya dalam bahasa Inggris) dan sertakan teks berikut dalam pesan Anda (JANGAN terjemahkan teks tersebut):",
"Popular enabled: ": "Populer diaktifkan: "
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Hreinsa áhorfssögu?", "Clear watch history?": "Hreinsa áhorfssögu?",
"New password": "Nýtt lykilorð", "New password": "Nýtt lykilorð",
"New passwords must match": "Nýtt lykilorð verður að passa", "New passwords must match": "Nýtt lykilorð verður að passa",
"Cannot change password for Google accounts": "Ekki er hægt að breyta lykilorði fyrir Google reikninga",
"Authorize token?": "Leyfa tákn?", "Authorize token?": "Leyfa tákn?",
"Authorize token for `x`?": "Leyfa tákn fyrir `x`?", "Authorize token for `x`?": "Leyfa tákn fyrir `x`?",
"Yes": "Já", "Yes": "Já",
@ -36,6 +37,7 @@
"source": "uppspretta", "source": "uppspretta",
"Log in": "Skrá inn", "Log in": "Skrá inn",
"Log in/register": "Innskráning/nýskráning", "Log in/register": "Innskráning/nýskráning",
"Log in with Google": "Skrá inn með Google",
"User ID": "Notandakenni", "User ID": "Notandakenni",
"Password": "Lykilorð", "Password": "Lykilorð",
"Time (h:mm:ss):": "Tími (h:mm: ss):", "Time (h:mm:ss):": "Tími (h:mm: ss):",
@ -44,6 +46,7 @@
"Sign In": "Skrá inn", "Sign In": "Skrá inn",
"Register": "Nýskrá", "Register": "Nýskrá",
"E-mail": "Tölvupóstur", "E-mail": "Tölvupóstur",
"Google verification code": "Google staðfestingarkóði",
"Preferences": "Kjörstillingar", "Preferences": "Kjörstillingar",
"preferences_category_player": "Kjörstillingar spilara", "preferences_category_player": "Kjörstillingar spilara",
"preferences_video_loop_label": "Alltaf lykkja: ", "preferences_video_loop_label": "Alltaf lykkja: ",
@ -152,12 +155,17 @@
"Hide replies": "Fela svör", "Hide replies": "Fela svör",
"Show replies": "Sýna svör", "Show replies": "Sýna svör",
"Incorrect password": "Rangt lykilorð", "Incorrect password": "Rangt lykilorð",
"Quota exceeded, try again in a few hours": "Kvóti fór yfir, reyndu aftur eftir nokkrar klukkustundir",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Ekki er hægt að skrá þig inn, vertu viss um að tvíþætt staðfesting (Authenticator eða SMS) sé kveikt á.",
"Invalid TFA code": "Ógildur TFA kóði",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Innskráning mistókst. Þetta gæti verið vegna þess að tvíþátta staðfesting er ekki kveikt á reikningnum þínum.",
"Wrong answer": "Rangt svar", "Wrong answer": "Rangt svar",
"Erroneous CAPTCHA": "Rangt CAPTCHA", "Erroneous CAPTCHA": "Rangt CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA er nauðsynlegur reitur", "CAPTCHA is a required field": "CAPTCHA er nauðsynlegur reitur",
"User ID is a required field": "Notandakenni er nauðsynlegur reitur", "User ID is a required field": "Notandakenni er nauðsynlegur reitur",
"Password is a required field": "Lykilorð er nauðsynlegur reitur", "Password is a required field": "Lykilorð er nauðsynlegur reitur",
"Wrong username or password": "Rangt notandanafn eða lykilorð", "Wrong username or password": "Rangt notandanafn eða lykilorð",
"Please sign in using 'Log in with Google'": "Vinsamlegast skráðu þig inn með því að nota 'Innskráning með Google'",
"Password cannot be empty": "Lykilorð má ekki vera autt", "Password cannot be empty": "Lykilorð má ekki vera autt",
"Password cannot be longer than 55 characters": "Lykilorð má ekki vera lengra en 55 stafir", "Password cannot be longer than 55 characters": "Lykilorð má ekki vera lengra en 55 stafir",
"Please log in": "Vinsamlegast skráðu þig inn", "Please log in": "Vinsamlegast skráðu þig inn",
@ -307,9 +315,9 @@
"`x` marked it with a ❤": "`x` merkti það með ❤", "`x` marked it with a ❤": "`x` merkti það með ❤",
"Audio mode": "Hljóð ham", "Audio mode": "Hljóð ham",
"Video mode": "Myndband ham", "Video mode": "Myndband ham",
"channel_tab_videos_label": "Myndbönd", "Videos": "Myndbönd",
"Playlists": "Spilunarlistar", "Playlists": "Spilunarlistar",
"channel_tab_community_label": "Samfélag", "Community": "Samfélag",
"Current version: ": "Núverandi útgáfa: ", "Current version: ": "Núverandi útgáfa: ",
"preferences_watch_history_label": "Virkja áhorfssögu: " "preferences_watch_history_label": "Virkja áhorfssögu: "
} }

@ -14,27 +14,28 @@
"newest": "più recente", "newest": "più recente",
"oldest": "più vecchio", "oldest": "più vecchio",
"popular": "Tendenze", "popular": "Tendenze",
"last": "ultimo", "last": "durare",
"Next page": "Pagina successiva", "Next page": "Pagina successiva",
"Previous page": "Pagina precedente", "Previous page": "Pagina precedente",
"Clear watch history?": "Eliminare la cronologia dei video guardati?", "Clear watch history?": "Eliminare la cronologia dei video guardati?",
"New password": "Nuova password", "New password": "Nuova password",
"New passwords must match": "Le nuove password devono corrispondere", "New passwords must match": "Le nuove password devono corrispondere",
"Cannot change password for Google accounts": "Non è possibile modificare la password per gli account Google",
"Authorize token?": "Autorizzare gettone?", "Authorize token?": "Autorizzare gettone?",
"Authorize token for `x`?": "Autorizzare gettone per `x`?", "Authorize token for `x`?": "Autorizzare gettone per `x`?",
"Yes": "Sì", "Yes": "Sì",
"No": "No", "No": "No",
"Import and Export Data": "Importazione ed esportazione dati", "Import and Export Data": "Importazione ed esportazione dati",
"Import": "Importa", "Import": "Importa",
"Import Invidious data": "Importa dati Invidious in formato JSON", "Import Invidious data": "Importa dati Invidious",
"Import YouTube subscriptions": "Importa le iscrizioni da YouTube/OPML", "Import YouTube subscriptions": "Importa le iscrizioni da YouTube",
"Import FreeTube subscriptions (.db)": "Importa le iscrizioni da FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importa le iscrizioni da FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importa le iscrizioni da NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importa le iscrizioni da NewPipe (.json)",
"Import NewPipe data (.zip)": "Importa i dati di NewPipe (.zip)", "Import NewPipe data (.zip)": "Importa i dati di NewPipe (.zip)",
"Export": "Esporta", "Export": "Esporta",
"Export subscriptions as OPML": "Esporta gli abbonamenti come OPML", "Export subscriptions as OPML": "Esporta gli abbonamenti come OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Esporta gli abbonamenti come OPML (per NewPipe e FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Esporta gli abbonamenti come OPML (per NewPipe e FreeTube)",
"Export data as JSON": "Esporta i dati Invidious in formato JSON", "Export data as JSON": "Esporta i dati in formato JSON",
"Delete account?": "Eliminare l'account?", "Delete account?": "Eliminare l'account?",
"History": "Cronologia", "History": "Cronologia",
"An alternative front-end to YouTube": "Un'interfaccia alternativa per YouTube", "An alternative front-end to YouTube": "Un'interfaccia alternativa per YouTube",
@ -42,6 +43,7 @@
"source": "sorgente", "source": "sorgente",
"Log in": "Accedi", "Log in": "Accedi",
"Log in/register": "Accedi/Registrati", "Log in/register": "Accedi/Registrati",
"Log in with Google": "Accedi con Google",
"User ID": "ID utente", "User ID": "ID utente",
"Password": "Password", "Password": "Password",
"Time (h:mm:ss):": "Orario (h:mm:ss):", "Time (h:mm:ss):": "Orario (h:mm:ss):",
@ -50,6 +52,7 @@
"Sign In": "Accedi", "Sign In": "Accedi",
"Register": "Registrati", "Register": "Registrati",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Codice di verifica Google",
"Preferences": "Preferenze", "Preferences": "Preferenze",
"preferences_category_player": "Preferenze del riproduttore", "preferences_category_player": "Preferenze del riproduttore",
"preferences_video_loop_label": "Ripeti sempre: ", "preferences_video_loop_label": "Ripeti sempre: ",
@ -155,7 +158,7 @@
"generic_views_count_plural": "{{count}} visualizzazioni", "generic_views_count_plural": "{{count}} visualizzazioni",
"Premieres in `x`": "In anteprima in `x`", "Premieres in `x`": "In anteprima in `x`",
"Premieres `x`": "In anteprima `x`", "Premieres `x`": "In anteprima `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Ciao, Sembra che tu abbia disattivato JavaScript. Clicca qui per visualizzare i commenti, ma considera che il caricamento potrebbe richiedere più tempo.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Ciao! Sembra che tu abbia disattivato JavaScript. Clicca qui per visualizzare i commenti. Considera che potrebbe volerci più tempo.",
"View YouTube comments": "Visualizza i commenti da YouTube", "View YouTube comments": "Visualizza i commenti da YouTube",
"View more comments on Reddit": "Visualizza più commenti su Reddit", "View more comments on Reddit": "Visualizza più commenti su Reddit",
"View `x` comments": { "View `x` comments": {
@ -166,12 +169,17 @@
"Hide replies": "Nascondi le risposte", "Hide replies": "Nascondi le risposte",
"Show replies": "Mostra le risposte", "Show replies": "Mostra le risposte",
"Incorrect password": "Password sbagliata", "Incorrect password": "Password sbagliata",
"Quota exceeded, try again in a few hours": "Limite superato, prova di nuovo fra qualche ora",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Impossibile autenticarsi, controlla che l'autenticazione in due passaggi (Authenticator o SMS) sia attiva.",
"Invalid TFA code": "Codice di autenticazione a due fattori non valido",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Login fallito. L'errore potrebbe essere causato dal fatto che la verifica in due passaggi non è attiva sul tuo account.",
"Wrong answer": "Risposta errata", "Wrong answer": "Risposta errata",
"Erroneous CAPTCHA": "CAPTCHA errato", "Erroneous CAPTCHA": "CAPTCHA errato",
"CAPTCHA is a required field": "Il CAPTCHA è un campo obbligatorio", "CAPTCHA is a required field": "Il CAPTCHA è un campo obbligatorio",
"User ID is a required field": "L'ID utente è obbligatorio", "User ID is a required field": "L'ID utente è obbligatorio",
"Password is a required field": "La password è un campo obbligatorio", "Password is a required field": "La password è un campo obbligatorio",
"Wrong username or password": "Nome utente o password errati", "Wrong username or password": "Nome utente o password errati",
"Please sign in using 'Log in with Google'": "Per favore accedi con «Entra con Google»",
"Password cannot be empty": "La password non può essere vuota", "Password cannot be empty": "La password non può essere vuota",
"Password cannot be longer than 55 characters": "La password non può contenere più di 55 caratteri", "Password cannot be longer than 55 characters": "La password non può contenere più di 55 caratteri",
"Please log in": "Per favore, accedi", "Please log in": "Per favore, accedi",
@ -204,7 +212,7 @@
"Azerbaijani": "Azero", "Azerbaijani": "Azero",
"Bangla": "Bengalese", "Bangla": "Bengalese",
"Basque": "Basco", "Basque": "Basco",
"Belarusian": "Bielorusso", "Belarusian": "Biellorusso",
"Bosnian": "Bosniaco", "Bosnian": "Bosniaco",
"Bulgarian": "Bulgaro", "Bulgarian": "Bulgaro",
"Burmese": "Birmano", "Burmese": "Birmano",
@ -230,10 +238,10 @@
"Haitian Creole": "Creolo haitiano", "Haitian Creole": "Creolo haitiano",
"Hausa": "Lingua hausa", "Hausa": "Lingua hausa",
"Hawaiian": "Hawaiano", "Hawaiian": "Hawaiano",
"Hebrew": "Ebraico", "Hebrew": "Ebreo",
"Hindi": "Hindi", "Hindi": "Hindi",
"Hmong": "Hmong", "Hmong": "Hmong",
"Hungarian": "Ungherese", "Hungarian": "Ungarese",
"Icelandic": "Islandese", "Icelandic": "Islandese",
"Igbo": "Igbo", "Igbo": "Igbo",
"Indonesian": "Indonesiano", "Indonesian": "Indonesiano",
@ -246,7 +254,7 @@
"Khmer": "Khmer", "Khmer": "Khmer",
"Korean": "Coreano", "Korean": "Coreano",
"Kurdish": "Curdo", "Kurdish": "Curdo",
"Kyrgyz": "Kirghiso", "Kyrgyz": "Kirghize",
"Lao": "Lao", "Lao": "Lao",
"Latin": "Latino", "Latin": "Latino",
"Latvian": "Lettone", "Latvian": "Lettone",
@ -261,7 +269,7 @@
"Marathi": "Marathi", "Marathi": "Marathi",
"Mongolian": "Mongolo", "Mongolian": "Mongolo",
"Nepali": "Nepalese", "Nepali": "Nepalese",
"Norwegian Bokmål": "Norvegese bokmål", "Norwegian Bokmål": "Norvegese",
"Nyanja": "Nyanja", "Nyanja": "Nyanja",
"Pashto": "Pashtu", "Pashto": "Pashtu",
"Persian": "Persiano", "Persian": "Persiano",
@ -270,7 +278,7 @@
"Punjabi": "Punjabi", "Punjabi": "Punjabi",
"Romanian": "Rumeno", "Romanian": "Rumeno",
"Russian": "Russo", "Russian": "Russo",
"Samoan": "Samoano", "Samoan": "Samoan",
"Scottish Gaelic": "Gaelico scozzese", "Scottish Gaelic": "Gaelico scozzese",
"Serbian": "Serbo", "Serbian": "Serbo",
"Shona": "Shona", "Shona": "Shona",
@ -282,18 +290,18 @@
"Southern Sotho": "Sotho del Sud", "Southern Sotho": "Sotho del Sud",
"Spanish": "Spagnolo", "Spanish": "Spagnolo",
"Spanish (Latin America)": "Spagnolo (America latina)", "Spanish (Latin America)": "Spagnolo (America latina)",
"Sundanese": "Sundanese", "Sundanese": "Sudanese",
"Swahili": "Swahili", "Swahili": "Swahili",
"Swedish": "Svedese", "Swedish": "Svedese",
"Tajik": "Tagico", "Tajik": "Tajik",
"Tamil": "Tamil", "Tamil": "Tamil",
"Telugu": "Telugu", "Telugu": "Telugu",
"Thai": "Thailandese", "Thai": "Thaï",
"Turkish": "Turco", "Turkish": "Turco",
"Ukrainian": "Ucraino", "Ukrainian": "Ucraino",
"Urdu": "Urdu", "Urdu": "Urdu",
"Uzbek": "Uzbeco", "Uzbek": "Uzbeco",
"Vietnamese": "Vietnamita", "Vietnamese": "Vietnamese",
"Welsh": "Gallese", "Welsh": "Gallese",
"Western Frisian": "Frisone occidentale", "Western Frisian": "Frisone occidentale",
"Xhosa": "Xhosa", "Xhosa": "Xhosa",
@ -332,37 +340,39 @@
"%A %B %-d, %Y": "%A %-d %B %Y", "%A %B %-d, %Y": "%A %-d %B %Y",
"(edited)": "(modificato)", "(edited)": "(modificato)",
"YouTube comment permalink": "Link permanente al commento di YouTube", "YouTube comment permalink": "Link permanente al commento di YouTube",
"permalink": "perma-collegamento", "permalink": "permalink",
"`x` marked it with a ❤": "`x` l'ha contrassegnato con un ❤", "`x` marked it with a ❤": "`x` l'ha contrassegnato con un ❤",
"Audio mode": "Modalità audio", "Audio mode": "Modalità audio",
"Video mode": "Modalità video", "Video mode": "Modalità video",
"channel_tab_videos_label": "Video", "Videos": "Video",
"Playlists": "Playlist", "Playlists": "Playlist",
"search_filters_sort_option_relevance": "Pertinenza", "Community": "Comunità",
"search_filters_sort_option_rating": "Valutazione", "relevance": "Pertinenza",
"search_filters_sort_option_date": "Data di caricamento", "rating": "Valutazione",
"search_filters_sort_option_views": "Numero di visualizzazioni", "date": "Data di caricamento",
"search_filters_type_label": "Tipo", "views": "Numero di visualizzazioni",
"search_filters_duration_label": "Durata", "content_type": "Tipo",
"search_filters_features_label": "Caratteristiche", "duration": "Durata",
"search_filters_sort_label": "Ordina per", "features": "Caratteristiche",
"search_filters_date_option_hour": "Ultima ora", "sort": "Ordina per",
"search_filters_date_option_today": "Oggi", "hour": "Ultima ora",
"search_filters_date_option_week": "Questa settimana", "today": "Oggi",
"search_filters_date_option_month": "Questo mese", "week": "Questa settimana",
"search_filters_date_option_year": "Quest'anno", "month": "Questo mese",
"search_filters_type_option_video": "Video", "year": "Quest'anno",
"search_filters_type_option_channel": "Canale", "video": "Video",
"search_filters_type_option_playlist": "Playlist", "channel": "Canale",
"search_filters_type_option_movie": "Film", "playlist": "Playlist",
"search_filters_features_option_hd": "HD", "movie": "Film",
"search_filters_features_option_subtitles": "Sottotitoli / CC", "hd": "AD",
"search_filters_features_option_c_commons": "Creative Commons", "subtitles": "Sottotitoli / CC",
"search_filters_features_option_three_d": "3D", "creative_commons": "Creative Commons",
"search_filters_features_option_live": "In diretta", "3d": "3D",
"search_filters_features_option_four_k": "4K", "live": "In diretta",
"search_filters_features_option_location": "Posizione", "4k": "4K",
"search_filters_features_option_hdr": "HDR", "location": "Posizione",
"hdr": "HDR",
"filter": "Filtra",
"Current version: ": "Versione attuale: ", "Current version: ": "Versione attuale: ",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_360p": "360p", "preferences_quality_dash_option_360p": "360p",
@ -372,109 +382,15 @@
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_2160p": "2160p", "preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"Released under the AGPLv3 on Github.": "Pubblicato su GitHub con licenza AGPLv3.", "Released under the AGPLv3 on Github.": "Rilasciato su Github con licenza AGPLv3.",
"preferences_quality_option_medium": "Media", "preferences_quality_option_medium": "Media",
"preferences_quality_option_small": "Limitata", "preferences_quality_option_small": "Piccola",
"preferences_quality_dash_option_best": "Migliore", "preferences_quality_dash_option_best": "Migliore",
"preferences_quality_dash_option_worst": "Peggiore", "preferences_quality_dash_option_worst": "Peggiore",
"invidious": "Invidious", "invidious": "Invidious",
"preferences_quality_dash_label": "Qualità video DASH preferita: ", "preferences_quality_dash_label": "Qualità video DASH preferita ",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_auto": "Automatica", "preferences_quality_dash_option_auto": "Automatica"
"videoinfo_watch_on_youTube": "Guarda su YouTube",
"preferences_extend_desc_label": "Estendi automaticamente la descrizione del video: ",
"preferences_vr_mode_label": "Video interattivi a 360 gradi: ",
"Show less": "Mostra di meno",
"Switch Invidious Instance": "Cambia istanza Invidious",
"next_steps_error_message_go_to_youtube": "Andare su YouTube",
"footer_documentation": "Documentazione",
"footer_original_source_code": "Codice sorgente originale",
"footer_modfied_source_code": "Codice sorgente modificato",
"none": "nessuno",
"videoinfo_started_streaming_x_ago": "Ha iniziato a trasmettere `x` fa",
"download_subtitles": "Sottotitoli - `x` (.vtt)",
"user_saved_playlists": "playlist salvate da `x`",
"preferences_automatic_instance_redirect_label": "Reindirizzamento automatico dell'istanza (ripiego su redirect.invidious.io): ",
"Video unavailable": "Video non disponibile",
"preferences_show_nick_label": "Mostra nickname in alto: ",
"videoinfo_youTube_embed_link": "Incorpora",
"videoinfo_invidious_embed_link": "Incorpora collegamento",
"user_created_playlists": "playlist create da `x`",
"preferences_save_player_pos_label": "Memorizza il minutaggio raggiunto dal video: ",
"preferences_quality_option_dash": "DASH (qualità adattiva)",
"preferences_region_label": "Nazione del contenuto: ",
"preferences_category_misc": "Preferenze varie",
"next_steps_error_message": "Dopodiché dovresti provare a: ",
"next_steps_error_message_refresh": "Aggiornare",
"footer_donate_page": "Dona",
"footer_source_code": "Codice sorgente",
"adminprefs_modified_source_code_url_label": "Link per il repository del codice sorgente modificato",
"Show more": "Mostra di più",
"search_filters_title": "Filtra",
"search_filters_type_option_show": "Serie",
"search_filters_duration_option_short": "Corto (< 4 minuti)",
"search_filters_duration_option_long": "Lungo (> 20 minuti)",
"search_filters_features_option_purchased": "Acquistato",
"comments_view_x_replies": "Vedi {{count}} risposta",
"comments_view_x_replies_plural": "Vedi {{count}} risposte",
"comments_points_count": "{{count}} punto",
"comments_points_count_plural": "{{count}} punti",
"Portuguese (auto-generated)": "Portoghese (generati automaticamente)",
"crash_page_you_found_a_bug": "Sembra che tu abbia trovato un bug in Invidious!",
"crash_page_switch_instance": "provato a <a href=\"`x`\">usare un'altra istanza</a>",
"crash_page_before_reporting": "Prima di segnalare un bug, assicurati di aver:",
"crash_page_read_the_faq": "letto le <a href=\"`x`\">domande più frequenti (FAQ)</a>",
"crash_page_search_issue": "cercato tra <a href=\"`x`\"> i problemi esistenti su GitHub</a>",
"crash_page_report_issue": "Se niente di tutto ciò ha aiutato, per favore <a href=\"`x`\">apri un nuovo problema su GitHub</a> (preferibilmente in inglese) e includi il seguente testo nel tuo messaggio (NON tradurre il testo):",
"Popular enabled: ": "Popolare attivato: ",
"English (United Kingdom)": "Inglese (Regno Unito)",
"Portuguese (Brazil)": "Portoghese (Brasile)",
"preferences_watch_history_label": "Attiva cronologia di riproduzione: ",
"French (auto-generated)": "Francese (generati automaticamente)",
"search_message_use_another_instance": " Puoi anche <a href=\"`x`\">cercare in un'altra istanza</a>.",
"search_message_no_results": "Nessun risultato trovato.",
"search_message_change_filters_or_query": "Prova ad ampliare la ricerca e/o modificare i filtri.",
"English (United States)": "Inglese (Stati Uniti)",
"Cantonese (Hong Kong)": "Cantonese (Hong Kong)",
"Chinese": "Cinese",
"Chinese (China)": "Cinese (Cina)",
"Chinese (Hong Kong)": "Cinese (Hong Kong)",
"Chinese (Taiwan)": "Cinese (Taiwan)",
"Dutch (auto-generated)": "Olandese (generati automaticamente)",
"German (auto-generated)": "Tedesco (generati automaticamente)",
"Indonesian (auto-generated)": "Indonesiano (generati automaticamente)",
"Interlingue": "Interlingua",
"Italian (auto-generated)": "Italiano (generati automaticamente)",
"Japanese (auto-generated)": "Giapponese (generati automaticamente)",
"Korean (auto-generated)": "Coreano (generati automaticamente)",
"Russian (auto-generated)": "Russo (generati automaticamente)",
"Spanish (auto-generated)": "Spagnolo (generati automaticamente)",
"Spanish (Mexico)": "Spagnolo (Messico)",
"Spanish (Spain)": "Spagnolo (Spagna)",
"Turkish (auto-generated)": "Turco (auto-generato)",
"Vietnamese (auto-generated)": "Vietnamita (auto-generato)",
"search_filters_date_label": "Data caricamento",
"search_filters_date_option_none": "Qualunque data",
"search_filters_type_option_all": "Qualunque tipo",
"search_filters_duration_option_none": "Qualunque durata",
"search_filters_duration_option_medium": "Media (4 - 20 minuti)",
"search_filters_features_option_vr180": "VR180",
"search_filters_apply_button": "Applica filtri selezionati",
"crash_page_refresh": "provato a <a href=\"`x`\">ricaricare la pagina</a>",
"error_video_not_in_playlist": "Il video richiesto non esiste in questa playlist. <a href=\"`x`\">Fai clic qui per la pagina iniziale della playlist.</a>",
"channel_tab_shorts_label": "Short",
"channel_tab_playlists_label": "Playlist",
"channel_tab_channels_label": "Canali",
"channel_tab_streams_label": "Livestream",
"channel_tab_community_label": "Comunità",
"Music in this video": "Musica in questo video",
"Artist: ": "Artista: ",
"Album: ": "Album: ",
"Download is disabled": "Il download è disabilitato",
"Song: ": "Canzone: ",
"Standard YouTube license": "Licenza standard di YouTube",
"Channel Sponsor": "Sponsor del canale",
"Import YouTube playlist (.csv)": "Importa playlist di YouTube (.csv)"
} }

@ -1,15 +1,15 @@
{ {
"generic_views_count_0": "{{count}} 回視聴", "generic_views_count_0": "{{count}} 回視聴",
"generic_videos_count_0": "{{count}}の動画", "generic_videos_count_0": "{{count}}の動画",
"generic_playlists_count_0": "{{count}} 個の再生リスト", "generic_playlists_count_0": "{{count}} 個の再生リスト",
"generic_subscribers_count_0": "{{count}} 人の登録者", "generic_subscribers_count_0": "{{count}} 人の登録者",
"generic_subscriptions_count_0": "{{count}} 個の登録チャンネル", "generic_subscriptions_count_0": "{{count}} 個の登録チャンネル",
"LIVE": "ライブ", "LIVE": "ライブ",
"Shared `x` ago": "`x`前に公開", "Shared `x` ago": "`x`前に共有",
"Unsubscribe": "登録解除", "Unsubscribe": "登録解除",
"Subscribe": "登録", "Subscribe": "登録",
"View channel on YouTube": "YouTube でチャンネルを表示", "View channel on YouTube": "YouTube でチャンネルを見る",
"View playlist on YouTube": "YouTube で再生リストを表示", "View playlist on YouTube": "YouTube で再生リストを見る",
"newest": "新しい順", "newest": "新しい順",
"oldest": "古い順", "oldest": "古い順",
"popular": "人気順", "popular": "人気順",
@ -19,21 +19,22 @@
"Clear watch history?": "再生履歴を削除しますか?", "Clear watch history?": "再生履歴を削除しますか?",
"New password": "新しいパスワード", "New password": "新しいパスワード",
"New passwords must match": "新しいパスワードが一致していません", "New passwords must match": "新しいパスワードが一致していません",
"Cannot change password for Google accounts": "Google アカウントのパスワードは変更できません",
"Authorize token?": "トークンを認証しますか?", "Authorize token?": "トークンを認証しますか?",
"Authorize token for `x`?": "トークン `x` を認証しますか?", "Authorize token for `x`?": "トークン `x` を認証しますか?",
"Yes": "はい", "Yes": "はい",
"No": "いいえ", "No": "いいえ",
"Import and Export Data": "データのインポートとエクスポート", "Import and Export Data": "データのインポートとエクスポート",
"Import": "インポート", "Import": "インポート",
"Import Invidious data": "Invidious JSONデータをインポート", "Import Invidious data": "Invidious データをインポート",
"Import YouTube subscriptions": "YouTube/OPML 登録チャンネルをインポート", "Import YouTube subscriptions": "YouTube 登録チャンネルをインポート",
"Import FreeTube subscriptions (.db)": "FreeTube 登録チャンネルをインポート (.db)", "Import FreeTube subscriptions (.db)": "FreeTube 登録チャンネルをインポート (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe 登録チャンネルをインポート (.json)", "Import NewPipe subscriptions (.json)": "NewPipe 登録チャンネルをインポート (.json)",
"Import NewPipe data (.zip)": "NewPipe データをインポート (.zip)", "Import NewPipe data (.zip)": "NewPipe データをインポート (.zip)",
"Export": "エクスポート", "Export": "エクスポート",
"Export subscriptions as OPML": "登録チャンネルを OPML でエクスポート", "Export subscriptions as OPML": "登録チャンネルを OPML でエクスポート",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "登録チャンネルを OPML でエクスポート (NewPipe & FreeTube 用)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "登録チャンネルを OPML でエクスポート (NewPipe & FreeTube 用)",
"Export data as JSON": "Invidious のデータを JSON でエクスポート", "Export data as JSON": "データを JSON でエクスポート",
"Delete account?": "アカウントを削除しますか?", "Delete account?": "アカウントを削除しますか?",
"History": "履歴", "History": "履歴",
"An alternative front-end to YouTube": "YouTube 向けの代用フロントエンド", "An alternative front-end to YouTube": "YouTube 向けの代用フロントエンド",
@ -41,6 +42,7 @@
"source": "ソース", "source": "ソース",
"Log in": "ログイン", "Log in": "ログイン",
"Log in/register": "ログイン/登録", "Log in/register": "ログイン/登録",
"Log in with Google": "Google でログイン",
"User ID": "ユーザー ID", "User ID": "ユーザー ID",
"Password": "パスワード", "Password": "パスワード",
"Time (h:mm:ss):": "時間 (時:分分:秒秒):", "Time (h:mm:ss):": "時間 (時:分分:秒秒):",
@ -49,37 +51,38 @@
"Sign In": "サインイン", "Sign In": "サインイン",
"Register": "登録", "Register": "登録",
"E-mail": "メールアドレス", "E-mail": "メールアドレス",
"Google verification code": "Google 認証コード",
"Preferences": "設定", "Preferences": "設定",
"preferences_category_player": "プレイヤー設定", "preferences_category_player": "プレイヤー設定",
"preferences_video_loop_label": "常にループ: ", "preferences_video_loop_label": "常にループ: ",
"preferences_autoplay_label": "自動再生: ", "preferences_autoplay_label": "自動再生: ",
"preferences_continue_label": "の動画を再生をオン: ", "preferences_continue_label": "デフォルトで次を再生: ",
"preferences_continue_autoplay_label": "次の動画を自動再生: ", "preferences_continue_autoplay_label": "次の動画を自動再生: ",
"preferences_listen_label": "音声モードを使用: ", "preferences_listen_label": "デフォルトでオーディオモードを使用: ",
"preferences_local_label": "動画視聴にプロキシを経由: ", "preferences_local_label": "動画をプロキシーに通す: ",
"preferences_speed_label": "再生速度の初期値: ", "preferences_speed_label": "デフォルトの再生速度: ",
"preferences_quality_label": "優先する画質: ", "preferences_quality_label": "優先する画質: ",
"preferences_volume_label": "プレイヤーの音量: ", "preferences_volume_label": "プレイヤーの音量: ",
"preferences_comments_label": "デフォルトのコメント: ", "preferences_comments_label": "デフォルトのコメント: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "Reddit",
"preferences_captions_label": "優先する字幕: ", "preferences_captions_label": "デフォルトの字幕: ",
"Fallback captions: ": "フォールバック時の字幕: ", "Fallback captions: ": "フォールバック時の字幕: ",
"preferences_related_videos_label": "関連動画を表示: ", "preferences_related_videos_label": "関連動画を表示: ",
"preferences_annotations_label": "最初からアノテーションを表示: ", "preferences_annotations_label": "デフォルトでアノテーションを表示: ",
"preferences_extend_desc_label": "動画の説明文を自動的に拡張: ", "preferences_extend_desc_label": "動画の説明文を自動的に拡張: ",
"preferences_vr_mode_label": "対話的な360°動画 (WebGL が必要): ", "preferences_vr_mode_label": "対話的な360°動画: ",
"preferences_category_visual": "外観設定", "preferences_category_visual": "外観設定",
"preferences_player_style_label": "プレイヤースタイル: ", "preferences_player_style_label": "プレイヤースタイル: ",
"Dark mode: ": "ダークモード: ", "Dark mode: ": "ダークモード: ",
"preferences_dark_mode_label": "テーマ: ", "preferences_dark_mode_label": "テーマ: ",
"dark": "ダーク", "dark": "ダーク",
"light": "ライト", "light": "ライト",
"preferences_thin_mode_label": "最小モード: ", "preferences_thin_mode_label": "最小モード: ",
"preferences_category_misc": "ほかの設定", "preferences_category_misc": "設定",
"preferences_automatic_instance_redirect_label": "インスタンスの自動転送 (redirect.invidious.ioにフォールバック): ", "preferences_automatic_instance_redirect_label": "自動的なインスタンスの移転redirect.invidious.ioにフォールバック ",
"preferences_category_subscription": "登録チャンネル設定", "preferences_category_subscription": "登録チャンネル設定",
"preferences_annotations_subscribed_label": "最初から登録チャンネルのアノテーションを表示 ", "preferences_annotations_subscribed_label": "デフォルトで登録チャンネルのアノテーションを表示しますか? ",
"Redirect homepage to feed: ": "ホームからフィードにリダイレクト: ", "Redirect homepage to feed: ": "ホームからフィードにリダイレクト: ",
"preferences_max_results_label": "フィードに表示する動画の量: ", "preferences_max_results_label": "フィードに表示する動画の量: ",
"preferences_sort_label": "動画を並び替え: ", "preferences_sort_label": "動画を並び替え: ",
@ -105,99 +108,105 @@
"Watch history": "再生履歴", "Watch history": "再生履歴",
"Delete account": "アカウントを削除", "Delete account": "アカウントを削除",
"preferences_category_admin": "管理者設定", "preferences_category_admin": "管理者設定",
"preferences_default_home_label": "ホームに表示するページ: ", "preferences_default_home_label": "デフォルトのホーム: ",
"preferences_feed_menu_label": "フィードメニュー: ", "preferences_feed_menu_label": "フィードメニュー: ",
"preferences_show_nick_label": "ログイン名を上部に表示: ", "preferences_show_nick_label": "ニックネームを一番上に表示する: ",
"Top enabled: ": "トップページを有効化: ", "Top enabled: ": "トップページを有効化: ",
"CAPTCHA enabled: ": "CAPTCHA を有効化: ", "CAPTCHA enabled: ": "CAPTCHA を有効化: ",
"Login enabled: ": "ログインを有効化: ", "Login enabled: ": "ログインを有効化: ",
"Registration enabled: ": "登録を有効化: ", "Registration enabled: ": "登録を有効化: ",
"Report statistics: ": "統計を報告: ", "Report statistics: ": "統計を報告: ",
"Save preferences": "設定を保存", "Save preferences": "設定を保存",
"Subscription manager": "登録チャンネルの管理", "Subscription manager": "登録チャンネルマネージャー",
"Token manager": "トークンの管理", "Token manager": "トークンマネージャー",
"Token": "トークン", "Token": "トークン",
"tokens_count_0": "{{count}} 個のトークン", "tokens_count_0": "{{count}} 個のトークン",
"Import/export": "インポート/エクスポート", "Import/export": "インポート/エクスポート",
"unsubscribe": "登録解除", "unsubscribe": "登録解除",
"revoke": "取り消す", "revoke": "取り消す",
"Subscriptions": "登録チャンネル", "Subscriptions": "登録チャンネル",
"subscriptions_unseen_notifs_count_0": "{{count}}の未読通知", "subscriptions_unseen_notifs_count_0": "{{count}}の未読通知",
"search": "検索", "search": "検索",
"Log out": "ログアウト", "Log out": "ログアウト",
"Released under the AGPLv3 on Github.": "GitHub 上で AGPLv3 の元で公開", "Released under the AGPLv3 on Github.": "GitHub 上で AGPLv3 の元で公開されています。",
"Source available here.": "ソースはここで閲覧可能です。", "Source available here.": "ソースはここで閲覧可能です。",
"View JavaScript license information.": "JavaScript ライセンス情報", "View JavaScript license information.": "JavaScript ライセンス情報",
"View privacy policy.": "個人情報保護方針", "View privacy policy.": "プライバシーポリシー",
"Trending": "急上昇", "Trending": "急上昇",
"Public": "公開", "Public": "公開",
"Unlisted": "限定公開", "Unlisted": "限定公開",
"Private": "非公開", "Private": "非公開",
"View all playlists": "すべての再生リストを表示", "View all playlists": "再生リストをすべて見る",
"Updated `x` ago": "`x`前に更新", "Updated `x` ago": "`x`前に更新",
"Delete playlist `x`?": "再生リスト `x` を削除しますか?", "Delete playlist `x`?": "再生リスト `x` を削除しますか?",
"Delete playlist": "再生リストを削除", "Delete playlist": "再生リストを削除",
"Create playlist": "再生リストを作成", "Create playlist": "再生リストを作成",
"Title": "タイトル", "Title": "タイトル",
"Playlist privacy": "再生リストの公開状態", "Playlist privacy": "再生リストのプライバシー",
"Editing playlist `x`": "再生リスト `x` を編集中", "Editing playlist `x`": "再生リスト `x` を編集中",
"Show more": "もっと見る", "Show more": "表示を増やす",
"Show less": "表示を少なく", "Show less": "表示を減らす",
"Watch on YouTube": "YouTube で視聴", "Watch on YouTube": "YouTube で視聴",
"Switch Invidious Instance": "Invidiousインスタンスの変更", "Switch Invidious Instance": "Invidiousインスタンスの変更",
"Broken? Try another Invidious Instance": "壊れる違うInvidiousインスタンスを試してみる",
"Hide annotations": "アノテーションを隠す", "Hide annotations": "アノテーションを隠す",
"Show annotations": "アノテーションを表示", "Show annotations": "アノテーションを表示",
"Genre: ": "ジャンル: ", "Genre: ": "ジャンル: ",
"License: ": "ライセンス: ", "License: ": "ライセンス: ",
"Family friendly? ": "家族向け: ", "Family friendly? ": "家族向け: ",
"Wilson score: ": "ウィルソン得点区間: ", "Wilson score: ": "ウィルソンスコア: ",
"Engagement: ": "エンゲージメント: ", "Engagement: ": "エンゲージメント: ",
"Whitelisted regions: ": "ホワイトリストの地域: ", "Whitelisted regions: ": "ホワイトリストの地域: ",
"Blacklisted regions: ": "ブラックリストの地域: ", "Blacklisted regions: ": "ブラックリストの地域: ",
"Shared `x`": "公開日 `x`", "Shared `x`": "`x`に共有",
"Premieres in `x`": "`x`後にプレミア公開", "Premieres in `x`": "`x`後にプレミア公開",
"Premieres `x`": "`x`にプレミア公開", "Premieres `x`": "`x`にプレミア公開",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "やあ!君は JavaScript を無効にしているのかな?ここをクリックしてコメントを見れるけど、読み込みには少し時間がかかることがあるのを覚えておいてね。", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "やあ!君は JavaScript を無効にしているのかな?ここをクリックしてコメントを見れるけど、読み込みには少し時間がかかることがあるのを覚えておいてね。",
"View YouTube comments": "YouTube のコメントを表示", "View YouTube comments": "YouTube のコメントを見る",
"View more comments on Reddit": "Reddit でコメントをもっと見る", "View more comments on Reddit": "Reddit でコメントをもっと見る",
"View `x` comments": { "View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` 件のコメントを表示", "([^.,0-9]|^)1([^.,0-9]|$)": "`x` 件のコメントを見る",
"": "`x` 件のコメントを表示" "": "`x` 件のコメントを見る"
}, },
"View Reddit comments": "Reddit のコメントを表示", "View Reddit comments": "Reddit のコメントを見る",
"Hide replies": "返信を非表示", "Hide replies": "返信を非表示",
"Show replies": "返信を表示", "Show replies": "返信を表示",
"Incorrect password": "パスワードが間違っています", "Incorrect password": "パスワードが間違っています",
"Quota exceeded, try again in a few hours": "試行を制限中です。数時間後にやり直してください",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "ログインできませんでした。2段階認証 (認証アプリまたは SMS) が有効になっていることを確認してください。",
"Invalid TFA code": "TFA (2段階認証) コードが無効です",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "ログインに失敗しました。あなたのアカウントで2段階認証が有効になっていない可能性があります。",
"Wrong answer": "回答が間違っています", "Wrong answer": "回答が間違っています",
"Erroneous CAPTCHA": "CAPTCHA が間違っています", "Erroneous CAPTCHA": "CAPTCHA が間違っています",
"CAPTCHA is a required field": "CAPTCHA は必須項目です", "CAPTCHA is a required field": "CAPTCHA は必須項目です",
"User ID is a required field": "ユーザー ID は必須項目です", "User ID is a required field": "ユーザー ID は必須項目です",
"Password is a required field": "パスワードは必須項目です", "Password is a required field": "パスワードは必須項目です",
"Wrong username or password": "ユーザー名またはパスワードが間違っています", "Wrong username or password": "ユーザー名またはパスワードが間違っています",
"Password cannot be empty": "パスワードは空にできません", "Please sign in using 'Log in with Google'": "'Google でログイン' を使用してログインしてください",
"Password cannot be empty": "パスワードを空にすることはできません",
"Password cannot be longer than 55 characters": "パスワードは55文字より長くできません", "Password cannot be longer than 55 characters": "パスワードは55文字より長くできません",
"Please log in": "ログインしてください", "Please log in": "ログインしてください",
"Invidious Private Feed for `x`": "`x` 個人の Invidious によるフィード", "Invidious Private Feed for `x`": "`x` の Invidious プライベートフィード",
"channel:`x`": "チャンネル:`x`", "channel:`x`": "チャンネル:`x`",
"Deleted or invalid channel": "削除済みまたは無効なチャンネルです", "Deleted or invalid channel": "削除済みまたは無効なチャンネルです",
"This channel does not exist.": "このチャンネルは存在しません。", "This channel does not exist.": "このチャンネルは存在しません。",
"Could not get channel info.": "チャンネル情報を取得できませんでした。", "Could not get channel info.": "チャンネル情報を取得できませんでした。",
"Could not fetch comments": "コメントを取得できませんでした", "Could not fetch comments": "コメントを取得できませんでした",
"comments_view_x_replies_0": "{{count}}件の返信を表示", "comments_view_x_replies_0": "{{count}} 件の返信を見る",
"`x` ago": "`x`前", "`x` ago": "`x`前",
"Load more": "もっと見る", "Load more": "もっと読み込む",
"comments_points_count_0": "{{count}}", "comments_points_count_0": "{{count}} ポイント",
"Could not create mix.": "ミックスを作成できませんでした。", "Could not create mix.": "ミックスを作成できませんでした。",
"Empty playlist": "空の再生リスト", "Empty playlist": "空の再生リスト",
"Not a playlist.": "再生リストではありません。", "Not a playlist.": "再生リストではありません。",
"Playlist does not exist.": "再生リストが存在しません。", "Playlist does not exist.": "再生リストが存在しません。",
"Could not pull trending pages.": "急上昇ページを取得できませんでした。", "Could not pull trending pages.": "急上昇ページを取得できませんでした。",
"Hidden field \"challenge\" is a required field": "非表示項目 challenge は必須項目です", "Hidden field \"challenge\" is a required field": "非表示項目 \"challenge\" は必須項目です",
"Hidden field \"token\" is a required field": "非表示項目 token は必須項目です", "Hidden field \"token\" is a required field": "非表示項目 \"token\" は必須項目です",
"Erroneous challenge": "チャレンジが間違っています", "Erroneous challenge": "チャレンジが間違っています",
"Erroneous token": "トークンが間違っています", "Erroneous token": "トークンが間違っています",
"No such user": "ユーザーが存在しません", "No such user": "ユーザーが存在しません",
"Token is expired, please try again": "トークンが期限切れです。再度試しください", "Token is expired, please try again": "トークンが期限切れです。再度試しください",
"English": "英語", "English": "英語",
"English (auto-generated)": "英語 (自動生成)", "English (auto-generated)": "英語 (自動生成)",
"Afrikaans": "アフリカーンス語", "Afrikaans": "アフリカーンス語",
@ -305,8 +314,8 @@
"Yoruba": "ヨルバ語", "Yoruba": "ヨルバ語",
"Zulu": "ズール語", "Zulu": "ズール語",
"generic_count_years_0": "{{count}}年", "generic_count_years_0": "{{count}}年",
"generic_count_months_0": "{{count}}月", "generic_count_months_0": "{{count}}月",
"generic_count_weeks_0": "{{count}}週", "generic_count_weeks_0": "{{count}}週",
"generic_count_days_0": "{{count}}日", "generic_count_days_0": "{{count}}日",
"generic_count_hours_0": "{{count}}時間", "generic_count_hours_0": "{{count}}時間",
"generic_count_minutes_0": "{{count}}分", "generic_count_minutes_0": "{{count}}分",
@ -318,8 +327,8 @@
"About": "このサービスについて", "About": "このサービスについて",
"Rating: ": "評価: ", "Rating: ": "評価: ",
"preferences_locale_label": "言語: ", "preferences_locale_label": "言語: ",
"View as playlist": "再生リストとして閲覧", "View as playlist": "再生リストで見る",
"Default": "標準", "Default": "デフォルト",
"Music": "音楽", "Music": "音楽",
"Gaming": "ゲーム", "Gaming": "ゲーム",
"News": "ニュース", "News": "ニュース",
@ -330,52 +339,53 @@
"(edited)": "(編集済み)", "(edited)": "(編集済み)",
"YouTube comment permalink": "YouTube コメントのパーマリンク", "YouTube comment permalink": "YouTube コメントのパーマリンク",
"permalink": "パーマリンク", "permalink": "パーマリンク",
"`x` marked it with a ❤": "`x` が❤を送りました", "`x` marked it with a ❤": "`x` が❤を込めてマークしました",
"Audio mode": "音声モード", "Audio mode": "オーディオモード",
"Video mode": "動画モード", "Video mode": "ビデオモード",
"channel_tab_videos_label": "動画", "Videos": "動画",
"Playlists": "再生リスト", "Playlists": "プレイリスト",
"channel_tab_community_label": "コミュニティ", "Community": "コミュニティ",
"search_filters_sort_option_relevance": "関連度", "relevance": "関連",
"search_filters_sort_option_rating": "評価", "rating": "評価",
"search_filters_sort_option_date": "アップロード日", "date": "時刻",
"search_filters_sort_option_views": "視聴回数", "views": "再生回数",
"search_filters_type_label": "種類", "content_type": "コンテンツの種類",
"search_filters_duration_label": "再生時間", "duration": "再生時間",
"search_filters_features_label": "特徴", "features": "機能",
"search_filters_sort_label": "順番", "sort": "順番",
"search_filters_date_option_hour": "1時間以内", "hour": "1時間前",
"search_filters_date_option_today": "今日", "today": "今日",
"search_filters_date_option_week": "今週", "week": "今週",
"search_filters_date_option_month": "今月", "month": "今月",
"search_filters_date_option_year": "今年", "year": "今年",
"search_filters_type_option_video": "動画", "video": "動画",
"search_filters_type_option_channel": "チャンネル", "channel": "チャンネル",
"search_filters_type_option_playlist": "再生リスト", "playlist": "再生リスト",
"search_filters_type_option_movie": "映画", "movie": "映画",
"search_filters_type_option_show": "番組", "show": "番組",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "字幕", "subtitles": "字幕",
"search_filters_features_option_c_commons": "クリエイティブ・コモンズ", "creative_commons": "クリエイティブ・コモンズ",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "ライブ", "live": "生配信",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "場所", "location": "場所",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "フィルタ",
"Current version: ": "現在のバージョン: ", "Current version: ": "現在のバージョン: ",
"next_steps_error_message": "下記のものを試して下さい: ", "next_steps_error_message": "下記のものを試して下さい: ",
"next_steps_error_message_refresh": "再読込", "next_steps_error_message_refresh": "再読込",
"next_steps_error_message_go_to_youtube": "YouTubeへ", "next_steps_error_message_go_to_youtube": "YouTubeへ",
"search_filters_duration_option_short": "4 分未満", "short": "4 分未満",
"footer_documentation": "説明書", "footer_documentation": "書",
"footer_source_code": "ソースコード", "footer_source_code": "ソースコード",
"footer_original_source_code": "元のソースコード", "footer_original_source_code": "ソースコード(元)",
"footer_modfied_source_code": "改変して使用", "footer_modfied_source_code": "ソースコード(編集)",
"adminprefs_modified_source_code_url_label": "改変されたソースコードのレポジトリのURL", "adminprefs_modified_source_code_url_label": "編集したソースコードのレポジトリーURL",
"search_filters_duration_option_long": "20 分以上", "long": "20 分以上",
"preferences_region_label": "地域: ", "preferences_region_label": "地域: ",
"footer_donate_page": "寄付する", "footer_donate_page": "寄付する",
"preferences_quality_dash_label": "優先するDASH画質: ", "preferences_quality_dash_label": "優先するDash画質 : ",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
@ -394,71 +404,12 @@
"videoinfo_invidious_embed_link": "埋め込みリンク", "videoinfo_invidious_embed_link": "埋め込みリンク",
"none": "なし", "none": "なし",
"download_subtitles": "字幕 - `x` (.vtt)", "download_subtitles": "字幕 - `x` (.vtt)",
"search_filters_features_option_purchased": "購入済み", "purchased": "購入済み",
"preferences_quality_option_dash": "DASH (適応的画質)", "preferences_quality_option_dash": "DASH (適切な品質)",
"preferences_quality_dash_option_worst": "最悪", "preferences_quality_dash_option_worst": "最悪",
"preferences_quality_dash_option_best": "最高", "preferences_quality_dash_option_best": "最高",
"videoinfo_started_streaming_x_ago": "`x`前に配信を開始", "videoinfo_started_streaming_x_ago": "`x`分前に配信を開始",
"videoinfo_watch_on_youTube": "YouTubeで視聴", "videoinfo_watch_on_youTube": "YouTube上で見る",
"user_created_playlists": "`x`個の作成した再生リスト", "user_created_playlists": "`x`が作成したプレイリスト",
"Video unavailable": "動画は利用できません", "Video unavailable": "ビデオは利用できません"
"Chinese": "中国語",
"Chinese (Taiwan)": "中国語 (台湾)",
"Korean (auto-generated)": "韓国語 (自動生成)",
"Portuguese (auto-generated)": "ポルトガル語 (自動生成)",
"Turkish (auto-generated)": "トルコ語 (自動生成)",
"English (United Kingdom)": "英語 (イギリス)",
"Cantonese (Hong Kong)": "広東語 (香港)",
"Chinese (China)": "中国語 (中国)",
"Chinese (Hong Kong)": "中国語 (香港)",
"Dutch (auto-generated)": "オランダ語 (自動生成)",
"French (auto-generated)": "フランス語 (自動生成)",
"German (auto-generated)": "ドイツ語 (自動生成)",
"Indonesian (auto-generated)": "インドネシア語 (自動生成)",
"Italian (auto-generated)": "イタリア語 (自動生成)",
"Japanese (auto-generated)": "日本語 (自動生成)",
"Interlingue": "インターリング",
"Portuguese (Brazil)": "ポルトガル語 (ブラジル)",
"Russian (auto-generated)": "ロシア語 (自動生成)",
"Spanish (auto-generated)": "スペイン語 (自動生成)",
"Spanish (Mexico)": "スペイン語 (メキシコ)",
"Spanish (Spain)": "スペイン語 (スペイン)",
"Vietnamese (auto-generated)": "ベトナム語 (自動生成)",
"search_filters_title": "フィルタ",
"search_filters_features_option_three_sixty": "360°",
"search_message_change_filters_or_query": "別の検索語句を試したり、検索フィルタを変更してください。",
"search_message_no_results": "一致する検索結果はありません。",
"English (United States)": "英語 (アメリカ)",
"search_filters_date_label": "アップロード日",
"search_filters_features_option_vr180": "VR180",
"crash_page_switch_instance": "<a href=\"`x`\">別のインスタンスを使用</a>を試す",
"crash_page_read_the_faq": "<a href=\"`x`\">よくある質問 (FAQ)</a> を読む",
"Popular enabled: ": "人気動画を有効化 ",
"search_message_use_another_instance": " <a href=\"`x`\">別のインスタンス上での検索</a>も可能です。",
"search_filters_apply_button": "選択したフィルターを適用",
"user_saved_playlists": "`x`個の保存済みの再生リスト",
"crash_page_you_found_a_bug": "Invidious のバグのようです!",
"crash_page_refresh": "<a href=\"`x`\">ページを更新</a>を試す",
"preferences_watch_history_label": "再生履歴を有効化 ",
"search_filters_date_option_none": "すべて",
"search_filters_type_option_all": "すべての種類",
"search_filters_duration_option_none": "すべての長さ",
"search_filters_duration_option_medium": "4 20 分",
"preferences_save_player_pos_label": "再生位置を保存: ",
"crash_page_before_reporting": "バグを報告する前に、次のことを確認してください。",
"crash_page_report_issue": "上記が助けにならないなら、<a href=\"`x`\">GitHub</a> に新しい issue を作成し(英語が好ましい)、メッセージに次のテキストを含めてください(テキストは翻訳しない)。",
"crash_page_search_issue": "<a href=\"`x`\">GitHub の既存の問題 (issue)</a> を検索",
"channel_tab_streams_label": "ライブ",
"channel_tab_playlists_label": "再生リスト",
"error_video_not_in_playlist": "要求された動画はこの再生リスト内に存在しません。<a href=\"`x`\">再生リストのホームへ。</a>",
"channel_tab_shorts_label": "ショート",
"channel_tab_channels_label": "チャンネル",
"Music in this video": "この動画の音楽",
"Artist: ": "アーティスト: ",
"Album: ": "アルバム: ",
"Song: ": "曲: ",
"Channel Sponsor": "チャンネルのスポンサー",
"Standard YouTube license": "標準 Youtube ライセンス",
"Download is disabled": "ダウンロード: このインスタンスでは未対応",
"Import YouTube playlist (.csv)": "YouTube 再生リストをインポート (.csv)"
} }

@ -2,7 +2,7 @@
"preferences_sort_label": "동영상 정렬 기준: ", "preferences_sort_label": "동영상 정렬 기준: ",
"preferences_max_results_label": "피드에 표시된 동영상 수: ", "preferences_max_results_label": "피드에 표시된 동영상 수: ",
"Redirect homepage to feed: ": "피드로 홈페이지 리디렉션: ", "Redirect homepage to feed: ": "피드로 홈페이지 리디렉션: ",
"preferences_annotations_subscribed_label": "구독한 채널에 기본으로 주석 표시: ", "preferences_annotations_subscribed_label": "구독한 채널에 기본적으로 특수효과를 표시하시겠습니까? ",
"preferences_category_subscription": "구독 설정", "preferences_category_subscription": "구독 설정",
"preferences_automatic_instance_redirect_label": "자동 인스턴스 리디렉션 (redirect.invidious.io로 대체): ", "preferences_automatic_instance_redirect_label": "자동 인스턴스 리디렉션 (redirect.invidious.io로 대체): ",
"preferences_thin_mode_label": "단순 모드: ", "preferences_thin_mode_label": "단순 모드: ",
@ -11,70 +11,73 @@
"preferences_dark_mode_label": "테마: ", "preferences_dark_mode_label": "테마: ",
"Dark mode: ": "다크 모드: ", "Dark mode: ": "다크 모드: ",
"preferences_player_style_label": "플레이어 스타일: ", "preferences_player_style_label": "플레이어 스타일: ",
"preferences_category_visual": "환경 설정", "preferences_category_visual": "시각 설정",
"preferences_vr_mode_label": "VR 영상 활성화(WebGL 필요): ", "preferences_vr_mode_label": "인터랙티브 360도 비디오: ",
"preferences_extend_desc_label": "자동으로 비디오 설명 확장: ", "preferences_extend_desc_label": "자동으로 비디오 설명 확장: ",
"preferences_annotations_label": "기본으로 주석 표시: ", "preferences_annotations_label": "기본으로 주석 표시: ",
"preferences_related_videos_label": "관련 동영상 보기: ", "preferences_related_videos_label": "관련 동영상 보기: ",
"Fallback captions: ": "대체 자막: ", "Fallback captions: ": "대체 자막: ",
"preferences_captions_label": "기본 자막: ", "preferences_captions_label": "기본 자막: ",
"reddit": "레딧", "reddit": "Reddit",
"youtube": "유튜브", "youtube": "YouTube",
"preferences_comments_label": "기본 댓글: ", "preferences_comments_label": "기본 댓글: ",
"preferences_volume_label": "플레이어 볼륨: ", "preferences_volume_label": "플레이어 볼륨: ",
"preferences_quality_label": "선호하는 비디오 품질: ", "preferences_quality_label": "선호하는 비디오 품질: ",
"preferences_speed_label": "기본 속도: ", "preferences_speed_label": "기본 속도: ",
"preferences_local_label": "비디오를 프록시: ", "preferences_local_label": "비디오를 프록시: ",
"preferences_listen_label": "라디오 모드: ", "preferences_listen_label": "기본적으로 듣기: ",
"preferences_continue_autoplay_label": "다음 동영상 자동재생: ", "preferences_continue_autoplay_label": "다음 동영상 자동재생 ",
"preferences_continue_label": "다음 동영상으로 이동: ", "preferences_continue_label": "기본적으로 다음 재생: ",
"preferences_autoplay_label": "자동재생: ", "preferences_autoplay_label": "자동재생: ",
"preferences_video_loop_label": "항상 반복: ", "preferences_video_loop_label": "항상 반복: ",
"preferences_category_player": "플레이어 설정", "preferences_category_player": "플레이어 설정",
"Preferences": "설정", "Preferences": "설정",
"Google verification code": "구글 인증 코드",
"E-mail": "이메일", "E-mail": "이메일",
"Register": "회원가입", "Register": "회원가입",
"Sign In": "로그인", "Sign In": "로그인",
"preferences_category_misc": "기타 설정", "preferences_category_misc": "기타 설정",
"Image CAPTCHA": "이미지 캡차", "Image CAPTCHA": "이미지 CAPTCHA",
"Text CAPTCHA": "텍스트 캡차", "Text CAPTCHA": "텍스트 CAPTCHA",
"Time (h:mm:ss):": "시각 (h:mm:ss):", "Time (h:mm:ss):": "시각 (h:mm:ss):",
"Password": "비밀번호", "Password": "비밀번호",
"User ID": "사용자 ID", "User ID": "사용자 ID",
"Log in with Google": "구글로 로그인",
"Log in/register": "로그인/회원가입", "Log in/register": "로그인/회원가입",
"Log in": "로그인", "Log in": "로그인",
"source": "출처", "source": "출처",
"JavaScript license information": "자바스크립트 라이선스 정보", "JavaScript license information": "JavaScript 라이선스 정보",
"An alternative front-end to YouTube": "유튜브의 프론트엔드 대안", "An alternative front-end to YouTube": "YouTube의 대안 프론트엔드",
"History": "역사", "History": "역사",
"Delete account?": "계정을 삭제 하시겠습니까?", "Delete account?": "계정을 삭제 하시겠습니까?",
"Export data as JSON": "JSON으로 데이터 내보내기", "Export data as JSON": "데이터를 JSON으로 내보내기",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML로 구독 내보내기 (뉴파이프 및 프리튜브)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "구독을 OPML로 내보내기 (NewPipe 및 FreeTube 용)",
"Export subscriptions as OPML": "OPML로 구독 내보내기", "Export subscriptions as OPML": "구독을 OPML로 내보내기",
"Export": "내보내기", "Export": "내보내기",
"Import NewPipe data (.zip)": "뉴파이프 데이터 가져오기 (.zip)", "Import NewPipe data (.zip)": "NewPipe 데이터 가져오기 (.zip)",
"Import NewPipe subscriptions (.json)": "뉴파이프 구독 가져오기 (.json)", "Import NewPipe subscriptions (.json)": "NewPipe 구독을 가져오기 (.json)",
"Import FreeTube subscriptions (.db)": "프리튜브 구독 가져오기 (.db)", "Import FreeTube subscriptions (.db)": "FreeTube 구독 가져오기 (.db)",
"Import YouTube subscriptions": "유튜브 구독 가져오기", "Import YouTube subscriptions": "YouTube 구독 가져오기",
"Import Invidious data": "인비디어스 데이터 가져오기 (.json)", "Import Invidious data": "Invidious 데이터 가져오기",
"Import": "가져오기", "Import": "가져오기",
"Import and Export Data": "데이터 가져오기 및 내보내기", "Import and Export Data": "데이터 가져오기 및 내보내기",
"No": "아니요", "No": "아니요",
"Yes": "예", "Yes": "예",
"Authorize token for `x`?": "`x` 에 대한 토큰을 승인하시겠습니까?", "Authorize token for `x`?": "`x` 에 대한 토큰을 승인하시겠습니까?",
"Authorize token?": "토큰을 승인하시겠습니까?", "Authorize token?": "토큰을 승인하시겠습니까?",
"Cannot change password for Google accounts": "Google 계정의 비밀번호를 변경할 수 없습니다",
"New passwords must match": "새 비밀번호는 일치해야 합니다", "New passwords must match": "새 비밀번호는 일치해야 합니다",
"New password": "새 비밀번호", "New password": "새 비밀번호",
"Clear watch history?": "재생 기록을 삭제 하시겠습니까?", "Clear watch history?": "재생 기록을 삭제 하시겠습니까?",
"Previous page": "이전 페이지", "Previous page": "이전 페이지",
"Next page": "다음 페이지", "Next page": "다음 페이지",
"last": "마지막", "last": "마지막",
"Shared `x` ago": "`x` 전", "Shared `x` ago": "`x` 전에 공유",
"popular": "인기", "popular": "인기",
"oldest": "오래된순", "oldest": "오래된순",
"newest": "최신순", "newest": "최신순",
"View playlist on YouTube": "유튜브에서 재생목록 보기", "View playlist on YouTube": "YouTube에서 재생목록 보기",
"View channel on YouTube": "유튜브에서 채널 보기", "View channel on YouTube": "YouTube에서 채널 보기",
"Subscribe": "구독", "Subscribe": "구독",
"Unsubscribe": "구독 취소", "Unsubscribe": "구독 취소",
"LIVE": "실시간", "LIVE": "실시간",
@ -83,12 +86,12 @@
"generic_playlists_count_0": "{{count}} 재생목록", "generic_playlists_count_0": "{{count}} 재생목록",
"generic_subscribers_count_0": "{{count}} 구독자", "generic_subscribers_count_0": "{{count}} 구독자",
"generic_subscriptions_count_0": "{{count}} 구독", "generic_subscriptions_count_0": "{{count}} 구독",
"search_filters_type_option_playlist": "재생목록", "playlist": "재생목록",
"Korean": "한국어", "Korean": "한국어",
"Japanese": "일본어", "Japanese": "일본어",
"Greek": "그리스어", "Greek": "그리스어",
"German": "독일어", "German": "독일어",
"Chinese (Traditional)": "중국어 (정자)", "Chinese (Traditional)": "중국어 (정자)",
"Chinese (Simplified)": "중국어 (간체자)", "Chinese (Simplified)": "중국어 (간체자)",
"French": "프랑스어", "French": "프랑스어",
"Finnish": "핀란드어", "Finnish": "핀란드어",
@ -109,6 +112,7 @@
"This channel does not exist.": "이 채널은 존재하지 않습니다.", "This channel does not exist.": "이 채널은 존재하지 않습니다.",
"Deleted or invalid channel": "삭제되었거나 더 이상 존재하지 않는 채널", "Deleted or invalid channel": "삭제되었거나 더 이상 존재하지 않는 채널",
"channel:`x`": "채널:`x`", "channel:`x`": "채널:`x`",
"Invalid TFA code": "유효하지 않은 TFA 코드",
"Show replies": "댓글 보기", "Show replies": "댓글 보기",
"Hide replies": "댓글 숨기기", "Hide replies": "댓글 숨기기",
"Incorrect password": "잘못된 비밀번호", "Incorrect password": "잘못된 비밀번호",
@ -116,7 +120,7 @@
"Genre: ": "장르: ", "Genre: ": "장르: ",
"Editing playlist `x`": "재생목록 `x` 수정하기", "Editing playlist `x`": "재생목록 `x` 수정하기",
"Playlist privacy": "재생목록 공개 범위", "Playlist privacy": "재생목록 공개 범위",
"Watch on YouTube": "유튜브에서 보기", "Watch on YouTube": "YouTube에서 보기",
"Show less": "간략히", "Show less": "간략히",
"Show more": "더보기", "Show more": "더보기",
"Title": "제목", "Title": "제목",
@ -125,13 +129,13 @@
"Delete playlist": "재생목록 삭제", "Delete playlist": "재생목록 삭제",
"Delete playlist `x`?": "재생목록 `x` 를 삭제 하시겠습니까?", "Delete playlist `x`?": "재생목록 `x` 를 삭제 하시겠습니까?",
"Updated `x` ago": "`x` 전에 업데이트됨", "Updated `x` ago": "`x` 전에 업데이트됨",
"Released under the AGPLv3 on Github.": "깃허브에 AGPLv3 으로 배포됩니다.", "Released under the AGPLv3 on Github.": "Github에 AGPLv3 으로 배포됩니다.",
"View all playlists": "모든 재생목록 보기", "View all playlists": "모든 재생목록 보기",
"Private": "비공개", "Private": "비공개",
"Unlisted": "목록에 없음", "Unlisted": "목록에 없음",
"Public": "공개", "Public": "공개",
"View privacy policy.": "개인정보 처리방침 보기.", "View privacy policy.": "개인정보 처리방침 보기.",
"View JavaScript license information.": "자바스크립트 라이선스 정보 보기.", "View JavaScript license information.": "JavaScript 라이센스 정보 보기.",
"Source available here.": "소스는 여기에서 사용할 수 있습니다.", "Source available here.": "소스는 여기에서 사용할 수 있습니다.",
"Log out": "로그아웃", "Log out": "로그아웃",
"search": "검색", "search": "검색",
@ -146,9 +150,9 @@
"Subscription manager": "구독 관리자", "Subscription manager": "구독 관리자",
"Save preferences": "설정 저장", "Save preferences": "설정 저장",
"Report statistics: ": "통계 보고: ", "Report statistics: ": "통계 보고: ",
"Registration enabled: ": "회원가입 활성화: ", "Registration enabled: ": "등록 활성화: ",
"Login enabled: ": "로그인 활성화: ", "Login enabled: ": "로그인 활성화: ",
"CAPTCHA enabled: ": "캡차 활성화: ", "CAPTCHA enabled: ": "CAPTCHA 활성화: ",
"Top enabled: ": "Top 활성화: ", "Top enabled: ": "Top 활성화: ",
"preferences_show_nick_label": "상단에 닉네임 표시: ", "preferences_show_nick_label": "상단에 닉네임 표시: ",
"preferences_feed_menu_label": "피드 메뉴: ", "preferences_feed_menu_label": "피드 메뉴: ",
@ -179,27 +183,28 @@
"Russian": "러시아어", "Russian": "러시아어",
"Romanian": "루마니아어", "Romanian": "루마니아어",
"Punjabi": "펀자브어", "Punjabi": "펀자브어",
"Portuguese": "포르투갈어", "Portuguese": "포르투갈어(포어)",
"Polish": "폴란드어", "Polish": "폴란드어",
"Persian": "페르시아어", "Persian": "페르시아어(파사어)",
"Pashto": "파슈토어", "Pashto": "파슈토어",
"Nyanja": "냔자어", "Nyanja": "체와어",
"Norwegian Bokmål": "노르웨이 부크몰어", "Norwegian Bokmål": "보크몰",
"Nepali": "네팔어", "Nepali": "네팔어",
"Mongolian": "몽골어", "Mongolian": "몽골어",
"Marathi": "마라티어", "Marathi": "마라티어",
"Maori": "마오리어", "Maori": "마오리어",
"Maltese": "몰타어", "Maltese": "몰타어",
"Wrong answer": "잘못된 답변", "Wrong answer": "잘못된 답변",
"search_filters_features_option_live": "실시간", "live": "실시간",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_location": "지역", "location": "지역",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_hdr": "HDR", "filter": "필터",
"hdr": "HDR",
"Current version: ": "현재 버전: ", "Current version: ": "현재 버전: ",
"next_steps_error_message_refresh": "새로 고침", "next_steps_error_message_refresh": "새로 고침",
"next_steps_error_message_go_to_youtube": "유튜브로 가기", "next_steps_error_message_go_to_youtube": "YouTube로 가기",
"search_filters_features_option_subtitles": "자막", "subtitles": "자막",
"`x` marked it with a ❤": "`x`님의 ❤", "`x` marked it with a ❤": "`x`님의 ❤",
"Download as: ": "다음으로 다운로드: ", "Download as: ": "다음으로 다운로드: ",
"Download": "다운로드", "Download": "다운로드",
@ -214,14 +219,14 @@
"Latvian": "라트비아어", "Latvian": "라트비아어",
"Latin": "라틴어", "Latin": "라틴어",
"Lao": "라오어", "Lao": "라오어",
"search_filters_type_option_channel": "채널", "channel": "채널",
"Kyrgyz": "키르기스어", "Kyrgyz": "키르기스어",
"Kurdish": "쿠르드어", "Kurdish": "쿠르드어",
"Khmer": "크메르어", "Khmer": "크메르어",
"Kazakh": "카자흐어", "Kazakh": "카자흐어",
"Kannada": "칸나다어", "Kannada": "칸나다어",
"Javanese": "자바어", "Javanese": "자바어",
"Italian": "이탈리아어", "Italian": "이탈리아어(이태리어)",
"Irish": "아일랜드어", "Irish": "아일랜드어",
"Indonesian": "인도네시아어", "Indonesian": "인도네시아어",
"Igbo": "이보어", "Igbo": "이보어",
@ -241,17 +246,18 @@
"Could not create mix.": "믹스를 생성할 수 없습니다.", "Could not create mix.": "믹스를 생성할 수 없습니다.",
"`x` ago": "`x` 전", "`x` ago": "`x` 전",
"comments_view_x_replies_0": "답글 {{count}}개 보기", "comments_view_x_replies_0": "답글 {{count}}개 보기",
"View Reddit comments": "레딧 댓글 보기", "View Reddit comments": "Reddit의 댓글 보기",
"Engagement: ": "약속: ", "Engagement: ": "약속: ",
"Wilson score: ": "Wilson Score: ", "Wilson score: ": "Wilson Score: ",
"Family friendly? ": "전연령 영상입니까? ", "Family friendly? ": "가족 친화적입니까? ",
"Quota exceeded, try again in a few hours": "한도량을 초과했습니다. 몇 시간 후에 다시 시도하세요",
"View `x` comments": { "View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` 개의 댓글 보기", "([^.,0-9]|^)1([^.,0-9]|$)": "`x` 개의 댓글 보기",
"": "`x` 개의 댓글 보기" "": "`x` 개의 댓글 보기"
}, },
"Haitian Creole": "아이티 크레올어", "Haitian Creole": "아이티 크레올어",
"Gujarati": "구자라트어", "Gujarati": "구자라트어",
"Esperanto": "에스페란토", "Esperanto": "에스페란토(에스페란토어)",
"Georgian": "조지아어", "Georgian": "조지아어",
"Galician": "갈리시아어", "Galician": "갈리시아어",
"Filipino": "타갈로그어(필리핀어)", "Filipino": "타갈로그어(필리핀어)",
@ -267,20 +273,23 @@
"Bulgarian": "불가리아어", "Bulgarian": "불가리아어",
"Bosnian": "보스니아어", "Bosnian": "보스니아어",
"Belarusian": "벨라루스어", "Belarusian": "벨라루스어",
"View more comments on Reddit": "레딧에서 더 많은 댓글 보기", "Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "로그인할 수 없습니다. 이중 인증(Authenticator 또는 SMS)이 켜져 있는지 확인하세요.",
"View YouTube comments": "유튜브 댓글 보기", "View more comments on Reddit": "Reddit에서 더 많은 댓글 보기",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "자바스크립트가 꺼져 있는 것 같습니다! 댓글을 보려면 여기를 클릭하세요. 댓글을 로드하는 데 시간이 조금 더 걸릴 수 있습니다.", "View YouTube comments": "YouTube 댓글 보기",
"Shared `x`": "`x` 업로드", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "JavaScript가 꺼져 있는 것 같습니다! 댓글을 보려면 여기를 클릭하세요. 댓글을 로드하는 데 시간이 조금 더 걸릴 수 있습니다.",
"Shared `x`": "공유된 `x`",
"Whitelisted regions: ": "차단되지 않은 지역: ", "Whitelisted regions: ": "차단되지 않은 지역: ",
"search_filters_sort_option_views": "조회수", "views": "조회수",
"Please log in": "로그인하세요", "Please log in": "로그인하세요",
"Password cannot be longer than 55 characters": "비밀번호는 55자 이하여야 합니다", "Password cannot be longer than 55 characters": "비밀번호는 55자 이하여야 합니다",
"Password cannot be empty": "비밀번호는 비워둘 수 없습니다", "Password cannot be empty": "비밀번호는 비워둘 수 없습니다",
"Please sign in using 'Log in with Google'": "'Google로 로그인'을 사용하여 로그인하세요",
"Wrong username or password": "잘못된 사용자 이름 또는 비밀번호", "Wrong username or password": "잘못된 사용자 이름 또는 비밀번호",
"Password is a required field": "비밀번호는 필수 입력란입니다", "Password is a required field": "비밀번호는 필수 필드입니다",
"User ID is a required field": "사용자 ID는 필수 입력란입니다", "User ID is a required field": "사용자 ID는 필수 필드입니다",
"CAPTCHA is a required field": "캡차는 필수 입력란입니다", "CAPTCHA is a required field": "CAPTCHA는 필수 필드입니다",
"Erroneous CAPTCHA": "잘못된 캡차", "Erroneous CAPTCHA": "잘못된 CAPTCHA",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "로그인 실패. 계정에 이중 인증이 설정되어 있지 않기 때문일 수 있습니다.",
"Blacklisted regions: ": "차단된 지역: ", "Blacklisted regions: ": "차단된 지역: ",
"Playlists": "재생목록", "Playlists": "재생목록",
"View as playlist": "재생목록으로 보기", "View as playlist": "재생목록으로 보기",
@ -289,7 +298,8 @@
"Empty playlist": "재생목록 비어 있음", "Empty playlist": "재생목록 비어 있음",
"Show annotations": "주석 보이기", "Show annotations": "주석 보이기",
"Hide annotations": "주석 숨기기", "Hide annotations": "주석 숨기기",
"Switch Invidious Instance": "인비디어스 인스턴스 변경", "Broken? Try another Invidious Instance": "안되나요? 다른 Invidious 인스턴스를 시도해보세요",
"Switch Invidious Instance": "Invidious 인스턴스 변경",
"Spanish": "스페인어", "Spanish": "스페인어",
"Southern Sotho": "소토어", "Southern Sotho": "소토어",
"Somali": "소말리어", "Somali": "소말리어",
@ -305,10 +315,10 @@
"Swahili": "스와힐리어", "Swahili": "스와힐리어",
"Sundanese": "순다어", "Sundanese": "순다어",
"generic_count_years_0": "{{count}} 년", "generic_count_years_0": "{{count}} 년",
"generic_count_months_0": "{{count}}월", "generic_count_months_0": "{{count}} 월",
"generic_count_weeks_0": "{{count}} 주", "generic_count_weeks_0": "{{count}} 주",
"generic_count_days_0": "{{count}} 일", "generic_count_days_0": "{{count}} 일",
"generic_count_hours_0": "{{count}}", "generic_count_hours_0": "{{count}} 시",
"generic_count_minutes_0": "{{count}} 분", "generic_count_minutes_0": "{{count}} 분",
"generic_count_seconds_0": "{{count}} 초", "generic_count_seconds_0": "{{count}} 초",
"Zulu": "줄루어", "Zulu": "줄루어",
@ -329,22 +339,22 @@
"Swedish": "스웨덴어", "Swedish": "스웨덴어",
"Spanish (Latin America)": "스페인어 (라틴 아메리카)", "Spanish (Latin America)": "스페인어 (라틴 아메리카)",
"comments_points_count_0": "{{count}} 포인트", "comments_points_count_0": "{{count}} 포인트",
"Invidious Private Feed for `x`": "`x` 에 대한 인비디어스 비공개 피드", "Invidious Private Feed for `x`": "`x` 에 대한 Invidious 비공개 피드",
"Premieres `x`": "최초 공개 `x`", "Premieres `x`": "최초 공개 `x`",
"Premieres in `x`": "`x` 최초 공개", "Premieres in `x`": "`x` 최초 공개",
"next_steps_error_message": "다음 방법을 시도해 보세요: ", "next_steps_error_message": "다음 방법을 시도해 보세요: ",
"search_filters_features_option_c_commons": "크리에이티브 커먼즈", "creative_commons": "크리에이티브 커먼즈",
"search_filters_duration_label": "길이", "duration": "길이",
"search_filters_type_label": "구분", "content_type": "구분",
"search_filters_sort_option_date": "업로드 날짜", "date": "업로드 날짜",
"search_filters_sort_option_rating": "평점", "rating": "평점",
"search_filters_sort_option_relevance": "관련성", "relevance": "관련성",
"channel_tab_community_label": "커뮤니티", "Community": "커뮤니티",
"channel_tab_videos_label": "동영상", "Videos": "동영상",
"Video mode": "비디오 모드", "Video mode": "비디오 모드",
"Audio mode": "오디오 모드", "Audio mode": "오디오 모드",
"permalink": "퍼머링크", "permalink": "퍼머링크",
"YouTube comment permalink": "유튜브 댓글 퍼머링크", "YouTube comment permalink": "YouTube 댓글 퍼머링크",
"(edited)": "(수정됨)", "(edited)": "(수정됨)",
"%A %B %-d, %Y": "%A %B %-d, %Y", "%A %B %-d, %Y": "%A %B %-d, %Y",
"Movies": "영화", "Movies": "영화",
@ -355,110 +365,22 @@
"Rating: ": "평점: ", "Rating: ": "평점: ",
"About": "정보", "About": "정보",
"Top": "최고", "Top": "최고",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_type_option_show": "쇼", "show": "쇼",
"search_filters_type_option_movie": "영화", "movie": "영화",
"search_filters_type_option_video": "동영상", "video": "동영상",
"search_filters_date_option_year": "올해", "year": "올해",
"search_filters_date_option_month": "이번 달", "month": "이번 달",
"search_filters_date_option_week": "이번 주", "week": "이번 주",
"search_filters_date_option_today": "오늘", "today": "오늘",
"search_filters_date_option_hour": "지난 1시간", "hour": "지난 1시간",
"search_filters_sort_label": "정렬기준", "sort": "정렬기준",
"search_filters_features_label": "기능별", "features": "기능별",
"search_filters_duration_option_short": "짧음 (4분 미만)", "short": "4분 미만",
"search_filters_duration_option_long": "김 (20분 초과)", "long": "20분 초과",
"footer_documentation": "문서", "footer_documentation": "문서",
"footer_source_code": "소스 코드", "footer_source_code": "소스 코드",
"footer_original_source_code": "원본 소스 코드", "footer_original_source_code": "원본 소스 코드",
"footer_modfied_source_code": "수정된 소스 코드", "footer_modfied_source_code": "수정된 소스 코드",
"adminprefs_modified_source_code_url_label": "수정된 소스 코드 저장소의 URL", "adminprefs_modified_source_code_url_label": "수정된 소스 코드 저장소의 URL"
"search_filters_title": "필터",
"preferences_quality_dash_option_4320p": "4320p",
"Popular enabled: ": "인기 활성화: ",
"Dutch (auto-generated)": "네덜란드어 (자동 생성됨)",
"Chinese (Hong Kong)": "중국어 (홍콩)",
"Chinese (Taiwan)": "중국어 (대만)",
"German (auto-generated)": "독일어 (자동 생성됨)",
"Interlingue": "Interlingue",
"search_filters_date_label": "업로드 날짜",
"search_filters_date_option_none": "모든 날짜",
"search_filters_duration_option_none": "모든 기간",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_purchased": "구입한 항목",
"search_filters_apply_button": "선택한 필터 적용하기",
"preferences_quality_dash_option_240p": "240p",
"preferences_region_label": "국가: ",
"preferences_quality_dash_option_1440p": "1440p",
"French (auto-generated)": "프랑스어 (자동 생성됨)",
"Indonesian (auto-generated)": "인도네시아어 (자동 생성됨)",
"Turkish (auto-generated)": "터키어 (자동 생성됨)",
"Vietnamese (auto-generated)": "베트남어 (자동 생성됨)",
"preferences_quality_dash_option_2160p": "2160p",
"Italian (auto-generated)": "이탈리아어 (자동 생성됨)",
"preferences_quality_option_medium": "보통",
"preferences_quality_dash_option_720p": "720p",
"search_filters_duration_option_medium": "중간 (4 - 20분)",
"preferences_quality_dash_option_best": "최고",
"Portuguese (auto-generated)": "포르투갈어 (자동 생성됨)",
"Spanish (Spain)": "스페인어 (스페인)",
"preferences_quality_dash_label": "선호하는 DASH 비디오 품질: ",
"preferences_quality_option_hd720": "HD720",
"Spanish (auto-generated)": "스페인어 (자동 생성됨)",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_worst": "최저",
"preferences_watch_history_label": "시청 기록 저장: ",
"invidious": "인비디어스",
"preferences_quality_option_small": "낮음",
"preferences_quality_dash_option_auto": "자동",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_144p": "144p",
"English (United Kingdom)": "영어 (영국)",
"search_filters_features_option_vr180": "VR180",
"Cantonese (Hong Kong)": "광동어 (홍콩)",
"Portuguese (Brazil)": "포르투갈어 (브라질)",
"search_message_no_results": "결과가 없습니다.",
"search_message_change_filters_or_query": "필터를 변경하시거나 검색어를 넓게 시도해보세요.",
"search_message_use_another_instance": " 당신은 <a href=\"`x`\">다른 인스턴스에서 검색</a>할 수도 있습니다.",
"English (United States)": "영어 (미국)",
"Chinese": "중국어",
"Chinese (China)": "중국어 (중국)",
"Japanese (auto-generated)": "일본어 (자동 생성됨)",
"Korean (auto-generated)": "한국어 (자동 생성됨)",
"Russian (auto-generated)": "러시아어 (자동 생성됨)",
"Spanish (Mexico)": "스페인어 (멕시코)",
"search_filters_type_option_all": "모든 유형",
"footer_donate_page": "기부하기",
"preferences_quality_option_dash": "DASH (다양한 화질)",
"preferences_quality_dash_option_360p": "360p",
"preferences_save_player_pos_label": "이어서 보기: ",
"none": "없음",
"videoinfo_started_streaming_x_ago": "`x` 전에 스트리밍을 시작했습니다",
"crash_page_you_found_a_bug": "인비디어스에서 버그를 찾은 것 같습니다!",
"download_subtitles": "자막 - `x`(.vtt)",
"user_saved_playlists": "`x`개의 저장된 재생목록",
"crash_page_before_reporting": "버그를 보고하기 전에 다음 사항이 있는지 확인합니다:",
"crash_page_search_issue": "<a href=\"`x`\">깃허브에서 기존 이슈</a>를 검색했습니다",
"Video unavailable": "비디오를 사용할 수 없음",
"crash_page_refresh": "<a href=\"`x`\">페이지를 새로고침</a>하려고 했습니다",
"videoinfo_watch_on_youTube": "유튜브에서 보기",
"crash_page_switch_instance": "<a href=\"`x`\">다른 인스턴스를 사용</a>하려고 했습니다",
"crash_page_read_the_faq": "<a href=\"`x`\">자주 묻는 질문(FAQ)</a> 읽기",
"user_created_playlists": "`x`개의 생성된 재생목록",
"crash_page_report_issue": "위의 방법 중 어느 것도 도움이 되지 않았다면, <a href=\"`x`\">깃허브에서 새 이슈를 열고</a>(가능하면 영어로) 메시지에 다음 텍스트를 포함하세요(해당 텍스트를 번역하지 마십시오):",
"videoinfo_youTube_embed_link": "임베드",
"videoinfo_invidious_embed_link": "임베드 링크",
"error_video_not_in_playlist": "요청한 동영상이 이 재생목록에 없습니다. <a href=\"`x`\">재생목록 목록을 보려면 여기를 클릭하십시오.</a>",
"channel_tab_shorts_label": "쇼츠",
"channel_tab_streams_label": "실시간 스트리밍",
"channel_tab_channels_label": "채널",
"channel_tab_playlists_label": "재생목록",
"Standard YouTube license": "표준 유튜브 라이선스",
"Song: ": "제목: ",
"Channel Sponsor": "채널 스폰서",
"Album: ": "앨범: ",
"Music in this video": "동영상 속 음악",
"Artist: ": "아티스트: ",
"Download is disabled": "다운로드가 비활성화 되어있음",
"Import YouTube playlist (.csv)": "유튜브 플레이리스트 가져오기 (.csv)"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Išvalyti žiūrėjimo istoriją?", "Clear watch history?": "Išvalyti žiūrėjimo istoriją?",
"New password": "Naujas slaptažodis", "New password": "Naujas slaptažodis",
"New passwords must match": "Naujas slaptažodis turi sutapti", "New passwords must match": "Naujas slaptažodis turi sutapti",
"Cannot change password for Google accounts": "Negalima pakeisti Google paskyros slaptažodžio",
"Authorize token?": "Autorizuoti žetoną?", "Authorize token?": "Autorizuoti žetoną?",
"Authorize token for `x`?": "Autorizuoti žetoną `x`?", "Authorize token for `x`?": "Autorizuoti žetoną `x`?",
"Yes": "Taip", "Yes": "Taip",
"No": "Ne", "No": "Ne",
"Import and Export Data": "Importuoti ir eksportuoti duomenis", "Import and Export Data": "Importuoti ir eksportuoti duomenis",
"Import": "Importuoti", "Import": "Importuoti",
"Import Invidious data": "Importuoti Invidious JSON duomenis", "Import Invidious data": "Importuoti Invidious duomenis",
"Import YouTube subscriptions": "Importuoti YouTube/OPML prenumeratas", "Import YouTube subscriptions": "Importuoti YouTube prenumeratas",
"Import FreeTube subscriptions (.db)": "Importuoti FreeTube prenumeratas (.db)", "Import FreeTube subscriptions (.db)": "Importuoti FreeTube prenumeratas (.db)",
"Import NewPipe subscriptions (.json)": "Importuoti NewPipe prenumeratas (.json)", "Import NewPipe subscriptions (.json)": "Importuoti NewPipe prenumeratas (.json)",
"Import NewPipe data (.zip)": "Importuoti NewPipe duomenis (.zip)", "Import NewPipe data (.zip)": "Importuoti NewPipe duomenis (.zip)",
"Export": "Eksportuoti", "Export": "Eksportuoti",
"Export subscriptions as OPML": "Eksportuoti prenumeratas kaip OPML", "Export subscriptions as OPML": "Eksportuoti prenumeratas kaip OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksportuoti prenumeratas kaip OPML (skirta NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksportuoti prenumeratas kaip OPML (skirta NewPipe & FreeTube)",
"Export data as JSON": "Eksportuoti Invidious duomenis kaip JSON", "Export data as JSON": "Eksportuoti duomenis kaip JSON",
"Delete account?": "Ištrinti paskyrą?", "Delete account?": "Ištrinti paskyrą?",
"History": "Istorija", "History": "Istorija",
"An alternative front-end to YouTube": "Alternatyvus YouTube žiūrėjimo būdas", "An alternative front-end to YouTube": "Alternatyvus YouTube žiūrėjimo būdas",
@ -36,6 +37,7 @@
"source": "šaltinis", "source": "šaltinis",
"Log in": "Prisijungti", "Log in": "Prisijungti",
"Log in/register": "Prisijungti/ registruotis", "Log in/register": "Prisijungti/ registruotis",
"Log in with Google": "Prisijungti naudojantis Google",
"User ID": "Naudotojo ID", "User ID": "Naudotojo ID",
"Password": "Slaptažodis", "Password": "Slaptažodis",
"Time (h:mm:ss):": "Laikas (h:mm:ss):", "Time (h:mm:ss):": "Laikas (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Prisijungti", "Sign In": "Prisijungti",
"Register": "Registruotis", "Register": "Registruotis",
"E-mail": "El. paštas", "E-mail": "El. paštas",
"Google verification code": "Google patvirtinimo kodas",
"Preferences": "Pasirinktys", "Preferences": "Pasirinktys",
"preferences_category_player": "Grotuvo pasirinktys", "preferences_category_player": "Grotuvo pasirinktys",
"preferences_video_loop_label": "Visada kartoti: ", "preferences_video_loop_label": "Visada kartoti: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Rodyti susijusius vaizdo įrašus: ", "preferences_related_videos_label": "Rodyti susijusius vaizdo įrašus: ",
"preferences_annotations_label": "Rodyti anotacijas pagal nutylėjimą: ", "preferences_annotations_label": "Rodyti anotacijas pagal nutylėjimą: ",
"preferences_extend_desc_label": "Automatiškai išplėsti vaizdo įrašo aprašymą: ", "preferences_extend_desc_label": "Automatiškai išplėsti vaizdo įrašo aprašymą: ",
"preferences_vr_mode_label": "Interaktyvūs 360 laipsnių vaizdo įrašai (reikalingas WebGL): ", "preferences_vr_mode_label": "Interaktyvūs 360 laipsnių vaizdo įrašai: ",
"preferences_category_visual": "Vizualinės nuostatos", "preferences_category_visual": "Vizualinės nuostatos",
"preferences_player_style_label": "Vaizdo grotuvo stilius: ", "preferences_player_style_label": "Vaizdo grotuvo stilius: ",
"Dark mode: ": "Tamsus rėžimas: ", "Dark mode: ": "Tamsus rėžimas: ",
@ -118,7 +121,7 @@
"Subscriptions": "Prenumeratos", "Subscriptions": "Prenumeratos",
"search": "ieškoti", "search": "ieškoti",
"Log out": "Atsijungti", "Log out": "Atsijungti",
"Released under the AGPLv3 on Github.": "Išleista pagal AGPLv3 licenciją GitHub.", "Released under the AGPLv3 on Github.": "Išleista pagal AGPLv3 licenciją Github.",
"Source available here.": "Kodas prieinamas čia.", "Source available here.": "Kodas prieinamas čia.",
"View JavaScript license information.": "Žiūrėti JavaScript licencijos informaciją.", "View JavaScript license information.": "Žiūrėti JavaScript licencijos informaciją.",
"View privacy policy.": "Žiūrėti privatumo politiką.", "View privacy policy.": "Žiūrėti privatumo politiką.",
@ -138,6 +141,7 @@
"Show less": "Rodyti mažiau", "Show less": "Rodyti mažiau",
"Watch on YouTube": "Žiaurėti Youtube", "Watch on YouTube": "Žiaurėti Youtube",
"Switch Invidious Instance": "Keisti Invidious šaltinį", "Switch Invidious Instance": "Keisti Invidious šaltinį",
"Broken? Try another Invidious Instance": "Neveikia? Bandyk kitą Invidious šaltinį",
"Hide annotations": "Slėpti anotacijas", "Hide annotations": "Slėpti anotacijas",
"Show annotations": "Rodyti anotacijas", "Show annotations": "Rodyti anotacijas",
"Genre: ": "Žanras: ", "Genre: ": "Žanras: ",
@ -150,7 +154,7 @@
"Shared `x`": "Pasidalino `x`", "Shared `x`": "Pasidalino `x`",
"Premieres in `x`": "Premjera už `x`", "Premieres in `x`": "Premjera už `x`",
"Premieres `x`": "Premjera`x`", "Premieres `x`": "Premjera`x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Sveiki! Panašu, kad turite išjungę „JavaScript“. Spustelėkite čia norėdami peržiūrėti komentarus, atminkite, kad jų įkėlimas gali užtrukti šiek tiek ilgiau.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Sveiki! Atrodo, kad turite išjungę \"JavaScript\". Spauskite čia norėdami peržiūrėti komentarus, turėkite omenyje, kad jų įkėlimas gali užtrukti.",
"View YouTube comments": "Žiūrėti YouTube komentarus", "View YouTube comments": "Žiūrėti YouTube komentarus",
"View more comments on Reddit": "Žiūrėti daugiau komentarų Reddit", "View more comments on Reddit": "Žiūrėti daugiau komentarų Reddit",
"View `x` comments": { "View `x` comments": {
@ -161,12 +165,17 @@
"Hide replies": "Slėpti atsakymus", "Hide replies": "Slėpti atsakymus",
"Show replies": "Rodyti atsakymus", "Show replies": "Rodyti atsakymus",
"Incorrect password": "Slaptažodis neteisingas", "Incorrect password": "Slaptažodis neteisingas",
"Quota exceeded, try again in a few hours": "Viršyta kvota, bandykite dar kartą po keleto valandų",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Nepavyko prisijungti, įsitikinkite, kad yra įjungta dviejų etapų autentifikacija (Autentifikatorius arba SMS).",
"Invalid TFA code": "Neteisingas TFA kodas",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Prisijungimas nepavyko. Tai gali būti todėl, kad jūsų paskyroje nėra įjungta dviejų etapų autentifikacija.",
"Wrong answer": "Atsakymas neteisingas", "Wrong answer": "Atsakymas neteisingas",
"Erroneous CAPTCHA": "Klaidinga CAPTCHA", "Erroneous CAPTCHA": "Klaidinga CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA yra reikalinga šiam laukeliui", "CAPTCHA is a required field": "CAPTCHA yra reikalinga šiam laukeliui",
"User ID is a required field": "Vartotojo ID yra reikalingas šiam laukeliui", "User ID is a required field": "Vartotojo ID yra reikalingas šiam laukeliui",
"Password is a required field": "Slaptažodis yra reikalingas šiam laukeliui", "Password is a required field": "Slaptažodis yra reikalingas šiam laukeliui",
"Wrong username or password": "Neteisingas vartotojo vardas arba slaptažodis", "Wrong username or password": "Neteisingas vartotojo vardas arba slaptažodis",
"Please sign in using 'Log in with Google'": "Prašome prisijungti naudojant \"Prisijungti su\" Google \"",
"Password cannot be empty": "Slaptažodžio laukelis negali būti tuščias", "Password cannot be empty": "Slaptažodžio laukelis negali būti tuščias",
"Password cannot be longer than 55 characters": "Slaptažodis negali būti ilgesnis nei 55 simboliai", "Password cannot be longer than 55 characters": "Slaptažodis negali būti ilgesnis nei 55 simboliai",
"Please log in": "Prašome prisijungti", "Please log in": "Prašome prisijungti",
@ -317,41 +326,42 @@
"`x` marked it with a ❤": "`x` pažymėjo tai su ❤", "`x` marked it with a ❤": "`x` pažymėjo tai su ❤",
"Audio mode": "Garso rėžimas", "Audio mode": "Garso rėžimas",
"Video mode": "Vaizdo rėžimas", "Video mode": "Vaizdo rėžimas",
"channel_tab_videos_label": "Vaizdo įrašai", "Videos": "Vaizdo įrašai",
"Playlists": "Grojaraiščiai", "Playlists": "Grojaraiščiai",
"channel_tab_community_label": "Bendruomenė", "Community": "Bendruomenė",
"search_filters_sort_option_relevance": "Aktualumas", "relevance": "Aktualumas",
"search_filters_sort_option_rating": "Reitingas", "rating": "Reitingas",
"search_filters_sort_option_date": "Įkėlimo data", "date": "Įkėlimo data",
"search_filters_sort_option_views": "Peržiūrų skaičius", "views": "Peržiūrų skaičius",
"search_filters_type_label": "Tipas", "content_type": "Tipas",
"search_filters_duration_label": "Trukmė", "duration": "Trukmė",
"search_filters_features_label": "Funkcijos", "features": "Funkcijos",
"search_filters_sort_label": "Rūšiuoti pagal", "sort": "Rūšiuoti pagal",
"search_filters_date_option_hour": "Per paskutinę valandą", "hour": "Per paskutinę valandą",
"search_filters_date_option_today": "Šiandien", "today": "Šiandien",
"search_filters_date_option_week": "Šią savaitę", "week": "Šią savaitę",
"search_filters_date_option_month": "Šį mėnesį", "month": "Šį mėnesį",
"search_filters_date_option_year": "Šiais metais", "year": "Šiais metais",
"search_filters_type_option_video": "Vaizdo įrašas", "video": "Vaizdo įrašas",
"search_filters_type_option_channel": "Kanalas", "channel": "Kanalas",
"search_filters_type_option_playlist": "Grojaraštis", "playlist": "Grojaraštis",
"search_filters_type_option_movie": "Filmas", "movie": "Filmas",
"search_filters_type_option_show": "Serialas", "show": "Serialas",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Subtitrai/CC", "subtitles": "Subtitrai/CC",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Tiesiogiai", "live": "Tiesiogiai",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Vietovė", "location": "Vietovė",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Filtras",
"Current version: ": "Dabartinė versija: ", "Current version: ": "Dabartinė versija: ",
"next_steps_error_message": "Po to turėtumėte pabandyti: ", "next_steps_error_message": "Po to turėtumėte pabandyti: ",
"next_steps_error_message_refresh": "Atnaujinti", "next_steps_error_message_refresh": "Atnaujinti",
"next_steps_error_message_go_to_youtube": "Eiti į YouTube", "next_steps_error_message_go_to_youtube": "Eiti į YouTube",
"search_filters_duration_option_short": "Trumpas (< 4 minučių)", "short": "Trumpas (< 4 minučių)",
"search_filters_duration_option_long": "Ilgas (> 20 minučių)", "long": "Ilgas (> 20 minučių)",
"footer_documentation": "Dokumentacija", "footer_documentation": "Dokumentacija",
"footer_source_code": "Pirminis kodas", "footer_source_code": "Pirminis kodas",
"footer_original_source_code": "Pradinis pirminis kodas", "footer_original_source_code": "Pradinis pirminis kodas",
@ -359,127 +369,5 @@
"footer_modfied_source_code": "Pakeistas pirminis kodas", "footer_modfied_source_code": "Pakeistas pirminis kodas",
"footer_donate_page": "Paaukoti", "footer_donate_page": "Paaukoti",
"preferences_region_label": "Turinio šalis: ", "preferences_region_label": "Turinio šalis: ",
"preferences_quality_dash_label": "Pageidaujama DASH vaizdo kokybė: ", "preferences_quality_dash_label": "Pageidaujama DASH vaizdo kokybė: "
"preferences_quality_dash_option_best": "Geriausia",
"preferences_quality_dash_option_worst": "Blogiausia",
"preferences_quality_dash_option_auto": "Automatinis",
"search_filters_title": "Filtras",
"generic_videos_count_0": "{{count}} vaizdo įrašas",
"generic_videos_count_1": "{{count}} vaizdo įrašai",
"generic_videos_count_2": "{{count}} vaizdo įrašų",
"generic_subscribers_count_0": "{{count}} prenumeratorius",
"generic_subscribers_count_1": "{{count}} prenumeratoriai",
"generic_subscribers_count_2": "{{count}} prenumeratorių",
"generic_subscriptions_count_0": "{{count}} prenumerata",
"generic_subscriptions_count_1": "{{count}} prenumeratos",
"generic_subscriptions_count_2": "{{count}} prenumeratų",
"preferences_watch_history_label": "Įgalinti žiūrėjimo istoriją: ",
"preferences_quality_dash_option_1080p": "1080p",
"invidious": "Invidious",
"preferences_quality_dash_option_720p": "720p",
"generic_playlists_count_0": "{{count}} grojaraštis",
"generic_playlists_count_1": "{{count}} grojaraščiai",
"generic_playlists_count_2": "{{count}} grojaraščių",
"preferences_quality_option_medium": "Vidutinė",
"preferences_quality_option_small": "Maža",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_144p": "144p",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_option_dash": "DASH (prisitaikanti kokybė)",
"generic_views_count_0": "{{count}} peržiūra",
"generic_views_count_1": "{{count}} peržiūros",
"generic_views_count_2": "{{count}} peržiūrų",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_240p": "240p",
"none": "nėra",
"search_filters_type_option_all": "Bet koks tipas",
"videoinfo_started_streaming_x_ago": "Pradėjo transliuoti prieš `x`",
"crash_page_switch_instance": "pabandėte <a href=\"`x`\">naudoti kitą perdavimo šaltinį</a>",
"search_filters_duration_option_none": "Bet kokia trukmė",
"search_filters_duration_option_medium": "Vidutinio ilgumo (4 - 20 minučių)",
"search_filters_features_option_vr180": "VR180",
"crash_page_before_reporting": "Prieš pranešdami apie klaidą įsitikinkite, kad:",
"crash_page_read_the_faq": "perskaitėte <a href=\"`x`\">Dažniausiai užduodamus klausimus (DUK)</a>",
"crash_page_search_issue": "ieškojote <a href=\"`x`\"> esamų problemų GitHub</a>",
"error_video_not_in_playlist": "Prašomo vaizdo įrašo šiame grojaraštyje nėra. <a href=\"`x`\">Spustelėkite čia, kad pamatytumėte grojaraščio pagrindinį puslapį.</a>",
"crash_page_report_issue": "Jei nė vienas iš pirmiau pateiktų būdų nepadėjo, prašome <a href=\"`x`\">atidaryti naują problemą GitHub</a> (pageidautina anglų kalba) ir į savo pranešimą įtraukti šį tekstą (NEVERSKITE šio teksto):",
"subscriptions_unseen_notifs_count_0": "{{count}} nematytas pranešimas",
"subscriptions_unseen_notifs_count_1": "{{count}} nematyti pranešimai",
"subscriptions_unseen_notifs_count_2": "{{count}} nematytų pranešimų",
"Vietnamese (auto-generated)": "Vietnamiečių kalba (automatiškai sugeneruota)",
"Dutch (auto-generated)": "Olandų kalba (automatiškai sugeneruota)",
"generic_count_weeks_0": "{{count}} savaitę",
"generic_count_weeks_1": "{{count}} savaitės",
"generic_count_weeks_2": "{{count}} savaičių",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italų kalba (automatiškai sugeneruota)",
"Japanese (auto-generated)": "Japonų kalba (automatiškai sugeneruota)",
"Korean (auto-generated)": "Korėjiečių kalba (automatiškai sugeneruota)",
"generic_count_months_0": "{{count}} mėnesį",
"generic_count_months_1": "{{count}} mėnesius",
"generic_count_months_2": "{{count}} mėnesių",
"generic_count_days_0": "{{count}} dieną",
"generic_count_days_1": "{{count}} dienas",
"generic_count_days_2": "{{count}} dienų",
"generic_count_hours_0": "{{count}} valandą",
"generic_count_hours_1": "{{count}} valandas",
"generic_count_hours_2": "{{count}} valandų",
"generic_count_seconds_0": "{{count}} sekundę",
"generic_count_seconds_1": "{{count}} sekundes",
"generic_count_seconds_2": "{{count}} sekundžių",
"generic_count_minutes_0": "{{count}} minutę",
"generic_count_minutes_1": "{{count}} minutes",
"generic_count_minutes_2": "{{count}} minučių",
"generic_count_years_0": "{{count}} metus",
"generic_count_years_1": "{{count}} metus",
"generic_count_years_2": "{{count}} metų",
"Popular enabled: ": "Populiarūs įgalinti: ",
"Portuguese (auto-generated)": "Portugalų kalba (automatiškai sugeneruota)",
"videoinfo_watch_on_youTube": "Žiaurėti Youtube",
"Chinese (China)": "Kinų kalba (Kinija)",
"crash_page_you_found_a_bug": "Atrodo, kad radote \"Invidious\" klaidą!",
"search_filters_features_option_three_sixty": "360°",
"English (United Kingdom)": "Anglų kalba (Jungtinė Karalystė)",
"Chinese (Hong Kong)": "Kinų kalba (Honkongas)",
"search_message_change_filters_or_query": "Pabandykite išplėsti paieškos užklausą ir (arba) pakeisti filtrus.",
"English (United States)": "Anglų kalba (Jungtinės Amerikos Valstijos)",
"Chinese (Taiwan)": "Kinų kalba (Taivanas)",
"search_message_use_another_instance": " Taip pat galite <a href=\"`x`\">ieškoti kitame perdavimo šaltinyje</a>.",
"tokens_count_0": "{{count}} žetonas",
"tokens_count_1": "{{count}} žetonai",
"tokens_count_2": "{{count}} žetonų",
"search_message_no_results": "Rezultatų nerasta.",
"comments_view_x_replies_0": "Žiūrėti {{count}} atsakymą",
"comments_view_x_replies_1": "Žiūrėti {{count}} atsakymus",
"comments_view_x_replies_2": "Žiūrėti {{count}} atsakymų",
"comments_points_count_0": "{{count}} taškas",
"comments_points_count_1": "{{count}} taškai",
"comments_points_count_2": "{{count}} taškų",
"Cantonese (Hong Kong)": "Kantono kalba (Honkongas)",
"Chinese": "Kinų",
"French (auto-generated)": "Prancūzų kalba (automatiškai sugeneruota)",
"German (auto-generated)": "Vokiečių kalba (automatiškai sugeneruota)",
"Indonesian (auto-generated)": "Indoneziečių kalba (automatiškai sugeneruota)",
"Portuguese (Brazil)": "Portugalų kalba (Brazilija)",
"Russian (auto-generated)": "Rusų kalba (automatiškai sugeneruota)",
"Spanish (Mexico)": "Ispanų kalba (Meksika)",
"Spanish (auto-generated)": "Ispanų kalba (automatiškai sugeneruota)",
"Spanish (Spain)": "Ispanų kalba (Ispanija)",
"Turkish (auto-generated)": "Turkų kalba (automatiškai sugeneruota)",
"search_filters_date_label": "Įkėlimo data",
"search_filters_date_option_none": "Bet kokia data",
"search_filters_features_option_purchased": "Įsigyta",
"search_filters_apply_button": "Taikyti pasirinktus filtrus",
"download_subtitles": "Subtitrai - `x` (.vtt)",
"user_created_playlists": "`x` sukurti grojaraščiai",
"user_saved_playlists": "`x` išsaugoti grojaraščiai",
"Video unavailable": "Vaizdo įrašas nepasiekiamas",
"preferences_save_player_pos_label": "Išsaugoti atkūrimo padėtį: ",
"videoinfo_youTube_embed_link": "Įterpti",
"videoinfo_invidious_embed_link": "Įterpti nuorodą",
"crash_page_refresh": "pabandėte <a href=\"`x`\">atnaujinti puslapį</a>",
"Album: ": "Albumas "
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Tøm visningshistorikk?", "Clear watch history?": "Tøm visningshistorikk?",
"New password": "Nytt passord", "New password": "Nytt passord",
"New passwords must match": "Nye passordfelter må stemme overens", "New passwords must match": "Nye passordfelter må stemme overens",
"Cannot change password for Google accounts": "Kan ikke endre passord for Google-kontoer",
"Authorize token?": "Identitetsbekreft symbol?", "Authorize token?": "Identitetsbekreft symbol?",
"Authorize token for `x`?": "Identitetsbekreft symbol for `x`?", "Authorize token for `x`?": "Identitetsbekreft symbol for `x`?",
"Yes": "Ja", "Yes": "Ja",
@ -28,7 +29,7 @@
"Export": "Eksporter", "Export": "Eksporter",
"Export subscriptions as OPML": "Eksporter abonnementer som OPML", "Export subscriptions as OPML": "Eksporter abonnementer som OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksporter abonnementer som OPML (for NewPipe og FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Eksporter abonnementer som OPML (for NewPipe og FreeTube)",
"Export data as JSON": "Eksporter Invidiousdata som JSON", "Export data as JSON": "Eksporter data som JSON",
"Delete account?": "Slett konto?", "Delete account?": "Slett konto?",
"History": "Historikk", "History": "Historikk",
"An alternative front-end to YouTube": "En alternativ grenseflate for YouTube", "An alternative front-end to YouTube": "En alternativ grenseflate for YouTube",
@ -36,6 +37,7 @@
"source": "kilde", "source": "kilde",
"Log in": "Logg inn", "Log in": "Logg inn",
"Log in/register": "Logg inn/registrer", "Log in/register": "Logg inn/registrer",
"Log in with Google": "Logg inn med Google",
"User ID": "Bruker-ID", "User ID": "Bruker-ID",
"Password": "Passord", "Password": "Passord",
"Time (h:mm:ss):": "Tid (h:mm:ss):", "Time (h:mm:ss):": "Tid (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Innlogging", "Sign In": "Innlogging",
"Register": "Registrer", "Register": "Registrer",
"E-mail": "E-post", "E-mail": "E-post",
"Google verification code": "Google-bekreftelseskode",
"Preferences": "Innstillinger", "Preferences": "Innstillinger",
"preferences_category_player": "Avspillerinnstillinger", "preferences_category_player": "Avspillerinnstillinger",
"preferences_video_loop_label": "Alltid gjenta: ", "preferences_video_loop_label": "Alltid gjenta: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Vis relaterte videoer? ", "preferences_related_videos_label": "Vis relaterte videoer? ",
"preferences_annotations_label": "Vis merknader som forvalg? ", "preferences_annotations_label": "Vis merknader som forvalg? ",
"preferences_extend_desc_label": "Utvid videobeskrivelse automatisk: ", "preferences_extend_desc_label": "Utvid videobeskrivelse automatisk: ",
"preferences_vr_mode_label": "Interaktive 360-gradersfilmer (krever WebGL): ", "preferences_vr_mode_label": "Interaktive 360-gradersfilmer: ",
"preferences_category_visual": "Visuelle innstillinger", "preferences_category_visual": "Visuelle innstillinger",
"preferences_player_style_label": "Avspillerstil: ", "preferences_player_style_label": "Avspillerstil: ",
"Dark mode: ": "Mørk drakt: ", "Dark mode: ": "Mørk drakt: ",
@ -118,7 +121,7 @@
"Subscriptions": "Abonnement", "Subscriptions": "Abonnement",
"search": "søk", "search": "søk",
"Log out": "Logg ut", "Log out": "Logg ut",
"Released under the AGPLv3 on Github.": "Tilgjengelig med AGPLv3-lisens på GitHub.", "Released under the AGPLv3 on Github.": "Tilgjengelig med AGPLv3-lisens på Github.",
"Source available here.": "Kildekode tilgjengelig her.", "Source available here.": "Kildekode tilgjengelig her.",
"View JavaScript license information.": "Vis JavaScript-lisensinfo.", "View JavaScript license information.": "Vis JavaScript-lisensinfo.",
"View privacy policy.": "Vis personvernspraksis.", "View privacy policy.": "Vis personvernspraksis.",
@ -138,6 +141,7 @@
"Show less": "Vis mindre", "Show less": "Vis mindre",
"Watch on YouTube": "Vis video på YouTube", "Watch on YouTube": "Vis video på YouTube",
"Switch Invidious Instance": "Bytt Invidious-instans", "Switch Invidious Instance": "Bytt Invidious-instans",
"Broken? Try another Invidious Instance": "Knekt? Forsøk en annen Invidious-instans",
"Hide annotations": "Skjul merknader", "Hide annotations": "Skjul merknader",
"Show annotations": "Vis merknader", "Show annotations": "Vis merknader",
"Genre: ": "Sjanger: ", "Genre: ": "Sjanger: ",
@ -161,12 +165,17 @@
"Hide replies": "Skjul svar", "Hide replies": "Skjul svar",
"Show replies": "Vis svar", "Show replies": "Vis svar",
"Incorrect password": "Feil passord", "Incorrect password": "Feil passord",
"Quota exceeded, try again in a few hours": "Kvote overskredet, prøv igjen om et par timer",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Kunne ikke logge inn, forsikre deg om at tofaktor-identitetsbekreftelse (Authenticator eller SMS) er skrudd på.",
"Invalid TFA code": "Ugyldig tofaktorkode",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Innlogging mislyktes. Dette kan være fordi tofaktor-identitetsbekreftelse er skrudd av på kontoen din.",
"Wrong answer": "Ugyldig svar", "Wrong answer": "Ugyldig svar",
"Erroneous CAPTCHA": "Ugyldig CAPTCHA", "Erroneous CAPTCHA": "Ugyldig CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA er et påkrevd felt", "CAPTCHA is a required field": "CAPTCHA er et påkrevd felt",
"User ID is a required field": "Bruker-ID er et påkrevd felt", "User ID is a required field": "Bruker-ID er et påkrevd felt",
"Password is a required field": "Passord er et påkrevd felt", "Password is a required field": "Passord er et påkrevd felt",
"Wrong username or password": "Ugyldig brukernavn eller passord", "Wrong username or password": "Ugyldig brukernavn eller passord",
"Please sign in using 'Log in with Google'": "Logg inn ved bruk av \"Google-innlogging\"",
"Password cannot be empty": "Passordet kan ikke være tomt", "Password cannot be empty": "Passordet kan ikke være tomt",
"Password cannot be longer than 55 characters": "Passordet kan ikke være lengre enn 55 tegn", "Password cannot be longer than 55 characters": "Passordet kan ikke være lengre enn 55 tegn",
"Please log in": "Logg inn", "Please log in": "Logg inn",
@ -190,7 +199,7 @@
"No such user": "Ugyldig bruker", "No such user": "Ugyldig bruker",
"Token is expired, please try again": "Symbol utløpt, prøv igjen", "Token is expired, please try again": "Symbol utløpt, prøv igjen",
"English": "Engelsk", "English": "Engelsk",
"English (auto-generated)": "Engelsk (laget automatisk)", "English (auto-generated)": "Engelsk (auto-generert)",
"Afrikaans": "Afrikansk", "Afrikaans": "Afrikansk",
"Albanian": "Albansk", "Albanian": "Albansk",
"Amharic": "Amharisk", "Amharic": "Amharisk",
@ -317,42 +326,43 @@
"`x` marked it with a ❤": "`x` levnet et ❤", "`x` marked it with a ❤": "`x` levnet et ❤",
"Audio mode": "Lydmodus", "Audio mode": "Lydmodus",
"Video mode": "Video-modus", "Video mode": "Video-modus",
"channel_tab_videos_label": "Videoer", "Videos": "Videoer",
"Playlists": "Spillelister", "Playlists": "Spillelister",
"channel_tab_community_label": "Gemenskap", "Community": "Gemenskap",
"search_filters_sort_option_relevance": "relevans", "relevance": "relevans",
"search_filters_sort_option_rating": "vurdering", "rating": "vurdering",
"search_filters_sort_option_date": "dato", "date": "dato",
"search_filters_sort_option_views": "visninger", "views": "visninger",
"search_filters_type_label": "innholdstype", "content_type": "innholdstype",
"search_filters_duration_label": "varighet", "duration": "varighet",
"search_filters_features_label": "funksjoner", "features": "funksjoner",
"search_filters_sort_label": "sorter", "sort": "sorter",
"search_filters_date_option_hour": "time", "hour": "time",
"search_filters_date_option_today": "i dag", "today": "i dag",
"search_filters_date_option_week": "uke", "week": "uke",
"search_filters_date_option_month": "måned", "month": "måned",
"search_filters_date_option_year": "år", "year": "år",
"search_filters_type_option_video": "video", "video": "video",
"search_filters_type_option_channel": "kanal", "channel": "kanal",
"search_filters_type_option_playlist": "spilleliste", "playlist": "spilleliste",
"search_filters_type_option_movie": "film", "movie": "film",
"search_filters_type_option_show": "vis", "show": "vis",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "undertekster", "subtitles": "undertekster",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "direkte", "live": "direkte",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "sted", "location": "sted",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "filtrer",
"Current version: ": "Gjeldende versjon: ", "Current version: ": "Gjeldende versjon: ",
"next_steps_error_message": "Etterpå bør du prøve dette: ", "next_steps_error_message": "Etterpå bør du prøve dette: ",
"next_steps_error_message_refresh": "Gjenoppfrisk", "next_steps_error_message_refresh": "Gjenoppfrisk",
"next_steps_error_message_go_to_youtube": "Gå til YouTube", "next_steps_error_message_go_to_youtube": "Gå til YouTube",
"search_filters_duration_option_long": "Lang (> 20 minutter)", "long": "Lang (> 20 minutter)",
"footer_donate_page": "Doner", "footer_donate_page": "Doner",
"search_filters_duration_option_short": "Kort (< 4 minutter)", "short": "Kort (< 4 minutter)",
"footer_documentation": "Dokumentasjon", "footer_documentation": "Dokumentasjon",
"footer_source_code": "Kildekode", "footer_source_code": "Kildekode",
"footer_original_source_code": "Opprinnelig kildekode", "footer_original_source_code": "Opprinnelig kildekode",
@ -374,8 +384,8 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_purchased": "Kjøpt", "purchased": "Kjøpt",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "intet", "none": "intet",
"videoinfo_watch_on_youTube": "Se på YouTube", "videoinfo_watch_on_youTube": "Se på YouTube",
"videoinfo_youTube_embed_link": "Bak inn", "videoinfo_youTube_embed_link": "Bak inn",
@ -422,47 +432,10 @@
"generic_count_years": "{{count}} år", "generic_count_years": "{{count}} år",
"generic_count_years_plural": "{{count}} år", "generic_count_years_plural": "{{count}} år",
"crash_page_read_the_faq": "lest de <a href=\"`x`\">Ofte stilte spørsmålene (OSS/FAQ)</a>", "crash_page_read_the_faq": "lest de <a href=\"`x`\">Ofte stilte spørsmålene (OSS/FAQ)</a>",
"crash_page_search_issue": "søkt etter <a href=\"`x`\">eksisterende utfordringer på GitHub</a>", "crash_page_search_issue": "søkt etter <a href=\"`x`\">eksisterende utfordringer på Github</a>",
"crash_page_you_found_a_bug": "Det ser ut til at du fant en feil i Invidious!", "crash_page_you_found_a_bug": "Det ser ut til at du fant en feil i Invidious!",
"crash_page_refresh": "forsøkt å <a href=\"`x`\">laste siden på nytt</a>", "crash_page_refresh": "forsøkt å <a href=\"`x`\">laste siden på nytt</a>",
"crash_page_switch_instance": "forsøkt et <a href=\"`x`\">annet eksemplar</a>", "crash_page_switch_instance": "forsøkt et <a href=\"`x`\">annet eksemplar</a>",
"crash_page_before_reporting": "Før du rapporterer en feil, sikre at du har:", "crash_page_before_reporting": "Før du rapporterer en feil, sikre at du har:",
"crash_page_report_issue": "Sett at det overnevnte ikke hjalp, <a href=\"`x`\">lag en ny utfordring på GitHub</a> (fortrinnsvis på engelsk) og få med følgende tekstbit i meldingen dithen (IKKE oversett denne teksten):", "crash_page_report_issue": "Hvis intet av det overnevnte hjalp, <a href=\"`x`\">lag en ny utfordring på Github</a> (fortrinnsvis på engelsk) og ta med følgende tekstbit i meldingen dit (IKKE oversett denne teksten):"
"English (United Kingdom)": "Engelsk (Storbritannia)",
"English (United States)": "Engelsk (USA)",
"Cantonese (Hong Kong)": "Kantonesisk (Hong Kong)",
"Portuguese (Brazil)": "Portugisisk (Brasil)",
"Spanish (Mexico)": "Spansk (Mexico)",
"Spanish (Spain)": "Spansk (Spania)",
"Spanish (auto-generated)": "Spansk (laget automatisk)",
"Vietnamese (auto-generated)": "Vietnamesisk (laget automatisk)",
"preferences_watch_history_label": "Aktiver seerhistorikk: ",
"Chinese": "Kinesisk",
"Chinese (China)": "Kinesisk (Kina)",
"Chinese (Hong Kong)": "Kinesisk (Hong Kong)",
"Chinese (Taiwan)": "Kinesisk (Taiwan)",
"French (auto-generated)": "Fransk (laget automatisk)",
"German (auto-generated)": "Tysk (laget automatisk)",
"Indonesian (auto-generated)": "Indonesisk (laget automatisk)",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italiensk (laget automatisk)",
"Japanese (auto-generated)": "Japansk (laget automatisk)",
"Korean (auto-generated)": "Koreansk (laget automatisk)",
"Portuguese (auto-generated)": "Portugisisk (laget automatisk)",
"Russian (auto-generated)": "Russisk (laget automatisk)",
"Dutch (auto-generated)": "Nederlandsk (laget automatisk)",
"Turkish (auto-generated)": "Tyrkisk (laget automatisk)",
"search_filters_title": "Filtrer",
"Popular enabled: ": "Populære aktiv: ",
"search_message_change_filters_or_query": "Prøv ett mindre snevert søk og/eller endre filterne.",
"search_filters_duration_option_medium": "Middels (420 minutter)",
"search_message_no_results": "Resultatløst.",
"search_filters_type_option_all": "Alle typer",
"search_filters_duration_option_none": "Enhver varighet",
"search_message_use_another_instance": " Du kan også <a href=\"`x`\">søke på en annen instans</a>.",
"search_filters_date_label": "Opplastningsdato",
"search_filters_apply_button": "Bruk valgte filtre",
"search_filters_date_option_none": "Siden begynnelsen",
"search_filters_features_option_vr180": "VR180",
"error_video_not_in_playlist": "Forespurt video finnes ikke i denne spillelisten. <a href=\"`x`\">Trykk her for spillelistens hjemmeside.</a>"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Wil je de kijkgeschiedenis wissen?", "Clear watch history?": "Wil je de kijkgeschiedenis wissen?",
"New password": "Nieuw wachtwoord", "New password": "Nieuw wachtwoord",
"New passwords must match": "De nieuwe wachtwoorden moeten overeenkomen", "New passwords must match": "De nieuwe wachtwoorden moeten overeenkomen",
"Cannot change password for Google accounts": "Kan het wachtwoord van Google-accounts niet wijzigen",
"Authorize token?": "Wil je de toegangssleutel machtigen?", "Authorize token?": "Wil je de toegangssleutel machtigen?",
"Authorize token for `x`?": "Wil je de toegangssleutel machtigen voor `x`?", "Authorize token for `x`?": "Wil je de toegangssleutel machtigen voor `x`?",
"Yes": "Ja", "Yes": "Ja",
"No": "Nee", "No": "Nee",
"Import and Export Data": "Gegevens im- en exporteren", "Import and Export Data": "Gegevens im- en exporteren",
"Import": "Importeren", "Import": "Importeren",
"Import Invidious data": "JSON-gegevens Invidious importeren", "Import Invidious data": "Invidious-gegevens importeren",
"Import YouTube subscriptions": "YouTube-/OPML-abonnementen importeren", "Import YouTube subscriptions": "YouTube-abonnementen importeren",
"Import FreeTube subscriptions (.db)": "FreeTube-abonnementen importeren (.db)", "Import FreeTube subscriptions (.db)": "FreeTube-abonnementen importeren (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe-abonnementen importeren (.json)", "Import NewPipe subscriptions (.json)": "NewPipe-abonnementen importeren (.json)",
"Import NewPipe data (.zip)": "NewPipe-gegevens importeren (.zip)", "Import NewPipe data (.zip)": "NewPipe-gegevens importeren (.zip)",
"Export": "Exporteren", "Export": "Exporteren",
"Export subscriptions as OPML": "Abonnementen exporteren als OPML", "Export subscriptions as OPML": "Abonnementen exporteren als OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnementen exporteren als OPML (voor NewPipe en FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnementen exporteren als OPML (voor NewPipe en FreeTube)",
"Export data as JSON": "Invidious-gegevens naar JSON exporteren", "Export data as JSON": "Gegevens exporteren als JSON",
"Delete account?": "Wilt u uw account verwijderen?", "Delete account?": "Wilt u uw account verwijderen?",
"History": "Geschiedenis", "History": "Geschiedenis",
"An alternative front-end to YouTube": "Een alternatief front-end voor YouTube", "An alternative front-end to YouTube": "Een alternatief front-end voor YouTube",
@ -36,6 +37,7 @@
"source": "bron", "source": "bron",
"Log in": "Inloggen", "Log in": "Inloggen",
"Log in/register": "Inloggen/Registreren", "Log in/register": "Inloggen/Registreren",
"Log in with Google": "Inloggen met Google",
"User ID": "Gebruikers-id", "User ID": "Gebruikers-id",
"Password": "Wachtwoord", "Password": "Wachtwoord",
"Time (h:mm:ss):": "Tijd (h:mm:ss):", "Time (h:mm:ss):": "Tijd (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Inloggen", "Sign In": "Inloggen",
"Register": "Registreren", "Register": "Registreren",
"E-mail": "E-mailadres", "E-mail": "E-mailadres",
"Google verification code": "Google-verificatiecode",
"Preferences": "Instellingen", "Preferences": "Instellingen",
"preferences_category_player": "Spelerinstellingen", "preferences_category_player": "Spelerinstellingen",
"preferences_video_loop_label": "Altijd herhalen: ", "preferences_video_loop_label": "Altijd herhalen: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Gerelateerde video's tonen? ", "preferences_related_videos_label": "Gerelateerde video's tonen? ",
"preferences_annotations_label": "Standaard annotaties tonen? ", "preferences_annotations_label": "Standaard annotaties tonen? ",
"preferences_extend_desc_label": "Breid videobeschrijving automatisch uit: ", "preferences_extend_desc_label": "Breid videobeschrijving automatisch uit: ",
"preferences_vr_mode_label": "Interactieve 360-graden-video's (vereist WebGL) ", "preferences_vr_mode_label": "Interactieve 360-graden-video's ",
"preferences_category_visual": "Visuele instellingen", "preferences_category_visual": "Visuele instellingen",
"preferences_player_style_label": "Speler vormgeving ", "preferences_player_style_label": "Speler vormgeving ",
"Dark mode: ": "Donkere modus: ", "Dark mode: ": "Donkere modus: ",
@ -156,12 +159,17 @@
"Hide replies": "Antwoorden verbergen", "Hide replies": "Antwoorden verbergen",
"Show replies": "Antwoorden tonen", "Show replies": "Antwoorden tonen",
"Incorrect password": "Wachtwoord is onjuist", "Incorrect password": "Wachtwoord is onjuist",
"Quota exceeded, try again in a few hours": "Quota overschreden; probeer het over een paar uur opnieuw",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Kan niet inloggen. Zorg ervoor dat authenticatie in twee stappen (Authenticator of sms) is ingeschakeld.",
"Invalid TFA code": "Onjuiste TFA-code",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Inloggen mislukt. Wellicht is authenticatie in twee stappen niet ingeschakeld op je account.",
"Wrong answer": "Onjuist antwoord", "Wrong answer": "Onjuist antwoord",
"Erroneous CAPTCHA": "Onjuiste CAPTCHA", "Erroneous CAPTCHA": "Onjuiste CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA is vereist", "CAPTCHA is a required field": "CAPTCHA is vereist",
"User ID is a required field": "Gebruikers-id is vereist", "User ID is a required field": "Gebruikers-id is vereist",
"Password is a required field": "Wachtwoord is vereist", "Password is a required field": "Wachtwoord is vereist",
"Wrong username or password": "Onjuiste gebruikersnaam of wachtwoord", "Wrong username or password": "Onjuiste gebruikersnaam of wachtwoord",
"Please sign in using 'Log in with Google'": "Log in via 'Inloggen met Google'",
"Password cannot be empty": "Het wachtwoordveld mag niet leeg zijn", "Password cannot be empty": "Het wachtwoordveld mag niet leeg zijn",
"Password cannot be longer than 55 characters": "Het wachtwoord mag niet langer dan 55 tekens zijn", "Password cannot be longer than 55 characters": "Het wachtwoord mag niet langer dan 55 tekens zijn",
"Please log in": "Log in", "Please log in": "Log in",
@ -312,35 +320,36 @@
"`x` marked it with a ❤": "`x` heeft dit gemarkeerd met ❤", "`x` marked it with a ❤": "`x` heeft dit gemarkeerd met ❤",
"Audio mode": "Audiomodus", "Audio mode": "Audiomodus",
"Video mode": "Videomodus", "Video mode": "Videomodus",
"channel_tab_videos_label": "Video's", "Videos": "Video's",
"Playlists": "Afspeellijsten", "Playlists": "Afspeellijsten",
"channel_tab_community_label": "Gemeenschap", "Community": "Gemeenschap",
"search_filters_sort_option_relevance": "relevantie", "relevance": "relevantie",
"search_filters_sort_option_rating": "beoordeling", "rating": "beoordeling",
"search_filters_sort_option_date": "datum", "date": "datum",
"search_filters_sort_option_views": "keren bekeken", "views": "keren bekeken",
"search_filters_type_label": "Type inhoud", "content_type": "Type inhoud",
"search_filters_duration_label": "duur", "duration": "duur",
"search_filters_features_label": "eigenschappen", "features": "eigenschappen",
"search_filters_sort_label": "sorteren", "sort": "sorteren",
"search_filters_date_option_hour": "uur", "hour": "uur",
"search_filters_date_option_today": "vandaag", "today": "vandaag",
"search_filters_date_option_week": "week", "week": "week",
"search_filters_date_option_month": "maand", "month": "maand",
"search_filters_date_option_year": "jaar", "year": "jaar",
"search_filters_type_option_video": "video", "video": "video",
"search_filters_type_option_channel": "kanaal", "channel": "kanaal",
"search_filters_type_option_playlist": "afspeellijst", "playlist": "afspeellijst",
"search_filters_type_option_movie": "film", "movie": "film",
"search_filters_type_option_show": "show", "show": "show",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "ondertitels", "subtitles": "ondertitels",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Live", "live": "Live",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "locatie", "location": "locatie",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "verfijnen",
"Current version: ": "Huidige versie: ", "Current version: ": "Huidige versie: ",
"Switch Invidious Instance": "Schakel tussen de Invidious Instanties", "Switch Invidious Instance": "Schakel tussen de Invidious Instanties",
"preferences_automatic_instance_redirect_label": "Automatische instantie-omleiding (terugval naar redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Automatische instantie-omleiding (terugval naar redirect.invidious.io): ",
@ -348,8 +357,8 @@
"preferences_region_label": "Inhoud land: ", "preferences_region_label": "Inhoud land: ",
"preferences_category_misc": "Diverse voorkeuren", "preferences_category_misc": "Diverse voorkeuren",
"preferences_show_nick_label": "Toon bijnaam bovenaan: ", "preferences_show_nick_label": "Toon bijnaam bovenaan: ",
"Released under the AGPLv3 on Github.": "Uitgebracht onder de AGPLv3 op GitHub.", "Released under the AGPLv3 on Github.": "Uitgebracht onder de AGPLv3 op Github.",
"search_filters_duration_option_short": "Kort (<4 minuten)", "short": "Kort (<4 minuten)",
"next_steps_error_message_refresh": "Vernieuwen", "next_steps_error_message_refresh": "Vernieuwen",
"next_steps_error_message_go_to_youtube": "Ga naar YouTube", "next_steps_error_message_go_to_youtube": "Ga naar YouTube",
"footer_donate_page": "Doneren", "footer_donate_page": "Doneren",
@ -357,9 +366,10 @@
"footer_original_source_code": "Originele bron-code", "footer_original_source_code": "Originele bron-code",
"footer_modfied_source_code": "Gewijzigde bron-code", "footer_modfied_source_code": "Gewijzigde bron-code",
"adminprefs_modified_source_code_url_label": "URL naar gewijzigde bron-code-opslagplaats", "adminprefs_modified_source_code_url_label": "URL naar gewijzigde bron-code-opslagplaats",
"Broken? Try another Invidious Instance": "Kapot? Probeer een andere Invidious Instantie",
"next_steps_error_message": "Waarna u moet proberen om: ", "next_steps_error_message": "Waarna u moet proberen om: ",
"footer_source_code": "Bron-code", "footer_source_code": "Bron-code",
"search_filters_duration_option_long": "Lang (> 20 minuten)", "long": "Lang (> 20 minuten)",
"preferences_quality_option_dash": "DASH (adaptieve kwaliteit)", "preferences_quality_option_dash": "DASH (adaptieve kwaliteit)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Gemiddeld", "preferences_quality_option_medium": "Gemiddeld",
@ -385,82 +395,8 @@
"user_created_playlists": "`x` afspeellijsten aangemaakt", "user_created_playlists": "`x` afspeellijsten aangemaakt",
"user_saved_playlists": "`x` afspeellijsten opgeslagen", "user_saved_playlists": "`x` afspeellijsten opgeslagen",
"Video unavailable": "Video onbeschikbaar", "Video unavailable": "Video onbeschikbaar",
"preferences_save_player_pos_label": "Afspeelpositie opslaan: ", "preferences_save_player_pos_label": "Huidig afspeeltijdstip opslaan: ",
"none": "geen", "none": "geen",
"search_filters_features_option_purchased": "Gekocht", "purchased": "Gekocht",
"search_filters_features_option_three_sixty": "360º", "360": "360º"
"search_filters_title": "Verfijnen",
"generic_count_days": "{{count}} dag",
"generic_count_days_plural": "{{count}} dagen",
"Chinese (Taiwan)": "Chinees (Taiwan)",
"Dutch (auto-generated)": "Nederlands (automatisch gegenereerd)",
"tokens_count": "{{count}} token",
"tokens_count_plural": "{{count}} tokens",
"generic_count_seconds": "{{count}} second",
"generic_count_seconds_plural": "{{count}} seconden",
"generic_count_weeks": "{{count}} week",
"generic_count_weeks_plural": "{{count}} weken",
"English (United States)": "Engels (Verenigde Staten)",
"generic_views_count": "{{count}} keer bekeken",
"generic_views_count_plural": "{{count}} keren bekeken",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} video's",
"generic_subscriptions_count": "{{count}} abonnement",
"generic_subscriptions_count_plural": "{{count}} abonnementen",
"subscriptions_unseen_notifs_count": "{{count}} ongeziene melding",
"subscriptions_unseen_notifs_count_plural": "{{count}} ongeziene meldingen",
"preferences_watch_history_label": "Kijkgeschiedenis inschakelen: ",
"crash_page_switch_instance": "geprobeerd hebt om <a href=\"`x`\">een andere instantie te gebruiken</a>",
"Portuguese (auto-generated)": "Portugees (automatisch gegenereerd)",
"Russian (auto-generated)": "Russisch (automatisch gegenereerd)",
"Vietnamese (auto-generated)": "Vietnamees (automatisch gegenereerd)",
"comments_points_count": "{{count}} punt",
"comments_points_count_plural": "{{count}} punten",
"crash_page_before_reporting": "Voor je een bug rapporteert, kijk even na of je:",
"Chinese": "Chinees",
"search_filters_features_option_vr180": "VR180",
"search_filters_date_label": "Uploaddatum",
"Portuguese (Brazil)": "Portugees (Brazilië)",
"Interlingue": "Interlingue",
"Turkish (auto-generated)": "Turks (automatisch gegenereerd)",
"search_filters_date_option_none": "Alle datums",
"generic_subscribers_count": "{{count}} abonnee",
"generic_subscribers_count_plural": "{{count}} abonnees",
"search_message_no_results": "Geen resultaten teruggevonden.",
"search_message_change_filters_or_query": "Probeer je zoekopdracht uit te breiden en/of de filters aan te passen.",
"English (United Kingdom)": "Engels (Verenigd Koninkrijk)",
"German (auto-generated)": "Duits (automatisch gegenereerd)",
"Spanish (Mexico)": "Spaans (Mexico)",
"Spanish (Spain)": "Spaans (Spanje)",
"search_filters_type_option_all": "Alle types",
"crash_page_refresh": "geprobeerd hebt om <a href=\"`x`\">de pagina te herladen</a>",
"comments_view_x_replies": "{{count}} reactie bekijken",
"comments_view_x_replies_plural": "{{count}} reacties bekijken",
"generic_count_years": "{{count}} jaar",
"generic_count_years_plural": "{{count}} jaren",
"generic_count_months": "{{count}} maand",
"generic_count_months_plural": "{{count}} maanden",
"generic_count_hours": "{{count}} uur",
"generic_count_hours_plural": "{{count}} uren",
"generic_count_minutes": "{{count}} minuut",
"generic_count_minutes_plural": "{{count}} minuten",
"French (auto-generated)": "Frans (automatisch gegenereerd)",
"generic_playlists_count": "{{count}} afspeellijst",
"generic_playlists_count_plural": "{{count}} afspeellijsten",
"Chinese (Hong Kong)": "Chinees (Hongkong)",
"Korean (auto-generated)": "Koreaans (automatisch gegenereerd)",
"search_filters_apply_button": "Geselecteerd filters toepassen",
"search_message_use_another_instance": " Je kan ook <a href=\"`x`\">zoeken op een andere instantie</a>.",
"Cantonese (Hong Kong)": "Kantonees (Hongkong)",
"Chinese (China)": "Chinees (China)",
"crash_page_read_the_faq": "de <a href=\"`x`\">veelgestelde vragen (FAQ)</a> gelezen hebt",
"crash_page_search_issue": "gezocht hebt op <a href=\"`x`\">bestaande problemen op GitHub</a>",
"search_filters_duration_option_none": "Alle lengtes",
"Indonesian (auto-generated)": "Indonesisch (automatisch gegenereerd)",
"Italian (auto-generated)": "Italiaans (automatisch gegenereerd)",
"Japanese (auto-generated)": "Japans (automatisch gegenereerd)",
"Spanish (auto-generated)": "Spaans (automatisch gegenereerd)",
"crash_page_you_found_a_bug": "Je lijkt een bug in Invidious tegengekomen te zijn!",
"search_filters_duration_option_medium": "Gemiddeld (4 - 20 minuten)",
"crash_page_report_issue": "Indien het bovenstaande niet hielp, gelieve dan <a href=\"`x`\">een nieuw ticket op GitHub</a> te openen (liefst in het Engels) en neem de volgende tekst op in je bericht (gelieve deze NIET te vertalen):"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Wyczyścić historię?", "Clear watch history?": "Wyczyścić historię?",
"New password": "Nowe hasło", "New password": "Nowe hasło",
"New passwords must match": "Nowe hasła muszą być identyczne", "New passwords must match": "Nowe hasła muszą być identyczne",
"Cannot change password for Google accounts": "Nie można zmienić hasła do konta Google",
"Authorize token?": "Autoryzować token?", "Authorize token?": "Autoryzować token?",
"Authorize token for `x`?": "Autoryzować token dla `x`?", "Authorize token for `x`?": "Autoryzować token dla `x`?",
"Yes": "Tak", "Yes": "Tak",
@ -36,6 +37,7 @@
"source": "źródło", "source": "źródło",
"Log in": "Zaloguj", "Log in": "Zaloguj",
"Log in/register": "Zaloguj/Zarejestruj", "Log in/register": "Zaloguj/Zarejestruj",
"Log in with Google": "Zaloguj do Google",
"User ID": "ID użytkownika", "User ID": "ID użytkownika",
"Password": "Hasło", "Password": "Hasło",
"Time (h:mm:ss):": "Godzina (h:mm:ss):", "Time (h:mm:ss):": "Godzina (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Zaloguj się", "Sign In": "Zaloguj się",
"Register": "Zarejestruj się", "Register": "Zarejestruj się",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Kod weryfikacyjny Google",
"Preferences": "Preferencje", "Preferences": "Preferencje",
"preferences_category_player": "Ustawienia odtwarzacza", "preferences_category_player": "Ustawienia odtwarzacza",
"preferences_video_loop_label": "Zawsze zapętlaj: ", "preferences_video_loop_label": "Zawsze zapętlaj: ",
@ -51,7 +54,7 @@
"preferences_continue_label": "Domyślnie odtwarzaj następny: ", "preferences_continue_label": "Domyślnie odtwarzaj następny: ",
"preferences_continue_autoplay_label": "Odtwórz następny film: ", "preferences_continue_autoplay_label": "Odtwórz następny film: ",
"preferences_listen_label": "Tryb dźwiękowy: ", "preferences_listen_label": "Tryb dźwiękowy: ",
"preferences_local_label": "Wideo przez proxy? ", "preferences_local_label": "Filmy przez proxy? ",
"preferences_speed_label": "Domyślna prędkość: ", "preferences_speed_label": "Domyślna prędkość: ",
"preferences_quality_label": "Preferowana jakość filmów: ", "preferences_quality_label": "Preferowana jakość filmów: ",
"preferences_volume_label": "Głośność odtwarzacza: ", "preferences_volume_label": "Głośność odtwarzacza: ",
@ -64,7 +67,7 @@
"preferences_annotations_label": "Domyślnie pokazuj adnotacje: ", "preferences_annotations_label": "Domyślnie pokazuj adnotacje: ",
"preferences_extend_desc_label": "Automatycznie rozwijaj opisy filmów: ", "preferences_extend_desc_label": "Automatycznie rozwijaj opisy filmów: ",
"preferences_vr_mode_label": "Interaktywne filmy 360 stopni (wymaga WebGL): ", "preferences_vr_mode_label": "Interaktywne filmy 360 stopni (wymaga WebGL): ",
"preferences_category_visual": "Preferencje wizualne", "preferences_category_visual": "Preferencje Wizualne",
"preferences_player_style_label": "Styl odtwarzacza: ", "preferences_player_style_label": "Styl odtwarzacza: ",
"Dark mode: ": "Ciemny motyw: ", "Dark mode: ": "Ciemny motyw: ",
"preferences_dark_mode_label": "Motyw: ", "preferences_dark_mode_label": "Motyw: ",
@ -109,7 +112,7 @@
"Registration enabled: ": "Rejestracja włączona? ", "Registration enabled: ": "Rejestracja włączona? ",
"Report statistics: ": "Raportować statystyki? ", "Report statistics: ": "Raportować statystyki? ",
"Save preferences": "Zapisz preferencje", "Save preferences": "Zapisz preferencje",
"Subscription manager": "Menedżer subskrypcji", "Subscription manager": "Manager subskrybcji",
"Token manager": "Menedżer tokenów", "Token manager": "Menedżer tokenów",
"Token": "Token", "Token": "Token",
"Import/export": "Import/Eksport", "Import/export": "Import/Eksport",
@ -137,6 +140,7 @@
"Show less": "Pokaż mniej", "Show less": "Pokaż mniej",
"Watch on YouTube": "Zobacz film na YouTube", "Watch on YouTube": "Zobacz film na YouTube",
"Switch Invidious Instance": "Przełącz instancję Invidious", "Switch Invidious Instance": "Przełącz instancję Invidious",
"Broken? Try another Invidious Instance": "Nie działa? Spróbuj innej instancji Invidious",
"Hide annotations": "Ukryj adnotacje", "Hide annotations": "Ukryj adnotacje",
"Show annotations": "Pokaż adnotacje", "Show annotations": "Pokaż adnotacje",
"Genre: ": "Gatunek: ", "Genre: ": "Gatunek: ",
@ -160,12 +164,17 @@
"Hide replies": "Ukryj odpowiedzi", "Hide replies": "Ukryj odpowiedzi",
"Show replies": "Pokaż odpowiedzi", "Show replies": "Pokaż odpowiedzi",
"Incorrect password": "Niepoprawne hasło", "Incorrect password": "Niepoprawne hasło",
"Quota exceeded, try again in a few hours": "Przekroczony limit zapytań, spróbuj ponownie za kilka godzin",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Nie udało się zalogować, upewnij się, że dwuetapowe uwierzytelnianie (Autentykator lub SMS) jest aktywne.",
"Invalid TFA code": "Niepoprawny kod TFA",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Nie udało się zalogować. To może być spowodowane wyłączoną dwustopniową autoryzacją na twoim koncie.",
"Wrong answer": "Niepoprawna odpowiedź", "Wrong answer": "Niepoprawna odpowiedź",
"Erroneous CAPTCHA": "CAPTCHA wykonane błędnie", "Erroneous CAPTCHA": "CAPTCHA wykonane błędnie",
"CAPTCHA is a required field": "CAPTCHA jest polem wymaganym", "CAPTCHA is a required field": "CAPTCHA jest polem wymaganym",
"User ID is a required field": "ID użytkownika jest polem wymaganym", "User ID is a required field": "ID użytkownika jest polem wymaganym",
"Password is a required field": "Hasło jest polem wymaganym", "Password is a required field": "Hasło jest polem wymaganym",
"Wrong username or password": "Niepoprawny login lub hasło", "Wrong username or password": "Niepoprawny login lub hasło",
"Please sign in using 'Log in with Google'": "Zaloguj się używając \"Zaloguj się przez Google\"",
"Password cannot be empty": "Hasło nie może być puste", "Password cannot be empty": "Hasło nie może być puste",
"Password cannot be longer than 55 characters": "Hasło nie może być dłuższe niż 55 znaków", "Password cannot be longer than 55 characters": "Hasło nie może być dłuższe niż 55 znaków",
"Please log in": "Proszę się zalogować", "Please log in": "Proszę się zalogować",
@ -275,7 +284,7 @@
"Somali": "somalijski", "Somali": "somalijski",
"Southern Sotho": "sotho południowy", "Southern Sotho": "sotho południowy",
"Spanish": "hiszpański", "Spanish": "hiszpański",
"Spanish (Latin America)": "hiszpański (Ameryka Łacińska)", "Spanish (Latin America)": "hiszpański (ameryka łacińska)",
"Sundanese": "sundajski", "Sundanese": "sundajski",
"Swahili": "suahili", "Swahili": "suahili",
"Swedish": "szwedzki", "Swedish": "szwedzki",
@ -309,7 +318,6 @@
"Movies": "Filmy", "Movies": "Filmy",
"Download": "Pobierz", "Download": "Pobierz",
"Download as: ": "Pobierz jako: ", "Download as: ": "Pobierz jako: ",
"Download is disabled": "Pobieranie jest wyłączone",
"%A %B %-d, %Y": "%A, %-d %B %Y", "%A %B %-d, %Y": "%A, %-d %B %Y",
"(edited)": "(edytowany)", "(edited)": "(edytowany)",
"YouTube comment permalink": "Odnośnik bezpośredni do komentarza na YouTube", "YouTube comment permalink": "Odnośnik bezpośredni do komentarza na YouTube",
@ -317,37 +325,38 @@
"`x` marked it with a ❤": "`x` oznaczonych ❤", "`x` marked it with a ❤": "`x` oznaczonych ❤",
"Audio mode": "Tryb audio", "Audio mode": "Tryb audio",
"Video mode": "Tryb wideo", "Video mode": "Tryb wideo",
"channel_tab_videos_label": "Wideo", "Videos": "Filmy",
"Playlists": "Playlisty", "Playlists": "Playlisty",
"channel_tab_community_label": "Społeczność", "Community": "Społeczność",
"search_filters_sort_option_relevance": "Trafność", "relevance": "Trafność",
"search_filters_sort_option_rating": "Ocena", "rating": "Ocena",
"search_filters_sort_option_date": "Data przesłania", "date": "data",
"search_filters_sort_option_views": "Liczba wyświetleń", "views": "Liczba wyświetleń",
"search_filters_type_label": "Typ", "content_type": "Typ",
"search_filters_duration_label": "Długość", "duration": "Długość",
"search_filters_features_label": "Funkcje", "features": "Funkcje",
"search_filters_sort_label": "Sortuj wg", "sort": "sortuj",
"search_filters_date_option_hour": "Ostatnia godzina", "hour": "godzina",
"search_filters_date_option_today": "Dzisiaj", "today": "dzisiaj",
"search_filters_date_option_week": "W tym tygodniu", "week": "tydzień",
"search_filters_date_option_month": "W tym miesiącu", "month": "miesiąc",
"search_filters_date_option_year": "W tym roku", "year": "rok",
"search_filters_type_option_video": "Wideo", "video": "Film",
"search_filters_type_option_channel": "Kanał", "channel": "kanał",
"search_filters_type_option_playlist": "Playlista", "playlist": "playlista",
"search_filters_type_option_movie": "Film", "movie": "film",
"search_filters_type_option_show": "Pokaż", "show": "pokaż",
"search_filters_features_option_hd": "HD", "hd": "hd",
"search_filters_features_option_subtitles": "Napisy/CC", "subtitles": "napisy",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "creative_commons",
"search_filters_features_option_three_d": "3D", "3d": "3d",
"search_filters_features_option_live": "Na żywo", "live": "Na żywo",
"search_filters_features_option_four_k": "4K", "4k": "4k",
"search_filters_features_option_location": "Lokalizacja", "location": "Lokalizacja",
"search_filters_features_option_hdr": "HDR", "hdr": "hdr",
"filter": "filtr",
"Current version: ": "Aktualna wersja: ", "Current version: ": "Aktualna wersja: ",
"next_steps_error_message": "Po czym należy spróbować: ", "next_steps_error_message": "Po czym powinien*ś spróbować: ",
"next_steps_error_message_refresh": "Odśwież", "next_steps_error_message_refresh": "Odśwież",
"next_steps_error_message_go_to_youtube": "Przejdź do YouTube", "next_steps_error_message_go_to_youtube": "Przejdź do YouTube",
"invidious": "Invidious", "invidious": "Invidious",
@ -390,11 +399,11 @@
"generic_count_seconds_0": "{{count}} sekunda", "generic_count_seconds_0": "{{count}} sekunda",
"generic_count_seconds_1": "{{count}} sekundy", "generic_count_seconds_1": "{{count}} sekundy",
"generic_count_seconds_2": "{{count}} sekund", "generic_count_seconds_2": "{{count}} sekund",
"crash_page_you_found_a_bug": "Wygląda na to, że udało ci się znaleźć błąd w Invidious!", "crash_page_you_found_a_bug": "Wygląda na to że udało ci się znaleźć błąd w Invidious!",
"crash_page_refresh": "próbowano <a href=\"`x`\">odświeżyć stronę</a>", "crash_page_refresh": "próbowano <a href=\"`x`\">odświeżyć stronę</a>",
"crash_page_switch_instance": "próbowano <a href=\"`x`\">użyć innej instancji</a>", "crash_page_switch_instance": "spróbowano <a href=\"`x`\"> użyć innej instancji</a>",
"crash_page_read_the_faq": "przeczytaj <a href=\"`x`\">Najczęściej zadawane pytania (FAQ)</a>", "crash_page_read_the_faq": "przeczytaj <a href=\"`x`\"> Często Zadawane Pytania (FAQ)</a>",
"crash_page_search_issue": "próbowano poszukać <a href=\"`x`\">istniejących zgłoszeń na GitHubie</a>", "crash_page_search_issue": "próbowano poszukać <a href=\"`x`\"> istniejących zgłoszeń na GitHub'ie</a>",
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_720p": "720p", "preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
@ -411,20 +420,20 @@
"generic_count_years_0": "{{count}} rok", "generic_count_years_0": "{{count}} rok",
"generic_count_years_1": "{{count}} lata", "generic_count_years_1": "{{count}} lata",
"generic_count_years_2": "{{count}} lat", "generic_count_years_2": "{{count}} lat",
"crash_page_before_reporting": "Przed zgłoszeniem błędu, upewnij się, że masz:", "crash_page_before_reporting": "Przed zgłoszeniem błędu, upewnij się że masz:",
"crash_page_report_issue": "Jeżeli nic z powyższych opcji nie pomogło, proszę <a href=\"`x`\">otworzyć nowe zgłoszenie na GitHubie</a> (najlepiej po angielsku) i dodać poniższy tekst w twojej wiadomości (NIE tłumacz tego tekstu):", "crash_page_report_issue": "Jeżeli nic z powyższych opcji nie pomogło, proszę <a href=\"`x`\"> otworzyć nowe zgłoszenie na GitHub'ie</a> (najlepiej po Angielsku) i dodać poniższy tekst w twojej wiadomości (NIE tłumacz tego tekstu):",
"preferences_quality_dash_option_auto": "Automatyczna", "preferences_quality_dash_option_auto": "Automatyczna",
"preferences_quality_dash_option_best": "Najlepsza", "preferences_quality_dash_option_best": "Najlepsza",
"preferences_quality_dash_option_worst": "Najgorsza", "preferences_quality_dash_option_worst": "Najgorsza",
"preferences_quality_option_dash": "DASH (jakość adaptacyjna)", "preferences_quality_option_dash": "DASH (jakość adaptywna)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Średnia", "preferences_quality_option_medium": "Średnia",
"preferences_quality_option_small": "Mała", "preferences_quality_option_small": "Mała",
"preferences_quality_dash_label": "Preferowana jakość filmu DASH: ", "preferences_quality_dash_label": "Preferowana jakość filmu DASH: ",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_2160p": "2160p", "preferences_quality_dash_option_2160p": "2160p",
"search_filters_features_option_purchased": "Zakupione", "purchased": "Zakupione",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"footer_donate_page": "Dotacja", "footer_donate_page": "Dotacja",
"none": "żadne", "none": "żadne",
"videoinfo_started_streaming_x_ago": "Transmisja rozpoczęta `x` temu", "videoinfo_started_streaming_x_ago": "Transmisja rozpoczęta `x` temu",
@ -436,21 +445,21 @@
"user_saved_playlists": "`x` zapisanych playlist", "user_saved_playlists": "`x` zapisanych playlist",
"Video unavailable": "Film niedostępny", "Video unavailable": "Film niedostępny",
"preferences_save_player_pos_label": "Zapisz pozycję odtwarzania: ", "preferences_save_player_pos_label": "Zapisz pozycję odtwarzania: ",
"preferences_region_label": "Kraj treści: ", "preferences_region_label": "Region zawartości: ",
"Released under the AGPLv3 on Github.": "Wydany na licencji AGPLv3 na GitHub.", "Released under the AGPLv3 on Github.": "Wydany na licencji AGPLv3 na Github.",
"search_filters_duration_option_short": "Krótka (< 4 minut)", "short": "Krótkie (< 4 minutes)",
"search_filters_duration_option_long": "Długa (> 20 minut)", "long": "Długie (> 20 minutes)",
"footer_documentation": "Dokumentacja", "footer_documentation": "Dokumentacja",
"footer_source_code": "Kod źródłowy", "footer_source_code": "Kod źródłowy",
"footer_modfied_source_code": "Zmodyfikowany kod źródłowy", "footer_modfied_source_code": "Zmodyfikowany Kod źródłowy",
"footer_original_source_code": "Oryginalny kod źródłowy", "footer_original_source_code": "Oryginalny kod źródłowy",
"adminprefs_modified_source_code_url_label": "Adres URL do repozytorium ze zmodyfikowanym kodem źródłowym", "adminprefs_modified_source_code_url_label": "Adres URL do repozytorium z zmodyfikowanym kodem źródłowym",
"English (United Kingdom)": "angielski (Wielka Brytania)", "English (United Kingdom)": "angielski (Wielka Brytania)",
"English (United States)": "angielski (Stany Zjednoczone)", "English (United States)": "angielski (Stany Zjednoczone)",
"Cantonese (Hong Kong)": "kantoński (Hongkong)", "Cantonese (Hong Kong)": "kantoński (Hong Kong)",
"Chinese": "chiński", "Chinese": "chiński",
"Chinese (China)": "chiński (Chiny)", "Chinese (China)": "chiński (Chiny)",
"Chinese (Hong Kong)": "chiński (Hongkong)", "Chinese (Hong Kong)": "chiński (Hong Kong)",
"Chinese (Taiwan)": "chiński (Tajwan)", "Chinese (Taiwan)": "chiński (Tajwan)",
"Dutch (auto-generated)": "niderlandzki (wygenerowany automatycznie)", "Dutch (auto-generated)": "niderlandzki (wygenerowany automatycznie)",
"French (auto-generated)": "francuski (wygenerowany automatycznie)", "French (auto-generated)": "francuski (wygenerowany automatycznie)",
@ -467,30 +476,5 @@
"Japanese (auto-generated)": "japoński (wygenerowany automatycznie)", "Japanese (auto-generated)": "japoński (wygenerowany automatycznie)",
"Russian (auto-generated)": "rosyjski (wygenerowany automatycznie)", "Russian (auto-generated)": "rosyjski (wygenerowany automatycznie)",
"Portuguese (auto-generated)": "portugalski (wygenerowany automatycznie)", "Portuguese (auto-generated)": "portugalski (wygenerowany automatycznie)",
"Portuguese (Brazil)": "portugalski (Brazylia)", "Portuguese (Brazil)": "portugalski (Brazylia)"
"search_filters_title": "Filtr",
"error_video_not_in_playlist": "Żądany film nie istnieje na tej playliście. <a href=\"`x`\">Kliknij tutaj, aby przejść do strony głównej playlisty.</a>",
"Popular enabled: ": "Popularne włączone: ",
"search_message_no_results": "Nie znaleziono wyników.",
"preferences_watch_history_label": "Włącz historię oglądania: ",
"search_filters_apply_button": "Zastosuj wybrane filtry",
"search_message_change_filters_or_query": "Spróbuj poszerzyć zapytanie wyszukiwania i/lub zmienić filtry.",
"search_filters_date_label": "Data przesłania",
"search_filters_features_option_vr180": "VR180",
"search_filters_date_option_none": "Dowolna data",
"search_message_use_another_instance": " Możesz także <a href=\"`x`\">wyszukać w innej instancji</a>.",
"search_filters_type_option_all": "Dowolny typ",
"search_filters_duration_option_none": "Dowolna długość",
"search_filters_duration_option_medium": "Średnia (4-20 minut)",
"channel_tab_streams_label": "Na żywo",
"channel_tab_channels_label": "Kanały",
"channel_tab_playlists_label": "Playlisty",
"channel_tab_shorts_label": "Shorts",
"Music in this video": "Muzyka w tym filmie",
"Artist: ": "Wykonawca: ",
"Album: ": "Album: ",
"Song: ": "Piosenka: ",
"Channel Sponsor": "Sponsor kanału",
"Standard YouTube license": "Standardowa licencja YouTube",
"Import YouTube playlist (.csv)": "Importuj playlistę YouTube (.csv)"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Limpar histórico de reprodução?", "Clear watch history?": "Limpar histórico de reprodução?",
"New password": "Nova senha", "New password": "Nova senha",
"New passwords must match": "Nova senha deve ser igual", "New passwords must match": "Nova senha deve ser igual",
"Cannot change password for Google accounts": "Não é possível alterar sua senha de contas do Google",
"Authorize token?": "Autorizar o token?", "Authorize token?": "Autorizar o token?",
"Authorize token for `x`?": "Autorizar o token para `x`?", "Authorize token for `x`?": "Autorizar o token para `x`?",
"Yes": "Sim", "Yes": "Sim",
"No": "Não", "No": "Não",
"Import and Export Data": "Importar e Exportar Dados", "Import and Export Data": "Importar e Exportar Dados",
"Import": "Importar", "Import": "Importar",
"Import Invidious data": "Importar dados em JSON do Invidious", "Import Invidious data": "Importar dados do Invidious",
"Import YouTube subscriptions": "Importar inscrições do YouTube/OPML", "Import YouTube subscriptions": "Importar inscrições do YouTube",
"Import FreeTube subscriptions (.db)": "Importar inscrições do FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importar inscrições do FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importar inscrições do NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importar inscrições do NewPipe (.json)",
"Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)", "Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)",
"Export": "Exportar", "Export": "Exportar",
"Export subscriptions as OPML": "Exportar inscrições como OPML", "Export subscriptions as OPML": "Exportar inscrições como OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar inscrições como OPML (para NewPipe e FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar inscrições como OPML (para NewPipe e FreeTube)",
"Export data as JSON": "Exportar dados Invidious como JSON", "Export data as JSON": "Exportar dados como JSON",
"Delete account?": "Excluir conta?", "Delete account?": "Excluir conta?",
"History": "Histórico", "History": "Histórico",
"An alternative front-end to YouTube": "Uma interface alternativa para o YouTube", "An alternative front-end to YouTube": "Uma interface alternativa para o YouTube",
@ -36,6 +37,7 @@
"source": "código-fonte", "source": "código-fonte",
"Log in": "Entrar", "Log in": "Entrar",
"Log in/register": "Entrar/Registrar", "Log in/register": "Entrar/Registrar",
"Log in with Google": "Entrar com conta Google",
"User ID": "Usuário", "User ID": "Usuário",
"Password": "Senha", "Password": "Senha",
"Time (h:mm:ss):": "Hora (h:mm:ss):", "Time (h:mm:ss):": "Hora (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Entrar", "Sign In": "Entrar",
"Register": "Registrar", "Register": "Registrar",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Código de verificação do Google",
"Preferences": "Preferências", "Preferences": "Preferências",
"preferences_category_player": "Preferências do reprodutor", "preferences_category_player": "Preferências do reprodutor",
"preferences_video_loop_label": "Repetir sempre: ", "preferences_video_loop_label": "Repetir sempre: ",
@ -63,7 +66,7 @@
"preferences_related_videos_label": "Mostrar vídeos relacionados: ", "preferences_related_videos_label": "Mostrar vídeos relacionados: ",
"preferences_annotations_label": "Sempre mostrar anotações: ", "preferences_annotations_label": "Sempre mostrar anotações: ",
"preferences_extend_desc_label": "Estenda automaticamente a descrição do vídeo: ", "preferences_extend_desc_label": "Estenda automaticamente a descrição do vídeo: ",
"preferences_vr_mode_label": "Vídeos interativos de 360 graus (requer WebGL): ", "preferences_vr_mode_label": "Vídeos interativos de 360 graus: ",
"preferences_category_visual": "Preferências visuais", "preferences_category_visual": "Preferências visuais",
"preferences_player_style_label": "Estilo do tocador: ", "preferences_player_style_label": "Estilo do tocador: ",
"Dark mode: ": "Modo escuro: ", "Dark mode: ": "Modo escuro: ",
@ -120,7 +123,7 @@
"Subscriptions": "Inscrições", "Subscriptions": "Inscrições",
"search": "Pesquisar", "search": "Pesquisar",
"Log out": "Sair", "Log out": "Sair",
"Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no GitHub.", "Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no Github.",
"Source available here.": "Código-fonte disponível aqui.", "Source available here.": "Código-fonte disponível aqui.",
"View JavaScript license information.": "Ver informações da licença do JavaScript.", "View JavaScript license information.": "Ver informações da licença do JavaScript.",
"View privacy policy.": "Ver a política de privacidade.", "View privacy policy.": "Ver a política de privacidade.",
@ -140,6 +143,7 @@
"Show less": "Mostrar menos", "Show less": "Mostrar menos",
"Watch on YouTube": "Assistir no YouTube", "Watch on YouTube": "Assistir no YouTube",
"Switch Invidious Instance": "Mudar a instância do Invidious", "Switch Invidious Instance": "Mudar a instância do Invidious",
"Broken? Try another Invidious Instance": "Quebrou? Tente outra Instância do Invidious",
"Hide annotations": "Ocultar anotações", "Hide annotations": "Ocultar anotações",
"Show annotations": "Mostrar anotações", "Show annotations": "Mostrar anotações",
"Genre: ": "Gênero: ", "Genre: ": "Gênero: ",
@ -163,12 +167,17 @@
"Hide replies": "Ocultar respostas", "Hide replies": "Ocultar respostas",
"Show replies": "Mostrar respostas", "Show replies": "Mostrar respostas",
"Incorrect password": "Senha incorreta", "Incorrect password": "Senha incorreta",
"Quota exceeded, try again in a few hours": "Cota excedida, tente novamente em algumas horas",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Não foi possível fazer login, sua autenticação em dois passos (app autenticador ou sms) deve estar ativada.",
"Invalid TFA code": "Código TFA inválido",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Falha no login. Isso pode acontecer porque a autenticação em dois passos está desativada para sua conta.",
"Wrong answer": "Resposta incorreta", "Wrong answer": "Resposta incorreta",
"Erroneous CAPTCHA": "CAPTCHA inválido", "Erroneous CAPTCHA": "CAPTCHA inválido",
"CAPTCHA is a required field": "O CAPTCHA é um campo obrigatório", "CAPTCHA is a required field": "O CAPTCHA é um campo obrigatório",
"User ID is a required field": "O nome de usuário é um campo obrigatório", "User ID is a required field": "O nome de usuário é um campo obrigatório",
"Password is a required field": "A senha é um campo obrigatório", "Password is a required field": "A senha é um campo obrigatório",
"Wrong username or password": "Nome de usuário ou senha inválidos", "Wrong username or password": "Nome de usuário ou senha inválidos",
"Please sign in using 'Log in with Google'": "Por favor, entre usando 'Entrar com conta Google'",
"Password cannot be empty": "A senha não pode ficar em branco", "Password cannot be empty": "A senha não pode ficar em branco",
"Password cannot be longer than 55 characters": "A senha não pode ter mais que 55 caracteres", "Password cannot be longer than 55 characters": "A senha não pode ter mais que 55 caracteres",
"Please log in": "Por favor, inicie sua sessão", "Please log in": "Por favor, inicie sua sessão",
@ -333,47 +342,48 @@
"`x` marked it with a ❤": "`x` foi marcado como ❤", "`x` marked it with a ❤": "`x` foi marcado como ❤",
"Audio mode": "Modo de áudio", "Audio mode": "Modo de áudio",
"Video mode": "Modo de vídeo", "Video mode": "Modo de vídeo",
"channel_tab_videos_label": "Vídeos", "Videos": "Vídeos",
"Playlists": "Listas de reprodução", "Playlists": "Listas de reprodução",
"channel_tab_community_label": "Comunidade", "Community": "Comunidade",
"search_filters_sort_option_relevance": "relevância", "relevance": "relevância",
"search_filters_sort_option_rating": "avaliação", "rating": "avaliação",
"search_filters_sort_option_date": "data", "date": "data",
"search_filters_sort_option_views": "visualizações", "views": "visualizações",
"search_filters_type_label": "content_type", "content_type": "content_type",
"search_filters_duration_label": "duração", "duration": "duração",
"search_filters_features_label": "recursos", "features": "recursos",
"search_filters_sort_label": "ordenar", "sort": "ordenar",
"search_filters_date_option_hour": "hora", "hour": "hora",
"search_filters_date_option_today": "hoje", "today": "hoje",
"search_filters_date_option_week": "semana", "week": "semana",
"search_filters_date_option_month": "mês", "month": "mês",
"search_filters_date_option_year": "ano", "year": "ano",
"search_filters_type_option_video": "vídeo", "video": "vídeo",
"search_filters_type_option_channel": "Canal", "channel": "Canal",
"search_filters_type_option_playlist": "playlist", "playlist": "playlist",
"search_filters_type_option_movie": "filme", "movie": "filme",
"search_filters_type_option_show": "show", "show": "show",
"search_filters_features_option_hd": "hd", "hd": "hd",
"search_filters_features_option_subtitles": "legendas", "subtitles": "legendas",
"search_filters_features_option_c_commons": "creative_commons", "creative_commons": "creative_commons",
"search_filters_features_option_three_d": "3d", "3d": "3d",
"search_filters_features_option_live": "ao vivo", "live": "ao vivo",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "localização", "location": "localização",
"search_filters_features_option_hdr": "hdr", "hdr": "hdr",
"filter": "filtro",
"Current version: ": "Versão atual: ", "Current version: ": "Versão atual: ",
"next_steps_error_message": "Depois disso, você deve tentar: ", "next_steps_error_message": "Depois disso, você deve tentar: ",
"next_steps_error_message_refresh": "Atualizar", "next_steps_error_message_refresh": "Atualizar",
"next_steps_error_message_go_to_youtube": "Ir para o YouTube", "next_steps_error_message_go_to_youtube": "Ir para o YouTube",
"footer_donate_page": "Doe", "footer_donate_page": "Doe",
"adminprefs_modified_source_code_url_label": "URL para repositório de código fonte modificado", "adminprefs_modified_source_code_url_label": "URL para repositório de código fonte modificado",
"search_filters_duration_option_long": "Longo (> 20 minutos)", "long": "Longo (> 20 minutos)",
"search_filters_duration_option_short": "Curto (< 4 minutos)", "short": "Curto (< 4 minutos)",
"footer_documentation": "Documentação", "footer_documentation": "Documentação",
"footer_source_code": "Código fonte", "footer_source_code": "Código fonte",
"footer_original_source_code": "Código fonte original", "footer_original_source_code": "Código fonte original",
"footer_modfied_source_code": "Código-fonte modificado", "footer_modfied_source_code": "Código Fonte Modificado",
"preferences_quality_dash_label": "Qualidade de vídeo do painel preferida: ", "preferences_quality_dash_label": "Qualidade de vídeo do painel preferida: ",
"preferences_region_label": "País do conteúdo: ", "preferences_region_label": "País do conteúdo: ",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
@ -394,15 +404,15 @@
"crash_page_you_found_a_bug": "Parece que você encontrou um erro no Invidious!", "crash_page_you_found_a_bug": "Parece que você encontrou um erro no Invidious!",
"crash_page_before_reporting": "Antes de reportar um erro, verifique se você:", "crash_page_before_reporting": "Antes de reportar um erro, verifique se você:",
"preferences_save_player_pos_label": "Salvar a posição de reprodução: ", "preferences_save_player_pos_label": "Salvar a posição de reprodução: ",
"search_filters_features_option_purchased": "Comprado", "purchased": "Comprado",
"crash_page_refresh": "tentou <a href=\"`x`\">recarregar a página</a>", "crash_page_refresh": "tentou <a href=\"`x`\">recarregar a página</a>",
"crash_page_switch_instance": "tentou <a href=\"`x`\">usar outra instância</a>", "crash_page_switch_instance": "tentou <a href=\"`x`\">usar outra instância</a>",
"crash_page_search_issue": "procurou por um <a href=\"`x`\">erro existente no GitHub</a>", "crash_page_search_issue": "procurou por um <a href=\"`x`\">erro existente no Github</a>",
"crash_page_report_issue": "Se nenhuma opção acima ajudou, por favor <a href=\"`x`\">abra um novo problema no Github</a> (preferencialmente em inglês) e inclua o seguinte texto (NÃO traduza):", "crash_page_report_issue": "Se nenhuma opção acima ajudou, por favor <a href=\"`x`\">abra um novo problema no Github</a> (preferencialmente em inglês) e inclua o seguinte texto (NÃO traduza):",
"crash_page_read_the_faq": "leia as <a href=\"`x`\">Perguntas frequentes (FAQ)</a>", "crash_page_read_the_faq": "leu as <a href=\"`x`\">Perguntas Frequentes (FAQ)</a>",
"generic_views_count": "{{count}} visualização", "generic_views_count": "{{count}} visualização",
"generic_views_count_plural": "{{count}} visualizações", "generic_views_count_plural": "{{count}} visualizações",
"preferences_quality_option_dash": "DASH (qualidade adaptável)", "preferences_quality_option_dash": "DASH (qualidade adaptiva)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_small": "Pequeno", "preferences_quality_option_small": "Pequeno",
"preferences_quality_dash_option_auto": "Auto", "preferences_quality_dash_option_auto": "Auto",
@ -418,7 +428,7 @@
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"preferences_quality_option_medium": "Médio", "preferences_quality_option_medium": "Médio",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "none", "none": "none",
"videoinfo_watch_on_youTube": "Assistir no YouTube", "videoinfo_watch_on_youTube": "Assistir no YouTube",
"videoinfo_youTube_embed_link": "Embutir", "videoinfo_youTube_embed_link": "Embutir",
@ -427,54 +437,5 @@
"user_created_playlists": "`x` listas de reprodução criadas", "user_created_playlists": "`x` listas de reprodução criadas",
"user_saved_playlists": "`x` listas de reprodução salvas", "user_saved_playlists": "`x` listas de reprodução salvas",
"Video unavailable": "Vídeo indisponível", "Video unavailable": "Vídeo indisponível",
"videoinfo_started_streaming_x_ago": "Iniciou a transmissão a `x`", "videoinfo_started_streaming_x_ago": "Iniciou a transmissão a `x`"
"search_filters_title": "Filtro",
"preferences_watch_history_label": "Ative o histórico de exibição: ",
"search_message_no_results": "Nenhum resultado encontrado.",
"search_message_change_filters_or_query": "Tente ampliar sua consulta de pesquisa e/ou alterar os filtros.",
"English (United Kingdom)": "Inglês (Reino Unido)",
"English (United States)": "Inglês (Estados Unidos)",
"German (auto-generated)": "Alemão (gerado automaticamente)",
"Chinese": "Chinês",
"Chinese (China)": "Chinês (China)",
"Cantonese (Hong Kong)": "Cantonês (Hong Kong)",
"Interlingue": "Interlíngua",
"search_filters_type_option_all": "Qualquer tipo",
"search_filters_apply_button": "Aplicar filtros selecionados",
"Chinese (Hong Kong)": "Chinês (Hong Kong)",
"Chinese (Taiwan)": "Chinês (Taiwan)",
"Japanese (auto-generated)": "Japonês (gerado automaticamente)",
"Korean (auto-generated)": "Coreano (gerado automaticamente)",
"Portuguese (auto-generated)": "Português (gerado automaticamente)",
"Portuguese (Brazil)": "Português (Brasil)",
"Russian (auto-generated)": "Russo (gerado automaticamente)",
"Vietnamese (auto-generated)": "Vietnamita (gerado automaticamente)",
"search_filters_date_label": "Data de upload",
"search_filters_date_option_none": "Qualquer data",
"Dutch (auto-generated)": "Holandês (gerado automaticamente)",
"French (auto-generated)": "Francês (gerado automaticamente)",
"Indonesian (auto-generated)": "Indonésio (gerado automaticamente)",
"Italian (auto-generated)": "Italiano (gerado automaticamente)",
"Spanish (auto-generated)": "Espanhol (gerado automaticamente)",
"Spanish (Mexico)": "Espanhol (México)",
"search_filters_duration_option_none": "Qualquer duração",
"search_message_use_another_instance": " Você também pode <a href=\"`x`\">pesquisar em outra instância</a>.",
"Spanish (Spain)": "Espanhol (Espanha)",
"Turkish (auto-generated)": "Turco (gerado automaticamente)",
"search_filters_duration_option_medium": "Médio (4 - 20 minutos)",
"search_filters_features_option_vr180": "VR180",
"Popular enabled: ": "Popular habilitado: ",
"error_video_not_in_playlist": "O vídeo solicitado não existe nesta playlist. <a href=\"`x`\">Clique aqui para acessar a página inicial da playlist.</a>",
"channel_tab_channels_label": "Canais",
"channel_tab_playlists_label": "Listas de reprodução",
"channel_tab_shorts_label": "Curtos",
"channel_tab_streams_label": "Ao Vivo",
"Music in this video": "Música neste vídeo",
"Artist: ": "Artista: ",
"Album: ": "Álbum: ",
"Standard YouTube license": "Licença padrão do YouTube",
"Song: ": "Música: ",
"Channel Sponsor": "Patrocinador do Canal",
"Download is disabled": "Download está desativado",
"Import YouTube playlist (.csv)": "Importar lista de reprodução do YouTube (.csv)"
} }

@ -14,21 +14,22 @@
"Clear watch history?": "Limpar histórico de reprodução?", "Clear watch history?": "Limpar histórico de reprodução?",
"New password": "Nova palavra-chave", "New password": "Nova palavra-chave",
"New passwords must match": "As novas palavra-chaves devem corresponder", "New passwords must match": "As novas palavra-chaves devem corresponder",
"Cannot change password for Google accounts": "Não é possível alterar a palavra-chave para contas do Google",
"Authorize token?": "Autorizar token?", "Authorize token?": "Autorizar token?",
"Authorize token for `x`?": "Autorizar token para `x`?", "Authorize token for `x`?": "Autorizar token para `x`?",
"Yes": "Sim", "Yes": "Sim",
"No": "Não", "No": "Não",
"Import and Export Data": "Importar e exportar dados", "Import and Export Data": "Importar e exportar dados",
"Import": "Importar", "Import": "Importar",
"Import Invidious data": "Importar dados JSON do Invidious", "Import Invidious data": "Importar dados do Invidious",
"Import YouTube subscriptions": "Importar subscrições do YouTube/OPML", "Import YouTube subscriptions": "Importar subscrições do YouTube",
"Import FreeTube subscriptions (.db)": "Importar subscrições do FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importar subscrições do FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importar subscrições do NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importar subscrições do NewPipe (.json)",
"Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)", "Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)",
"Export": "Exportar", "Export": "Exportar",
"Export subscriptions as OPML": "Exportar subscrições como OPML", "Export subscriptions as OPML": "Exportar subscrições como OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar subscrições como OPML (para NewPipe e FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar subscrições como OPML (para NewPipe e FreeTube)",
"Export data as JSON": "Exportar dados Invidious como JSON", "Export data as JSON": "Exportar dados como JSON",
"Delete account?": "Eliminar conta?", "Delete account?": "Eliminar conta?",
"History": "Histórico", "History": "Histórico",
"An alternative front-end to YouTube": "Uma interface alternativa ao YouTube", "An alternative front-end to YouTube": "Uma interface alternativa ao YouTube",
@ -36,6 +37,7 @@
"source": "código-fonte", "source": "código-fonte",
"Log in": "Iniciar sessão", "Log in": "Iniciar sessão",
"Log in/register": "Iniciar sessão/registar", "Log in/register": "Iniciar sessão/registar",
"Log in with Google": "Iniciar sessão com o Google",
"User ID": "Utilizador", "User ID": "Utilizador",
"Password": "Palavra-chave", "Password": "Palavra-chave",
"Time (h:mm:ss):": "Tempo (h:mm:ss):", "Time (h:mm:ss):": "Tempo (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Iniciar sessão", "Sign In": "Iniciar sessão",
"Register": "Registar", "Register": "Registar",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Código de verificação do Google",
"Preferences": "Preferências", "Preferences": "Preferências",
"preferences_category_player": "Preferências do reprodutor", "preferences_category_player": "Preferências do reprodutor",
"preferences_video_loop_label": "Repetir sempre: ", "preferences_video_loop_label": "Repetir sempre: ",
@ -57,13 +60,13 @@
"preferences_volume_label": "Volume da reprodução: ", "preferences_volume_label": "Volume da reprodução: ",
"preferences_comments_label": "Preferência dos comentários: ", "preferences_comments_label": "Preferência dos comentários: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "reddit",
"preferences_captions_label": "Legendas predefinidas: ", "preferences_captions_label": "Legendas predefinidas: ",
"Fallback captions: ": "Legendas alternativas: ", "Fallback captions: ": "Legendas alternativas: ",
"preferences_related_videos_label": "Mostrar vídeos relacionados: ", "preferences_related_videos_label": "Mostrar vídeos relacionados: ",
"preferences_annotations_label": "Mostrar anotações sempre: ", "preferences_annotations_label": "Mostrar anotações sempre: ",
"preferences_extend_desc_label": "Estender automaticamente a descrição do vídeo: ", "preferences_extend_desc_label": "Estender automaticamente a descrição do vídeo: ",
"preferences_vr_mode_label": "Vídeos interativos de 360 graus (necessita de WebGL): ", "preferences_vr_mode_label": "Vídeos interativos de 360 graus: ",
"preferences_category_visual": "Preferências visuais", "preferences_category_visual": "Preferências visuais",
"preferences_player_style_label": "Estilo do reprodutor: ", "preferences_player_style_label": "Estilo do reprodutor: ",
"Dark mode: ": "Modo escuro: ", "Dark mode: ": "Modo escuro: ",
@ -120,7 +123,7 @@
"Subscriptions": "Subscrições", "Subscriptions": "Subscrições",
"search": "pesquisar", "search": "pesquisar",
"Log out": "Terminar sessão", "Log out": "Terminar sessão",
"Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no GitHub.", "Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no Github.",
"Source available here.": "Código-fonte disponível aqui.", "Source available here.": "Código-fonte disponível aqui.",
"View JavaScript license information.": "Ver informações da licença do JavaScript.", "View JavaScript license information.": "Ver informações da licença do JavaScript.",
"View privacy policy.": "Ver a política de privacidade.", "View privacy policy.": "Ver a política de privacidade.",
@ -140,6 +143,7 @@
"Show less": "Mostrar menos", "Show less": "Mostrar menos",
"Watch on YouTube": "Ver no YouTube", "Watch on YouTube": "Ver no YouTube",
"Switch Invidious Instance": "Mudar a instância do Invidious", "Switch Invidious Instance": "Mudar a instância do Invidious",
"Broken? Try another Invidious Instance": "Falhou? Tente outra Instância do Invidious",
"Hide annotations": "Ocultar anotações", "Hide annotations": "Ocultar anotações",
"Show annotations": "Mostrar anotações", "Show annotations": "Mostrar anotações",
"Genre: ": "Género: ", "Genre: ": "Género: ",
@ -163,12 +167,17 @@
"Hide replies": "Ocultar respostas", "Hide replies": "Ocultar respostas",
"Show replies": "Mostrar respostas", "Show replies": "Mostrar respostas",
"Incorrect password": "Palavra-chave incorreta", "Incorrect password": "Palavra-chave incorreta",
"Quota exceeded, try again in a few hours": "Cota excedida. Tente novamente dentro de algumas horas",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Não é possível iniciar a sessão, certifique-se que a autenticação de dois fatores (Autenticador ou SMS) está ativada.",
"Invalid TFA code": "Código TFA inválido",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Falhou o início de sessão. Isto pode ser devido a não ter ativado na sua conta a autenticação de dois fatores (2FA).",
"Wrong answer": "Resposta errada", "Wrong answer": "Resposta errada",
"Erroneous CAPTCHA": "CAPTCHA inválido", "Erroneous CAPTCHA": "CAPTCHA inválido",
"CAPTCHA is a required field": "CAPTCHA é um campo obrigatório", "CAPTCHA is a required field": "CAPTCHA é um campo obrigatório",
"User ID is a required field": "O nome de utilizador é um campo obrigatório", "User ID is a required field": "O nome de utilizador é um campo obrigatório",
"Password is a required field": "Palavra-chave é um campo obrigatório", "Password is a required field": "Palavra-chave é um campo obrigatório",
"Wrong username or password": "Nome de utilizador ou palavra-chave incorreto", "Wrong username or password": "Nome de utilizador ou palavra-chave incorreto",
"Please sign in using 'Log in with Google'": "Por favor, inicie sessão usando 'Iniciar sessão com o Google'",
"Password cannot be empty": "A palavra-chave não pode estar vazia", "Password cannot be empty": "A palavra-chave não pode estar vazia",
"Password cannot be longer than 55 characters": "A palavra-chave não pode ser superior a 55 caracteres", "Password cannot be longer than 55 characters": "A palavra-chave não pode ser superior a 55 caracteres",
"Please log in": "Por favor, inicie sessão", "Please log in": "Por favor, inicie sessão",
@ -333,143 +342,38 @@
"`x` marked it with a ❤": "`x` foi marcado como ❤", "`x` marked it with a ❤": "`x` foi marcado como ❤",
"Audio mode": "Modo de áudio", "Audio mode": "Modo de áudio",
"Video mode": "Modo de vídeo", "Video mode": "Modo de vídeo",
"channel_tab_videos_label": "Vídeos", "Videos": "Vídeos",
"Playlists": "Listas de reprodução", "Playlists": "Listas de reprodução",
"channel_tab_community_label": "Comunidade", "Community": "Comunidade",
"search_filters_sort_option_relevance": "Relevância", "relevance": "Relevância",
"search_filters_sort_option_rating": "Avaliação", "rating": "Avaliação",
"search_filters_sort_option_date": "Data de envio", "date": "Data de envio",
"search_filters_sort_option_views": "Visualizações", "views": "Visualizações",
"search_filters_type_label": "Tipo", "content_type": "Tipo",
"search_filters_duration_label": "Duração", "duration": "Duração",
"search_filters_features_label": "Funcionalidades", "features": "Funcionalidades",
"search_filters_sort_label": "Ordenar por", "sort": "Ordenar por",
"search_filters_date_option_hour": "Última hora", "hour": "Última hora",
"search_filters_date_option_today": "Hoje", "today": "Hoje",
"search_filters_date_option_week": "Esta semana", "week": "Esta semana",
"search_filters_date_option_month": "Este mês", "month": "Este mês",
"search_filters_date_option_year": "Este ano", "year": "Este ano",
"search_filters_type_option_video": "Vídeo", "video": "Vídeo",
"search_filters_type_option_channel": "Canal", "channel": "Canal",
"search_filters_type_option_playlist": "Lista de reprodução", "playlist": "Lista de reprodução",
"search_filters_type_option_movie": "Filme", "movie": "Filme",
"search_filters_type_option_show": "Espetáculo", "show": "Espetáculo",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Legendas", "subtitles": "Legendas",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Em direto", "live": "Em direto",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Localização", "location": "Localização",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Filtro",
"Current version: ": "Versão atual: ", "Current version: ": "Versão atual: ",
"next_steps_error_message": "Pode tentar as seguintes opções: ", "next_steps_error_message": "Pode tentar as seguintes opções: ",
"next_steps_error_message_refresh": "Atualizar", "next_steps_error_message_refresh": "Atualizar",
"next_steps_error_message_go_to_youtube": "Ir ao YouTube", "next_steps_error_message_go_to_youtube": "Ir ao YouTube"
"search_filters_title": "Filtro",
"generic_videos_count": "{{count}} vídeo",
"generic_videos_count_plural": "{{count}} vídeos",
"generic_playlists_count": "{{count}} lista de reprodução",
"generic_playlists_count_plural": "{{count}} listas de reprodução",
"generic_subscriptions_count": "{{count}} inscrição",
"generic_subscriptions_count_plural": "{{count}} inscrições",
"generic_views_count": "{{count}} visualização",
"generic_views_count_plural": "{{count}} visualizações",
"generic_subscribers_count": "{{count}} inscrito",
"generic_subscribers_count_plural": "{{count}} inscritos",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_label": "Qualidade de vídeo DASH preferida: ",
"preferences_quality_dash_option_2160p": "2160p",
"subscriptions_unseen_notifs_count": "{{count}} notificação não vista",
"subscriptions_unseen_notifs_count_plural": "{{count}} notificações não vistas",
"Popular enabled: ": "Página \"popular\" ativada: ",
"search_message_no_results": "Nenhum resultado encontrado.",
"preferences_quality_dash_option_auto": "Automático",
"preferences_region_label": "País do conteúdo: ",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_720p": "720p",
"preferences_watch_history_label": "Ativar histórico de reprodução: ",
"preferences_quality_dash_option_best": "Melhor",
"preferences_quality_dash_option_worst": "Pior",
"preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_dash": "DASH (qualidade adaptativa)",
"preferences_quality_option_medium": "Média",
"preferences_quality_option_small": "Baixa",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p",
"Video unavailable": "Vídeo não disponível",
"Russian (auto-generated)": "Russo (gerado automaticamente)",
"comments_view_x_replies": "Ver {{count}} resposta",
"comments_view_x_replies_plural": "Ver {{count}} respostas",
"comments_points_count": "{{count}} ponto",
"comments_points_count_plural": "{{count}} pontos",
"English (United Kingdom)": "Inglês (Reino Unido)",
"Chinese (Hong Kong)": "Chinês (Hong Kong)",
"Chinese (Taiwan)": "Chinês (Taiwan)",
"Dutch (auto-generated)": "Holandês (gerado automaticamente)",
"French (auto-generated)": "Francês (gerado automaticamente)",
"German (auto-generated)": "Alemão (gerado automaticamente)",
"Indonesian (auto-generated)": "Indonésio (gerado automaticamente)",
"Interlingue": "Interlíngua",
"Italian (auto-generated)": "Italiano (gerado automaticamente)",
"Japanese (auto-generated)": "Japonês (gerado automaticamente)",
"Korean (auto-generated)": "Coreano (gerado automaticamente)",
"Portuguese (auto-generated)": "Português (gerado automaticamente)",
"Portuguese (Brazil)": "Português (Brasil)",
"Spanish (Spain)": "Espanhol (Espanha)",
"Vietnamese (auto-generated)": "Vietnamita (gerado automaticamente)",
"search_filters_type_option_all": "Qualquer tipo",
"search_filters_duration_option_none": "Qualquer duração",
"search_filters_duration_option_short": "Curto (< 4 minutos)",
"search_filters_duration_option_medium": "Médio (4 - 20 minutos)",
"search_filters_duration_option_long": "Longo (> 20 minutos)",
"search_filters_features_option_purchased": "Comprado",
"search_filters_apply_button": "Aplicar filtros selecionados",
"videoinfo_watch_on_youTube": "Ver no YouTube",
"videoinfo_youTube_embed_link": "Incorporar",
"adminprefs_modified_source_code_url_label": "URL do repositório do código-fonte alterado",
"videoinfo_invidious_embed_link": "Incorporar hiperligação",
"none": "nenhum",
"videoinfo_started_streaming_x_ago": "Iniciou a transmissão há `x`",
"download_subtitles": "Legendas - `x` (.vtt)",
"user_created_playlists": "`x` listas de reprodução criadas",
"user_saved_playlists": "`x` listas de reprodução guardadas",
"preferences_save_player_pos_label": "Guardar a posição de reprodução atual do vídeo: ",
"Turkish (auto-generated)": "Turco (gerado automaticamente)",
"Cantonese (Hong Kong)": "Cantonês (Hong Kong)",
"Chinese (China)": "Chinês (China)",
"Spanish (auto-generated)": "Espanhol (gerado automaticamente)",
"Spanish (Mexico)": "Espanhol (México)",
"English (United States)": "Inglês (Estados Unidos)",
"footer_donate_page": "Doar",
"footer_documentation": "Documentação",
"footer_source_code": "Código-fonte",
"footer_original_source_code": "Código-fonte original",
"footer_modfied_source_code": "Código-fonte alterado",
"Chinese": "Chinês",
"search_filters_date_label": "Data de publicação",
"search_filters_date_option_none": "Qualquer data",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_vr180": "VR180",
"search_message_use_another_instance": " Também pode <a href=\"`x`\">pesquisar noutra instância</a>.",
"crash_page_you_found_a_bug": "Parece que encontrou um erro no Invidious!",
"crash_page_before_reporting": "Antes de reportar um erro, verifique se:",
"crash_page_read_the_faq": "leia as <a href=\"`x`\">Perguntas frequentes (FAQ)</a>",
"crash_page_search_issue": "procurou se <a href=\"`x`\">o erro já foi reportado no GitHub</a>",
"crash_page_report_issue": "Se nenhuma opção acima ajudou, por favor <a href=\"`x`\">abra um novo problema no Github</a> (preferencialmente em inglês) e inclua o seguinte texto tal qual (NÃO o traduza):",
"search_message_change_filters_or_query": "Tente alargar os termos genéricos da pesquisa e/ou alterar os filtros.",
"crash_page_refresh": "tentou <a href=\"`x`\">recarregar a página</a>",
"crash_page_switch_instance": "tentou <a href=\"`x`\">usar outra instância</a>",
"error_video_not_in_playlist": "O vídeo pedido não existe nesta lista de reprodução. <a href=\"`x`\">Clique aqui para a página inicial da lista de reprodução.</a>",
"Artist: ": "Artista: ",
"Album: ": "Álbum: ",
"channel_tab_streams_label": "Diretos",
"channel_tab_playlists_label": "Listas de reprodução",
"channel_tab_channels_label": "Canais",
"Music in this video": "Música neste vídeo",
"channel_tab_shorts_label": "Curtos"
} }

@ -1,42 +1,44 @@
{ {
"search_filters_type_option_show": "Espetáculo", "show": "Espetáculo",
"search_filters_sort_option_views": "Visualizações", "views": "Visualizações",
"search_filters_sort_option_date": "Data de envio", "date": "Data de envio",
"search_filters_sort_option_rating": "Avaliação", "rating": "Avaliação",
"search_filters_sort_option_relevance": "Relevância", "relevance": "Relevância",
"Broken? Try another Invidious Instance": "Falhou? Tente outra Instância do Invidious",
"Switch Invidious Instance": "Mudar a instância do Invidious", "Switch Invidious Instance": "Mudar a instância do Invidious",
"Show less": "Mostrar menos", "Show less": "Mostrar menos",
"Show more": "Mostrar mais", "Show more": "Mostrar mais",
"Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no GitHub.", "Released under the AGPLv3 on Github.": "Lançado sob a AGPLv3 no Github.",
"preferences_show_nick_label": "Mostrar nome de utilizador em cima: ", "preferences_show_nick_label": "Mostrar nome de utilizador em cima: ",
"preferences_automatic_instance_redirect_label": "Redirecionamento de instância automática (solução de último recurso para redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Redirecionamento de instância automática (solução de último recurso para redirect.invidious.io): ",
"preferences_category_misc": "Preferências diversas", "preferences_category_misc": "Preferências diversas",
"preferences_vr_mode_label": "Vídeos interativos de 360 graus (necessita de WebGL): ", "preferences_vr_mode_label": "Vídeos interativos de 360 graus: ",
"preferences_extend_desc_label": "Estender automaticamente a descrição do vídeo: ", "preferences_extend_desc_label": "Estender automaticamente a descrição do vídeo: ",
"next_steps_error_message_go_to_youtube": "Ir ao YouTube", "next_steps_error_message_go_to_youtube": "Ir ao YouTube",
"next_steps_error_message": "Pode tentar as seguintes opções: ", "next_steps_error_message": "Pode tentar as seguintes opções: ",
"next_steps_error_message_refresh": "Atualizar", "next_steps_error_message_refresh": "Atualizar",
"search_filters_features_option_hdr": "HDR", "filter": "Filtro",
"search_filters_features_option_location": "Localização", "hdr": "HDR",
"search_filters_features_option_four_k": "4K", "location": "Localização",
"search_filters_features_option_live": "Em direto", "4k": "4K",
"search_filters_features_option_three_d": "3D", "live": "Em direto",
"search_filters_features_option_c_commons": "Creative Commons", "3d": "3D",
"search_filters_features_option_subtitles": "Legendas", "creative_commons": "Creative Commons",
"search_filters_features_option_hd": "HD", "subtitles": "Legendas",
"search_filters_type_option_movie": "Filme", "hd": "HD",
"search_filters_type_option_playlist": "Lista de reprodução", "movie": "Filme",
"search_filters_type_option_channel": "Canal", "playlist": "Lista de reprodução",
"search_filters_type_option_video": "Vídeo", "channel": "Canal",
"search_filters_date_option_year": "Este ano", "video": "Vídeo",
"search_filters_date_option_month": "Este mês", "year": "Este ano",
"search_filters_date_option_week": "Esta semana", "month": "Este mês",
"search_filters_date_option_today": "Hoje", "week": "Esta semana",
"search_filters_date_option_hour": "Última hora", "today": "Hoje",
"search_filters_sort_label": "Ordenar por", "hour": "Última hora",
"search_filters_features_label": "Funcionalidades", "sort": "Ordenar por",
"search_filters_duration_label": "Duração", "features": "Funcionalidades",
"search_filters_type_label": "Tipo", "duration": "Duração",
"content_type": "Tipo",
"permalink": "hiperligação permanente", "permalink": "hiperligação permanente",
"YouTube comment permalink": "Hiperligação permanente do comentário no YouTube", "YouTube comment permalink": "Hiperligação permanente do comentário no YouTube",
"Download as: ": "Descarregar como: ", "Download as: ": "Descarregar como: ",
@ -63,6 +65,8 @@
"Could not pull trending pages.": "Não foi possível obter as páginas de tendências.", "Could not pull trending pages.": "Não foi possível obter as páginas de tendências.",
"Could not create mix.": "Não foi possível criar a mistura.", "Could not create mix.": "Não foi possível criar a mistura.",
"Deleted or invalid channel": "Canal eliminado ou inválido", "Deleted or invalid channel": "Canal eliminado ou inválido",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Falhou o início de sessão. Isto pode ser devido a não ter ativado na sua conta a autenticação de dois fatores (2FA).",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Não é possível iniciar a sessão, certifique-se que a autenticação de dois fatores (Autenticador ou SMS) está ativada.",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Olá! Parece que o JavaScript está desativado. Clique aqui para ver os comentários, entretanto eles podem levar mais tempo para carregar.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Olá! Parece que o JavaScript está desativado. Clique aqui para ver os comentários, entretanto eles podem levar mais tempo para carregar.",
"Delete playlist": "Eliminar lista de reprodução", "Delete playlist": "Eliminar lista de reprodução",
"Delete playlist `x`?": "Eliminar a lista de reprodução 'x'?", "Delete playlist `x`?": "Eliminar a lista de reprodução 'x'?",
@ -79,6 +83,7 @@
"Log in/register": "Iniciar sessão/registar", "Log in/register": "Iniciar sessão/registar",
"Delete account?": "Eliminar conta?", "Delete account?": "Eliminar conta?",
"Import and Export Data": "Importar e exportar dados", "Import and Export Data": "Importar e exportar dados",
"Cannot change password for Google accounts": "Não é possível alterar a palavra-chave para contas do Google",
"Filipino": "Filipino", "Filipino": "Filipino",
"Estonian": "Estónio", "Estonian": "Estónio",
"Esperanto": "Esperanto", "Esperanto": "Esperanto",
@ -122,12 +127,15 @@
"Please log in": "Por favor, inicie sessão", "Please log in": "Por favor, inicie sessão",
"Password cannot be longer than 55 characters": "A palavra-chave não pode ser superior a 55 caracteres", "Password cannot be longer than 55 characters": "A palavra-chave não pode ser superior a 55 caracteres",
"Password cannot be empty": "A palavra-chave não pode estar vazia", "Password cannot be empty": "A palavra-chave não pode estar vazia",
"Please sign in using 'Log in with Google'": "Por favor, inicie sessão usando 'Iniciar sessão com o Google'",
"Wrong username or password": "Nome de utilizador ou palavra-chave incorreto", "Wrong username or password": "Nome de utilizador ou palavra-chave incorreto",
"Password is a required field": "Palavra-chave é um campo obrigatório", "Password is a required field": "Palavra-chave é um campo obrigatório",
"User ID is a required field": "O nome de utilizador é um campo obrigatório", "User ID is a required field": "O nome de utilizador é um campo obrigatório",
"CAPTCHA is a required field": "CAPTCHA é um campo obrigatório", "CAPTCHA is a required field": "CAPTCHA é um campo obrigatório",
"Erroneous CAPTCHA": "CAPTCHA inválido", "Erroneous CAPTCHA": "CAPTCHA inválido",
"Wrong answer": "Resposta errada", "Wrong answer": "Resposta errada",
"Invalid TFA code": "Código TFA inválido",
"Quota exceeded, try again in a few hours": "Cota excedida. Tente novamente dentro de algumas horas",
"Incorrect password": "Palavra-chave incorreta", "Incorrect password": "Palavra-chave incorreta",
"Show replies": "Mostrar respostas", "Show replies": "Mostrar respostas",
"Hide replies": "Ocultar respostas", "Hide replies": "Ocultar respostas",
@ -226,6 +234,7 @@
"preferences_video_loop_label": "Repetir sempre: ", "preferences_video_loop_label": "Repetir sempre: ",
"preferences_category_player": "Preferências do reprodutor", "preferences_category_player": "Preferências do reprodutor",
"Preferences": "Preferências", "Preferences": "Preferências",
"Google verification code": "Código de verificação do Google",
"E-mail": "E-mail", "E-mail": "E-mail",
"Register": "Registar", "Register": "Registar",
"Image CAPTCHA": "Imagem CAPTCHA", "Image CAPTCHA": "Imagem CAPTCHA",
@ -233,20 +242,21 @@
"Time (h:mm:ss):": "Tempo (h:mm:ss):", "Time (h:mm:ss):": "Tempo (h:mm:ss):",
"Password": "Palavra-chave", "Password": "Palavra-chave",
"User ID": "Utilizador", "User ID": "Utilizador",
"Log in with Google": "Iniciar sessão com o Google",
"Log in": "Iniciar sessão", "Log in": "Iniciar sessão",
"source": "código-fonte", "source": "código-fonte",
"JavaScript license information": "Informação de licença do JavaScript", "JavaScript license information": "Informação de licença do JavaScript",
"An alternative front-end to YouTube": "Uma interface alternativa ao YouTube", "An alternative front-end to YouTube": "Uma interface alternativa ao YouTube",
"History": "Histórico", "History": "Histórico",
"Export data as JSON": "Exportar dados Invidious como JSON", "Export data as JSON": "Exportar dados como JSON",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar subscrições como OPML (para NewPipe e FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportar subscrições como OPML (para NewPipe e FreeTube)",
"Export subscriptions as OPML": "Exportar subscrições como OPML", "Export subscriptions as OPML": "Exportar subscrições como OPML",
"Export": "Exportar", "Export": "Exportar",
"Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)", "Import NewPipe data (.zip)": "Importar dados do NewPipe (.zip)",
"Import NewPipe subscriptions (.json)": "Importar subscrições do NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importar subscrições do NewPipe (.json)",
"Import FreeTube subscriptions (.db)": "Importar subscrições do FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importar subscrições do FreeTube (.db)",
"Import YouTube subscriptions": "Importar subscrições do YouTube/OPML", "Import YouTube subscriptions": "Importar subscrições do YouTube",
"Import Invidious data": "Importar dados JSON do Invidious", "Import Invidious data": "Importar dados do Invidious",
"Import": "Importar", "Import": "Importar",
"No": "Não", "No": "Não",
"Yes": "Sim", "Yes": "Sim",
@ -259,9 +269,9 @@
"Next page": "Próxima página", "Next page": "Próxima página",
"last": "últimos", "last": "últimos",
"Current version: ": "Versão atual: ", "Current version: ": "Versão atual: ",
"channel_tab_community_label": "Comunidade", "Community": "Comunidade",
"Playlists": "Listas de reprodução", "Playlists": "Listas de reprodução",
"channel_tab_videos_label": "Vídeos", "Videos": "Vídeos",
"Video mode": "Modo de vídeo", "Video mode": "Modo de vídeo",
"Audio mode": "Modo de áudio", "Audio mode": "Modo de áudio",
"`x` marked it with a ❤": "`x` foi marcado como ❤", "`x` marked it with a ❤": "`x` foi marcado como ❤",
@ -366,8 +376,8 @@
"Unsubscribe": "Anular subscrição", "Unsubscribe": "Anular subscrição",
"Shared `x` ago": "Partilhado `x` atrás", "Shared `x` ago": "Partilhado `x` atrás",
"LIVE": "Em direto", "LIVE": "Em direto",
"search_filters_duration_option_short": "Curto (< 4 minutos)", "short": "Curto (< 4 minutos)",
"search_filters_duration_option_long": "Longo (> 20 minutos)", "long": "Longo (> 20 minutos)",
"footer_source_code": "Código-fonte", "footer_source_code": "Código-fonte",
"footer_original_source_code": "Código-fonte original", "footer_original_source_code": "Código-fonte original",
"adminprefs_modified_source_code_url_label": "URL do repositório do código-fonte alterado", "adminprefs_modified_source_code_url_label": "URL do repositório do código-fonte alterado",
@ -387,8 +397,8 @@
"preferences_quality_dash_option_360p": "360p", "preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"search_filters_features_option_purchased": "Comprado", "purchased": "Comprado",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"videoinfo_invidious_embed_link": "Incorporar hiperligação", "videoinfo_invidious_embed_link": "Incorporar hiperligação",
"Video unavailable": "Vídeo não disponível", "Video unavailable": "Vídeo não disponível",
"invidious": "Invidious", "invidious": "Invidious",
@ -424,56 +434,8 @@
"crash_page_before_reporting": "Antes de reportar um erro, verifique se:", "crash_page_before_reporting": "Antes de reportar um erro, verifique se:",
"crash_page_refresh": "tentou <a href=\"`x`\">recarregar a página</a>", "crash_page_refresh": "tentou <a href=\"`x`\">recarregar a página</a>",
"crash_page_switch_instance": "tentou <a href=\"`x`\">usar outra instância</a>", "crash_page_switch_instance": "tentou <a href=\"`x`\">usar outra instância</a>",
"crash_page_read_the_faq": "leia as <a href=\"`x`\">Perguntas frequentes (FAQ)</a>", "crash_page_read_the_faq": "leu as <a href=\"`x`\">Perguntas frequentes (FAQ)</a>",
"crash_page_search_issue": "procurou se <a href=\"`x`\">o erro já foi reportado no GitHub</a>", "crash_page_search_issue": "procurou se <a href=\"`x`\">o erro já foi reportado no Github</a>",
"crash_page_report_issue": "Se nenhuma opção acima ajudou, por favor <a href=\"`x`\">abra um novo problema no Github</a> (preferencialmente em inglês) e inclua o seguinte texto tal qual (NÃO o traduza):", "crash_page_report_issue": "Se nenhuma opção acima ajudou, por favor <a href=\"`x`\">abra um novo problema no Github</a> (preferencialmente em inglês) e inclua o seguinte texto tal qual (NÃO o traduza):",
"user_created_playlists": "`x` listas de reprodução criadas", "user_created_playlists": "`x` listas de reprodução criadas"
"search_filters_title": "Filtro",
"Chinese (Taiwan)": "Chinês (Taiwan)",
"search_message_no_results": "Nenhum resultado encontrado.",
"search_message_change_filters_or_query": "Tente alargar os termos genéricos da pesquisa e/ou alterar os filtros.",
"search_message_use_another_instance": " Também pode <a href=\"`x`\">pesquisar noutra instância</a>.",
"English (United Kingdom)": "Inglês (Reino Unido)",
"English (United States)": "Inglês (Estados Unidos)",
"Cantonese (Hong Kong)": "Cantonês (Hong Kong)",
"Chinese": "Chinês",
"Chinese (Hong Kong)": "Chinês (Hong Kong)",
"Dutch (auto-generated)": "Holandês (gerado automaticamente)",
"French (auto-generated)": "Francês (gerado automaticamente)",
"German (auto-generated)": "Alemão (gerado automaticamente)",
"Indonesian (auto-generated)": "Indonésio (gerado automaticamente)",
"Interlingue": "Interlíngua",
"Italian (auto-generated)": "Italiano (gerado automaticamente)",
"Japanese (auto-generated)": "Japonês (gerado automaticamente)",
"Korean (auto-generated)": "Coreano (gerado automaticamente)",
"Portuguese (auto-generated)": "Português (gerado automaticamente)",
"Portuguese (Brazil)": "Português (Brasil)",
"Turkish (auto-generated)": "Turco (gerado automaticamente)",
"Vietnamese (auto-generated)": "Vietnamita (gerado automaticamente)",
"search_filters_duration_option_medium": "Médio (4 - 20 minutos)",
"search_filters_features_option_vr180": "VR180",
"search_filters_apply_button": "Aplicar filtros selecionados",
"Spanish (auto-generated)": "Espanhol (gerado automaticamente)",
"Spanish (Mexico)": "Espanhol (México)",
"preferences_watch_history_label": "Ativar histórico de reprodução: ",
"Chinese (China)": "Chinês (China)",
"Russian (auto-generated)": "Russo (gerado automaticamente)",
"Spanish (Spain)": "Espanhol (Espanha)",
"search_filters_date_label": "Data de publicação",
"search_filters_date_option_none": "Qualquer data",
"search_filters_type_option_all": "Qualquer tipo",
"search_filters_duration_option_none": "Qualquer duração",
"Popular enabled: ": "Página \"popular\" ativada: ",
"error_video_not_in_playlist": "O vídeo pedido não existe nesta lista de reprodução. <a href=\"`x`\">Clique aqui para a página inicial da lista de reprodução.</a>",
"channel_tab_playlists_label": "Listas de reprodução",
"channel_tab_channels_label": "Canais",
"channel_tab_shorts_label": "Curtos",
"channel_tab_streams_label": "Diretos",
"Music in this video": "Música neste vídeo",
"Artist: ": "Artista: ",
"Album: ": "Álbum: ",
"Song: ": "Canção: ",
"Channel Sponsor": "Patrocinador do canal",
"Standard YouTube license": "Licença padrão do YouTube",
"Download is disabled": "A descarga está desativada"
} }

@ -14,13 +14,14 @@
"Clear watch history?": "Doriți să ștergeți istoricul?", "Clear watch history?": "Doriți să ștergeți istoricul?",
"New password": "Parola nouă", "New password": "Parola nouă",
"New passwords must match": "Câmpurile \"Parolă nouă\" trebuie să fie identice", "New passwords must match": "Câmpurile \"Parolă nouă\" trebuie să fie identice",
"Cannot change password for Google accounts": "Parola pentru un cont Google nu poate fi schimbată de pe Invidious",
"Authorize token?": "Autorizați token-ul?", "Authorize token?": "Autorizați token-ul?",
"Authorize token for `x`?": "Autorizați token-ul pentru `x` ?", "Authorize token for `x`?": "Autorizați token-ul pentru `x` ?",
"Yes": "Da", "Yes": "Da",
"No": "Nu", "No": "Nu",
"Import and Export Data": "Importați și Exportați Datele", "Import and Export Data": "Importați și Exportați Datele",
"Import": "Importați", "Import": "Importați",
"Import Invidious data": "Importați datele JSON de pe Invidious", "Import Invidious data": "Importați Datele de pe Invidious",
"Import YouTube subscriptions": "Importați abonamentele de pe YouTube", "Import YouTube subscriptions": "Importați abonamentele de pe YouTube",
"Import FreeTube subscriptions (.db)": "Importați abonamentele de pe FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importați abonamentele de pe FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importați abonamentele de pe NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importați abonamentele de pe NewPipe (.json)",
@ -28,7 +29,7 @@
"Export": "Exportați", "Export": "Exportați",
"Export subscriptions as OPML": "Exportați abonamentele în format OPML", "Export subscriptions as OPML": "Exportați abonamentele în format OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportați abonamentele în format OPML (pentru NewPipe și FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportați abonamentele în format OPML (pentru NewPipe și FreeTube)",
"Export data as JSON": "Exportați datele Invidious în format JSON", "Export data as JSON": "Exportați datele în format JSON",
"Delete account?": "Sunteți siguri că doriți să vă ștergeți contul?", "Delete account?": "Sunteți siguri că doriți să vă ștergeți contul?",
"History": "Istoric", "History": "Istoric",
"An alternative front-end to YouTube": "O alternativă front-end pentru YouTube", "An alternative front-end to YouTube": "O alternativă front-end pentru YouTube",
@ -36,6 +37,7 @@
"source": "sursă", "source": "sursă",
"Log in": "Conectați-vă", "Log in": "Conectați-vă",
"Log in/register": "Conectați-vă/Creați-vă un cont", "Log in/register": "Conectați-vă/Creați-vă un cont",
"Log in with Google": "Conectați-vă cu Google",
"User ID": "ID Utilizator", "User ID": "ID Utilizator",
"Password": "Parolă", "Password": "Parolă",
"Time (h:mm:ss):": "Ora (h:mm:ss) :", "Time (h:mm:ss):": "Ora (h:mm:ss) :",
@ -44,6 +46,7 @@
"Sign In": "Conectați-vă", "Sign In": "Conectați-vă",
"Register": "Înregistrați-vă", "Register": "Înregistrați-vă",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Cod de verificare Google",
"Preferences": "Preferințe", "Preferences": "Preferințe",
"preferences_category_player": "Setări de redare", "preferences_category_player": "Setări de redare",
"preferences_video_loop_label": "Reluați videoclipul la nesfârșit: ", "preferences_video_loop_label": "Reluați videoclipul la nesfârșit: ",
@ -152,12 +155,17 @@
"Hide replies": "Ascundeți replicile", "Hide replies": "Ascundeți replicile",
"Show replies": "Afișați replicile", "Show replies": "Afișați replicile",
"Incorrect password": "Parolă incorectă", "Incorrect password": "Parolă incorectă",
"Quota exceeded, try again in a few hours": "Numărul de tentative de conectare a fost depășit. Va rugăm să încercați din nou în câteva ore.",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Conectare eșuată. Dacă nu reușiți să vă conectați, verificați dacă ați activat autentificarea cu doi factori (Autentificator sau SMS).",
"Invalid TFA code": "Codul de autentificare cu doi factori este invalid",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Conectare eșuată. Acest lucru ar putea fi cauzat de faptul că nu ați activat autentificarea cu doi factori.",
"Wrong answer": "Răspuns invalid", "Wrong answer": "Răspuns invalid",
"Erroneous CAPTCHA": "CAPTCHA invalid", "Erroneous CAPTCHA": "CAPTCHA invalid",
"CAPTCHA is a required field": "Câmpul CAPTCHA este obligatoriu", "CAPTCHA is a required field": "Câmpul CAPTCHA este obligatoriu",
"User ID is a required field": "Câmpul ID Utilizator este obligatoriu", "User ID is a required field": "Câmpul ID Utilizator este obligatoriu",
"Password is a required field": "Câmpul Parolă este obligatoriu", "Password is a required field": "Câmpul Parolă este obligatoriu",
"Wrong username or password": "Nume de utilizator sau parolă invalidă", "Wrong username or password": "Nume de utilizator sau parolă invalidă",
"Please sign in using 'Log in with Google'": "Vă rog conectați-vă folosind \"Conectați-vă cu Google\"",
"Password cannot be empty": "Parola nu poate fi goală", "Password cannot be empty": "Parola nu poate fi goală",
"Password cannot be longer than 55 characters": "Parola nu poate să conțină mai mult de 55 de caractere", "Password cannot be longer than 55 characters": "Parola nu poate să conțină mai mult de 55 de caractere",
"Please log in": "Vă rog conectați-vă", "Please log in": "Vă rog conectați-vă",
@ -166,7 +174,7 @@
"Deleted or invalid channel": "Canal șters sau invalid", "Deleted or invalid channel": "Canal șters sau invalid",
"This channel does not exist.": "Acest canal nu există.", "This channel does not exist.": "Acest canal nu există.",
"Could not get channel info.": "Nu am putut primi informații despre acest canal.", "Could not get channel info.": "Nu am putut primi informații despre acest canal.",
"Could not fetch comments": "Încărcarea comentariilor a eșuat", "Could not fetch comments": "Încărcarea comentariilor a eșuat.",
"`x` ago": "acum `x`", "`x` ago": "acum `x`",
"Load more": "Vedeți mai mult", "Load more": "Vedeți mai mult",
"Could not create mix.": "Nu am putut crea această listă de redare.", "Could not create mix.": "Nu am putut crea această listă de redare.",
@ -179,7 +187,7 @@
"Erroneous challenge": "Challenge invalid", "Erroneous challenge": "Challenge invalid",
"Erroneous token": "Token invalid", "Erroneous token": "Token invalid",
"No such user": "Acest utilizator nu există", "No such user": "Acest utilizator nu există",
"Token is expired, please try again": "Jetonul a expirat, vă rugăm să încercați din nou", "Token is expired, please try again": "Token-ul este expirat, vă rugăm să reîncercați.",
"English": "Engleză", "English": "Engleză",
"English (auto-generated)": "Engleză (generată automat)", "English (auto-generated)": "Engleză (generată automat)",
"Afrikaans": "Afrikaans", "Afrikaans": "Afrikaans",
@ -287,7 +295,7 @@
"Yoruba": "Yoruba", "Yoruba": "Yoruba",
"Zulu": "Zoulou", "Zulu": "Zoulou",
"Fallback comments: ": "Comentarii alternative: ", "Fallback comments: ": "Comentarii alternative: ",
"Popular": "Populare", "Popular": "Popular",
"Top": "Top", "Top": "Top",
"About": "Despre", "About": "Despre",
"Rating: ": "Evaluare: ", "Rating: ": "Evaluare: ",
@ -307,176 +315,8 @@
"`x` marked it with a ❤": "`x` l-a marcat cu o ❤", "`x` marked it with a ❤": "`x` l-a marcat cu o ❤",
"Audio mode": "Mod audio", "Audio mode": "Mod audio",
"Video mode": "Mod video", "Video mode": "Mod video",
"channel_tab_videos_label": "Videoclipuri", "Videos": "Videoclipuri",
"Playlists": "Liste de redare", "Playlists": "Liste de redare",
"channel_tab_community_label": "Comunitate", "Community": "Comunitate",
"Current version: ": "Versiunea actuală: ", "Current version: ": "Versiunea actuală: "
"crash_page_read_the_faq": "citit lista <a href=\"`x`\">Întrebărilor Frecvente (FAQ)</a>",
"generic_count_days_0": "{{count}} zi",
"generic_count_days_1": "{{count}} zile",
"generic_count_days_2": "{{count}} de zile",
"generic_count_hours_0": "{{count}} oră",
"generic_count_hours_1": "{{count}} ore",
"generic_count_hours_2": "{{count}} de ore",
"generic_count_minutes_0": "{{count}} minut",
"generic_count_minutes_1": "{{count}} minute",
"generic_count_minutes_2": "{{count}} de minute",
"generic_views_count_0": "{{count}} vizionare",
"generic_views_count_1": "{{count}} vizionări",
"generic_views_count_2": "{{count}} de vizionări",
"subscriptions_unseen_notifs_count_0": "{{count}} notificare neverificată",
"subscriptions_unseen_notifs_count_1": "{{count}} notificări neverificate",
"subscriptions_unseen_notifs_count_2": "{{count}} de notificări neverificate",
"crash_page_refresh": "încercat să <a href=\"`x`\">reîmprospătați pagina</a>",
"crash_page_switch_instance": "am încercat să <a href=\"`x`\">folosim o altă instanță</a>",
"preferences_watch_history_label": "Activează istoricul: ",
"invidious": "Invidious",
"preferences_vr_mode_label": "Videoclipuri interactive de 360 de grade (necesită WebGL): ",
"English (United Kingdom)": "Engleză (Regatul Unit)",
"English (United States)": "Engleză (Statele Unite ale Americii)",
"Chinese": "Chineză",
"Chinese (China)": "Chineză (China)",
"Chinese (Hong Kong)": "Chineză (Hong Kong)",
"Chinese (Taiwan)": "Chineză (Taiwan)",
"Cantonese (Hong Kong)": "Cantoneză (Hong Kong)",
"Portuguese (auto-generated)": "Portugheză (generată automat)",
"Portuguese (Brazil)": "Portugheză (Brazilia)",
"Russian (auto-generated)": "Rusă (generată automat)",
"Turkish (auto-generated)": "Turcă (generată automat)",
"Vietnamese (auto-generated)": "Vietnameză (generată automat)",
"videoinfo_started_streaming_x_ago": "În direct de acum `x`",
"preferences_quality_dash_option_2160p": "2160p",
"footer_modfied_source_code": "Codul sursă modificat",
"preferences_quality_dash_label": "Calitatea video DASH preferată: ",
"generic_videos_count_0": "{{count}} videoclip",
"generic_videos_count_1": "{{count}} videoclipuri",
"generic_videos_count_2": "{{count}} de videoclipuri",
"generic_playlists_count_0": "{{count}} playlist",
"generic_playlists_count_1": "{{count}} playlisturi",
"generic_playlists_count_2": "{{count}} de playlisturi",
"tokens_count_0": "{{count}} jeton",
"tokens_count_1": "{{count}} jetoane",
"tokens_count_2": "{{count}} de jetoane",
"comments_points_count_0": "{{count}} punct",
"comments_points_count_1": "{{count}} puncte",
"comments_points_count_2": "{{count}} de puncte",
"Spanish (Spain)": "Spaniolă (Spania)",
"Video unavailable": "Videoclip indisponibil",
"crash_page_search_issue": "căutat <a href=\"`x`\">sugestiile existente pe GitHub</a>",
"Show more": "Afișați mai mult",
"Released under the AGPLv3 on Github.": "Lansat sub licența AGPLv3 pe GitHub.",
"preferences_quality_option_dash": "DASH (calitate adaptativă)",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_option_small": "Mică",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_category_misc": "Setări diverse",
"preferences_automatic_instance_redirect_label": "Redirecționare automată de instanță (trecere prin redirect.invidious.io): ",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_option_medium": "Medie",
"Switch Invidious Instance": "Schimbă instanța Invidious",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_auto": "Automatică",
"preferences_quality_dash_option_best": "Cea mai bună",
"preferences_quality_dash_option_worst": "Cea mai redusă",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_360p": "360p",
"preferences_region_label": "Țară de conținut: ",
"preferences_extend_desc_label": "Extindeți automat descrierea: ",
"preferences_show_nick_label": "Afișați numele de utilizator pe partea de sus: ",
"generic_subscribers_count_0": "{{count}} abonat",
"generic_subscribers_count_1": "{{count}} abonați",
"generic_subscribers_count_2": "{{count}} de abonați",
"generic_subscriptions_count_0": "{{count}} abonament",
"generic_subscriptions_count_1": "{{count}} abonamente",
"generic_subscriptions_count_2": "{{count}} de abonamente",
"Search": "Căutați",
"search_filters_title": "Filtre",
"search_filters_date_label": "Data încărcării",
"none": "niciunul",
"search_message_use_another_instance": " Puteți <a href=\"`x`\">căuta într-o altă instanță</a>.",
"comments_view_x_replies_0": "Afișați {{count}} răspuns",
"comments_view_x_replies_1": "Afișați {{count}} răspunsuri",
"comments_view_x_replies_2": "Afișați {{count}} de răspunsuri",
"search_message_no_results": "Nu s-au găsit rezultate.",
"Dutch (auto-generated)": "Olandeză (generată automat)",
"Indonesian (auto-generated)": "Indoneziană (generată automat)",
"German (auto-generated)": "Germană (generată automat)",
"French (auto-generated)": "Franceză (generată automat)",
"Interlingue": "Interlingue",
"Italian (auto-generated)": "Italiană (generată automat)",
"Japanese (auto-generated)": "Japoneză (generată automat)",
"Korean (auto-generated)": "Coreeană (generată automat)",
"Spanish (auto-generated)": "Spaniolă (generată automat)",
"search_filters_date_option_none": "Oricând",
"search_filters_date_option_year": "an",
"search_filters_type_option_channel": "canal",
"Spanish (Mexico)": "Spaniolă (Mexic)",
"generic_count_weeks_0": "{{count}} săptămână",
"generic_count_weeks_1": "{{count}} săptămâni",
"generic_count_weeks_2": "{{count}} de săptămâni",
"generic_count_seconds_0": "{{count}} secundă",
"generic_count_seconds_1": "{{count}} secunde",
"generic_count_seconds_2": "{{count}} de secunde",
"search_filters_type_option_video": "videoclip",
"generic_count_years_0": "{{count}} an",
"generic_count_years_1": "{{count}} ani",
"generic_count_years_2": "{{count}} de ani",
"generic_count_months_0": "{{count}} lună",
"generic_count_months_1": "{{count}} luni",
"generic_count_months_2": "{{count}} de luni",
"search_filters_duration_label": "durată",
"search_filters_date_option_month": "lună",
"search_filters_type_label": "Tip",
"search_filters_date_option_today": "azi",
"search_filters_date_option_week": "săptămână",
"search_filters_features_option_vr180": "VR180",
"search_filters_type_option_playlist": "playlist",
"search_filters_type_option_movie": "film",
"search_filters_type_option_show": "emisiune",
"search_filters_duration_option_short": "Scurt (< 4 minute)",
"search_filters_duration_option_medium": "Medie (4 - 20 de minute)",
"search_filters_duration_option_none": "Fără limită",
"search_filters_duration_option_long": "Lungă (> 20 de minute)",
"search_filters_features_label": "atribute",
"search_filters_features_option_live": "în direct",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_c_commons": "Creative Commons",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_three_d": "3D",
"search_filters_features_option_subtitles": "subtitrări/CC",
"search_filters_features_option_hd": "HD",
"search_filters_features_option_hdr": "HDR",
"search_filters_features_option_purchased": "Cumpărate",
"next_steps_error_message": "După ce ar trebui să încercați să: ",
"user_saved_playlists": "`x` playlisturi salvate",
"search_filters_features_option_location": "locație",
"search_filters_sort_label": "Sortați după",
"search_filters_sort_option_relevance": "relevanță",
"search_filters_sort_option_rating": "clasificare",
"search_filters_sort_option_date": "Data încărcării",
"search_filters_sort_option_views": "Numărul de vizionări",
"footer_source_code": "Codul sursă",
"search_filters_apply_button": "Aplicați filtrele selectate",
"footer_original_source_code": "Codul sursă original",
"next_steps_error_message_refresh": "Reîmprospătează",
"next_steps_error_message_go_to_youtube": "Mergeți pe YouTube",
"footer_donate_page": "Donați",
"adminprefs_modified_source_code_url_label": "URL către depozitul de cod sursă modificat",
"footer_documentation": "Documentație",
"videoinfo_youTube_embed_link": "Încorporați",
"videoinfo_watch_on_youTube": "Vizionați pe YouTube",
"videoinfo_invidious_embed_link": "Link de încorporare",
"download_subtitles": "Subtitrări - `x` (.vtt)",
"user_created_playlists": "`x` playlisturi create",
"preferences_save_player_pos_label": "Salvați poziția de redare: ",
"crash_page_you_found_a_bug": "Se pare că ați găsit un bug în aplicația Invidious!",
"crash_page_before_reporting": "Înainte de a reporta bugul, asigurați-vă că ați:",
"search_filters_date_option_hour": "oră",
"search_message_change_filters_or_query": "Încercați să lărgiți căutarea sau să modificați filtrele.",
"crash_page_report_issue": "Dacă niciuna dintre sugestiile de mai sus v-a ajutat, vă rugăm să <a href=\"`x`\">postați o nouă sugestie pe GitHub</a> (cel mai bine în engleză), și să includeți următorul text în post (să nu îl traduceți):",
"search_filters_type_option_all": "orice tip",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p",
"Show less": "Afișați mai puțin"
} }

@ -4,9 +4,9 @@
"Unsubscribe": "Отписаться", "Unsubscribe": "Отписаться",
"Subscribe": "Подписаться", "Subscribe": "Подписаться",
"View channel on YouTube": "Смотреть канал на YouTube", "View channel on YouTube": "Смотреть канал на YouTube",
"View playlist on YouTube": росмотреть подборку на ютубе", "View playlist on YouTube": осмотреть плейлист на YouTube",
"newest": "сначала новые", "newest": "самые свежие",
"oldest": "сначала старые", "oldest": "самые старые",
"popular": "популярные", "popular": "популярные",
"last": "недавние", "last": "недавние",
"Next page": "Следующая страница", "Next page": "Следующая страница",
@ -14,6 +14,7 @@
"Clear watch history?": "Очистить историю просмотров?", "Clear watch history?": "Очистить историю просмотров?",
"New password": "Новый пароль", "New password": "Новый пароль",
"New passwords must match": "Новые пароли не совпадают", "New passwords must match": "Новые пароли не совпадают",
"Cannot change password for Google accounts": "Изменить пароль аккаунта Google невозможно",
"Authorize token?": "Авторизовать токен?", "Authorize token?": "Авторизовать токен?",
"Authorize token for `x`?": "Авторизовать токен для `x`?", "Authorize token for `x`?": "Авторизовать токен для `x`?",
"Yes": "Да", "Yes": "Да",
@ -29,26 +30,28 @@
"Export subscriptions as OPML": "Экспортировать подписки в формате OPML", "Export subscriptions as OPML": "Экспортировать подписки в формате OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Экспортировать подписки в формате OPML (для NewPipe и FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Экспортировать подписки в формате OPML (для NewPipe и FreeTube)",
"Export data as JSON": "Экспортировать данные Invidious в формате JSON", "Export data as JSON": "Экспортировать данные Invidious в формате JSON",
"Delete account?": "Удалить учётку?", "Delete account?": "Удалить аккаунт?",
"History": "История", "History": "История",
"An alternative front-end to YouTube": "Альтернативный фронтенд для YouTube", "An alternative front-end to YouTube": "Альтернативный фронтенд для YouTube",
"JavaScript license information": "Информация о лицензиях JavaScript", "JavaScript license information": "Информация о лицензиях JavaScript",
"source": "источник", "source": "источник",
"Log in": "Войти", "Log in": "Войти",
"Log in/register": "Войти или зарегистрироваться", "Log in/register": "Войти или зарегистрироваться",
"User ID": "ИД пользователя", "Log in with Google": "Войти через Google",
"User ID": "ID пользователя",
"Password": "Пароль", "Password": "Пароль",
"Time (h:mm:ss):": "Время (ч:мм:сс):", "Time (h:mm:ss):": "Время (ч:мм:сс):",
"Text CAPTCHA": "Текстовая капча (англ.)", "Text CAPTCHA": "Текст капчи",
"Image CAPTCHA": "Капча-картинка", "Image CAPTCHA": "Изображение капчи",
"Sign In": "Войти", "Sign In": "Войти",
"Register": "Зарегистрироваться", "Register": "Зарегистрироваться",
"E-mail": "Эл. почта", "E-mail": "Электронная почта",
"Google verification code": "Код подтверждения Google",
"Preferences": "Настройки", "Preferences": "Настройки",
"preferences_category_player": "Настройки проигрывателя", "preferences_category_player": "Настройки проигрывателя",
"preferences_video_loop_label": "Всегда повторять: ", "preferences_video_loop_label": "Всегда повторять: ",
"preferences_autoplay_label": "Автовоспроизведение: ", "preferences_autoplay_label": "Автовоспроизведение: ",
"preferences_continue_label": "Переходить к следующему видео? ", "preferences_continue_label": "Всегда включать следующее видео? ",
"preferences_continue_autoplay_label": "Автопроигрывание следующего видео: ", "preferences_continue_autoplay_label": "Автопроигрывание следующего видео: ",
"preferences_listen_label": "Режим «только аудио» по умолчанию: ", "preferences_listen_label": "Режим «только аудио» по умолчанию: ",
"preferences_local_label": "Проигрывать видео через прокси? ", "preferences_local_label": "Проигрывать видео через прокси? ",
@ -68,15 +71,15 @@
"preferences_player_style_label": "Стиль проигрывателя: ", "preferences_player_style_label": "Стиль проигрывателя: ",
"Dark mode: ": "Тёмное оформление: ", "Dark mode: ": "Тёмное оформление: ",
"preferences_dark_mode_label": "Тема: ", "preferences_dark_mode_label": "Тема: ",
"dark": ёмная", "dark": емная",
"light": "светлая", "light": "светлая",
"preferences_thin_mode_label": "Облегчённое оформление: ", "preferences_thin_mode_label": "Облегчённое оформление: ",
"preferences_category_misc": "Прочие настройки", "preferences_category_misc": "Прочие предпочтения",
"preferences_automatic_instance_redirect_label": "Автоматическая смена зеркала (переход на redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Автоматическое перенаправление на зеркало сайта (резервный вариант redirect.invidious.io): ",
"preferences_category_subscription": "Настройки подписок", "preferences_category_subscription": "Настройки подписок",
"preferences_annotations_subscribed_label": "Всегда показывать аннотации на каналах из ваших подписок? ", "preferences_annotations_subscribed_label": "Всегда показывать аннотации в видео каналов, на которые вы подписаны? ",
"Redirect homepage to feed: ": "Показывать подписки на главной странице: ", "Redirect homepage to feed: ": "Отображать видео с каналов, на которые вы подписаны, как главную страницу: ",
"preferences_max_results_label": "Число видео в ленте: ", "preferences_max_results_label": "Число видео, на которые вы подписаны, в ленте: ",
"preferences_sort_label": "Сортировать видео: ", "preferences_sort_label": "Сортировать видео: ",
"published": "по дате публикации", "published": "по дате публикации",
"published - reverse": "по дате публикации в обратном порядке", "published - reverse": "по дате публикации в обратном порядке",
@ -85,7 +88,7 @@
"channel name": "по названию канала", "channel name": "по названию канала",
"channel name - reverse": "по названию канала в обратном порядке", "channel name - reverse": "по названию канала в обратном порядке",
"Only show latest video from channel: ": "Показывать только последние видео с каналов: ", "Only show latest video from channel: ": "Показывать только последние видео с каналов: ",
"Only show latest unwatched video from channel: ": "Показывать только последние непросмотренные видео с канала: ", "Only show latest unwatched video from channel: ": "Показывать только непросмотренные видео с каналов: ",
"preferences_unseen_only_label": "Показывать только непросмотренные видео: ", "preferences_unseen_only_label": "Показывать только непросмотренные видео: ",
"preferences_notifications_only_label": "Показывать только оповещения, если они есть: ", "preferences_notifications_only_label": "Показывать только оповещения, если они есть: ",
"Enable web notifications": "Включить уведомления в браузере", "Enable web notifications": "Включить уведомления в браузере",
@ -93,24 +96,24 @@
"`x` is live": "`x` в прямом эфире", "`x` is live": "`x` в прямом эфире",
"preferences_category_data": "Настройки данных", "preferences_category_data": "Настройки данных",
"Clear watch history": "Очистить историю просмотров", "Clear watch history": "Очистить историю просмотров",
"Import/export data": "Импорт и экспорт данных", "Import/export data": "Импорткспорт данных",
"Change password": "Изменить пароль", "Change password": "Изменить пароль",
"Manage subscriptions": "Управление подписками", "Manage subscriptions": "Управлять подписками",
"Manage tokens": "Управление токенами", "Manage tokens": "Управлять токенами",
"Watch history": "История просмотров", "Watch history": "История просмотров",
"Delete account": "Удалить аккаунт", "Delete account": "Удалить аккаунт",
"preferences_category_admin": "Настройки администратора", "preferences_category_admin": "Администраторские настройки",
"preferences_default_home_label": "Главная страница по умолчанию: ", "preferences_default_home_label": "Главная страница по умолчанию: ",
"preferences_feed_menu_label": "Меню ленты видео: ", "preferences_feed_menu_label": "Меню ленты видео: ",
"preferences_show_nick_label": "Показать ник вверху: ", "preferences_show_nick_label": "Показать ник вверху: ",
"Top enabled: ": "Включить топ видео? ", "Top enabled: ": "Включить топ видео? ",
"CAPTCHA enabled: ": "Включить капчу? ", "CAPTCHA enabled: ": "Включить капчу? ",
"Login enabled: ": "Включить авторизацию: ", "Login enabled: ": "Включить авторизацию? ",
"Registration enabled: ": "Включить регистрацию? ", "Registration enabled: ": "Включить регистрацию? ",
"Report statistics: ": "Сообщать статистику? ", "Report statistics: ": "Сообщать статистику? ",
"Save preferences": "Сохранить настройки", "Save preferences": "Сохранить настройки",
"Subscription manager": "Управление подписками", "Subscription manager": "Менеджер подписок",
"Token manager": "Управление токенами", "Token manager": "Менеджер токенов",
"Token": "Токен", "Token": "Токен",
"Import/export": "Импорт и экспорт", "Import/export": "Импорт и экспорт",
"unsubscribe": "отписаться", "unsubscribe": "отписаться",
@ -118,55 +121,61 @@
"Subscriptions": "Подписки", "Subscriptions": "Подписки",
"search": "поиск", "search": "поиск",
"Log out": "Выйти", "Log out": "Выйти",
"Released under the AGPLv3 on Github.": "Выпущено под лицензией AGPLv3 на GitHub.", "Released under the AGPLv3 on Github.": "Выпущено под лицензией AGPLv3 на Github.",
"Source available here.": "Исходный код.", "Source available here.": "Исходный код доступен здесь.",
"View JavaScript license information.": "Информация о лицензиях JavaScript.", "View JavaScript license information.": "Посмотреть информацию по лицензии JavaScript.",
"View privacy policy.": "Политика конфиденциальности.", "View privacy policy.": "Посмотреть политику конфиденциальности.",
"Trending": "В тренде", "Trending": "В тренде",
"Public": "Публичный", "Public": "Публичный",
"Unlisted": "Нет в списке", "Unlisted": "Нет в списке",
"Private": "Приватный", "Private": "Приватный",
"View all playlists": росмотреть все подборки", "View all playlists": осмотреть все плейлисты",
"Updated `x` ago": "Обновлено `x` назад", "Updated `x` ago": "Обновлено `x` назад",
"Delete playlist `x`?": "Удалить подборку `x`?", "Delete playlist `x`?": "Удалить плейлист `x`?",
"Delete playlist": "Удалить подборку", "Delete playlist": "Удалить плейлист",
"Create playlist": "Создать подборку", "Create playlist": "Создать плейлист",
"Title": "Заголовок", "Title": "Заголовок",
"Playlist privacy": "Видимость подборки", "Playlist privacy": "Конфиденциальность плейлиста",
"Editing playlist `x`": "Изменение подборки `x`", "Editing playlist `x`": "Редактирование плейлиста `x`",
"Show more": "Развернуть", "Show more": "Показать больше",
"Show less": "Свернуть", "Show less": "Показать меньше",
"Watch on YouTube": "Смотреть на YouTube", "Watch on YouTube": "Смотреть на YouTube",
"Switch Invidious Instance": "Сменить зеркало Invidious", "Switch Invidious Instance": "Сменить экземпляр Invidious",
"Broken? Try another Invidious Instance": "Сломался? Попробуйте другой экземпляр Invidious",
"Hide annotations": "Скрыть аннотации", "Hide annotations": "Скрыть аннотации",
"Show annotations": "Показать аннотации", "Show annotations": "Показать аннотации",
"Genre: ": "Жанр: ", "Genre: ": "Жанр: ",
"License: ": "Лицензия: ", "License: ": "Лицензия: ",
"Family friendly? ": "Семейный просмотр: ", "Family friendly? ": "Семейный просмотр: ",
"Wilson score: ": "Оценка Уилсона: ", "Wilson score: ": "Рейтинг Уилсона: ",
"Engagement: ": "Вовлечённость: ", "Engagement: ": "Вовлечённость: ",
"Whitelisted regions: ": "Доступно в регионах: ", "Whitelisted regions: ": "Доступно в регионах: ",
"Blacklisted regions: ": "Недоступно в регионах: ", "Blacklisted regions: ": "Недоступно в регионах: ",
"Shared `x`": "Опубликовано `x`", "Shared `x`": "Опубликовано `x`",
"Premieres in `x`": "Премьера через `x`", "Premieres in `x`": "Премьера через `x`",
"Premieres `x`": "Премьера `x`", "Premieres `x`": "Премьера `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Похоже, у вас отключён JavaScript. Нажмите сюда, чтобы увидеть комментарии. Но учтите: они могут загружаться немного медленнее.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Похоже, у вас отключён JavaScript. Чтобы увидить комментарии, нажмите сюда, но учтите: они могут загружаться немного медленнее.",
"View YouTube comments": "Показать комментарии с YouTube", "View YouTube comments": "Смотреть комментарии с YouTube",
"View more comments on Reddit": "Посмотреть больше комментариев на Reddit", "View more comments on Reddit": "Посмотреть больше комментариев на Reddit",
"View `x` comments": { "View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "Показано `x` комментариев", "([^.,0-9]|^)1([^.,0-9]|$)": "Показать `x` комментариев",
"": "Показано `x` комментариев" "": "Показать `x` комментариев"
}, },
"View Reddit comments": "Смотреть комментарии с Reddit", "View Reddit comments": "Смотреть комментарии с Reddit",
"Hide replies": "Скрыть ответы", "Hide replies": "Скрыть ответы",
"Show replies": "Показать ответы", "Show replies": "Показать ответы",
"Incorrect password": "Неправильный пароль", "Incorrect password": "Неправильный пароль",
"Quota exceeded, try again in a few hours": "Лимит превышен, попробуйте снова через несколько часов",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Войти не удаётся. Проверьте, не включена ли двухфакторная аутентификация (по коду или смс).",
"Invalid TFA code": "Неправильный код двухфакторной аутентификации",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Не удаётся войти. Это может быть из-за того, что в вашем аккаунте не включена двухфакторная аутентификация.",
"Wrong answer": "Неправильный ответ", "Wrong answer": "Неправильный ответ",
"Erroneous CAPTCHA": "Неправильная капча", "Erroneous CAPTCHA": "Неправильная капча",
"CAPTCHA is a required field": "Необходимо решить капчу", "CAPTCHA is a required field": "Необходимо пройти капчу",
"User ID is a required field": "Необходимо ввести идентификатор пользователя", "User ID is a required field": "Необходимо ввести ID пользователя",
"Password is a required field": "Необходимо ввести пароль", "Password is a required field": "Необходимо ввести пароль",
"Wrong username or password": "Неправильный логин или пароль", "Wrong username or password": "Неправильный логин или пароль",
"Please sign in using 'Log in with Google'": "Пожалуйста, нажмите «Войти через Google»",
"Password cannot be empty": "Пароль не может быть пустым", "Password cannot be empty": "Пароль не может быть пустым",
"Password cannot be longer than 55 characters": "Пароль не может быть длиннее 55 символов", "Password cannot be longer than 55 characters": "Пароль не может быть длиннее 55 символов",
"Please log in": "Пожалуйста, войдите", "Please log in": "Пожалуйста, войдите",
@ -177,17 +186,17 @@
"Could not get channel info.": "Не удаётся получить информацию об этом канале.", "Could not get channel info.": "Не удаётся получить информацию об этом канале.",
"Could not fetch comments": "Не удаётся загрузить комментарии", "Could not fetch comments": "Не удаётся загрузить комментарии",
"`x` ago": "`x` назад", "`x` ago": "`x` назад",
"Load more": "Загрузить ещё", "Load more": "Загрузить больше",
"Could not create mix.": "Не удалось создать микс.", "Could not create mix.": "Не удаётся создать микс.",
"Empty playlist": одборка пуста", "Empty playlist": лейлист пуст",
"Not a playlist.": "Это не подборка.", "Not a playlist.": "Некорректный плейлист.",
"Playlist does not exist.": одборка не существует.", "Playlist does not exist.": лейлист не существует.",
"Could not pull trending pages.": "Не удаётся загрузить страницы «в тренде».", "Could not pull trending pages.": "Не удаётся загрузить страницы «в тренде».",
"Hidden field \"challenge\" is a required field": "Необходимо заполнить скрытое поле «challenge»", "Hidden field \"challenge\" is a required field": "Необходимо заполнить скрытое поле «challenge»",
"Hidden field \"token\" is a required field": "Необходимо заполнить скрытое поле «токен»", "Hidden field \"token\" is a required field": "Необходимо заполнить скрытое поле «токен»",
"Erroneous challenge": "Неправильный ответ в «challenge»", "Erroneous challenge": "Неправильный ответ в «challenge»",
"Erroneous token": "Неправильный токен", "Erroneous token": "Неправильный токен",
"No such user": "Пользователь не найден", "No such user": "Недопустимое имя пользователя",
"Token is expired, please try again": "Срок действия токена истёк, попробуйте позже", "Token is expired, please try again": "Срок действия токена истёк, попробуйте позже",
"English": "Английский", "English": "Английский",
"English (auto-generated)": "Английский (созданы автоматически)", "English (auto-generated)": "Английский (созданы автоматически)",
@ -205,13 +214,13 @@
"Burmese": "Бирманский", "Burmese": "Бирманский",
"Catalan": "Каталонский", "Catalan": "Каталонский",
"Cebuano": "Себуанский", "Cebuano": "Себуанский",
"Chinese (Simplified)": "Китайский (упрощённый)", "Chinese (Simplified)": "Китайский (упрощенный)",
"Chinese (Traditional)": "Китайский (традиционный)", "Chinese (Traditional)": "Китайский (традиционный)",
"Corsican": "Корсиканский", "Corsican": "Корсиканский",
"Croatian": "Хорватский", "Croatian": "Хорватский",
"Czech": "Чешский", "Czech": "Чешский",
"Danish": "Датский", "Danish": "Датский",
"Dutch": "Голландский", "Dutch": "Нидерландский",
"Esperanto": "Эсперанто", "Esperanto": "Эсперанто",
"Estonian": "Эстонский", "Estonian": "Эстонский",
"Filipino": "Филиппинский", "Filipino": "Филиппинский",
@ -221,8 +230,8 @@
"Georgian": "Грузинский", "Georgian": "Грузинский",
"German": "Немецкий", "German": "Немецкий",
"Greek": "Греческий", "Greek": "Греческий",
"Gujarati": "Гуджарати", "Gujarati": "Гуджаратский",
"Haitian Creole": "Гаитянский креольский", "Haitian Creole": "Гаит. креольский",
"Hausa": "Хауса", "Hausa": "Хауса",
"Hawaiian": "Гавайский", "Hawaiian": "Гавайский",
"Hebrew": "Иврит", "Hebrew": "Иврит",
@ -243,7 +252,7 @@
"Kurdish": "Курдский", "Kurdish": "Курдский",
"Kyrgyz": "Киргизский", "Kyrgyz": "Киргизский",
"Lao": "Лаосский", "Lao": "Лаосский",
"Latin": "Латынь", "Latin": "Латинский",
"Latvian": "Латышский", "Latvian": "Латышский",
"Lithuanian": "Литовский", "Lithuanian": "Литовский",
"Luxembourgish": "Люксембургский", "Luxembourgish": "Люксембургский",
@ -254,9 +263,9 @@
"Maltese": "Мальтийский", "Maltese": "Мальтийский",
"Maori": "Маори", "Maori": "Маори",
"Marathi": "Маратхи", "Marathi": "Маратхи",
"Mongolian": "Монгольский", "Mongolian": "Монгольская",
"Nepali": "Непальский", "Nepali": "Непальский",
"Norwegian Bokmål": "Норвежский букмол", "Norwegian Bokmål": "Норвежский",
"Nyanja": "Ньянджа", "Nyanja": "Ньянджа",
"Pashto": "Пушту", "Pashto": "Пушту",
"Persian": "Персидский", "Persian": "Персидский",
@ -291,7 +300,7 @@
"Vietnamese": "Вьетнамский", "Vietnamese": "Вьетнамский",
"Welsh": "Валлийский", "Welsh": "Валлийский",
"Western Frisian": "Западнофризский", "Western Frisian": "Западнофризский",
"Xhosa": "Коса (кхоса)", "Xhosa": "Коса",
"Yiddish": "Идиш", "Yiddish": "Идиш",
"Yoruba": "Йоруба", "Yoruba": "Йоруба",
"Zulu": "Зулусский", "Zulu": "Зулусский",
@ -302,8 +311,8 @@
"About": "О сайте", "About": "О сайте",
"Rating: ": "Рейтинг: ", "Rating: ": "Рейтинг: ",
"preferences_locale_label": "Язык: ", "preferences_locale_label": "Язык: ",
"View as playlist": "Смотреть как подборку", "View as playlist": "Смотреть как плейлист",
"Default": "По умолчанию", "Default": "По-умолчанию",
"Music": "Музыка", "Music": "Музыка",
"Gaming": "Игры", "Gaming": "Игры",
"News": "Новости", "News": "Новости",
@ -317,41 +326,42 @@
"`x` marked it with a ❤": "❤ от автора канала \"`x`\"", "`x` marked it with a ❤": "❤ от автора канала \"`x`\"",
"Audio mode": "Аудио режим", "Audio mode": "Аудио режим",
"Video mode": "Видео режим", "Video mode": "Видео режим",
"channel_tab_videos_label": "Видео", "Videos": "Видео",
"Playlists": "Подборки", "Playlists": "Плейлисты",
"channel_tab_community_label": "Сообщество", "Community": "Сообщество",
"search_filters_sort_option_relevance": "по актуальности", "relevance": "Актуальность",
"search_filters_sort_option_rating": "по рейтингу", "rating": "Рейтинг",
"search_filters_sort_option_date": "по дате загрузки", "date": "Дата загрузки",
"search_filters_sort_option_views": "по просмотрам", "views": "Просмотры",
"search_filters_type_label": "Тип", "content_type": "Тип",
"search_filters_duration_label": "Длительность", "duration": "Длительность",
"search_filters_features_label": "Дополнительно", "features": "Функции",
"search_filters_sort_label": "Сортировать", "sort": "Сортировать по",
"search_filters_date_option_hour": "Последний час", "hour": "Последний час",
"search_filters_date_option_today": "Сегодня", "today": "Сегодня",
"search_filters_date_option_week": "Эта неделя", "week": "Эта неделя",
"search_filters_date_option_month": "Этот месяц", "month": "Этот месяц",
"search_filters_date_option_year": "Этот год", "year": "Этот год",
"search_filters_type_option_video": "Видео", "video": "Видео",
"search_filters_type_option_channel": "Канал", "channel": "Канал",
"search_filters_type_option_playlist": "Подборка", "playlist": "Плейлист",
"search_filters_type_option_movie": "Фильм", "movie": "Фильм",
"search_filters_type_option_show": "Сериал", "show": "Показать",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Субтитры", "subtitles": "Субтитры",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Прямой эфир", "live": "Прямой эфир",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Местоположение", "location": "Местоположение",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "Фильтр",
"Current version: ": "Текущая версия: ", "Current version: ": "Текущая версия: ",
"next_steps_error_message": "После чего следует попробовать: ", "next_steps_error_message": "После чего следует попробовать: ",
"next_steps_error_message_refresh": "Обновить", "next_steps_error_message_refresh": "Обновить",
"next_steps_error_message_go_to_youtube": "Перейти на YouTube", "next_steps_error_message_go_to_youtube": "Перейти на YouTube",
"search_filters_duration_option_short": "Короткие (< 4 минут)", "short": "Короткие (< 4 минут)",
"search_filters_duration_option_long": "Длинные (> 20 минут)", "long": "Длинные (> 20 минут)",
"preferences_quality_dash_option_best": "Наилучшее", "preferences_quality_dash_option_best": "Наилучшее",
"generic_count_weeks_0": "{{count}} неделя", "generic_count_weeks_0": "{{count}} неделя",
"generic_count_weeks_1": "{{count}} недели", "generic_count_weeks_1": "{{count}} недели",
@ -360,34 +370,34 @@
"English (United States)": "Английский (США)", "English (United States)": "Английский (США)",
"Cantonese (Hong Kong)": "Кантонский (Гонконг)", "Cantonese (Hong Kong)": "Кантонский (Гонконг)",
"Chinese (Taiwan)": "Китайский (Тайвань)", "Chinese (Taiwan)": "Китайский (Тайвань)",
"Dutch (auto-generated)": "Голландский (созданы автоматически)", "Dutch (auto-generated)": "Голландский (автоматический)",
"German (auto-generated)": "Немецкий (созданы автоматически)", "German (auto-generated)": "Немецкий (автоматический)",
"Indonesian (auto-generated)": "Индонезийский (созданы автоматически)", "Indonesian (auto-generated)": "Индонезийский (автоматический)",
"Italian (auto-generated)": "Итальянский (созданы автоматически)", "Italian (auto-generated)": "Итальянский (автоматический)",
"Interlingue": "Окциденталь", "Interlingue": "Окциденталь",
"Russian (auto-generated)": "Русский (созданы автоматически)", "Russian (auto-generated)": "Русский (автоматический)",
"Spanish (auto-generated)": "Испанский (созданы автоматически)", "Spanish (auto-generated)": "Испанский (автоматический)",
"Spanish (Spain)": "Испанский (Испания)", "Spanish (Spain)": "Испанский (Испания)",
"Turkish (auto-generated)": "Турецкий (созданы автоматически)", "Turkish (auto-generated)": "Турецкий (автоматический)",
"Vietnamese (auto-generated)": "Вьетнамский (созданы автоматически)", "Vietnamese (auto-generated)": "Вьетнамский (автоматический)",
"footer_documentation": "Документация", "footer_documentation": "Документация",
"adminprefs_modified_source_code_url_label": "Ссылка на репозиторий с измененными исходными кодами", "adminprefs_modified_source_code_url_label": "Ссылка на нашу ветку репозитория",
"none": "ничего", "none": "ничего",
"videoinfo_watch_on_youTube": "Смотреть на YouTube", "videoinfo_watch_on_youTube": "Смотреть на YouTube",
"videoinfo_youTube_embed_link": "Версия для встраивания", "videoinfo_youTube_embed_link": "Встраиваемый элемент",
"videoinfo_invidious_embed_link": "Ссылка для встраивания", "videoinfo_invidious_embed_link": "Встраиваемая ссылка",
"download_subtitles": "Субтитры - `x` (.vtt)", "download_subtitles": "Субтитры - `x` (.vtt)",
"user_created_playlists": "`x` созданных подборок", "user_created_playlists": "`x` созданных плейлистов",
"crash_page_you_found_a_bug": "Похоже, вы нашли ошибку в Invidious!", "crash_page_you_found_a_bug": "Похоже вы нашли баг в Invidious!",
"crash_page_before_reporting": "Прежде чем сообщать об ошибке, убедитесь, что вы:", "crash_page_before_reporting": "Прежде чем сообщать об ошибке, убедитесь, что вы:",
"crash_page_refresh": "пробовали <a href=\"`x`\"> перезагрузить страницу</a>", "crash_page_refresh": "пробовали <a href=\"`x`\"> перезагрузить страницу</a>",
"crash_page_report_issue": "Если ни один вариант не помог, пожалуйста <a href=\"`x`\">откройте новую проблему на GitHub</a> (на английском, пжлста) и приложите следующий текст к вашему сообщению (НЕ переводите его):", "crash_page_report_issue": "Если ни один вариант не помог, пожалуйста <a href=\"`x`\">откройте новую проблему на GitHub</a> (желательно на английском) и приложите следующий текст к вашему сообщению (НЕ переводите его):",
"generic_videos_count_0": "{{count}} видео", "generic_videos_count_0": "{{count}} видео",
"generic_videos_count_1": "{{count}} видео", "generic_videos_count_1": "{{count}} видео",
"generic_videos_count_2": "{{count}} видео", "generic_videos_count_2": "{{count}} видео",
"generic_playlists_count_0": "{{count}} подборка", "generic_playlists_count_0": "{{count}} плейлист",
"generic_playlists_count_1": "{{count}} подборки", "generic_playlists_count_1": "{{count}} плейлиста",
"generic_playlists_count_2": "{{count}} подборок", "generic_playlists_count_2": "{{count}} плейлистов",
"tokens_count_0": "{{count}} токен", "tokens_count_0": "{{count}} токен",
"tokens_count_1": "{{count}} токена", "tokens_count_1": "{{count}} токена",
"tokens_count_2": "{{count}} токенов", "tokens_count_2": "{{count}} токенов",
@ -409,8 +419,8 @@
"generic_views_count_0": "{{count}} просмотр", "generic_views_count_0": "{{count}} просмотр",
"generic_views_count_1": "{{count}} просмотра", "generic_views_count_1": "{{count}} просмотра",
"generic_views_count_2": "{{count}} просмотров", "generic_views_count_2": "{{count}} просмотров",
"French (auto-generated)": "Французский (созданы автоматически)", "French (auto-generated)": "Французский (автоматический)",
"Portuguese (auto-generated)": "Португальский (созданы автоматически)", "Portuguese (auto-generated)": "Португальский (автоматический)",
"generic_count_days_0": "{{count}} день", "generic_count_days_0": "{{count}} день",
"generic_count_days_1": "{{count}} дня", "generic_count_days_1": "{{count}} дня",
"generic_count_days_2": "{{count}} дней", "generic_count_days_2": "{{count}} дней",
@ -427,15 +437,15 @@
"generic_count_seconds_0": "{{count}} секунда", "generic_count_seconds_0": "{{count}} секунда",
"generic_count_seconds_1": "{{count}} секунды", "generic_count_seconds_1": "{{count}} секунды",
"generic_count_seconds_2": "{{count}} секунд", "generic_count_seconds_2": "{{count}} секунд",
"search_filters_features_option_purchased": "Приобретено", "purchased": "Приобретено",
"videoinfo_started_streaming_x_ago": "Трансляция началась `x` назад", "videoinfo_started_streaming_x_ago": "Трансляция началась `x` назад",
"crash_page_switch_instance": "пробовали <a href=\"`x`\">использовать другое зеркало</a>", "crash_page_switch_instance": "пробовали <a href=\"`x`\">использовать другое зеркало</a>",
"crash_page_read_the_faq": "прочли ответы на <a href=\"`x`\">Частые Вопросы (ЧаВо)</a>", "crash_page_read_the_faq": "прочли <a href=\"`x`\">Частые Вопросы (ЧаВо)</a>",
"Chinese": "Китайский", "Chinese": "Китайский",
"Chinese (Hong Kong)": "Китайский (Гонконг)", "Chinese (Hong Kong)": "Китайский (Гонконг)",
"Japanese (auto-generated)": "Японский (созданы автоматически)", "Japanese (auto-generated)": "Японский (автоматический)",
"Chinese (China)": "Китайский (Китай)", "Chinese (China)": "Китайский (Китай)",
"Korean (auto-generated)": "Корейский (созданы автоматически)", "Korean (auto-generated)": "Корейский (автоматический)",
"generic_count_months_0": "{{count}} месяц", "generic_count_months_0": "{{count}} месяц",
"generic_count_months_1": "{{count}} месяца", "generic_count_months_1": "{{count}} месяца",
"generic_count_months_2": "{{count}} месяцев", "generic_count_months_2": "{{count}} месяцев",
@ -446,8 +456,8 @@
"footer_source_code": "Исходный код", "footer_source_code": "Исходный код",
"footer_original_source_code": "Оригинальный исходный код", "footer_original_source_code": "Оригинальный исходный код",
"footer_modfied_source_code": "Изменённый исходный код", "footer_modfied_source_code": "Изменённый исходный код",
"user_saved_playlists": "`x` сохранённых подборок", "user_saved_playlists": "`x` сохранённых плейлистов",
"crash_page_search_issue": "поискали <a href=\"`x`\">похожую проблему на GitHub</a>", "crash_page_search_issue": "искали <a href=\"`x`\">похожую проблему на Github</a>",
"comments_points_count_0": "{{count}} плюс", "comments_points_count_0": "{{count}} плюс",
"comments_points_count_1": "{{count}} плюса", "comments_points_count_1": "{{count}} плюса",
"comments_points_count_2": "{{count}} плюсов", "comments_points_count_2": "{{count}} плюсов",
@ -456,41 +466,15 @@
"preferences_quality_option_dash": "DASH (автоматическое качество)", "preferences_quality_option_dash": "DASH (автоматическое качество)",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_option_medium": "Среднее", "preferences_quality_option_medium": "Среднее",
"preferences_quality_dash_label": "Предпочтительное качество для DASH: ", "preferences_quality_dash_label": "Предпочтительное автоматическое качество видео: ",
"preferences_quality_dash_option_worst": "Очень низкое", "preferences_quality_dash_option_worst": "Очень низкое",
"preferences_quality_dash_option_4320p": "4320p", "preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_2160p": "2160p", "preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"Video unavailable": "Видео недоступно", "Video unavailable": "Видео недоступно",
"preferences_save_player_pos_label": "Запоминать позицию: ", "preferences_save_player_pos_label": "Запоминать позицию: ",
"preferences_region_label": "Страна: ", "preferences_region_label": "Страна: "
"preferences_watch_history_label": "Включить историю просмотров: ",
"search_filters_title": "Фильтр",
"search_filters_duration_option_none": "Любой длины",
"search_filters_type_option_all": "Любого типа",
"search_filters_date_option_none": "Любая дата",
"search_filters_date_label": "Дата загрузки",
"search_message_no_results": "Ничего не найдено.",
"search_message_use_another_instance": " Дополнительно вы можете <a href=\"`x`\">поискать на других зеркалах</a>.",
"search_filters_features_option_vr180": "VR180",
"search_message_change_filters_or_query": "Попробуйте расширить поисковый запрос или изменить фильтры.",
"search_filters_duration_option_medium": "Средние (4 - 20 минут)",
"search_filters_apply_button": "Применить фильтры",
"Popular enabled: ": "Популярное включено: ",
"error_video_not_in_playlist": "Запрошенного видео нет в этой подборке. <a href=\"`x`\">Нажмите тут, чтобы вернуться к странице подборки.</a>",
"channel_tab_playlists_label": "Подборки",
"channel_tab_channels_label": "Каналы",
"channel_tab_streams_label": "Стримы",
"channel_tab_shorts_label": "Shorts",
"Music in this video": "Музыка в этом видео",
"Artist: ": "Исполнитель: ",
"Album: ": "Альбом: ",
"Song: ": "Композиция: ",
"Standard YouTube license": "Стандартная лицензия YouTube",
"Channel Sponsor": "Спонсор канала",
"Download is disabled": "Загрузка отключена",
"Import YouTube playlist (.csv)": "Импорт плейлиста YouTube (.csv)"
} }

@ -1,123 +0,0 @@
{
"generic_views_count": "බැලීම් {{count}}",
"generic_views_count_plural": "බැලීම් {{count}}",
"generic_videos_count": "{{count}} වීඩියෝව",
"generic_videos_count_plural": "වීඩියෝ {{count}}",
"generic_subscribers_count": "ග්‍රාහකයන් {{count}}",
"generic_subscribers_count_plural": "ග්‍රාහකයන් {{count}}",
"generic_subscriptions_count": "දායකත්ව {{count}}",
"generic_subscriptions_count_plural": "දායකත්ව {{count}}",
"Shared `x` ago": "`x` පෙර බෙදා ගන්නා ලදී",
"Unsubscribe": "දායක නොවන්න",
"View playlist on YouTube": "YouTube හි ධාවන ලැයිස්තුව බලන්න",
"newest": "අලුත්ම",
"oldest": "පැරණිතම",
"popular": "ජනප්‍රිය",
"last": "අවසන්",
"Authorize token?": "ටෝකනය අනුමත කරනවා ද?",
"Authorize token for `x`?": "`x` සඳහා ටෝකනය අනුමත කරනවා ද?",
"Yes": "ඔව්",
"Import and Export Data": "දත්ත ආනයනය සහ අපනයනය කිරීම",
"Import": "ආනයන",
"Import Invidious data": "Invidious JSON දත්ත ආයාත කරන්න",
"Import FreeTube subscriptions (.db)": "FreeTube දායකත්වයන් (.db) ආයාත කරන්න",
"Import NewPipe subscriptions (.json)": "NewPipe දායකත්වයන් (.json) ආයාත කරන්න",
"Import NewPipe data (.zip)": "NewPipe දත්ත (.zip) ආයාත කරන්න",
"Export": "අපනයන",
"Export data as JSON": "Invidious දත්ත JSON ලෙස අපනයනය කරන්න",
"Delete account?": "ගිණුම මකාදමනවා ද?",
"History": "ඉතිහාසය",
"An alternative front-end to YouTube": "YouTube සඳහා විකල්ප ඉදිරිපස අන්තයක්",
"source": "මූලාශ්‍රය",
"Log in/register": "පුරන්න/ලියාපදිංචිවන්න",
"Password": "මුරපදය",
"Time (h:mm:ss):": "වේලාව (h:mm:ss):",
"Sign In": "පුරන්න",
"Preferences": "මනාපයන්",
"preferences_category_player": "වීඩියෝ ධාවක මනාපයන්",
"preferences_video_loop_label": "නැවත නැවතත්: ",
"preferences_autoplay_label": "ස්වයංක්‍රීය වාදනය: ",
"preferences_continue_label": "මීලඟට වාදනය කරන්න: ",
"preferences_continue_autoplay_label": "මීළඟ වීඩියෝව ස්වයංක්‍රීයව ධාවනය කරන්න: ",
"preferences_local_label": "Proxy වීඩියෝ: ",
"preferences_watch_history_label": "නැරඹුම් ඉතිහාසය සබල කරන්න: ",
"preferences_speed_label": "පෙරනිමි වේගය: ",
"preferences_quality_option_dash": "DASH (අනුවර්තිත ගුණත්වය)",
"preferences_quality_option_medium": "මධ්‍යස්ථ",
"preferences_quality_dash_label": "කැමති DASH වීඩියෝ ගුණත්වය: ",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_144p": "144p",
"preferences_volume_label": "ධාවකයේ හඬ: ",
"preferences_comments_label": "පෙරනිමි අදහස්: ",
"youtube": "YouTube",
"reddit": "Reddit",
"invidious": "Invidious",
"preferences_captions_label": "පෙරනිමි උපසිරැසි: ",
"preferences_related_videos_label": "අදාළ වීඩියෝ පෙන්වන්න: ",
"preferences_annotations_label": "අනුසටහන් පෙන්වන්න: ",
"preferences_vr_mode_label": "අන්තර්ක්‍රියාකාරී අංශක 360 වීඩියෝ (WebGL අවශ්‍යයි): ",
"preferences_region_label": "අන්තර්ගත රට: ",
"preferences_player_style_label": "වීඩියෝ ධාවක විලාසය: ",
"Dark mode: ": "අඳුරු මාදිලිය: ",
"preferences_dark_mode_label": "තේමාව: ",
"light": "ආලෝකමත්",
"generic_playlists_count": "{{count}} ධාවන ලැයිස්තුව",
"generic_playlists_count_plural": "ධාවන ලැයිස්තු {{count}}",
"LIVE": "සජීව",
"Subscribe": "දායක වන්න",
"View channel on YouTube": "YouTube හි නාලිකාව බලන්න",
"Next page": "ඊළඟ පිටුව",
"Previous page": "පෙර පිටුව",
"Clear watch history?": "නැරඹුම් ඉතිහාසය මකාදමනවා ද?",
"No": "නැත",
"Log in": "පුරන්න",
"New password": "නව මුරපදය",
"Import YouTube subscriptions": "YouTube/OPML දායකත්වයන් ආයාත කරන්න",
"Register": "ලියාපදිංචිවන්න",
"New passwords must match": "නව මුරපද ගැලපිය යුතුය",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML ලෙස දායකත්වයන් අපනයනය කරන්න (NewPipe සහ FreeTube සඳහා)",
"Export subscriptions as OPML": "දායකත්වයන් OPML ලෙස අපනයනය කරන්න",
"JavaScript license information": "JavaScript බලපත්‍ර තොරතුරු",
"User ID": "පරිශීලක කේතය",
"Text CAPTCHA": "CAPTCHA පෙල",
"Image CAPTCHA": "CAPTCHA රූපය",
"E-mail": "විද්‍යුත් තැපෑල",
"preferences_quality_label": "කැමති වීඩියෝ ගුණත්වය: ",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_auto": "ස්වයංක්‍රීය",
"preferences_quality_option_small": "කුඩා",
"preferences_quality_dash_option_best": "උසස්",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_240p": "240p",
"preferences_extend_desc_label": "වීඩියෝ විස්තරය ස්වයංක්‍රීයව දිගහරින්න: ",
"preferences_category_visual": "දෘශ්‍ය මනාපයන්",
"dark": "අඳුරු",
"preferences_category_misc": "විවිධ මනාප",
"preferences_category_subscription": "දායකත්ව මනාප",
"Redirect homepage to feed: ": "මුල් පිටුව පෝෂණය වෙත හරවා යවන්න: ",
"preferences_max_results_label": "සංග්‍රහයේ පෙන්වන වීඩියෝ ගණන: ",
"preferences_sort_label": "වීඩියෝ වර්ග කරන්න: ",
"alphabetically": "අකාරාදී ලෙස",
"alphabetically - reverse": "අකාරාදී - ආපසු",
"channel name": "නාලිකාවේ නම",
"Only show latest video from channel: ": "නාලිකාවේ නවතම වීඩියෝව පමණක් පෙන්වන්න: ",
"preferences_unseen_only_label": "නොබැලූ පමණක් පෙන්වන්න: ",
"Enable web notifications": "වෙබ් දැනුම්දීම් සබල කරන්න",
"Import/export data": "දත්ත ආනයනය / අපනයනය",
"Change password": "මුරපදය වෙනස් කරන්න",
"Manage subscriptions": "දායකත්ව කළමනාකරණය",
"Manage tokens": "ටෝකන කළමනාකරණය",
"Watch history": "නැරඹුම් ඉතිහාසය",
"Save preferences": "මනාප සුරකින්න",
"Token": "ටෝකනය",
"View privacy policy.": "රහස්‍යතා ප්‍රතිපත්තිය බලන්න.",
"Only show latest unwatched video from channel: ": "නාලිකාවේ නවතම නැරඹන නොලද වීඩියෝව පමණක් පෙන්වන්න: ",
"preferences_category_data": "දත්ත මනාප",
"Clear watch history": "නැරඹුම් ඉතිහාසය මකාදැමීම",
"Subscriptions": "දායකත්ව"
}

@ -12,20 +12,21 @@
"Clear watch history?": "Vymazať históriu sledovania?", "Clear watch history?": "Vymazať históriu sledovania?",
"New password": "Nové heslo", "New password": "Nové heslo",
"New passwords must match": "Nové heslá sa musia zhodovať", "New passwords must match": "Nové heslá sa musia zhodovať",
"Cannot change password for Google accounts": "Heslo pre účty Google sa nedá zmeniť",
"Authorize token?": "Autorizovať token?", "Authorize token?": "Autorizovať token?",
"Yes": "Áno", "Yes": "Áno",
"No": "Nie", "No": "Nie",
"Import and Export Data": "Import a Export údajov", "Import and Export Data": "Import a Export údajov",
"Import": "Import", "Import": "Import",
"Import Invidious data": "Importovať JSON údaje Invidious", "Import Invidious data": "Importovať údaje Invidious",
"Import YouTube subscriptions": "Importovať odbery YouTube/OPML", "Import YouTube subscriptions": "Importovať odbery YouTube",
"Import FreeTube subscriptions (.db)": "Importovať odbery FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Importovať odbery FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Importovať odbery NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importovať odbery NewPipe (.json)",
"Import NewPipe data (.zip)": "Importovať údaje NewPipe (.zip)", "Import NewPipe data (.zip)": "Importovať údaje NewPipe (.zip)",
"Export": "Export", "Export": "Export",
"Export subscriptions as OPML": "Exportovať odbery ako OPML", "Export subscriptions as OPML": "Exportovať odbery ako OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportovať odbery ako OPML (pre NewPipe a FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exportovať odbery ako OPML (pre NewPipe a FreeTube)",
"Export data as JSON": "Exportovať údaje Invidious ako JSON", "Export data as JSON": "Export údajov ako JSON",
"Delete account?": "Zrušiť účet?", "Delete account?": "Zrušiť účet?",
"History": "História", "History": "História",
"An alternative front-end to YouTube": "Alternatívny front-end pre YouTube", "An alternative front-end to YouTube": "Alternatívny front-end pre YouTube",
@ -33,6 +34,7 @@
"source": "zdroj", "source": "zdroj",
"Log in": "Prihlásiť sa", "Log in": "Prihlásiť sa",
"Log in/register": "Prihlásiť sa/Registrovať", "Log in/register": "Prihlásiť sa/Registrovať",
"Log in with Google": "Prihlásiť sa pomocou účtu Google",
"User ID": "ID používateľa", "User ID": "ID používateľa",
"Password": "Heslo", "Password": "Heslo",
"Time (h:mm:ss):": "Čas (h:mm:ss):", "Time (h:mm:ss):": "Čas (h:mm:ss):",
@ -41,6 +43,7 @@
"Sign In": "Prihlásiť sa", "Sign In": "Prihlásiť sa",
"Register": "Registrovať", "Register": "Registrovať",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Overovací kód Google",
"Preferences": "Nastavenia", "Preferences": "Nastavenia",
"preferences_category_player": "Nastavenia prehrávača", "preferences_category_player": "Nastavenia prehrávača",
"preferences_video_loop_label": "Vždy opakovať: ", "preferences_video_loop_label": "Vždy opakovať: ",
@ -81,23 +84,5 @@
"preferences_unseen_only_label": "Zobraziť iba neprehrané: ", "preferences_unseen_only_label": "Zobraziť iba neprehrané: ",
"preferences_notifications_only_label": "Zobraziť iba upozornenia (ak existujú): ", "preferences_notifications_only_label": "Zobraziť iba upozornenia (ak existujú): ",
"Enable web notifications": "Povoliť webové upozornenia", "Enable web notifications": "Povoliť webové upozornenia",
"`x` uploaded a video": "`x` nahral(a) video", "`x` uploaded a video": "`x` nahral(a) video"
"generic_views_count_0": "{{count}} zhliadnutie",
"generic_views_count_1": "{{count}} zhliadnutia",
"generic_views_count_2": "{{count}} zhliadnutí",
"generic_subscribers_count_0": "{{count}} odberateľ",
"generic_subscribers_count_1": "{{count}} odberatelia",
"generic_subscribers_count_2": "{{count}} odberateľov",
"Shared `x` ago": "Zverejnené pred `x`",
"generic_playlists_count_0": "{{count}} playlist",
"generic_playlists_count_1": "{{count}} playlisty",
"generic_playlists_count_2": "{{count}} playlistov",
"generic_videos_count_0": "{{count}} video",
"generic_videos_count_1": "{{count}} videá",
"generic_videos_count_2": "{{count}} videí",
"generic_subscriptions_count_0": "{{count}} odber",
"generic_subscriptions_count_1": "{{count}} odbery",
"generic_subscriptions_count_2": "{{count}} odberov",
"Authorize token for `x`?": "Autorizovať token pre `x`?",
"View playlist on YouTube": "Zobraziť playlist na YouTube"
} }

@ -1,511 +0,0 @@
{
"No": "Ne",
"Subscribe": "Naroči se",
"View playlist on YouTube": "Ogled seznama predvajanja v YouTubu",
"last": "zadnji",
"Next page": "Naslednja stran",
"Previous page": "Prejšnja stran",
"Clear watch history?": "Izbrisati zgodovino ogledov?",
"New password": "Novo geslo",
"New passwords must match": "Nova gesla se morajo ujemati",
"Authorize token?": "Naj odobrim žeton?",
"Yes": "Da",
"Import and Export Data": "Uvoz in izvoz podatkov",
"Import": "Uvozi",
"Import Invidious data": "Uvozi Invidious JSON podatke",
"Import YouTube subscriptions": "Uvozi YouTube/OPML naročnine",
"Import FreeTube subscriptions (.db)": "Uvozi FreeTube (.db) naročnine",
"Import NewPipe data (.zip)": "Uvozi NewPipe (.zip) podatke",
"Export": "Izvozi",
"Export subscriptions as OPML": "Izvozi naročnine kot OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Izvozi naročnine kot OPML (za NewPipe in FreeTube)",
"Log in": "Prijava",
"Log in/register": "Prijava/registracija",
"User ID": "ID uporabnika",
"Password": "Geslo",
"Time (h:mm:ss):": "Čas (h:mm:ss):",
"Text CAPTCHA": "Besedilo CAPTCHA",
"source": "izvorna koda",
"Image CAPTCHA": "Slika CAPTCHA",
"Sign In": "Prijavi se",
"Register": "Registriraj se",
"E-mail": "E-pošta",
"Preferences": "Nastavitve",
"preferences_video_loop_label": "Vedno v zanki: ",
"preferences_autoplay_label": "Samodejno predvajanje: ",
"preferences_continue_autoplay_label": "Samodejno predvajanje naslednjega videoposnetka: ",
"preferences_listen_label": "Privzeto poslušaj: ",
"preferences_local_label": "Proxy za videoposnetke: ",
"preferences_speed_label": "Privzeta hitrost: ",
"preferences_quality_label": "Prednostna kakovost videoposnetka: ",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_best": "najboljša",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240p",
"preferences_volume_label": "Glasnost predvajalnika: ",
"reddit": "Reddit",
"preferences_player_style_label": "Slog predvajalnika: ",
"dark": "temna",
"light": "svetla",
"preferences_thin_mode_label": "Tanki način: ",
"preferences_automatic_instance_redirect_label": "Samodejna preusmeritev (na redirect.invidious.io): ",
"preferences_annotations_subscribed_label": "Privzeto prikazati opombe za naročene kanale? ",
"Redirect homepage to feed: ": "Preusmeri domačo stran na vir: ",
"preferences_max_results_label": "Število videoposnetkov, prikazanih v viru: ",
"preferences_sort_label": "Razvrsti videoposnetke po: ",
"published": "datumu objave",
"published - reverse": "datumu objave - obratno",
"alphabetically": "abecednem vrstnem redu",
"alphabetically - reverse": "po abecednem vrstnem redu - obratno",
"channel name": "imenu kanala",
"channel name - reverse": "imenu kanala - obratno",
"Only show latest video from channel: ": "Pokaži samo najnovejši videoposnetek iz kanala: ",
"Only show latest unwatched video from channel: ": "Pokaži samo najnovejši še neogledani videoposnetek iz kanala: ",
"preferences_unseen_only_label": "Pokaži samo neogledane: ",
"preferences_notifications_only_label": "Pokaži samo obvestila (če obstajajo): ",
"preferences_category_data": "Nastavitve podatkov",
"Clear watch history": "Počisti zgodovino ogledov",
"Import/export data": "Uvoz/izvoz podatkov",
"Change password": "Spremeni geslo",
"Watch history": "Oglej si zgodovino",
"Delete account": "Izbriši račun",
"preferences_category_admin": "Skrbniške nastavitve",
"preferences_default_home_label": "Privzeta domača stran: ",
"preferences_feed_menu_label": "Meni vira: ",
"Top enabled: ": "Vrh omogočen: ",
"CAPTCHA enabled: ": "CAPTCHA omogočeni: ",
"Login enabled: ": "Prijava je omogočena: ",
"Registration enabled: ": "Registracija je omogočena: ",
"Token manager": "Upravitelj žetonov",
"Token": "Žeton",
"tokens_count_0": "{{count}} žeton",
"tokens_count_1": "{{count}} žetona",
"tokens_count_2": "{{count}} žetoni",
"tokens_count_3": "{{count}} žetonov",
"Import/export": "Uvoz/izvoz",
"unsubscribe": "odjava",
"revoke": "prekliči",
"search": "iskanje",
"Log out": "Odjava",
"Released under the AGPLv3 on Github.": "Objavljeno pod licenco AGPLv3 na GitHubu.",
"Trending": "Trendi",
"Private": "Zasebno",
"View all playlists": "Oglej si vse sezname predvajanja",
"Updated `x` ago": "Posodobljeno pred `x`",
"Delete playlist `x`?": "Brisanje seznama predvajanja `x`?",
"Delete playlist": "Izbriši seznam predvajanja",
"Title": "Naslov",
"Playlist privacy": "Zasebnost seznama predvajanja",
"Editing playlist `x`": "Urejanje seznama predvajanja `x`",
"Show more": "Pokaži več",
"Switch Invidious Instance": "Preklopi Invidious instanco",
"search_message_change_filters_or_query": "Poskusi razširiti iskalno poizvedbo in/ali spremeniti filtre.",
"search_message_use_another_instance": " Lahko tudi <a href=\"`x`\">iščeš v drugi istanci</a>.",
"Wilson score: ": "Wilsonov rezultat: ",
"Engagement: ": "Sodelovanje: ",
"Blacklisted regions: ": "Regije na seznamu nedovoljenih: ",
"Shared `x`": "V skupni rabi od: `x`",
"Premieres `x`": "Premiere `x`",
"View YouTube comments": "Oglej si YouTube komentarje",
"View more comments on Reddit": "Prikaži več komentarjev na Reddit",
"View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "Poglej `x` komentar",
"": "Poglej `x` komentarjev"
},
"Password cannot be empty": "Geslo ne sme biti prazno",
"`x` ago": "`x` nazaj",
"Load more": "Naloži več",
"comments_points_count_0": "{{count}} točka",
"comments_points_count_1": "{{count}} točki",
"comments_points_count_2": "{{count}} točke",
"comments_points_count_3": "{{count}} točk",
"Hidden field \"token\" is a required field": "Skrito polje »žeton« je zahtevano polje",
"Erroneous challenge": "Napačen izziv",
"English": "angleščina",
"English (United States)": "angleščina (Združene države)",
"Albanian": "albanščina",
"Amharic": "amharščina",
"Azerbaijani": "azerbajdžanščina",
"Bangla": "bengalščina",
"Belarusian": "beloruščina",
"Burmese": "birmanščina",
"Cebuano": "cebuanščina",
"Chinese (Hong Kong)": "kitajščina (Hongkong)",
"Chinese (Simplified)": "kitajščina (poenostavljena)",
"Chinese (Taiwan)": "kitajščina (Tajvan)",
"Corsican": "korzijščina",
"Croatian": "hrvaščina",
"Danish": "danščina",
"Dutch": "nizozemščina",
"Estonian": "estonščina",
"Filipino": "filipinščina",
"Finnish": "finščina",
"French": "francoščina",
"French (auto-generated)": "francoščina (samodejno ustvarjeno)",
"Georgian": "gruzinščina",
"German": "nemščina",
"Greek": "grščina",
"Gujarati": "gudžaratščina",
"Haitian Creole": "haitijska kreolščina",
"Hausa": "havščina",
"Hawaiian": "havajščina",
"Hmong": "hmonščina",
"Hungarian": "madžarščina",
"Icelandic": "islandščina",
"Igbo": "igbo",
"Interlingue": "interlingua",
"Italian (auto-generated)": "italijanščina (samodejno ustvarjeno)",
"Japanese": "japonščina",
"Japanese (auto-generated)": "japonščina (samodejno ustvarjeno)",
"Khmer": "kmerščina",
"Korean": "korejščina",
"Korean (auto-generated)": "korejščina (samodejno ustvarjeno)",
"Kurdish": "kurdščina",
"Kannada": "kanadejščina",
"Latvian": "latvijščina",
"Lithuanian": "litovščina",
"Luxembourgish": "luksemburščina",
"Macedonian": "makedonščina",
"Malagasy": "malgaščina",
"Malay": "malajščina",
"Nepali": "nepalščina",
"Norwegian Bokmål": "norveščina bokmal",
"Nyanja": "njanščina",
"Punjabi": "pandžabščina",
"Romanian": "romunščina",
"Russian": "ruščina",
"Samoan": "samoanščina",
"Scottish Gaelic": "škotska galščina",
"Shona": "šonaščina",
"Sundanese": "sudanščina",
"Thai": "tajščina",
"Turkish": "turščina",
"Turkish (auto-generated)": "turščina (samodejno ustvarjeno)",
"Ukrainian": "ukrajinščina",
"Urdu": "urdujščina",
"Telugu": "telugu",
"Vietnamese": "vietnamščina",
"Welsh": "valižanščina",
"Western Frisian": "zahodnofrizijščina",
"Yiddish": "jidiš",
"Yoruba": "joruba",
"Xhosa": "xhosa",
"generic_count_years_0": "{{count}} letom",
"generic_count_years_1": "{{count}} leti",
"generic_count_years_2": "{{count}} leti",
"generic_count_years_3": "{{count}} leti",
"generic_count_days_0": "{{count}} dnevom",
"generic_count_days_1": "{{count}} dnevoma",
"generic_count_days_2": "{{count}} dnevi",
"generic_count_days_3": "{{count}} dnevi",
"generic_count_hours_0": "{{count}} uro",
"generic_count_hours_1": "{{count}} urami",
"generic_count_hours_2": "{{count}} urami",
"generic_count_hours_3": "{{count}} urami",
"generic_count_minutes_0": "{{count}} minuto",
"generic_count_minutes_1": "{{count}} minutami",
"generic_count_minutes_2": "{{count}} minutami",
"generic_count_minutes_3": "{{count}} minutami",
"Search": "Iskanje",
"Top": "Vrh",
"About": "O aplikaciji",
"%A %B %-d, %Y": "%A %-d %B %Y",
"Audio mode": "Avdio način",
"channel_tab_videos_label": "Videoposnetki",
"search_filters_date_label": "Datum nalaganja",
"search_filters_date_option_today": "Danes",
"search_filters_date_option_week": "Ta teden",
"search_filters_type_label": "Vrsta",
"search_filters_type_option_all": "Katerakoli vrsta",
"search_filters_type_option_playlist": "Seznami predvajanja",
"search_filters_features_option_subtitles": "Podnapisi/CC",
"search_filters_features_option_location": "Lokacija",
"footer_donate_page": "Prispevaj",
"footer_documentation": "Dokumentacija",
"footer_original_source_code": "Izvirna izvorna koda",
"none": "ni",
"videoinfo_started_streaming_x_ago": "Začetek pretakanja `x` nazaj",
"videoinfo_watch_on_youTube": "Oglej si v YouTubu",
"user_saved_playlists": "`x` shranjenih seznamov predvajanja",
"Video unavailable": "Video ni na voljo",
"preferences_save_player_pos_label": "Shrani položaj predvajanja: ",
"crash_page_you_found_a_bug": "Videti je, da si v Invidiousu našel hrošča!",
"crash_page_read_the_faq": "prebral/a <a href=\"`x`\">Pogosto zastavljena vprašanja (FAQ)</a>",
"generic_videos_count_0": "{{count}} video",
"generic_videos_count_1": "{{count}} videa",
"generic_videos_count_2": "{{count}} videi",
"generic_videos_count_3": "{{count}} videov",
"generic_views_count_0": "Ogledov: {{count}}",
"generic_views_count_1": "Ogledov: {{count}}",
"generic_views_count_2": "Ogledov: {{count}}",
"generic_views_count_3": "Ogledov: {{count}}",
"generic_playlists_count_0": "{{count}} seznam predvajanja",
"generic_playlists_count_1": "{{count}} seznama predvajanja",
"generic_playlists_count_2": "{{count}} seznami predvajanja",
"generic_playlists_count_3": "{{count}} seznamov predvajanja",
"generic_subscribers_count_0": "{{count}} naročnik",
"generic_subscribers_count_1": "{{count}} naročnika",
"generic_subscribers_count_2": "{{count}} naročniki",
"generic_subscribers_count_3": "{{count}} naročnikov",
"generic_subscriptions_count_0": "{{count}} naročnina",
"generic_subscriptions_count_1": "{{count}} naročnini",
"generic_subscriptions_count_2": "{{count}} naročnine",
"generic_subscriptions_count_3": "{{count}} naročnin",
"LIVE": "V ŽIVO",
"Shared `x` ago": "Deljeno pred `x`",
"View channel on YouTube": "Ogled kanala v YouTubu",
"newest": "najnovejši",
"Unsubscribe": "Odjavi se",
"Authorize token for `x`?": "Odobriti žeton za `x`?",
"Import NewPipe subscriptions (.json)": "Uvozi NewPipe (.json) naročnine",
"History": "Zgodovina",
"JavaScript license information": "Podatki o licenci JavaScript",
"oldest": "najstarejši",
"popular": "priljubljen",
"Export data as JSON": "Izvozi Invidious podatke kot JSON",
"Delete account?": "Izbrisati račun?",
"An alternative front-end to YouTube": "Alternativni vmesnik za YouTube",
"preferences_category_player": "Nastavitve predvajalnika",
"preferences_continue_label": "Privzeto predvajaj naslednjega: ",
"preferences_watch_history_label": "Omogoči zgodovino ogledov: ",
"preferences_quality_option_medium": "srednja",
"preferences_quality_option_dash": "DASH (prilagodljiva kakovost)",
"preferences_quality_option_small": "majhna",
"preferences_quality_dash_option_worst": "najslabša",
"preferences_quality_dash_label": "Prednostna kakovost videoposnetkov DASH: ",
"preferences_comments_label": "Privzeti komentarji: ",
"preferences_quality_dash_option_auto": "samodejna",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_144p": "144p",
"youtube": "YouTube",
"invidious": "Invidious",
"preferences_vr_mode_label": "Interaktivni videoposnetki na 360 stopinj (zahteva WebGL): ",
"preferences_captions_label": "Privzeti napisi: ",
"Fallback captions: ": "Pomožni napisi: ",
"preferences_extend_desc_label": "Samodejno razširi opis videoposnetka: ",
"preferences_related_videos_label": "Prikaži povezane videoposnetke: ",
"preferences_annotations_label": "Privzeto prikaži opombe: ",
"preferences_category_visual": "Vizualne nastavitve",
"preferences_region_label": "Država vsebine: ",
"Dark mode: ": "Temni način: ",
"preferences_dark_mode_label": "Tema: ",
"preferences_category_misc": "Različne nastavitve",
"preferences_category_subscription": "Nastavitve naročnine",
"Unlisted": "Nerazporejeno",
"Enable web notifications": "Omogoči spletna obvestila",
"`x` is live": "`x` je v živo",
"Manage subscriptions": "Upravljaj naročnine",
"Manage tokens": "Upravljaj žetone",
"Subscription manager": "Upravitelj naročnin",
"`x` uploaded a video": "`x` je naložil/a videoposnetek",
"preferences_show_nick_label": "Prikaži vzdevek na vrhu: ",
"search_message_no_results": "Ni zadetkov.",
"Save preferences": "Shrani nastavitve",
"Subscriptions": "Naročnine",
"Report statistics: ": "Poročilo o statistiki: ",
"subscriptions_unseen_notifs_count_0": "{{count}} neogledano obvestilo",
"subscriptions_unseen_notifs_count_1": "{{count}} neogledani obvestili",
"subscriptions_unseen_notifs_count_2": "{{count}} neogledana obvestila",
"subscriptions_unseen_notifs_count_3": "{{count}} neogledanih obvestil",
"View JavaScript license information.": "Oglej si informacije o licenci za JavaScript.",
"Show less": "Pokaži manj",
"Watch on YouTube": "Oglej si v YouTubu",
"Source available here.": "Izvorna koda na voljo tukaj.",
"License: ": "Licenca: ",
"View privacy policy.": "Oglej si pravilnik o zasebnosti.",
"Public": "Javno",
"Create playlist": "Ustvari seznam predvajanja",
"Hide annotations": "Skrij opombe",
"Show annotations": "Pokaži opombe",
"Genre: ": "Žanr: ",
"Family friendly? ": "Družinam prijazno? ",
"Whitelisted regions: ": "Regije na seznamu dovoljenih: ",
"Premieres in `x`": "Premiere v `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Živjo! Izgleda, da imaš izklopljene JavaScripte . Klikni tukaj, če si želiš ogledati komentarje, vendar vedi, da bo lahko nalaganje trajajo nekoliko dlje.",
"Show replies": "Pokaži odgovore",
"Erroneous CAPTCHA": "Napačna CAPTCHA",
"User ID is a required field": "ID uporabnika je obvezno polje",
"Password is a required field": "Geslo je obvezno polje",
"Wrong username or password": "Napačno uporabniško ime ali geslo",
"Password cannot be longer than 55 characters": "Geslo ne sme biti daljše od 55 znakov",
"channel:`x`": "kanal: `x`",
"Could not fetch comments": "Ni bilo mogoče pridobiti komentarjev",
"Could not pull trending pages.": "Ni bilo mogoče povleči trendovskih strani.",
"Please log in": "Prosim, prijavi se",
"Playlist does not exist.": "Seznam predvajanja ne obstaja.",
"Incorrect password": "Napačno geslo",
"View Reddit comments": "Oglej si komentarje na Redditu",
"This channel does not exist.": "Ta kanal ne obstaja.",
"Hide replies": "Skrij odgovore",
"Invidious Private Feed for `x`": "Invidious zasebni vir za `x`",
"Deleted or invalid channel": "Izbrisan ali neveljaven kanal",
"Empty playlist": "Prazen seznam predvajanja",
"No such user": "Ni tega uporabnika",
"Token is expired, please try again": "Žeton je potekel, poskusi znova",
"English (United Kingdom)": "angleščina (Združeno kraljestvo)",
"Wrong answer": "Napačen odgovor",
"CAPTCHA is a required field": "CAPTCHA je obvezno polje",
"Could not get channel info.": "Ni bilo mogoče dobiti informacij o kanalu.",
"comments_view_x_replies_0": "Poglej {{count}} odgovor",
"comments_view_x_replies_1": "Poglej {{count}} odgovora",
"comments_view_x_replies_2": "Poglej {{count}} odgovore",
"comments_view_x_replies_3": "Poglej {{count}} odgovorov",
"Could not create mix.": "Ni bilo mogoče ustvariti mixa.",
"Not a playlist.": "Ni seznam predvajanja.",
"Hidden field \"challenge\" is a required field": "Skrito polje »izziv« je obvezno polje",
"Erroneous token": "Napačen žeton",
"Afrikaans": "afrikanščina",
"Arabic": "arabščina",
"Armenian": "armenščina",
"English (auto-generated)": "angleščina (samodejno ustvarjeno)",
"Bulgarian": "bolgarščina",
"Catalan": "katalonščina",
"Cantonese (Hong Kong)": "kantonščina (Hongkong)",
"Chinese (Traditional)": "kitajščina (tradicionalna)",
"Basque": "baskovščina",
"Czech": "češčina",
"Bosnian": "bosanščina",
"Chinese": "kitajščina",
"Chinese (China)": "kitajščina (Kitajska)",
"Dutch (auto-generated)": "nizozemščina (samodejno ustvarjeno)",
"Esperanto": "esperanto",
"Galician": "galicijščina",
"German (auto-generated)": "nemščina (samodejno ustvarjeno)",
"Hebrew": "hebrejščina",
"Malayalam": "malajalamščina",
"Hindi": "hindijščina",
"Indonesian": "indonezijščina",
"Kazakh": "kazahstanščina",
"Indonesian (auto-generated)": "indonezijščina (samodejno generirano)",
"Irish": "irščina",
"Persian": "perzijščina",
"Slovak": "slovaščina",
"Italian": "italijanščina",
"Maori": "maorščina",
"Portuguese": "portugalščina",
"Javanese": "javanščina",
"Kyrgyz": "kirgiščina",
"Lao": "laoščina",
"Latin": "latinščina",
"Mongolian": "mongolščina",
"Portuguese (auto-generated)": "portugalščina (samodejno ustvarjeno)",
"Sindhi": "sindščina",
"Maltese": "malteščina",
"Marathi": "maratščina",
"Pashto": "paštu",
"Polish": "poljščina",
"Portuguese (Brazil)": "portugalščina (Brazilija)",
"Fallback comments: ": "Nadomestni komentarji: ",
"Gaming": "Igralništvo",
"Russian (auto-generated)": "ruščina (samodejno ustvarjeno)",
"Serbian": "srbščina",
"Sinhala": "singalščina",
"Slovenian": "slovenščina",
"Somali": "somalijščina",
"Spanish": "španščina",
"Southern Sotho": "južni sotho",
"Spanish (auto-generated)": "španščina (samodejno ustvarjeno)",
"Spanish (Mexico)": "španščina (Mehika)",
"Spanish (Latin America)": "španščina (Latinska Amerika)",
"Spanish (Spain)": "španščina (Španija)",
"Tajik": "tadžiščina",
"Tamil": "tamilščina",
"generic_count_weeks_0": "{{count}} tednom",
"generic_count_weeks_1": "{{count}} tedni",
"generic_count_weeks_2": "{{count}} tedni",
"generic_count_weeks_3": "{{count}} tedni",
"Swahili": "svahilščina",
"Swedish": "švedščina",
"Vietnamese (auto-generated)": "vietnamščina (samodejno ustvarjeno)",
"generic_count_months_0": "{{count}} mesecem",
"generic_count_months_1": "{{count}} meseci",
"generic_count_months_2": "{{count}} meseci",
"generic_count_months_3": "{{count}} meseci",
"Uzbek": "uzbeščina",
"Zulu": "zulujščina",
"generic_count_seconds_0": "{{count}} sekundo",
"generic_count_seconds_1": "{{count}} sekundami",
"generic_count_seconds_2": "{{count}} sekundami",
"generic_count_seconds_3": "{{count}} sekundami",
"Popular": "Priljubljeni",
"Music": "Glasba",
"Movies": "Filmi",
"YouTube comment permalink": "Stalna povezava za komentar na YouTubu",
"search_filters_title": "Filtri",
"preferences_locale_label": "Jezik: ",
"Rating: ": "Ocena: ",
"Default": "Privzeto",
"News": "Novice",
"Download as: ": "Prenesi kot: ",
"(edited)": "(urejeno)",
"View as playlist": "Poglej kot seznam predvajanja",
"Download": "Prenesi",
"permalink": "stalna povezava",
"`x` marked it with a ❤": "`x` ga je označil/a z ❤",
"channel_tab_community_label": "Skupnost",
"search_filters_features_option_three_sixty": "360°",
"Video mode": "Video način",
"search_filters_features_option_c_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D",
"Playlists": "Seznami predvajanja",
"search_filters_date_option_none": "Katerikoli datum",
"search_filters_date_option_month": "Ta mesec",
"search_filters_date_option_year": "Letos",
"search_filters_type_option_movie": "Film",
"search_filters_duration_option_long": "Dolg (> 20 minut)",
"search_filters_features_label": "Lastnosti",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_hdr": "HDR",
"next_steps_error_message_refresh": "Osveži",
"search_filters_date_option_hour": "Zadnja ura",
"search_filters_features_option_purchased": "Kupljeno",
"search_filters_sort_label": "Razvrsti po",
"search_filters_sort_option_views": "številu ogledov",
"Current version: ": "Trenutna različica: ",
"search_filters_features_option_live": "V živo",
"search_filters_features_option_hd": "HD",
"search_filters_type_option_channel": "Kanal",
"search_filters_type_option_show": "Pokaži",
"search_filters_duration_label": "Trajanje",
"search_filters_duration_option_none": "Poljubno trajanje",
"search_filters_duration_option_short": "Kratek (< 4 minute)",
"search_filters_duration_option_medium": "Srednji (4 - 20 minut)",
"search_filters_features_option_vr180": "VR180",
"search_filters_sort_option_date": "datumu nalaganja",
"search_filters_type_option_video": "Videoposnetek",
"search_filters_sort_option_relevance": "ustreznosti",
"search_filters_sort_option_rating": "oceni",
"search_filters_apply_button": "Uporabi izbrane filtre",
"next_steps_error_message": "Po tem moraš poskusiti: ",
"next_steps_error_message_go_to_youtube": "Pojdi na YouTube",
"footer_source_code": "Izvorna koda",
"footer_modfied_source_code": "Spremenjena izvorna koda",
"user_created_playlists": "`x` ustvarjenih seznamov predvajanja",
"adminprefs_modified_source_code_url_label": "URL do shrambe spremenjene izvorne kode",
"videoinfo_youTube_embed_link": "Vdelaj",
"videoinfo_invidious_embed_link": "Povezava za vdelavo",
"crash_page_switch_instance": "poskušal/a <a href=\"`x`\">uporabiti drugo instanco</a>",
"download_subtitles": "Podnapisi - `x` (.vtt)",
"crash_page_refresh": "poskušal/a <a href=\"`x`\">osvežiti stran</a>",
"crash_page_before_reporting": "Preden prijaviš napako, se prepričaj, da si:",
"crash_page_search_issue": "preiskal/a <a href=\"`x`\">obstoječe težave na GitHubu</a>",
"crash_page_report_issue": "Če nič od navedenega ni pomagalo, prosim <a href=\"`x`\">odpri novo težavo v GitHubu</a> (po možnosti v angleščini) in v svoje sporočilo vključi naslednje besedilo (tega besedila NE prevajaj):",
"Popular enabled: ": "Priljubljeni omogočeni: ",
"error_video_not_in_playlist": "Zahtevani videoposnetek ne obstaja na tem seznamu predvajanja. <a href=\"`x`\">Klikni tukaj za domačo stran seznama predvajanja.</a>",
"channel_tab_playlists_label": "Seznami predvajanja",
"channel_tab_shorts_label": "Kratki videoposnetki",
"channel_tab_channels_label": "Kanali",
"channel_tab_streams_label": "Prenosi v živo",
"Artist: ": "Umetnik/ca: ",
"Music in this video": "Glasba v tem videoposnetku",
"Album: ": "Album: ",
"Song: ": "Pesem: ",
"Standard YouTube license": "Standardna licenca YouTube",
"Channel Sponsor": "Sponzor kanala",
"Download is disabled": "Prenos je onemogočen"
}

@ -26,19 +26,21 @@
"Tamil": "Tamilisht", "Tamil": "Tamilisht",
"Telugu": "Telugu", "Telugu": "Telugu",
"Vietnamese": "Vietnamisht", "Vietnamese": "Vietnamisht",
"search_filters_features_option_c_commons": "Creative Commons", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "Drejtpërsëdrejti", "live": "Drejtpërsëdrejti",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Vendndodhja", "location": "Vendndodhja",
"videoinfo_watch_on_youTube": "Shiheni në YouTube", "videoinfo_watch_on_youTube": "Shiheni në YouTube",
"videoinfo_youTube_embed_link": "Trupëzojeni", "videoinfo_youTube_embed_link": "Trupëzojeni",
"videoinfo_invidious_embed_link": "Lidhje Trupëzimi", "videoinfo_invidious_embed_link": "Lidhje Trupëzimi",
"oldest": "më të vjetrat", "oldest": "më të vjetrat",
"Cannot change password for Google accounts": "Smund të ndryshojë fjalëkalimin për llogari Google",
"New passwords must match": "Fjalëkalimet e rinj duhet të përputhen me njëri-tjetrin", "New passwords must match": "Fjalëkalimet e rinj duhet të përputhen me njëri-tjetrin",
"Authorize token?": "Të autorizohet token-i?", "Authorize token?": "Të autorizohet token-i?",
"Authorize token for `x`?": "Të autorizohet token-i për `x`?", "Authorize token for `x`?": "Të autorizohet token-i për `x`?",
"Log in/register": "Hyni/regjistrohuni", "Log in/register": "Hyni/regjistrohuni",
"Log in with Google": "Hyni me Google",
"User ID": "ID Përdoruesi", "User ID": "ID Përdoruesi",
"Password": "Fjalëkalim", "Password": "Fjalëkalim",
"Time (h:mm:ss):": "Kohë (h:mm:ss):", "Time (h:mm:ss):": "Kohë (h:mm:ss):",
@ -125,7 +127,7 @@
"Subscriptions": "Pajtime", "Subscriptions": "Pajtime",
"search": "kërko", "search": "kërko",
"Log out": "Dilni", "Log out": "Dilni",
"Released under the AGPLv3 on Github.": "Hedhur në qarkullim në GitHub sipas licencës AGPLv3.", "Released under the AGPLv3 on Github.": "Hedhur në qarkullim në Github sipas licencës AGPLv3.",
"Source available here.": "Burimi i passhëm që këtu.", "Source available here.": "Burimi i passhëm që këtu.",
"View JavaScript license information.": "Shihni hollësi licence JavaScript.", "View JavaScript license information.": "Shihni hollësi licence JavaScript.",
"View privacy policy.": "Shihni rregulla privatësie.", "View privacy policy.": "Shihni rregulla privatësie.",
@ -145,6 +147,7 @@
"Show less": "Shfaq më pak", "Show less": "Shfaq më pak",
"Watch on YouTube": "Shiheni në YouTube", "Watch on YouTube": "Shiheni në YouTube",
"Switch Invidious Instance": "Ndërroni Instancë Invidious", "Switch Invidious Instance": "Ndërroni Instancë Invidious",
"Broken? Try another Invidious Instance": "E prishur? Provoni një tjetër Instancë Invidious",
"Hide annotations": "Fshihi shënimet", "Hide annotations": "Fshihi shënimet",
"Show annotations": "Shfaq shënime", "Show annotations": "Shfaq shënime",
"License: ": "Licencë: ", "License: ": "Licencë: ",
@ -154,14 +157,19 @@
"Whitelisted regions: ": "Rajone të lejuara: ", "Whitelisted regions: ": "Rajone të lejuara: ",
"Premieres `x`": "Premiera `x`", "Premieres `x`": "Premiera `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Njatjeta! Duket sikur keni JavaScript-in të çaktivizuar. Klikoni këtu që të shihni komentet, mbani parasysh se mund të duhet pak më tepër kohë që të ngarkohen.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Njatjeta! Duket sikur keni JavaScript-in të çaktivizuar. Klikoni këtu që të shihni komentet, mbani parasysh se mund të duhet pak më tepër kohë që të ngarkohen.",
"Quota exceeded, try again in a few hours": "Janë tejkaluar kuotat, riprovoni pas pak orësh",
"Blacklisted regions: ": "Rajone të palejuara: ", "Blacklisted regions: ": "Rajone të palejuara: ",
"Premieres in `x`": "Premiera në `x`", "Premieres in `x`": "Premiera në `x`",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Sarrihet të bëhet hyrja, sigurohuni se mirëfilltësimi dyfaktorësh (me Mirëfilltësues apo SMS) është i aktivizuar.",
"Wrong answer": "Përgjigje e gabuar", "Wrong answer": "Përgjigje e gabuar",
"Invalid TFA code": "Kod MDF i pavlefshëm",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Dështoi hyrja. Kjo mund të vijë ngaqë për llogarinë tuaj sështë aktivizuar mirëfilltësimi dyfaktorësh.",
"Erroneous CAPTCHA": "CAPTCHA e gabuar", "Erroneous CAPTCHA": "CAPTCHA e gabuar",
"CAPTCHA is a required field": "CAPTCHA është fushë e domosdoshme", "CAPTCHA is a required field": "CAPTCHA është fushë e domosdoshme",
"User ID is a required field": "ID-ja e përdoruesit është fushë e domosdoshme", "User ID is a required field": "ID-ja e përdoruesit është fushë e domosdoshme",
"Password is a required field": "Fusha e fjalëkalimit është e domosdoshme", "Password is a required field": "Fusha e fjalëkalimit është e domosdoshme",
"Wrong username or password": "Emër përdoruesi ose fjalëkalim i gabuar", "Wrong username or password": "Emër përdoruesi ose fjalëkalim i gabuar",
"Please sign in using 'Log in with Google'": "Ju lutemi, bëni hyrjen duke përdorur “Bëni hyrjen me Google”",
"Password cannot be empty": "Fjalëkalimi smund të jetë i zbrazët", "Password cannot be empty": "Fjalëkalimi smund të jetë i zbrazët",
"Password cannot be longer than 55 characters": "Fjalëkalimi smund të jetë më i gjatë se 55 shenja", "Password cannot be longer than 55 characters": "Fjalëkalimi smund të jetë më i gjatë se 55 shenja",
"Please log in": "Ju lutemi, bëni hyrjen", "Please log in": "Ju lutemi, bëni hyrjen",
@ -252,34 +260,34 @@
"YouTube comment permalink": "Permalidhje komenti YouTube", "YouTube comment permalink": "Permalidhje komenti YouTube",
"Audio mode": "Mënyrë për audion", "Audio mode": "Mënyrë për audion",
"Playlists": "Luajlista", "Playlists": "Luajlista",
"channel_tab_community_label": "Bashkësi", "Community": "Bashkësi",
"search_filters_sort_option_relevance": "Rëndësi", "relevance": "Rëndësi",
"Video mode": "Mënyrë video", "Video mode": "Mënyrë video",
"channel_tab_videos_label": "Video", "Videos": "Video",
"search_filters_sort_option_rating": "Vlerësim", "rating": "Vlerësim",
"search_filters_sort_option_date": "Datë ngarkimi", "date": "Datë ngarkimi",
"search_filters_sort_option_views": "Numër parjesh", "views": "Numër parjesh",
"search_filters_type_label": "Lloj", "content_type": "Lloj",
"search_filters_duration_label": "Kohëzgjatje", "duration": "Kohëzgjatje",
"search_filters_features_label": "Veçori", "features": "Veçori",
"search_filters_sort_label": "Renditi Sipas", "sort": "Renditi Sipas",
"search_filters_date_option_hour": "Orën e Fundit", "hour": "Orën e Fundit",
"search_filters_date_option_today": "Sot", "today": "Sot",
"search_filters_duration_option_long": "E gjatë (> 20 minuta)", "long": "E gjatë (> 20 minuta)",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Titra/CC", "subtitles": "Titra/CC",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"search_filters_date_option_week": "Këtë javë", "week": "Këtë javë",
"search_filters_date_option_month": "Këtë muaj", "month": "Këtë muaj",
"search_filters_date_option_year": "Këtë vit", "year": "Këtë vit",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"search_filters_type_option_playlist": "Luajlistë", "playlist": "Luajlistë",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_type_option_show": "Shfaqe", "show": "Shfaqe",
"search_filters_duration_option_short": "E shkurtër (< 4 minuta)", "short": "E shkurtër (< 4 minuta)",
"search_filters_features_option_purchased": "Të blera", "purchased": "Të blera",
"footer_modfied_source_code": "Kod burim i ndryshuar", "footer_modfied_source_code": "Kod Burim i ndryshuar",
"adminprefs_modified_source_code_url_label": "URL e depos së ndryshuar të kodit burim", "adminprefs_modified_source_code_url_label": "URL e depos së ndryshuar të kodit burim",
"none": "asnjë", "none": "asnjë",
"videoinfo_started_streaming_x_ago": "Filloi transmetimin `x` më parë", "videoinfo_started_streaming_x_ago": "Filloi transmetimin `x` më parë",
@ -296,6 +304,7 @@
"Previous page": "Faqja e mëparshme", "Previous page": "Faqja e mëparshme",
"Clear watch history?": "Të spastrohet historiku i parjeve?", "Clear watch history?": "Të spastrohet historiku i parjeve?",
"New password": "Fjalëkalim i ri", "New password": "Fjalëkalim i ri",
"Google verification code": "Kod verifikimi Google",
"preferences_related_videos_label": "Shfaq video të afërta: ", "preferences_related_videos_label": "Shfaq video të afërta: ",
"preferences_annotations_label": "Si parazgjedhje, shfaqi shënimet: ", "preferences_annotations_label": "Si parazgjedhje, shfaqi shënimet: ",
"preferences_show_nick_label": "Shfaqe nofkën në krye: ", "preferences_show_nick_label": "Shfaqe nofkën në krye: ",
@ -361,7 +370,8 @@
"Mongolian": "Mongolisht", "Mongolian": "Mongolisht",
"Nepali": "Nepaleze", "Nepali": "Nepaleze",
"Norwegian Bokmål": "Norvegjishte Bokmål", "Norwegian Bokmål": "Norvegjishte Bokmål",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"filter": "Filtroji",
"Current version: ": "Versioni i tanishëm: ", "Current version: ": "Versioni i tanishëm: ",
"next_steps_error_message": "Pas të cilës duhet të provoni të: ", "next_steps_error_message": "Pas të cilës duhet të provoni të: ",
"next_steps_error_message_refresh": "Rifreskoje", "next_steps_error_message_refresh": "Rifreskoje",
@ -427,7 +437,7 @@
"Spanish (Spain)": "Spanjisht (Spanjë)", "Spanish (Spain)": "Spanjisht (Spanjë)",
"Turkish (auto-generated)": "Turqisht (të prodhuara automatikisht)", "Turkish (auto-generated)": "Turqisht (të prodhuara automatikisht)",
"Vietnamese (auto-generated)": "Vietnamisht (të prodhuara automatikisht)", "Vietnamese (auto-generated)": "Vietnamisht (të prodhuara automatikisht)",
"crash_page_search_issue": "kërkuar për <a href=\"`x`\">çështje ekzistuese në GitHub</a>", "crash_page_search_issue": "kërkuar për <a href=\"`x`\">çështje ekzistuese në Github</a>",
"crash_page_report_issue": "Nëse asnjë nga sa më sipër sndihmoi, ju lutemi, <a href=\"`x`\">hapni një çështje në GitHub</a> (mundësisht në anglisht) dhe përfshini në mesazhin tuaj tekstin vijues (MOS e përktheni këtë tekst):", "crash_page_report_issue": "Nëse asnjë nga sa më sipër sndihmoi, ju lutemi, <a href=\"`x`\">hapni një çështje në GitHub</a> (mundësisht në anglisht) dhe përfshini në mesazhin tuaj tekstin vijues (MOS e përktheni këtë tekst):",
"generic_subscriptions_count": "{{count}} pajtim", "generic_subscriptions_count": "{{count}} pajtim",
"generic_subscriptions_count_plural": "{{count}} pajtime", "generic_subscriptions_count_plural": "{{count}} pajtime",
@ -438,29 +448,5 @@
"Import YouTube subscriptions": "Importoni pajtime YouTube/OPML", "Import YouTube subscriptions": "Importoni pajtime YouTube/OPML",
"Export data as JSON": "Eksportoji të dhënat Invidious si JSON", "Export data as JSON": "Eksportoji të dhënat Invidious si JSON",
"preferences_vr_mode_label": "Video me ndërveprim 360 gradë (lyp WebGL): ", "preferences_vr_mode_label": "Video me ndërveprim 360 gradë (lyp WebGL): ",
"Shared `x`": "Ndarë me të tjerë më `x`", "Shared `x`": "Ndau me të tjerë `x`"
"search_filters_title": "Filtra",
"Popular enabled: ": "Me populloret të aktivizuara: ",
"error_video_not_in_playlist": "Videoja e kërkuar sekziston në këtë luajlistë. <a href=\"`x`\">Klikoni këtu për faqen hyrëse të luajlistës.</a>",
"search_message_use_another_instance": " Mundeni edhe të <a href=\"`x`\">kërkoni në një instancë tjetër</a>.",
"search_filters_date_label": "Datë ngarkimi",
"preferences_watch_history_label": "Aktivizo historik parjesh: ",
"Top enabled: ": "Me kryesueset të aktivizuara: ",
"preferences_video_loop_label": "Përsërite gjithmonë: ",
"search_message_no_results": "Su gjetën përfundime.",
"Could not pull trending pages.": "Su morën dot faqet në modë.",
"search_filters_date_option_none": "Çfarëdo date",
"search_message_change_filters_or_query": "Provoni të zgjeroni kërkesën tuaj të kërkimit dhe/ose të ndryshoni filtrat.",
"search_filters_type_option_all": "Çfarëdo lloji",
"search_filters_duration_option_none": "Çfarëdo kohëzgjatjeje",
"search_filters_duration_option_medium": "Mesatare (4 - 20 minuta)",
"search_filters_features_option_vr180": "VR180",
"search_filters_apply_button": "Apliko filtrat e përzgjedhur",
"channel_tab_playlists_label": "Luajlista",
"Artist: ": "Artist: ",
"Album: ": "Album: ",
"channel_tab_channels_label": "Kanale",
"Music in this video": "Muzikë në këtë video",
"channel_tab_shorts_label": "Të shkurtra",
"channel_tab_streams_label": "Transmetime të drejtpërdrejta"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Izbrisati povest pregledanja?", "Clear watch history?": "Izbrisati povest pregledanja?",
"New password": "Nova lozinka", "New password": "Nova lozinka",
"New passwords must match": "Nove lozinke moraju biti istovetne", "New passwords must match": "Nove lozinke moraju biti istovetne",
"Cannot change password for Google accounts": "Nije moguće promeniti lozinku za Google naloge",
"Authorize token?": "Ovlasti žeton?", "Authorize token?": "Ovlasti žeton?",
"Authorize token for `x`?": "Ovlasti žeton za `x`?", "Authorize token for `x`?": "Ovlasti žeton za `x`?",
"Yes": "Da", "Yes": "Da",
@ -36,6 +37,7 @@
"source": "izvor", "source": "izvor",
"Log in": "Prijavi se", "Log in": "Prijavi se",
"Log in/register": "Prijavi se/Otvori nalog", "Log in/register": "Prijavi se/Otvori nalog",
"Log in with Google": "Prijavi se pomoću Google-a",
"User ID": "Korisnički ID", "User ID": "Korisnički ID",
"Password": "Lozinka", "Password": "Lozinka",
"Time (h:mm:ss):": "Vreme (č:mm:ss):", "Time (h:mm:ss):": "Vreme (č:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Prijava", "Sign In": "Prijava",
"Register": "Otvori nalog", "Register": "Otvori nalog",
"E-mail": "E-pošta", "E-mail": "E-pošta",
"Google verification code": "Google-ova overna koda",
"Preferences": "Podešavanja", "Preferences": "Podešavanja",
"preferences_category_player": "Podešavanja reproduktora", "preferences_category_player": "Podešavanja reproduktora",
"preferences_video_loop_label": "Uvek ponavljaj: ", "preferences_video_loop_label": "Uvek ponavljaj: ",
@ -54,11 +57,13 @@
"preferences_local_label": "Prikaz video zapisa preko posrednika: ", "preferences_local_label": "Prikaz video zapisa preko posrednika: ",
"Playlist privacy": "Podešavanja privatnosti plej liste", "Playlist privacy": "Podešavanja privatnosti plej liste",
"Editing playlist `x`": "Izmena plej liste `x`", "Editing playlist `x`": "Izmena plej liste `x`",
"Please sign in using 'Log in with Google'": "Molimo Vas da se prijavite pomoću 'Log in with Google'",
"Playlist does not exist.": "Nepostojeća plej lista.", "Playlist does not exist.": "Nepostojeća plej lista.",
"Erroneous challenge": "Pogrešan izazov", "Erroneous challenge": "Pogrešan izazov",
"Maltese": "Malteški", "Maltese": "Malteški",
"Download": "Preuzmi", "Download": "Preuzmi",
"Download as: ": "Preuzmi kao: ", "Download as: ": "Preuzmi kao: ",
"Quota exceeded, try again in a few hours": "Kvota je premašena, molimo vas da pokušate ponovo za par sati",
"Bangla": "Bangla/Bengalski", "Bangla": "Bangla/Bengalski",
"preferences_quality_dash_label": "Preferirani kvalitet DASH video formata: ", "preferences_quality_dash_label": "Preferirani kvalitet DASH video formata: ",
"Token manager": "Upravljanje žetonima", "Token manager": "Upravljanje žetonima",
@ -126,25 +131,26 @@
"YouTube comment permalink": "YouTube komentar trajna veza", "YouTube comment permalink": "YouTube komentar trajna veza",
"Audio mode": "Audio mod", "Audio mode": "Audio mod",
"Playlists": "Plej liste", "Playlists": "Plej liste",
"search_filters_sort_option_relevance": "Relevantnost", "relevance": "Relevantnost",
"search_filters_sort_option_rating": "Ocene", "rating": "Ocene",
"search_filters_sort_option_date": "Datum otpremanja", "date": "Datum otpremanja",
"search_filters_sort_option_views": "Broj pregleda", "views": "Broj pregleda",
"`x` marked it with a ❤": "`x` je označio/la ovo sa ❤", "`x` marked it with a ❤": "`x` je označio/la ovo sa ❤",
"search_filters_duration_label": "Trajanje", "duration": "Trajanje",
"search_filters_features_label": "Karakteristike", "features": "Karakteristike",
"search_filters_date_option_hour": "Poslednji sat", "hour": "Poslednji sat",
"search_filters_date_option_week": "Ove sedmice", "week": "Ove sedmice",
"search_filters_date_option_month": "Ovaj mesec", "month": "Ovaj mesec",
"search_filters_date_option_year": "Ove godine", "year": "Ove godine",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_playlist": "Plej lista", "playlist": "Plej lista",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_duration_option_long": "Dugo (> 20 minuta)", "long": "Dugo (> 20 minuta)",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_c_commons": "Creative Commons (Licenca)", "creative_commons": "Creative Commons (Licenca)",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_hdr": "Video Visoke Rezolucije", "hdr": "Video Visoke Rezolucije",
"filter": "Filter",
"next_steps_error_message": "Nakon čega bi trebali probati: ", "next_steps_error_message": "Nakon čega bi trebali probati: ",
"next_steps_error_message_go_to_youtube": "Idi na YouTube", "next_steps_error_message_go_to_youtube": "Idi na YouTube",
"footer_documentation": "Dokumentacija", "footer_documentation": "Dokumentacija",
@ -177,6 +183,7 @@
"": "Prikaži `x` komentara" "": "Prikaži `x` komentara"
}, },
"View Reddit comments": "Prikaži Reddit komentare", "View Reddit comments": "Prikaži Reddit komentare",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Neuspešna prijava, proverite da li ste upalili dvofaktornu autentikaciju (Autentikator ili SMS).",
"CAPTCHA is a required field": "CAPTCHA je obavezno polje", "CAPTCHA is a required field": "CAPTCHA je obavezno polje",
"Croatian": "Hrvatski", "Croatian": "Hrvatski",
"Estonian": "Estonski", "Estonian": "Estonski",
@ -218,12 +225,13 @@
"preferences_category_visual": "Vizuelne preference", "preferences_category_visual": "Vizuelne preference",
"preferences_captions_label": "Podrazumevani titl: ", "preferences_captions_label": "Podrazumevani titl: ",
"Music": "Muzika", "Music": "Muzika",
"search_filters_type_label": "Tip", "content_type": "Tip",
"Broken? Try another Invidious Instance": "Ne funkcioniše ispravno? Probajte drugu Invidious instancu",
"Tamil": "Tamilski", "Tamil": "Tamilski",
"Save preferences": "Sačuvaj podešavanja", "Save preferences": "Sačuvaj podešavanja",
"Only show latest unwatched video from channel: ": "Prikaži samo poslednje video klipove koji nisu pogledani sa kanala: ", "Only show latest unwatched video from channel: ": "Prikaži samo poslednje video klipove koji nisu pogledani sa kanala: ",
"Xhosa": "Kosa (Jezik)", "Xhosa": "Kosa (Jezik)",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"Hungarian": "Mađarski", "Hungarian": "Mađarski",
"Maori": "Maori (Jezik)", "Maori": "Maori (Jezik)",
"Manage subscriptions": "Upravljaj zapisima", "Manage subscriptions": "Upravljaj zapisima",
@ -235,7 +243,7 @@
"preferences_default_home_label": "Podrazumevana početna stranica: ", "preferences_default_home_label": "Podrazumevana početna stranica: ",
"Serbian": "Srpski", "Serbian": "Srpski",
"License: ": "Licenca: ", "License: ": "Licenca: ",
"search_filters_features_option_live": "Uživo", "live": "Uživo",
"Report statistics: ": "Izveštavaj o statistici: ", "Report statistics: ": "Izveštavaj o statistici: ",
"Only show latest video from channel: ": "Prikazuj poslednje video klipove samo sa kanala: ", "Only show latest video from channel: ": "Prikazuj poslednje video klipove samo sa kanala: ",
"channel name - reverse": "ime kanala - obrnuto", "channel name - reverse": "ime kanala - obrnuto",
@ -251,21 +259,21 @@
"preferences_volume_label": "Jačina zvuka: ", "preferences_volume_label": "Jačina zvuka: ",
"preferences_locale_label": "Jezik: ", "preferences_locale_label": "Jezik: ",
"adminprefs_modified_source_code_url_label": "URL veza do skladišta sa Izmenjenom Izvornom Kodom", "adminprefs_modified_source_code_url_label": "URL veza do skladišta sa Izmenjenom Izvornom Kodom",
"channel_tab_community_label": "Zajednica", "Community": "Zajednica",
"Video mode": "Video mod", "Video mode": "Video mod",
"Fallback captions: ": "Titl u slučaju da glavni nije dostupan: ", "Fallback captions: ": "Titl u slučaju da glavni nije dostupan: ",
"Private": "Privatno", "Private": "Privatno",
"alphabetically": "po alfabetu", "alphabetically": "po alfabetu",
"No such user": "Nepostojeći korisnik", "No such user": "Nepostojeći korisnik",
"Subscriptions": "Praćenja", "Subscriptions": "Praćenja",
"search_filters_date_option_today": "Danas", "today": "Danas",
"Finnish": "Finski", "Finnish": "Finski",
"Lao": "Laoski", "Lao": "Laoski",
"Login enabled: ": "Prijava omogućena: ", "Login enabled: ": "Prijava omogućena: ",
"Shona": "Šona", "Shona": "Šona",
"search_filters_features_option_location": "Lokacija", "location": "Lokacija",
"Load more": "Učitaj više", "Load more": "Učitaj više",
"Released under the AGPLv3 on Github.": "Izbačeno pod licencom AGPLv3 na GitHub-u.", "Released under the AGPLv3 on Github.": "Izbačeno pod licencom AGPLv3 na Github-u.",
"Slovenian": "Slovenački", "Slovenian": "Slovenački",
"View JavaScript license information.": "Pogledaj informacije licence vezane za JavaScript.", "View JavaScript license information.": "Pogledaj informacije licence vezane za JavaScript.",
"Chinese (Simplified)": "Kineski (Pojednostavljeni)", "Chinese (Simplified)": "Kineski (Pojednostavljeni)",
@ -277,12 +285,14 @@
"Wrong answer": "Pogrešan odgovor", "Wrong answer": "Pogrešan odgovor",
"preferences_quality_label": "Preferirani video kvalitet: ", "preferences_quality_label": "Preferirani video kvalitet: ",
"Hide replies": "Sakrij odgovore", "Hide replies": "Sakrij odgovore",
"Invalid TFA code": "Nevažeća TFA koda",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Neuspešna prijava! Ovo se možda dešava jer dvofaktorna autentikacija nije omogućena na vašem nalogu.",
"Erroneous CAPTCHA": "Pogrešna CAPTCHA", "Erroneous CAPTCHA": "Pogrešna CAPTCHA",
"Erroneous token": "Pogrešan žeton", "Erroneous token": "Pogrešan žeton",
"Czech": "Češki", "Czech": "Češki",
"Latin": "Latinski", "Latin": "Latinski",
"channel_tab_videos_label": "Video klipovi", "Videos": "Video klipovi",
"search_filters_features_option_four_k": "4К", "4k": "4К",
"footer_donate_page": "Doniraj", "footer_donate_page": "Doniraj",
"English": "Engleski", "English": "Engleski",
"Arabic": "Arapski", "Arabic": "Arapski",
@ -300,7 +310,7 @@
"Swahili": "Svahili", "Swahili": "Svahili",
"Yiddish": "Jidiš", "Yiddish": "Jidiš",
"Zulu": "Zulu", "Zulu": "Zulu",
"search_filters_features_option_subtitles": "Titl/Prevod", "subtitles": "Titl/Prevod",
"Password cannot be longer than 55 characters": "Lozinka ne može biti duža od 55 karaktera", "Password cannot be longer than 55 characters": "Lozinka ne može biti duža od 55 karaktera",
"This channel does not exist.": "Ovaj kanal ne postoji.", "This channel does not exist.": "Ovaj kanal ne postoji.",
"Belarusian": "Beloruski", "Belarusian": "Beloruski",
@ -319,9 +329,9 @@
"Clear watch history": "Obriši istoriju gledanja", "Clear watch history": "Obriši istoriju gledanja",
"preferences_category_admin": "Administratorska podešavanja", "preferences_category_admin": "Administratorska podešavanja",
"published": "objavljeno", "published": "objavljeno",
"search_filters_sort_label": "Poredaj prema", "sort": "Poredaj prema",
"search_filters_type_option_show": "Emisija", "show": "Emisija",
"search_filters_duration_option_short": "Kratko (< 4 minute)", "short": "Kratko (< 4 minute)",
"Current version: ": "Trenutna verzija: ", "Current version: ": "Trenutna verzija: ",
"Top enabled: ": "Vrh omogućen: ", "Top enabled: ": "Vrh omogućen: ",
"Public": "Javno", "Public": "Javno",
@ -359,6 +369,5 @@
"unsubscribe": "prekini sa praćenjem", "unsubscribe": "prekini sa praćenjem",
"Blacklisted regions: ": "Zabranjene oblasti: ", "Blacklisted regions: ": "Zabranjene oblasti: ",
"Polish": "Poljski", "Polish": "Poljski",
"Yoruba": "Joruba", "Yoruba": "Joruba"
"search_filters_title": "Filter"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Избрисати повест прегледања?", "Clear watch history?": "Избрисати повест прегледања?",
"New password": "Нова лозинка", "New password": "Нова лозинка",
"New passwords must match": "Нове лозинке морају бити истоветне", "New passwords must match": "Нове лозинке морају бити истоветне",
"Cannot change password for Google accounts": "Није могуће променити лозинку за Google налоге",
"Authorize token?": "Овласти жетон?", "Authorize token?": "Овласти жетон?",
"Authorize token for `x`?": "Овласти жетон за `x`?", "Authorize token for `x`?": "Овласти жетон за `x`?",
"Yes": "Да", "Yes": "Да",
@ -36,6 +37,7 @@
"source": "извор", "source": "извор",
"Log in": "Пријави се", "Log in": "Пријави се",
"Log in/register": "Пријави се/Отворите налог", "Log in/register": "Пријави се/Отворите налог",
"Log in with Google": "Пријави се помоћу Google-а",
"User ID": "Кориснички ИД", "User ID": "Кориснички ИД",
"Password": "Лозинка", "Password": "Лозинка",
"Time (h:mm:ss):": "Време (ч:мм:сс):", "Time (h:mm:ss):": "Време (ч:мм:сс):",
@ -44,6 +46,7 @@
"Sign In": "Пријава", "Sign In": "Пријава",
"Register": "Отвори налог", "Register": "Отвори налог",
"E-mail": "Е-пошта", "E-mail": "Е-пошта",
"Google verification code": "Google-ова оверна кода",
"Preferences": "Подешавања", "Preferences": "Подешавања",
"preferences_category_player": "Подешавања репродуктора", "preferences_category_player": "Подешавања репродуктора",
"preferences_video_loop_label": "Увек понављај: ", "preferences_video_loop_label": "Увек понављај: ",
@ -147,6 +150,8 @@
"Burmese": "Бурмански", "Burmese": "Бурмански",
"preferences_quality_dash_label": "Преферирани квалитет DASH видео формата: ", "preferences_quality_dash_label": "Преферирани квалитет DASH видео формата: ",
"Erroneous token": "Погрешан жетон", "Erroneous token": "Погрешан жетон",
"Quota exceeded, try again in a few hours": "Квота је премашена, молимо вас да покушате поново за пар сати",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Неуспешна пријава, проверите да ли сте упалили двофакторну аутентикацију (Аутентикатор или СМС).",
"CAPTCHA is a required field": "CAPTCHA је обавезно поље", "CAPTCHA is a required field": "CAPTCHA је обавезно поље",
"No such user": "Непостојећи корисник", "No such user": "Непостојећи корисник",
"Chinese (Traditional)": "Кинески (Традиционални)", "Chinese (Traditional)": "Кинески (Традиционални)",
@ -159,6 +164,7 @@
"preferences_show_nick_label": "Прикажи надимке на врху: ", "preferences_show_nick_label": "Прикажи надимке на врху: ",
"Report statistics: ": "Извештавај о статистици: ", "Report statistics: ": "Извештавај о статистици: ",
"Show more": "Прикажи више", "Show more": "Прикажи више",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Неуспешна пријава! Ово се можда дешава јер двофакторна аутентикација није омогућена на vашем налогу.",
"Wrong answer": "Погрешан одговор", "Wrong answer": "Погрешан одговор",
"Hidden field \"token\" is a required field": "Сакривено \"token\" поље је обавезно", "Hidden field \"token\" is a required field": "Сакривено \"token\" поље је обавезно",
"English": "Енглески", "English": "Енглески",
@ -176,13 +182,14 @@
"Georgian": "Грузијски", "Georgian": "Грузијски",
"Greek": "Грчки", "Greek": "Грчки",
"Hausa": "Хауса", "Hausa": "Хауса",
"search_filters_type_option_video": "Видео", "video": "Видео",
"search_filters_type_option_playlist": "Плеј листа", "playlist": "Плеј листа",
"search_filters_type_option_movie": "Филм", "movie": "Филм",
"search_filters_duration_option_long": "Дуго (> 20 минута)", "long": "Дуго (> 20 минута)",
"search_filters_features_option_c_commons": "Creative Commons (Лиценца)", "creative_commons": "Creative Commons (Лиценца)",
"search_filters_features_option_live": "Уживо", "live": "Уживо",
"search_filters_features_option_location": "Локација", "location": "Локација",
"filter": "Филтер",
"next_steps_error_message": "Након чега би требали пробати: ", "next_steps_error_message": "Након чега би требали пробати: ",
"footer_donate_page": "Донирај", "footer_donate_page": "Донирај",
"footer_documentation": "Документација", "footer_documentation": "Документација",
@ -192,6 +199,7 @@
"User ID is a required field": "Кориснички ИД је обавезно поље", "User ID is a required field": "Кориснички ИД је обавезно поље",
"Password is a required field": "Лозинка је обавезно поље", "Password is a required field": "Лозинка је обавезно поље",
"Wrong username or password": "Погрешно корисничко име или лозинка", "Wrong username or password": "Погрешно корисничко име или лозинка",
"Please sign in using 'Log in with Google'": "Молимо Вас да се пријавите помоћу 'Log in with Google'",
"Password cannot be empty": "Лозинка не може бити празна", "Password cannot be empty": "Лозинка не може бити празна",
"Password cannot be longer than 55 characters": "Лозинка не може бити дужа од 55 карактера", "Password cannot be longer than 55 characters": "Лозинка не може бити дужа од 55 карактера",
"Invidious Private Feed for `x`": "Инвидиоус Приватни Довод за `x`", "Invidious Private Feed for `x`": "Инвидиоус Приватни Довод за `x`",
@ -238,10 +246,10 @@
"(edited)": "(измењено)", "(edited)": "(измењено)",
"`x` marked it with a ❤": "`x` је означио/ла ово са ❤", "`x` marked it with a ❤": "`x` је означио/ла ово са ❤",
"Audio mode": "Аудио мод", "Audio mode": "Аудио мод",
"channel_tab_videos_label": "Видео клипови", "Videos": "Видео клипови",
"search_filters_sort_option_views": "Број прегледа", "views": "Број прегледа",
"search_filters_features_label": "Карактеристике", "features": "Карактеристике",
"search_filters_date_option_today": "Данас", "today": "Данас",
"%A %B %-d, %Y": "%A %B %-d, %Y", "%A %B %-d, %Y": "%A %B %-d, %Y",
"preferences_locale_label": "Језик: ", "preferences_locale_label": "Језик: ",
"Persian": "Перзијски", "Persian": "Перзијски",
@ -249,7 +257,7 @@
"": "Прикажи `x` коментара", "": "Прикажи `x` коментара",
"([^.,0-9]|^)1([^.,0-9]|$)": "Прикажи `x` коментар" "([^.,0-9]|^)1([^.,0-9]|$)": "Прикажи `x` коментар"
}, },
"search_filters_type_option_channel": "Канал", "channel": "Канал",
"Haitian Creole": "Хаићански Креолски", "Haitian Creole": "Хаићански Креолски",
"Armenian": "Јерменски", "Armenian": "Јерменски",
"next_steps_error_message_go_to_youtube": "Иди на YouTube", "next_steps_error_message_go_to_youtube": "Иди на YouTube",
@ -257,10 +265,10 @@
"preferences_vr_mode_label": "Интерактивни видео клипови у 360 степени: ", "preferences_vr_mode_label": "Интерактивни видео клипови у 360 степени: ",
"Switch Invidious Instance": "Промени Invidious инстанцу", "Switch Invidious Instance": "Промени Invidious инстанцу",
"Portuguese": "Португалски", "Portuguese": "Португалски",
"search_filters_date_option_week": "Ове седмице", "week": "Ове седмице",
"search_filters_type_option_show": "Емисија", "show": "Емисија",
"Fallback comments: ": "Коментари у случају отказивања: ", "Fallback comments: ": "Коментари у случају отказивања: ",
"search_filters_features_option_hdr": "Видео Високе Резолуције", "hdr": "Видео Високе Резолуције",
"About": "О програму", "About": "О програму",
"Kazakh": "Казашки", "Kazakh": "Казашки",
"Shared `x`": "Подељено `x`", "Shared `x`": "Подељено `x`",
@ -269,7 +277,7 @@
"Erroneous challenge": "Погрешан изазов", "Erroneous challenge": "Погрешан изазов",
"Danish": "Дански", "Danish": "Дански",
"Could not get channel info.": "Узимање података о каналу није успело.", "Could not get channel info.": "Узимање података о каналу није успело.",
"search_filters_features_option_hd": "HD", "hd": "HD",
"Slovenian": "Словеначки", "Slovenian": "Словеначки",
"Load more": "Учитај више", "Load more": "Учитај више",
"German": "Немачки", "German": "Немачки",
@ -280,18 +288,18 @@
"Southern Sotho": "Јужни Сото", "Southern Sotho": "Јужни Сото",
"Popular": "Популарно", "Popular": "Популарно",
"Gujarati": "Гуџарати", "Gujarati": "Гуџарати",
"search_filters_date_option_year": "Ове године", "year": "Ове године",
"Irish": "Ирски", "Irish": "Ирски",
"YouTube comment permalink": "YouTube коментар трајна веза", "YouTube comment permalink": "YouTube коментар трајна веза",
"Malagasy": "Малгашки", "Malagasy": "Малгашки",
"Token is expired, please try again": "Жетон је истекао, молимо вас да покушате поново", "Token is expired, please try again": "Жетон је истекао, молимо вас да покушате поново",
"search_filters_duration_option_short": "Кратко (< 4 минуте)", "short": "Кратко (< 4 минуте)",
"Samoan": "Самоански", "Samoan": "Самоански",
"Tamil": "Тамилски", "Tamil": "Тамилски",
"Ukrainian": "Украјински", "Ukrainian": "Украјински",
"permalink": "трајна веза", "permalink": "трајна веза",
"Pashto": "Паштунски", "Pashto": "Паштунски",
"channel_tab_community_label": "Заједница", "Community": "Заједница",
"Sindhi": "Синди", "Sindhi": "Синди",
"Could not fetch comments": "Узимање коментара није успело", "Could not fetch comments": "Узимање коментара није успело",
"Bangla": "Бангла/Бенгалски", "Bangla": "Бангла/Бенгалски",
@ -299,24 +307,25 @@
"Lithuanian": "Литвански", "Lithuanian": "Литвански",
"Icelandic": "Исландски", "Icelandic": "Исландски",
"Thai": "Тајски", "Thai": "Тајски",
"search_filters_date_option_month": "Овај месец", "month": "Овај месец",
"search_filters_type_label": "Тип", "content_type": "Тип",
"search_filters_date_option_hour": "Последњи сат", "hour": "Последњи сат",
"Spanish": "Шпански", "Spanish": "Шпански",
"search_filters_sort_option_date": "Датум отпремања", "date": "Датум отпремања",
"View as playlist": "Погледај као плеј листу", "View as playlist": "Погледај као плеј листу",
"search_filters_sort_option_relevance": "Релевантност", "relevance": "Релевантност",
"Estonian": "Естонски", "Estonian": "Естонски",
"Sinhala": "Синхалешки", "Sinhala": "Синхалешки",
"Corsican": "Корзикански", "Corsican": "Корзикански",
"Filipino": "Филипино", "Filipino": "Филипино",
"Gaming": "Игрице", "Gaming": "Игрице",
"Movies": "Филмови", "Movies": "Филмови",
"search_filters_sort_option_rating": "Оцене", "rating": "Оцене",
"Top enabled: ": "Врх омогућен: ", "Top enabled: ": "Врх омогућен: ",
"Released under the AGPLv3 on Github.": "Избачено под лиценцом AGPLv3 на GitHub-у.", "Released under the AGPLv3 on Github.": "Избачено под лиценцом AGPLv3 на Github-у.",
"Afrikaans": "Африканс", "Afrikaans": "Африканс",
"preferences_automatic_instance_redirect_label": "Аутоматско пребацивање на другу инстанцу у случају отказивања (пречи ће назад на редирецт.инвидиоус.ио): ", "preferences_automatic_instance_redirect_label": "Аутоматско пребацивање на другу инстанцу у случају отказивања (пречи ће назад на редирецт.инвидиоус.ио): ",
"Invalid TFA code": "Неважећа TFA кода",
"Please log in": "Молимо вас да се пријавите", "Please log in": "Молимо вас да се пријавите",
"English (auto-generated)": "Енглески (аутоматски генерисано)", "English (auto-generated)": "Енглески (аутоматски генерисано)",
"Hindi": "Хинди", "Hindi": "Хинди",
@ -331,11 +340,12 @@
"Swedish": "Шведски", "Swedish": "Шведски",
"Music": "Музика", "Music": "Музика",
"Download as: ": "Преузми као: ", "Download as: ": "Преузми као: ",
"search_filters_duration_label": "Трајање", "duration": "Трајање",
"search_filters_sort_label": "Поредај према", "sort": "Поредај према",
"search_filters_features_option_subtitles": "Титл/Превод", "subtitles": "Титл/Превод",
"preferences_extend_desc_label": "Аутоматски прикажи цео опис видеа: ", "preferences_extend_desc_label": "Аутоматски прикажи цео опис видеа: ",
"Show less": "Прикажи мање", "Show less": "Прикажи мање",
"Broken? Try another Invidious Instance": "Не функционише исправно? Пробајте другу Invidious инстанцу",
"Family friendly? ": "Погодно за породицу? ", "Family friendly? ": "Погодно за породицу? ",
"Premieres `x`": ремерe у `x`", "Premieres `x`": ремерe у `x`",
"Bosnian": "Босански", "Bosnian": "Босански",
@ -349,8 +359,8 @@
"Top": "Врх", "Top": "Врх",
"Video mode": "Видео мод", "Video mode": "Видео мод",
"footer_source_code": "Изворна Кода", "footer_source_code": "Изворна Кода",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"Erroneous CAPTCHA": "Погрешна CAPTCHA", "Erroneous CAPTCHA": "Погрешна CAPTCHA",
"`x` ago": "пре `x`", "`x` ago": "пре `x`",
"Arabic": "Арапски", "Arabic": "Арапски",
@ -359,6 +369,5 @@
"Hebrew": "Хебрејски", "Hebrew": "Хебрејски",
"Korean": "Корејски", "Korean": "Корејски",
"Kurdish": "Курдски", "Kurdish": "Курдски",
"Malay": "Малајски", "Malay": "Малајски"
"search_filters_title": "Филтер"
} }

@ -14,6 +14,7 @@
"Clear watch history?": "Töm visningshistorik?", "Clear watch history?": "Töm visningshistorik?",
"New password": "Nytt lösenord", "New password": "Nytt lösenord",
"New passwords must match": "Nya lösenord måste stämma överens", "New passwords must match": "Nya lösenord måste stämma överens",
"Cannot change password for Google accounts": "Kan inte ändra lösenord på Google-konton",
"Authorize token?": "Auktorisera åtkomsttoken?", "Authorize token?": "Auktorisera åtkomsttoken?",
"Authorize token for `x`?": "Auktorisera åtkomsttoken för `x`?", "Authorize token for `x`?": "Auktorisera åtkomsttoken för `x`?",
"Yes": "Ja", "Yes": "Ja",
@ -36,6 +37,7 @@
"source": "källa", "source": "källa",
"Log in": "Logga in", "Log in": "Logga in",
"Log in/register": "Logga in/registrera", "Log in/register": "Logga in/registrera",
"Log in with Google": "Logga in med Google",
"User ID": "Användar-ID", "User ID": "Användar-ID",
"Password": "Lösenord", "Password": "Lösenord",
"Time (h:mm:ss):": "Tid (h:mm:ss):", "Time (h:mm:ss):": "Tid (h:mm:ss):",
@ -44,6 +46,7 @@
"Sign In": "Inloggning", "Sign In": "Inloggning",
"Register": "Registrera", "Register": "Registrera",
"E-mail": "E-post", "E-mail": "E-post",
"Google verification code": "Google-bekräftelsekod",
"Preferences": "Inställningar", "Preferences": "Inställningar",
"preferences_category_player": "Spelarinställningar", "preferences_category_player": "Spelarinställningar",
"preferences_video_loop_label": "Loopa alltid: ", "preferences_video_loop_label": "Loopa alltid: ",
@ -136,6 +139,7 @@
"Show less": "Visa mindre", "Show less": "Visa mindre",
"Watch on YouTube": "Titta på YouTube", "Watch on YouTube": "Titta på YouTube",
"Switch Invidious Instance": "Byt Invidious Instans", "Switch Invidious Instance": "Byt Invidious Instans",
"Broken? Try another Invidious Instance": "Trasig? Prova en annan Invidious Instance",
"Hide annotations": "Dölj länkar-i-video", "Hide annotations": "Dölj länkar-i-video",
"Show annotations": "Visa länkar-i-video", "Show annotations": "Visa länkar-i-video",
"Genre: ": "Genre: ", "Genre: ": "Genre: ",
@ -159,12 +163,17 @@
"Hide replies": "Dölj svar", "Hide replies": "Dölj svar",
"Show replies": "Visa svar", "Show replies": "Visa svar",
"Incorrect password": "Fel lösenord", "Incorrect password": "Fel lösenord",
"Quota exceeded, try again in a few hours": "Kvoten överskriden, försök igen om ett par timmar",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Kunde inte logga in, försäkra dig om att tvåfaktors-autentisering (Authenticator eller SMS) är påslagen.",
"Invalid TFA code": "Ogiltig tvåfaktor-kod",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Inloggning misslyckades. Detta kan vara för att tvåfaktors-autentisering inte är påslaget på ditt konto.",
"Wrong answer": "Fel svar", "Wrong answer": "Fel svar",
"Erroneous CAPTCHA": "Ogiltig CAPTCHA", "Erroneous CAPTCHA": "Ogiltig CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA är ett obligatoriskt fält", "CAPTCHA is a required field": "CAPTCHA är ett obligatoriskt fält",
"User ID is a required field": "Användar-ID är ett obligatoriskt fält", "User ID is a required field": "Användar-ID är ett obligatoriskt fält",
"Password is a required field": "Lösenord är ett obligatoriskt fält", "Password is a required field": "Lösenord är ett obligatoriskt fält",
"Wrong username or password": "Ogiltigt användarnamn eller lösenord", "Wrong username or password": "Ogiltigt användarnamn eller lösenord",
"Please sign in using 'Log in with Google'": "Logga in genom \"Google-inloggning\"",
"Password cannot be empty": "Lösenordet kan inte vara tomt", "Password cannot be empty": "Lösenordet kan inte vara tomt",
"Password cannot be longer than 55 characters": "Lösenordet kan inte vara längre än 55 tecken", "Password cannot be longer than 55 characters": "Lösenordet kan inte vara längre än 55 tecken",
"Please log in": "Logga in", "Please log in": "Logga in",
@ -315,42 +324,42 @@
"`x` marked it with a ❤": "`x` lämnade ett ❤", "`x` marked it with a ❤": "`x` lämnade ett ❤",
"Audio mode": "Ljudläge", "Audio mode": "Ljudläge",
"Video mode": "Videoläge", "Video mode": "Videoläge",
"channel_tab_videos_label": "Videor", "Videos": "Videor",
"Playlists": "Spellistor", "Playlists": "Spellistor",
"channel_tab_community_label": "Gemenskap", "Community": "Gemenskap",
"search_filters_sort_option_relevance": "Relevans", "relevance": "relevans",
"search_filters_sort_option_rating": "Rankning", "rating": "rankning",
"search_filters_sort_option_date": "Datum", "date": "datum",
"search_filters_sort_option_views": "Visningar", "views": "visningar",
"search_filters_type_label": "Typ", "content_type": "Typ",
"search_filters_duration_label": "Varaktighet", "duration": "Varaktighet",
"search_filters_features_label": "Funktioner", "features": "Funktioner",
"search_filters_sort_label": "Sortera efter", "sort": "Sortera efter",
"search_filters_date_option_hour": "timme", "hour": "timme",
"search_filters_date_option_today": "idag", "today": "idag",
"search_filters_date_option_week": "vecka", "week": "vecka",
"search_filters_date_option_month": "månad", "month": "månad",
"search_filters_date_option_year": "år", "year": "år",
"search_filters_type_option_video": "video", "video": "video",
"search_filters_type_option_channel": "kanal", "channel": "kanal",
"search_filters_type_option_playlist": "spellista", "playlist": "spellista",
"search_filters_type_option_movie": "film", "movie": "film",
"search_filters_type_option_show": "tv-serie", "show": "tv-serie",
"search_filters_features_option_hd": "hd", "hd": "hd",
"search_filters_features_option_subtitles": "undertexter", "subtitles": "undertexter",
"search_filters_features_option_c_commons": "creative_commons", "creative_commons": "creative_commons",
"search_filters_features_option_three_d": "3d", "3d": "3d",
"search_filters_features_option_live": "live", "live": "live",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "plats", "location": "plats",
"search_filters_features_option_hdr": "hdr", "hdr": "hdr",
"filter": "Filter",
"Current version: ": "Nuvarande version: ", "Current version: ": "Nuvarande version: ",
"next_steps_error_message_refresh": "Uppdatera", "next_steps_error_message_refresh": "Uppdatera",
"next_steps_error_message_go_to_youtube": "Gå till Youtube", "next_steps_error_message_go_to_youtube": "Gå till Youtube",
"Released under the AGPLv3 on Github.": "Publicerad under AGPLv3 på GitHub.", "Released under the AGPLv3 on Github.": "Publicerad under AGPLv3 på Github.",
"footer_source_code": "Källkod", "footer_source_code": "Källkod",
"search_filters_duration_option_long": "Lång (> 20 minuter)", "long": "Lång (> 20 minuter)",
"footer_documentation": "Dokumentation", "footer_documentation": "Dokumentation",
"search_filters_duration_option_short": "Kort (< 4 minuter)", "short": "Kort (< 4 minuter)"
"search_filters_title": "Filter"
} }

@ -1,124 +1,127 @@
{ {
"LIVE": "CANLI", "LIVE": "CANLI",
"Shared `x` ago": "`x` Önce Paylaşıldı", "Shared `x` ago": "`x` önce paylaşıldı",
"Unsubscribe": "Abonelikten Çık", "Unsubscribe": "Abonelikten çık",
"Subscribe": "Abone Ol", "Subscribe": "Abone ol",
"View channel on YouTube": "Kanalı YouTube'da Görüntüle", "View channel on YouTube": "Kanalı YouTube'da görüntüle",
"View playlist on YouTube": "Oynatma Listesini YouTube'da Görüntüle", "View playlist on YouTube": "Oynatma listesini YouTube'da görüntüle",
"newest": "En Yeni", "newest": "en yeni",
"oldest": "En Eski", "oldest": "en eski",
"popular": "Popüler", "popular": "popüler",
"last": "Son", "last": "son",
"Next page": "Sonraki Sayfa", "Next page": "Sonraki sayfa",
"Previous page": "Önceki Sayfa", "Previous page": "Önceki sayfa",
"Clear watch history?": "İzleme geçmişi temizlensin mi?", "Clear watch history?": "İzleme geçmişi temizlensin mi?",
"New password": "Yeni Parola", "New password": "Yeni parola",
"New passwords must match": "Yeni Parolalar Eşleşmek Zorunda", "New passwords must match": "Yeni parolalar eşleşmek zorunda",
"Cannot change password for Google accounts": "Google hesapları için parola değiştirilemez",
"Authorize token?": "Belirteç yetkilendirilsin mi?", "Authorize token?": "Belirteç yetkilendirilsin mi?",
"Authorize token for `x`?": "`x` için belirteç yetkilendirilsin mi?", "Authorize token for `x`?": "`x` için belirteç yetkilendirilsin mi?",
"Yes": "Evet", "Yes": "Evet",
"No": "Hayır", "No": "Hayır",
"Import and Export Data": "Verileri İçe ve Dışa Aktar", "Import and Export Data": "Verileri İçe ve Dışa Aktar",
"Import": "İçe Aktar", "Import": "İçe aktar",
"Import Invidious data": "Invidious JSON Verilerini İçe Aktar", "Import Invidious data": "İnvidious JSON verilerini içe aktar",
"Import YouTube subscriptions": "YouTube/OPML Aboneliklerini İçe Aktar", "Import YouTube subscriptions": "YouTube/OPML aboneliklerini içe aktar",
"Import FreeTube subscriptions (.db)": "FreeTube Aboneliklerini İçe Aktar (.db)", "Import FreeTube subscriptions (.db)": "FreeTube aboneliklerini içe aktar (.db)",
"Import NewPipe subscriptions (.json)": "NewPipe Aboneliklerini İçe Aktar (.json)", "Import NewPipe subscriptions (.json)": "NewPipe aboneliklerini içe aktar (.json)",
"Import NewPipe data (.zip)": "NewPipe Verilerini İçe Aktar (.zip)", "Import NewPipe data (.zip)": "NewPipe verilerini içe aktar (.zip)",
"Export": "Dışa Aktar", "Export": "Dışa aktar",
"Export subscriptions as OPML": "Abonelikleri OPML Olarak Dışa Aktar", "Export subscriptions as OPML": "Abonelikleri OPML olarak dışa aktar",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonelikleri OPML Olarak Dışa Aktar (NewPipe ve FreeTube İçin)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonelikleri OPML olarak dışa aktar (NewPipe ve FreeTube için)",
"Export data as JSON": "İnvidious Verilerini JSON Olarak Dışa Aktar", "Export data as JSON": "Invidious verilerini JSON olarak dışa aktar",
"Delete account?": "Hesap silinsin mi?", "Delete account?": "Hesap silinsin mi?",
"History": "Geçmiş", "History": "Geçmiş",
"An alternative front-end to YouTube": "YouTube İçin Alternatif Bir Ön-Yüz", "An alternative front-end to YouTube": "YouTube için alternatif bir ön-yüz",
"JavaScript license information": "JavaScript Lisans Bilgileri", "JavaScript license information": "JavaScript lisans bilgileri",
"source": "Kaynak", "source": "kaynak",
"Log in": "Oturum Aç", "Log in": "Oturum aç",
"Log in/register": "Oturum Aç/Kayıt Ol", "Log in/register": "Oturum aç/kayıt ol",
"User ID": "Kullanıcı Kimliği", "Log in with Google": "Google ile oturum aç",
"User ID": "Kullanıcı kimliği",
"Password": "Parola", "Password": "Parola",
"Time (h:mm:ss):": "Zaman (h:mm:ss):", "Time (h:mm:ss):": "Zaman (h:mm:ss):",
"Text CAPTCHA": "Metin CAPTCHA", "Text CAPTCHA": "Metin CAPTCHA",
"Image CAPTCHA": "Resim CAPTCHA", "Image CAPTCHA": "Resim CAPTCHA",
"Sign In": "Oturum Aç", "Sign In": "Oturum Aç",
"Register": "Kayıt Ol", "Register": "Kayıt Ol",
"E-mail": "E-Posta", "E-mail": "E-posta",
"Google verification code": "Google doğrulama kodu",
"Preferences": "Tercihler", "Preferences": "Tercihler",
"preferences_category_player": "Oynatıcı Tercihleri", "preferences_category_player": "Oynatıcı tercihleri",
"preferences_video_loop_label": "Sürekli Döngü: ", "preferences_video_loop_label": "Sürekli döngü: ",
"preferences_autoplay_label": "Otomatik Oynat: ", "preferences_autoplay_label": "Otomatik oynat: ",
"preferences_continue_label": "Öntanımlı Olarak Sonrakini Oynat: ", "preferences_continue_label": "Öntanımlı olarak sonrakini oynat: ",
"preferences_continue_autoplay_label": "Sonraki Videoyu Otomatik Oynat: ", "preferences_continue_autoplay_label": "Sonraki videoyu otomatik oynat: ",
"preferences_listen_label": "Öntanımlı Olarak Dinle: ", "preferences_listen_label": "Öntanımlı olarak dinle: ",
"preferences_local_label": "Videolara Proxy Uygula: ", "preferences_local_label": "Videoları proxy'le: ",
"preferences_speed_label": "Öntanımlı Hız: ", "preferences_speed_label": "Öntanımlı hız: ",
"preferences_quality_label": "Tercih Edilen Video Kalitesi: ", "preferences_quality_label": "Tercih edilen video kalitesi: ",
"preferences_volume_label": "Oynatıcı Ses Seviyesi: ", "preferences_volume_label": "Oynatıcı ses seviyesi: ",
"preferences_comments_label": "Öntanımlı Yorumlar: ", "preferences_comments_label": "Öntanımlı yorumlar: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "Reddit",
"preferences_captions_label": "Öntanımlı Altyazılar: ", "preferences_captions_label": "Öntanımlı altyazılar: ",
"Fallback captions: ": "Yedek Altyazılar: ", "Fallback captions: ": "Yedek altyazılar: ",
"preferences_related_videos_label": "İlgili Videoları Göster: ", "preferences_related_videos_label": "İlgili videoları göster: ",
"preferences_annotations_label": "Öntanımlı Olarak Ek Açıklamaları Göster: ", "preferences_annotations_label": "Öntanımlı olarak ek açıklamaları göster: ",
"preferences_extend_desc_label": "Video ıklamasını Otomatik Olarak Genişlet: ", "preferences_extend_desc_label": "Video ıklamasını otomatik olarak genişlet: ",
"preferences_vr_mode_label": "Etkileşimli 360 Derece Videolar (WebGL Gerektirir): ", "preferences_vr_mode_label": "Etkileşimli 360 derece videolar (WebGL gerektirir): ",
"preferences_category_visual": "Görsel Tercihler", "preferences_category_visual": "Görsel tercihler",
"preferences_player_style_label": "Oynatıcı Biçimi: ", "preferences_player_style_label": "Oynatıcı biçimi: ",
"Dark mode: ": "Koyu Mod: ", "Dark mode: ": "Karanlık mod: ",
"preferences_dark_mode_label": "Tema: ", "preferences_dark_mode_label": "Tema: ",
"dark": "Koyu", "dark": "karanlık",
"light": "ık", "light": "aydınlık",
"preferences_thin_mode_label": "İnce Mod: ", "preferences_thin_mode_label": "İnce mod: ",
"preferences_category_misc": "Çeşitli Tercihler", "preferences_category_misc": "Çeşitli tercihler",
"preferences_automatic_instance_redirect_label": "Otomatik Örnek Yeniden Yönlendirmesi (Yedek: redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Otomatik örnek yeniden yönlendirmesi (yedek: redirect.invidious.io): ",
"preferences_category_subscription": "Abonelik Tercihleri", "preferences_category_subscription": "Abonelik tercihleri",
"preferences_annotations_subscribed_label": "Abone Olunan Kanallar İçin Ek Açıklamaları Öntanımlı Olarak Göster: ", "preferences_annotations_subscribed_label": "Abone olunan kanallar için ek açıklamaları öntanımlı olarak göster: ",
"Redirect homepage to feed: ": "Ana Sayfayı Akışa Yönlendir: ", "Redirect homepage to feed: ": "Ana sayfayı akışa yönlendir: ",
"preferences_max_results_label": "Akışta Gösterilen Video Sayısı: ", "preferences_max_results_label": "Akışta gösterilen video sayısı: ",
"preferences_sort_label": "Videoları Sıralama Kriteri: ", "preferences_sort_label": "Videoları sıralama kriteri: ",
"published": "Yayınlandı", "published": "yayınlandı",
"published - reverse": "Yayınlandı - Ters", "published - reverse": "yayınlandı - ters",
"alphabetically": "Alfabetik Olarak", "alphabetically": "alfabetik olarak",
"alphabetically - reverse": "Alfabetik Olarak - Ters", "alphabetically - reverse": "alfabetik olarak - ters",
"channel name": "Kanal Adı", "channel name": "kanal adı",
"channel name - reverse": "Kanal Adı - Ters", "channel name - reverse": "kanal adı - ters",
"Only show latest video from channel: ": "Sadece Kanaldaki En Son Videoyu Göster: ", "Only show latest video from channel: ": "Sadece kanaldaki en son videoyu göster: ",
"Only show latest unwatched video from channel: ": "Sadece Kanaldaki En Son İzlenmemiş Videoyu Göster: ", "Only show latest unwatched video from channel: ": "Sadece kanaldaki en son izlenmemiş videoyu göster: ",
"preferences_unseen_only_label": "Sadece İzlenmemişleri Göster: ", "preferences_unseen_only_label": "Sadece izlenmemişleri göster: ",
"preferences_notifications_only_label": "Sadece Bildirimleri Göster (Eğer Varsa): ", "preferences_notifications_only_label": "Sadece bildirimleri göster (eğer varsa): ",
"Enable web notifications": "Ağ Bildirimlerini Etkinleştir", "Enable web notifications": "Ağ bildirimlerini etkinleştir",
"`x` uploaded a video": "`x` Bir Video Yükledi", "`x` uploaded a video": "`x` bir video yükledi",
"`x` is live": "`x` Canlı Yayında", "`x` is live": "`x` canlı yayında",
"preferences_category_data": "Veri Tercihleri", "preferences_category_data": "Veri tercihleri",
"Clear watch history": "İzleme Geçmişini Temizle", "Clear watch history": "İzleme geçmişini temizle",
"Import/export data": "Verileri İçe/Dışa Aktar", "Import/export data": "Verileri içe/dışa aktar",
"Change password": "Parolayı Değiştir", "Change password": "Parolayı değiştir",
"Manage subscriptions": "Abonelikleri Yönet", "Manage subscriptions": "Abonelikleri yönet",
"Manage tokens": "Belirteçleri Yönet", "Manage tokens": "Belirteçleri yönet",
"Watch history": "İzleme Geçmişi", "Watch history": "İzleme geçmişi",
"Delete account": "Hesap Silme", "Delete account": "Hesap silme",
"preferences_category_admin": "Yönetici Tercihleri", "preferences_category_admin": "Yönetici tercihleri",
"preferences_default_home_label": "Öntanımlı Ana Sayfa: ", "preferences_default_home_label": "Öntanımlı ana sayfa: ",
"preferences_feed_menu_label": "Akış Menüsü: ", "preferences_feed_menu_label": "Akış menüsü: ",
"preferences_show_nick_label": "Takma Adı Üstte Göster: ", "preferences_show_nick_label": "Takma adı üstte göster: ",
"Top enabled: ": "Top Etkin: ", "Top enabled: ": "Top etkin: ",
"CAPTCHA enabled: ": "CAPTCHA Etkin: ", "CAPTCHA enabled: ": "CAPTCHA etkin: ",
"Login enabled: ": "Oturum Açma Etkin: ", "Login enabled: ": "Oturum açma etkin: ",
"Registration enabled: ": "Kayıt Olma Etkin: ", "Registration enabled: ": "Kayıt olma etkin: ",
"Report statistics: ": "Rapor İstatistikleri: ", "Report statistics: ": "Rapor istatistikleri: ",
"Save preferences": "Tercihleri Kaydet", "Save preferences": "Tercihleri kaydet",
"Subscription manager": "Abonelik Yöneticisi", "Subscription manager": "Abonelik yöneticisi",
"Token manager": "Belirteç Yöneticisi", "Token manager": "Belirteç yöneticisi",
"Token": "Belirteç", "Token": "Belirteç",
"Import/export": "İçe/Dışa Aktar", "Import/export": "İçe/dışa aktar",
"unsubscribe": "Abonelikten Çık", "unsubscribe": "abonelikten çık",
"revoke": "Geri Al", "revoke": "geri al",
"Subscriptions": "Abonelikler", "Subscriptions": "Abonelikler",
"search": "Ara", "search": "ara",
"Log out": ıkış Yap", "Log out": ıkış yap",
"Released under the AGPLv3 on Github.": "GitHub'da AGPLv3 altında yayınlandı.", "Released under the AGPLv3 on Github.": "Github'da AGPLv3 altında yayınlandı.",
"Source available here.": "Kaynak kodları burada bulunabilir.", "Source available here.": "Kaynak kodları burada bulunabilir.",
"View JavaScript license information.": "JavaScript lisans bilgilerini görüntüle.", "View JavaScript license information.": "JavaScript lisans bilgilerini görüntüle.",
"View privacy policy.": "Gizlilik politikasını görüntüle.", "View privacy policy.": "Gizlilik politikasını görüntüle.",
@ -126,71 +129,77 @@
"Public": "Genel", "Public": "Genel",
"Unlisted": "Listelenmemiş", "Unlisted": "Listelenmemiş",
"Private": "Özel", "Private": "Özel",
"View all playlists": "Tüm Oynatma Listelerini Görüntüle", "View all playlists": "Tüm oynatma listelerini görüntüle",
"Updated `x` ago": "`x` Önce Güncellendi", "Updated `x` ago": "`x` önce güncellendi",
"Delete playlist `x`?": "`x` oynatma listesi silinsin mi?", "Delete playlist `x`?": "`x` oynatma listesi silinsin mi?",
"Delete playlist": "Oynatma Listesini Sil", "Delete playlist": "Oynatma listesini sil",
"Create playlist": "Oynatma Listesi Oluştur", "Create playlist": "Oynatma listesi oluştur",
"Title": "Başlık", "Title": "Başlık",
"Playlist privacy": "Oynatma Listesi Gizliliği", "Playlist privacy": "Oynatma listesi gizliliği",
"Editing playlist `x`": "`x` Oynatma Listesi Düzenleniyor", "Editing playlist `x`": "`x` oynatma listesi düzenleniyor",
"Show more": "Daha Fazla Göster", "Show more": "Daha fazla göster",
"Show less": "Daha Az Göster", "Show less": "Daha az göster",
"Watch on YouTube": "YouTube'da İzle", "Watch on YouTube": "YouTube'da izle",
"Switch Invidious Instance": "Invidious Örneğini Değiştir", "Switch Invidious Instance": "Invidious Örneğini Değiştir",
"Hide annotations": "Ek Açıklamaları Gizle", "Broken? Try another Invidious Instance": "Bozuk mu? Başka bir Invidious örneğini deneyin",
"Show annotations": "Ek Açıklamaları Göster", "Hide annotations": "Ek açıklamaları gizle",
"Show annotations": "Ek açıklamaları göster",
"Genre: ": "Tür: ", "Genre: ": "Tür: ",
"License: ": "Lisans: ", "License: ": "Lisans: ",
"Family friendly? ": "Aile için uygun mu? ", "Family friendly? ": "Aile için uygun mu? ",
"Wilson score: ": "Wilson Puanı: ", "Wilson score: ": "Wilson puanı: ",
"Engagement: ": "İzleyenlerin Oy Verme Oranı: ", "Engagement: ": "İzleyenlerin oy verme oranı: ",
"Whitelisted regions: ": "Beyaz Listeye Alınan Bölgeler: ", "Whitelisted regions: ": "Beyaz listeye alınan bölgeler: ",
"Blacklisted regions: ": "Kara Listeye Alınan Bölgeler: ", "Blacklisted regions: ": "Kara listeye alınan bölgeler: ",
"Shared `x`": "`x` Paylaşıldı", "Shared `x`": "`x` paylaşıldı",
"Premieres in `x`": "`x`İçinde İlk Gösterim", "Premieres in `x`": "`x`içinde ilk gösterim",
"Premieres `x`": "`x` İlk Gösterim", "Premieres `x`": "`x` ilk gösterim",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Merhaba! JavaScript'i kapatmış gibi görünüyorsun. Yorumları görüntülemek için buraya tıkla, yüklenmelerinin biraz uzun sürebileceğini unutma.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Merhaba! JavaScript'i kapatmış gibi görünüyorsun. Yorumları görüntülemek için buraya tıkla, yüklenmelerinin biraz uzun sürebileceğini unutma.",
"View YouTube comments": "YouTube Yorumlarını Görüntüle", "View YouTube comments": "YouTube yorumlarını görüntüle",
"View more comments on Reddit": "Reddit'te Daha Fazla Yorum Görüntüle", "View more comments on Reddit": "Reddit'te daha fazla yorum görüntüle",
"View `x` comments": { "View `x` comments": {
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` Yorumu Görüntüle", "([^.,0-9]|^)1([^.,0-9]|$)": "`x` yorumu görüntüle",
"": "`x` Yorumu Görüntüle" "": "`x` yorumu görüntüle"
}, },
"View Reddit comments": "Reddit Yorumlarını Görüntüle", "View Reddit comments": "Reddit yorumlarını görüntüle",
"Hide replies": "Cevapları Gizle", "Hide replies": "Cevapları gizle",
"Show replies": "Cevapları Göster", "Show replies": "Cevapları göster",
"Incorrect password": "Yanlış Parola", "Incorrect password": "Yanlış parola",
"Wrong answer": "Yanlış Cevap", "Quota exceeded, try again in a few hours": "Kota aşıldı, birkaç saat içinde tekrar deneyin",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Oturum açılamadı, iki faktörlü kimlik doğrulamanın (Authenticator ya da SMS) açık olduğundan emin olun.",
"Invalid TFA code": "Geçersiz TFA kodu",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Giriş başarısız. Bunun nedeni, hesabınız için iki faktörlü kimlik doğrulamanın açık olmaması olabilir.",
"Wrong answer": "Yanlış cevap",
"Erroneous CAPTCHA": "Hatalı CAPTCHA", "Erroneous CAPTCHA": "Hatalı CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA Zorunlu Bir Alandır", "CAPTCHA is a required field": "CAPTCHA zorunlu bir alandır",
"User ID is a required field": "Kullanıcı Kimliği Zorunlu Bir Alandır", "User ID is a required field": "Kullanıcı kimliği zorunlu bir alandır",
"Password is a required field": "Parola Zorunlu Bir Alandır", "Password is a required field": "Parola zorunlu bir alandır",
"Wrong username or password": "Yanlış Kullanıcı Adı ya da Parola", "Wrong username or password": "Yanlış kullanıcı adı ya da parola",
"Password cannot be empty": "Parola Boş Olamaz", "Please sign in using 'Log in with Google'": "Lütfen 'Google ile giriş yap' seçeneğini kullanarak oturum açın",
"Password cannot be longer than 55 characters": "Parola 55 Karakterden Uzun Olamaz", "Password cannot be empty": "Parola boş olamaz",
"Please log in": "Lütfen Oturum Açın", "Password cannot be longer than 55 characters": "Parola 55 karakterden uzun olamaz",
"Invidious Private Feed for `x`": "`x` İçin Invidious Özel Akışı", "Please log in": "Lütfen oturum açın",
"channel:`x`": "Kanal:`x`", "Invidious Private Feed for `x`": "`x` için İnvidious Özel Akışı",
"Deleted or invalid channel": "Silinmiş ya da Geçersiz Kanal", "channel:`x`": "kanal:`x`",
"Deleted or invalid channel": "Silinmiş ya da geçersiz kanal",
"This channel does not exist.": "Bu kanal mevcut değil.", "This channel does not exist.": "Bu kanal mevcut değil.",
"Could not get channel info.": "Kanal bilgisi alınamadı.", "Could not get channel info.": "Kanal bilgisi alınamadı.",
"Could not fetch comments": "Yorumlar Alınamadı", "Could not fetch comments": "Yorumlar alınamadı",
"`x` ago": "`x` Önce", "`x` ago": "`x` önce",
"Load more": "Daha Fazla Yükle", "Load more": "Daha fazla yükle",
"Could not create mix.": "Mix oluşturulamadı.", "Could not create mix.": "Mix oluşturulamadı.",
"Empty playlist": "Boş Oynatma Listesi", "Empty playlist": "Boş oynatma listesi",
"Not a playlist.": "Oynatma listesi değil.", "Not a playlist.": "Oynatma listesi değil.",
"Playlist does not exist.": "Oynatma listesi mevcut değil.", "Playlist does not exist.": "Oynatma listesi mevcut değil.",
"Could not pull trending pages.": "Trend sayfaları alınamıyor.", "Could not pull trending pages.": "Trend sayfaları alınamıyor.",
"Hidden field \"challenge\" is a required field": "Gizli Alan \"Challenge\" Zorunlu Bir Alandır", "Hidden field \"challenge\" is a required field": "Gizli alan \"challenge\" zorunlu bir alandır",
"Hidden field \"token\" is a required field": "\"Belirteç\" Gizli Alanı Zorunlu Bir Alandır", "Hidden field \"token\" is a required field": "\"belirteç\" gizli alanı zorunlu bir alandır",
"Erroneous challenge": "Hatalı Challenge", "Erroneous challenge": "Hatalı challenge",
"Erroneous token": "Hatalı Belirteç", "Erroneous token": "Hatalı belirteç",
"No such user": "Böyle Bir Kullanıcı Yok", "No such user": "Böyle bir kullanıcı yok",
"Token is expired, please try again": "Belirtecin Süresi Doldu, Lütfen Tekrar Deneyin", "Token is expired, please try again": "Belirtecin süresi doldu, lütfen tekrar deneyin",
"English": "İngilizce", "English": "İngilizce",
"English (auto-generated)": "İngilizce (Otomatik Oluşturuldu)", "English (auto-generated)": "İngilizce (otomatik oluşturuldu)",
"Afrikaans": "Afrikanca", "Afrikaans": "Afrikanca",
"Albanian": "Arnavutça", "Albanian": "Arnavutça",
"Amharic": "Amharca", "Amharic": "Amharca",
@ -222,9 +231,9 @@
"German": "Almanca", "German": "Almanca",
"Greek": "Yunanca", "Greek": "Yunanca",
"Gujarati": "Guceratça", "Gujarati": "Guceratça",
"Haitian Creole": "Haiti Creole Dili", "Haitian Creole": "Haiti Creole dili",
"Hausa": "Hausaca", "Hausa": "Hausaca",
"Hawaiian": "Hawaii Dili", "Hawaiian": "Hawaii dili",
"Hebrew": "İbranice", "Hebrew": "İbranice",
"Hindi": "Hintçe", "Hindi": "Hintçe",
"Hmong": "Hmong", "Hmong": "Hmong",
@ -236,7 +245,7 @@
"Italian": "İtalyanca", "Italian": "İtalyanca",
"Japanese": "Japonca", "Japanese": "Japonca",
"Javanese": "Cava dili", "Javanese": "Cava dili",
"Kannada": "Kannada Dili", "Kannada": "Kannada dili",
"Kazakh": "Kazakça", "Kazakh": "Kazakça",
"Khmer": "Kmerce", "Khmer": "Kmerce",
"Korean": "Korece", "Korean": "Korece",
@ -250,10 +259,10 @@
"Macedonian": "Makedonca", "Macedonian": "Makedonca",
"Malagasy": "Malgaşça", "Malagasy": "Malgaşça",
"Malay": "Malayca", "Malay": "Malayca",
"Malayalam": "Malayalam Dili", "Malayalam": "Malayalam dili",
"Maltese": "Maltaca", "Maltese": "Maltaca",
"Maori": "Maori Dili", "Maori": "Maori dili",
"Marathi": "Marati Dili", "Marathi": "Marati dili",
"Mongolian": "Moğolca", "Mongolian": "Moğolca",
"Nepali": "Nepalce", "Nepali": "Nepalce",
"Norwegian Bokmål": "Norveççe Bokmål", "Norwegian Bokmål": "Norveççe Bokmål",
@ -262,19 +271,19 @@
"Persian": "Farsça", "Persian": "Farsça",
"Polish": "Lehçe", "Polish": "Lehçe",
"Portuguese": "Portekizce", "Portuguese": "Portekizce",
"Punjabi": "Pencap Dili", "Punjabi": "Pencap dili",
"Romanian": "Rumence", "Romanian": "Rumence",
"Russian": "Rusça", "Russian": "Rusça",
"Samoan": "Samoa Dili", "Samoan": "Samoa dili",
"Scottish Gaelic": "İskoç Galcesi", "Scottish Gaelic": "İskoç Galcesi",
"Serbian": "Sırpça", "Serbian": "Sırpça",
"Shona": "Şona Dili", "Shona": "Şona dili",
"Sindhi": "Sintçe", "Sindhi": "Sintçe",
"Sinhala": "Seylanca", "Sinhala": "Seylanca",
"Slovak": "Slovakça", "Slovak": "Slovakça",
"Slovenian": "Slovence", "Slovenian": "Slovence",
"Somali": "Somalice", "Somali": "Somalice",
"Southern Sotho": "Güney Sotho Dili", "Southern Sotho": "Güney Sotho dili",
"Spanish": "İspanyolca", "Spanish": "İspanyolca",
"Spanish (Latin America)": "İspanyolca (Latin Amerika)", "Spanish (Latin America)": "İspanyolca (Latin Amerika)",
"Sundanese": "Sundaca", "Sundanese": "Sundaca",
@ -282,7 +291,7 @@
"Swedish": "İsveççe", "Swedish": "İsveççe",
"Tajik": "Tacikçe", "Tajik": "Tacikçe",
"Tamil": "Tamilce", "Tamil": "Tamilce",
"Telugu": "Telugu Dili", "Telugu": "Telugu dili",
"Thai": "Tayca", "Thai": "Tayca",
"Turkish": "Türkçe", "Turkish": "Türkçe",
"Ukrainian": "Ukraynaca", "Ukrainian": "Ukraynaca",
@ -291,190 +300,166 @@
"Vietnamese": "Vietnamca", "Vietnamese": "Vietnamca",
"Welsh": "Galce", "Welsh": "Galce",
"Western Frisian": "Batı Frizcesi", "Western Frisian": "Batı Frizcesi",
"Xhosa": "Xhosa Dili", "Xhosa": "Xhosa dili",
"Yiddish": "Yiddiş", "Yiddish": "Yiddiş",
"Yoruba": "Yoruba Dili", "Yoruba": "Yoruba dili",
"Zulu": "Zuluca", "Zulu": "Zuluca",
"Fallback comments: ": "Yedek Yorumlar: ", "Fallback comments: ": "Yedek yorumlar: ",
"Popular": "Popüler", "Popular": "Popüler",
"Search": "Ara", "Search": "Ara",
"Top": "Enler", "Top": "Enler",
"About": "Hakkında", "About": "Hakkında",
"Rating: ": "Değerlendirme: ", "Rating: ": "Değerlendirme: ",
"preferences_locale_label": "Dil: ", "preferences_locale_label": "Dil: ",
"View as playlist": "Oynatma Listesi Olarak Görüntüle", "View as playlist": "Oynatma listesi olarak görüntüle",
"Default": "Öntanımlı", "Default": "Öntanımlı",
"Music": "Müzik", "Music": "Müzik",
"Gaming": "Oyun", "Gaming": "Oyun",
"News": "Haberler", "News": "Haberler",
"Movies": "Filmler", "Movies": "Filmler",
"Download": "İndir", "Download": "İndir",
"Download as: ": "Şu Şekilde İndir: ", "Download as: ": "Şu şekilde indir: ",
"%A %B %-d, %Y": "%A %B %-d, %Y", "%A %B %-d, %Y": "%A %B %-d, %Y",
"(edited)": "(Düzenlendi)", "(edited)": "(düzenlendi)",
"YouTube comment permalink": "YouTube Yorumu Kalıcı Linki", "YouTube comment permalink": "YouTube yorumu kalıcı linki",
"permalink": "Kalıcı Link", "permalink": "kalıcı link",
"`x` marked it with a ❤": "`x` ❤ İle İşaretledi", "`x` marked it with a ❤": "`x` ❤ ile işaretledi",
"Audio mode": "Ses Modu", "Audio mode": "Ses modu",
"Video mode": "Video Modu", "Video mode": "Video modu",
"channel_tab_videos_label": "Videolar", "Videos": "Videolar",
"Playlists": "Oynatma Listeleri", "Playlists": "Oynatma listeleri",
"channel_tab_community_label": "Topluluk", "Community": "Topluluk",
"search_filters_sort_option_relevance": "İlgi", "relevance": "İlgi",
"search_filters_sort_option_rating": "Değerlendirme", "rating": "Değerlendirme",
"search_filters_sort_option_date": "Yükleme Tarihi", "date": "Yükleme tarihi",
"search_filters_sort_option_views": "Görüntüleme Sayısı", "views": "Görüntüleme sayısı",
"search_filters_type_label": "Tür", "content_type": "Tür",
"search_filters_duration_label": "Süre", "duration": "Süre",
"search_filters_features_label": "Özellikler", "features": "Özellikler",
"search_filters_sort_label": "Sıralama Ölçütü", "sort": "Sıralama Ölçütü",
"search_filters_date_option_hour": "Son Saat", "hour": "Son Saat",
"search_filters_date_option_today": "Bugün", "today": "Bugün",
"search_filters_date_option_week": "Bu Hafta", "week": "Bu hafta",
"search_filters_date_option_month": "Bu Ay", "month": "Bu ay",
"search_filters_date_option_year": "Bu Yıl", "year": "Bu yıl",
"search_filters_type_option_video": "Video", "video": "Video",
"search_filters_type_option_channel": "Kanal", "channel": "Kanal",
"search_filters_type_option_playlist": "Oynatma Listesi", "playlist": "Oynatma listesi",
"search_filters_type_option_movie": "Film", "movie": "Film",
"search_filters_type_option_show": "Gösteri", "show": "Gösteri",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "Alt Yazılar", "subtitles": "Alt yazılar",
"search_filters_features_option_c_commons": "Yaratıcı", "creative_commons": "Creative Commons",
"search_filters_features_option_three_d": "3D", "3d": "3B",
"search_filters_features_option_live": "Canlı", "live": "Canlı",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "Konum", "location": "Konum",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"Current version: ": "Şu Anki Sürüm: ", "filter": "Filtrele",
"next_steps_error_message": "Bundan Sonra Şunları Denemelisiniz: ", "Current version: ": "Şu anki sürüm: ",
"next_steps_error_message": "Bundan sonra şunları denemelisiniz: ",
"next_steps_error_message_refresh": "Yenile", "next_steps_error_message_refresh": "Yenile",
"next_steps_error_message_go_to_youtube": "YouTube'a Git", "next_steps_error_message_go_to_youtube": "YouTube'a git",
"search_filters_duration_option_short": "Kısa (4 Dakikadan Az)", "short": "Kısa (4 dakikadan az)",
"search_filters_duration_option_long": "Uzun (20 Dakikadan Fazla)", "long": "Uzun (20 dakikadan fazla)",
"footer_documentation": "Belgelendirme", "footer_documentation": "Belgelendirme",
"footer_source_code": "Kaynak Kodları", "footer_source_code": "Kaynak kodları",
"footer_original_source_code": "Orijinal Kaynak Kodları", "footer_original_source_code": "Orijinal kaynak kodları",
"footer_modfied_source_code": "Değiştirilmiş kaynak kodları", "footer_modfied_source_code": "Değiştirilmiş kaynak kodları",
"adminprefs_modified_source_code_url_label": "Değiştirilmiş Kaynak Kodları Deposunun URL'si", "adminprefs_modified_source_code_url_label": "Değiştirilmiş kaynak kodları deposunun URL'si",
"footer_donate_page": "Bağış Yap", "footer_donate_page": "Bağış yap",
"preferences_region_label": "İçerik Ülkesi: ", "preferences_region_label": "İçerik ülkesi: ",
"preferences_quality_dash_label": "Tercih Edilen DASH Video Kalitesi: ", "preferences_quality_dash_label": "Tercih edilen DASH video kalitesi: ",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_best": "En İyi", "preferences_quality_dash_option_best": "En iyi",
"preferences_quality_dash_option_worst": "En Kötü", "preferences_quality_dash_option_worst": "En kötü",
"preferences_quality_dash_option_4320p": "4320P", "preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_dash_option_2160p": "2160P", "preferences_quality_dash_option_2160p": "2160p",
"preferences_quality_dash_option_480p": "480P", "preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_360p": "360P", "preferences_quality_dash_option_360p": "360p",
"preferences_quality_dash_option_240p": "240P", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144P", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"none": "Yok", "none": "yok",
"videoinfo_started_streaming_x_ago": "`x` Önce Yayına Başladı", "videoinfo_started_streaming_x_ago": "`x` önce yayına başladı",
"videoinfo_youTube_embed_link": "Entegre Et", "videoinfo_youTube_embed_link": "Göm",
"videoinfo_invidious_embed_link": "Bağlantıyı Entegre Et", "videoinfo_invidious_embed_link": "Bağlantıyı Göm",
"user_created_playlists": "`x` Oluşturulan Oynatma Listeleri", "user_created_playlists": "`x` oluşturulan oynatma listeleri",
"user_saved_playlists": "`x` Kaydedilen Oynatma Listeleri", "user_saved_playlists": "`x` kaydedilen oynatma listeleri",
"preferences_quality_option_small": "Küçük", "preferences_quality_option_small": "Küçük",
"preferences_quality_dash_option_720p": "720P", "preferences_quality_dash_option_720p": "720p",
"preferences_quality_option_medium": "Orta", "preferences_quality_option_medium": "Orta",
"preferences_quality_dash_option_1440p": "1440P", "preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080P", "preferences_quality_dash_option_1080p": "1080p",
"Video unavailable": "Video Kullanılamıyor", "Video unavailable": "Video kullanılamıyor",
"preferences_quality_option_dash": "DASH (Uyarlanabilir Kalite)", "preferences_quality_option_dash": "DASH (uyarlanabilir kalite)",
"preferences_quality_dash_option_auto": "Otomatik", "preferences_quality_dash_option_auto": "Otomatik",
"search_filters_features_option_purchased": "Satın Alınan", "purchased": "Satın alınan",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"videoinfo_watch_on_youTube": "YouTube'da İzle", "videoinfo_watch_on_youTube": "YouTube'da izle",
"download_subtitles": "Alt Yazılar - `x` (.vtt)", "download_subtitles": "Alt yazılar - `x` (.vtt)",
"preferences_save_player_pos_label": "Oynatma Konumunu Kaydet: ", "preferences_save_player_pos_label": "Oynatma konumunu kaydet: ",
"generic_views_count": "{{count}} Görüntülenme", "generic_views_count": "{{count}} görüntüleme",
"generic_views_count_plural": "{{count}} Görüntülenme", "generic_views_count_plural": "{{count}} görüntüleme",
"generic_subscribers_count": "{{count}} Abone", "generic_subscribers_count": "{{count}} abone",
"generic_subscribers_count_plural": "{{count}} Abone", "generic_subscribers_count_plural": "{{count}} abone",
"generic_subscriptions_count": "{{count}} Abonelik", "generic_subscriptions_count": "{{count}} abonelik",
"generic_subscriptions_count_plural": "{{count}} Abonelik", "generic_subscriptions_count_plural": "{{count}} abonelik",
"subscriptions_unseen_notifs_count": "{{count}} Okunmamış Bildirim", "subscriptions_unseen_notifs_count": "{{count}} okunmamış bildirim",
"subscriptions_unseen_notifs_count_plural": "{{count}} Okunmamış Bildirim", "subscriptions_unseen_notifs_count_plural": "{{count}} okunmamış bildirim",
"comments_points_count": "{{count}} Puan", "comments_points_count": "{{count}} puan",
"comments_points_count_plural": "{{count}} Puan", "comments_points_count_plural": "{{count}} puan",
"generic_count_hours": "{{count}} Saat", "generic_count_hours": "{{count}} saat",
"generic_count_hours_plural": "{{count}} Saat", "generic_count_hours_plural": "{{count}} saat",
"generic_count_minutes": "{{count}} Dakika", "generic_count_minutes": "{{count}} dakika",
"generic_count_minutes_plural": "{{count}} Dakika", "generic_count_minutes_plural": "{{count}} dakika",
"generic_count_seconds": "{{count}} Saniye", "generic_count_seconds": "{{count}} saniye",
"generic_count_seconds_plural": "{{count}} Saniye", "generic_count_seconds_plural": "{{count}} saniye",
"generic_playlists_count": "{{count}} Oynatma Listesi", "generic_playlists_count": "{{count}} oynatma listesi",
"generic_playlists_count_plural": "{{count}} Oynatma Listesi", "generic_playlists_count_plural": "{{count}} oynatma listesi",
"tokens_count": "{{count}} Belirteç", "tokens_count": "{{count}} belirteç",
"tokens_count_plural": "{{count}} Belirteç", "tokens_count_plural": "{{count}} belirteç",
"comments_view_x_replies": "{{count}} Yanıtı Görüntüle", "comments_view_x_replies": "{{count}} yanıtı görüntüle",
"comments_view_x_replies_plural": "{{count}} Yanıtı Görüntüle", "comments_view_x_replies_plural": "{{count}} yanıtı görüntüle",
"generic_count_years": "{{count}} Yıl", "generic_count_years": "{{count}} yıl",
"generic_count_years_plural": "{{count}} Yıl", "generic_count_years_plural": "{{count}} yıl",
"generic_count_months": "{{count}} Ay", "generic_count_months": "{{count}} ay",
"generic_count_months_plural": "{{count}} Ay", "generic_count_months_plural": "{{count}} ay",
"generic_count_days": "{{count}} Gün", "generic_count_days": "{{count}} gün",
"generic_count_days_plural": "{{count}} Gün", "generic_count_days_plural": "{{count}} gün",
"generic_videos_count": "{{count}} Video", "generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} Video", "generic_videos_count_plural": "{{count}} video",
"generic_count_weeks": "{{count}} Hafta", "generic_count_weeks": "{{count}} hafta",
"generic_count_weeks_plural": "{{count}} Hafta", "generic_count_weeks_plural": "{{count}} hafta",
"crash_page_you_found_a_bug": "Görünüşe göre Invidious'ta bir hata buldunuz!", "crash_page_you_found_a_bug": "Görünüşe göre Invidious'ta bir hata buldunuz!",
"crash_page_before_reporting": "Bir hatayı bildirmeden önce, şunları yaptığınızdan emin olun:", "crash_page_before_reporting": "Bir hatayı bildirmeden önce, şunları yaptığınızdan emin olun:",
"crash_page_refresh": "<a href=\"`x`\">Sayfayı Yenilemeye</a> Çalıştınız", "crash_page_refresh": "<a href=\"`x`\">sayfayı yenilemeye</a> çalıştınız",
"crash_page_switch_instance": "<a href=\"`x`\">Başka Bir Örnek Kullanmaya</a> Çalıştınız", "crash_page_switch_instance": "<a href=\"`x`\">başka bir örnek kullanmaya</a> çalıştınız",
"crash_page_read_the_faq": "<a href=\"`x`\">Sık Sorulan Soruları (SSS)</a> Okudunuz", "crash_page_read_the_faq": "<a href=\"`x`\">Sık Sorulan Soruları (SSS)</a> okudunuz",
"crash_page_search_issue": "<a href=\"`x`\">GitHub'daki Sorunlarda</a> Aradınız", "crash_page_search_issue": "<a href=\"`x`\">Github'daki sorunlarda</a> aradınız",
"crash_page_report_issue": "Yukarıdakilerin hiçbiri yardımcı olmadıysa, lütfen <a href=\"`x`\">GitHub'da yeni bir sorun açın</a> (Tercihen İngilizce) ve mesajınıza aşağıdaki metni ekleyin (Bu metni ÇEVİRMEYİN):", "crash_page_report_issue": "Yukarıdakilerin hiçbiri yardımcı olmadıysa, lütfen <a href=\"`x`\">GitHub'da yeni bir sorun açın</a> (tercihen İngilizce) ve mesajınıza aşağıdaki metni ekleyin (bu metni ÇEVİRMEYİN):",
"English (United Kingdom)": "İngilizce (Birleşik Krallık)", "English (United Kingdom)": "İngilizce (Birleşik Krallık)",
"Chinese": "Çince", "Chinese": "Çince",
"Interlingue": "İnterlingue", "Interlingue": "İnterlingue",
"Italian (auto-generated)": "İtalyanca (Otomatik Oluşturuldu)", "Italian (auto-generated)": "İtalyanca (otomatik oluşturuldu)",
"Japanese (auto-generated)": "Japonca (Otomatik Oluşturuldu)", "Japanese (auto-generated)": "Japonca (otomatik oluşturuldu)",
"Portuguese (Brazil)": "Portekizce (Brezilya)", "Portuguese (Brazil)": "Portekizce (Brezilya)",
"Russian (auto-generated)": "Rusça (Otomatik Oluşturuldu)", "Russian (auto-generated)": "Rusça (otomatik oluşturuldu)",
"Spanish (auto-generated)": "İspanyolca (Otomatik Oluşturuldu)", "Spanish (auto-generated)": "İspanyolca (otomatik oluşturuldu)",
"Spanish (Mexico)": "İspanyolca (Meksika)", "Spanish (Mexico)": "İspanyolca (Meksika)",
"English (United States)": "İngilizce (ABD)", "English (United States)": "İngilizce (ABD)",
"Cantonese (Hong Kong)": "Kantonca (Hong Kong)", "Cantonese (Hong Kong)": "Kantonca (Hong Kong)",
"Chinese (Taiwan)": "Çince (Tayvan)", "Chinese (Taiwan)": "Çince (Tayvan)",
"Dutch (auto-generated)": "Felemenkçe (Otomatik Oluşturuldu)", "Dutch (auto-generated)": "Felemenkçe (otomatik oluşturuldu)",
"Indonesian (auto-generated)": "Endonezyaca (Otomatik Oluşturuldu)", "Indonesian (auto-generated)": "Endonezyaca (otomatik oluşturuldu)",
"Chinese (Hong Kong)": "Çince (Hong Kong)", "Chinese (Hong Kong)": "Çince (Hong Kong)",
"French (auto-generated)": "Fransızca (Otomatik Oluşturuldu)", "French (auto-generated)": "Fransızca (otomatik oluşturuldu)",
"Korean (auto-generated)": "Korece (Otomatik Oluşturuldu)", "Korean (auto-generated)": "Korece (otomatik oluşturuldu)",
"Turkish (auto-generated)": "Türkçe (Otomatik Oluşturuldu)", "Turkish (auto-generated)": "Türkçe (otomatik oluşturuldu)",
"Chinese (China)": "Çince (Çin)", "Chinese (China)": "Çince (Çin)",
"German (auto-generated)": "Almanca (Otomatik Oluşturuldu)", "German (auto-generated)": "Almanca (otomatik oluşturuldu)",
"Portuguese (auto-generated)": "Portekizce (Otomatik Oluşturuldu)", "Portuguese (auto-generated)": "Portekizce (otomatik oluşturuldu)",
"Spanish (Spain)": "İspanyolca (İspanya)", "Spanish (Spain)": "İspanyolca (İspanya)",
"Vietnamese (auto-generated)": "Vietnamca (Otomatik Oluşturuldu)", "Vietnamese (auto-generated)": "Vietnamca (otomatik oluşturuldu)",
"preferences_watch_history_label": "İzleme Geçmişini Etkinleştir: ", "preferences_watch_history_label": "İzleme geçmişini etkinleştir: "
"search_message_use_another_instance": " Ayrıca <a href=\"`x`\">başka bir örnekte arayabilirsiniz</a>.",
"search_filters_type_option_all": "Herhangi Bir Tür",
"search_filters_duration_option_none": "Herhangi Bir Süre",
"search_message_no_results": "Sonuç bulunamadı.",
"search_filters_date_label": "Yükleme Tarihi",
"search_filters_apply_button": "Seçili Filtreleri Uygula",
"search_filters_date_option_none": "Herhangi Bir Tarih",
"search_filters_duration_option_medium": "Orta (4 - 20 Dakika)",
"search_filters_features_option_vr180": "VR180",
"search_filters_title": "Filtreler",
"search_message_change_filters_or_query": "Arama sorgunuzu genişletmeyi ve/veya filtreleri değiştirmeyi deneyin.",
"Popular enabled: ": "Popüler Etkin: ",
"error_video_not_in_playlist": "İstenen video bu oynatma listesinde yok. <a href=\"`x`\">Oynatma listesi ana sayfası için buraya tıklayın.</a>",
"channel_tab_channels_label": "Kanallar",
"channel_tab_shorts_label": "Kısa Çekimler",
"channel_tab_streams_label": "Canlı Yayınlar",
"channel_tab_playlists_label": "Oynatma Listeleri",
"Album: ": "Albüm: ",
"Music in this video": "Bu videodaki müzik",
"Artist: ": "Sanatçı: ",
"Channel Sponsor": "Kanal Sponsoru",
"Song: ": "Şarkı: ",
"Standard YouTube license": "Standart YouTube lisansı",
"Download is disabled": "İndirme devre dışı",
"Import YouTube playlist (.csv)": "YouTube Oynatma Listesini İçe Aktar (.csv)"
} }

@ -1,6 +1,6 @@
{ {
"LIVE": "НАЖИВО", "LIVE": "ПРЯМИЙ ЕФІР",
"Shared `x` ago": "Розміщено `x` тому", "Shared `x` ago": "Розміщено `x` назад",
"Unsubscribe": "Відписатися", "Unsubscribe": "Відписатися",
"Subscribe": "Підписатися", "Subscribe": "Підписатися",
"View channel on YouTube": "Подивитися канал на YouTube", "View channel on YouTube": "Подивитися канал на YouTube",
@ -14,36 +14,39 @@
"Clear watch history?": "Очистити історію переглядів?", "Clear watch history?": "Очистити історію переглядів?",
"New password": "Новий пароль", "New password": "Новий пароль",
"New passwords must match": "Нові паролі не співпадають", "New passwords must match": "Нові паролі не співпадають",
"Cannot change password for Google accounts": "Змінити пароль обліківки Google неможливо",
"Authorize token?": "Авторизувати токен?", "Authorize token?": "Авторизувати токен?",
"Authorize token for `x`?": "Авторизувати токен для `x`?", "Authorize token for `x`?": "Авторизувати токен для `x`?",
"Yes": "Так", "Yes": "Так",
"No": "Ні", "No": "Ні",
"Import and Export Data": "Імпорт і експорт даних", "Import and Export Data": "Імпорт і експорт даних",
"Import": "Імпорт", "Import": "Імпорт",
"Import Invidious data": "Імпортувати JSON-дані Invidious", "Import Invidious data": "Імпортувати дані Invidious",
"Import YouTube subscriptions": "Імпортувати підписки з YouTube чи OPML", "Import YouTube subscriptions": "Імпортувати підписки з YouTube",
"Import FreeTube subscriptions (.db)": "Імпортувати підписки з FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Імпортувати підписки з FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Імпортувати підписки з NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Імпортувати підписки з NewPipe (.json)",
"Import NewPipe data (.zip)": "Імпортувати дані з NewPipe (.zip)", "Import NewPipe data (.zip)": "Імпортувати дані з NewPipe (.zip)",
"Export": "Експорт", "Export": "Експорт",
"Export subscriptions as OPML": "Експортувати підписки у форматі OPML", "Export subscriptions as OPML": "Експортувати підписки у форматі OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Експортувати підписки у форматі OPML (для NewPipe та FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Експортувати підписки у форматі OPML (для NewPipe та FreeTube)",
"Export data as JSON": "Експортувати дані Invidious у форматі JSON", "Export data as JSON": "Експортувати дані у форматі JSON",
"Delete account?": "Видалити обліковий запис?", "Delete account?": "Видалити обліківку?",
"History": "Історія", "History": "Історія",
"An alternative front-end to YouTube": "Альтернативний фронтенд до YouTube", "An alternative front-end to YouTube": "Альтернативний фронтенд до YouTube",
"JavaScript license information": "Інформація щодо ліцензій JavaScript", "JavaScript license information": "Інформація щодо ліцензій JavaScript",
"source": "джерело", "source": "джерело",
"Log in": "Увійти", "Log in": "Увійти",
"Log in/register": "Увійти або зареєструватися", "Log in/register": "Увійти або зареєструватися",
"Log in with Google": "Увійти через Google",
"User ID": "ID користувача", "User ID": "ID користувача",
"Password": "Пароль", "Password": "Пароль",
"Time (h:mm:ss):": "Час (г:хх:сс):", "Time (h:mm:ss):": "Час (г:мм:сс):",
"Text CAPTCHA": "Текст CAPTCHA", "Text CAPTCHA": "Текст капчі",
"Image CAPTCHA": "Зображення CAPTCHA", "Image CAPTCHA": "Зображення капчі",
"Sign In": "Увійти", "Sign In": "Увійти",
"Register": "Зареєструватися", "Register": "Зареєструватися",
"E-mail": "Електронна пошта", "E-mail": "Електронна пошта",
"Google verification code": "Код підтвердження Google",
"Preferences": "Налаштування", "Preferences": "Налаштування",
"preferences_category_player": "Налаштування програвача", "preferences_category_player": "Налаштування програвача",
"preferences_video_loop_label": "Завжди повторювати: ", "preferences_video_loop_label": "Завжди повторювати: ",
@ -51,7 +54,7 @@
"preferences_continue_label": "Завжди вмикати наступне відео: ", "preferences_continue_label": "Завжди вмикати наступне відео: ",
"preferences_continue_autoplay_label": "Автовідтворення наступного відео: ", "preferences_continue_autoplay_label": "Автовідтворення наступного відео: ",
"preferences_listen_label": "Режим «тільки звук» як усталений: ", "preferences_listen_label": "Режим «тільки звук» як усталений: ",
"preferences_local_label": "Відтворення відео через проксі: ", "preferences_local_label": "Програвати відео через проксі? ",
"preferences_speed_label": "Усталена швидкість відео: ", "preferences_speed_label": "Усталена швидкість відео: ",
"preferences_quality_label": "Пріорітетна якість відео: ", "preferences_quality_label": "Пріорітетна якість відео: ",
"preferences_volume_label": "Гучність відео: ", "preferences_volume_label": "Гучність відео: ",
@ -60,13 +63,13 @@
"reddit": "Reddit", "reddit": "Reddit",
"preferences_captions_label": "Основна мова субтитрів: ", "preferences_captions_label": "Основна мова субтитрів: ",
"Fallback captions: ": "Запасна мова субтитрів: ", "Fallback captions: ": "Запасна мова субтитрів: ",
"preferences_related_videos_label": "Показувати схожі відео: ", "preferences_related_videos_label": "Показувати схожі відео? ",
"preferences_annotations_label": "Завжди показувати анотації: ", "preferences_annotations_label": "Завжди показувати анотації? ",
"preferences_category_visual": "Налаштування сайту", "preferences_category_visual": "Налаштування сайту",
"preferences_player_style_label": "Стиль програвача: ", "preferences_player_style_label": "Стиль програвача: ",
"Dark mode: ": "Темний режим: ", "Dark mode: ": "Темне оформлення: ",
"preferences_dark_mode_label": "Тема: ", "preferences_dark_mode_label": "Тема: ",
"dark": "Темна", "dark": "темна",
"light": "Світла", "light": "Світла",
"preferences_thin_mode_label": "Полегшене оформлення: ", "preferences_thin_mode_label": "Полегшене оформлення: ",
"preferences_category_subscription": "Налаштування підписок", "preferences_category_subscription": "Налаштування підписок",
@ -98,11 +101,11 @@
"preferences_category_admin": "Адміністраторські налаштування", "preferences_category_admin": "Адміністраторські налаштування",
"preferences_default_home_label": "Усталена домашня сторінка: ", "preferences_default_home_label": "Усталена домашня сторінка: ",
"preferences_feed_menu_label": "Меню потоку з відео: ", "preferences_feed_menu_label": "Меню потоку з відео: ",
"Top enabled: ": "Увімкнути топ відео: ", "Top enabled: ": "Увімкнути топ відео? ",
"CAPTCHA enabled: ": "Увімкнути CAPTCHA: ", "CAPTCHA enabled: ": "Увімкнути капчу? ",
"Login enabled: ": "Увімкнути вхід: ", "Login enabled: ": "Увімкнути авторизацію? ",
"Registration enabled: ": "Увімкнути реєстрацію: ", "Registration enabled: ": "Увімкнути реєстрацію? ",
"Report statistics: ": "Повідомляти статистику: ", "Report statistics: ": "Повідомляти статистику? ",
"Save preferences": "Зберегти налаштування", "Save preferences": "Зберегти налаштування",
"Subscription manager": "Менеджер підписок", "Subscription manager": "Менеджер підписок",
"Token manager": "Менеджер токенів", "Token manager": "Менеджер токенів",
@ -122,7 +125,7 @@
"Private": "Особистий", "Private": "Особистий",
"View all playlists": "Переглянути всі списки відтворення", "View all playlists": "Переглянути всі списки відтворення",
"Updated `x` ago": "Оновлено `x` тому", "Updated `x` ago": "Оновлено `x` тому",
"Delete playlist `x`?": "Видалити список відтворення `x`?", "Delete playlist `x`?": "Видалити список відтворення \"x\"?",
"Delete playlist": "Видалити список відтворення", "Delete playlist": "Видалити список відтворення",
"Create playlist": "Створити список відтворення", "Create playlist": "Створити список відтворення",
"Title": "Заголовок", "Title": "Заголовок",
@ -139,7 +142,7 @@
"Whitelisted regions: ": "Доступно у регіонах: ", "Whitelisted regions: ": "Доступно у регіонах: ",
"Blacklisted regions: ": "Недоступно у регіонах: ", "Blacklisted regions: ": "Недоступно у регіонах: ",
"Shared `x`": "Розміщено `x`", "Shared `x`": "Розміщено `x`",
"Premieres in `x`": "Прем’єра за `x`", "Premieres in `x`": "Прем’єра через `x`",
"Premieres `x`": "Прем’єра `x`", "Premieres `x`": "Прем’єра `x`",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Схоже, у вас відключений JavaScript. Щоб побачити коментарі, натисніть сюда, але майте на увазі, що вони можуть завантажуватися трохи довше.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Схоже, у вас відключений JavaScript. Щоб побачити коментарі, натисніть сюда, але майте на увазі, що вони можуть завантажуватися трохи довше.",
"View YouTube comments": "Переглянути коментарі з YouTube", "View YouTube comments": "Переглянути коментарі з YouTube",
@ -152,16 +155,21 @@
"Hide replies": "Сховати відповіді", "Hide replies": "Сховати відповіді",
"Show replies": "Показати відповіді", "Show replies": "Показати відповіді",
"Incorrect password": "Неправильний пароль", "Incorrect password": "Неправильний пароль",
"Quota exceeded, try again in a few hours": "Ліміт перевищено, спробуйте знову за декілька годин",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Не вдається увійти. Перевірте, чи не ввімкнена двофакторна аутентифікація (за кодом чи смс).",
"Invalid TFA code": "Неправильний код двофакторної аутентифікації",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Не вдається увійти. Це може бути через те, що у вашій обліківці не ввімкнена двофакторна аутентифікація.",
"Wrong answer": "Неправильна відповідь", "Wrong answer": "Неправильна відповідь",
"Erroneous CAPTCHA": "Неправильна капча", "Erroneous CAPTCHA": "Неправильна капча",
"CAPTCHA is a required field": "Необхідно пройти CAPTCHA", "CAPTCHA is a required field": "Необхідно пройти капчу",
"User ID is a required field": "Необхідно ввести ID користувача", "User ID is a required field": "Необхідно ввести ID користувача",
"Password is a required field": "Необхідно ввести пароль", "Password is a required field": "Необхідно ввести пароль",
"Wrong username or password": "Неправильний логін чи пароль", "Wrong username or password": "Неправильний логін чи пароль",
"Please sign in using 'Log in with Google'": "Будь ласка, натисніть «Увійти через Google»",
"Password cannot be empty": "Пароль не може бути порожнім", "Password cannot be empty": "Пароль не може бути порожнім",
"Password cannot be longer than 55 characters": "Пароль не може бути довшим за 55 знаків", "Password cannot be longer than 55 characters": "Пароль не може бути довшим за 55 знаків",
"Please log in": "Будь ласка, увійдіть", "Please log in": "Будь ласка, увійдіть",
"Invidious Private Feed for `x`": "Приватний потік відео Invidious для `x`", "Invidious Private Feed for `x`": "Приватний поток відео Invidious для `x`",
"channel:`x`": "канал: `x`", "channel:`x`": "канал: `x`",
"Deleted or invalid channel": "Канал видалено або не знайдено", "Deleted or invalid channel": "Канал видалено або не знайдено",
"This channel does not exist.": "Такого каналу не існує.", "This channel does not exist.": "Такого каналу не існує.",
@ -181,7 +189,7 @@
"No such user": "Недопустиме ім’я користувача", "No such user": "Недопустиме ім’я користувача",
"Token is expired, please try again": "Термін дії токена закінчився, спробуйте пізніше", "Token is expired, please try again": "Термін дії токена закінчився, спробуйте пізніше",
"English": "Англійська", "English": "Англійська",
"English (auto-generated)": "Англійська (автогенератор)", "English (auto-generated)": "Англійська (сгенеровано автоматично)",
"Afrikaans": "Африкаанс", "Afrikaans": "Африкаанс",
"Albanian": "Албанська", "Albanian": "Албанська",
"Amharic": "Амхарська", "Amharic": "Амхарська",
@ -267,7 +275,7 @@
"Somali": "Сомалійська", "Somali": "Сомалійська",
"Southern Sotho": "Сесото (південна сото)", "Southern Sotho": "Сесото (південна сото)",
"Spanish": "Іспанська", "Spanish": "Іспанська",
"Spanish (Latin America)": "Іспанська (Латинська Америка)", "Spanish (Latin America)": "Испанська (Латинська Америка)",
"Sundanese": "Сунданська", "Sundanese": "Сунданська",
"Swahili": "Суахілі", "Swahili": "Суахілі",
"Swedish": "Шведська", "Swedish": "Шведська",
@ -307,190 +315,8 @@
"`x` marked it with a ❤": "❤ цьому від каналу `x`", "`x` marked it with a ❤": "❤ цьому від каналу `x`",
"Audio mode": "Аудіорежим", "Audio mode": "Аудіорежим",
"Video mode": "Відеорежим", "Video mode": "Відеорежим",
"channel_tab_videos_label": "Відео", "Videos": "Відео",
"Playlists": "Плейлисти", "Playlists": "Плейлисти",
"channel_tab_community_label": "Спільнота", "Community": "Спільнота",
"Current version: ": "Поточна версія: ", "Current version: ": "Поточна версія: "
"generic_views_count_0": "{{count}} перегляд",
"generic_views_count_1": "{{count}} перегляди",
"generic_views_count_2": "{{count}} переглядів",
"generic_videos_count_0": "{{count}} відео",
"generic_videos_count_1": "{{count}} відео",
"generic_videos_count_2": "{{count}} відео",
"generic_playlists_count_0": "{{count}} список відтворення",
"generic_playlists_count_1": "{{count}} списки відтворення",
"generic_playlists_count_2": "{{count}} списків відтворення",
"generic_subscribers_count_0": "{{count}} стежить",
"generic_subscribers_count_1": "{{count}} стежать",
"generic_subscribers_count_2": "{{count}} стежать",
"generic_subscriptions_count_0": "{{count}} підписка",
"generic_subscriptions_count_1": "{{count}} підписки",
"generic_subscriptions_count_2": "{{count}} підписок",
"tokens_count_0": "{{count}} токен",
"tokens_count_1": "{{count}} токени",
"tokens_count_2": "{{count}} токенів",
"subscriptions_unseen_notifs_count_0": "{{count}} нове сповіщення",
"subscriptions_unseen_notifs_count_1": "{{count}} нові сповіщення",
"subscriptions_unseen_notifs_count_2": "{{count}} нових сповіщень",
"comments_view_x_replies_0": "Переглянути {{count}} відповідь",
"comments_view_x_replies_1": "Переглянути {{count}} відповіді",
"comments_view_x_replies_2": "Переглянути {{count}} відповідей",
"generic_count_years_0": "{{count}} рік",
"generic_count_years_1": "{{count}} роки",
"generic_count_years_2": "{{count}} років",
"generic_count_weeks_0": "{{count}} тиждень",
"generic_count_weeks_1": "{{count}} тижні",
"generic_count_weeks_2": "{{count}} тижнів",
"generic_count_days_0": "{{count}} день",
"generic_count_days_1": "{{count}} дні",
"generic_count_days_2": "{{count}} днів",
"generic_count_hours_0": "{{count}} годину",
"generic_count_hours_1": "{{count}} години",
"generic_count_hours_2": "{{count}} годин",
"crash_page_switch_instance": "спробуйте <a href=\"`x`\">використати інший сервер</a>",
"crash_page_read_the_faq": "прочитайте <a href=\"`x`\">часті питання (ЧаП)</a>",
"crash_page_search_issue": "перегляньте <a href=\"`x`\">наявні обговорення на GitHub</a>",
"crash_page_report_issue": "Якщо нічого не допомогло, просимо <a href=\"`x`\">створити обговорення на GitHub</a> (бажано англійською), додавши наступний текст у повідомлення (НЕ перекладайте цього тексту):",
"Chinese (Hong Kong)": "Китайська (Гонконг)",
"Cantonese (Hong Kong)": "Кантонська (Гонконг)",
"Chinese": "Китайська",
"Chinese (China)": "Китайська (Китай)",
"Interlingue": "Інтерлінгва",
"Italian (auto-generated)": "Італійська (автогенератор)",
"Turkish (auto-generated)": "Турецька (автогенератор)",
"Vietnamese (auto-generated)": "В'єтнамська (автогенератор)",
"user_created_playlists": "Створено списків відтворення: `x`",
"user_saved_playlists": "Збережено списків відтворення: `x`",
"Video unavailable": "Відео недоступне",
"preferences_watch_history_label": "Історія переглядів: ",
"preferences_quality_dash_label": "Бажана DASH-якість відео: ",
"preferences_quality_dash_option_144p": "144p",
"preferences_vr_mode_label": "Взаємодія з 360-градусними відео (потребує WebGL): ",
"Released under the AGPLv3 on Github.": "Випущено під AGPLv3 на GitHub.",
"English (United Kingdom)": "Англійська (Сполучене Королівство)",
"English (United States)": "Англійська (США)",
"French (auto-generated)": "Французька (автогенератор)",
"German (auto-generated)": "Німецька (автогенератор)",
"Portuguese (auto-generated)": "Португальська (автогенератор)",
"Portuguese (Brazil)": "Португальська (Бразилія)",
"Russian (auto-generated)": ":^)",
"Spanish (auto-generated)": "Іспанська (автогенератор)",
"Spanish (Mexico)": "Іспанська (Мексика)",
"Spanish (Spain)": "Іспанська (Іспанія)",
"next_steps_error_message_go_to_youtube": "Перейти до YouTube",
"footer_donate_page": "Підтримати",
"footer_documentation": "Документація",
"footer_source_code": "Джерельний код",
"footer_original_source_code": "Оригінал джерельного коду",
"footer_modfied_source_code": "Змінений джерельний код",
"adminprefs_modified_source_code_url_label": "URL-адреса репозиторію зміненого джерельного коду",
"none": "нема",
"videoinfo_started_streaming_x_ago": "Трансляцію розпочато `x` тому",
"crash_page_you_found_a_bug": "Схоже, ви знайшли ваду в Invidious!",
"crash_page_before_reporting": "Перш ніж прозвітувати про ваду:",
"crash_page_refresh": "спробуйте <a href=\"`x`\">оновити сторінку</a>",
"preferences_quality_dash_option_auto": "Авто",
"preferences_quality_dash_option_best": "Найкраща",
"preferences_quality_dash_option_worst": "Найгірша",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_save_player_pos_label": "Зберегти позицію відтворення: ",
"preferences_show_nick_label": "Псевдонім угорі: ",
"Show more": "Докладніше",
"next_steps_error_message": "Після чого спробуйте: ",
"next_steps_error_message_refresh": "Оновити сторінку",
"Search": "Пошук",
"preferences_extend_desc_label": "Автоматично розгортати опис відео: ",
"preferences_category_misc": "Різноманітні параметри",
"Show less": "Коротше",
"preferences_quality_option_small": "Низька",
"preferences_quality_dash_option_240p": "240p",
"preferences_quality_option_medium": "Середня",
"preferences_quality_dash_option_4320p": "4320p",
"invidious": "Invidious",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_360p": "360p",
"preferences_region_label": "Ваша країна: ",
"preferences_quality_option_dash": "DASH (змінна якість)",
"preferences_quality_option_hd720": "HD720",
"preferences_quality_dash_option_2160p": "2160p",
"preferences_automatic_instance_redirect_label": "Автоматична зміна сервера (redirect.invidious.io як резерв): ",
"Switch Invidious Instance": "Інший сервер Invidious",
"preferences_quality_dash_option_480p": "480p",
"Chinese (Taiwan)": "Китайська (Тайвань)",
"Dutch (auto-generated)": "Нідерландська (автогенератор)",
"Indonesian (auto-generated)": "Індонезійська (автогенератор)",
"Japanese (auto-generated)": "Японська (автогенератор)",
"Korean (auto-generated)": "Корейська (автогенератор)",
"generic_count_months_0": "{{count}} місяць",
"generic_count_months_1": "{{count}} місяці",
"generic_count_months_2": "{{count}} місяців",
"videoinfo_youTube_embed_link": "Вкласти",
"generic_count_minutes_0": "{{count}} хвилину",
"generic_count_minutes_1": "{{count}} хвилини",
"generic_count_minutes_2": "{{count}} хвилин",
"generic_count_seconds_0": "{{count}} секунду",
"generic_count_seconds_1": "{{count}} секунди",
"generic_count_seconds_2": "{{count}} секунд",
"videoinfo_watch_on_youTube": "Переглянути на YouTube",
"videoinfo_invidious_embed_link": "Вкласти посилання",
"download_subtitles": "Субтитри — `x` (.vtt)",
"comments_points_count_0": "{{count}} пункт",
"comments_points_count_1": "{{count}} пункти",
"comments_points_count_2": "{{count}} пунктів",
"search_filters_features_option_three_d": "3D",
"search_filters_features_option_location": "Геомітка",
"search_filters_duration_option_none": "Будь-які",
"search_filters_features_option_hd": "HD",
"search_message_change_filters_or_query": "Спробуйте ширший запит і/або інші фільтри.",
"search_filters_type_option_all": "Будь-що",
"search_filters_type_option_movie": "Фільм",
"search_filters_type_option_show": "Шоу",
"search_filters_duration_label": "Тривалість",
"search_filters_duration_option_short": "Короткі (до 4 хвилин)",
"search_message_no_results": "Результатів не знайдено.",
"search_filters_date_label": "Дата вивантаження",
"search_filters_date_option_none": "Будь-яка дата",
"search_filters_date_option_today": "Сьогодні",
"search_filters_date_option_week": "Цей тиждень",
"search_filters_type_label": "Тип",
"search_filters_type_option_channel": "Канал",
"search_message_use_another_instance": " Можете також <a href=\"`x`\">пошукати іншим сервером</a>.",
"search_filters_title": "Фільтри",
"search_filters_date_option_hour": "Остання година",
"search_filters_date_option_month": "Цей місяць",
"search_filters_date_option_year": "Цей рік",
"search_filters_type_option_video": "Відео",
"search_filters_type_option_playlist": "Добірка",
"search_filters_duration_option_medium": "Середні (420 хвилин)",
"search_filters_duration_option_long": "Довгі (понад 20 хвилин)",
"search_filters_features_label": "Особливості",
"search_filters_features_option_live": "Наживо",
"search_filters_features_option_four_k": "4K",
"search_filters_features_option_subtitles": "Субтитри",
"search_filters_features_option_c_commons": "Creative Commons",
"search_filters_features_option_three_sixty": "360°",
"search_filters_features_option_hdr": "HDR",
"search_filters_sort_label": "Спершу",
"search_filters_sort_option_date": "Нещодавні",
"search_filters_apply_button": "Застосувати фільтри",
"search_filters_features_option_vr180": "VR180",
"search_filters_features_option_purchased": "Придбано",
"search_filters_sort_option_relevance": "Відповідні",
"search_filters_sort_option_rating": "Рейтингові",
"search_filters_sort_option_views": "Популярні",
"Popular enabled: ": "Популярне ввімкнено: ",
"error_video_not_in_playlist": "Запитуваного відео в цьому списку відтворення не існує. <a href=\"`x`\">Клацніть тут, щоб переглянути домашню сторінку списку відтворення.</a>",
"channel_tab_shorts_label": "Shorts",
"channel_tab_streams_label": "Прямі трансляції",
"channel_tab_playlists_label": "Добірки",
"channel_tab_channels_label": "Канали",
"Music in this video": "Музика в цьому відео",
"Artist: ": "Виконавець: ",
"Album: ": "Альбом: ",
"Song: ": "Пісня: ",
"Channel Sponsor": "Спонсор каналу",
"Standard YouTube license": "Стандартна ліцензія YouTube",
"Download is disabled": "Завантаження вимкнено",
"Import YouTube playlist (.csv)": "Імпорт списку відтворення YouTube (.csv)"
} }

@ -16,6 +16,7 @@
"Clear watch history?": "Xóa lịch sử xem?", "Clear watch history?": "Xóa lịch sử xem?",
"New password": "Mật khẩu mới", "New password": "Mật khẩu mới",
"New passwords must match": "Mật khẩu mới phải khớp", "New passwords must match": "Mật khẩu mới phải khớp",
"Cannot change password for Google accounts": "Không thể thay đổi mật khẩu cho tài khoản Google",
"Authorize token?": "Cấp phép mã thông báo?", "Authorize token?": "Cấp phép mã thông báo?",
"Authorize token for `x`?": "Cấp phép mã thông báo cho` x`?", "Authorize token for `x`?": "Cấp phép mã thông báo cho` x`?",
"Yes": "Đúng", "Yes": "Đúng",
@ -38,6 +39,7 @@
"source": "nguồn", "source": "nguồn",
"Log in": "Đăng nhập", "Log in": "Đăng nhập",
"Log in/register": "Đăng nhập / đăng ký", "Log in/register": "Đăng nhập / đăng ký",
"Log in with Google": "Đăng nhập bằng Google",
"User ID": "Tên người dùng", "User ID": "Tên người dùng",
"Password": "Mật khẩu", "Password": "Mật khẩu",
"Time (h:mm:ss):": "Thời gian (h: mm: ss):", "Time (h:mm:ss):": "Thời gian (h: mm: ss):",
@ -46,6 +48,7 @@
"Sign In": "Đăng nhập", "Sign In": "Đăng nhập",
"Register": "Đăng ký", "Register": "Đăng ký",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Mã xác minh của Google",
"Preferences": "Sở thích", "Preferences": "Sở thích",
"preferences_category_player": "Tùy chọn người chơi", "preferences_category_player": "Tùy chọn người chơi",
"preferences_video_loop_label": "Luôn lặp lại: ", "preferences_video_loop_label": "Luôn lặp lại: ",
@ -135,6 +138,7 @@
"Show less": "Hiện ít hơn", "Show less": "Hiện ít hơn",
"Watch on YouTube": "Xem trên YouTube", "Watch on YouTube": "Xem trên YouTube",
"Switch Invidious Instance": "Chuyển phiên bản Invidious", "Switch Invidious Instance": "Chuyển phiên bản Invidious",
"Broken? Try another Invidious Instance": "Bị hỏng? Hãy thử một Phiên bản Invidious khác",
"Hide annotations": "Ẩn chú thích", "Hide annotations": "Ẩn chú thích",
"Show annotations": "Hiển thị chú thích", "Show annotations": "Hiển thị chú thích",
"Genre: ": "Thể loại: ", "Genre: ": "Thể loại: ",
@ -149,12 +153,17 @@
"Hide replies": "Ẩn câu trả lời", "Hide replies": "Ẩn câu trả lời",
"Show replies": "Hiển thị câu trả lời", "Show replies": "Hiển thị câu trả lời",
"Incorrect password": "Mật khẩu không đúng", "Incorrect password": "Mật khẩu không đúng",
"Quota exceeded, try again in a few hours": "Đã vượt quá hạn ngạch, hãy thử lại sau vài giờ nữa",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Không thể đăng nhập, hãy đảm bảo rằng xác thực hai yếu tố (Authenticator hoặc SMS) được bật.",
"Invalid TFA code": "Mã TFA không hợp lệ",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Đăng nhập không thành công. Điều này có thể là do xác thực hai yếu tố chưa được bật cho tài khoản của bạn.",
"Wrong answer": "Câu trả lời sai", "Wrong answer": "Câu trả lời sai",
"Erroneous CAPTCHA": "CAPTCHA bị lỗi", "Erroneous CAPTCHA": "CAPTCHA bị lỗi",
"CAPTCHA is a required field": "CAPTCHA là trường bắt buộc", "CAPTCHA is a required field": "CAPTCHA là trường bắt buộc",
"User ID is a required field": "User ID là trường bắt buộc", "User ID is a required field": "User ID là trường bắt buộc",
"Password is a required field": "Mật khẩu là trường bắt buộc", "Password is a required field": "Mật khẩu là trường bắt buộc",
"Wrong username or password": "Tên người dùng hoặc mật khẩu sai", "Wrong username or password": "Tên người dùng hoặc mật khẩu sai",
"Please sign in using 'Log in with Google'": "Vui lòng đăng nhập bằng 'Đăng nhập bằng Google'",
"Password cannot be empty": "Mật khẩu không được để trống", "Password cannot be empty": "Mật khẩu không được để trống",
"Password cannot be longer than 55 characters": "Mật khẩu không được dài hơn 55 ký tự", "Password cannot be longer than 55 characters": "Mật khẩu không được dài hơn 55 ký tự",
"Please log in": "Xin vui lòng đăng nhập", "Please log in": "Xin vui lòng đăng nhập",
@ -303,40 +312,35 @@
"`x` marked it with a ❤": "` x` đã đánh dấu nó bằng một ❤", "`x` marked it with a ❤": "` x` đã đánh dấu nó bằng một ❤",
"Audio mode": "Chế độ âm thanh", "Audio mode": "Chế độ âm thanh",
"Video mode": "Chế độ quay", "Video mode": "Chế độ quay",
"channel_tab_videos_label": "Video", "Videos": "Video",
"Playlists": "Danh sách phát", "Playlists": "Danh sách phát",
"channel_tab_community_label": "Cộng đồng", "Community": "Cộng đồng",
"search_filters_sort_option_relevance": "liên quan", "relevance": "liên quan",
"search_filters_sort_option_rating": "Xếp hạng", "rating": "Xếp hạng",
"search_filters_sort_option_date": "ngày", "date": "ngày",
"search_filters_sort_option_views": "lượt xem", "views": "lượt xem",
"search_filters_type_label": "content_type", "content_type": "content_type",
"search_filters_duration_label": "thời lượng", "duration": "thời lượng",
"search_filters_features_label": "đặc trưng", "features": "đặc trưng",
"search_filters_sort_label": "sắp xếp", "sort": "sắp xếp",
"search_filters_date_option_hour": "giờ", "hour": "giờ",
"search_filters_date_option_today": "hôm nay", "today": "hôm nay",
"search_filters_date_option_week": "tuần", "week": "tuần",
"search_filters_date_option_month": "tháng", "month": "tháng",
"search_filters_date_option_year": "năm", "year": "năm",
"search_filters_type_option_video": "video", "video": "video",
"search_filters_type_option_channel": "kênh", "channel": "kênh",
"search_filters_type_option_playlist": "danh sách phát", "playlist": "danh sách phát",
"search_filters_type_option_movie": "bộ phim", "movie": "bộ phim",
"search_filters_type_option_show": "chỉ", "show": "chỉ",
"search_filters_features_option_hd": "hd", "hd": "hd",
"search_filters_features_option_subtitles": "phụ đề", "subtitles": "phụ đề",
"search_filters_features_option_c_commons": "Commons sáng tạo", "creative_commons": "Commons sáng tạo",
"search_filters_features_option_three_d": "3d", "3d": "3d",
"search_filters_features_option_live": "trực tiếp", "live": "trực tiếp",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "vị trí", "location": "vị trí",
"search_filters_features_option_hdr": "hdr", "hdr": "hdr",
"Current version: ": "Phiên bản hiện tại: ", "filter": "bộ lọc",
"search_filters_title": "bộ lọc", "Current version: ": "Phiên bản hiện tại: "
"generic_playlists_count": "{{count}} danh sách phát",
"generic_views_count": "{{count}} lượt xem",
"View `x` comments": {
"": "Xem `x` bình luận"
}
} }

@ -19,6 +19,7 @@
"Clear watch history?": "清除观看历史?", "Clear watch history?": "清除观看历史?",
"New password": "新密码", "New password": "新密码",
"New passwords must match": "新密码必须匹配", "New passwords must match": "新密码必须匹配",
"Cannot change password for Google accounts": "无法为 Google 账户更改密码",
"Authorize token?": "授权令牌?", "Authorize token?": "授权令牌?",
"Authorize token for `x`?": "`x` 的授权令牌?", "Authorize token for `x`?": "`x` 的授权令牌?",
"Yes": "是", "Yes": "是",
@ -41,6 +42,7 @@
"source": "source", "source": "source",
"Log in": "登录", "Log in": "登录",
"Log in/register": "登录/注册", "Log in/register": "登录/注册",
"Log in with Google": "使用 Google 账户登录",
"User ID": "用户 ID", "User ID": "用户 ID",
"Password": "密码", "Password": "密码",
"Time (h:mm:ss):": "时间 (h:mm:ss):", "Time (h:mm:ss):": "时间 (h:mm:ss):",
@ -49,6 +51,7 @@
"Sign In": "登录", "Sign In": "登录",
"Register": "注册", "Register": "注册",
"E-mail": "E-mail", "E-mail": "E-mail",
"Google verification code": "Google 验证代码",
"Preferences": "偏好设置", "Preferences": "偏好设置",
"preferences_category_player": "播放器偏好设置", "preferences_category_player": "播放器偏好设置",
"preferences_video_loop_label": "始终循环: ", "preferences_video_loop_label": "始终循环: ",
@ -125,7 +128,7 @@
"subscriptions_unseen_notifs_count_0": "{{count}} 条未读通知", "subscriptions_unseen_notifs_count_0": "{{count}} 条未读通知",
"search": "搜索", "search": "搜索",
"Log out": "登出", "Log out": "登出",
"Released under the AGPLv3 on Github.": "依据 AGPLv3 许可证发布于 GitHub。", "Released under the AGPLv3 on Github.": "依据 AGPLv3 许可证发布于 Github。",
"Source available here.": "源码可在此查看。", "Source available here.": "源码可在此查看。",
"View JavaScript license information.": "查看 JavaScript 协议信息。", "View JavaScript license information.": "查看 JavaScript 协议信息。",
"View privacy policy.": "查看隐私政策。", "View privacy policy.": "查看隐私政策。",
@ -145,6 +148,7 @@
"Show less": "显示较少", "Show less": "显示较少",
"Watch on YouTube": "在 YouTube 观看", "Watch on YouTube": "在 YouTube 观看",
"Switch Invidious Instance": "切换 Invidious 实例", "Switch Invidious Instance": "切换 Invidious 实例",
"Broken? Try another Invidious Instance": "无法正常工作? 尝试另一个 Invidious 实例",
"Hide annotations": "隐藏注释", "Hide annotations": "隐藏注释",
"Show annotations": "显示注释", "Show annotations": "显示注释",
"Genre: ": "风格: ", "Genre: ": "风格: ",
@ -168,12 +172,17 @@
"Hide replies": "隐藏回复", "Hide replies": "隐藏回复",
"Show replies": "显示回复", "Show replies": "显示回复",
"Incorrect password": "密码错误", "Incorrect password": "密码错误",
"Quota exceeded, try again in a few hours": "已超出限额,请于几小时后重试",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "无法登录。请确认你的短信或验证器的二步验证已打开。",
"Invalid TFA code": "无效的二步验证码",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "登录失败。可能是因为二步验证未打开。",
"Wrong answer": "错误的回复", "Wrong answer": "错误的回复",
"Erroneous CAPTCHA": "验证码错误", "Erroneous CAPTCHA": "验证码错误",
"CAPTCHA is a required field": "验证码必填", "CAPTCHA is a required field": "验证码必填",
"User ID is a required field": "用户名必填", "User ID is a required field": "用户名必填",
"Password is a required field": "密码必填", "Password is a required field": "密码必填",
"Wrong username or password": "用户名或密码错误", "Wrong username or password": "用户名或密码错误",
"Please sign in using 'Log in with Google'": "请通过谷歌账户登录",
"Password cannot be empty": "密码不能为空", "Password cannot be empty": "密码不能为空",
"Password cannot be longer than 55 characters": "密码长度不能大于 55", "Password cannot be longer than 55 characters": "密码长度不能大于 55",
"Please log in": "请登录", "Please log in": "请登录",
@ -333,41 +342,42 @@
"`x` marked it with a ❤": "`x` 为此加 ❤", "`x` marked it with a ❤": "`x` 为此加 ❤",
"Audio mode": "音频模式", "Audio mode": "音频模式",
"Video mode": "视频模式", "Video mode": "视频模式",
"channel_tab_videos_label": "视频", "Videos": "视频",
"Playlists": "播放列表", "Playlists": "播放列表",
"channel_tab_community_label": "社区", "Community": "社区",
"search_filters_sort_option_relevance": "相关度", "relevance": "相关度",
"search_filters_sort_option_rating": "评分", "rating": "评分",
"search_filters_sort_option_date": "上传日期", "date": "上传日期",
"search_filters_sort_option_views": "观看次数", "views": "观看次数",
"search_filters_type_label": "类型", "content_type": "类型",
"search_filters_duration_label": "持续时间", "duration": "持续时间",
"search_filters_features_label": "功能", "features": "功能",
"search_filters_sort_label": "排序依据", "sort": "排序依据",
"search_filters_date_option_hour": "上个小时", "hour": "上个小时",
"search_filters_date_option_today": "今日", "today": "今日",
"search_filters_date_option_week": "本周", "week": "本周",
"search_filters_date_option_month": "本月", "month": "本月",
"search_filters_date_option_year": "今年", "year": "今年",
"search_filters_type_option_video": "视频", "video": "视频",
"search_filters_type_option_channel": "频道", "channel": "频道",
"search_filters_type_option_playlist": "播放列表", "playlist": "播放列表",
"search_filters_type_option_movie": "电影", "movie": "电影",
"search_filters_type_option_show": "真人秀", "show": "真人秀",
"search_filters_features_option_hd": "高清", "hd": "高清",
"search_filters_features_option_subtitles": "字幕", "subtitles": "字幕",
"search_filters_features_option_c_commons": "creative_commons 许可", "creative_commons": "creative_commons 许可",
"search_filters_features_option_three_d": "3d", "3d": "3d",
"search_filters_features_option_live": "直播", "live": "直播",
"search_filters_features_option_four_k": "4k", "4k": "4k",
"search_filters_features_option_location": "位置", "location": "位置",
"search_filters_features_option_hdr": "hdr", "hdr": "hdr",
"filter": "过滤器",
"Current version: ": "当前版本: ", "Current version: ": "当前版本: ",
"next_steps_error_message": "在此之后你应尝试: ", "next_steps_error_message": "在此之后你应尝试: ",
"next_steps_error_message_refresh": "刷新", "next_steps_error_message_refresh": "刷新",
"next_steps_error_message_go_to_youtube": "转到 YouTube", "next_steps_error_message_go_to_youtube": "转到 YouTube",
"search_filters_duration_option_short": "短少于4分钟", "short": "短少于4分钟",
"search_filters_duration_option_long": "长(多于 20 分钟)", "long": "长(多于 20 分钟)",
"footer_documentation": "文档", "footer_documentation": "文档",
"footer_source_code": "源代码", "footer_source_code": "源代码",
"footer_modfied_source_code": "修改的源代码", "footer_modfied_source_code": "修改的源代码",
@ -381,7 +391,7 @@
"crash_page_refresh": "试着 <a href=\"`x`\">刷新页面</a>", "crash_page_refresh": "试着 <a href=\"`x`\">刷新页面</a>",
"crash_page_switch_instance": "试着<a href=\"`x`\">使用另一个实例</a>", "crash_page_switch_instance": "试着<a href=\"`x`\">使用另一个实例</a>",
"crash_page_read_the_faq": "阅读<a href=\"`x`\">常见问题</a>", "crash_page_read_the_faq": "阅读<a href=\"`x`\">常见问题</a>",
"crash_page_search_issue": "搜索过 <a href=\"`x`\">GitHub 上的现有 issue</a>", "crash_page_search_issue": "搜索过 <a href=\"`x`\">Github 上的现有 issue</a>",
"crash_page_report_issue": "如果以上这些都没用的话,请<a href=\"`x`\">在 Github 上新开一个 issue</a>(最好用英语撰写),并在你的消息中包含以下文本(不要翻译该文本)", "crash_page_report_issue": "如果以上这些都没用的话,请<a href=\"`x`\">在 Github 上新开一个 issue</a>(最好用英语撰写),并在你的消息中包含以下文本(不要翻译该文本)",
"videoinfo_invidious_embed_link": "嵌入链接", "videoinfo_invidious_embed_link": "嵌入链接",
"download_subtitles": "字幕 - `x` (.vtt)", "download_subtitles": "字幕 - `x` (.vtt)",
@ -408,8 +418,8 @@
"user_created_playlists": "`x` 创建了播放列表", "user_created_playlists": "`x` 创建了播放列表",
"user_saved_playlists": "`x` 保存了播放列表", "user_saved_playlists": "`x` 保存了播放列表",
"Video unavailable": "视频不可用", "Video unavailable": "视频不可用",
"search_filters_features_option_purchased": "已购买", "purchased": "已购买",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "无", "none": "无",
"preferences_save_player_pos_label": "保存播放位置: ", "preferences_save_player_pos_label": "保存播放位置: ",
"Spanish (Mexico)": "西班牙语 (墨西哥)", "Spanish (Mexico)": "西班牙语 (墨西哥)",
@ -435,30 +445,5 @@
"French (auto-generated)": "法语 (自动生成)", "French (auto-generated)": "法语 (自动生成)",
"Turkish (auto-generated)": "土耳其语 (自动生成)", "Turkish (auto-generated)": "土耳其语 (自动生成)",
"Spanish (Spain)": "西班牙语 (西班牙)", "Spanish (Spain)": "西班牙语 (西班牙)",
"preferences_watch_history_label": "启用观看历史: ", "preferences_watch_history_label": "启用观看历史: "
"search_message_use_another_instance": " 你也可以 <a href=\"`x`\">在另一实例上搜索</a>。",
"search_filters_title": "过滤器",
"search_filters_date_label": "上传日期",
"search_filters_apply_button": "应用所选过滤器",
"search_message_no_results": "没找到结果。",
"search_filters_duration_option_medium": "中等4-20 分钟)",
"search_filters_date_option_none": "任意日期",
"search_message_change_filters_or_query": "尝试扩大你的搜索查询和/或更改过滤器。",
"search_filters_duration_option_none": "任意时长",
"search_filters_type_option_all": "任意类型",
"search_filters_features_option_vr180": "VR180",
"Popular enabled: ": "已启用流行度: ",
"error_video_not_in_playlist": "此播放列表中不存在请求的视频。 <a href=\"`x`\">单击析出查看播放列表主页。</a>",
"Music in this video": "此视频中的音乐",
"channel_tab_playlists_label": "播放列表",
"Artist: ": "艺术家: ",
"channel_tab_streams_label": "直播",
"Album: ": "专辑: ",
"channel_tab_shorts_label": "短视频",
"channel_tab_channels_label": "频道",
"Song: ": "歌曲: ",
"Channel Sponsor": "频道赞助者",
"Standard YouTube license": "标准 YouTube 许可证",
"Download is disabled": "已禁用下载",
"Import YouTube playlist (.csv)": "导入 YouTube 播放列表(.csv"
} }

@ -19,6 +19,7 @@
"Clear watch history?": "清除觀看歷史?", "Clear watch history?": "清除觀看歷史?",
"New password": "新密碼", "New password": "新密碼",
"New passwords must match": "新密碼必須符合", "New passwords must match": "新密碼必須符合",
"Cannot change password for Google accounts": "無法變更 Google 帳號的密碼",
"Authorize token?": "授權 token", "Authorize token?": "授權 token",
"Authorize token for `x`?": "`x` 的授權 token", "Authorize token for `x`?": "`x` 的授權 token",
"Yes": "是", "Yes": "是",
@ -41,6 +42,7 @@
"source": "來源", "source": "來源",
"Log in": "登入", "Log in": "登入",
"Log in/register": "登入/註冊", "Log in/register": "登入/註冊",
"Log in with Google": "使用 Google 登入",
"User ID": "使用者 ID", "User ID": "使用者 ID",
"Password": "密碼", "Password": "密碼",
"Time (h:mm:ss):": "時間 (h:mm:ss):", "Time (h:mm:ss):": "時間 (h:mm:ss):",
@ -49,6 +51,7 @@
"Sign In": "登入", "Sign In": "登入",
"Register": "註冊", "Register": "註冊",
"E-mail": "電子郵件", "E-mail": "電子郵件",
"Google verification code": "Google 驗證碼",
"Preferences": "偏好設定", "Preferences": "偏好設定",
"preferences_category_player": "播放器偏好設定", "preferences_category_player": "播放器偏好設定",
"preferences_video_loop_label": "總是循環播放: ", "preferences_video_loop_label": "總是循環播放: ",
@ -145,6 +148,7 @@
"Show less": "顯示較少", "Show less": "顯示較少",
"Watch on YouTube": "在 YouTube 上觀看", "Watch on YouTube": "在 YouTube 上觀看",
"Switch Invidious Instance": "切換 Invidious 站台", "Switch Invidious Instance": "切換 Invidious 站台",
"Broken? Try another Invidious Instance": "故障了嗎?試試看其他 Invidious 站台吧",
"Hide annotations": "隱藏註釋", "Hide annotations": "隱藏註釋",
"Show annotations": "顯示註釋", "Show annotations": "顯示註釋",
"Genre: ": "風格: ", "Genre: ": "風格: ",
@ -168,12 +172,17 @@
"Hide replies": "隱藏回覆", "Hide replies": "隱藏回覆",
"Show replies": "顯示回覆", "Show replies": "顯示回覆",
"Incorrect password": "不正確的密碼", "Incorrect password": "不正確的密碼",
"Quota exceeded, try again in a few hours": "超過限額,請在幾個小時後再試一次",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "無法登入,請確定雙因素驗證(驗證器或簡訊)已開啟。",
"Invalid TFA code": "無效的 TFA 代碼",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "登入失敗。這可能是因為您的帳號未開啟雙因素驗證的關係。",
"Wrong answer": "錯誤的答案", "Wrong answer": "錯誤的答案",
"Erroneous CAPTCHA": "錯誤的 CAPTCHA", "Erroneous CAPTCHA": "錯誤的 CAPTCHA",
"CAPTCHA is a required field": "CAPTCHA 為必填欄位", "CAPTCHA is a required field": "CAPTCHA 為必填欄位",
"User ID is a required field": "使用者 ID 為必填欄位", "User ID is a required field": "使用者 ID 為必填欄位",
"Password is a required field": "密碼為必填欄位", "Password is a required field": "密碼為必填欄位",
"Wrong username or password": "錯誤的使用者名稱或密碼", "Wrong username or password": "錯誤的使用者名稱或密碼",
"Please sign in using 'Log in with Google'": "請使用「以 Google 登入」來登入",
"Password cannot be empty": "密碼不能為空", "Password cannot be empty": "密碼不能為空",
"Password cannot be longer than 55 characters": "密碼不能長於55個字元", "Password cannot be longer than 55 characters": "密碼不能長於55個字元",
"Please log in": "請登入", "Please log in": "請登入",
@ -333,41 +342,42 @@
"`x` marked it with a ❤": "`x` 為此標記 ❤", "`x` marked it with a ❤": "`x` 為此標記 ❤",
"Audio mode": "音訊模式", "Audio mode": "音訊模式",
"Video mode": "視訊模式", "Video mode": "視訊模式",
"channel_tab_videos_label": "影片", "Videos": "影片",
"Playlists": "播放清單", "Playlists": "播放清單",
"channel_tab_community_label": "社群", "Community": "社群",
"search_filters_sort_option_relevance": "關聯", "relevance": "關聯",
"search_filters_sort_option_rating": "評分", "rating": "評分",
"search_filters_sort_option_date": "日期", "date": "日期",
"search_filters_sort_option_views": "檢視", "views": "檢視",
"search_filters_type_label": "內容類型", "content_type": "內容類型",
"search_filters_duration_label": "時長", "duration": "時長",
"search_filters_features_label": "特色", "features": "特色",
"search_filters_sort_label": "排序", "sort": "排序",
"search_filters_date_option_hour": "小時", "hour": "小時",
"search_filters_date_option_today": "今天", "today": "今天",
"search_filters_date_option_week": "週", "week": "週",
"search_filters_date_option_month": "月", "month": "月",
"search_filters_date_option_year": "年", "year": "年",
"search_filters_type_option_video": "影片", "video": "影片",
"search_filters_type_option_channel": "頻道", "channel": "頻道",
"search_filters_type_option_playlist": "播放清單", "playlist": "播放清單",
"search_filters_type_option_movie": "電影", "movie": "電影",
"search_filters_type_option_show": "秀", "show": "秀",
"search_filters_features_option_hd": "HD", "hd": "HD",
"search_filters_features_option_subtitles": "字幕", "subtitles": "字幕",
"search_filters_features_option_c_commons": "創用 CC", "creative_commons": "創用 CC",
"search_filters_features_option_three_d": "3D", "3d": "3D",
"search_filters_features_option_live": "直播", "live": "直播",
"search_filters_features_option_four_k": "4K", "4k": "4K",
"search_filters_features_option_location": "位置", "location": "位置",
"search_filters_features_option_hdr": "HDR", "hdr": "HDR",
"filter": "篩選條件",
"Current version: ": "目前版本: ", "Current version: ": "目前版本: ",
"next_steps_error_message": "之後您應該嘗試: ", "next_steps_error_message": "之後您應該嘗試: ",
"next_steps_error_message_refresh": "重新整理", "next_steps_error_message_refresh": "重新整理",
"next_steps_error_message_go_to_youtube": "到 YouTube", "next_steps_error_message_go_to_youtube": "到 YouTube",
"search_filters_duration_option_short": "短小於4分鐘", "short": "短小於4分鐘",
"search_filters_duration_option_long": "長多於20分鐘", "long": "長多於20分鐘",
"footer_documentation": "文件", "footer_documentation": "文件",
"footer_source_code": "原始碼", "footer_source_code": "原始碼",
"footer_original_source_code": "原本的原始碼", "footer_original_source_code": "原本的原始碼",
@ -388,8 +398,8 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_144p": "144p", "preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious", "invidious": "Invidious",
"search_filters_features_option_purchased": "已購買", "purchased": "已購買",
"search_filters_features_option_three_sixty": "360°", "360": "360°",
"none": "無", "none": "無",
"videoinfo_started_streaming_x_ago": "`x` 前開始串流", "videoinfo_started_streaming_x_ago": "`x` 前開始串流",
"videoinfo_watch_on_youTube": "在 YouTube 上觀看", "videoinfo_watch_on_youTube": "在 YouTube 上觀看",
@ -435,30 +445,5 @@
"Portuguese (Brazil)": "葡萄牙語(巴西)", "Portuguese (Brazil)": "葡萄牙語(巴西)",
"Japanese (auto-generated)": "日語(自動產生)", "Japanese (auto-generated)": "日語(自動產生)",
"Portuguese (auto-generated)": "葡萄牙語(自動產生)", "Portuguese (auto-generated)": "葡萄牙語(自動產生)",
"preferences_watch_history_label": "啟用觀看紀錄: ", "preferences_watch_history_label": "啟用觀看紀錄: "
"search_message_change_filters_or_query": "嘗試擴大您的查詢字詞與/或變更過濾條件。",
"search_filters_apply_button": "套用選定的過濾條件",
"search_message_no_results": "找不到結果。",
"search_filters_duration_option_none": "任何時長",
"search_filters_duration_option_medium": "中等4到20分鐘",
"search_filters_features_option_vr180": "VR180",
"search_message_use_another_instance": " 您也可以<a href=\"`x`\">在其他站台上搜尋</a>。",
"search_filters_title": "過濾條件",
"search_filters_date_label": "上傳日期",
"search_filters_type_option_all": "任何類型",
"search_filters_date_option_none": "任何日期",
"Popular enabled: ": "已啟用人氣: ",
"error_video_not_in_playlist": "此播放清單不存在請求的影片。<a href=\"`x`\">點擊此處檢視播放清單首頁。</a>",
"channel_tab_shorts_label": "短片",
"channel_tab_playlists_label": "播放清單",
"channel_tab_channels_label": "頻道",
"channel_tab_streams_label": "直播",
"Artist: ": "藝術家: ",
"Album: ": "專輯: ",
"Music in this video": "此影片中的音樂",
"Channel Sponsor": "頻道贊助者",
"Song: ": "歌曲: ",
"Standard YouTube license": "標準 YouTube 授權條款",
"Download is disabled": "已停用下載",
"Import YouTube playlist (.csv)": "匯入 YouTube 播放清單 (.csv)"
} }

@ -1 +0,0 @@
Subproject commit 11ec372f72747c09d48ffef04843f72be67d5b54

@ -1,60 +0,0 @@
#!/bin/sh
#
# Parameters
#
interactive=true
if [ "$1" = "--no-interactive" ]; then
interactive=false
fi
#
# Enable and start Postgres
#
sudo systemctl start postgresql.service
sudo systemctl enable postgresql.service
#
# Create databse and user
#
if [ "$interactive" = "true" ]; then
sudo -u postgres -- createuser -P kemal
sudo -u postgres -- createdb -O kemal invidious
else
# Generate a DB password
if [ -z "$POSTGRES_PASS" ]; then
echo "Generating database password"
POSTGRES_PASS=$(tr -dc 'A-Za-z0-9.;!?{[()]}\\/' < /dev/urandom | head -c16)
fi
# hostname:port:database:username:password
echo "Writing .pgpass"
echo "127.0.0.1:*:invidious:kemal:${POSTGRES_PASS}" > "$HOME/.pgpass"
sudo -u postgres -- psql -c "CREATE USER kemal WITH PASSWORD '$POSTGRES_PASS';"
sudo -u postgres -- psql -c "CREATE DATABASE invidious WITH OWNER kemal;"
sudo -u postgres -- psql -c "GRANT ALL ON DATABASE invidious TO kemal;"
fi
#
# Instructions for modification of pg_hba.conf
#
if [ "$interactive" = "true" ]; then
echo
echo "-------------"
echo " NOTICE "
echo "-------------"
echo
echo "Make sure that your postgreSQL's pg_hba.conf file contains the follwong"
echo "lines before previous 'host' configurations:"
echo
echo "host invidious kemal 127.0.0.1/32 md5"
echo "host invidious kemal ::1/128 md5"
echo
fi

@ -129,7 +129,7 @@ dependencies_to_install.each do |dep|
dep = "videojs.markers" if dep == "videojs-markers" dep = "videojs.markers" if dep == "videojs-markers"
if File.exists?("#{download_path}/package/dist/#{dep}.css") if File.exists?("#{download_path}/package/dist/#{dep}.css")
if minified && File.exists?("#{download_path}/package/dist/#{dep}.min.css") if minified && File.exists?("#{tmp_dir_path}/#{dep}/package/dist/#{dep}.min.css")
`mv #{download_path}/package/dist/#{dep}.min.css #{dest_path}/#{dep}.css` `mv #{download_path}/package/dist/#{dep}.min.css #{dest_path}/#{dep}.css`
else else
`mv #{download_path}/package/dist/#{dep}.css #{dest_path}/#{dep}.css` `mv #{download_path}/package/dist/#{dep}.css #{dest_path}/#{dep}.css`

@ -1,174 +0,0 @@
#!/bin/sh
#
# Script that installs the various dependencies of invidious
#
# Dependencies:
# - crystal => Language in which Invidious is developed
# - postgres => Database server
# - git => required to clone Invidious
# - librsvg2-bin => For login captcha (provides 'rsvg-convert')
#
# - libssl-dev => Used by Crystal's SSL module (standard library)
# - libxml2-dev => Used by Crystal's XML module (standard library)
# - libyaml-dev => Used by Crystal's YAML module (standard library)
# - libgmp-dev => Used by Crystal's BigNumbers module (standard library)
# - libevent-dev => Used by crystal's internal scheduler (?)
# - libpcre3-dev => Used by Crystal's regex engine (?)
#
# - libsqlite3-dev => Used to open .db files from NewPipe exports
# - zlib1g-dev => TBD
# - libreadline-dev => TBD
#
#
# Tested on:
# - OpenSUSE Leap 15.3
#
# Load system details
#
if [ -e /etc/os-release ]; then
. /etc/os-release
elif [ -e /usr/lib/os-release ]; then
. /usr/lib/os-release
else
echo "Unsupported Linux system"
exit 2
fi
#
# Some variables
#
repo_base_url="https://download.opensuse.org/repositories/devel:/languages:/crystal/"
repo_end_url="devel:languages:crystal.repo"
apt_gpg_key="/usr/share/keyrings/crystal.gpg"
apt_list_file="/etc/apt/sources.list.d/crystal.list"
yum_repo_file="/etc/yum.repos.d/crystal.repo"
#
# Major install functions
#
make_repo_url() {
echo "${repo_base_url}/${1}/${repo_end_url}"
}
install_apt() {
repo="$1"
echo "Adding Crystal repository"
curl -fsSL "${repo_base_url}/${repo}/Release.key" \
| gpg --dearmor \
| sudo tee "${apt_gpg_key}" > /dev/null
echo "deb [signed-by=${apt_gpg_key}] ${repo_base_url}/${repo}/ /" \
| sudo tee "$apt_list_file"
sudo apt-get update
sudo apt-get install --yes --no-install-recommends \
libssl-dev libxml2-dev libyaml-dev libgmp-dev libevent-dev \
libpcre3-dev libreadline-dev libsqlite3-dev zlib1g-dev \
crystal postgresql-13 git librsvg2-bin make
}
install_yum() {
repo=$(make_repo_url "$1")
echo "Adding Crystal repository"
cat << END | sudo tee "${yum_repo_file}" > /dev/null
[crystal]
name=Crystal
type=rpm-md
baseurl=${repo}/
gpgcheck=1
gpgkey=${repo}/repodata/repomd.xml.key
enabled=1
END
sudo yum -y install \
openssl-devel libxml2-devel libyaml-devel gmp-devel \
readline-devel sqlite-devel \
crystal postgresql postgresql-server git librsvg2-tools make
}
install_pacman() {
# TODO: find an alternative to --no-confirm?
sudo pacman -S --no-confirm \
base-devel librsvg postgresql crystal
}
install_zypper()
{
repo=$(make_repo_url "$1")
echo "Adding Crystal repository"
sudo zypper --non-interactive addrepo -f "$repo"
sudo zypper --non-interactive --gpg-auto-import-keys install --no-recommends \
libopenssl-devel libxml2-devel libyaml-devel gmp-devel libevent-devel \
pcre-devel readline-devel sqlite3-devel zlib-devel \
crystal postgresql postgresql-server git rsvg-convert make
}
#
# System-specific logic
#
case "$ID" in
archlinux) install_pacman;;
centos) install_dnf "CentOS_${VERSION_ID}";;
debian)
case "$VERSION_CODENAME" in
sid) install_apt "Debian_Unstable";;
bookworm) install_apt "Debian_Testing";;
*) install_apt "Debian_${VERSION_ID}";;
esac
;;
fedora)
if [ "$VERSION" == *"Prerelease"* ]; then
install_dnf "Fedora_Rawhide"
else
install_dnf "Fedora_${VERSION}"
fi
;;
opensuse-leap) install_zypper "openSUSE_Leap_${VERSION}";;
opensuse-tumbleweed) install_zypper "openSUSE_Tumbleweed";;
rhel) install_dnf "RHEL_${VERSION_ID}";;
ubuntu)
# Small workaround for recently released 22.04
case "$VERSION_ID" in
22.04) install_apt "xUbuntu_21.04";;
*) install_apt "xUbuntu_${VERSION_ID}";;
esac
;;
*)
# Try to match on ID_LIKE instead
# Not guaranteed to 100% work
case "$ID_LIKE" in
archlinux) install_pacman;;
centos) install_dnf "CentOS_${VERSION_ID}";;
debian) install_apt "Debian_${VERSION_ID}";;
*)
echo "Error: distribution ${CODENAME} is not supported"
echo "Please install dependencies manually"
exit 2
;;
esac
;;
esac

@ -14,11 +14,11 @@ shards:
exception_page: exception_page:
git: https://github.com/crystal-loot/exception_page.git git: https://github.com/crystal-loot/exception_page.git
version: 0.2.2 version: 0.2.0
kemal: kemal:
git: https://github.com/kemalcr/kemal.git git: https://github.com/kemalcr/kemal.git
version: 1.1.2 version: 1.1.0
kilt: kilt:
git: https://github.com/jeromegn/kilt.git git: https://github.com/jeromegn/kilt.git
@ -34,7 +34,7 @@ shards:
protodec: protodec:
git: https://github.com/iv-org/protodec.git git: https://github.com/iv-org/protodec.git
version: 0.1.5 version: 0.1.4
radix: radix:
git: https://github.com/luislavena/radix.git git: https://github.com/luislavena/radix.git

@ -18,13 +18,10 @@ dependencies:
version: ~> 0.18.0 version: ~> 0.18.0
kemal: kemal:
github: kemalcr/kemal github: kemalcr/kemal
version: ~> 1.1.2 version: ~> 1.1.0
kilt:
github: jeromegn/kilt
version: ~> 0.6.1
protodec: protodec:
github: iv-org/protodec github: iv-org/protodec
version: ~> 0.1.5 version: ~> 0.1.4
lsquic: lsquic:
github: iv-org/lsquic.cr github: iv-org/lsquic.cr
version: ~> 2.18.1-2 version: ~> 2.18.1-2

@ -1,109 +0,0 @@
require "../parsers_helper.cr"
Spectator.describe Invidious::Hashtag do
it "parses richItemRenderer containers (test 1)" do
# Enable mock
test_content = load_mock("hashtag/martingarrix_page1")
videos, _ = extract_items(test_content)
expect(typeof(videos)).to eq(Array(SearchItem))
expect(videos.size).to eq(60)
#
# Random video check 1
#
expect(typeof(videos[11])).to eq(SearchItem)
video_11 = videos[11].as(SearchVideo)
expect(video_11.id).to eq("06eSsOWcKYA")
expect(video_11.title).to eq("Martin Garrix - Live @ Tomorrowland 2018")
expect(video_11.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
expect(video_11.author).to eq("Martin Garrix")
expect(video_11.author_verified).to be_true
expect(video_11.published).to be_close(Time.utc - 3.years, 1.second)
expect(video_11.length_seconds).to eq((56.minutes + 41.seconds).total_seconds.to_i32)
expect(video_11.views).to eq(40_504_893)
expect(video_11.live_now).to be_false
expect(video_11.premium).to be_false
expect(video_11.premiere_timestamp).to be_nil
#
# Random video check 2
#
expect(typeof(videos[35])).to eq(SearchItem)
video_35 = videos[35].as(SearchVideo)
expect(video_35.id).to eq("b9HpOAYjY9I")
expect(video_35.title).to eq("Martin Garrix feat. Mike Yung - Dreamer (Official Video)")
expect(video_35.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
expect(video_35.author).to eq("Martin Garrix")
expect(video_35.author_verified).to be_true
expect(video_35.published).to be_close(Time.utc - 3.years, 1.second)
expect(video_35.length_seconds).to eq((3.minutes + 14.seconds).total_seconds.to_i32)
expect(video_35.views).to eq(30_790_049)
expect(video_35.live_now).to be_false
expect(video_35.premium).to be_false
expect(video_35.premiere_timestamp).to be_nil
end
it "parses richItemRenderer containers (test 2)" do
# Enable mock
test_content = load_mock("hashtag/martingarrix_page2")
videos, _ = extract_items(test_content)
expect(typeof(videos)).to eq(Array(SearchItem))
expect(videos.size).to eq(60)
#
# Random video check 1
#
expect(typeof(videos[41])).to eq(SearchItem)
video_41 = videos[41].as(SearchVideo)
expect(video_41.id).to eq("qhstH17zAjs")
expect(video_41.title).to eq("Martin Garrix Radio - Episode 391")
expect(video_41.ucid).to eq("UC5H_KXkPbEsGs0tFt8R35mA")
expect(video_41.author).to eq("Martin Garrix")
expect(video_41.author_verified).to be_true
expect(video_41.published).to be_close(Time.utc - 2.months, 1.second)
expect(video_41.length_seconds).to eq((1.hour).total_seconds.to_i32)
expect(video_41.views).to eq(63_240)
expect(video_41.live_now).to be_false
expect(video_41.premium).to be_false
expect(video_41.premiere_timestamp).to be_nil
#
# Random video check 2
#
expect(typeof(videos[48])).to eq(SearchItem)
video_48 = videos[48].as(SearchVideo)
expect(video_48.id).to eq("lqGvW0NIfdc")
expect(video_48.title).to eq("Martin Garrix SENTIO Full Album Mix by Sakul")
expect(video_48.ucid).to eq("UC3833PXeLTS6yRpwGMQpp4Q")
expect(video_48.author).to eq("SAKUL")
expect(video_48.author_verified).to be_false
expect(video_48.published).to be_close(Time.utc - 3.weeks, 1.second)
expect(video_48.length_seconds).to eq((35.minutes + 46.seconds).total_seconds.to_i32)
expect(video_48.views).to eq(68_704)
expect(video_48.live_now).to be_false
expect(video_48.premium).to be_false
expect(video_48.premiere_timestamp).to be_nil
end
end

@ -5,13 +5,13 @@ CONFIG = Config.from_yaml(File.open("config/config.example.yml"))
Spectator.describe "Helper" do Spectator.describe "Helper" do
describe "#produce_channel_videos_url" do describe "#produce_channel_videos_url" do
it "correctly produces url for requesting page `x` of a channel's videos" do it "correctly produces url for requesting page `x` of a channel's videos" do
# expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw")).to eq("/browse_ajax?continuation=4qmFsgI8EhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4&gl=US&hl=en") expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw")).to eq("/browse_ajax?continuation=4qmFsgI8EhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaIEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4&gl=US&hl=en")
#
# expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4R0FFPQ%3D%3D&gl=US&hl=en")
# expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", page: 20)).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUE9PQ%3D%3D&gl=US&hl=en") expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0V4R0FFPQ%3D%3D&gl=US&hl=en")
# expect(produce_channel_videos_url(ucid: "UC-9-kyTW8ZkZNDHQJ6FgpwQ", page: 20, sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQy05LWt5VFc4WmtaTkRIUUo2Rmdwd1EaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUJnQg%3D%3D&gl=US&hl=en") expect(produce_channel_videos_url(ucid: "UCXuqSBlHAE6Xw-yeJA0Tunw", page: 20)).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUE9PQ%3D%3D&gl=US&hl=en")
expect(produce_channel_videos_url(ucid: "UC-9-kyTW8ZkZNDHQJ6FgpwQ", page: 20, sort_by: "popular")).to eq("/browse_ajax?continuation=4qmFsgJAEhhVQy05LWt5VFc4WmtaTkRIUUo2Rmdwd1EaJEVnWjJhV1JsYjNNd0FqZ0JZQUZxQUxnQkFDQUFlZ0l5TUJnQg%3D%3D&gl=US&hl=en")
end end
end end
@ -23,6 +23,38 @@ Spectator.describe "Helper" do
end end
end end
describe "#produce_channel_playlists_url" do
it "correctly produces a /browse_ajax URL with the given UCID and cursor" do
expect(produce_channel_playlists_url("UCCj956IF62FbT7Gouszaj9w", "AIOkY9EQpi_gyn1_QrFuZ1reN81_MMmI1YmlBblw8j7JHItEFG5h7qcJTNd4W9x5Quk_CVZ028gW")).to eq("/browse_ajax?continuation=4qmFsgLNARIYVUNDajk1NklGNjJGYlQ3R291c3phajl3GrABRWdsd2JHRjViR2x6ZEhNd0FqZ0JZQUZxQUxnQkFIcG1VVlZzVUdFeGF6VlNWa1ozWVZZNWJtVlhOSGhZTVVaNVVtNVdZVTFZU214VWFtZDRXREF4VG1KVmEzaFhWekZ6VVcxS2MyUjZhSEZPTUhCSlUxaFNSbEpyWXpGaFJHUjRXVEJ3VlZSdFVUQldlbXcwVGxaR01XRXhPVVJXYkc5M1RXcG9ibFozSUFFWUF3PT0%3D&gl=US&hl=en")
end
end
describe "#produce_search_params" do
it "correctly produces token for searching with specified filters" do
expect(produce_search_params).to eq("CAASAhABSAA%3D")
expect(produce_search_params(sort: "upload_date", content_type: "video")).to eq("CAISAhABSAA%3D")
expect(produce_search_params(content_type: "playlist")).to eq("CAASAhADSAA%3D")
expect(produce_search_params(sort: "date", content_type: "video", features: ["hd", "cc", "purchased", "hdr"])).to eq("CAISCxABIAEwAUgByAEBSAA%3D")
expect(produce_search_params(content_type: "channel")).to eq("CAASAhACSAA%3D")
end
end
describe "#produce_comment_continuation" do
it "correctly produces a continuation token for comments" do
expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i2qvJeFtL0htmS5_K5Ctj3eGFVBMWL9Wd42o3kmUL6_mAzdLp85-liQZL0mYr_16BhaggUqX652Sv9JqV6VXinShSP-ZT6rL4NolPBaPXVtJsO5_rA_qE3GubAuLFw9uzIIXU2-HnpXbdgPLWTFavfX206hqWmmpHwUOrmxQV_OX6tYkM3ux3rPAKCDrT8eWL7MU3bLiNcnbgkW8o0h8KYLL_8BPa8LcHbTv8pAoNkjerlX1x7K4pqxaXPoyz89qNlnh6rRx6AXgAzzoHH1dmcyQ8CIBeOHg-m4i8ZxdX4dP88XWrIFg-jJGhpGP8JUMDgZgavxVx225hUEYZMyrLGler5em4FgbG62YWC51moLDLeYEA")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyjAMK9gJBRFNKX2kycXZKZUZ0TDBodG1TNV9LNUN0ajNlR0ZWQk1XTDlXZDQybzNrbVVMNl9tQXpkTHA4NS1saVFaTDBtWXJfMTZCaGFnZ1VxWDY1MlN2OUpxVjZWWGluU2hTUC1aVDZyTDROb2xQQmFQWFZ0SnNPNV9yQV9xRTNHdWJBdUxGdzl1eklJWFUyLUhucFhiZGdQTFdURmF2ZlgyMDZocVdtbXBId1VPcm14UVZfT1g2dFlrTTN1eDNyUEFLQ0RyVDhlV0w3TVUzYkxpTmNuYmdrVzhvMGg4S1lMTF84QlBhOExjSGJUdjhwQW9Oa2plcmxYMXg3SzRwcXhhWFBveXo4OXFObG5oNnJSeDZBWGdBenpvSEgxZG1jeVE4Q0lCZU9IZy1tNGk4WnhkWDRkUDg4WFdySUZnLWpKR2hwR1A4SlVNRGdaZ2F2eFZ4MjI1aFVFWVpNeXJMR2xlcjVlbTRGZ2JHNjJZV0M1MW1vTERMZVlFQSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
expect(produce_comment_continuation("_cE8xSu6swE", "ADSJ_i1yz21HI4xrtsYXVC-2_kfZ6kx1yjYQumXAAxqH3CAd7ZxKxfLdZS1__fqhCtOASRbbpSBGH_tH1J96Dxux-Qfjk-lUbupMqv08Q3aHzGu7p70VoUMHhI2-GoJpnbpmcOxkGzeIuenRS_ym2Y8fkDowhqLPFgsS0n4djnZ2UmC17F3Ch3N1S1UYf1ZVOc991qOC1iW9kJDzyvRQTWCPsJUPneSaAKW-Rr97pdesOkR4i8cNvHZRnQKe2HEfsvlJOb2C3lF1dJBfJeNfnQYeh5hv6_fZN7bt3-JL1Xk3Qc9NXNxmmbDpwAC_yFR8dthFfUJdyIO9Nu1D79MLYeR-H5HxqUJokkJiGIz4lTE_CXXbhAI")).to eq("EkMSC19jRTh4U3U2c3dFyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyiQMK8wJBRFNKX2kxeXoyMUhJNHhydHNZWFZDLTJfa2ZaNmt4MXlqWVF1bVhBQXhxSDNDQWQ3WnhLeGZMZFpTMV9fZnFoQ3RPQVNSYmJwU0JHSF90SDFKOTZEeHV4LVFmamstbFVidXBNcXYwOFEzYUh6R3U3cDcwVm9VTUhoSTItR29KcG5icG1jT3hrR3plSXVlblJTX3ltMlk4ZmtEb3docUxQRmdzUzBuNGRqbloyVW1DMTdGM0NoM04xUzFVWWYxWlZPYzk5MXFPQzFpVzlrSkR6eXZSUVRXQ1BzSlVQbmVTYUFLVy1Scjk3cGRlc09rUjRpOGNOdkhaUm5RS2UySEVmc3ZsSk9iMkMzbEYxZEpCZkplTmZuUVllaDVodjZfZlpON2J0My1KTDFYazNRYzlOWE54bW1iRHB3QUNfeUZSOGR0aEZmVUpkeUlPOU51MUQ3OU1MWWVSLUg1SHhxVUpva2tKaUdJejRsVEVfQ1hYYmhBSSIPIgtfY0U4eFN1NnN3RTAAKBQ%3D")
expect(produce_comment_continuation("29-q7YnyUmY", "")).to eq("EkMSCzI5LXE3WW55VW1ZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iCzI5LXE3WW55VW1ZMAAoFA%3D%3D")
expect(produce_comment_continuation("CvFH_6DNRCY", "")).to eq("EkMSC0N2RkhfNkROUkNZyAEA4AEBogINKP___________wFAAMICHQgEGhdodHRwczovL3d3dy55b3V0dWJlLmNvbSIAGAYyFQoAIg8iC0N2RkhfNkROUkNZMAAoFA%3D%3D")
end
end
describe "#produce_channel_community_continuation" do describe "#produce_channel_community_continuation" do
it "correctly produces a continuation token for a channel community" do it "correctly produces a continuation token for a channel community" do
expect(produce_channel_community_continuation("UCCj956IF62FbT7Gouszaj9w", "Egljb21tdW5pdHm4")).to eq("4qmFsgIsEhhVQ0NqOTU2SUY2MkZiVDdHb3VzemFqOXcaEEVnbGpiMjF0ZFc1cGRIbTQ%3D") expect(produce_channel_community_continuation("UCCj956IF62FbT7Gouszaj9w", "Egljb21tdW5pdHm4")).to eq("4qmFsgIsEhhVQ0NqOTU2SUY2MkZiVDdHb3VzemFqOXcaEEVnbGpiMjF0ZFc1cGRIbTQ%3D")

@ -1,371 +0,0 @@
require "../../../src/invidious/search/filters"
require "http/params"
require "spectator"
Spectator.configure do |config|
config.fail_blank
config.randomize
end
FEATURES_TEXT = {
Invidious::Search::Filters::Features::Live => "live",
Invidious::Search::Filters::Features::FourK => "4k",
Invidious::Search::Filters::Features::HD => "hd",
Invidious::Search::Filters::Features::Subtitles => "subtitles",
Invidious::Search::Filters::Features::CCommons => "commons",
Invidious::Search::Filters::Features::ThreeSixty => "360",
Invidious::Search::Filters::Features::VR180 => "vr180",
Invidious::Search::Filters::Features::ThreeD => "3d",
Invidious::Search::Filters::Features::HDR => "hdr",
Invidious::Search::Filters::Features::Location => "location",
Invidious::Search::Filters::Features::Purchased => "purchased",
}
Spectator.describe Invidious::Search::Filters do
# -------------------
# Decode (legacy)
# -------------------
describe "#from_legacy_filters" do
it "Decodes channel: filter" do
query = "test channel:UC123456 request"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new)
expect(chan).to eq("UC123456")
expect(qury).to eq("test request")
expect(subs).to be_false
end
it "Decodes user: filter" do
query = "user:LinusTechTips broke something (again)"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new)
expect(chan).to eq("LinusTechTips")
expect(qury).to eq("broke something (again)")
expect(subs).to be_false
end
it "Decodes type: filter" do
Invidious::Search::Filters::Type.each do |value|
query = "Eiffel 65 - Blue [1 Hour] type:#{value}"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(type: value))
expect(chan).to eq("")
expect(qury).to eq("Eiffel 65 - Blue [1 Hour]")
expect(subs).to be_false
end
end
it "Decodes content_type: filter" do
Invidious::Search::Filters::Type.each do |value|
query = "I like to watch content_type:#{value}"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(type: value))
expect(chan).to eq("")
expect(qury).to eq("I like to watch")
expect(subs).to be_false
end
end
it "Decodes date: filter" do
Invidious::Search::Filters::Date.each do |value|
query = "This date:#{value} is old!"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(date: value))
expect(chan).to eq("")
expect(qury).to eq("This is old!")
expect(subs).to be_false
end
end
it "Decodes duration: filter" do
Invidious::Search::Filters::Duration.each do |value|
query = "This duration:#{value} is old!"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(duration: value))
expect(chan).to eq("")
expect(qury).to eq("This is old!")
expect(subs).to be_false
end
end
it "Decodes feature: filter" do
Invidious::Search::Filters::Features.each do |value|
string = FEATURES_TEXT[value]
query = "I like my precious feature:#{string} ^^"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(features: value))
expect(chan).to eq("")
expect(qury).to eq("I like my precious ^^")
expect(subs).to be_false
end
end
it "Decodes features: filter" do
query = "This search has many features:vr180,cc,hdr :o"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
features = Invidious::Search::Filters::Features.flags(HDR, VR180, CCommons)
expect(fltr).to eq(described_class.new(features: features))
expect(chan).to eq("")
expect(qury).to eq("This search has many :o")
expect(subs).to be_false
end
it "Decodes sort: filter" do
Invidious::Search::Filters::Sort.each do |value|
query = "Computer? sort:#{value} my files!"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new(sort: value))
expect(chan).to eq("")
expect(qury).to eq("Computer? my files!")
expect(subs).to be_false
end
end
it "Decodes subscriptions: filter" do
query = "enable subscriptions:true"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new)
expect(chan).to eq("")
expect(qury).to eq("enable")
expect(subs).to be_true
end
it "Ignores junk data" do
query = "duration:I sort:like type:cleaning features:stuff date:up!"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new)
expect(chan).to eq("")
expect(qury).to eq("")
expect(subs).to be_false
end
it "Keeps unknown keys" do
query = "to:be or:not to:be"
fltr, chan, qury, subs = described_class.from_legacy_filters(query)
expect(fltr).to eq(described_class.new)
expect(chan).to eq("")
expect(qury).to eq("to:be or:not to:be")
expect(subs).to be_false
end
end
# -------------------
# Decode (URL)
# -------------------
describe "#from_iv_params" do
it "Decodes type= filter" do
Invidious::Search::Filters::Type.each do |value|
params = HTTP::Params.parse("type=#{value}")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(type: value))
end
end
it "Decodes date= filter" do
Invidious::Search::Filters::Date.each do |value|
params = HTTP::Params.parse("date=#{value}")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(date: value))
end
end
it "Decodes duration= filter" do
Invidious::Search::Filters::Duration.each do |value|
params = HTTP::Params.parse("duration=#{value}")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(duration: value))
end
end
it "Decodes features= filter (single)" do
Invidious::Search::Filters::Features.each do |value|
string = described_class.format_features(value)
params = HTTP::Params.parse("features=#{string}")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(features: value))
end
end
it "Decodes features= filter (multiple - comma separated)" do
features = Invidious::Search::Filters::Features.flags(HDR, VR180, CCommons)
params = HTTP::Params.parse("features=vr180%2Ccc%2Chdr") # %2C is a comma
expect(described_class.from_iv_params(params))
.to eq(described_class.new(features: features))
end
it "Decodes features= filter (multiple - URL parameters)" do
features = Invidious::Search::Filters::Features.flags(ThreeSixty, HD, FourK)
params = HTTP::Params.parse("features=4k&features=360&features=hd")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(features: features))
end
it "Decodes sort= filter" do
Invidious::Search::Filters::Sort.each do |value|
params = HTTP::Params.parse("sort=#{value}")
expect(described_class.from_iv_params(params))
.to eq(described_class.new(sort: value))
end
end
it "Ignores junk data" do
params = HTTP::Params.parse("foo=bar&sort=views&answer=42&type=channel")
expect(described_class.from_iv_params(params)).to eq(
described_class.new(
sort: Invidious::Search::Filters::Sort::Views,
type: Invidious::Search::Filters::Type::Channel
)
)
end
end
# -------------------
# Encode (URL)
# -------------------
describe "#to_iv_params" do
it "Encodes date filter" do
Invidious::Search::Filters::Date.each do |value|
filters = described_class.new(date: value)
params = filters.to_iv_params
if value.none?
expect("#{params}").to eq("")
else
expect("#{params}").to eq("date=#{value.to_s.underscore}")
end
end
end
it "Encodes type filter" do
Invidious::Search::Filters::Type.each do |value|
filters = described_class.new(type: value)
params = filters.to_iv_params
if value.all?
expect("#{params}").to eq("")
else
expect("#{params}").to eq("type=#{value.to_s.underscore}")
end
end
end
it "Encodes duration filter" do
Invidious::Search::Filters::Duration.each do |value|
filters = described_class.new(duration: value)
params = filters.to_iv_params
if value.none?
expect("#{params}").to eq("")
else
expect("#{params}").to eq("duration=#{value.to_s.underscore}")
end
end
end
it "Encodes features filter (single)" do
Invidious::Search::Filters::Features.each do |value|
string = described_class.format_features(value)
filters = described_class.new(features: value)
expect("#{filters.to_iv_params}")
.to eq("features=" + FEATURES_TEXT[value])
end
end
it "Encodes features filter (multiple)" do
features = Invidious::Search::Filters::Features.flags(Subtitles, Live, ThreeSixty)
filters = described_class.new(features: features)
expect("#{filters.to_iv_params}")
.to eq("features=live%2Csubtitles%2C360") # %2C is a comma
end
it "Encodes sort filter" do
Invidious::Search::Filters::Sort.each do |value|
filters = described_class.new(sort: value)
params = filters.to_iv_params
if value.relevance?
expect("#{params}").to eq("")
else
expect("#{params}").to eq("sort=#{value.to_s.underscore}")
end
end
end
it "Encodes multiple filters" do
filters = described_class.new(
date: Invidious::Search::Filters::Date::Today,
duration: Invidious::Search::Filters::Duration::Medium,
features: Invidious::Search::Filters::Features.flags(Location, Purchased),
sort: Invidious::Search::Filters::Sort::Relevance
)
params = filters.to_iv_params
# Check the `date` param
expect(params).to have_key("date")
expect(params.fetch_all("date")).to contain_exactly("today")
# Check the `type` param
expect(params).to_not have_key("type")
expect(params["type"]?).to be_nil
# Check the `duration` param
expect(params).to have_key("duration")
expect(params.fetch_all("duration")).to contain_exactly("medium")
# Check the `features` param
expect(params).to have_key("features")
expect(params.fetch_all("features")).to contain_exactly("location,purchased")
# Check the `sort` param
expect(params).to_not have_key("sort")
expect(params["sort"]?).to be_nil
# Check if there aren't other parameters
params.delete("date")
params.delete("duration")
params.delete("features")
expect(params).to be_empty
end
end
end

@ -1,242 +0,0 @@
require "../../../src/invidious/search/filters"
require "../../../src/invidious/search/query"
require "http/params"
require "spectator"
Spectator.configure do |config|
config.fail_blank
config.randomize
end
Spectator.describe Invidious::Search::Query do
describe Type::Regular do
# -------------------
# Query parsing
# -------------------
it "parses query with URL prameters (q)" do
query = described_class.new(
HTTP::Params.parse("q=What+is+Love+10+hour&type=video&duration=long"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Regular)
expect(query.channel).to be_empty
expect(query.text).to eq("What is Love 10 hour")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
type: Invidious::Search::Filters::Type::Video,
duration: Invidious::Search::Filters::Duration::Long
)
)
end
it "parses query with URL prameters (search_query)" do
query = described_class.new(
HTTP::Params.parse("search_query=What+is+Love+10+hour&type=video&duration=long"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Regular)
expect(query.channel).to be_empty
expect(query.text).to eq("What is Love 10 hour")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
type: Invidious::Search::Filters::Type::Video,
duration: Invidious::Search::Filters::Duration::Long
)
)
end
it "parses query with legacy filters (q)" do
query = described_class.new(
HTTP::Params.parse("q=Nyan+cat+duration:long"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Regular)
expect(query.channel).to be_empty
expect(query.text).to eq("Nyan cat")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
duration: Invidious::Search::Filters::Duration::Long
)
)
end
it "parses query with legacy filters (search_query)" do
query = described_class.new(
HTTP::Params.parse("search_query=Nyan+cat+duration:long"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Regular)
expect(query.channel).to be_empty
expect(query.text).to eq("Nyan cat")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
duration: Invidious::Search::Filters::Duration::Long
)
)
end
it "parses query with both URL params and legacy filters" do
query = described_class.new(
HTTP::Params.parse("q=Vamos+a+la+playa+duration:long&type=Video&date=year"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Regular)
expect(query.channel).to be_empty
expect(query.text).to eq("Vamos a la playa duration:long")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
type: Invidious::Search::Filters::Type::Video,
date: Invidious::Search::Filters::Date::Year
)
)
end
# -------------------
# Type switching
# -------------------
it "switches to channel search (URL param)" do
query = described_class.new(
HTTP::Params.parse("q=thunderbolt+4&channel=UC0vBXGSyV14uvJ4hECDOl0Q"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Channel)
expect(query.channel).to eq("UC0vBXGSyV14uvJ4hECDOl0Q")
expect(query.text).to eq("thunderbolt 4")
expect(query.filters.default?).to be_true
end
it "switches to channel search (legacy)" do
query = described_class.new(
HTTP::Params.parse("q=channel%3AUCRPdsCVuH53rcbTcEkuY4uQ+rdna3"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Channel)
expect(query.channel).to eq("UCRPdsCVuH53rcbTcEkuY4uQ")
expect(query.text).to eq("rdna3")
expect(query.filters.default?).to be_true
end
it "switches to subscriptions search" do
query = described_class.new(
HTTP::Params.parse("q=subscriptions:true+tunak+tunak+tun"),
Invidious::Search::Query::Type::Regular, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Subscriptions)
expect(query.channel).to be_empty
expect(query.text).to eq("tunak tunak tun")
expect(query.filters.default?).to be_true
end
end
describe Type::Channel do
it "ignores extra parameters" do
query = described_class.new(
HTTP::Params.parse("q=Take+on+me+channel%3AUC12345679&type=video&date=year"),
Invidious::Search::Query::Type::Channel, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Channel)
expect(query.channel).to be_empty
expect(query.text).to eq("Take on me")
expect(query.filters.default?).to be_true
end
end
describe Type::Subscriptions do
it "works" do
query = described_class.new(
HTTP::Params.parse("q=Harlem+shake&type=video&date=year"),
Invidious::Search::Query::Type::Subscriptions, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Subscriptions)
expect(query.channel).to be_empty
expect(query.text).to eq("Harlem shake")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
type: Invidious::Search::Filters::Type::Video,
date: Invidious::Search::Filters::Date::Year
)
)
end
end
describe Type::Playlist do
it "ignores extra parameters" do
query = described_class.new(
HTTP::Params.parse("q=Harlem+shake+type:video+date:year&channel=UC12345679"),
Invidious::Search::Query::Type::Playlist, nil
)
expect(query.type).to eq(Invidious::Search::Query::Type::Playlist)
expect(query.channel).to be_empty
expect(query.text).to eq("Harlem shake")
expect(query.filters).to eq(
Invidious::Search::Filters.new(
type: Invidious::Search::Filters::Type::Video,
date: Invidious::Search::Filters::Date::Year
)
)
end
end
describe "#to_http_params" do
it "formats regular search" do
query = described_class.new(
HTTP::Params.parse("q=The+Simpsons+hiding+in+bush&duration=short"),
Invidious::Search::Query::Type::Regular, nil
)
params = query.to_http_params
expect(params).to have_key("duration")
expect(params["duration"]?).to eq("short")
expect(params).to have_key("q")
expect(params["q"]?).to eq("The Simpsons hiding in bush")
# Check if there aren't other parameters
params.delete("duration")
params.delete("q")
expect(params).to be_empty
end
it "formats channel search" do
query = described_class.new(
HTTP::Params.parse("q=channel:UC2DjFE7Xf11URZqWBigcVOQ%20multimeter"),
Invidious::Search::Query::Type::Regular, nil
)
params = query.to_http_params
expect(params).to have_key("channel")
expect(params["channel"]?).to eq("UC2DjFE7Xf11URZqWBigcVOQ")
expect(params).to have_key("q")
expect(params["q"]?).to eq("multimeter")
# Check if there aren't other parameters
params.delete("channel")
params.delete("q")
expect(params).to be_empty
end
end
end

@ -1,143 +0,0 @@
require "../../../src/invidious/search/filters"
require "http/params"
require "spectator"
Spectator.configure do |config|
config.fail_blank
config.randomize
end
# Encoded filter values are extracted from the search
# page of Youtube with any browser devtools HTML inspector.
DATE_FILTERS = {
Invidious::Search::Filters::Date::Hour => "EgIIAQ%3D%3D",
Invidious::Search::Filters::Date::Today => "EgIIAg%3D%3D",
Invidious::Search::Filters::Date::Week => "EgIIAw%3D%3D",
Invidious::Search::Filters::Date::Month => "EgIIBA%3D%3D",
Invidious::Search::Filters::Date::Year => "EgIIBQ%3D%3D",
}
TYPE_FILTERS = {
Invidious::Search::Filters::Type::Video => "EgIQAQ%3D%3D",
Invidious::Search::Filters::Type::Channel => "EgIQAg%3D%3D",
Invidious::Search::Filters::Type::Playlist => "EgIQAw%3D%3D",
Invidious::Search::Filters::Type::Movie => "EgIQBA%3D%3D",
}
DURATION_FILTERS = {
Invidious::Search::Filters::Duration::Short => "EgIYAQ%3D%3D",
Invidious::Search::Filters::Duration::Medium => "EgIYAw%3D%3D",
Invidious::Search::Filters::Duration::Long => "EgIYAg%3D%3D",
}
FEATURE_FILTERS = {
Invidious::Search::Filters::Features::Live => "EgJAAQ%3D%3D",
Invidious::Search::Filters::Features::FourK => "EgJwAQ%3D%3D",
Invidious::Search::Filters::Features::HD => "EgIgAQ%3D%3D",
Invidious::Search::Filters::Features::Subtitles => "EgIoAQ%3D%3D",
Invidious::Search::Filters::Features::CCommons => "EgIwAQ%3D%3D",
Invidious::Search::Filters::Features::ThreeSixty => "EgJ4AQ%3D%3D",
Invidious::Search::Filters::Features::VR180 => "EgPQAQE%3D",
Invidious::Search::Filters::Features::ThreeD => "EgI4AQ%3D%3D",
Invidious::Search::Filters::Features::HDR => "EgPIAQE%3D",
Invidious::Search::Filters::Features::Location => "EgO4AQE%3D",
Invidious::Search::Filters::Features::Purchased => "EgJIAQ%3D%3D",
}
SORT_FILTERS = {
Invidious::Search::Filters::Sort::Relevance => "",
Invidious::Search::Filters::Sort::Date => "CAI%3D",
Invidious::Search::Filters::Sort::Views => "CAM%3D",
Invidious::Search::Filters::Sort::Rating => "CAE%3D",
}
Spectator.describe Invidious::Search::Filters do
# -------------------
# Encode YT params
# -------------------
describe "#to_yt_params" do
sample DATE_FILTERS do |value, result|
it "Encodes upload date filter '#{value}'" do
expect(described_class.new(date: value).to_yt_params).to eq(result)
end
end
sample TYPE_FILTERS do |value, result|
it "Encodes content type filter '#{value}'" do
expect(described_class.new(type: value).to_yt_params).to eq(result)
end
end
sample DURATION_FILTERS do |value, result|
it "Encodes duration filter '#{value}'" do
expect(described_class.new(duration: value).to_yt_params).to eq(result)
end
end
sample FEATURE_FILTERS do |value, result|
it "Encodes feature filter '#{value}'" do
expect(described_class.new(features: value).to_yt_params).to eq(result)
end
end
sample SORT_FILTERS do |value, result|
it "Encodes sort filter '#{value}'" do
expect(described_class.new(sort: value).to_yt_params).to eq(result)
end
end
end
# -------------------
# Decode YT params
# -------------------
describe "#from_yt_params" do
sample DATE_FILTERS do |value, encoded|
it "Decodes upload date filter '#{value}'" do
params = HTTP::Params.parse("sp=#{encoded}")
expect(described_class.from_yt_params(params))
.to eq(described_class.new(date: value))
end
end
sample TYPE_FILTERS do |value, encoded|
it "Decodes content type filter '#{value}'" do
params = HTTP::Params.parse("sp=#{encoded}")
expect(described_class.from_yt_params(params))
.to eq(described_class.new(type: value))
end
end
sample DURATION_FILTERS do |value, encoded|
it "Decodes duration filter '#{value}'" do
params = HTTP::Params.parse("sp=#{encoded}")
expect(described_class.from_yt_params(params))
.to eq(described_class.new(duration: value))
end
end
sample FEATURE_FILTERS do |value, encoded|
it "Decodes feature filter '#{value}'" do
params = HTTP::Params.parse("sp=#{encoded}")
expect(described_class.from_yt_params(params))
.to eq(described_class.new(features: value))
end
end
sample SORT_FILTERS do |value, encoded|
it "Decodes sort filter '#{value}'" do
params = HTTP::Params.parse("sp=#{encoded}")
expect(described_class.from_yt_params(params))
.to eq(described_class.new(sort: value))
end
end
end
end

@ -1,46 +0,0 @@
require "../spec_helper"
Spectator.describe "Utils" do
describe "decode_date" do
it "parses short dates (en-US)" do
expect(decode_date("1s ago")).to be_close(Time.utc - 1.second, 500.milliseconds)
expect(decode_date("2min ago")).to be_close(Time.utc - 2.minutes, 500.milliseconds)
expect(decode_date("3h ago")).to be_close(Time.utc - 3.hours, 500.milliseconds)
expect(decode_date("4d ago")).to be_close(Time.utc - 4.days, 500.milliseconds)
expect(decode_date("5w ago")).to be_close(Time.utc - 5.weeks, 500.milliseconds)
expect(decode_date("6mo ago")).to be_close(Time.utc - 6.months, 500.milliseconds)
expect(decode_date("7y ago")).to be_close(Time.utc - 7.years, 500.milliseconds)
end
it "parses short dates (en-GB)" do
expect(decode_date("55s ago")).to be_close(Time.utc - 55.seconds, 500.milliseconds)
expect(decode_date("44min ago")).to be_close(Time.utc - 44.minutes, 500.milliseconds)
expect(decode_date("22hr ago")).to be_close(Time.utc - 22.hours, 500.milliseconds)
expect(decode_date("1day ago")).to be_close(Time.utc - 1.day, 500.milliseconds)
expect(decode_date("2days ago")).to be_close(Time.utc - 2.days, 500.milliseconds)
expect(decode_date("3wk ago")).to be_close(Time.utc - 3.weeks, 500.milliseconds)
expect(decode_date("11mo ago")).to be_close(Time.utc - 11.months, 500.milliseconds)
expect(decode_date("11yr ago")).to be_close(Time.utc - 11.years, 500.milliseconds)
end
it "parses long forms (singular)" do
expect(decode_date("1 second ago")).to be_close(Time.utc - 1.second, 500.milliseconds)
expect(decode_date("1 minute ago")).to be_close(Time.utc - 1.minute, 500.milliseconds)
expect(decode_date("1 hour ago")).to be_close(Time.utc - 1.hour, 500.milliseconds)
expect(decode_date("1 day ago")).to be_close(Time.utc - 1.day, 500.milliseconds)
expect(decode_date("1 week ago")).to be_close(Time.utc - 1.week, 500.milliseconds)
expect(decode_date("1 month ago")).to be_close(Time.utc - 1.month, 500.milliseconds)
expect(decode_date("1 year ago")).to be_close(Time.utc - 1.year, 500.milliseconds)
end
it "parses long forms (plural)" do
expect(decode_date("5 seconds ago")).to be_close(Time.utc - 5.seconds, 500.milliseconds)
expect(decode_date("17 minutes ago")).to be_close(Time.utc - 17.minutes, 500.milliseconds)
expect(decode_date("23 hours ago")).to be_close(Time.utc - 23.hours, 500.milliseconds)
expect(decode_date("3 days ago")).to be_close(Time.utc - 3.days, 500.milliseconds)
expect(decode_date("2 weeks ago")).to be_close(Time.utc - 2.weeks, 500.milliseconds)
expect(decode_date("9 months ago")).to be_close(Time.utc - 9.months, 500.milliseconds)
expect(decode_date("8 years ago")).to be_close(Time.utc - 8.years, 500.milliseconds)
end
end
end

@ -1,166 +0,0 @@
require "../../parsers_helper.cr"
Spectator.describe "parse_video_info" do
it "parses a regular video" do
# Enable mock
_player = load_mock("video/regular_mrbeast.player")
_next = load_mock("video/regular_mrbeast.next")
raw_data = _player.merge!(_next)
info = parse_video_info("2isYuQZMbdU", raw_data)
# Some basic verifications
expect(typeof(info)).to eq(Hash(String, JSON::Any))
expect(info["videoType"].as_s).to eq("Video")
# Basic video infos
expect(info["title"].as_s).to eq("I Gave My 100,000,000th Subscriber An Island")
expect(info["views"].as_i).to eq(126_573_823)
expect(info["likes"].as_i).to eq(5_157_654)
# For some reason the video length from VideoDetails and the
# one from microformat differs by 1s...
expect(info["lengthSeconds"].as_i).to be_between(930_i64, 931_i64)
expect(info["published"].as_s).to eq("2022-08-04T00:00:00Z")
# Extra video infos
expect(info["allowedRegions"].as_a).to_not be_empty
expect(info["allowedRegions"].as_a.size).to eq(249)
expect(info["allowedRegions"].as_a).to contain(
"AD", "BA", "BB", "BW", "BY", "EG", "GG", "HN", "NP", "NR", "TR",
"TT", "TV", "TW", "TZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU",
"WF", "WS", "YE", "YT", "ZA", "ZM", "ZW"
)
expect(info["keywords"].as_a).to be_empty
expect(info["allowRatings"].as_bool).to be_true
expect(info["isFamilyFriendly"].as_bool).to be_true
expect(info["isListed"].as_bool).to be_true
expect(info["isUpcoming"].as_bool).to be_false
# Related videos
expect(info["relatedVideos"].as_a.size).to eq(20)
expect(info["relatedVideos"][0]["id"]).to eq("Hwybp38GnZw")
expect(info["relatedVideos"][0]["title"]).to eq("I Built Willy Wonka's Chocolate Factory!")
expect(info["relatedVideos"][0]["author"]).to eq("MrBeast")
expect(info["relatedVideos"][0]["ucid"]).to eq("UCX6OQ3DkcsbYNE6H8uQQuVA")
expect(info["relatedVideos"][0]["view_count"]).to eq("179877630")
expect(info["relatedVideos"][0]["short_view_count"]).to eq("179M")
expect(info["relatedVideos"][0]["author_verified"]).to eq("true")
# Description
description = "🚀Launch a store on Shopify, Ill buy from 100 random stores that do ▸ "
expect(info["description"].as_s).to start_with(description)
expect(info["shortDescription"].as_s).to start_with(description)
expect(info["descriptionHtml"].as_s).to start_with(description)
# Video metadata
expect(info["genre"].as_s).to eq("Entertainment")
expect(info["genreUcid"].as_s).to be_empty
expect(info["license"].as_s).to be_empty
# Author infos
expect(info["author"].as_s).to eq("MrBeast")
expect(info["ucid"].as_s).to eq("UCX6OQ3DkcsbYNE6H8uQQuVA")
expect(info["authorThumbnail"].as_s).to eq(
"https://yt3.ggpht.com/ytc/AL5GRJVuqw82ERvHzsmBxL7avr1dpBtsVIXcEzBPZaloFg=s48-c-k-c0x00ffffff-no-rj"
)
expect(info["authorVerified"].as_bool).to be_true
expect(info["subCountText"].as_s).to eq("143M")
end
it "parses a regular video with no descrition/comments" do
# Enable mock
_player = load_mock("video/regular_no-description.player")
_next = load_mock("video/regular_no-description.next")
raw_data = _player.merge!(_next)
info = parse_video_info("iuevw6218F0", raw_data)
# Some basic verifications
expect(typeof(info)).to eq(Hash(String, JSON::Any))
expect(info["videoType"].as_s).to eq("Video")
# Basic video infos
expect(info["title"].as_s).to eq("Chris Rea - Auberge")
expect(info["views"].as_i).to eq(10_943_126)
expect(info["likes"].as_i).to eq(0)
expect(info["lengthSeconds"].as_i).to eq(283_i64)
expect(info["published"].as_s).to eq("2012-05-21T00:00:00Z")
# Extra video infos
expect(info["allowedRegions"].as_a).to_not be_empty
expect(info["allowedRegions"].as_a.size).to eq(249)
expect(info["allowedRegions"].as_a).to contain(
"AD", "BA", "BB", "BW", "BY", "EG", "GG", "HN", "NP", "NR", "TR",
"TT", "TV", "TW", "TZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU",
"WF", "WS", "YE", "YT", "ZA", "ZM", "ZW"
)
expect(info["keywords"].as_a).to_not be_empty
expect(info["keywords"].as_a.size).to eq(4)
expect(info["keywords"].as_a).to contain_exactly(
"Chris",
"Rea",
"Auberge",
"1991"
).in_any_order
expect(info["allowRatings"].as_bool).to be_true
expect(info["isFamilyFriendly"].as_bool).to be_true
expect(info["isListed"].as_bool).to be_true
expect(info["isUpcoming"].as_bool).to be_false
# Related videos
expect(info["relatedVideos"].as_a.size).to eq(19)
expect(info["relatedVideos"][0]["id"]).to eq("Ww3KeZ2_Yv4")
expect(info["relatedVideos"][0]["title"]).to eq("Chris Rea")
expect(info["relatedVideos"][0]["author"]).to eq("PanMusic")
expect(info["relatedVideos"][0]["ucid"]).to eq("UCsKAPSuh1iNbLWUga_igPyA")
expect(info["relatedVideos"][0]["view_count"]).to eq("31581")
expect(info["relatedVideos"][0]["short_view_count"]).to eq("31K")
expect(info["relatedVideos"][0]["author_verified"]).to eq("false")
# Description
expect(info["description"].as_s).to eq(" ")
expect(info["shortDescription"].as_s).to be_empty
expect(info["descriptionHtml"].as_s).to eq("")
# Video metadata
expect(info["genre"].as_s).to eq("Music")
expect(info["genreUcid"].as_s).to be_empty
expect(info["license"].as_s).to be_empty
# Author infos
expect(info["author"].as_s).to eq("ChrisReaOfficial")
expect(info["ucid"].as_s).to eq("UC_5q6nWPbD30-y6oiWF_oNA")
expect(info["authorThumbnail"].as_s).to be_empty
expect(info["authorVerified"].as_bool).to be_false
expect(info["subCountText"].as_s).to eq("-")
end
end

@ -1,111 +0,0 @@
require "../../parsers_helper.cr"
Spectator.describe "parse_video_info" do
it "parses scheduled livestreams data" do
# Enable mock
_player = load_mock("video/scheduled_live_PBD-Podcast.player")
_next = load_mock("video/scheduled_live_PBD-Podcast.next")
raw_data = _player.merge!(_next)
info = parse_video_info("N-yVic7BbY0", raw_data)
# Some basic verifications
expect(typeof(info)).to eq(Hash(String, JSON::Any))
expect(info["videoType"].as_s).to eq("Scheduled")
# Basic video infos
expect(info["title"].as_s).to eq("Home Team | PBD Podcast | Ep. 241")
expect(info["views"].as_i).to eq(6)
expect(info["likes"].as_i).to eq(7)
expect(info["lengthSeconds"].as_i).to eq(0_i64)
expect(info["published"].as_s).to eq("2023-02-28T14:00:00Z") # Unix 1677592800
# Extra video infos
expect(info["allowedRegions"].as_a).to_not be_empty
expect(info["allowedRegions"].as_a.size).to eq(249)
expect(info["allowedRegions"].as_a).to contain(
"AD", "AR", "BA", "BT", "CZ", "FO", "GL", "IO", "KE", "KH", "LS",
"LT", "MP", "NO", "PR", "RO", "SE", "SK", "SS", "SX", "SZ", "ZW"
)
expect(info["keywords"].as_a).to_not be_empty
expect(info["keywords"].as_a.size).to eq(25)
expect(info["keywords"].as_a).to contain_exactly(
"Patrick Bet-David",
"Valeutainment",
"The BetDavid Podcast",
"The BetDavid Show",
"Betdavid",
"PBD",
"BetDavid show",
"Betdavid podcast",
"podcast betdavid",
"podcast patrick",
"patrick bet david podcast",
"Valuetainment podcast",
"Entrepreneurs",
"Entrepreneurship",
"Entrepreneur Motivation",
"Entrepreneur Advice",
"Startup Entrepreneurs",
"valuetainment",
"patrick bet david",
"PBD podcast",
"Betdavid show",
"Betdavid Podcast",
"Podcast Betdavid",
"Show Betdavid",
"PBDPodcast"
).in_any_order
expect(info["allowRatings"].as_bool).to be_true
expect(info["isFamilyFriendly"].as_bool).to be_true
expect(info["isListed"].as_bool).to be_true
expect(info["isUpcoming"].as_bool).to be_true
# Related videos
expect(info["relatedVideos"].as_a.size).to eq(20)
expect(info["relatedVideos"][0]["id"]).to eq("j7jPzzjbVuk")
expect(info["relatedVideos"][0]["author"]).to eq("Democracy Now!")
expect(info["relatedVideos"][0]["ucid"]).to eq("UCzuqE7-t13O4NIDYJfakrhw")
expect(info["relatedVideos"][0]["view_count"]).to eq("7576")
expect(info["relatedVideos"][0]["short_view_count"]).to eq("7.5K")
expect(info["relatedVideos"][0]["author_verified"]).to eq("true")
# Description
description_start_text = "PBD Podcast Episode 241. The home team is ready and at it again with the latest news, interesting topics and trending conversations on topics that matter. Try our sponsor Aura for 14 days free - https://aura.com/pbd"
expect(info["description"].as_s).to start_with(description_start_text)
expect(info["shortDescription"].as_s).to start_with(description_start_text)
# TODO: Update mocks right before the start of PDB podcast, either on friday or saturday (time unknown)
# expect(info["descriptionHtml"].as_s).to start_with(
# "PBD Podcast Episode 241. The home team is ready and at it again with the latest news, interesting topics and trending conversations on topics that matter. Try our sponsor Aura for 14 days free - <a href=\"https://aura.com/pbd\">aura.com/pbd</a>"
# )
# Video metadata
expect(info["genre"].as_s).to eq("Entertainment")
expect(info["genreUcid"].as_s).to be_empty
expect(info["license"].as_s).to be_empty
# Author infos
expect(info["author"].as_s).to eq("PBD Podcast")
expect(info["ucid"].as_s).to eq("UCGX7nGXpz-CmO_Arg-cgJ7A")
expect(info["authorThumbnail"].as_s).to eq(
"https://yt3.ggpht.com/61ArDiQshJrvSXcGLhpFfIO3hlMabe2fksitcf6oGob0Mdr5gztdkXxRljICUodL4iuTSrtxW4A=s48-c-k-c0x00ffffff-no-rj"
)
expect(info["authorVerified"].as_bool).to be_false
expect(info["subCountText"].as_s).to eq("594K")
end
end

@ -1,35 +0,0 @@
require "db"
require "json"
require "kemal"
require "protodec/utils"
require "spectator"
require "../src/invidious/exceptions"
require "../src/invidious/helpers/macros"
require "../src/invidious/helpers/logger"
require "../src/invidious/helpers/utils"
require "../src/invidious/videos"
require "../src/invidious/videos/*"
require "../src/invidious/comments/content"
require "../src/invidious/helpers/serialized_yt_data"
require "../src/invidious/yt_backend/extractors"
require "../src/invidious/yt_backend/extractors_utils"
OUTPUT = File.open(File::NULL, "w")
LOGGER = Invidious::LogHandler.new(OUTPUT, LogLevel::Off)
def load_mock(file) : Hash(String, JSON::Any)
file = File.join(__DIR__, "..", "mocks", file + ".json")
content = File.read(file)
return JSON.parse(content).as_h
end
Spectator.configure do |config|
config.fail_blank
config.randomize
end

@ -5,10 +5,10 @@ require "protodec/utils"
require "yaml" require "yaml"
require "../src/invidious/helpers/*" require "../src/invidious/helpers/*"
require "../src/invidious/channels/*" require "../src/invidious/channels/*"
require "../src/invidious/videos/caption"
require "../src/invidious/videos" require "../src/invidious/videos"
require "../src/invidious/comments"
require "../src/invidious/playlists" require "../src/invidious/playlists"
require "../src/invidious/search/ctoken" require "../src/invidious/search"
require "../src/invidious/trending" require "../src/invidious/trending"
require "spectator" require "spectator"

@ -1,16 +0,0 @@
# Overrides for Kemal's `content_for` macro in order to keep using
# kilt as it was before Kemal v1.1.1 (Kemal PR #618).
require "kemal"
require "kilt"
macro content_for(key, file = __FILE__)
%proc = ->() {
__kilt_io__ = IO::Memory.new
{{ yield }}
__kilt_io__.to_s
}
CONTENT_FOR_BLOCKS[{{key}}] = Tuple.new {{file}}, %proc
nil
end

@ -16,13 +16,7 @@
require "digest/md5" require "digest/md5"
require "file_utils" require "file_utils"
# Require kemal, kilt, then our own overrides
require "kemal" require "kemal"
require "kilt"
require "./ext/kemal_content_for.cr"
require "./ext/kemal_static_file_handler.cr"
require "athena-negotiation" require "athena-negotiation"
require "openssl/hmac" require "openssl/hmac"
require "option_parser" require "option_parser"
@ -33,36 +27,22 @@ require "compress/zip"
require "protodec/utils" require "protodec/utils"
require "./invidious/database/*" require "./invidious/database/*"
require "./invidious/database/migrations/*"
require "./invidious/http_server/*"
require "./invidious/helpers/*" require "./invidious/helpers/*"
require "./invidious/yt_backend/*" require "./invidious/yt_backend/*"
require "./invidious/frontend/*" require "./invidious/frontend/*"
require "./invidious/videos/*"
require "./invidious/jsonify/**"
require "./invidious/*" require "./invidious/*"
require "./invidious/comments/*"
require "./invidious/channels/*" require "./invidious/channels/*"
require "./invidious/user/*" require "./invidious/user/*"
require "./invidious/search/*"
require "./invidious/routes/**" require "./invidious/routes/**"
require "./invidious/jobs/**" require "./invidious/jobs/**"
# Declare the base namespace for invidious
module Invidious
end
# Simple alias to make code easier to read
alias IV = Invidious
CONFIG = Config.load CONFIG = Config.load
HMAC_KEY_CONFIGURED = CONFIG.hmac_key != nil
HMAC_KEY = CONFIG.hmac_key || Random::Secure.hex(32) HMAC_KEY = CONFIG.hmac_key || Random::Secure.hex(32)
PG_DB = DB.open CONFIG.database_url PG_DB = DB.open CONFIG.database_url
ARCHIVE_URL = URI.parse("https://archive.org") ARCHIVE_URL = URI.parse("https://archive.org")
LOGIN_URL = URI.parse("https://accounts.google.com")
PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com") PUBSUB_URL = URI.parse("https://pubsubhubbub.appspot.com")
REDDIT_URL = URI.parse("https://www.reddit.com") REDDIT_URL = URI.parse("https://www.reddit.com")
YT_URL = URI.parse("https://www.youtube.com") YT_URL = URI.parse("https://www.youtube.com")
@ -122,10 +102,6 @@ Kemal.config.extra_options do |parser|
puts SOFTWARE.to_pretty_json puts SOFTWARE.to_pretty_json
exit exit
end end
parser.on("--migrate", "Run any migrations (beta, use at your own risk!!") do
Invidious::Database::Migrator.new(PG_DB).migrate
exit
end
end end
Kemal::CLI.new ARGV Kemal::CLI.new ARGV
@ -145,13 +121,12 @@ Invidious::Database.check_integrity(CONFIG)
# Running the script by itself would show some colorful feedback while this doesn't. # Running the script by itself would show some colorful feedback while this doesn't.
# Perhaps we should just move the script to runtime in order to get that feedback? # Perhaps we should just move the script to runtime in order to get that feedback?
{% puts "\nChecking player dependencies, this may take more than 20 minutes... If it is stuck, check your internet connection.\n" %} {% puts "\nChecking player dependencies...\n" %}
{% if flag?(:minified_player_dependencies) %} {% if flag?(:minified_player_dependencies) %}
{% puts run("../scripts/fetch-player-dependencies.cr", "--minified").stringify %} {% puts run("../scripts/fetch-player-dependencies.cr", "--minified").stringify %}
{% else %} {% else %}
{% puts run("../scripts/fetch-player-dependencies.cr").stringify %} {% puts run("../scripts/fetch-player-dependencies.cr").stringify %}
{% end %} {% end %}
{% puts "\nDone checking player dependencies, now compiling Invidious...\n" %}
{% end %} {% end %}
# Start jobs # Start jobs
@ -181,30 +156,313 @@ if CONFIG.popular_enabled
Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB) Invidious::Jobs.register Invidious::Jobs::PullPopularVideosJob.new(PG_DB)
end end
CONNECTION_CHANNEL = ::Channel({Bool, ::Channel(PQ::Notification)}).new(32) CONNECTION_CHANNEL = Channel({Bool, Channel(PQ::Notification)}).new(32)
Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(CONNECTION_CHANNEL, CONFIG.database_url) Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(CONNECTION_CHANNEL, CONFIG.database_url)
Invidious::Jobs.register Invidious::Jobs::ClearExpiredItemsJob.new
Invidious::Jobs.start_all Invidious::Jobs.start_all
def popular_videos def popular_videos
Invidious::Jobs::PullPopularVideosJob::POPULAR_VIDEOS.get Invidious::Jobs::PullPopularVideosJob::POPULAR_VIDEOS.get
end end
# Routing
before_all do |env| before_all do |env|
Invidious::Routes::BeforeAll.handle(env) preferences = Preferences.from_json("{}")
begin
if prefs_cookie = env.request.cookies["PREFS"]?
preferences = Preferences.from_json(URI.decode_www_form(prefs_cookie.value))
else
if language_header = env.request.headers["Accept-Language"]?
if language = ANG.language_negotiator.best(language_header, LOCALES.keys)
preferences.locale = language.header
end
end
end
rescue
preferences = Preferences.from_json("{}")
end
env.set "preferences", preferences
env.response.headers["X-XSS-Protection"] = "1; mode=block"
env.response.headers["X-Content-Type-Options"] = "nosniff"
# Allow media resources to be loaded from google servers
# TODO: check if *.youtube.com can be removed
if CONFIG.disabled?("local") || !preferences.local
extra_media_csp = " https://*.googlevideo.com:443 https://*.youtube.com:443"
else
extra_media_csp = ""
end
# Only allow the pages at /embed/* to be embedded
if env.request.resource.starts_with?("/embed")
frame_ancestors = "'self' http: https:"
else
frame_ancestors = "'none'"
end
# TODO: Remove style-src's 'unsafe-inline', requires to remove all
# inline styles (<style> [..] </style>, style=" [..] ")
env.response.headers["Content-Security-Policy"] = {
"default-src 'none'",
"script-src 'self'",
"style-src 'self' 'unsafe-inline'",
"img-src 'self' data:",
"font-src 'self' data:",
"connect-src 'self'",
"manifest-src 'self'",
"media-src 'self' blob:" + extra_media_csp,
"child-src 'self' blob:",
"frame-src 'self'",
"frame-ancestors " + frame_ancestors,
}.join("; ")
env.response.headers["Referrer-Policy"] = "same-origin"
# Ask the chrom*-based browsers to disable FLoC
# See: https://blog.runcloud.io/google-floc/
env.response.headers["Permissions-Policy"] = "interest-cohort=()"
if (Kemal.config.ssl || CONFIG.https_only) && CONFIG.hsts
env.response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains; preload"
end
next if {
"/sb/",
"/vi/",
"/s_p/",
"/yts/",
"/ggpht/",
"/api/manifest/",
"/videoplayback",
"/latest_version",
"/download",
}.any? { |r| env.request.resource.starts_with? r }
if env.request.cookies.has_key? "SID"
sid = env.request.cookies["SID"].value
if sid.starts_with? "v1:"
raise "Cannot use token as SID"
end
# Invidious users only have SID
if !env.request.cookies.has_key? "SSID"
if email = Invidious::Database::SessionIDs.select_email(sid)
user = Invidious::Database::Users.select!(email: email)
csrf_token = generate_response(sid, {
":authorize_token",
":playlist_ajax",
":signout",
":subscription_ajax",
":token_ajax",
":watch_ajax",
}, HMAC_KEY, 1.week)
preferences = user.preferences
env.set "preferences", preferences
env.set "sid", sid
env.set "csrf_token", csrf_token
env.set "user", user
end
else
headers = HTTP::Headers.new
headers["Cookie"] = env.request.headers["Cookie"]
begin
user, sid = get_user(sid, headers, false)
csrf_token = generate_response(sid, {
":authorize_token",
":playlist_ajax",
":signout",
":subscription_ajax",
":token_ajax",
":watch_ajax",
}, HMAC_KEY, 1.week)
preferences = user.preferences
env.set "preferences", preferences
env.set "sid", sid
env.set "csrf_token", csrf_token
env.set "user", user
rescue ex
end
end
end
dark_mode = convert_theme(env.params.query["dark_mode"]?) || preferences.dark_mode.to_s
thin_mode = env.params.query["thin_mode"]? || preferences.thin_mode.to_s
thin_mode = thin_mode == "true"
locale = env.params.query["hl"]? || preferences.locale
preferences.dark_mode = dark_mode
preferences.thin_mode = thin_mode
preferences.locale = locale
env.set "preferences", preferences
current_page = env.request.path
if env.request.query
query = HTTP::Params.parse(env.request.query.not_nil!)
if query["referer"]?
query["referer"] = get_referer(env, "/")
end end
Invidious::Routing.register_all current_page += "?#{query}"
end
env.set "current_page", URI.encode_www_form(current_page)
end
{% unless flag?(:api_only) %}
Invidious::Routing.get "/", Invidious::Routes::Misc, :home
Invidious::Routing.get "/privacy", Invidious::Routes::Misc, :privacy
Invidious::Routing.get "/licenses", Invidious::Routes::Misc, :licenses
Invidious::Routing.get "/channel/:ucid", Invidious::Routes::Channels, :home
Invidious::Routing.get "/channel/:ucid/home", Invidious::Routes::Channels, :home
Invidious::Routing.get "/channel/:ucid/videos", Invidious::Routes::Channels, :videos
Invidious::Routing.get "/channel/:ucid/playlists", Invidious::Routes::Channels, :playlists
Invidious::Routing.get "/channel/:ucid/community", Invidious::Routes::Channels, :community
Invidious::Routing.get "/channel/:ucid/about", Invidious::Routes::Channels, :about
Invidious::Routing.get "/channel/:ucid/live", Invidious::Routes::Channels, :live
Invidious::Routing.get "/user/:user/live", Invidious::Routes::Channels, :live
Invidious::Routing.get "/c/:user/live", Invidious::Routes::Channels, :live
["", "/videos", "/playlists", "/community", "/about"].each do |path|
# /c/LinusTechTips
Invidious::Routing.get "/c/:user#{path}", Invidious::Routes::Channels, :brand_redirect
# /user/linustechtips | Not always the same as /c/
Invidious::Routing.get "/user/:user#{path}", Invidious::Routes::Channels, :brand_redirect
# /attribution_link?a=anything&u=/channel/UCZYTClx2T1of7BRZ86-8fow
Invidious::Routing.get "/attribution_link#{path}", Invidious::Routes::Channels, :brand_redirect
# /profile?user=linustechtips
Invidious::Routing.get "/profile/#{path}", Invidious::Routes::Channels, :profile
end
Invidious::Routing.get "/watch", Invidious::Routes::Watch, :handle
Invidious::Routing.post "/watch_ajax", Invidious::Routes::Watch, :mark_watched
Invidious::Routing.get "/watch/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/shorts/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/clip/:clip", Invidious::Routes::Watch, :clip
Invidious::Routing.get "/w/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/v/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/e/:id", Invidious::Routes::Watch, :redirect
Invidious::Routing.get "/redirect", Invidious::Routes::Misc, :cross_instance_redirect
Invidious::Routing.post "/download", Invidious::Routes::Watch, :download
Invidious::Routing.get "/embed/", Invidious::Routes::Embed, :redirect
Invidious::Routing.get "/embed/:id", Invidious::Routes::Embed, :show
Invidious::Routing.get "/create_playlist", Invidious::Routes::Playlists, :new
Invidious::Routing.post "/create_playlist", Invidious::Routes::Playlists, :create
Invidious::Routing.get "/subscribe_playlist", Invidious::Routes::Playlists, :subscribe
Invidious::Routing.get "/delete_playlist", Invidious::Routes::Playlists, :delete_page
Invidious::Routing.post "/delete_playlist", Invidious::Routes::Playlists, :delete
Invidious::Routing.get "/edit_playlist", Invidious::Routes::Playlists, :edit
Invidious::Routing.post "/edit_playlist", Invidious::Routes::Playlists, :update
Invidious::Routing.get "/add_playlist_items", Invidious::Routes::Playlists, :add_playlist_items_page
Invidious::Routing.post "/playlist_ajax", Invidious::Routes::Playlists, :playlist_ajax
Invidious::Routing.get "/playlist", Invidious::Routes::Playlists, :show
Invidious::Routing.get "/mix", Invidious::Routes::Playlists, :mix
Invidious::Routing.get "/watch_videos", Invidious::Routes::Playlists, :watch_videos
Invidious::Routing.get "/opensearch.xml", Invidious::Routes::Search, :opensearch
Invidious::Routing.get "/results", Invidious::Routes::Search, :results
Invidious::Routing.get "/search", Invidious::Routes::Search, :search
# User routes
define_user_routes()
# Feeds
Invidious::Routing.get "/view_all_playlists", Invidious::Routes::Feeds, :view_all_playlists_redirect
Invidious::Routing.get "/feed/playlists", Invidious::Routes::Feeds, :playlists
Invidious::Routing.get "/feed/popular", Invidious::Routes::Feeds, :popular
Invidious::Routing.get "/feed/trending", Invidious::Routes::Feeds, :trending
Invidious::Routing.get "/feed/subscriptions", Invidious::Routes::Feeds, :subscriptions
Invidious::Routing.get "/feed/history", Invidious::Routes::Feeds, :history
# RSS Feeds
Invidious::Routing.get "/feed/channel/:ucid", Invidious::Routes::Feeds, :rss_channel
Invidious::Routing.get "/feed/private", Invidious::Routes::Feeds, :rss_private
Invidious::Routing.get "/feed/playlist/:plid", Invidious::Routes::Feeds, :rss_playlist
Invidious::Routing.get "/feeds/videos.xml", Invidious::Routes::Feeds, :rss_videos
# Support push notifications via PubSubHubbub
Invidious::Routing.get "/feed/webhook/:token", Invidious::Routes::Feeds, :push_notifications_get
Invidious::Routing.post "/feed/webhook/:token", Invidious::Routes::Feeds, :push_notifications_post
Invidious::Routing.get "/modify_notifications", Invidious::Routes::Notifications, :modify
Invidious::Routing.post "/subscription_ajax", Invidious::Routes::Subscriptions, :toggle_subscription
Invidious::Routing.get "/subscription_manager", Invidious::Routes::Subscriptions, :subscription_manager
{% end %}
Invidious::Routing.get "/ggpht/*", Invidious::Routes::Images, :ggpht
Invidious::Routing.options "/sb/:authority/:id/:storyboard/:index", Invidious::Routes::Images, :options_storyboard
Invidious::Routing.get "/sb/:authority/:id/:storyboard/:index", Invidious::Routes::Images, :get_storyboard
Invidious::Routing.get "/s_p/:id/:name", Invidious::Routes::Images, :s_p_image
Invidious::Routing.get "/yts/img/:name", Invidious::Routes::Images, :yts_image
Invidious::Routing.get "/vi/:id/:name", Invidious::Routes::Images, :thumbnails
# API routes (macro)
define_v1_api_routes()
# Video playback (macros)
define_api_manifest_routes()
define_video_playback_routes()
error 404 do |env| error 404 do |env|
Invidious::Routes::ErrorRoutes.error_404(env) if md = env.request.path.match(/^\/(?<id>([a-zA-Z0-9_-]{11})|(\w+))$/)
item = md["id"]
# Check if item is branding URL e.g. https://youtube.com/gaming
response = YT_POOL.client &.get("/#{item}")
if response.status_code == 301
response = YT_POOL.client &.get(URI.parse(response.headers["Location"]).request_target)
end
if response.body.empty?
env.response.headers["Location"] = "/"
halt env, status_code: 302
end
html = XML.parse_html(response.body)
ucid = html.xpath_node(%q(//link[@rel="canonical"])).try &.["href"].split("/")[-1]
if ucid
env.response.headers["Location"] = "/channel/#{ucid}"
halt env, status_code: 302
end
params = [] of String
env.params.query.each do |k, v|
params << "#{k}=#{v}"
end
params = params.join("&")
url = "/watch?v=#{item}"
if !params.empty?
url += "&#{params}"
end
# Check if item is video ID
if item.match(/^[a-zA-Z0-9_-]{11}$/) && YT_POOL.client &.head("/watch?v=#{item}").status_code != 404
env.response.headers["Location"] = url
halt env, status_code: 302
end
end
env.response.headers["Location"] = "/"
halt env, status_code: 302
end end
error 500 do |env, ex| error 500 do |env, ex|
locale = env.get("preferences").as(Preferences).locale
error_template(500, ex) error_template(500, ex)
end end
@ -212,8 +470,6 @@ static_headers do |response|
response.headers.add("Cache-Control", "max-age=2629800") response.headers.add("Cache-Control", "max-age=2629800")
end end
# Init Kemal
public_folder "assets" public_folder "assets"
Kemal.config.powered_by_header = false Kemal.config.powered_by_header = false
@ -230,10 +486,6 @@ Kemal.config.host_binding = Kemal.config.host_binding != "0.0.0.0" ? Kemal.confi
Kemal.config.port = Kemal.config.port != 3000 ? Kemal.config.port : CONFIG.port Kemal.config.port = Kemal.config.port != 3000 ? Kemal.config.port : CONFIG.port
Kemal.config.app_name = "Invidious" Kemal.config.app_name = "Invidious"
if !HMAC_KEY_CONFIGURED
LOGGER.warn("Please configure hmac_key by July 1st, see more here: https://github.com/iv-org/invidious/issues/3854")
end
# Use in kemal's production mode. # Use in kemal's production mode.
# Users can also set the KEMAL_ENV environmental variable for this to be set automatically. # Users can also set the KEMAL_ENV environmental variable for this to be set automatically.
{% if flag?(:release) || flag?(:production) %} {% if flag?(:release) || flag?(:production) %}

@ -6,15 +6,19 @@ record AboutChannel,
author_url : String, author_url : String,
author_thumbnail : String, author_thumbnail : String,
banner : String?, banner : String?,
description : String,
description_html : String, description_html : String,
total_views : Int64, total_views : Int64,
sub_count : Int32, sub_count : Int32,
joined : Time, joined : Time,
is_family_friendly : Bool, is_family_friendly : Bool,
allowed_regions : Array(String), allowed_regions : Array(String),
tabs : Array(String), tabs : Array(String)
verified : Bool
record AboutRelatedChannel,
ucid : String,
author : String,
author_url : String,
author_thumbnail : String
def get_about_info(ucid, locale) : AboutChannel def get_about_info(ucid, locale) : AboutChannel
begin begin
@ -25,12 +29,7 @@ def get_about_info(ucid, locale) : AboutChannel
end end
if initdata.dig?("alerts", 0, "alertRenderer", "type") == "ERROR" if initdata.dig?("alerts", 0, "alertRenderer", "type") == "ERROR"
error_message = initdata["alerts"][0]["alertRenderer"]["text"]["simpleText"].as_s raise InfoException.new(initdata["alerts"][0]["alertRenderer"]["text"]["simpleText"].as_s)
if error_message == "This channel does not exist."
raise NotFoundException.new(error_message)
else
raise InfoException.new(error_message)
end
end end
if browse_endpoint = initdata["onResponseReceivedActions"]?.try &.[0]?.try &.["navigateAction"]?.try &.["endpoint"]?.try &.["browseEndpoint"]? if browse_endpoint = initdata["onResponseReceivedActions"]?.try &.[0]?.try &.["navigateAction"]?.try &.["endpoint"]?.try &.["browseEndpoint"]?
@ -52,12 +51,15 @@ def get_about_info(ucid, locale) : AboutChannel
banners = initdata["header"]["interactiveTabbedHeaderRenderer"]?.try &.["banner"]?.try &.["thumbnails"]? banners = initdata["header"]["interactiveTabbedHeaderRenderer"]?.try &.["banner"]?.try &.["thumbnails"]?
banner = banners.try &.[-1]?.try &.["url"].as_s? banner = banners.try &.[-1]?.try &.["url"].as_s?
description_node = initdata["header"]["interactiveTabbedHeaderRenderer"]["description"] description = initdata["header"]["interactiveTabbedHeaderRenderer"]["description"]["simpleText"].as_s
description_html = HTML.escape(description)
is_family_friendly = initdata["microformat"]["microformatDataRenderer"]["familySafe"].as_bool
allowed_regions = initdata["microformat"]["microformatDataRenderer"]["availableCountries"].as_a.map(&.as_s)
else else
author = initdata["metadata"]["channelMetadataRenderer"]["title"].as_s author = initdata["metadata"]["channelMetadataRenderer"]["title"].as_s
author_url = initdata["metadata"]["channelMetadataRenderer"]["channelUrl"].as_s author_url = initdata["metadata"]["channelMetadataRenderer"]["channelUrl"].as_s
author_thumbnail = initdata["metadata"]["channelMetadataRenderer"]["avatar"]["thumbnails"][0]["url"].as_s author_thumbnail = initdata["metadata"]["channelMetadataRenderer"]["avatar"]["thumbnails"][0]["url"].as_s
author_verified = has_verified_badge?(initdata.dig?("header", "c4TabbedHeaderRenderer", "badges"))
ucid = initdata["metadata"]["channelMetadataRenderer"]["externalId"].as_s ucid = initdata["metadata"]["channelMetadataRenderer"]["externalId"].as_s
@ -69,76 +71,48 @@ def get_about_info(ucid, locale) : AboutChannel
# banner = nil # banner = nil
# end # end
description_node = initdata["metadata"]["channelMetadataRenderer"]?.try &.["description"]? description = initdata["metadata"]["channelMetadataRenderer"]?.try &.["description"]?.try &.as_s? || ""
end
is_family_friendly = initdata["microformat"]["microformatDataRenderer"]["familySafe"].as_bool
allowed_regions = initdata
.dig?("microformat", "microformatDataRenderer", "availableCountries")
.try &.as_a.map(&.as_s) || [] of String
description = !description_node.nil? ? description_node.as_s : ""
description_html = HTML.escape(description) description_html = HTML.escape(description)
if !description_node.nil? is_family_friendly = initdata["microformat"]["microformatDataRenderer"]["familySafe"].as_bool
if description_node.as_h?.nil? allowed_regions = initdata["microformat"]["microformatDataRenderer"]["availableCountries"].as_a.map(&.as_s)
description_node = text_to_parsed_content(description_node.as_s)
end
description_html = parse_content(description_node)
if description_html == "" && description != ""
description_html = HTML.escape(description)
end
end end
total_views = 0_i64 total_views = 0_i64
joined = Time.unix(0) joined = Time.unix(0)
tab_names = [] of String tabs = [] of String
if tabs_json = initdata["contents"]["twoColumnBrowseResultsRenderer"]["tabs"]? tabs_json = initdata["contents"]["twoColumnBrowseResultsRenderer"]["tabs"]?.try &.as_a?
# Get the name of the tabs available on this channel if !tabs_json.nil?
tab_names = tabs_json.as_a.compact_map do |entry| # Retrieve information from the tabs array. The index we are looking for varies between channels.
name = entry.dig?("tabRenderer", "title").try &.as_s.downcase tabs_json.each do |node|
# Try to find the about section which is located in only one of the tabs.
# This is a small fix to not add extra code on the HTML side channel_about_meta = node["tabRenderer"]?.try &.["content"]?.try &.["sectionListRenderer"]?
# I.e, the URL for the "live" tab is .../streams, so use "streams" .try &.["contents"]?.try &.[0]?.try &.["itemSectionRenderer"]?.try &.["contents"]?
# everywhere for the sake of simplicity .try &.[0]?.try &.["channelAboutFullMetadataRenderer"]?
(name == "live") ? "streams" : name
end
# Get the currently active tab ("About")
about_tab = extract_selected_tab(tabs_json)
# Try to find the about metadata section
channel_about_meta = about_tab.dig?(
"content",
"sectionListRenderer", "contents", 0,
"itemSectionRenderer", "contents", 0,
"channelAboutFullMetadataRenderer"
)
if !channel_about_meta.nil? if !channel_about_meta.nil?
total_views = channel_about_meta.dig?("viewCountText", "simpleText").try &.as_s.gsub(/\D/, "").to_i64? || 0_i64 total_views = channel_about_meta["viewCountText"]?.try &.["simpleText"]?.try &.as_s.gsub(/\D/, "").to_i64? || 0_i64
# The joined text is split to several sub strings. The reduce joins those strings before parsing the date. # The joined text is split to several sub strings. The reduce joins those strings before parsing the date.
joined = extract_text(channel_about_meta["joinedDateText"]?) joined = channel_about_meta["joinedDateText"]?.try &.["runs"]?.try &.as_a.reduce("") { |acc, nd| acc + nd["text"].as_s }
.try { |text| Time.parse(text, "Joined %b %-d, %Y", Time::Location.local) } || Time.unix(0) .try { |text| Time.parse(text, "Joined %b %-d, %Y", Time::Location.local) } || Time.unix(0)
# Normal Auto-generated channels # Normal Auto-generated channels
# https://support.google.com/youtube/answer/2579942 # https://support.google.com/youtube/answer/2579942
# For auto-generated channels, channel_about_meta only has # For auto-generated channels, channel_about_meta only has ["description"]["simpleText"] and ["primaryLinks"][0]["title"]["simpleText"]
# ["description"]["simpleText"] and ["primaryLinks"][0]["title"]["simpleText"] if (channel_about_meta["primaryLinks"]?.try &.size || 0) == 1 && (channel_about_meta["primaryLinks"][0]?) &&
auto_generated = ( (channel_about_meta["primaryLinks"][0]["title"]?.try &.["simpleText"]?.try &.as_s? || "") == "Auto-generated by YouTube"
(channel_about_meta["primaryLinks"]?.try &.size) == 1 && \ auto_generated = true
extract_text(channel_about_meta.dig?("primaryLinks", 0, "title")) == "Auto-generated by YouTube" end
)
end end
end end
tabs = tabs_json.reject { |node| node["tabRenderer"]?.nil? }.map(&.["tabRenderer"]["title"].as_s.downcase)
end
sub_count = initdata sub_count = initdata["header"]["c4TabbedHeaderRenderer"]?.try &.["subscriberCountText"]?.try &.["simpleText"]?.try &.as_s?
.dig?("header", "c4TabbedHeaderRenderer", "subscriberCountText", "simpleText").try &.as_s? .try { |text| short_text_to_number(text.split(" ")[0]) } || 0
.try { |text| short_text_to_number(text.split(" ")[0]).to_i32 } || 0
AboutChannel.new( AboutChannel.new(
ucid: ucid, ucid: ucid,
@ -147,27 +121,51 @@ def get_about_info(ucid, locale) : AboutChannel
author_url: author_url, author_url: author_url,
author_thumbnail: author_thumbnail, author_thumbnail: author_thumbnail,
banner: banner, banner: banner,
description: description,
description_html: description_html, description_html: description_html,
total_views: total_views, total_views: total_views,
sub_count: sub_count, sub_count: sub_count,
joined: joined, joined: joined,
is_family_friendly: is_family_friendly, is_family_friendly: is_family_friendly,
allowed_regions: allowed_regions, allowed_regions: allowed_regions,
tabs: tab_names, tabs: tabs,
verified: author_verified || false,
) )
end end
def fetch_related_channels(about_channel : AboutChannel, continuation : String? = nil) : {Array(SearchChannel), String?} def fetch_related_channels(about_channel : AboutChannel) : Array(AboutRelatedChannel)
if continuation.nil?
# params is {"2:string":"channels"} encoded # params is {"2:string":"channels"} encoded
initial_data = YoutubeAPI.browse(browse_id: about_channel.ucid, params: "EghjaGFubmVscw%3D%3D") channels = YoutubeAPI.browse(browse_id: about_channel.ucid, params: "EghjaGFubmVscw%3D%3D")
else
initial_data = YoutubeAPI.browse(continuation) tabs = channels.dig?("contents", "twoColumnBrowseResultsRenderer", "tabs").try(&.as_a?) || [] of JSON::Any
end tab = tabs.find(&.dig?("tabRenderer", "title").try(&.as_s?).try(&.== "Channels"))
return [] of AboutRelatedChannel if tab.nil?
items, continuation = extract_items(initial_data) items = tab.dig?(
"tabRenderer", "content",
"sectionListRenderer", "contents", 0,
"itemSectionRenderer", "contents", 0,
"gridRenderer", "items"
).try &.as_a?
related = [] of AboutRelatedChannel
return related if (items.nil? || items.empty?)
items.each do |item|
renderer = item["gridChannelRenderer"]?
next if !renderer
related_id = renderer.dig("channelId").as_s
related_title = renderer.dig("title", "simpleText").as_s
related_author_url = renderer.dig("navigationEndpoint", "browseEndpoint", "canonicalBaseUrl").as_s
related_author_thumbnail = HelperExtractors.get_thumbnails(renderer)
related << AboutRelatedChannel.new(
ucid: related_id,
author: related_title,
author_url: related_author_url,
author_thumbnail: related_author_thumbnail,
)
end
return items.select(SearchChannel), continuation return related
end end

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save