Compare commits

..

No commits in common. "f51a435f75e7a4980e0d77dda78e58e7761a599a" and "8ec75fcfda7b795f28075834e514fafe41d1a0fe" have entirely different histories.

80 changed files with 1031 additions and 344 deletions

View File

@ -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.

View File

@ -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
@ -86,7 +82,6 @@ clean:
distclean: clean distclean: clean
rm -rf libs rm -rf libs
rm -rf ~/.cache/{crystal,shards}
# ----------------------- # -----------------------
@ -111,12 +106,11 @@ help:
@echo "" @echo ""
@echo "Build options available for this Makefile:" @echo "Build options available for this Makefile:"
@echo "" @echo ""
@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)"

View File

@ -153,9 +153,9 @@ Weblate also allows you to log-in with major SSO providers like Github, Gitlab,
- [WatchTube](https://github.com/WatchTubeTeam/WatchTube): Powerful YouTube client for Apple Watch. - [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. - [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. - [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). - [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. - [Playlet](https://github.com/iBicha/playlet): Unofficial Youtube client for Roku TV
- [Clipious](https://github.com/lamarios/clipious): Unofficial Invidious client for Android. - [Clipious](https://github.com/lamarios/clipious): Unofficial Invidious client for Android
## Liability ## Liability

View File

@ -282,7 +282,7 @@ function get_youtube_replies(target, load_more, load_replies) {
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 += response.contentHtml;
} else { } else {
body.removeChild(body.lastElementChild); body.removeChild(body.lastElementChild);

View File

@ -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
@ -465,17 +466,13 @@ jobs:
#use_pubsub_feeds: false #use_pubsub_feeds: false
## ##
## HMAC signing key used for CSRF tokens, cookies and pubsub ## HMAC signing key used for CSRF tokens and pubsub
## subscriptions verification. ## subscriptions verification.
## ##
## Note: This parameter is mandatory and should be a random string.
## Such random string can be generated on linux with the following
## command: `pwgen 20 1`
##
## Accepted values: a string ## Accepted values: a string
## Default: <none> ## Default: <none>
## ##
hmac_key: "CHANGE_ME!!" #hmac_key:
## ##
## List of video IDs where the "download" widget must be ## List of video IDs where the "download" widget must be

View File

@ -30,7 +30,6 @@ services:
# domain: # domain:
# https_only: false # https_only: false
# statistics_enabled: false # statistics_enabled: false
hmac_key: "CHANGE_ME!!"
healthcheck: healthcheck:
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/comments/jNQXAC9IVRw || exit 1 test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/comments/jNQXAC9IVRw || exit 1
interval: 30s interval: 30s

View File

@ -1,15 +1 @@
{ {}
"generic_views_count": "{{count}} kyk",
"generic_views_count_plural": "{{count}} kyke",
"generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} videos",
"generic_playlists_count": "{{count}} snitlys",
"generic_playlists_count_plural": "{{count}} snitlyste",
"generic_subscriptions_count": "{{count}} intekening",
"generic_subscriptions_count_plural": "{{count}} intekeninge",
"LIVE": "LEWENDIG",
"generic_subscribers_count": "{{count}} intekenaar",
"generic_subscribers_count_plural": "{{count}} intekenare",
"Shared `x` ago": "`x` gelede gedeel",
"New passwords must match": "Nuwe wagwoord moet ooreenstem"
}

View File

@ -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):": "الوقت (h:mm:ss):", "Time (h:mm:ss):": "الوقت (h:mm:ss):",
@ -44,12 +46,13 @@
"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": "كرر المقطع المرئيّ دائما: ",
"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": "السرعة الافتراضية: ",
@ -155,18 +158,23 @@
"View more comments on Reddit": "عرض المزيد من التعليقات على\\من موقع ريديت", "View more comments on 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": "عرض تعليقات ريديت",
"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'": "الرجاء تسجيل الدخول باستخدام \"تسجيل الدخول باستخدام 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": "الرجاء تسجيل الدخول",

View File

@ -11,6 +11,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": "হ্যাঁ",
@ -33,6 +34,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):": "সময় (ঘণ্টা:মিনিট:সেকেন্ড):",
@ -41,6 +43,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": "সর্বদা লুপ: ",

View File

@ -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": "সর্বদা লুপ: ",

View File

@ -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: ",
@ -136,6 +137,7 @@
"channel_tab_channels_label": "Canals", "channel_tab_channels_label": "Canals",
"channel_tab_playlists_label": "Llistes de reproducció", "channel_tab_playlists_label": "Llistes de reproducció",
"channel_tab_community_label": "Comunitat", "channel_tab_community_label": "Comunitat",
"Invalid TFA code": "Codi TFA no vàlid",
"Czech": "Txec", "Czech": "Txec",
"Default": "Per defecte", "Default": "Per defecte",
"Amharic": "Amàric", "Amharic": "Amàric",
@ -184,6 +186,7 @@
"Released under the AGPLv3 on Github.": "Publicat sota l'AGPLv3 a GitHub.", "Released under the AGPLv3 on Github.": "Publicat sota l'AGPLv3 a GitHub.",
"Token manager": "Gestor de testimonis", "Token manager": "Gestor de testimonis",
"Watch history": "Historial de reproduccions", "Watch history": "Historial de reproduccions",
"Cannot change password for Google accounts": "No es pot canviar la contrasenya dels comptes de Google",
"Authorize token?": "Autoritzar testimoni?", "Authorize token?": "Autoritzar testimoni?",
"Source available here.": "Font disponible aquí.", "Source available here.": "Font disponible aquí.",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Exporta subscripcions com a OPML (per a NewPipe i FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Exporta subscripcions com a OPML (per a NewPipe i FreeTube)",
@ -222,6 +225,7 @@
}, },
"View Reddit comments": "Veure comentaris de Reddit", "View Reddit comments": "Veure comentaris de Reddit",
"Incorrect password": "Contrasenya incorrecta", "Incorrect password": "Contrasenya incorrecta",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "No es pot iniciar la sessió, assegureu-vos que l'autenticació de dos factors (Autenticador o SMS) estigui activada.",
"Erroneous CAPTCHA": "CAPTCHA erroni", "Erroneous CAPTCHA": "CAPTCHA erroni",
"CAPTCHA is a required field": "El CAPTCHA és un camp obligatori", "CAPTCHA is a required field": "El CAPTCHA és un camp obligatori",
"Korean (auto-generated)": "Coreà (generat automàticament)", "Korean (auto-generated)": "Coreà (generat automàticament)",
@ -268,6 +272,7 @@
"Khmer": "Khmer", "Khmer": "Khmer",
"This channel does not exist.": "Aquest canal no existeix.", "This channel does not exist.": "Aquest canal no existeix.",
"Song: ": "Cançó: ", "Song: ": "Cançó: ",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "S'ha produït un error en iniciar sessió. Això pot ser perquè l'autenticació de dos factors no està activada per al vostre compte.",
"channel:`x`": "canal: `x`", "channel:`x`": "canal: `x`",
"Deleted or invalid channel": "Canal suprimit o no vàlid", "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 get channel info.": "No s'ha pogut obtenir la informació del canal.",
@ -286,6 +291,7 @@
"User ID is a required field": "L'identificador d'usuari és un camp obligatori", "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", "Password is a required field": "La contrasenya és un camp obligatori",
"Wrong username or password": "Nom d'usuari o contrasenya incorrectes", "Wrong username or password": "Nom d'usuari o contrasenya incorrectes",
"Please sign in using 'Log in with Google'": "Si us plau, inicieu la sessió amb 'Inicieu sessió amb Google'",
"Password cannot be longer than 55 characters": "La contrasenya no pot tenir més de 55 caràcters", "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`", "Invidious Private Feed for `x`": "Feed privat Invidious per a `x`",
"generic_views_count": "{{count}} visualització", "generic_views_count": "{{count}} visualització",
@ -430,6 +436,7 @@
"preferences_quality_dash_option_240p": "240p", "preferences_quality_dash_option_240p": "240p",
"preferences_quality_dash_option_720p": "720p", "preferences_quality_dash_option_720p": "720p",
"preferences_quality_dash_option_480p": "480p", "preferences_quality_dash_option_480p": "480p",
"Log in with Google": "Inicia sessió amb Google",
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"Previous page": "Pàgina anterior", "Previous page": "Pàgina anterior",
"Only show latest video from channel: ": "Mostra només l'últim vídeo del canal: ", "Only show latest video from channel: ": "Mostra només l'últim vídeo del canal: ",
@ -438,6 +445,7 @@
"Import NewPipe subscriptions (.json)": "Importar subscripcions de NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Importar subscripcions de NewPipe (.json)",
"crash_page_you_found_a_bug": "Heu trobat un error a Invidious!", "crash_page_you_found_a_bug": "Heu trobat un error a Invidious!",
"Subscribe": "Subscriu-me", "Subscribe": "Subscriu-me",
"Quota exceeded, try again in a few hours": "S'ha superat la quota, torna-ho a provar d'aquí a unes hores",
"generic_count_days": "{{count}} dia", "generic_count_days": "{{count}} dia",
"generic_count_days_plural": "{{count}} dies", "generic_count_days_plural": "{{count}} dies",
"Trending": "Tendència", "Trending": "Tendència",
@ -475,6 +483,5 @@
"Engagement: ": "Atracció: ", "Engagement: ": "Atracció: ",
"Redirect homepage to feed: ": "Redirigeix la pàgina d'inici al feed: ", "Redirect homepage to feed: ": "Redirigeix la pàgina d'inici al feed: ",
"Standard YouTube license": "Llicència estàndard de YouTube", "Standard YouTube license": "Llicència estàndard de YouTube",
"Download is disabled": "Les baixades s'han inhabilitat", "Download is disabled": "Les baixades s'han inhabilitat"
"Import YouTube playlist (.csv)": "Importar llista de reproducció de YouTube (.csv)"
} }

View File

@ -14,6 +14,7 @@
"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í shodovat",
"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",
@ -36,6 +37,7 @@
"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",
"Log in with Google": "Přihlásit se s Googlem",
"User ID": "ID uživatele", "User ID": "ID uživatele",
"Password": "Heslo", "Password": "Heslo",
"Time (h:mm:ss):": "Čas (h:mm:ss):", "Time (h:mm:ss):": "Čas (h:mm:ss):",
@ -44,6 +46,7 @@
"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: ",
@ -332,6 +335,7 @@
"preferences_quality_dash_option_1440p": "1440p", "preferences_quality_dash_option_1440p": "1440p",
"invidious": "Invidious", "invidious": "Invidious",
"View more comments on Reddit": "Zobrazit více komentářů na Redditu", "View more comments on Reddit": "Zobrazit více komentářů na Redditu",
"Invalid TFA code": "Nesprávný TFA kód",
"generic_playlists_count_0": "{{count}} playlist", "generic_playlists_count_0": "{{count}} playlist",
"generic_playlists_count_1": "{{count}} playlisty", "generic_playlists_count_1": "{{count}} playlisty",
"generic_playlists_count_2": "{{count}} playlistů", "generic_playlists_count_2": "{{count}} playlistů",
@ -345,6 +349,7 @@
"subscriptions_unseen_notifs_count_1": "{{count}} nezobrazená oznámení", "subscriptions_unseen_notifs_count_1": "{{count}} nezobrazená oznámení",
"subscriptions_unseen_notifs_count_2": "{{count}} nezobrazených oznámení", "subscriptions_unseen_notifs_count_2": "{{count}} nezobrazených oznámení",
"Show replies": "Zobrazit odpovědi", "Show replies": "Zobrazit odpovědi",
"Quota exceeded, try again in a few hours": "Kvóta překročena, zkuste to znovu za pár hodin",
"Password cannot be longer than 55 characters": "Heslo nesmí být delší než 55 znaků", "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_0": "Zobrazit {{count}} odpověď",
"comments_view_x_replies_1": "Zobrazit {{count}} odpovědi", "comments_view_x_replies_1": "Zobrazit {{count}} odpovědi",
@ -428,6 +433,7 @@
"View YouTube comments": "Zobrazit YouTube komentáře", "View YouTube comments": "Zobrazit YouTube komentáře",
"Blacklisted regions: ": "Oblasti na černé listině: ", "Blacklisted regions: ": "Oblasti na černé listině: ",
"Wrong username or password": "Nesprávné uživatelské jméno nebo heslo", "Wrong username or password": "Nesprávné uživatelské jméno nebo heslo",
"Please sign in using 'Log in with Google'": "Přihlaste se prosím pomocí Googlu",
"Password cannot be empty": "Heslo nemůže být prázné", "Password cannot be empty": "Heslo nemůže být prázné",
"preferences_category_misc": "Různá nastavení", "preferences_category_misc": "Různá nastavení",
"preferences_show_nick_label": "Zobrazit přezdívku na vrchu: ", "preferences_show_nick_label": "Zobrazit přezdívku na vrchu: ",
@ -446,6 +452,8 @@
"([^.,0-9]|^)1([^.,0-9]|$)": "Zobrazit `x` komentář", "([^.,0-9]|^)1([^.,0-9]|$)": "Zobrazit `x` komentář",
"": "Zobrazit `x` komentářů" "": "Zobrazit `x` komentářů"
}, },
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Nepodařilo se přihlásit, ujistěte se, že je povoleno dvoufázové ověřování (autentifikátor nebo SMS).",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Přihlášení selhalo. Toto se může stát, když není na vašem účtu povolené dvoufázové ověřování.",
"Could not get channel info.": "Nepodařilo se získat informace o kanálu.", "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 fetch comments": "Nepodařilo se získat komentáře",
"Could not create mix.": "Nepodařilo se vytvořit mix.", "Could not create mix.": "Nepodařilo se vytvořit mix.",

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -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",

View File

@ -14,6 +14,7 @@
"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",
@ -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,6 +46,7 @@
"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: ",
@ -161,12 +164,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",
@ -475,6 +483,5 @@
"Channel Sponsor": "Kanalsponsor", "Channel Sponsor": "Kanalsponsor",
"Standard YouTube license": "Standard YouTube-Lizenz", "Standard YouTube license": "Standard YouTube-Lizenz",
"Song: ": "Musik: ", "Song: ": "Musik: ",
"Download is disabled": "Herunterladen ist deaktiviert", "Download is disabled": "Herunterladen ist deaktiviert"
"Import YouTube playlist (.csv)": "YouTube Playlist Importieren (.csv)"
} }

View File

@ -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": "Συνδεθείτε",

View File

@ -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",
@ -47,6 +48,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 +57,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: ",
@ -205,12 +208,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",

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -161,12 +164,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",

View File

@ -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,6 +46,7 @@
"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: ",
@ -161,12 +164,17 @@
"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, prueba 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 debe tener más de 55 caracteres",
"Please log in": "Inicie sesión, por favor", "Please log in": "Inicie sesión, por favor",
@ -390,8 +398,8 @@
"search_filters_features_option_three_sixty": "360°", "search_filters_features_option_three_sixty": "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}} vista",
"generic_views_count_plural": "{{count}} visualizaciones", "generic_views_count_plural": "{{count}} vistas",
"generic_subscribers_count": "{{count}} suscriptor", "generic_subscribers_count": "{{count}} suscriptor",
"generic_subscribers_count_plural": "{{count}} suscriptores", "generic_subscribers_count_plural": "{{count}} suscriptores",
"generic_subscriptions_count": "{{count}} suscripción", "generic_subscriptions_count": "{{count}} suscripción",
@ -407,7 +415,7 @@
"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 reproducciones",
"generic_videos_count": "{{count}} video", "generic_videos_count": "{{count}} video",
"generic_videos_count_plural": "{{count}} video", "generic_videos_count_plural": "{{count}} videos",
"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",

View File

@ -25,6 +25,7 @@
"Clear watch history?": "Kustuta vaatamiste ajalugu?", "Clear watch history?": "Kustuta vaatamiste ajalugu?",
"New password": "Uus salasõna", "New password": "Uus salasõna",
"New passwords must match": "Uued salasõnad peavad ühtima", "New passwords must match": "Uued salasõnad peavad ühtima",
"Cannot change password for Google accounts": "Google'i kasutaja salasõna ei saa muuta",
"Import and Export Data": "Impordi ja ekspordi andmed", "Import and Export Data": "Impordi ja ekspordi andmed",
"Import": "Impordi", "Import": "Impordi",
"Import YouTube subscriptions": "Impordi tellimused Youtube'ist/OPML-ist", "Import YouTube subscriptions": "Impordi tellimused Youtube'ist/OPML-ist",
@ -37,6 +38,7 @@
"History": "Ajalugu", "History": "Ajalugu",
"JavaScript license information": "JavaScripti litsentsi info", "JavaScript license information": "JavaScripti litsentsi info",
"source": "allikas", "source": "allikas",
"Log in with Google": "Logi sisse Google'iga",
"User ID": "Kasutada ID", "User ID": "Kasutada ID",
"Password": "Salasõna", "Password": "Salasõna",
"Time (h:mm:ss):": "Aeg (h:mm:ss):", "Time (h:mm:ss):": "Aeg (h:mm:ss):",
@ -116,10 +118,12 @@
"Hide replies": "Peida vastused", "Hide replies": "Peida vastused",
"Show replies": "Näita vastuseid", "Show replies": "Näita vastuseid",
"Incorrect password": "Vale salasõna", "Incorrect password": "Vale salasõna",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Sisselogimine ei õnnestunud. Asi võib olla selles, et",
"Wrong answer": "Vale vastus", "Wrong answer": "Vale vastus",
"User ID is a required field": "Kasutaja ID on kohustuslik väli", "User ID is a required field": "Kasutaja ID on kohustuslik väli",
"Password is a required field": "Salasõna 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", "Wrong username or password": "Vale kasutajanimi või salasõna",
"Please sign in using 'Log in with Google'": "Palun kasutage 'Logi sisse Google'iga'",
"Password cannot be longer than 55 characters": "Salasõna ei tohi olla pikem kui 55 tähemärki", "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", "Password cannot be empty": "Salasõna ei tohi olla tühi",
"Please log in": "Palun logige sisse", "Please log in": "Palun logige sisse",
@ -286,6 +290,8 @@
"": "Vaata `x` kommentaare" "": "Vaata `x` kommentaare"
}, },
"Khmer": "Khmeeri", "Khmer": "Khmeeri",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Sisselogimine ei õnnestunud. Kontrollige, kas two-factor authentication (Authenticator või SMS) on sisselülitatud.",
"Invalid TFA code": "Vale TFA-kood",
"Bosnian": "Bosnia", "Bosnian": "Bosnia",
"Corsican": "Korsika", "Corsican": "Korsika",
"Javanese": "Jaava", "Javanese": "Jaava",

View File

@ -14,6 +14,7 @@
"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",
@ -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):",
@ -91,6 +93,7 @@
"Import/export data": "Inportatu/exportatu data", "Import/export data": "Inportatu/exportatu data",
"Create playlist": "Zerrenda sortu", "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.", "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.",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Ezinezkoa izena eman. Ziurtatu berresteko bi faktoreak (Authenticator edo SMS) piztuta daudela.",
"generic_views_count": "{{count}}ikusia", "generic_views_count": "{{count}}ikusia",
"generic_views_count_plural": "{{count}}ikusiak", "generic_views_count_plural": "{{count}}ikusiak",
"generic_playlists_count": "{{count}}zerrenda", "generic_playlists_count": "{{count}}zerrenda",
@ -133,6 +136,7 @@
"License: ": "Lizentzia: ", "License: ": "Lizentzia: ",
"Family friendly? ": "Adeikorra familiarekin? ", "Family friendly? ": "Adeikorra familiarekin? ",
"Wilson score: ": "Wilsonen puntuazioa: ", "Wilson score: ": "Wilsonen puntuazioa: ",
"Quota exceeded, try again in a few hours": "Kuota gaindituta, ordu batzuren bueltan berriro saiatu",
"comments_view_x_replies": "{{count}} erantzuna ikusi", "comments_view_x_replies": "{{count}} erantzuna ikusi",
"comments_view_x_replies_plural": "{{count}} erantzunak ikusi", "comments_view_x_replies_plural": "{{count}} erantzunak ikusi",
"Catalan": "Katalaniera", "Catalan": "Katalaniera",
@ -200,6 +204,7 @@
"preferences_category_data": "Dataren lehentasunak", "preferences_category_data": "Dataren lehentasunak",
"preferences_default_home_label": "Homepage lehenetsia: ", "preferences_default_home_label": "Homepage lehenetsia: ",
"preferences_automatic_instance_redirect_label": "berbideratze adibide automatikoa (atzera egin berbideratzeko: invidious.io) ", "preferences_automatic_instance_redirect_label": "berbideratze adibide automatikoa (atzera egin berbideratzeko: invidious.io) ",
"Please sign in using 'Log in with Google'": "'Log in Googlerekin' erabili",
"`x` uploaded a video": "' x'(e)k bideo bat igo du", "`x` uploaded a video": "' x'(e)k bideo bat igo du",
"published - reverse": "argitaratuta - alderantziz", "published - reverse": "argitaratuta - alderantziz",
"Could not get channel info.": "Kanalaren adierazpena ezin lortu.", "Could not get channel info.": "Kanalaren adierazpena ezin lortu.",
@ -215,6 +220,7 @@
"Premieres in `x`": "'x'eko estrenaldiak", "Premieres in `x`": "'x'eko estrenaldiak",
"Delete playlist `x`?": "'x' zerrenda ezabatu nahi?", "Delete playlist `x`?": "'x' zerrenda ezabatu nahi?",
"Token is expired, please try again": "Token kadukatua, saiatu berriro", "Token is expired, please try again": "Token kadukatua, saiatu berriro",
"Invalid TFA code": "TFA kodea ez da zuzena",
"CAPTCHA enabled: ": "CAPTCHA gaitu: ", "CAPTCHA enabled: ": "CAPTCHA gaitu: ",
"Released under the AGPLv3 on Github.": "GitHubeko AGPLv3pean argitaratuta.", "Released under the AGPLv3 on Github.": "GitHubeko AGPLv3pean argitaratuta.",
"channel:`x`": "Kanal: 'x'", "channel:`x`": "Kanal: 'x'",
@ -236,7 +242,9 @@
"preferences_category_subscription": "Harpidetzaren lehentasunak", "preferences_category_subscription": "Harpidetzaren lehentasunak",
"Hidden field \"challenge\" is a required field": "\"challenge\" eremu ezkutua beharrezkoa da", "Hidden field \"challenge\" is a required field": "\"challenge\" eremu ezkutua beharrezkoa da",
"German": "Alemaniarra", "German": "Alemaniarra",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Ezin izena eman. Izan leike zure konturako berresteko bi faktoreak piztuta ez daudela.",
"View YouTube comments": "YouTubeko iruzkinak ikusi", "View YouTube comments": "YouTubeko iruzkinak ikusi",
"Google verification code": "Googleren berresteko kodea",
"`x` is live": "'x' bizirik darrai", "`x` is live": "'x' bizirik darrai",
"Password cannot be empty": "Pasahitza ezin da hutsik utzi", "Password cannot be empty": "Pasahitza ezin da hutsik utzi",
"preferences_video_loop_label": "Beti begiztatu: ", "preferences_video_loop_label": "Beti begiztatu: ",

View File

@ -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": "نمیتوان گذرواژه را برای حساب های کاربری گوگل تغییر داد",
"Authorize token?": "توکن دسترسی؟", "Authorize token?": "توکن دسترسی؟",
"Authorize token for `x`?": "توکن دسترسی برای `x`؟", "Authorize token for `x`?": "توکن دسترسی برای `x`؟",
"Yes": "بله", "Yes": "بله",
@ -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": "همواره ویدئو را بازپخش کن ",
@ -168,12 +171,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": "لطفا وارد شوید",

View File

@ -14,6 +14,7 @@
"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ä",
@ -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: ",
@ -160,12 +163,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ä",

View File

@ -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 : ",
@ -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",
@ -465,7 +473,7 @@
"search_filters_features_option_vr180": "VR180", "search_filters_features_option_vr180": "VR180",
"search_filters_duration_option_none": "Toutes les durées", "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>", "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_shorts_label": "Clips",
"channel_tab_streams_label": "Vidéos en direct", "channel_tab_streams_label": "Vidéos en direct",
"channel_tab_playlists_label": "Listes de lecture", "channel_tab_playlists_label": "Listes de lecture",
"channel_tab_channels_label": "Chaînes", "channel_tab_channels_label": "Chaînes",
@ -475,6 +483,5 @@
"Standard YouTube license": "Licence YouTube Standard", "Standard YouTube license": "Licence YouTube Standard",
"Music in this video": "Musique dans cette vidéo", "Music in this video": "Musique dans cette vidéo",
"Channel Sponsor": "Soutien de la chaîne", "Channel Sponsor": "Soutien de la chaîne",
"Download is disabled": "Le téléchargement est désactivé", "Download is disabled": "Le téléchargement est désactivé"
"Import YouTube playlist (.csv)": "Importer des listes de lecture de Youtube (.csv)"
} }

View File

@ -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`",

View File

@ -4,6 +4,7 @@
"No": "नहीं", "No": "नहीं",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML के रूप में सदस्यताएँ निर्यात करें (NewPipe और FreeTube के लिए)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "OPML के रूप में सदस्यताएँ निर्यात करें (NewPipe और FreeTube के लिए)",
"Log in/register": "लॉग-इन/पंजीकृत करें", "Log in/register": "लॉग-इन/पंजीकृत करें",
"Log in with Google": "Google के साथ लॉग-इन करें",
"preferences_autoplay_label": "अपने आप चलाने की सुविधा: ", "preferences_autoplay_label": "अपने आप चलाने की सुविधा: ",
"preferences_dark_mode_label": "थीम: ", "preferences_dark_mode_label": "थीम: ",
"preferences_default_home_label": "डिफ़ॉल्ट मुखपृष्ठ: ", "preferences_default_home_label": "डिफ़ॉल्ट मुखपृष्ठ: ",
@ -57,6 +58,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` के लिए टोकन को प्रमाणित करें?",
"Import and Export Data": "डेटा को आयात और निर्यात करें", "Import and Export Data": "डेटा को आयात और निर्यात करें",
@ -79,6 +81,7 @@
"Password": "पासवर्ड", "Password": "पासवर्ड",
"Register": "पंजीकृत करें", "Register": "पंजीकृत करें",
"E-mail": "ईमेल", "E-mail": "ईमेल",
"Google verification code": "Google प्रमाणीकरण कोड",
"Time (h:mm:ss):": "समय (घं:मिमि:सेसे):", "Time (h:mm:ss):": "समय (घं:मिमि:सेसे):",
"Text CAPTCHA": "टेक्स्ट CAPTCHA", "Text CAPTCHA": "टेक्स्ट CAPTCHA",
"Image CAPTCHA": "चित्र CAPTCHA", "Image CAPTCHA": "चित्र CAPTCHA",
@ -221,10 +224,15 @@
"Hide replies": "जवाब छिपाएँ", "Hide replies": "जवाब छिपाएँ",
"Show replies": "जवाब दिखाएँ", "Show replies": "जवाब दिखाएँ",
"Incorrect password": "गलत पासवर्ड", "Incorrect password": "गलत पासवर्ड",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "लॉग-इन नहीं किया जा सका, सुनिश्चित करें कि दो-कारक प्रमाणीकरण (Authenticator या SMS) सक्षम है।",
"Invalid TFA code": "अमान्य TFA कोड",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "लॉग-इन नाकाम रहा। ऐसा इसलिए हो सकता है कि दो-कारक प्रमाणीकरण आपके खाते पर सक्षम नहीं है।",
"Quota exceeded, try again in a few hours": "कोटा पार हो चुका है, कृपया कुछ घंटों में फिर कोशिश करें",
"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 अक्षर हो सकते हैं",
"Invidious Private Feed for `x`": "`x` के लिए Invidious निजी फ़ीड", "Invidious Private Feed for `x`": "`x` के लिए Invidious निजी फ़ीड",

View File

@ -14,6 +14,7 @@
"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,6 +37,7 @@
"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):",
@ -44,6 +46,7 @@
"Sign In": "Prijavi se", "Sign In": "Prijavi se",
"Register": "Registriraj se", "Register": "Registriraj se",
"E-mail": "E-mail adresa", "E-mail": "E-mail adresa",
"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: ",
@ -161,12 +164,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",

View File

@ -24,6 +24,7 @@
"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",
@ -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: ",
@ -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.",
@ -412,6 +419,7 @@
"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", "search_filters_date_option_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", "search_filters_features_option_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",

View File

@ -19,6 +19,7 @@
"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",
@ -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: ",
@ -168,12 +171,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",

View File

@ -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",

View File

@ -20,6 +20,7 @@
"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ì",
@ -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: ",
@ -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",

View File

@ -1,9 +1,9 @@
{ {
"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": "登録解除",
@ -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": "ソース",
"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,15 +51,16 @@
"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": "デフォルトのコメント: ",
@ -106,7 +109,7 @@
"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 を有効化: ",
@ -117,12 +120,12 @@
"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 の元で公開",
@ -168,12 +171,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.": "ログインできませんでした。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": "ユーザー名またはパスワードが間違っています",
"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": "ログインしてください",
@ -339,7 +347,7 @@
"search_filters_sort_option_relevance": "関連度", "search_filters_sort_option_relevance": "関連度",
"search_filters_sort_option_rating": "評価", "search_filters_sort_option_rating": "評価",
"search_filters_sort_option_date": "アップロード日", "search_filters_sort_option_date": "アップロード日",
"search_filters_sort_option_views": "視聴回数", "search_filters_sort_option_views": "再生回数",
"search_filters_type_label": "種類", "search_filters_type_label": "種類",
"search_filters_duration_label": "再生時間", "search_filters_duration_label": "再生時間",
"search_filters_features_label": "特徴", "search_filters_features_label": "特徴",
@ -375,7 +383,7 @@
"search_filters_duration_option_long": "20 分以上", "search_filters_duration_option_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",
@ -395,7 +403,7 @@
"none": "なし", "none": "なし",
"download_subtitles": "字幕 - `x` (.vtt)", "download_subtitles": "字幕 - `x` (.vtt)",
"search_filters_features_option_purchased": "購入済み", "search_filters_features_option_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`前に配信を開始",
@ -436,7 +444,7 @@
"Popular enabled: ": "人気動画を有効化 ", "Popular enabled: ": "人気動画を有効化 ",
"search_message_use_another_instance": " <a href=\"`x`\">別のインスタンス上での検索</a>も可能です。", "search_message_use_another_instance": " <a href=\"`x`\">別のインスタンス上での検索</a>も可能です。",
"search_filters_apply_button": "選択したフィルターを適用", "search_filters_apply_button": "選択したフィルターを適用",
"user_saved_playlists": "`x`個の保存済みの再生リスト", "user_saved_playlists": "`x` 個の保存した再生リスト",
"crash_page_you_found_a_bug": "Invidious のバグのようです!", "crash_page_you_found_a_bug": "Invidious のバグのようです!",
"crash_page_refresh": "<a href=\"`x`\">ページを更新</a>を試す", "crash_page_refresh": "<a href=\"`x`\">ページを更新</a>を試す",
"preferences_watch_history_label": "再生履歴を有効化 ", "preferences_watch_history_label": "再生履歴を有効化 ",

View File

@ -32,6 +32,7 @@
"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": "로그인",
@ -41,6 +42,7 @@
"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": "출처",
@ -63,6 +65,7 @@
"Yes": "예", "Yes": "예",
"Authorize token for `x`?": "`x` 에 대한 토큰을 승인하시겠습니까?", "Authorize token for `x`?": "`x` 에 대한 토큰을 승인하시겠습니까?",
"Authorize token?": "토큰을 승인하시겠습니까?", "Authorize token?": "토큰을 승인하시겠습니까?",
"Cannot change password for Google accounts": "구글 계정의 비밀번호를 변경할 수 없습니다",
"New passwords must match": "새 비밀번호는 일치해야 합니다", "New passwords must match": "새 비밀번호는 일치해야 합니다",
"New password": "새 비밀번호", "New password": "새 비밀번호",
"Clear watch history?": "재생 기록을 삭제 하시겠습니까?", "Clear watch history?": "재생 기록을 삭제 하시겠습니까?",
@ -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": "잘못된 비밀번호",
@ -245,6 +249,7 @@
"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`개의 댓글 보기"
@ -267,6 +272,7 @@
"Bulgarian": "불가리아어", "Bulgarian": "불가리아어",
"Bosnian": "보스니아어", "Bosnian": "보스니아어",
"Belarusian": "벨라루스어", "Belarusian": "벨라루스어",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "로그인할 수 없습니다. 이중 인증(Authenticator 또는 SMS)이 켜져 있는지 확인하세요.",
"View more comments on Reddit": "레딧에서 더 많은 댓글 보기", "View more comments on Reddit": "레딧에서 더 많은 댓글 보기",
"View YouTube comments": "유튜브 댓글 보기", "View YouTube comments": "유튜브 댓글 보기",
"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.": "자바스크립트가 꺼져 있는 것 같습니다! 댓글을 보려면 여기를 클릭하세요. 댓글을 로드하는 데 시간이 조금 더 걸릴 수 있습니다.",
@ -276,11 +282,13 @@
"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'": "'구글로 로그인'을 사용하여 로그인하세요",
"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": "캡차는 필수 입력란입니다",
"Erroneous CAPTCHA": "잘못된 캡차", "Erroneous 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": "재생목록으로 보기",
@ -459,6 +467,5 @@
"Album: ": "앨범: ", "Album: ": "앨범: ",
"Music in this video": "동영상 속 음악", "Music in this video": "동영상 속 음악",
"Artist: ": "아티스트: ", "Artist: ": "아티스트: ",
"Download is disabled": "다운로드가 비활성화 되어있음", "Download is disabled": "다운로드가 비활성화 되어있음"
"Import YouTube playlist (.csv)": "유튜브 플레이리스트 가져오기 (.csv)"
} }

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -161,12 +164,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",

View File

@ -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",
@ -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: ",
@ -161,12 +164,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",
@ -464,17 +472,5 @@
"search_filters_apply_button": "Bruk valgte filtre", "search_filters_apply_button": "Bruk valgte filtre",
"search_filters_date_option_none": "Siden begynnelsen", "search_filters_date_option_none": "Siden begynnelsen",
"search_filters_features_option_vr180": "VR180", "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>", "error_video_not_in_playlist": "Forespurt video finnes ikke i denne spillelisten. <a href=\"`x`\">Trykk her for spillelistens hjemmeside.</a>"
"Standard YouTube license": "Standard YouTube-lisens",
"Song: ": "Sang: ",
"channel_tab_streams_label": "Direktesendinger",
"channel_tab_shorts_label": "Kortvideoer",
"channel_tab_playlists_label": "Spillelister",
"Music in this video": "Musikk i denne videoen",
"channel_tab_channels_label": "Kanaler",
"Artist: ": "Artist: ",
"Album: ": "Album: ",
"Download is disabled": "Nedlasting er avskrudd",
"Channel Sponsor": "Kanalsponsor",
"Import YouTube playlist (.csv)": "Importer YouTube-spilleliste (.csv)"
} }

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -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",

View File

@ -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: ",
@ -160,12 +163,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ć",

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -163,12 +166,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",
@ -475,6 +483,5 @@
"Standard YouTube license": "Licença padrão do YouTube", "Standard YouTube license": "Licença padrão do YouTube",
"Song: ": "Música: ", "Song: ": "Música: ",
"Channel Sponsor": "Patrocinador do Canal", "Channel Sponsor": "Patrocinador do Canal",
"Download is disabled": "Download está desativado", "Download is disabled": "Download está desativado"
"Import YouTube playlist (.csv)": "Importar lista de reprodução do YouTube (.csv)"
} }

View File

@ -14,6 +14,7 @@
"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",
@ -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: ",
@ -163,12 +166,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",

View File

@ -63,6 +63,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 +81,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 +125,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 +232,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,6 +240,7 @@
"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",
@ -475,6 +483,5 @@
"Song: ": "Canção: ", "Song: ": "Canção: ",
"Channel Sponsor": "Patrocinador do canal", "Channel Sponsor": "Patrocinador do canal",
"Standard YouTube license": "Licença padrão do YouTube", "Standard YouTube license": "Licença padrão do YouTube",
"Download is disabled": "A descarga está desativada", "Download is disabled": "A descarga está desativada"
"Import YouTube playlist (.csv)": "Importar lista de reprodução do YouTube (.csv)"
} }

View File

@ -14,6 +14,7 @@
"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",
@ -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ă",

View File

@ -4,7 +4,7 @@
"Unsubscribe": "Отписаться", "Unsubscribe": "Отписаться",
"Subscribe": "Подписаться", "Subscribe": "Подписаться",
"View channel on YouTube": "Смотреть канал на YouTube", "View channel on YouTube": "Смотреть канал на YouTube",
"View playlist on YouTube": осмотреть плейлист на YouTube", "View playlist on YouTube": росмотреть подборку на ютубе",
"newest": "сначала новые", "newest": "сначала новые",
"oldest": "сначала старые", "oldest": "сначала старые",
"popular": "популярные", "popular": "популярные",
@ -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": "Всегда повторять: ",
@ -126,14 +129,14 @@
"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",
@ -161,12 +164,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'": "Пожалуйста, нажмите «Войти через 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": "Пожалуйста, войдите",
@ -179,9 +187,9 @@
"`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": "Необходимо заполнить скрытое поле «токен»",
@ -302,7 +310,7 @@
"About": "О сайте", "About": "О сайте",
"Rating: ": "Рейтинг: ", "Rating: ": "Рейтинг: ",
"preferences_locale_label": "Язык: ", "preferences_locale_label": "Язык: ",
"View as playlist": "Смотреть как плейлист", "View as playlist": "Смотреть как подборку",
"Default": "По умолчанию", "Default": "По умолчанию",
"Music": "Музыка", "Music": "Музыка",
"Gaming": "Игры", "Gaming": "Игры",
@ -318,16 +326,16 @@
"Audio mode": "Аудио режим", "Audio mode": "Аудио режим",
"Video mode": "Видео режим", "Video mode": "Видео режим",
"channel_tab_videos_label": "Видео", "channel_tab_videos_label": "Видео",
"Playlists": лейлисты", "Playlists": одборки",
"channel_tab_community_label": "Сообщество", "channel_tab_community_label": "Сообщество",
"search_filters_sort_option_relevance": "актуальности", "search_filters_sort_option_relevance": "по актуальности",
"search_filters_sort_option_rating": "рейтингу", "search_filters_sort_option_rating": "по рейтингу",
"search_filters_sort_option_date": "дате загрузки", "search_filters_sort_option_date": "по дате загрузки",
"search_filters_sort_option_views": "просмотрам", "search_filters_sort_option_views": "по просмотрам",
"search_filters_type_label": "Тип", "search_filters_type_label": "Тип",
"search_filters_duration_label": "Длительность", "search_filters_duration_label": "Длительность",
"search_filters_features_label": "Дополнительно", "search_filters_features_label": "Дополнительно",
"search_filters_sort_label": "Сортировать по", "search_filters_sort_label": "Сортировать",
"search_filters_date_option_hour": "Последний час", "search_filters_date_option_hour": "Последний час",
"search_filters_date_option_today": "Сегодня", "search_filters_date_option_today": "Сегодня",
"search_filters_date_option_week": "Эта неделя", "search_filters_date_option_week": "Эта неделя",
@ -335,7 +343,7 @@
"search_filters_date_option_year": "Этот год", "search_filters_date_option_year": "Этот год",
"search_filters_type_option_video": "Видео", "search_filters_type_option_video": "Видео",
"search_filters_type_option_channel": "Канал", "search_filters_type_option_channel": "Канал",
"search_filters_type_option_playlist": лейлист", "search_filters_type_option_playlist": одборка",
"search_filters_type_option_movie": "Фильм", "search_filters_type_option_movie": "Фильм",
"search_filters_type_option_show": "Сериал", "search_filters_type_option_show": "Сериал",
"search_filters_features_option_hd": "HD", "search_filters_features_option_hd": "HD",
@ -377,7 +385,7 @@
"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>",
@ -385,9 +393,9 @@
"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}} токенов",
@ -446,7 +454,7 @@
"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}} плюса",
@ -480,10 +488,10 @@
"search_filters_duration_option_medium": "Средние (4 - 20 минут)", "search_filters_duration_option_medium": "Средние (4 - 20 минут)",
"search_filters_apply_button": "Применить фильтры", "search_filters_apply_button": "Применить фильтры",
"Popular enabled: ": "Популярное включено: ", "Popular enabled: ": "Популярное включено: ",
"error_video_not_in_playlist": "Запрошенного видео нет в этом плейлисте. <a href=\"`x`\">Нажмите тут, чтобы вернуться к странице плейлиста.</a>", "error_video_not_in_playlist": "Запрошенного видео нет в этой подборке. <a href=\"`x`\">Нажмите тут, чтобы вернуться к странице подборки.</a>",
"channel_tab_playlists_label": лейлисты", "channel_tab_playlists_label": одборки",
"channel_tab_channels_label": "Каналы", "channel_tab_channels_label": "Каналы",
"channel_tab_streams_label": "Стримы", "channel_tab_streams_label": "Живое вещание",
"channel_tab_shorts_label": "Shorts", "channel_tab_shorts_label": "Shorts",
"Music in this video": "Музыка в этом видео", "Music in this video": "Музыка в этом видео",
"Artist: ": "Исполнитель: ", "Artist: ": "Исполнитель: ",
@ -491,6 +499,5 @@
"Song: ": "Композиция: ", "Song: ": "Композиция: ",
"Standard YouTube license": "Стандартная лицензия YouTube", "Standard YouTube license": "Стандартная лицензия YouTube",
"Channel Sponsor": "Спонсор канала", "Channel Sponsor": "Спонсор канала",
"Download is disabled": "Загрузка отключена", "Download is disabled": "Загрузка отключена"
"Import YouTube playlist (.csv)": "Импорт плейлиста YouTube (.csv)"
} }

View File

@ -14,6 +14,7 @@
"oldest": "පැරණිතම", "oldest": "පැරණිතම",
"popular": "ජනප්‍රිය", "popular": "ජනප්‍රිය",
"last": "අවසන්", "last": "අවසන්",
"Cannot change password for Google accounts": "Google ගිණුම් සඳහා මුරපදය වෙනස් කළ නොහැක",
"Authorize token?": "ටෝකනය අනුමත කරනවා ද?", "Authorize token?": "ටෝකනය අනුමත කරනවා ද?",
"Authorize token for `x`?": "`x` සඳහා ටෝකනය අනුමත කරනවා ද?", "Authorize token for `x`?": "`x` සඳහා ටෝකනය අනුමත කරනවා ද?",
"Yes": "ඔව්", "Yes": "ඔව්",
@ -30,6 +31,7 @@
"An alternative front-end to YouTube": "YouTube සඳහා විකල්ප ඉදිරිපස අන්තයක්", "An alternative front-end to YouTube": "YouTube සඳහා විකල්ප ඉදිරිපස අන්තයක්",
"source": "මූලාශ්‍රය", "source": "මූලාශ්‍රය",
"Log in/register": "පුරන්න/ලියාපදිංචිවන්න", "Log in/register": "පුරන්න/ලියාපදිංචිවන්න",
"Log in with Google": "Google සමඟ පුරන්න",
"Password": "මුරපදය", "Password": "මුරපදය",
"Time (h:mm:ss):": "වේලාව (h:mm:ss):", "Time (h:mm:ss):": "වේලාව (h:mm:ss):",
"Sign In": "පුරන්න", "Sign In": "පුරන්න",
@ -84,6 +86,7 @@
"User ID": "පරිශීලක කේතය", "User ID": "පරිශීලක කේතය",
"Text CAPTCHA": "CAPTCHA පෙල", "Text CAPTCHA": "CAPTCHA පෙල",
"Image CAPTCHA": "CAPTCHA රූපය", "Image CAPTCHA": "CAPTCHA රූපය",
"Google verification code": "Google සත්‍යාපන කේතය",
"E-mail": "විද්‍යුත් තැපෑල", "E-mail": "විද්‍යුත් තැපෑල",
"preferences_quality_label": "කැමති වීඩියෝ ගුණත්වය: ", "preferences_quality_label": "කැමති වීඩියෝ ගුණත්වය: ",
"preferences_quality_option_hd720": "HD720", "preferences_quality_option_hd720": "HD720",

View File

@ -12,6 +12,7 @@
"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",
@ -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ť: ",

View File

@ -8,6 +8,7 @@
"Clear watch history?": "Izbrisati zgodovino ogledov?", "Clear watch history?": "Izbrisati zgodovino ogledov?",
"New password": "Novo geslo", "New password": "Novo geslo",
"New passwords must match": "Nova gesla se morajo ujemati", "New passwords must match": "Nova gesla se morajo ujemati",
"Cannot change password for Google accounts": "Ni mogoče spremeniti gesla za račune Google",
"Authorize token?": "Naj odobrim žeton?", "Authorize token?": "Naj odobrim žeton?",
"Yes": "Da", "Yes": "Da",
"Import and Export Data": "Uvoz in izvoz podatkov", "Import and Export Data": "Uvoz in izvoz podatkov",
@ -21,6 +22,7 @@
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Izvozi naročnine kot OPML (za NewPipe in FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Izvozi naročnine kot OPML (za NewPipe in FreeTube)",
"Log in": "Prijava", "Log in": "Prijava",
"Log in/register": "Prijava/registracija", "Log in/register": "Prijava/registracija",
"Log in with Google": "Prijavi se z Googlom",
"User ID": "ID uporabnika", "User ID": "ID uporabnika",
"Password": "Geslo", "Password": "Geslo",
"Time (h:mm:ss):": "Čas (h:mm:ss):", "Time (h:mm:ss):": "Čas (h:mm:ss):",
@ -30,6 +32,7 @@
"Sign In": "Prijavi se", "Sign In": "Prijavi se",
"Register": "Registriraj se", "Register": "Registriraj se",
"E-mail": "E-pošta", "E-mail": "E-pošta",
"Google verification code": "Googlova koda za preverjanje",
"Preferences": "Nastavitve", "Preferences": "Nastavitve",
"preferences_video_loop_label": "Vedno v zanki: ", "preferences_video_loop_label": "Vedno v zanki: ",
"preferences_autoplay_label": "Samodejno predvajanje: ", "preferences_autoplay_label": "Samodejno predvajanje: ",
@ -117,6 +120,9 @@
"([^.,0-9]|^)1([^.,0-9]|$)": "Poglej `x` komentar", "([^.,0-9]|^)1([^.,0-9]|$)": "Poglej `x` komentar",
"": "Poglej `x` komentarjev" "": "Poglej `x` komentarjev"
}, },
"Quota exceeded, try again in a few hours": "Kvota je presežena, poskusi znova čez nekaj ur",
"Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.": "Ne morem se prijaviti, preveri, ali je vklopljeno dvofaktorsko preverjanje pristnosti (avtentikator ali SMS).",
"Please sign in using 'Log in with Google'": "Prijavi se z uporabo »Prijava z Googlom«",
"Password cannot be empty": "Geslo ne sme biti prazno", "Password cannot be empty": "Geslo ne sme biti prazno",
"`x` ago": "`x` nazaj", "`x` ago": "`x` nazaj",
"Load more": "Naloži več", "Load more": "Naloži več",
@ -342,6 +348,8 @@
"View Reddit comments": "Oglej si komentarje na Redditu", "View Reddit comments": "Oglej si komentarje na Redditu",
"This channel does not exist.": "Ta kanal ne obstaja.", "This channel does not exist.": "Ta kanal ne obstaja.",
"Hide replies": "Skrij odgovore", "Hide replies": "Skrij odgovore",
"Invalid TFA code": "Neveljavna koda TFA",
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Prijava ni uspela. To je lahko zato, ker za tvoj račun ni vklopljeno dvofaktorsko preverjanje pristnosti.",
"Invidious Private Feed for `x`": "Invidious zasebni vir za `x`", "Invidious Private Feed for `x`": "Invidious zasebni vir za `x`",
"Deleted or invalid channel": "Izbrisan ali neveljaven kanal", "Deleted or invalid channel": "Izbrisan ali neveljaven kanal",
"Empty playlist": "Prazen seznam predvajanja", "Empty playlist": "Prazen seznam predvajanja",
@ -507,6 +515,5 @@
"Song: ": "Pesem: ", "Song: ": "Pesem: ",
"Standard YouTube license": "Standardna licenca YouTube", "Standard YouTube license": "Standardna licenca YouTube",
"Channel Sponsor": "Sponzor kanala", "Channel Sponsor": "Sponzor kanala",
"Download is disabled": "Prenos je onemogočen", "Download is disabled": "Prenos je onemogočen"
"Import YouTube playlist (.csv)": "Uvoz seznama predvajanja YouTube (.csv)"
} }

View File

@ -35,10 +35,12 @@
"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):",
@ -154,14 +156,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",
@ -296,6 +303,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: ",

View File

@ -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",
@ -177,6 +182,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",
@ -277,6 +283,8 @@
"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",

View File

@ -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": "Енглески",
@ -192,6 +198,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`",
@ -317,6 +324,7 @@
"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": "Хинди",

View File

@ -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: ",
@ -159,12 +162,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",

View File

@ -14,6 +14,7 @@
"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ı İç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",
@ -36,6 +37,7 @@
"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",
"Log in with Google": "Google İle Oturum Aç",
"User ID": "Kullanıcı Kimliği", "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):",
@ -44,6 +46,7 @@
"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ü: ",
@ -161,12 +164,17 @@
"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",
"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 (Kimlik Doğrulayıcı 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", "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",
"Please sign in using 'Log in with Google'": "Lütfen 'Google İle Giriş Yap' Seçeneğini Kullanarak Oturum Açın",
"Password cannot be empty": "Parola Boş Olamaz", "Password cannot be empty": "Parola Boş Olamaz",
"Password cannot be longer than 55 characters": "Parola 55 Karakterden Uzun Olamaz", "Password cannot be longer than 55 characters": "Parola 55 Karakterden Uzun Olamaz",
"Please log in": "Lütfen Oturum Açın", "Please log in": "Lütfen Oturum Açın",

View File

@ -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": "ID користувача", "User ID": "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.": "Не вдається увійти. Перевірте, чи не ввімкнена двофакторна аутентифікація (за кодом чи смс).",
"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": "Необхідно пройти 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": "Будь ласка, увійдіть",

View File

@ -1,10 +1,10 @@
{ {
"generic_videos_count_0": "{{count}} video", "generic_videos_count_0": "{{count}} video",
"generic_subscribers_count_0": "{{count}} người theo dõi", "generic_subscribers_count_0": "{{count}} subscribers",
"LIVE": "TRỰC TIẾP", "LIVE": "TRỰC TIẾP",
"Shared `x` ago": "Đã chia sẻ` x` trước", "Shared `x` ago": "Đã chia sẻ` x` trước",
"Unsubscribe": "Hủy theo dõi", "Unsubscribe": "Hủy đăng ký",
"Subscribe": "Theo dõi", "Subscribe": "Đăng ký",
"View channel on YouTube": "Xem kênh trên YouTube", "View channel on YouTube": "Xem kênh trên YouTube",
"View playlist on YouTube": "Xem danh sách phát trên YouTube", "View playlist on YouTube": "Xem danh sách phát trên YouTube",
"newest": "mới nhất", "newest": "mới nhất",
@ -16,21 +16,22 @@
"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",
"No": "Không", "No": "Không",
"Import and Export Data": "Nhập và xuất dữ liệu", "Import and Export Data": "Nhập và xuất dữ liệu",
"Import": "Nhập", "Import": "Nhập",
"Import Invidious data": "Nhập dữ liệu Invidious JSON", "Import Invidious data": "Nhập dữ liệu sống động",
"Import YouTube subscriptions": "Nhập dữ liệu thuê bao YouTube/OPML", "Import YouTube subscriptions": "Nhập đăng ký YouTube",
"Import FreeTube subscriptions (.db)": "Nhập đăng ký FreeTube (.db)", "Import FreeTube subscriptions (.db)": "Nhập đăng ký FreeTube (.db)",
"Import NewPipe subscriptions (.json)": "Nhập đăng ký NewPipe (.json)", "Import NewPipe subscriptions (.json)": "Nhập đăng ký NewPipe (.json)",
"Import NewPipe data (.zip)": "Nhập dữ liệu NewPipe (.zip)", "Import NewPipe data (.zip)": "Nhập dữ liệu NewPipe (.zip)",
"Export": "Xuất", "Export": "Xuất",
"Export subscriptions as OPML": "Xuất đăng ký dưới dạng OPML", "Export subscriptions as OPML": "Xuất đăng ký dưới dạng OPML",
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Xuất đăng ký dưới dạng OPML (cho NewPipe & FreeTube)", "Export subscriptions as OPML (for NewPipe & FreeTube)": "Xuất đăng ký dưới dạng OPML (cho NewPipe & FreeTube)",
"Export data as JSON": "Xuất dữ liệu Invidious dưới dạng JSON", "Export data as JSON": "Xuất dữ liệu dưới dạng JSON",
"Delete account?": "Xóa tài khoản?", "Delete account?": "Xóa tài khoản?",
"History": "Lịch sử", "History": "Lịch sử",
"An alternative front-end to YouTube": "Giao diện người dùng thay thế cho YouTube", "An alternative front-end to YouTube": "Giao diện người dùng thay thế cho YouTube",
@ -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,35 +48,36 @@
"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 trình phát video", "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: ",
"preferences_autoplay_label": "Tự chạy: ", "preferences_autoplay_label": "Tự chạy: ",
"preferences_continue_label": "Phát kế tiếp theo mặc định: ", "preferences_continue_label": "Phát tiếp theo theo mặc định: ",
"preferences_continue_autoplay_label": "Tự động phát video tiếp theo: ", "preferences_continue_autoplay_label": "Tự động phát video tiếp theo: ",
"preferences_listen_label": "Nghe theo mặc định: ", "preferences_listen_label": "Nghe theo mặc định: ",
"preferences_local_label": "Video proxy: ", "preferences_local_label": "Video proxy: ",
"preferences_speed_label": "Tốc độ mặc định: ", "preferences_speed_label": "Tốc độ mặc định: ",
"preferences_quality_label": "Chất lượng video ưa thích: ", "preferences_quality_label": "Chất lượng video ưa thích: ",
"preferences_volume_label": "Âm lượng trình phát video: ", "preferences_volume_label": "Khối lượng trình phát: ",
"preferences_comments_label": "Nhận xét mặc định: ", "preferences_comments_label": "Nhận xét mặc định: ",
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "reddit",
"preferences_captions_label": "Phụ đề mặc định: ", "preferences_captions_label": "Phụ đề mặc định: ",
"Fallback captions: ": "Phụ đề dự phòng: ", "Fallback captions: ": "Phụ đề dự phòng: ",
"preferences_related_videos_label": "Hiển thị các video có liên quan: ", "preferences_related_videos_label": "Hiển thị các video có liên quan: ",
"preferences_annotations_label": "Hiển thị chú thích theo mặc định: ", "preferences_annotations_label": "Hiển thị chú thích theo mặc định: ",
"preferences_extend_desc_label": "Tự động mở rộng mô tả video: ", "preferences_extend_desc_label": "Tự động mở rộng mô tả video: ",
"preferences_vr_mode_label": "Video 360 độ tương tác (yêu cầu WebGL): ", "preferences_vr_mode_label": "Video 360 độ tương tác: ",
"preferences_category_visual": "Tùy chọn hình ảnh", "preferences_category_visual": "Tùy chọn hình ảnh",
"preferences_player_style_label": "Phong cách trình phát: ", "preferences_player_style_label": "Phong cách người chơi: ",
"Dark mode: ": "Chế độ tối: ", "Dark mode: ": "Chế độ tối: ",
"preferences_dark_mode_label": "Chủ đề: ", "preferences_dark_mode_label": "Chủ đề: ",
"dark": "tối", "dark": "tối",
"light": "ánh sáng", "light": "ánh sáng",
"preferences_thin_mode_label": "Chế độ mỏng: ", "preferences_thin_mode_label": "Chế độ mỏng: ",
"preferences_category_misc": "Tùy chọn khác", "preferences_category_misc": "Tùy chọn khác",
"preferences_automatic_instance_redirect_label": "Tự động chuyển hướng phiên bản (dự phòng về redirect.invidious.io): ", "preferences_automatic_instance_redirect_label": "Chuyển hướng phiên bản tự động (dự phòng thành redirect.invidious.io): ",
"preferences_category_subscription": "Tùy chọn đăng ký", "preferences_category_subscription": "Tùy chọn đăng ký",
"preferences_annotations_subscribed_label": "Hiển thị chú thích theo mặc định cho các kênh đã đăng ký: ", "preferences_annotations_subscribed_label": "Hiển thị chú thích theo mặc định cho các kênh đã đăng ký: ",
"Redirect homepage to feed: ": "Chuyển hướng trang chủ đến nguồn cấp dữ liệu: ", "Redirect homepage to feed: ": "Chuyển hướng trang chủ đến nguồn cấp dữ liệu: ",
@ -114,14 +117,14 @@
"Subscription manager": "Người quản lý đăng ký", "Subscription manager": "Người quản lý đăng ký",
"Token manager": "Trình quản lý mã thông báo", "Token manager": "Trình quản lý mã thông báo",
"Token": "Mã thông báo", "Token": "Mã thông báo",
"search": "tìm kiếm", "search": "Tìm kiếm",
"Log out": "Đăng xuất", "Log out": "Đăng xuất",
"Source available here.": "Nguồn có sẵn ở đây.", "Source available here.": "Nguồn có sẵn ở đây.",
"View JavaScript license information.": "Xem thông tin giấy phép JavaScript.", "View JavaScript license information.": "Xem thông tin giấy phép JavaScript.",
"View privacy policy.": "Xem chính sách bảo mật.", "View privacy policy.": "Xem chính sách bảo mật.",
"Trending": "Xu hướng", "Trending": "Xu hướng",
"Public": "Công cộng", "Public": "Công cộng",
"Unlisted": "Không hiển thị", "Unlisted": "Riêng tư",
"Private": "Riêng tư", "Private": "Riêng tư",
"View all playlists": "Xem tất cả danh sách phát", "View all playlists": "Xem tất cả danh sách phát",
"Updated `x` ago": "Đã cập nhật` x` trước", "Updated `x` ago": "Đã cập nhật` x` trước",
@ -149,12 +152,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",
@ -337,51 +345,6 @@
"generic_playlists_count": "{{count}} danh sách phát", "generic_playlists_count": "{{count}} danh sách phát",
"generic_views_count": "{{count}} lượt xem", "generic_views_count": "{{count}} lượt xem",
"View `x` comments": { "View `x` comments": {
"": "Xem `x` bình luận", "": "Xem `x` bình luận"
"([^.,0-9]|^)1([^.,0-9]|$)": "Hiển thị `x`bình luận" }
},
"Song: ": "Ca khúc: ",
"Premieres in `x`": "Trình chiếu lần đầu vào `x`",
"preferences_quality_dash_option_worst": "Thấp nhất",
"preferences_watch_history_label": "Bật lịch sử video đã xem ",
"preferences_quality_option_hd720": "HD720",
"unsubscribe": "hủy đăng kí",
"revoke": "gỡ bỏ",
"preferences_quality_dash_label": "Chất lượng video DASH ưa thích ",
"preferences_quality_dash_option_auto": "Tự động",
"Subscriptions": "Thuê bao",
"View YouTube comments": "Hiển thị bình luận trên YouTube",
"View more comments on Reddit": "Hiển thị thêm bình luận từ Reddit",
"Music in this video": "Nhạc trong video này",
"Artist: ": "Nghệ sĩ: ",
"Premieres `x`": "Phát lần đầu `x`",
"preferences_region_label": "Nội dung theo quốc gia ",
"search_message_change_filters_or_query": "Thử mở rộng nội dung tìm kiếm hoặc thay đổi bộ lọc.",
"preferences_quality_option_small": "Nhỏ",
"preferences_quality_dash_option_144p": "144p",
"invidious": "Invidious",
"preferences_quality_dash_option_240p": "240p",
"Import/export": "Xuất/nhập dữ liệu",
"preferences_quality_dash_option_4320p": "4320p",
"preferences_quality_option_dash": "DASH (tự tối ưu chất lượng)",
"generic_subscriptions_count_0": "{{count}} thuê bao",
"preferences_quality_dash_option_1440p": "1440p",
"preferences_quality_dash_option_480p": "480p",
"preferences_quality_dash_option_2160p": "2160p",
"search_message_no_results": "Tìm kiếm không có kết quả.",
"preferences_quality_dash_option_1080p": "1080p",
"preferences_quality_dash_option_720p": "720p",
"preferences_quality_option_medium": "Trung bình",
"Load more": "Hiển thị thêm",
"comments_points_count_0": "{{count}} điểm",
"Import YouTube playlist (.csv)": "Nhập danh sách phát YouTube (.csv)",
"preferences_quality_dash_option_best": "Tốt nhất",
"preferences_quality_dash_option_360p": "360p",
"subscriptions_unseen_notifs_count_0": "{{count}} thông báo chưa đọc",
"Released under the AGPLv3 on Github.": "Phát hành dưới giấy phép AGPLv3 trên GitHub.",
"search_message_use_another_instance": " Bạn cũng có thể tìm kiếm <a href=\"`x`\"> ở một phiên bản khác</a>.",
"Standard YouTube license": "Giấy phép YouTube thông thường",
"Album: ": "Album: ",
"preferences_save_player_pos_label": "Lưu vị trí xem cuối cùng ",
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Xin chào! Có vẻ như bạn đã tắt JavaScript. Bấm vào đây để xem bình luận, lưu ý rằng thời gian tải có thể lâu hơn."
} }

View File

@ -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": "始终循环: ",
@ -168,12 +171,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": "请登录",

View File

@ -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": "總是循環播放: ",
@ -168,12 +171,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": "請登入",

View File

@ -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

View File

@ -58,10 +58,11 @@ end
alias IV = Invidious alias IV = Invidious
CONFIG = Config.load CONFIG = Config.load
HMAC_KEY = CONFIG.hmac_key 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")

View File

@ -20,7 +20,7 @@ def produce_channel_videos_continuation(ucid, page = 1, auto_generated = nil, so
case sort_by case sort_by
when "newest" then 1_i64 when "newest" then 1_i64
when "popular" then 2_i64 when "popular" then 2_i64
when "oldest" then 4_i64 when "oldest" then 3_i64 # Broken as of 10/2022 :c
else 1_i64 # Fallback to "newest" else 1_i64 # Fallback to "newest"
end end

View File

@ -85,7 +85,7 @@ class Config
# Used to tell Invidious it is behind a proxy, so links to resources should be https:// # Used to tell Invidious it is behind a proxy, so links to resources should be https://
property https_only : Bool? property https_only : Bool?
# HMAC signing key for CSRF tokens and verifying pubsub subscriptions # HMAC signing key for CSRF tokens and verifying pubsub subscriptions
property hmac_key : String = "" property hmac_key : String?
# Domain to be used for links to resources on the site where an absolute URL is required # Domain to be used for links to resources on the site where an absolute URL is required
property domain : String? property domain : String?
# Subscribe to channels using PubSubHubbub (requires domain, hmac_key) # Subscribe to channels using PubSubHubbub (requires domain, hmac_key)
@ -206,16 +206,6 @@ class Config
end end
{% end %} {% end %}
# HMAC_key is mandatory
# See: https://github.com/iv-org/invidious/issues/3854
if config.hmac_key.empty?
puts "Config: 'hmac_key' is required/can't be empty"
exit(1)
elsif config.hmac_key == "CHANGE_ME!!"
puts "Config: The value of 'hmac_key' needs to be changed!!"
exit(1)
end
# Build database_url from db.* if it's not set directly # Build database_url from db.* if it's not set directly
if config.database_url.to_s.empty? if config.database_url.to_s.empty?
if db = config.db if db = config.db
@ -228,7 +218,7 @@ class Config
path: db.dbname, path: db.dbname,
) )
else else
puts "Config: Either database_url or db.* is required" puts "Config : Either database_url or db.* is required"
exit(1) exit(1)
end end
end end

View File

@ -22,6 +22,31 @@ struct Annotation
property annotations : String property annotations : String
end end
def login_req(f_req)
data = {
# Unfortunately there's not much information available on `bgRequest`; part of Google's BotGuard
# Generally this is much longer (>1250 characters), see also
# https://github.com/ytdl-org/youtube-dl/commit/baf67a604d912722b0fe03a40e9dc5349a2208cb .
# For now this can be empty.
"bgRequest" => %|["identifier",""]|,
"pstMsg" => "1",
"checkConnection" => "youtube",
"checkedDomains" => "youtube",
"hl" => "en",
"deviceinfo" => %|[null,null,null,[],null,"US",null,null,[],"GlifWebSignIn",null,[null,null,[]]]|,
"f.req" => f_req,
"flowName" => "GlifWebSignIn",
"flowEntry" => "ServiceLogin",
# "cookiesDisabled" => "false",
# "gmscoreversion" => "undefined",
# "continue" => "https://accounts.google.com/ManageAccount",
# "azt" => "",
# "bgHash" => "",
}
return HTTP::Params.encode(data)
end
def html_to_content(description_html : String) def html_to_content(description_html : String)
description = description_html.gsub(/(<br>)|(<br\/>)/, { description = description_html.gsub(/(<br>)|(<br\/>)/, {
"<br>": "\n", "<br>": "\n",

View File

@ -111,27 +111,24 @@ def decode_date(string : String)
else nil # Continue else nil # Continue
end end
# String matches format "20 hours ago", "4 months ago", "20s ago", "15min ago"... # String matches format "20 hours ago", "4 months ago"...
match = string.match(/(?<count>\d+) ?(?<span>[smhdwy]\w*) ago/) date = string.split(" ")[-3, 3]
delta = date[0].to_i
raise "Could not parse #{string}" if match.nil? case date[1]
when .includes? "second"
delta = match["count"].to_i
case match["span"]
when .starts_with? "s" # second(s)
delta = delta.seconds delta = delta.seconds
when .starts_with? "mi" # minute(s) when .includes? "minute"
delta = delta.minutes delta = delta.minutes
when .starts_with? "h" # hour(s) when .includes? "hour"
delta = delta.hours delta = delta.hours
when .starts_with? "d" # day(s) when .includes? "day"
delta = delta.days delta = delta.days
when .starts_with? "w" # week(s) when .includes? "week"
delta = delta.weeks delta = delta.weeks
when .starts_with? "mo" # month(s) when .includes? "month"
delta = delta.months delta = delta.months
when .starts_with? "y" # year(s) when .includes? "year"
delta = delta.years delta = delta.years
else else
raise "Could not parse #{string}" raise "Could not parse #{string}"
@ -440,7 +437,7 @@ def parse_link_endpoint(endpoint : JSON::Any, text : String, video_id : String)
# - https://github.com/iv-org/invidious/issues/3062 # - https://github.com/iv-org/invidious/issues/3062
text = %(<a href="#{url}">#{text}</a>) text = %(<a href="#{url}">#{text}</a>)
else else
text = %(<a href="#{url}">#{reduce_uri(text)}</a>) text = %(<a href="#{url}">#{reduce_uri(url)}</a>)
end end
end end
return text return text

View File

@ -2,7 +2,7 @@ module Invidious::Jobs
JOBS = [] of BaseJob JOBS = [] of BaseJob
# Automatically generate a structure that wraps the various # Automatically generate a structure that wraps the various
# jobs' configs, so that the following YAML config can be used: # jobs' configs, so that the follwing YAML config can be used:
# #
# jobs: # jobs:
# job_name: # job_name:

View File

@ -42,6 +42,11 @@ module Invidious::Routes::Account
sid = sid.as(String) sid = sid.as(String)
token = env.params.body["csrf_token"]? token = env.params.body["csrf_token"]?
# We don't store passwords for Google accounts
if !user.password
return error_template(400, "Cannot change password for Google accounts")
end
begin begin
validate_request(token, sid, env.request, HMAC_KEY, locale) validate_request(token, sid, env.request, HMAC_KEY, locale)
rescue ex rescue ex
@ -49,7 +54,7 @@ module Invidious::Routes::Account
end end
password = env.params.body["password"]? password = env.params.body["password"]?
if password.nil? || password.empty? if !password
return error_template(401, "Password is a required field") return error_template(401, "Password is a required field")
end end

View File

@ -178,6 +178,10 @@ module Invidious::Routes::API::V1::Authenticated
Invidious::Database::Users.subscribe_channel(user, ucid) Invidious::Database::Users.subscribe_channel(user, ucid)
end end
# For Google accounts, access tokens don't have enough information to
# make a request on the user's behalf, which is why we don't sync with
# YouTube.
env.response.status_code = 204 env.response.status_code = 204
end end

View File

@ -80,23 +80,49 @@ module Invidious::Routes::BeforeAll
raise "Cannot use token as SID" raise "Cannot use token as SID"
end end
if email = Database::SessionIDs.select_email(sid) # Invidious users only have SID
user = Database::Users.select!(email: email) if !env.request.cookies.has_key? "SSID"
csrf_token = generate_response(sid, { if email = Invidious::Database::SessionIDs.select_email(sid)
":authorize_token", user = Invidious::Database::Users.select!(email: email)
":playlist_ajax", csrf_token = generate_response(sid, {
":signout", ":authorize_token",
":subscription_ajax", ":playlist_ajax",
":token_ajax", ":signout",
":watch_ajax", ":subscription_ajax",
}, HMAC_KEY, 1.week) ":token_ajax",
":watch_ajax",
}, HMAC_KEY, 1.week)
preferences = user.preferences preferences = user.preferences
env.set "preferences", preferences env.set "preferences", preferences
env.set "sid", sid env.set "sid", sid
env.set "csrf_token", csrf_token env.set "csrf_token", csrf_token
env.set "user", user 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
end end

View File

@ -83,6 +83,10 @@ module Invidious::Routes::Feeds
headers = HTTP::Headers.new headers = HTTP::Headers.new
headers["Cookie"] = env.request.headers["Cookie"] headers["Cookie"] = env.request.headers["Cookie"]
if !user.password
user, sid = get_user(sid, headers)
end
max_results = env.params.query["max_results"]?.try &.to_i?.try &.clamp(0, MAX_ITEMS_PER_PAGE) max_results = env.params.query["max_results"]?.try &.to_i?.try &.clamp(0, MAX_ITEMS_PER_PAGE)
max_results ||= user.preferences.max_results max_results ||= user.preferences.max_results
max_results ||= CONFIG.default_user_preferences.max_results max_results ||= CONFIG.default_user_preferences.max_results

View File

@ -24,6 +24,9 @@ module Invidious::Routes::Login
captcha_type = env.params.query["captcha"]? captcha_type = env.params.query["captcha"]?
captcha_type ||= "image" captcha_type ||= "image"
tfa = env.params.query["tfa"]?
prompt = nil
templated "user/login" templated "user/login"
end end
@ -44,18 +47,283 @@ module Invidious::Routes::Login
account_type ||= "invidious" account_type ||= "invidious"
case account_type case account_type
when "google"
tfa_code = env.params.body["tfa"]?.try &.lchop("G-")
traceback = IO::Memory.new
# See https://github.com/ytdl-org/youtube-dl/blob/2019.04.07/youtube_dl/extractor/youtube.py#L82
begin
client = nil # Declare variable
{% unless flag?(:disable_quic) %}
client = CONFIG.use_quic ? QUIC::Client.new(LOGIN_URL) : HTTP::Client.new(LOGIN_URL)
{% else %}
client = HTTP::Client.new(LOGIN_URL)
{% end %}
headers = HTTP::Headers.new
login_page = client.get("/ServiceLogin")
headers = login_page.cookies.add_request_headers(headers)
lookup_req = {
email, nil, [] of String, nil, "US", nil, nil, 2, false, true,
{nil, nil,
{2, 1, nil, 1,
"https://accounts.google.com/ServiceLogin?passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fnext%3D%252F%26action_handle_signin%3Dtrue%26hl%3Den%26app%3Ddesktop%26feature%3Dsign_in_button&hl=en&service=youtube&uilel=3&requestPath=%2FServiceLogin&Page=PasswordSeparationSignIn",
nil, [] of String, 4},
1,
{nil, nil, [] of String},
nil, nil, nil, true,
},
email,
}.to_json
traceback << "Getting lookup..."
headers["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8"
headers["Google-Accounts-XSRF"] = "1"
response = client.post("/_/signin/sl/lookup", headers, login_req(lookup_req))
lookup_results = JSON.parse(response.body[5..-1])
traceback << "done, returned #{response.status_code}.<br/>"
user_hash = lookup_results[0][2]
if token = env.params.body["token"]?
answer = env.params.body["answer"]?
captcha = {token, answer}
else
captcha = nil
end
challenge_req = {
user_hash, nil, 1, nil,
{1, nil, nil, nil,
{password, captcha, true},
},
{nil, nil,
{2, 1, nil, 1,
"https://accounts.google.com/ServiceLogin?passive=true&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fnext%3D%252F%26action_handle_signin%3Dtrue%26hl%3Den%26app%3Ddesktop%26feature%3Dsign_in_button&hl=en&service=youtube&uilel=3&requestPath=%2FServiceLogin&Page=PasswordSeparationSignIn",
nil, [] of String, 4},
1,
{nil, nil, [] of String},
nil, nil, nil, true,
},
}.to_json
traceback << "Getting challenge..."
response = client.post("/_/signin/sl/challenge", headers, login_req(challenge_req))
headers = response.cookies.add_request_headers(headers)
challenge_results = JSON.parse(response.body[5..-1])
traceback << "done, returned #{response.status_code}.<br/>"
headers["Cookie"] = URI.decode_www_form(headers["Cookie"])
if challenge_results[0][3]?.try &.== 7
return error_template(423, "Account has temporarily been disabled")
end
if token = challenge_results[0][-1]?.try &.[-1]?.try &.as_h?.try &.["5001"]?.try &.[-1].as_a?.try &.[-1].as_s
account_type = "google"
captcha_type = "image"
prompt = nil
tfa = tfa_code
captcha = {tokens: [token], question: ""}
return templated "user/login"
end
if challenge_results[0][-1]?.try &.[5] == "INCORRECT_ANSWER_ENTERED"
return error_template(401, "Incorrect password")
end
prompt_type = challenge_results[0][-1]?.try &.[0].as_a?.try &.[0][2]?
if {"TWO_STEP_VERIFICATION", "LOGIN_CHALLENGE"}.includes? prompt_type
traceback << "Handling prompt #{prompt_type}.<br/>"
case prompt_type
when "TWO_STEP_VERIFICATION"
prompt_type = 2
else # "LOGIN_CHALLENGE"
prompt_type = 4
end
# Prefer Authenticator app and SMS over unsupported protocols
if !{6, 9, 12, 15}.includes?(challenge_results[0][-1][0][0][8].as_i) && prompt_type == 2
tfa = challenge_results[0][-1][0].as_a.select { |auth_type| {6, 9, 12, 15}.includes? auth_type[8] }[0]
traceback << "Selecting challenge #{tfa[8]}..."
select_challenge = {prompt_type, nil, nil, nil, {tfa[8]}}.to_json
tl = challenge_results[1][2]
tfa = client.post("/_/signin/selectchallenge?TL=#{tl}", headers, login_req(select_challenge)).body
tfa = tfa[5..-1]
tfa = JSON.parse(tfa)[0][-1]
traceback << "done.<br/>"
else
traceback << "Using challenge #{challenge_results[0][-1][0][0][8]}.<br/>"
tfa = challenge_results[0][-1][0][0]
end
if tfa[5] == "QUOTA_EXCEEDED"
return error_template(423, "Quota exceeded, try again in a few hours")
end
if !tfa_code
account_type = "google"
captcha_type = "image"
case tfa[8]
when 6, 9
prompt = "Google verification code"
when 12
prompt = "Login verification, recovery email: #{tfa[-1][tfa[-1].as_h.keys[0]][0]}"
when 15
prompt = "Login verification, security question: #{tfa[-1][tfa[-1].as_h.keys[0]][0]}"
else
prompt = "Google verification code"
end
tfa = nil
captcha = nil
return templated "user/login"
end
tl = challenge_results[1][2]
request_type = tfa[8]
case request_type
when 6 # Authenticator app
tfa_req = {
user_hash, nil, 2, nil,
{6, nil, nil, nil, nil,
{tfa_code, false},
},
}.to_json
when 9 # Voice or text message
tfa_req = {
user_hash, nil, 2, nil,
{9, nil, nil, nil, nil, nil, nil, nil,
{nil, tfa_code, false, 2},
},
}.to_json
when 12 # Recovery email
tfa_req = {
user_hash, nil, 4, nil,
{12, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
{tfa_code},
},
}.to_json
when 15 # Security question
tfa_req = {
user_hash, nil, 5, nil,
{15, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
{tfa_code},
},
}.to_json
else
return error_template(500, "Unable to log in, make sure two-factor authentication (Authenticator or SMS) is turned on.")
end
traceback << "Submitting challenge..."
response = client.post("/_/signin/challenge?hl=en&TL=#{tl}", headers, login_req(tfa_req))
headers = response.cookies.add_request_headers(headers)
challenge_results = JSON.parse(response.body[5..-1])
if (challenge_results[0][-1]?.try &.[5] == "INCORRECT_ANSWER_ENTERED") ||
(challenge_results[0][-1]?.try &.[5] == "INVALID_INPUT")
return error_template(401, "Invalid TFA code")
end
traceback << "done.<br/>"
end
traceback << "Logging in..."
location = URI.parse(challenge_results[0][-1][2].to_s)
cookies = HTTP::Cookies.from_client_headers(headers)
headers.delete("Content-Type")
headers.delete("Google-Accounts-XSRF")
loop do
if !location || location.path == "/ManageAccount"
break
end
# Occasionally there will be a second page after login confirming
# the user's phone number ("/b/0/SmsAuthInterstitial"), which we currently don't handle.
if location.path.starts_with? "/b/0/SmsAuthInterstitial"
traceback << "Unhandled dialog /b/0/SmsAuthInterstitial."
end
login = client.get(location.request_target, headers)
headers = login.cookies.add_request_headers(headers)
location = login.headers["Location"]?.try { |u| URI.parse(u) }
end
cookies = HTTP::Cookies.from_client_headers(headers)
sid = cookies["SID"]?.try &.value
if !sid
raise "Couldn't get SID."
end
user, sid = get_user(sid, headers)
# We are now logged in
traceback << "done.<br/>"
host = URI.parse(env.request.headers["Host"]).host
cookies.each do |cookie|
cookie.secure = Invidious::User::Cookies::SECURE
if cookie.extension
cookie.extension = cookie.extension.not_nil!.gsub(".youtube.com", host)
cookie.extension = cookie.extension.not_nil!.gsub("Secure; ", "")
end
env.response.cookies << cookie
end
if env.request.cookies["PREFS"]?
user.preferences = env.get("preferences").as(Preferences)
Invidious::Database::Users.update_preferences(user)
cookie = env.request.cookies["PREFS"]
cookie.expires = Time.utc(1990, 1, 1)
env.response.cookies << cookie
end
env.redirect referer
rescue ex
traceback.rewind
# error_message = translate(locale, "Login failed. This may be because two-factor authentication is not turned on for your account.")
error_message = %(#{ex.message}<br/>Traceback:<br/><div style="padding-left:2em" id="traceback">#{traceback.gets_to_end}</div>)
return error_template(500, error_message)
end
when "invidious" when "invidious"
if email.nil? || email.empty? if !email
return error_template(401, "User ID is a required field") return error_template(401, "User ID is a required field")
end end
if password.nil? || password.empty? if !password
return error_template(401, "Password is a required field") return error_template(401, "Password is a required field")
end end
user = Invidious::Database::Users.select(email: email) user = Invidious::Database::Users.select(email: email)
if user if user
if !user.password
return error_template(400, "Please sign in using 'Log in with Google'")
end
if Crypto::Bcrypt::Password.new(user.password.not_nil!).verify(password.byte_slice(0, 55)) if Crypto::Bcrypt::Password.new(user.password.not_nil!).verify(password.byte_slice(0, 55))
sid = Base64.urlsafe_encode(Random::Secure.random_bytes(32)) sid = Base64.urlsafe_encode(Random::Secure.random_bytes(32))
Invidious::Database::SessionIDs.insert(sid, email) Invidious::Database::SessionIDs.insert(sid, email)
@ -99,6 +367,8 @@ module Invidious::Routes::Login
captcha_type ||= "image" captcha_type ||= "image"
account_type = "invidious" account_type = "invidious"
tfa = false
prompt = ""
if captcha_type == "image" if captcha_type == "image"
captcha = Invidious::User::Captcha.generate_image(HMAC_KEY) captcha = Invidious::User::Captcha.generate_image(HMAC_KEY)
@ -211,4 +481,11 @@ module Invidious::Routes::Login
env.redirect referer env.redirect referer
end end
def self.captcha(env)
headers = HTTP::Headers{":authority" => "accounts.google.com"}
response = YT_POOL.client &.get(env.request.resource, headers)
env.response.headers["Content-Type"] = response.headers["Content-Type"]
response.body
end
end end

View File

@ -24,6 +24,50 @@ module Invidious::Routes::Notifications
user = user.as(User) user = user.as(User)
if !user.password
channel_req = {} of String => String
channel_req["receive_all_updates"] = env.params.query["receive_all_updates"]? || "true"
channel_req["receive_no_updates"] = env.params.query["receive_no_updates"]? || ""
channel_req["receive_post_updates"] = env.params.query["receive_post_updates"]? || "true"
channel_req.reject! { |k, v| v != "true" && v != "false" }
headers = HTTP::Headers.new
headers["Cookie"] = env.request.headers["Cookie"]
html = YT_POOL.client &.get("/subscription_manager?disable_polymer=1", headers)
cookies = HTTP::Cookies.from_client_headers(headers)
html.cookies.each do |cookie|
if {"VISITOR_INFO1_LIVE", "YSC", "SIDCC"}.includes? cookie.name
if cookies[cookie.name]?
cookies[cookie.name] = cookie
else
cookies << cookie
end
end
end
headers = cookies.add_request_headers(headers)
if match = html.body.match(/'XSRF_TOKEN': "(?<session_token>[^"]+)"/)
session_token = match["session_token"]
else
return env.redirect referer
end
headers["content-type"] = "application/x-www-form-urlencoded"
channel_req["session_token"] = session_token
subs = XML.parse_html(html.body)
subs.xpath_nodes(%q(//a[@class="subscription-title yt-uix-sessionlink"]/@href)).each do |channel|
channel_id = channel.content.lstrip("/channel/").not_nil!
channel_req["channel_id"] = channel_id
YT_POOL.client &.post("/subscription_ajax?action_update_subscription_preferences=1", headers, form: channel_req)
end
end
if redirect if redirect
env.redirect referer env.redirect referer
else else

View File

@ -320,6 +320,10 @@ module Invidious::Routes::Playlists
end end
end end
if !user.password
# TODO: Playlist stub, sync with YouTube for Google accounts
# playlist_ajax(playlist_id, action, env.request.headers)
end
email = user.email email = user.email
case action case action
@ -406,8 +410,8 @@ module Invidious::Routes::Playlists
return error_template(500, ex) return error_template(500, ex)
end end
page_count = (playlist.video_count / 200).to_i page_count = (playlist.video_count / 100).to_i
page_count += 1 if (playlist.video_count % 200) > 0 page_count += 1 if (playlist.video_count % 100) > 0
if page > page_count if page > page_count
return env.redirect "/playlist?list=#{plid}&page=#{page_count}" return env.redirect "/playlist?list=#{plid}&page=#{page_count}"
@ -418,7 +422,7 @@ module Invidious::Routes::Playlists
end end
begin begin
videos = get_playlist_videos(playlist, offset: (page - 1) * 200) videos = get_playlist_videos(playlist, offset: (page - 1) * 100)
rescue ex rescue ex
return error_template(500, "Error encountered while retrieving playlist videos.<br>#{ex.message}") return error_template(500, "Error encountered while retrieving playlist videos.<br>#{ex.message}")
end end

View File

@ -43,6 +43,11 @@ module Invidious::Routes::Subscriptions
channel_id = env.params.query["c"]? channel_id = env.params.query["c"]?
channel_id ||= "" channel_id ||= ""
if !user.password
# Sync subscriptions with YouTube
subscribe_ajax(channel_id, action, env.request.headers)
end
case action case action
when "action_create_subscription_to_channel" when "action_create_subscription_to_channel"
if !user.subscriptions.includes? channel_id if !user.subscriptions.includes? channel_id
@ -77,6 +82,14 @@ module Invidious::Routes::Subscriptions
user = user.as(User) user = user.as(User)
sid = sid.as(String) sid = sid.as(String)
if !user.password
# Refresh account
headers = HTTP::Headers.new
headers["Cookie"] = env.request.headers["Cookie"]
user, sid = get_user(sid, headers)
end
action_takeout = env.params.query["action_takeout"]?.try &.to_i? action_takeout = env.params.query["action_takeout"]?.try &.to_i?
action_takeout ||= 0 action_takeout ||= 0
action_takeout = action_takeout == 1 action_takeout = action_takeout == 1

View File

@ -57,6 +57,7 @@ module Invidious::Routing
get "/login", Routes::Login, :login_page get "/login", Routes::Login, :login_page
post "/login", Routes::Login, :login post "/login", Routes::Login, :login
post "/signout", Routes::Login, :signout post "/signout", Routes::Login, :signout
get "/Captcha", Routes::Login, :captcha
# User preferences # User preferences
get "/preferences", Routes::PreferencesRoute, :show get "/preferences", Routes::PreferencesRoute, :show

View File

@ -6,7 +6,7 @@ struct Invidious::User
# Parse a youtube CSV subscription file # Parse a youtube CSV subscription file
def parse_subscription_export_csv(csv_content : String) def parse_subscription_export_csv(csv_content : String)
rows = CSV.new(csv_content.strip('\n'), headers: true) rows = CSV.new(csv_content, headers: true)
subscriptions = Array(String).new subscriptions = Array(String).new
# Counter to limit the amount of imports. # Counter to limit the amount of imports.
@ -32,10 +32,10 @@ struct Invidious::User
def parse_playlist_export_csv(user : User, raw_input : String) def parse_playlist_export_csv(user : User, raw_input : String)
# Split the input into head and body content # Split the input into head and body content
raw_head, raw_body = raw_input.strip('\n').split("\n\n", limit: 2, remove_empty: true) raw_head, raw_body = raw_input.split("\n\n", limit: 2, remove_empty: true)
# Create the playlist from the head content # Create the playlist from the head content
csv_head = CSV.new(raw_head.strip('\n'), headers: true) csv_head = CSV.new(raw_head, headers: true)
csv_head.next csv_head.next
title = csv_head[4] title = csv_head[4]
description = csv_head[5] description = csv_head[5]
@ -51,7 +51,7 @@ struct Invidious::User
Invidious::Database::Playlists.update_description(playlist.id, description) Invidious::Database::Playlists.update_description(playlist.id, description)
# Add each video to the playlist from the body content # Add each video to the playlist from the body content
csv_body = CSV.new(raw_body.strip('\n'), headers: true) csv_body = CSV.new(raw_body, headers: true)
csv_body.each do |row| csv_body.each do |row|
video_id = row[0] video_id = row[0]
if playlist if playlist

View File

@ -3,6 +3,75 @@ require "crypto/bcrypt/password"
# Materialized views may not be defined using bound parameters (`$1` as used elsewhere) # Materialized views may not be defined using bound parameters (`$1` as used elsewhere)
MATERIALIZED_VIEW_SQL = ->(email : String) { "SELECT cv.* FROM channel_videos cv WHERE EXISTS (SELECT subscriptions FROM users u WHERE cv.ucid = ANY (u.subscriptions) AND u.email = E'#{email.gsub({'\'' => "\\'", '\\' => "\\\\"})}') ORDER BY published DESC" } MATERIALIZED_VIEW_SQL = ->(email : String) { "SELECT cv.* FROM channel_videos cv WHERE EXISTS (SELECT subscriptions FROM users u WHERE cv.ucid = ANY (u.subscriptions) AND u.email = E'#{email.gsub({'\'' => "\\'", '\\' => "\\\\"})}') ORDER BY published DESC" }
def get_user(sid, headers, refresh = true)
if email = Invidious::Database::SessionIDs.select_email(sid)
user = Invidious::Database::Users.select!(email: email)
if refresh && Time.utc - user.updated > 1.minute
user, sid = fetch_user(sid, headers)
Invidious::Database::Users.insert(user, update_on_conflict: true)
Invidious::Database::SessionIDs.insert(sid, user.email, handle_conflicts: true)
begin
view_name = "subscriptions_#{sha256(user.email)}"
PG_DB.exec("CREATE MATERIALIZED VIEW #{view_name} AS #{MATERIALIZED_VIEW_SQL.call(user.email)}")
rescue ex
end
end
else
user, sid = fetch_user(sid, headers)
Invidious::Database::Users.insert(user, update_on_conflict: true)
Invidious::Database::SessionIDs.insert(sid, user.email, handle_conflicts: true)
begin
view_name = "subscriptions_#{sha256(user.email)}"
PG_DB.exec("CREATE MATERIALIZED VIEW #{view_name} AS #{MATERIALIZED_VIEW_SQL.call(user.email)}")
rescue ex
end
end
return user, sid
end
def fetch_user(sid, headers)
feed = YT_POOL.client &.get("/subscription_manager?disable_polymer=1", headers)
feed = XML.parse_html(feed.body)
channels = feed.xpath_nodes(%q(//ul[@id="guide-channels"]/li/a)).compact_map do |channel|
if {"Popular on YouTube", "Music", "Sports", "Gaming"}.includes? channel["title"]
nil
else
channel["href"].lstrip("/channel/")
end
end
channels = get_batch_channels(channels)
email = feed.xpath_node(%q(//a[@class="yt-masthead-picker-header yt-masthead-picker-active-account"]))
if email
email = email.content.strip
else
email = ""
end
token = Base64.urlsafe_encode(Random::Secure.random_bytes(32))
user = Invidious::User.new({
updated: Time.utc,
notifications: [] of String,
subscriptions: channels,
email: email,
preferences: Preferences.new(CONFIG.default_user_preferences.to_tuple),
password: nil,
token: token,
watched: [] of String,
feed_needs_update: true,
})
return user, sid
end
def create_user(sid, email, password) def create_user(sid, email, password)
password = Crypto::Bcrypt::Password.create(password, cost: 10) password = Crypto::Bcrypt::Password.create(password, cost: 10)
token = Base64.urlsafe_encode(Random::Secure.random_bytes(32)) token = Base64.urlsafe_encode(Random::Secure.random_bytes(32))
@ -22,6 +91,38 @@ def create_user(sid, email, password)
return user, sid return user, sid
end end
def subscribe_ajax(channel_id, action, env_headers)
headers = HTTP::Headers.new
headers["Cookie"] = env_headers["Cookie"]
html = YT_POOL.client &.get("/subscription_manager?disable_polymer=1", headers)
cookies = HTTP::Cookies.from_client_headers(headers)
html.cookies.each do |cookie|
if {"VISITOR_INFO1_LIVE", "YSC", "SIDCC"}.includes? cookie.name
if cookies[cookie.name]?
cookies[cookie.name] = cookie
else
cookies << cookie
end
end
end
headers = cookies.add_request_headers(headers)
if match = html.body.match(/'XSRF_TOKEN': "(?<session_token>[^"]+)"/)
session_token = match["session_token"]
headers["content-type"] = "application/x-www-form-urlencoded"
post_req = {
session_token: session_token,
}
post_url = "/subscription_ajax?#{action}=1&c=#{channel_id}"
YT_POOL.client &.post(post_url, headers, form: post_req)
end
end
def get_subscription_feed(user, max_results = 40, page = 1) def get_subscription_feed(user, max_results = 40, page = 1)
limit = max_results.clamp(0, MAX_ITEMS_PER_PAGE) limit = max_results.clamp(0, MAX_ITEMS_PER_PAGE)
offset = (page - 1) * limit offset = (page - 1) * limit

View File

@ -394,9 +394,7 @@ def fetch_video(id, region)
if reason = info["reason"]? if reason = info["reason"]?
if reason == "Video unavailable" if reason == "Video unavailable"
raise NotFoundException.new(reason.as_s || "") raise NotFoundException.new(reason.as_s || "")
elsif !reason.as_s.starts_with? "Premieres" else
# dont error when it's a premiere.
# we already parsed most of the data and display the premiere date
raise InfoException.new(reason.as_s || "") raise InfoException.new(reason.as_s || "")
end end
end end

View File

@ -78,11 +78,7 @@ def extract_video_info(video_id : String, proxy_region : String? = nil)
elsif video_id != player_response.dig("videoDetails", "videoId") elsif video_id != player_response.dig("videoDetails", "videoId")
# YouTube may return a different video player response than expected. # YouTube may return a different video player response than expected.
# See: https://github.com/TeamNewPipe/NewPipe/issues/8713 # See: https://github.com/TeamNewPipe/NewPipe/issues/8713
# Line to be reverted if one day we solve the video not available issue. raise VideoNotAvailableException.new("The video returned by YouTube isn't the requested one. (WEB client)")
return {
"version" => JSON::Any.new(Video::SCHEMA_VERSION.to_i64),
"reason" => JSON::Any.new("Can't load the video on this Invidious instance. YouTube is currently trying to block Invidious instances. <a href=\"https://github.com/iv-org/invidious/issues/3822\">Click here for more info about the issue.</a>"),
}
else else
reason = nil reason = nil
end end

View File

@ -1,6 +1,6 @@
<form class="pure-form" action="/search" method="get"> <form class="pure-form" action="/search" method="get">
<fieldset> <fieldset>
<input type="search" id="searchbox" autocorrect="off" <input type="search" id="searchbox" autocomplete="off" autocorrect="off"
autocapitalize="none" spellcheck="false" <% if autofocus %>autofocus<% end %> autocapitalize="none" spellcheck="false" <% if autofocus %>autofocus<% end %>
name="q" placeholder="<%= translate(locale, "search") %>" name="q" placeholder="<%= translate(locale, "search") %>"
title="<%= translate(locale, "search") %>" title="<%= translate(locale, "search") %>"

View File

@ -16,11 +16,12 @@
<li>a list of channel UCIDs the user is subscribed to</li> <li>a list of channel UCIDs the user is subscribed to</li>
<li>a user ID (for persistent storage of subscriptions and preferences)</li> <li>a user ID (for persistent storage of subscriptions and preferences)</li>
<li>a json object containing user preferences</li> <li>a json object containing user preferences</li>
<li>a hashed password</li> <li>a hashed password if applicable (not present on google accounts)</li>
<li>a randomly generated token for providing an RSS feed of a user's subscriptions</li> <li>a randomly generated token for providing an RSS feed of a user's subscriptions</li>
<li>a list of video IDs identifying watched videos</li> <li>a list of video IDs identifying watched videos</li>
</ul> </ul>
<p>Users can clear their watch history using the <a href="/clear_watch_history">clear watch history</a> page.</p> <p>Users can clear their watch history using the <a href="/clear_watch_history">clear watch history</a> page.</p>
<p>If a user is logged in with a Google account, no password will ever be stored. This website uses the session token provided by Google to identify a user, but does not store the information required to make requests on a user's behalf without their knowledge or consent.</p>
<h3>Data you passively provide</h3> <h3>Data you passively provide</h3>
<p>When you request any resource from this website (for example: a page, a font, an image, or an API endpoint) information about the request may be logged.</p> <p>When you request any resource from this website (for example: a page, a font, an image, or an API endpoint) information about the request may be logged.</p>

View File

@ -153,11 +153,11 @@
<span><%= translate(locale, "Current version: ") %> <%= CURRENT_VERSION %>-<%= CURRENT_COMMIT %> @ <%= CURRENT_BRANCH %></span> <span><%= translate(locale, "Current version: ") %> <%= CURRENT_VERSION %>-<%= CURRENT_COMMIT %> @ <%= CURRENT_BRANCH %></span>
</div> </div>
</div> </div>
<% if CONFIG.footer %> <% if CONFIG.footer %>
<div class="h-box v-box" id="footer-info"> <div class="h-box" style="padding-top: 1em; padding-bottom: 0.5em;">
<%= CONFIG.footer %> <div id="footer-info" style="text-align: center;"><%= CONFIG.footer %></div>
</div> </div>
<% end %> <% end %>
</footer> </footer>
</div> </div>

View File

@ -7,6 +7,42 @@
<div class="pure-u-1 pure-u-lg-3-5"> <div class="pure-u-1 pure-u-lg-3-5">
<div class="h-box"> <div class="h-box">
<% case account_type when %> <% case account_type when %>
<% when "google" %>
<form class="pure-form pure-form-stacked" action="/login?referer=<%= URI.encode_www_form(referer) %>&type=google" method="post">
<fieldset>
<% if email %>
<input name="email" type="hidden" value="<%= HTML.escape(email) %>">
<% else %>
<label for="email"><%= translate(locale, "E-mail") %> :</label>
<input required class="pure-input-1" name="email" type="email" placeholder="<%= translate(locale, "E-mail") %>">
<% end %>
<% if password %>
<input name="password" type="hidden" value="<%= HTML.escape(password) %>">
<% else %>
<label for="password"><%= translate(locale, "Password") %> :</label>
<input required class="pure-input-1" name="password" type="password" placeholder="<%= translate(locale, "Password") %>">
<% end %>
<% if prompt %>
<label for="tfa"><%= translate(locale, prompt) %> :</label>
<input required class="pure-input-1" name="tfa" type="text" placeholder="<%= translate(locale, prompt) %>">
<% end %>
<% if tfa %>
<input type="hidden" name="tfa" value="<%= tfa %>">
<% end %>
<% if captcha %>
<img style="width:50%" src="/Captcha?v=2&ctoken=<%= captcha[:tokens][0] %>"/>
<input type="hidden" name="token" value="<%= captcha[:tokens][0] %>">
<label for="answer"><%= translate(locale, "Answer") %> :</label>
<input type="text" name="answer" type="text" placeholder="<%= translate(locale, "Answer") %>">
<% end %>
<button type="submit" class="pure-button pure-button-primary"><%= translate(locale, "Sign In") %></button>
</fieldset>
</form>
<% else # "invidious" %> <% else # "invidious" %>
<form class="pure-form pure-form-stacked" action="/login?referer=<%= URI.encode_www_form(referer) %>&type=invidious" method="post"> <form class="pure-form pure-form-stacked" action="/login?referer=<%= URI.encode_www_form(referer) %>&type=invidious" method="post">
<fieldset> <fieldset>

View File

@ -8,15 +8,13 @@
def add_yt_headers(request) def add_yt_headers(request)
if request.headers["User-Agent"] == "Crystal" if request.headers["User-Agent"] == "Crystal"
request.headers["User-Agent"] ||= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" request.headers["User-Agent"] ||= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
end end
request.headers["Accept-Charset"] ||= "ISO-8859-1,utf-8;q=0.7,*;q=0.7" request.headers["Accept-Charset"] ||= "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
request.headers["Accept"] ||= "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" request.headers["Accept"] ||= "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
request.headers["Accept-Language"] ||= "en-us,en;q=0.5" request.headers["Accept-Language"] ||= "en-us,en;q=0.5"
# Preserve original cookies and add new YT consent cookie for EU servers # Preserve original cookies and add new YT consent cookie for EU servers
request.headers["Cookie"] = "#{request.headers["cookie"]?}; CONSENT=PENDING+#{Random.rand(100..999)}" request.headers["Cookie"] = "#{request.headers["cookie"]?}; CONSENT=YES+"
if !CONFIG.cookies.empty? if !CONFIG.cookies.empty?
request.headers["Cookie"] = "#{(CONFIG.cookies.map { |c| "#{c.name}=#{c.value}" }).join("; ")}; #{request.headers["cookie"]?}" request.headers["Cookie"] = "#{(CONFIG.cookies.map { |c| "#{c.name}=#{c.value}" }).join("; ")}; #{request.headers["cookie"]?}"
end end

View File

@ -381,7 +381,7 @@ private module Parsers
# Parses an InnerTube itemSectionRenderer into a SearchVideo. # Parses an InnerTube itemSectionRenderer into a SearchVideo.
# Returns nil when the given object isn't a ItemSectionRenderer # Returns nil when the given object isn't a ItemSectionRenderer
# #
# A itemSectionRenderer seems to be a simple wrapper for a videoRenderer or a playlistRenderer, used # A itemSectionRenderer seems to be a simple wrapper for a videoRenderer, used
# by the result page for channel searches. It is located inside a continuationItems # by the result page for channel searches. It is located inside a continuationItems
# container.It is very similar to RichItemRendererParser # container.It is very similar to RichItemRendererParser
# #
@ -394,8 +394,6 @@ private module Parsers
private def self.parse(item_contents, author_fallback) private def self.parse(item_contents, author_fallback)
child = VideoRendererParser.process(item_contents, author_fallback) child = VideoRendererParser.process(item_contents, author_fallback)
child ||= PlaylistRendererParser.process(item_contents, author_fallback)
return child return child
end end

View File

@ -7,18 +7,16 @@ module YoutubeAPI
private DEFAULT_API_KEY = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8" private DEFAULT_API_KEY = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"
private ANDROID_APP_VERSION = "18.20.38" private ANDROID_APP_VERSION = "17.33.42"
# github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1308 # github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1308
private ANDROID_USER_AGENT = "com.google.android.youtube/18.20.38 (Linux; U; Android 12; US) gzip" private ANDROID_USER_AGENT = "com.google.android.youtube/17.33.42 (Linux; U; Android 12; US) gzip"
private ANDROID_SDK_VERSION = 31_i64 private ANDROID_SDK_VERSION = 31_i64
private ANDROID_VERSION = "12" private ANDROID_VERSION = "12"
private IOS_APP_VERSION = "17.33.2"
private IOS_APP_VERSION = "18.21.3"
# github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1330 # github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1330
private IOS_USER_AGENT = "com.google.ios.youtube/18.21.3 (iPhone14,5; U; CPU iOS 15_6 like Mac OS X;)" private IOS_USER_AGENT = "com.google.ios.youtube/17.33.2 (iPhone14,5; U; CPU iOS 15_6 like Mac OS X;)"
# github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1224 # github.com/TeamNewPipe/NewPipeExtractor/blob/943b7c033bb9d07ead63ddab4441c287653e4384/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeParsingHelper.java#L1224
private IOS_VERSION = "15.6.0.19G71" private IOS_VERSION = "15.6.0.19G71"
private WINDOWS_VERSION = "10.0" private WINDOWS_VERSION = "10.0"
# Enumerate used to select one of the clients supported by the API # Enumerate used to select one of the clients supported by the API
@ -45,7 +43,7 @@ module YoutubeAPI
ClientType::Web => { ClientType::Web => {
name: "WEB", name: "WEB",
name_proto: "1", name_proto: "1",
version: "2.20230602.01.00", version: "2.20221118.01.00",
api_key: DEFAULT_API_KEY, api_key: DEFAULT_API_KEY,
screen: "WATCH_FULL_SCREEN", screen: "WATCH_FULL_SCREEN",
os_name: "Windows", os_name: "Windows",
@ -65,7 +63,7 @@ module YoutubeAPI
ClientType::WebMobile => { ClientType::WebMobile => {
name: "MWEB", name: "MWEB",
name_proto: "2", name_proto: "2",
version: "2.20230531.05.00", version: "2.20220805.01.00",
api_key: DEFAULT_API_KEY, api_key: DEFAULT_API_KEY,
os_name: "Android", os_name: "Android",
os_version: ANDROID_VERSION, os_version: ANDROID_VERSION,