Merge branch 'master' of github.com:iv-org/invidious
This commit is contained in:
commit
33678925cf
|
@ -433,5 +433,5 @@
|
||||||
"footer_documentation": "التوثيق",
|
"footer_documentation": "التوثيق",
|
||||||
"footer_donate_page": "تبرّع",
|
"footer_donate_page": "تبرّع",
|
||||||
"preferences_region_label": "بلد المحتوى:. ",
|
"preferences_region_label": "بلد المحتوى:. ",
|
||||||
"preferences_quality_dash_label": "جودة الفيديو المفضلة dash: "
|
"preferences_quality_dash_label": "جودة فيديو DASH المفضلة: "
|
||||||
}
|
}
|
||||||
|
|
240
locales/da.json
240
locales/da.json
|
@ -11,7 +11,7 @@
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` afspilningslister",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` afspilningslister",
|
||||||
"": "`x` afspilningslister"
|
"": "`x` afspilningslister"
|
||||||
},
|
},
|
||||||
"LIVE": "DIREKTE",
|
"LIVE": "LIVE",
|
||||||
"Shared `x` ago": "Delt for `x` siden",
|
"Shared `x` ago": "Delt for `x` siden",
|
||||||
"Unsubscribe": "Opsig abonnement",
|
"Unsubscribe": "Opsig abonnement",
|
||||||
"Subscribe": "Abonner",
|
"Subscribe": "Abonner",
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
"Export data as JSON": "Exporter data som JSON",
|
"Export data as JSON": "Exporter data som JSON",
|
||||||
"Delete account?": "Slet konto?",
|
"Delete account?": "Slet konto?",
|
||||||
"History": "Historik",
|
"History": "Historik",
|
||||||
"An alternative front-end to YouTube": "En alternativ forside til YouTube",
|
"An alternative front-end to YouTube": "Et alternativt front-end til YouTube",
|
||||||
"JavaScript license information": "JavaScript licens information",
|
"JavaScript license information": "JavaScript licens information",
|
||||||
"source": "kilde",
|
"source": "kilde",
|
||||||
"Log in": "Log på",
|
"Log in": "Log på",
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
"preferences_volume_label": "Lydstyrke: ",
|
"preferences_volume_label": "Lydstyrke: ",
|
||||||
"preferences_comments_label": "Standard kommentarer: ",
|
"preferences_comments_label": "Standard kommentarer: ",
|
||||||
"youtube": "YouTube",
|
"youtube": "YouTube",
|
||||||
"reddit": "reddit",
|
"reddit": "Reddit",
|
||||||
"preferences_captions_label": "Standard undertekster: ",
|
"preferences_captions_label": "Standard undertekster: ",
|
||||||
"Fallback captions: ": "Alternative undertekster: ",
|
"Fallback captions: ": "Alternative undertekster: ",
|
||||||
"preferences_related_videos_label": "Vis relaterede videoer: ",
|
"preferences_related_videos_label": "Vis relaterede videoer: ",
|
||||||
|
@ -150,8 +150,8 @@
|
||||||
"Unlisted": "Skjult",
|
"Unlisted": "Skjult",
|
||||||
"Private": "Privat",
|
"Private": "Privat",
|
||||||
"View all playlists": "Vis alle afspilningslister",
|
"View all playlists": "Vis alle afspilningslister",
|
||||||
"Updated `x` ago": "Opdateret for 'x' siden",
|
"Updated `x` ago": "Opdateret for `x` siden",
|
||||||
"Delete playlist `x`?": "Opdateret `x` siden",
|
"Delete playlist `x`?": "Fjern spilleliste `x`?",
|
||||||
"Delete playlist": "Slet afspilningsliste",
|
"Delete playlist": "Slet afspilningsliste",
|
||||||
"Create playlist": "Opret afspilningsliste",
|
"Create playlist": "Opret afspilningsliste",
|
||||||
"Title": "Titel",
|
"Title": "Titel",
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
},
|
},
|
||||||
"Premieres in `x`": "Har premiere om `x`",
|
"Premieres in `x`": "Har premiere om `x`",
|
||||||
"Premieres `x`": "Har premiere om `x`",
|
"Premieres `x`": "Har premiere om `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.": "Hej! Det ser ud til at du har JavaScript slået fra. Klik her for at se kommentarer, vær opmærksom på at de kan tage længere om at loade.",
|
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Hej! Det ser ud til at du har JavaScript slået fra. Klik her for at se kommentarer, vær opmærksom på at de kan tage længere om at indlæse.",
|
||||||
"View YouTube comments": "Vis YouTube kommentarer",
|
"View YouTube comments": "Vis YouTube kommentarer",
|
||||||
"View more comments on Reddit": "Se flere kommentarer på Reddit",
|
"View more comments on Reddit": "Se flere kommentarer på Reddit",
|
||||||
"View `x` comments": {
|
"View `x` comments": {
|
||||||
|
@ -190,17 +190,17 @@
|
||||||
"Quota exceeded, try again in a few hours": "Kvota overskredet, prøv igen om et par timer",
|
"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.",
|
"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",
|
"Invalid TFA code": "Ugyldig TFA kode",
|
||||||
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Login fejlede. Det er måske på grund af to-faktor-autentisering ikk er slået til for din konto.",
|
"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 krævet 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 krævet 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'": "Venligst tjek in via 'Log in med Google'",
|
"Please sign in using 'Log in with Google'": "Log ind via 'Log ind med Google'",
|
||||||
"Password cannot be empty": "Adgangskode kan 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 in",
|
"Please log in": "Venligst log ind",
|
||||||
"channel:`x`": "kanal: 'x'",
|
"channel:`x`": "kanal: 'x'",
|
||||||
"Deleted or invalid channel": "Slettet eller invalid kanal",
|
"Deleted or invalid channel": "Slettet eller invalid kanal",
|
||||||
"This channel does not exist.": "Denne kanal eksisterer ikke.",
|
"This channel does not exist.": "Denne kanal eksisterer ikke.",
|
||||||
|
@ -219,5 +219,219 @@
|
||||||
"Could not create mix.": "Kunne ikke skabe blanding.",
|
"Could not create mix.": "Kunne ikke skabe blanding.",
|
||||||
"Empty playlist": "Tom playliste",
|
"Empty playlist": "Tom playliste",
|
||||||
"Not a playlist.": "Ikke en playliste.",
|
"Not a playlist.": "Ikke en playliste.",
|
||||||
"Playlist does not exist.": "Playlist eksisterer ikke."
|
"Playlist does not exist.": "Playlist eksisterer ikke.",
|
||||||
|
"Esperanto": "Esperanto",
|
||||||
|
"Czech": "Tjekkisk",
|
||||||
|
"Danish": "Dansk",
|
||||||
|
"Community": "Samfund",
|
||||||
|
"Afrikaans": "Afrikansk",
|
||||||
|
"Portuguese": "Portugisisk",
|
||||||
|
"Ukrainian": "Ukrainsk",
|
||||||
|
"Fallback comments: ": "Fallback kommentarer: ",
|
||||||
|
"Popular": "Populær",
|
||||||
|
"footer_donate_page": "Doner",
|
||||||
|
"Gujarati": "Gujarati",
|
||||||
|
"Punjabi": "Punjabi",
|
||||||
|
"Sundanese": "Sundanesisk",
|
||||||
|
"Urdu": "Urdu",
|
||||||
|
"preferences_region_label": "Indhold land: ",
|
||||||
|
"Hidden field \"challenge\" is a required field": "Det skjulte felt \"challenge\" er et påkrævet felt",
|
||||||
|
"Albanian": "Albansk",
|
||||||
|
"preferences_quality_dash_label": "Fortrukket DASH video kvalitet: ",
|
||||||
|
"live": "Direkte",
|
||||||
|
"Lao": "Lao-tse",
|
||||||
|
"Filipino": "Filippinsk",
|
||||||
|
"Greek": "Græsk",
|
||||||
|
"Kurdish": "Kurdisk",
|
||||||
|
"Malay": "Malaysisk",
|
||||||
|
"Romanian": "Rumænsk",
|
||||||
|
"Somali": "Somalisk",
|
||||||
|
"`x` years": {
|
||||||
|
"": "`x`år",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` år"
|
||||||
|
},
|
||||||
|
"preferences_locale_label": "Sprog: ",
|
||||||
|
"News": "Nyheder",
|
||||||
|
"permalink": "permalink",
|
||||||
|
"date": "Upload dato",
|
||||||
|
"features": "Funktioner",
|
||||||
|
"filter": "Filter",
|
||||||
|
"Khmer": "Khmer",
|
||||||
|
"Finnish": "Finsk",
|
||||||
|
"week": "Denne uge",
|
||||||
|
"Korean": "Koreansk",
|
||||||
|
"Telugu": "Telugu",
|
||||||
|
"Malayalam": "Malayalam",
|
||||||
|
"View as playlist": "Se som spilleliste",
|
||||||
|
"Hungarian": "Ungarsk",
|
||||||
|
"Welsh": "Walisisk",
|
||||||
|
"subtitles": "Undertekster/CC",
|
||||||
|
"Bosnian": "Bosnisk",
|
||||||
|
"Yiddish": "Jiddisch",
|
||||||
|
"Belarusian": "Belarussisk",
|
||||||
|
"today": "I dag",
|
||||||
|
"Shona": "Shona",
|
||||||
|
"Slovenian": "Slovensk",
|
||||||
|
"Gaming": "Gaming",
|
||||||
|
"Bangla": "Bengali",
|
||||||
|
"Swahili": "Swahili",
|
||||||
|
"`x` marked it with a ❤": "`x`markeret med et ❤",
|
||||||
|
"Kyrgyz": "Kirgisisk",
|
||||||
|
"Turkish": "Tyrkisk",
|
||||||
|
"adminprefs_modified_source_code_url_label": "URL-adresse til modificeret kildekodelager",
|
||||||
|
"Switch Invidious Instance": "Skift Invidious instans",
|
||||||
|
"Samoan": "Samoansk",
|
||||||
|
"Spanish": "Spansk",
|
||||||
|
"%A %B %-d, %Y": "%A %B %-d, %Y",
|
||||||
|
"footer_documentation": "Dokumentation",
|
||||||
|
"Pashto": "Pashto",
|
||||||
|
"footer_modfied_source_code": "Modificeret Kildekode",
|
||||||
|
"Released under the AGPLv3 on Github.": "Udgivet under AGPLv3 på Github.",
|
||||||
|
"Tajik": "Tadsjikisk",
|
||||||
|
"`x` months": {
|
||||||
|
"": "`x`måneder",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x`måned"
|
||||||
|
},
|
||||||
|
"month": "Denne måned",
|
||||||
|
"Hebrew": "Hebraisk",
|
||||||
|
"Kannada": "Kannada",
|
||||||
|
"`x` weeks": {
|
||||||
|
"": "`x`uger",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x`uge"
|
||||||
|
},
|
||||||
|
"Current version: ": "Nuværende version: ",
|
||||||
|
"Amharic": "Amharisk",
|
||||||
|
"`x` days": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x`dag",
|
||||||
|
"": "`x`dage"
|
||||||
|
},
|
||||||
|
"Swedish": "Svensk",
|
||||||
|
"Corsican": "Korsikansk",
|
||||||
|
"movie": "Film",
|
||||||
|
"Could not pull trending pages.": "Kunne ikke hente trending sider.",
|
||||||
|
"English": "Engelsk",
|
||||||
|
"hd": "HD",
|
||||||
|
"Hausa": "Islandsk",
|
||||||
|
"year": "Dette år",
|
||||||
|
"Japanese": "Japansk",
|
||||||
|
"content_type": "Type",
|
||||||
|
"Icelandic": "Islandsk",
|
||||||
|
"Basque": "Baskisk",
|
||||||
|
"rating": "Bedømmelse",
|
||||||
|
"Yoruba": "Yoruba",
|
||||||
|
"Erroneous token": "Fejlagtig token",
|
||||||
|
"Videos": "Videoer",
|
||||||
|
"show": "Vis",
|
||||||
|
"Luxembourgish": "Luxemboursk",
|
||||||
|
"Vietnamese": "Vietnamesisk",
|
||||||
|
"Latvian": "Lettisk",
|
||||||
|
"Indonesian": "Indonesisk",
|
||||||
|
"duration": "Varighed",
|
||||||
|
"footer_original_source_code": "Original kildekode",
|
||||||
|
"Search": "Søg",
|
||||||
|
"Serbian": "Serbisk",
|
||||||
|
"Armenian": "Armensk",
|
||||||
|
"Bulgarian": "Bulgarsk",
|
||||||
|
"French": "Fransk",
|
||||||
|
"Burmese": "Burmesisk",
|
||||||
|
"Macedonian": "Makedonsk",
|
||||||
|
"Southern Sotho": "Sydlige Sotho",
|
||||||
|
"About": "Omkring",
|
||||||
|
"Malagasy": "Madagaskiske",
|
||||||
|
"Rating: ": "Bedømmelse: ",
|
||||||
|
"Movies": "Film",
|
||||||
|
"YouTube comment permalink": "Youtube kommentarer permalink",
|
||||||
|
"location": "Lokation",
|
||||||
|
"hdr": "HDR",
|
||||||
|
"Cebuano": "Cebuano (Sugbuanon)",
|
||||||
|
"Nyanja": "Nyanja",
|
||||||
|
"Chinese (Simplified)": "Kinesisk (forenklet)",
|
||||||
|
"Chinese (Traditional)": "Kinesisk (traditionelt)",
|
||||||
|
"Dutch": "Hollandsk",
|
||||||
|
"Estonian": "Estisk",
|
||||||
|
"preferences_automatic_instance_redirect_label": "Automatisk eksempel omdirigering (Fallback til redirect.invidious.io): ",
|
||||||
|
"Nepali": "Nepalesisk",
|
||||||
|
"Norwegian Bokmål": "Norsk Bokmål",
|
||||||
|
"`x` hours": {
|
||||||
|
"": "`x` timer",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x`time"
|
||||||
|
},
|
||||||
|
"`x` minutes": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` minut",
|
||||||
|
"": "`x` minuter"
|
||||||
|
},
|
||||||
|
"`x` seconds": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` sekund",
|
||||||
|
"": "`x` sekunder"
|
||||||
|
},
|
||||||
|
"(edited)": "(ændret)",
|
||||||
|
"preferences_show_nick_label": "Vis kælenavn på toppen: ",
|
||||||
|
"Galician": "Galisisk",
|
||||||
|
"German": "Tysk",
|
||||||
|
"Maori": "Maori",
|
||||||
|
"Slovak": "Slovakisk",
|
||||||
|
"relevance": "Relevans",
|
||||||
|
"hour": "Sidste time",
|
||||||
|
"playlist": "Spilleliste",
|
||||||
|
"long": "Lang (> 20 minutter)",
|
||||||
|
"creative_commons": "Creative Commons",
|
||||||
|
"Marathi": "Marathi",
|
||||||
|
"Sindhi": "Sindhi",
|
||||||
|
"preferences_category_misc": "Diverse indstillinger",
|
||||||
|
"Erroneous challenge": "Fejlagtig udfordring",
|
||||||
|
"Hindi": "Hindi",
|
||||||
|
"Igbo": "Igbo",
|
||||||
|
"Javanese": "Javanesisk",
|
||||||
|
"Kazakh": "Kasabhisk",
|
||||||
|
"Latin": "Latinsk",
|
||||||
|
"Lithuanian": "Lituaisk",
|
||||||
|
"Mongolian": "Mongolsk",
|
||||||
|
"Spanish (Latin America)": "Spansk (Latinamerika)",
|
||||||
|
"Uzbek": "Usbekisk",
|
||||||
|
"Western Frisian": "Vestfrisisk",
|
||||||
|
"Top": "Top",
|
||||||
|
"Music": "Musik",
|
||||||
|
"views": "Antal visninger",
|
||||||
|
"sort": "Sorter efter",
|
||||||
|
"Zulu": "Zulu",
|
||||||
|
"Invidious Private Feed for `x`": "Invidious Privat Feed til `x`",
|
||||||
|
"English (auto-generated)": "Engelsk (autogenereret)",
|
||||||
|
"Arabic": "Arabisk",
|
||||||
|
"Croatian": "Kroatisk",
|
||||||
|
"Hawaiian": "Hawaiiansk",
|
||||||
|
"Maltese": "Maltesisk",
|
||||||
|
"Polish": "Polsk",
|
||||||
|
"Russian": "Russisk",
|
||||||
|
"Download": "Hent",
|
||||||
|
"Download as: ": "Hent som: ",
|
||||||
|
"Playlists": "Spillelister",
|
||||||
|
"next_steps_error_message_refresh": "Opdater",
|
||||||
|
"next_steps_error_message_go_to_youtube": "Gå til Youtube",
|
||||||
|
"footer_source_code": "Kildekode",
|
||||||
|
"Tamil": "Tamil",
|
||||||
|
"Xhosa": "Xhosa",
|
||||||
|
"next_steps_error_message": "Efter det burde du prøve at: ",
|
||||||
|
"Sinhala": "Singalesisk (Sinhala)",
|
||||||
|
"Thai": "Thai",
|
||||||
|
"Broken? Try another Invidious Instance": "I stykker? Prøv en anden Invidious instans",
|
||||||
|
"No such user": "Brugeren findes ikke",
|
||||||
|
"Token is expired, please try again": "Token er udløbet, prøv igen",
|
||||||
|
"Catalan": "Catalansk",
|
||||||
|
"Haitian Creole": "Haitiansk",
|
||||||
|
"Irish": "Irsk",
|
||||||
|
"Persian": "Persisk",
|
||||||
|
"Scottish Gaelic": "Skotsk Gælisk",
|
||||||
|
"Default": "Standard",
|
||||||
|
"Video mode": "Videotilstand",
|
||||||
|
"short": "Kort (< 4 minutter)",
|
||||||
|
"Hidden field \"token\" is a required field": "Det skjulte felt \"token\" er et påkrævet felt",
|
||||||
|
"Azerbaijani": "Aserbajdsjansk",
|
||||||
|
"Georgian": "Georgisk",
|
||||||
|
"Italian": "Italiensk",
|
||||||
|
"Audio mode": "Lydtilstand",
|
||||||
|
"video": "Video",
|
||||||
|
"channel": "Kanal",
|
||||||
|
"3d": "3D",
|
||||||
|
"4k": "4K",
|
||||||
|
"Hmong": "Hmong"
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
"View playlist on YouTube": "Wiedergabeliste auf YouTube anzeigen",
|
"View playlist on YouTube": "Wiedergabeliste auf YouTube anzeigen",
|
||||||
"newest": "neueste",
|
"newest": "neueste",
|
||||||
"oldest": "älteste",
|
"oldest": "älteste",
|
||||||
"popular": "beliebt",
|
"popular": "beliebteste",
|
||||||
"last": "letzte",
|
"last": "neueste",
|
||||||
"Next page": "Nächste Seite",
|
"Next page": "Nächste Seite",
|
||||||
"Previous page": "Vorherige Seite",
|
"Previous page": "Vorherige Seite",
|
||||||
"Clear watch history?": "Verlauf löschen?",
|
"Clear watch history?": "Verlauf löschen?",
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
"preferences_volume_label": "Wiedergabelautstärke: ",
|
"preferences_volume_label": "Wiedergabelautstärke: ",
|
||||||
"preferences_comments_label": "Standardkommentare: ",
|
"preferences_comments_label": "Standardkommentare: ",
|
||||||
"youtube": "YouTube",
|
"youtube": "YouTube",
|
||||||
"reddit": "reddit",
|
"reddit": "Reddit",
|
||||||
"preferences_captions_label": "Standarduntertitel: ",
|
"preferences_captions_label": "Standarduntertitel: ",
|
||||||
"Fallback captions: ": "Ersatzuntertitel: ",
|
"Fallback captions: ": "Ersatzuntertitel: ",
|
||||||
"preferences_related_videos_label": "Ähnliche Videos anzeigen? ",
|
"preferences_related_videos_label": "Ähnliche Videos anzeigen? ",
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
"Dark mode: ": "Nachtmodus: ",
|
"Dark mode: ": "Nachtmodus: ",
|
||||||
"preferences_dark_mode_label": "Modus: ",
|
"preferences_dark_mode_label": "Modus: ",
|
||||||
"dark": "Nachtmodus",
|
"dark": "Nachtmodus",
|
||||||
"light": "heller Modus",
|
"light": "Hellermodus",
|
||||||
"preferences_thin_mode_label": "Schlanker Modus: ",
|
"preferences_thin_mode_label": "Schlanker Modus: ",
|
||||||
"preferences_category_misc": "Sonstige Einstellungen",
|
"preferences_category_misc": "Sonstige Einstellungen",
|
||||||
"preferences_automatic_instance_redirect_label": "Automatische Instanzweiterleitung (über redirect.invidious.io): ",
|
"preferences_automatic_instance_redirect_label": "Automatische Instanzweiterleitung (über redirect.invidious.io): ",
|
||||||
|
@ -431,5 +431,6 @@
|
||||||
"footer_documentation": "Dokumentation",
|
"footer_documentation": "Dokumentation",
|
||||||
"footer_source_code": "Quellcode",
|
"footer_source_code": "Quellcode",
|
||||||
"adminprefs_modified_source_code_url_label": "URL zum Repositorie des modifizierten Quellcodes",
|
"adminprefs_modified_source_code_url_label": "URL zum Repositorie des modifizierten Quellcodes",
|
||||||
"short": "Kurz (< 4 Minuten)"
|
"short": "Kurz (< 4 Minuten)",
|
||||||
|
"preferences_region_label": "Land der Inhalte: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,11 +69,28 @@
|
||||||
"preferences_local_label": "Proxy videos: ",
|
"preferences_local_label": "Proxy videos: ",
|
||||||
"preferences_speed_label": "Default speed: ",
|
"preferences_speed_label": "Default speed: ",
|
||||||
"preferences_quality_label": "Preferred video quality: ",
|
"preferences_quality_label": "Preferred video quality: ",
|
||||||
"preferences_quality_dash_label": "Preferred dash video quality: ",
|
"preferences_quality_option_dash": "DASH (adaptative quality)",
|
||||||
|
"preferences_quality_option_hd720": "HD720",
|
||||||
|
"preferences_quality_option_medium": "Medium",
|
||||||
|
"preferences_quality_option_small": "Small",
|
||||||
|
"preferences_quality_dash_label": "Preferred DASH video quality: ",
|
||||||
|
"preferences_quality_dash_option_auto": "Auto",
|
||||||
|
"preferences_quality_dash_option_best": "Best",
|
||||||
|
"preferences_quality_dash_option_worst": "Worst",
|
||||||
|
"preferences_quality_dash_option_4320p": "4320p",
|
||||||
|
"preferences_quality_dash_option_2160p": "2160p",
|
||||||
|
"preferences_quality_dash_option_1440p": "1440p",
|
||||||
|
"preferences_quality_dash_option_1080p": "1080p",
|
||||||
|
"preferences_quality_dash_option_720p": "720p",
|
||||||
|
"preferences_quality_dash_option_480p": "480p",
|
||||||
|
"preferences_quality_dash_option_360p": "360p",
|
||||||
|
"preferences_quality_dash_option_240p": "240p",
|
||||||
|
"preferences_quality_dash_option_144p": "144p",
|
||||||
"preferences_volume_label": "Player volume: ",
|
"preferences_volume_label": "Player volume: ",
|
||||||
"preferences_comments_label": "Default comments: ",
|
"preferences_comments_label": "Default comments: ",
|
||||||
"youtube": "YouTube",
|
"youtube": "YouTube",
|
||||||
"reddit": "Reddit",
|
"reddit": "Reddit",
|
||||||
|
"invidious": "Invidious",
|
||||||
"preferences_captions_label": "Default captions: ",
|
"preferences_captions_label": "Default captions: ",
|
||||||
"Fallback captions: ": "Fallback captions: ",
|
"Fallback captions: ": "Fallback captions: ",
|
||||||
"preferences_related_videos_label": "Show related videos: ",
|
"preferences_related_videos_label": "Show related videos: ",
|
||||||
|
@ -89,7 +106,7 @@
|
||||||
"light": "light",
|
"light": "light",
|
||||||
"preferences_thin_mode_label": "Thin mode: ",
|
"preferences_thin_mode_label": "Thin mode: ",
|
||||||
"preferences_category_misc": "Miscellaneous preferences",
|
"preferences_category_misc": "Miscellaneous preferences",
|
||||||
"preferences_automatic_instance_redirect_label": "Automaticatic instance redirection (fallback to redirect.invidious.io): ",
|
"preferences_automatic_instance_redirect_label": "Automatic instance redirection (fallback to redirect.invidious.io): ",
|
||||||
"preferences_category_subscription": "Subscription preferences",
|
"preferences_category_subscription": "Subscription preferences",
|
||||||
"preferences_annotations_subscribed_label": "Show annotations by default for subscribed channels? ",
|
"preferences_annotations_subscribed_label": "Show annotations by default for subscribed channels? ",
|
||||||
"Redirect homepage to feed: ": "Redirect homepage to feed: ",
|
"Redirect homepage to feed: ": "Redirect homepage to feed: ",
|
||||||
|
@ -423,6 +440,8 @@
|
||||||
"4k": "4K",
|
"4k": "4K",
|
||||||
"location": "Location",
|
"location": "Location",
|
||||||
"hdr": "HDR",
|
"hdr": "HDR",
|
||||||
|
"purchased" : "Purchased",
|
||||||
|
"360" : "360°",
|
||||||
"filter": "Filter",
|
"filter": "Filter",
|
||||||
"Current version: ": "Current version: ",
|
"Current version: ": "Current version: ",
|
||||||
"next_steps_error_message": "After which you should try to: ",
|
"next_steps_error_message": "After which you should try to: ",
|
||||||
|
@ -433,5 +452,14 @@
|
||||||
"footer_source_code": "Source code",
|
"footer_source_code": "Source code",
|
||||||
"footer_original_source_code": "Original source code",
|
"footer_original_source_code": "Original source code",
|
||||||
"footer_modfied_source_code": "Modified Source code",
|
"footer_modfied_source_code": "Modified Source code",
|
||||||
"adminprefs_modified_source_code_url_label": "URL to modified source code repository"
|
"adminprefs_modified_source_code_url_label": "URL to modified source code repository",
|
||||||
|
"none": "none",
|
||||||
|
"videoinfo_started_streaming_x_ago": "Started streaming `x` ago",
|
||||||
|
"videoinfo_watch_on_youTube": "Watch on YouTube",
|
||||||
|
"videoinfo_youTube_embed_link": "Embed",
|
||||||
|
"videoinfo_invidious_embed_link": "Embed Link",
|
||||||
|
"download_subtitles": "Subtitles - `x` (.vtt)",
|
||||||
|
"user_created_playlists": "`x` created playlists",
|
||||||
|
"user_saved_playlists": "`x` saved playlists",
|
||||||
|
"Video unavailable": "Video unavailable"
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
"light": "clair",
|
"light": "clair",
|
||||||
"preferences_thin_mode_label": "Mode léger : ",
|
"preferences_thin_mode_label": "Mode léger : ",
|
||||||
"preferences_category_misc": "Paramètres divers",
|
"preferences_category_misc": "Paramètres divers",
|
||||||
"preferences_automatic_instance_redirect_label": "Redirection vers une autre instance automatique (via redirect.invidious.io) : ",
|
"preferences_automatic_instance_redirect_label": "Redirection automatique vers une autre instance (via redirect.invidious.io) : ",
|
||||||
"preferences_category_subscription": "Préférences des abonnements",
|
"preferences_category_subscription": "Préférences des abonnements",
|
||||||
"preferences_annotations_subscribed_label": "Afficher les annotations par défaut sur les chaînes auxquelles vous êtes abonnés : ",
|
"preferences_annotations_subscribed_label": "Afficher les annotations par défaut sur les chaînes auxquelles vous êtes abonnés : ",
|
||||||
"Redirect homepage to feed: ": "Rediriger la page d'accueil vers la page d'abonnements : ",
|
"Redirect homepage to feed: ": "Rediriger la page d'accueil vers la page d'abonnements : ",
|
||||||
|
@ -424,7 +424,7 @@
|
||||||
"next_steps_error_message": "Vous pouvez essayer de : ",
|
"next_steps_error_message": "Vous pouvez essayer de : ",
|
||||||
"next_steps_error_message_refresh": "Rafraîchir la page",
|
"next_steps_error_message_refresh": "Rafraîchir la page",
|
||||||
"next_steps_error_message_go_to_youtube": "Aller sur YouTube",
|
"next_steps_error_message_go_to_youtube": "Aller sur YouTube",
|
||||||
"preferences_quality_dash_label": "Qualité préférée de la vidéo du tableau de bord : ",
|
"preferences_quality_dash_label": "Qualité vidéo DASH préférée : ",
|
||||||
"footer_source_code": "Code source",
|
"footer_source_code": "Code source",
|
||||||
"preferences_region_label": "Pays du contenu : ",
|
"preferences_region_label": "Pays du contenu : ",
|
||||||
"footer_donate_page": "Faire un don",
|
"footer_donate_page": "Faire un don",
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
"light": "svijetlo",
|
"light": "svijetlo",
|
||||||
"preferences_thin_mode_label": "Pojednostavljen prikaz: ",
|
"preferences_thin_mode_label": "Pojednostavljen prikaz: ",
|
||||||
"preferences_category_misc": "Razne postavke",
|
"preferences_category_misc": "Razne postavke",
|
||||||
"preferences_automatic_instance_redirect_label": "Automatsko preusmjeravanje instance (u krajnjem slučaju koristi redirect.invidious.io): ",
|
"preferences_automatic_instance_redirect_label": "Automatsko preusmjeravanje instance (u krajnjem slučaju će se koristiti redirect.invidious.io): ",
|
||||||
"preferences_category_subscription": "Postavke pretplata",
|
"preferences_category_subscription": "Postavke pretplata",
|
||||||
"preferences_annotations_subscribed_label": "Standardno prikaži napomene za pretplaćene kanale: ",
|
"preferences_annotations_subscribed_label": "Standardno prikaži napomene za pretplaćene kanale: ",
|
||||||
"Redirect homepage to feed: ": "Preusmjeri početnu stranicu na feed: ",
|
"Redirect homepage to feed: ": "Preusmjeri početnu stranicu na feed: ",
|
||||||
|
@ -383,7 +383,7 @@
|
||||||
"Movies": "Filmovi",
|
"Movies": "Filmovi",
|
||||||
"Download": "Preuzmi",
|
"Download": "Preuzmi",
|
||||||
"Download as: ": "Preuzmi kao: ",
|
"Download as: ": "Preuzmi kao: ",
|
||||||
"%A %B %-d, %Y": "%A, %-d. %B %Y.",
|
"%A %B %-d, %Y": "%A, %-d. %B %Y",
|
||||||
"(edited)": "(uređeno)",
|
"(edited)": "(uređeno)",
|
||||||
"YouTube comment permalink": "Stalna poveznica YouTube komentara",
|
"YouTube comment permalink": "Stalna poveznica YouTube komentara",
|
||||||
"permalink": "stalna poveznica",
|
"permalink": "stalna poveznica",
|
||||||
|
@ -421,7 +421,7 @@
|
||||||
"hdr": "hdr",
|
"hdr": "hdr",
|
||||||
"filter": "filtar",
|
"filter": "filtar",
|
||||||
"Current version: ": "Trenutačna verzija: ",
|
"Current version: ": "Trenutačna verzija: ",
|
||||||
"next_steps_error_message": "Nakon toga pokušaj sljedeće: ",
|
"next_steps_error_message": "Nakon toga bi trebali pokušati sljedeće: ",
|
||||||
"next_steps_error_message_refresh": "Aktualiziraj stranicu",
|
"next_steps_error_message_refresh": "Aktualiziraj stranicu",
|
||||||
"next_steps_error_message_go_to_youtube": "Idi na YouTube",
|
"next_steps_error_message_go_to_youtube": "Idi na YouTube",
|
||||||
"footer_donate_page": "Doniraj",
|
"footer_donate_page": "Doniraj",
|
||||||
|
@ -433,5 +433,5 @@
|
||||||
"footer_documentation": "Dokumentacija",
|
"footer_documentation": "Dokumentacija",
|
||||||
"footer_original_source_code": "Izvoran izvorni kod",
|
"footer_original_source_code": "Izvoran izvorni kod",
|
||||||
"preferences_region_label": "Zemlja sadržaja: ",
|
"preferences_region_label": "Zemlja sadržaja: ",
|
||||||
"preferences_quality_dash_label": "Preferirana kvaliteta dash-videa: "
|
"preferences_quality_dash_label": "Preferirana DASH videokvaliteta: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,5 +433,5 @@
|
||||||
"footer_modfied_source_code": "Kode sumber yang dimodifikasi",
|
"footer_modfied_source_code": "Kode sumber yang dimodifikasi",
|
||||||
"footer_documentation": "Dokumentasi",
|
"footer_documentation": "Dokumentasi",
|
||||||
"preferences_region_label": "Konten dari negara: ",
|
"preferences_region_label": "Konten dari negara: ",
|
||||||
"preferences_quality_dash_label": "Kualitas video dash yang disukai: "
|
"preferences_quality_dash_label": "Kualitas video DASH yang disukai: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -431,5 +431,7 @@
|
||||||
"footer_source_code": "Kildekode",
|
"footer_source_code": "Kildekode",
|
||||||
"footer_original_source_code": "Opprinnelig kildekode",
|
"footer_original_source_code": "Opprinnelig kildekode",
|
||||||
"footer_modfied_source_code": "Endret kildekode",
|
"footer_modfied_source_code": "Endret kildekode",
|
||||||
"adminprefs_modified_source_code_url_label": "Nettadresse til kodelager inneholdende endret kildekode"
|
"adminprefs_modified_source_code_url_label": "Nettadresse til kodelager inneholdende endret kildekode",
|
||||||
|
"preferences_quality_dash_label": "Foretrukket DASH-videokvalitet: ",
|
||||||
|
"preferences_region_label": "Innholdsland: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
"Export subscriptions as OPML": "Abonnementen exporteren als OPML",
|
"Export subscriptions as OPML": "Abonnementen exporteren als OPML",
|
||||||
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnementen exporteren als OPML (voor NewPipe en FreeTube)",
|
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Abonnementen exporteren als OPML (voor NewPipe en FreeTube)",
|
||||||
"Export data as JSON": "Gegevens exporteren als JSON",
|
"Export data as JSON": "Gegevens exporteren als JSON",
|
||||||
"Delete account?": "Wil je je account verwijderen?",
|
"Delete account?": "Wilt u uw account verwijderen?",
|
||||||
"History": "Geschiedenis",
|
"History": "Geschiedenis",
|
||||||
"An alternative front-end to YouTube": "Een alternatief front-end voor YouTube",
|
"An alternative front-end to YouTube": "Een alternatief front-end voor YouTube",
|
||||||
"JavaScript license information": "JavaScript-licentieinformatie",
|
"JavaScript license information": "JavaScript-licentieinformatie",
|
||||||
|
@ -414,5 +414,24 @@
|
||||||
"location": "locatie",
|
"location": "locatie",
|
||||||
"hdr": "HDR",
|
"hdr": "HDR",
|
||||||
"filter": "verfijnen",
|
"filter": "verfijnen",
|
||||||
"Current version: ": "Huidige versie: "
|
"Current version: ": "Huidige versie: ",
|
||||||
|
"Switch Invidious Instance": "Schakel tussen de Invidious Instanties",
|
||||||
|
"preferences_automatic_instance_redirect_label": "Automatische instantie-omleiding (terugval naar redirect.invidious.io): ",
|
||||||
|
"preferences_quality_dash_label": "Gewenste DASH-videokwaliteit: ",
|
||||||
|
"preferences_region_label": "Inhoud land: ",
|
||||||
|
"preferences_category_misc": "Diverse voorkeuren",
|
||||||
|
"preferences_show_nick_label": "Toon bijnaam bovenaan: ",
|
||||||
|
"Released under the AGPLv3 on Github.": "Uitgebracht onder de AGPLv3 op Github.",
|
||||||
|
"short": "Kort (<4 minuten)",
|
||||||
|
"next_steps_error_message_refresh": "Vernieuwen",
|
||||||
|
"next_steps_error_message_go_to_youtube": "Ga naar YouTube",
|
||||||
|
"footer_donate_page": "Doneren",
|
||||||
|
"footer_documentation": "Documentatie",
|
||||||
|
"footer_original_source_code": "Originele bron-code",
|
||||||
|
"footer_modfied_source_code": "Gewijzigde bron-code",
|
||||||
|
"adminprefs_modified_source_code_url_label": "URL naar gewijzigde bron-code-opslagplaats",
|
||||||
|
"Broken? Try another Invidious Instance": "Kapot? Probeer een andere Invidious Instantie",
|
||||||
|
"next_steps_error_message": "Waarna u moet proberen om: ",
|
||||||
|
"footer_source_code": "Bron-code",
|
||||||
|
"long": "Lang (> 20 minuten)"
|
||||||
}
|
}
|
||||||
|
|
792
locales/sr.json
792
locales/sr.json
|
@ -1,437 +1,437 @@
|
||||||
{
|
{
|
||||||
"`x` subscribers": {
|
"`x` subscribers": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` пратилаца",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` pratilac",
|
||||||
"": "`x` пратилаца"
|
"": "`x` pratilaca"
|
||||||
},
|
},
|
||||||
"`x` videos": {
|
"`x` videos": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` видео записа",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` video zapis",
|
||||||
"": "`x` видео записа"
|
"": "`x` video zapisa"
|
||||||
},
|
},
|
||||||
"`x` playlists": {
|
"`x` playlists": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` списака извођења",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` spisak izvođenja",
|
||||||
"": "`x` списака извођења"
|
"": "`x` spisaka izvođenja"
|
||||||
},
|
},
|
||||||
"LIVE": "УЖИВО",
|
"LIVE": "UŽIVO",
|
||||||
"Shared `x` ago": "Подељено пре `x`",
|
"Shared `x` ago": "Podeljeno pre `x`",
|
||||||
"Unsubscribe": "Прекини праћење",
|
"Unsubscribe": "Prekini praćenje",
|
||||||
"Subscribe": "Прати",
|
"Subscribe": "Prati",
|
||||||
"View channel on YouTube": "Погледај канал на YouTube-у",
|
"View channel on YouTube": "Pogledaj kanal na YouTube-u",
|
||||||
"View playlist on YouTube": "Погледај списак извођења на YouTube-у",
|
"View playlist on YouTube": "Pogledaj spisak izvođenja na YouTube-u",
|
||||||
"newest": "најновије",
|
"newest": "najnovije",
|
||||||
"oldest": "најстарије",
|
"oldest": "najstarije",
|
||||||
"popular": "популарно",
|
"popular": "popularno",
|
||||||
"last": "последње",
|
"last": "poslednje",
|
||||||
"Next page": "Следећа страница",
|
"Next page": "Sledeća stranica",
|
||||||
"Previous page": "Претходна страница",
|
"Previous page": "Prethodna stranica",
|
||||||
"Clear watch history?": "Избрисати повест прегледања?",
|
"Clear watch history?": "Izbrisati povest pregledanja?",
|
||||||
"New password": "Нова запорка",
|
"New password": "Nova lozinka",
|
||||||
"New passwords must match": "Нове запорке морају бити истоветне",
|
"New passwords must match": "Nove lozinke moraju biti istovetne",
|
||||||
"Cannot change password for Google accounts": "Није могуће променити запорку за Google налоге",
|
"Cannot change password for Google accounts": "Nije moguće promeniti lozinku za Google naloge",
|
||||||
"Authorize token?": "Овласти токен?",
|
"Authorize token?": "Ovlasti žeton?",
|
||||||
"Authorize token for `x`?": "Овласти токен за `x`?",
|
"Authorize token for `x`?": "Ovlasti žeton za `x`?",
|
||||||
"Yes": "Да",
|
"Yes": "Da",
|
||||||
"No": "Не",
|
"No": "Ne",
|
||||||
"Import and Export Data": "Увоз и извоз података",
|
"Import and Export Data": "Uvoz i Izvoz Podataka",
|
||||||
"Import": "Увези",
|
"Import": "Uvezi",
|
||||||
"Import Invidious data": "Увези податке са Invidious-а",
|
"Import Invidious data": "Uvezi podatke sa Invidious-a",
|
||||||
"Import YouTube subscriptions": "Увези праћења са YouTube-а",
|
"Import YouTube subscriptions": "Uvezi praćenja sa YouTube-a",
|
||||||
"Import FreeTube subscriptions (.db)": "Увези праћења са FreeTube-а (.db)",
|
"Import FreeTube subscriptions (.db)": "Uvezi praćenja sa FreeTube-a (.db)",
|
||||||
"Import NewPipe subscriptions (.json)": "Увези праћења са NewPipe-а (.json)",
|
"Import NewPipe subscriptions (.json)": "Uvezi praćenja sa NewPipe-a (.json)",
|
||||||
"Import NewPipe data (.zip)": "Увези податке са NewPipe-а (.zip)",
|
"Import NewPipe data (.zip)": "Uvezi podatke sa NewPipe-a (.zip)",
|
||||||
"Export": "Извези",
|
"Export": "Izvezi",
|
||||||
"Export subscriptions as OPML": "Извези праћења као OPML датотеку",
|
"Export subscriptions as OPML": "Izvezi praćenja kao OPML datoteku",
|
||||||
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Извези праћења као OPML датотеку (за NewPipe и FreeTube)",
|
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Izvezi praćenja kao OPML datoteku (za NewPipe i FreeTube)",
|
||||||
"Export data as JSON": "Извези податке као JSON датотеку",
|
"Export data as JSON": "Izvezi podatke kao JSON datoteku",
|
||||||
"Delete account?": "Избрисати рачун?",
|
"Delete account?": "Izbrišite nalog?",
|
||||||
"History": "Повест",
|
"History": "Istorija",
|
||||||
"An alternative front-end to YouTube": "Заменски кориснички слој за YouTube",
|
"An alternative front-end to YouTube": "Zamenski korisnički sloj za YouTube",
|
||||||
"JavaScript license information": "Извештај о JavaScript одобрењу",
|
"JavaScript license information": "Izveštaj o JavaScript odobrenju",
|
||||||
"source": "извор",
|
"source": "izvor",
|
||||||
"Log in": "Пријави се",
|
"Log in": "Prijavi se",
|
||||||
"Log in/register": "Пријави се/Отвори налог",
|
"Log in/register": "Prijavi se/Otvori nalog",
|
||||||
"Log in with Google": "Пријави се помоћу Google-а",
|
"Log in with Google": "Prijavi se pomoću Google-a",
|
||||||
"User ID": "Кориснички ИД",
|
"User ID": "Korisnički ID",
|
||||||
"Password": "Запорка",
|
"Password": "Lozinka",
|
||||||
"Time (h:mm:ss):": "Време (ч:мм:сс):",
|
"Time (h:mm:ss):": "Vreme (č:mm:ss):",
|
||||||
"Text CAPTCHA": "Знаковни CAPTCHA",
|
"Text CAPTCHA": "Znakovni CAPTCHA",
|
||||||
"Image CAPTCHA": "Сликовни CAPTCHA",
|
"Image CAPTCHA": "Slikovni CAPTCHA",
|
||||||
"Sign In": "Пријава",
|
"Sign In": "Prijava",
|
||||||
"Register": "Отвори налог",
|
"Register": "Otvori nalog",
|
||||||
"E-mail": "Е-пошта",
|
"E-mail": "E-pošta",
|
||||||
"Google verification code": "Google-ов оверни кôд",
|
"Google verification code": "Google-ova overna koda",
|
||||||
"Preferences": "Подешавања",
|
"Preferences": "Podešavanja",
|
||||||
"preferences_category_player": "Подешавања репродуктора",
|
"preferences_category_player": "Podešavanja reproduktora",
|
||||||
"preferences_video_loop_label": "Увек понављај: ",
|
"preferences_video_loop_label": "Uvek ponavljaj: ",
|
||||||
"preferences_autoplay_label": "Самопуштање: ",
|
"preferences_autoplay_label": "Samopuštanje: ",
|
||||||
"preferences_continue_label": "Увек подразумевано пуштај следеће: ",
|
"preferences_continue_label": "Uvek podrazumevano puštaj sledeće: ",
|
||||||
"preferences_continue_autoplay_label": "Самопуштање следећег видео записа: ",
|
"preferences_continue_autoplay_label": "Samopuštanje sledećeg video zapisa: ",
|
||||||
"preferences_listen_label": "Увек подразумевано укључен само звук: ",
|
"preferences_listen_label": "Uvek podrazumevano uključen samo zvuk: ",
|
||||||
"preferences_local_label": "Приказ видео записа преко посредника: ",
|
"preferences_local_label": "Prikaz video zapisa preko posrednika: ",
|
||||||
"Playlist privacy": "Подешавања приватности плеј листе",
|
"Playlist privacy": "Podešavanja privatnosti plej liste",
|
||||||
"Editing playlist `x`": "Измена плеј листе `x`",
|
"Editing playlist `x`": "Izmena plej liste `x`",
|
||||||
"Please sign in using 'Log in with Google'": "Молимо Вас да се пријавите помоћу 'Log in with Google'",
|
"Please sign in using 'Log in with Google'": "Molimo Vas da se prijavite pomoću 'Log in with Google'",
|
||||||
"Playlist does not exist.": "Непостојећа плеј листа.",
|
"Playlist does not exist.": "Nepostojeća plej lista.",
|
||||||
"Erroneous challenge": "Погрешан изазов",
|
"Erroneous challenge": "Pogrešan izazov",
|
||||||
"Maltese": "Малтешки",
|
"Maltese": "Malteški",
|
||||||
"Download": "Преузми",
|
"Download": "Preuzmi",
|
||||||
"Download as: ": "Преузми као: ",
|
"Download as: ": "Preuzmi kao: ",
|
||||||
"Quota exceeded, try again in a few hours": "Квота је премашена, молимо Вас да покушате за пар сати",
|
"Quota exceeded, try again in a few hours": "Kvota je premašena, molimo vas da pokušate ponovo za par sati",
|
||||||
"Bangla": "Бангла/Бенгалски",
|
"Bangla": "Bangla/Bengalski",
|
||||||
"preferences_quality_dash_label": "Преферирани квалитет dash видео формата: ",
|
"preferences_quality_dash_label": "Preferirani kvalitet DASH video formata: ",
|
||||||
"Token manager": "Меначер токена",
|
"Token manager": "Upravljanje žetonima",
|
||||||
"Token": "Токен",
|
"Token": "Žeton",
|
||||||
"`x` tokens": {
|
"`x` tokens": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` токен",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` žeton",
|
||||||
"": "`x` токена"
|
"": "`x` žetona"
|
||||||
},
|
},
|
||||||
"Import/export": "Увези/Извези",
|
"Import/export": "Uvezi/Izvezi",
|
||||||
"revoke": "опозови",
|
"revoke": "opozovi",
|
||||||
"`x` unseen notifications": {
|
"`x` unseen notifications": {
|
||||||
"": "`x` непрегледаних обавештења",
|
"": "`x` nepregledanih obaveštenja",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` непрегледаних обавештења"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` nepregledanо obaveštenjе"
|
||||||
},
|
},
|
||||||
"search": "претрага",
|
"search": "pretraga",
|
||||||
"Log out": "Одјава",
|
"Log out": "Odjava",
|
||||||
"Source available here.": "Изворни код.",
|
"Source available here.": "Izvorna koda je ovde dostupna.",
|
||||||
"Trending": "У тренду",
|
"Trending": "U trendu",
|
||||||
"Updated `x` ago": "Ажурирано пре `x`",
|
"Updated `x` ago": "Ažurirano pre `x`",
|
||||||
"Delete playlist `x`?": "Обриши плеј листу `x`?",
|
"Delete playlist `x`?": "Obriši plej listu `x`?",
|
||||||
"Create playlist": "Направи плеј листу",
|
"Create playlist": "Napravi plej listu",
|
||||||
"Show less": "Прикажи мање",
|
"Show less": "Prikaži manje",
|
||||||
"Switch Invidious Instance": "Промени Invidious инстанцу",
|
"Switch Invidious Instance": "Promeni Invidious instancu",
|
||||||
"Hide annotations": "Сакриј напомене",
|
"Hide annotations": "Sakrij napomene",
|
||||||
"User ID is a required field": "Кориснички ID је обавезно поље",
|
"User ID is a required field": "Korisnički ID je obavezno polje",
|
||||||
"Wrong username or password": "Погрешно корисничко име или лозинка",
|
"Wrong username or password": "Pogrešno korisničko ime ili lozinka",
|
||||||
"Please log in": "Молимо Вас да се пријавите",
|
"Please log in": "Molimo vas da se prijavite",
|
||||||
"channel:`x`": "канал:`x`",
|
"channel:`x`": "kanal:`x`",
|
||||||
"Could not fetch comments": "Узимање коментара није успело",
|
"Could not fetch comments": "Uzimanje komentara nije uspelo",
|
||||||
"`x` points": {
|
"`x` points": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` поен",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` poen",
|
||||||
"": "`x` поена"
|
"": "`x` poena"
|
||||||
},
|
},
|
||||||
"Could not create mix.": "Прављење микса није успело.",
|
"Could not create mix.": "Pravljenje miksa nije uspelo.",
|
||||||
"Empty playlist": "Празна плеј листа",
|
"Empty playlist": "Prazna plej lista",
|
||||||
"Not a playlist.": "Није плеј листа.",
|
"Not a playlist.": "Nije plej lista.",
|
||||||
"Could not pull trending pages.": "Учитавање 'У току' странције није успело.",
|
"Could not pull trending pages.": "Učitavanje 'U toku' stranica nije uspelo.",
|
||||||
"Token is expired, please try again": "Токен је истекао, молимо Вас да покушате поново",
|
"Token is expired, please try again": "Žeton je istekao, molimo vas da pokušate ponovo",
|
||||||
"English (auto-generated)": "Енглески (аутоматски генерисано)",
|
"English (auto-generated)": "Engleski (automatski generisano)",
|
||||||
"Afrikaans": "Африканс",
|
"Afrikaans": "Afrikans",
|
||||||
"Albanian": "Албански",
|
"Albanian": "Albanski",
|
||||||
"Armenian": "Јерменски",
|
"Armenian": "Jermenski",
|
||||||
"Azerbaijani": "Азербејџански",
|
"Azerbaijani": "Azerbejdžanski",
|
||||||
"Basque": "Баскијски",
|
"Basque": "Baskijski",
|
||||||
"Bosnian": "Српски (Босна и Херцеговина)",
|
"Bosnian": "Bosanski",
|
||||||
"Bulgarian": "Бугарски",
|
"Bulgarian": "Bugarski",
|
||||||
"Burmese": "Бурмански",
|
"Burmese": "Burmanski",
|
||||||
"Catalan": "Каталонски",
|
"Catalan": "Katalonski",
|
||||||
"Cebuano": "Cebuano",
|
"Cebuano": "Sebuano",
|
||||||
"Chinese (Traditional)": "Кинески (Традиционални)",
|
"Chinese (Traditional)": "Kineski (Tradicionalni)",
|
||||||
"Corsican": "Корзикански",
|
"Corsican": "Korzikanski",
|
||||||
"Danish": "Дански",
|
"Danish": "Danski",
|
||||||
"Kannada": "Канада (Језик)",
|
"Kannada": "Kanada (Jezik)",
|
||||||
"Kazakh": "Казашки",
|
"Kazakh": "Kazaški",
|
||||||
"Russian": "Руски",
|
"Russian": "Ruski",
|
||||||
"Scottish Gaelic": "Шкотски Гелски",
|
"Scottish Gaelic": "Škotski Gelski",
|
||||||
"Sinhala": "Синхалешки",
|
"Sinhala": "Sinhaleški",
|
||||||
"Slovak": "Словачки",
|
"Slovak": "Slovački",
|
||||||
"Spanish": "Шпански",
|
"Spanish": "Španski",
|
||||||
"Spanish (Latin America)": "Шпански (Јужна Америка)",
|
"Spanish (Latin America)": "Španski (Južna Amerika)",
|
||||||
"Sundanese": "Сундски",
|
"Sundanese": "Sundski",
|
||||||
"Swedish": "Шведски",
|
"Swedish": "Švedski",
|
||||||
"Tajik": "Таџички",
|
"Tajik": "Tadžički",
|
||||||
"Telugu": "Телугу",
|
"Telugu": "Telugu",
|
||||||
"Turkish": "Турски",
|
"Turkish": "Turski",
|
||||||
"Ukrainian": "Украјински",
|
"Ukrainian": "Ukrajinski",
|
||||||
"Urdu": "Урду",
|
"Urdu": "Urdu",
|
||||||
"Uzbek": "Узбечки",
|
"Uzbek": "Uzbečki",
|
||||||
"Vietnamese": "Вијетнамски",
|
"Vietnamese": "Vijetnamski",
|
||||||
"`x` minutes": {
|
"`x` minutes": {
|
||||||
"": "`x` минута",
|
"": "`x` minuta",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` минут"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` minut"
|
||||||
},
|
},
|
||||||
"`x` seconds": {
|
"`x` seconds": {
|
||||||
"": "`x` секунди",
|
"": "`x` sekundi",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` секунда"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` sekunda"
|
||||||
},
|
},
|
||||||
"Rating: ": "Оцена/е: ",
|
"Rating: ": "Ocena/e: ",
|
||||||
"View as playlist": "Погледај као плеј листу",
|
"View as playlist": "Pogledaj kao plej listu",
|
||||||
"Default": "Подразумеван/о",
|
"Default": "Podrazumevan/o",
|
||||||
"Gaming": "Гејминг",
|
"Gaming": "Igrice",
|
||||||
"Movies": "Филмови",
|
"Movies": "Filmovi",
|
||||||
"%A %B %-d, %Y": "%A %B %-d, %Y",
|
"%A %B %-d, %Y": "%A %B %-d, %Y",
|
||||||
"(edited)": "(измењено)",
|
"(edited)": "(izmenjeno)",
|
||||||
"YouTube comment permalink": "YouTube коментар трајна веза",
|
"YouTube comment permalink": "YouTube komentar trajna veza",
|
||||||
"Audio mode": "Аудио мод",
|
"Audio mode": "Audio mod",
|
||||||
"Playlists": "Плеј листе",
|
"Playlists": "Plej liste",
|
||||||
"relevance": "Ревелантно",
|
"relevance": "Relevantnost",
|
||||||
"rating": "Оцене",
|
"rating": "Ocene",
|
||||||
"date": "Датум отпремања",
|
"date": "Datum otpremanja",
|
||||||
"views": "Број прегледа",
|
"views": "Broj pregleda",
|
||||||
"`x` marked it with a ❤": "`x` је означио/ла ово са ❤",
|
"`x` marked it with a ❤": "`x` je označio/la ovo sa ❤",
|
||||||
"duration": "Трајање",
|
"duration": "Trajanje",
|
||||||
"features": "Карактеристике",
|
"features": "Karakteristike",
|
||||||
"hour": "Последњи сат",
|
"hour": "Poslednji sat",
|
||||||
"week": "Ове недеље",
|
"week": "Ove sedmice",
|
||||||
"month": "Овај месец",
|
"month": "Ovaj mesec",
|
||||||
"year": "Ове године",
|
"year": "Ove godine",
|
||||||
"video": "Видео",
|
"video": "Video",
|
||||||
"playlist": "Плеј листа",
|
"playlist": "Plej lista",
|
||||||
"movie": "Филм",
|
"movie": "Film",
|
||||||
"long": "Дуг (> 20 минута)",
|
"long": "Dugo (> 20 minuta)",
|
||||||
"hd": "HD",
|
"hd": "HD",
|
||||||
"creative_commons": "Creative Commons (Лиценца)",
|
"creative_commons": "Creative Commons (Licenca)",
|
||||||
"3d": "3Д",
|
"3d": "3D",
|
||||||
"hdr": "Видео високе резолуције",
|
"hdr": "Video Visoke Rezolucije",
|
||||||
"filter": "Филтер",
|
"filter": "Filter",
|
||||||
"next_steps_error_message": "Можете урадити нешта од следећег: ",
|
"next_steps_error_message": "Nakon čega bi trebali probati: ",
|
||||||
"next_steps_error_message_go_to_youtube": "Иди на YouTube",
|
"next_steps_error_message_go_to_youtube": "Idi na YouTube",
|
||||||
"footer_documentation": "Документација",
|
"footer_documentation": "Dokumentacija",
|
||||||
"preferences_region_label": "Држава порекла садржаја: ",
|
"preferences_region_label": "Država porekla sadržaja: ",
|
||||||
"preferences_player_style_label": "Стил плејера: ",
|
"preferences_player_style_label": "Stil plejera: ",
|
||||||
"preferences_dark_mode_label": "Изглед/Тема: ",
|
"preferences_dark_mode_label": "Izgled/Tema: ",
|
||||||
"light": "светла",
|
"light": "svetlo",
|
||||||
"preferences_thin_mode_label": "Компактни режим: ",
|
"preferences_thin_mode_label": "Kompaktni režim: ",
|
||||||
"preferences_category_misc": "Остала подешавања",
|
"preferences_category_misc": "Ostala podešavanja",
|
||||||
"preferences_automatic_instance_redirect_label": "Аутоматско пребацивање на другу инстанцу у случају отказивања (пређи на redirect.invidious.io): ",
|
"preferences_automatic_instance_redirect_label": "Automatsko prebacivanje na drugu instancu u slučaju otkazivanja (preči će nazad na redirect.invidious.io): ",
|
||||||
"alphabetically - reverse": "по алфабету - обрнуто",
|
"alphabetically - reverse": "po alfabetu - obrnuto",
|
||||||
"Enable web notifications": "Омогући обавештења у веб претраживачу",
|
"Enable web notifications": "Omogući obaveštenja u veb pretraživaču",
|
||||||
"`x` is live": "`x` преноси уживо",
|
"`x` is live": "`x` prenosi uživo",
|
||||||
"Manage tokens": "Управљај токенима",
|
"Manage tokens": "Upravljaj žetonima",
|
||||||
"Watch history": "Историја гледања",
|
"Watch history": "Istorija gledanja",
|
||||||
"preferences_feed_menu_label": "Feed мени: ",
|
"preferences_feed_menu_label": "Dovodna stranica: ",
|
||||||
"preferences_show_nick_label": "Прикажи надимке на врху: ",
|
"preferences_show_nick_label": "Prikaži nadimke na vrhu: ",
|
||||||
"CAPTCHA enabled: ": "CAPTCHA омогућена: ",
|
"CAPTCHA enabled: ": "CAPTCHA omogućena: ",
|
||||||
"Registration enabled: ": "Регистрација омогућена: ",
|
"Registration enabled: ": "Registracija omogućena: ",
|
||||||
"Subscription manager": "Менаџер претплата",
|
"Subscription manager": "Upravljanje praćenjima",
|
||||||
"Wilson score: ": "Wilson скор: ",
|
"Wilson score: ": "Wilsonova ocena: ",
|
||||||
"Engagement: ": "Ангажовање: ",
|
"Engagement: ": "Angažovanje: ",
|
||||||
"Whitelisted regions: ": "Дозвољени региони: ",
|
"Whitelisted regions: ": "Dozvoljene oblasti: ",
|
||||||
"Shared `x`": "Подељено `x`",
|
"Shared `x`": "Podeljeno `x`",
|
||||||
"`x` views": {
|
"`x` views": {
|
||||||
"": "`x` прегледа",
|
"": "`x` pregleda",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` преглед"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` pregled"
|
||||||
},
|
},
|
||||||
"Premieres in `x`": "Премијера у `x`",
|
"Premieres in `x`": "Premera u `x`",
|
||||||
"Premieres `x`": "Премијере у `x`",
|
"Premieres `x`": "Premere u `x`",
|
||||||
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Хеј! Изгледа да сте онемогућили JavaScript. Кликните овде да видите коментаре, имајте на уму да ово може да потраје дуже док се не учитају.",
|
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Hej! Izgleda da ste onemogućili JavaScript. Kliknite ovde da vidite komentare, čuvajte na umu da ovo može da potraje duže dok se ne učitaju.",
|
||||||
"View `x` comments": {
|
"View `x` comments": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "Прикажи `x` коментар",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "Prikaži `x` komentar",
|
||||||
"": "Прикажи `x` коментара"
|
"": "Prikaži `x` komentara"
|
||||||
},
|
},
|
||||||
"View Reddit comments": "Прикажи Reddit коментаре",
|
"View Reddit comments": "Prikaži Reddit komentare",
|
||||||
"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.": "Neuspešna prijava, proverite da li ste upalili dvofaktornu autentikaciju (Autentikator ili SMS).",
|
||||||
"CAPTCHA is a required field": "CAPTCHA је обавезно поље",
|
"CAPTCHA is a required field": "CAPTCHA je obavezno polje",
|
||||||
"Croatian": "Хрватски",
|
"Croatian": "Hrvatski",
|
||||||
"Estonian": "Естонски",
|
"Estonian": "Estonski",
|
||||||
"Filipino": "Филипино",
|
"Filipino": "Filipino",
|
||||||
"French": "Француски",
|
"French": "Francuski",
|
||||||
"Galician": "Галицијски",
|
"Galician": "Galicijski",
|
||||||
"German": "Немачки",
|
"German": "Nemački",
|
||||||
"Greek": "Грчки",
|
"Greek": "Grčki",
|
||||||
"Hausa": "Хауса",
|
"Hausa": "Hausa",
|
||||||
"Italian": "Италијански",
|
"Italian": "Talijanski",
|
||||||
"Khmer": "Кмерски",
|
"Khmer": "Kmerski",
|
||||||
"Kurdish": "Курдски",
|
"Kurdish": "Kurdski",
|
||||||
"Kyrgyz": "Киргиски",
|
"Kyrgyz": "Kirgiski",
|
||||||
"Latvian": "Летонски",
|
"Latvian": "Letonski",
|
||||||
"Lithuanian": "Литвански",
|
"Lithuanian": "Litvanski",
|
||||||
"Macedonian": "Македонски",
|
"Macedonian": "Makedonski",
|
||||||
"Malagasy": "Малгашки",
|
"Malagasy": "Malgaški",
|
||||||
"Malay": "Малајски",
|
"Malay": "Malajski",
|
||||||
"Marathi": "Маратхи",
|
"Marathi": "Marathi",
|
||||||
"Mongolian": "Монголски",
|
"Mongolian": "Mongolski",
|
||||||
"Norwegian Bokmål": "Норвешки Бокмал",
|
"Norwegian Bokmål": "Norveški Bokmal",
|
||||||
"Nyanja": "Чева",
|
"Nyanja": "Čeva",
|
||||||
"Pashto": "Паштунски",
|
"Pashto": "Paštunski",
|
||||||
"Persian": "Персијски",
|
"Persian": "Persijski",
|
||||||
"Punjabi": "Пунџаби",
|
"Punjabi": "Pundžabi",
|
||||||
"Romanian": "Румунски",
|
"Romanian": "Rumunski",
|
||||||
"Welsh": "Велшки",
|
"Welsh": "Velški",
|
||||||
"Western Frisian": "Западнофризијски",
|
"Western Frisian": "Zapadnofrizijski",
|
||||||
"`x` years": {
|
"`x` years": {
|
||||||
"": "`x` година",
|
"": "`x` godina",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` година"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` godina"
|
||||||
},
|
},
|
||||||
"`x` weeks": {
|
"`x` weeks": {
|
||||||
"": "`x` недеља",
|
"": "`x` sedmica",
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` недеља"
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` sedmica"
|
||||||
},
|
},
|
||||||
"`x` days": {
|
"`x` days": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` дан",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` dan",
|
||||||
"": "`x` дана"
|
"": "`x` dana"
|
||||||
},
|
},
|
||||||
"`x` hours": {
|
"`x` hours": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` сат",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` sat",
|
||||||
"": "`x` сати"
|
"": "`x` sati"
|
||||||
},
|
},
|
||||||
"Fallback comments: ": "Коментари у случају отказивања: ",
|
"Fallback comments: ": "Komentari u slučaju otkazivanja: ",
|
||||||
"Popular": "Популарно",
|
"Popular": "Popularno",
|
||||||
"Search": "Претрага",
|
"Search": "Pretraga",
|
||||||
"About": "О програму",
|
"About": "O programu",
|
||||||
"footer_source_code": "Изворни Код",
|
"footer_source_code": "Izvorna Koda",
|
||||||
"footer_original_source_code": "Оригинални изворни код",
|
"footer_original_source_code": "Originalna Izvorna Koda",
|
||||||
"preferences_related_videos_label": "Прикажи сличне видео клипове: ",
|
"preferences_related_videos_label": "Prikaži slične video klipove: ",
|
||||||
"preferences_annotations_label": "Прикажи напомене подразумевано: ",
|
"preferences_annotations_label": "Prikaži napomene podrazumevano: ",
|
||||||
"preferences_extend_desc_label": "Аутоматски прикажи цео опис видеа: ",
|
"preferences_extend_desc_label": "Automatski prikaži ceo opis videa: ",
|
||||||
"preferences_vr_mode_label": "Интерактивни видео клипови у 360 степени: ",
|
"preferences_vr_mode_label": "Interaktivni video klipovi u 360 stepeni: ",
|
||||||
"preferences_category_visual": "Визуелне преференце",
|
"preferences_category_visual": "Vizuelne preference",
|
||||||
"preferences_captions_label": "Подразумевани титл: ",
|
"preferences_captions_label": "Podrazumevani titl: ",
|
||||||
"Music": "Музика",
|
"Music": "Muzika",
|
||||||
"content_type": "Тип",
|
"content_type": "Tip",
|
||||||
"Broken? Try another Invidious Instance": "Не функционише исправно? Пробајте другу Invidious инстанцу",
|
"Broken? Try another Invidious Instance": "Ne funkcioniše ispravno? Probajte drugu Invidious instancu",
|
||||||
"Tamil": "Тамилски",
|
"Tamil": "Tamilski",
|
||||||
"Save preferences": "Сачувај подешавања",
|
"Save preferences": "Sačuvaj podešavanja",
|
||||||
"Only show latest unwatched video from channel: ": "Прикажи само последње видео клипове који нису погледани са канала: ",
|
"Only show latest unwatched video from channel: ": "Prikaži samo poslednje video klipove koji nisu pogledani sa kanala: ",
|
||||||
"Xhosa": "Коса (Језик)",
|
"Xhosa": "Kosa (Jezik)",
|
||||||
"channel": "Канал",
|
"channel": "Kanal",
|
||||||
"Hungarian": "Мађарски",
|
"Hungarian": "Mađarski",
|
||||||
"Maori": "Маори (Језик)",
|
"Maori": "Maori (Jezik)",
|
||||||
"Manage subscriptions": "Управљај претплатама",
|
"Manage subscriptions": "Upravljaj zapisima",
|
||||||
"Hindi": "Хинди",
|
"Hindi": "Hindi",
|
||||||
"`x` ago": "пре `x`",
|
"`x` ago": "pre `x`",
|
||||||
"Import/export data": "Увези/Извези податке",
|
"Import/export data": "Uvezi/Izvezi podatke",
|
||||||
"`x` uploaded a video": "`x` је отпремио/ла видео клип",
|
"`x` uploaded a video": "`x` je otpremio/la video klip",
|
||||||
"View `x` replies": {
|
"View `x` replies": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "Погледај `x` одоговор",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "Prikaži `x` odgovor",
|
||||||
"": "Погледај `x` одоговора"
|
"": "Prikaži `x` odgovora"
|
||||||
},
|
},
|
||||||
"Delete account": "Обриши налог",
|
"Delete account": "Obriši nalog",
|
||||||
"preferences_default_home_label": "Подразумевана почетна страница: ",
|
"preferences_default_home_label": "Podrazumevana početna stranica: ",
|
||||||
"Serbian": "Српски",
|
"Serbian": "Srpski",
|
||||||
"License: ": "Лиценца: ",
|
"License: ": "Licenca: ",
|
||||||
"live": "Уживо",
|
"live": "Uživo",
|
||||||
"Report statistics: ": "Извештавај о статистици: ",
|
"Report statistics: ": "Izveštavaj o statistici: ",
|
||||||
"Only show latest video from channel: ": "Приказуј последње видео клипове само са канала: ",
|
"Only show latest video from channel: ": "Prikazuj poslednje video klipove samo sa kanala: ",
|
||||||
"channel name - reverse": "име канала - обрнуто",
|
"channel name - reverse": "ime kanala - obrnuto",
|
||||||
"Could not get channel info.": "Узимање података о каналу није успело.",
|
"Could not get channel info.": "Uzimanje podataka o kanalu nije uspelo.",
|
||||||
"View privacy policy.": "Погледај политику приватности.",
|
"View privacy policy.": "Pogledaj izveštaj o privatnosti.",
|
||||||
"Change password": "Промени лозинку",
|
"Change password": "Promeni lozinku",
|
||||||
"Malayalam": "Малајалам",
|
"Malayalam": "Malajalam",
|
||||||
"View more comments on Reddit": "Прикажи више коментара на Reddit-у",
|
"View more comments on Reddit": "Prikaži više komentara na Reddit-u",
|
||||||
"Portuguese": "Португалски",
|
"Portuguese": "Portugalski",
|
||||||
"View YouTube comments": "Прикажи YouTube коментаре",
|
"View YouTube comments": "Prikaži YouTube komentare",
|
||||||
"published - reverse": "објављено - обрнуто",
|
"published - reverse": "objavljeno - obrnuto",
|
||||||
"Dutch": "Белгијски",
|
"Dutch": "Holandski",
|
||||||
"preferences_volume_label": "Јачина звука: ",
|
"preferences_volume_label": "Jačina zvuka: ",
|
||||||
"preferences_locale_label": "Језик: ",
|
"preferences_locale_label": "Jezik: ",
|
||||||
"`x` subscriptions": {
|
"`x` subscriptions": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` пратиоц",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` praćenje",
|
||||||
"": "`x` пратилаца"
|
"": "`x` praćenja"
|
||||||
},
|
},
|
||||||
"adminprefs_modified_source_code_url_label": "URL веза до репозиторијума са измењеним изворним кодом",
|
"adminprefs_modified_source_code_url_label": "URL veza do skladišta sa Izmenjenom Izvornom Kodom",
|
||||||
"Community": "Заједница",
|
"Community": "Zajednica",
|
||||||
"Video mode": "Видео мод",
|
"Video mode": "Video mod",
|
||||||
"Fallback captions: ": "Титл у случају да главни није доступан: ",
|
"Fallback captions: ": "Titl u slučaju da glavni nije dostupan: ",
|
||||||
"Private": "Приватно",
|
"Private": "Privatno",
|
||||||
"alphabetically": "по алфабету",
|
"alphabetically": "po alfabetu",
|
||||||
"No such user": "Непостојећи корисник",
|
"No such user": "Nepostojeći korisnik",
|
||||||
"Subscriptions": "Праћења",
|
"Subscriptions": "Praćenja",
|
||||||
"today": "Данас",
|
"today": "Danas",
|
||||||
"Finnish": "Фински",
|
"Finnish": "Finski",
|
||||||
"Lao": "Лаоски",
|
"Lao": "Laoski",
|
||||||
"Login enabled: ": "Пријава омогућена: ",
|
"Login enabled: ": "Prijava omogućena: ",
|
||||||
"Shona": "Шона",
|
"Shona": "Šona",
|
||||||
"location": "Локација",
|
"location": "Lokacija",
|
||||||
"Load more": "Учитај више",
|
"Load more": "Učitaj više",
|
||||||
"Released under the AGPLv3 on Github.": "Избачено под лиценцом AGPLv3 на Github-у.",
|
"Released under the AGPLv3 on Github.": "Izbačeno pod licencom AGPLv3 na Github-u.",
|
||||||
"Slovenian": "Словеначки",
|
"Slovenian": "Slovenački",
|
||||||
"View JavaScript license information.": "Погледај информације лиценце везане за JavaScript.",
|
"View JavaScript license information.": "Pogledaj informacije licence vezane za JavaScript.",
|
||||||
"Chinese (Simplified)": "Кинески (Поједностављени)",
|
"Chinese (Simplified)": "Kineski (Pojednostavljeni)",
|
||||||
"preferences_comments_label": "Подразумевани коментари: ",
|
"preferences_comments_label": "Podrazumevani komentari: ",
|
||||||
"Incorrect password": "Нетачна лозинка",
|
"Incorrect password": "Netačna lozinka",
|
||||||
"Show replies": "Прикажи одговоре",
|
"Show replies": "Prikaži odgovore",
|
||||||
"Invidious Private Feed for `x`": "Invidious приватни Feed за `x`",
|
"Invidious Private Feed for `x`": "Invidious Privatni Dovod za `x`",
|
||||||
"Watch on YouTube": "Гледај на YouTube-у",
|
"Watch on YouTube": "Gledaj na YouTube-u",
|
||||||
"Wrong answer": "Погрешан одговор",
|
"Wrong answer": "Pogrešan odgovor",
|
||||||
"preferences_quality_label": "Преферирани видео квалитет: ",
|
"preferences_quality_label": "Preferirani video kvalitet: ",
|
||||||
"Hide replies": "Сакриј одговоре",
|
"Hide replies": "Sakrij odgovore",
|
||||||
"Invalid TFA code": "Неважећи TFA код",
|
"Invalid TFA code": "Nevažeća TFA koda",
|
||||||
"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.": "Neuspešna prijava! Ovo se možda dešava jer dvofaktorna autentikacija nije omogućena na vašem nalogu.",
|
||||||
"Erroneous CAPTCHA": "Погрешна CAPTCHA",
|
"Erroneous CAPTCHA": "Pogrešna CAPTCHA",
|
||||||
"Erroneous token": "Погрешан токен",
|
"Erroneous token": "Pogrešan žeton",
|
||||||
"Czech": "Чешки",
|
"Czech": "Češki",
|
||||||
"Latin": "Латински",
|
"Latin": "Latinski",
|
||||||
"Videos": "Видео клипови",
|
"Videos": "Video klipovi",
|
||||||
"4k": "4К",
|
"4k": "4К",
|
||||||
"footer_donate_page": "Донирај",
|
"footer_donate_page": "Doniraj",
|
||||||
"English": "Енглески",
|
"English": "Engleski",
|
||||||
"Arabic": "Арапски",
|
"Arabic": "Arapski",
|
||||||
"Unlisted": "Ненаведено",
|
"Unlisted": "Nenavedeno",
|
||||||
"Hidden field \"challenge\" is a required field": "Сакривено \"challenge\" поље је обавезно",
|
"Hidden field \"challenge\" is a required field": "Sakriveno \"challenge\" polje je obavezno",
|
||||||
"Hidden field \"token\" is a required field": "Сакривено \"token\" поље је обавезно",
|
"Hidden field \"token\" is a required field": "Sakriveno \"token\" polje je obavezno",
|
||||||
"Georgian": "Грузијски",
|
"Georgian": "Gruzijski",
|
||||||
"Hawaiian": "Хавајски",
|
"Hawaiian": "Havajski",
|
||||||
"Hebrew": "Хебрејски",
|
"Hebrew": "Hebrejski",
|
||||||
"Icelandic": "Исландски",
|
"Icelandic": "Islandski",
|
||||||
"Igbo": "Игбо",
|
"Igbo": "Igbo",
|
||||||
"Japanese": "Јапански",
|
"Japanese": "Japanski",
|
||||||
"Javanese": "Јавански",
|
"Javanese": "Javanski",
|
||||||
"Sindhi": "Синди",
|
"Sindhi": "Sindi",
|
||||||
"Swahili": "Свахили",
|
"Swahili": "Svahili",
|
||||||
"Yiddish": "Јидиш",
|
"Yiddish": "Jidiš",
|
||||||
"Zulu": "Зулу",
|
"Zulu": "Zulu",
|
||||||
"subtitles": "Титл",
|
"subtitles": "Titl/Prevod",
|
||||||
"Password cannot be longer than 55 characters": "Лозинка не може бити дужа од 55 карактера",
|
"Password cannot be longer than 55 characters": "Lozinka ne može biti duža od 55 karaktera",
|
||||||
"This channel does not exist.": "Овај канал не постоји.",
|
"This channel does not exist.": "Ovaj kanal ne postoji.",
|
||||||
"Belarusian": "Белоруски",
|
"Belarusian": "Beloruski",
|
||||||
"Gujarati": "Гуџарати",
|
"Gujarati": "Gudžarati",
|
||||||
"Haitian Creole": "Хаићански Креолски",
|
"Haitian Creole": "Haićanski Kreolski",
|
||||||
"Somali": "Сомалијски",
|
"Somali": "Somalijski",
|
||||||
"Top": "Врх",
|
"Top": "Vrh",
|
||||||
"footer_modfied_source_code": "Измењени изворни код",
|
"footer_modfied_source_code": "Izmenjena Izvorna Koda",
|
||||||
"preferences_category_subscription": "Подешавања праћења",
|
"preferences_category_subscription": "Podešavanja praćenja",
|
||||||
"preferences_annotations_subscribed_label": "Подразумевано приказати напомене за канале које пратите? ",
|
"preferences_annotations_subscribed_label": "Podrazumevano prikazati napomene za kanale koje pratite? ",
|
||||||
"preferences_max_results_label": "Број видео клипова приказаних у листи (feed-у): ",
|
"preferences_max_results_label": "Broj video klipova prikazanih u dovodnoj listi: ",
|
||||||
"preferences_sort_label": "Сортирај видео клипове по: ",
|
"preferences_sort_label": "Sortiraj video klipove po: ",
|
||||||
"preferences_unseen_only_label": "Прикажи само видео клипове који нису погледани: ",
|
"preferences_unseen_only_label": "Prikaži samo video klipove koji nisu pogledani: ",
|
||||||
"preferences_notifications_only_label": "Прикажи само обавештења (ако их уопште има): ",
|
"preferences_notifications_only_label": "Prikaži samo obaveštenja (ako ih uopšte ima): ",
|
||||||
"preferences_category_data": "Подешавања података",
|
"preferences_category_data": "Podešavanja podataka",
|
||||||
"Clear watch history": "Обриши историју гледања",
|
"Clear watch history": "Obriši istoriju gledanja",
|
||||||
"preferences_category_admin": "Администраторска подешавања",
|
"preferences_category_admin": "Administratorska podešavanja",
|
||||||
"published": "објављено",
|
"published": "objavljeno",
|
||||||
"sort": "Сортирај према",
|
"sort": "Poredaj prema",
|
||||||
"show": "Шоу",
|
"show": "Emisija",
|
||||||
"short": "Кратак (< 4 минута)",
|
"short": "Kratko (< 4 minute)",
|
||||||
"Current version: ": "Тренутна верзија: ",
|
"Current version: ": "Trenutna verzija: ",
|
||||||
"Top enabled: ": "Врх омогућен: ",
|
"Top enabled: ": "Vrh omogućen: ",
|
||||||
"Public": "Јавно",
|
"Public": "Javno",
|
||||||
"Delete playlist": "Обриши плеј листу",
|
"Delete playlist": "Obriši plej listu",
|
||||||
"Title": "Наслов",
|
"Title": "Naslov",
|
||||||
"Show annotations": "Прикажи напомене",
|
"Show annotations": "Prikaži napomene",
|
||||||
"Password cannot be empty": "Лозинка не може бити празна",
|
"Password cannot be empty": "Lozinka ne može biti prazna",
|
||||||
"Deleted or invalid channel": "Обрисан или непостојећи канал",
|
"Deleted or invalid channel": "Obrisan ili nepostojeći kanal",
|
||||||
"Esperanto": "Есперанто",
|
"Esperanto": "Esperanto",
|
||||||
"Hmong": "Хмонг",
|
"Hmong": "Hmong",
|
||||||
"Luxembourgish": "Луксембуршки",
|
"Luxembourgish": "Luksemburški",
|
||||||
"Nepali": "Непалски",
|
"Nepali": "Nepalski",
|
||||||
"Samoan": "Самоански",
|
"Samoan": "Samoanski",
|
||||||
"News": "Вести",
|
"News": "Vesti",
|
||||||
"permalink": "трајна веза",
|
"permalink": "trajna veza",
|
||||||
"Password is a required field": "Лозинка је обавезно поље",
|
"Password is a required field": "Lozinka je obavezno polje",
|
||||||
"Amharic": "Амхарски",
|
"Amharic": "Amharski",
|
||||||
"Indonesian": "Индонежански",
|
"Indonesian": "Indonežanski",
|
||||||
"Irish": "Ирски",
|
"Irish": "Irski",
|
||||||
"Korean": "Корејски",
|
"Korean": "Korejski",
|
||||||
"Southern Sotho": "Сото",
|
"Southern Sotho": "Južni Soto",
|
||||||
"Thai": "Тајски",
|
"Thai": "Tajski",
|
||||||
"`x` months": {
|
"`x` months": {
|
||||||
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` месец",
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` mesec",
|
||||||
"": "`x` месеци"
|
"": "`x` meseci"
|
||||||
},
|
},
|
||||||
"preferences_speed_label": "Подразумевана брзина: ",
|
"preferences_speed_label": "Podrazumevana brzina: ",
|
||||||
"Dark mode: ": "Тамни режим: ",
|
"Dark mode: ": "Tamni režim: ",
|
||||||
"dark": "тамна",
|
"dark": "tamno",
|
||||||
"Redirect homepage to feed: ": "Пребаци са почетне странице на листу (feed): ",
|
"Redirect homepage to feed: ": "Prebaci sa početne stranice na dovodnu listu: ",
|
||||||
"channel name": "име канала",
|
"channel name": "ime kanala",
|
||||||
"View all playlists": "Прегледај све плеј листе",
|
"View all playlists": "Pregledaj sve plej liste",
|
||||||
"Show more": "Прикажи више",
|
"Show more": "Prikaži više",
|
||||||
"Genre: ": "Жанр: ",
|
"Genre: ": "Žanr: ",
|
||||||
"Family friendly? ": "Погодно за породицу? ",
|
"Family friendly? ": "Pogodno za porodicu? ",
|
||||||
"next_steps_error_message_refresh": "Освежи страницу",
|
"next_steps_error_message_refresh": "Osveži stranicu",
|
||||||
"youtube": "YouTube",
|
"youtube": "YouTube",
|
||||||
"reddit": "Reddit",
|
"reddit": "Reddit",
|
||||||
"unsubscribe": "прекини са праћењем",
|
"unsubscribe": "prekini sa praćenjem",
|
||||||
"Blacklisted regions: ": "Блокирани региони: ",
|
"Blacklisted regions: ": "Zabranjene oblasti: ",
|
||||||
"Polish": "Пољски",
|
"Polish": "Poljski",
|
||||||
"Yoruba": "Јоруба"
|
"Yoruba": "Joruba"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,170 +1,437 @@
|
||||||
{
|
{
|
||||||
"`x` subscribers": {
|
"`x` subscribers": {
|
||||||
"": "`x` пратилац"
|
"": "`x` пратилацa",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` пратилац"
|
||||||
},
|
},
|
||||||
"`x` videos": {
|
"`x` videos": {
|
||||||
"": "`x` видеа"
|
"": "`x` видео записа",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` видео запис"
|
||||||
},
|
},
|
||||||
"`x` playlists": {
|
"`x` playlists": {
|
||||||
"": "`x` плејлиста/е"
|
"": "`x` списака извођења",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` списак извођења"
|
||||||
},
|
},
|
||||||
"LIVE": "УЖИВО",
|
"LIVE": "УЖИВО",
|
||||||
"Shared `x` ago": "Објављено пре `x`",
|
"Shared `x` ago": "Подељено пре `x`",
|
||||||
"Unsubscribe": "Прекините праћење",
|
"Unsubscribe": "Прекини праћење",
|
||||||
"Subscribe": "Пратите",
|
"Subscribe": "Прати",
|
||||||
"View channel on YouTube": "Погледајте канал на YouTube-у",
|
"View channel on YouTube": "Погледај канал на YouTube-у",
|
||||||
"View playlist on YouTube": "Погледајте плејлисту на YouTube-у",
|
"View playlist on YouTube": "Погледај списак извођења на YоуТубе-у",
|
||||||
"newest": "најновије",
|
"newest": "најновије",
|
||||||
"oldest": "најстарије",
|
"oldest": "најстарије",
|
||||||
"popular": "популарно",
|
"popular": "популарно",
|
||||||
"last": "последње",
|
"last": "последње",
|
||||||
"Next page": "Следећа страна",
|
"Next page": "Следећа страна",
|
||||||
"Previous page": "Претходна страна",
|
"Previous page": "Претходна страна",
|
||||||
"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 налоге",
|
"Cannot change password for Google accounts": "Није могуће променити лозинку за Google налоге",
|
||||||
"Authorize token?": "Овластите токен?",
|
"Authorize token?": "Овласти жетон?",
|
||||||
"Authorize token for `x`?": "Овластите токен за `x`?",
|
"Authorize token for `x`?": "Овласти жетон за `x`?",
|
||||||
"Yes": "Да",
|
"Yes": "Да",
|
||||||
"No": "Не",
|
"No": "Не",
|
||||||
"Import and Export Data": "Увоз и извоз података",
|
"Import and Export Data": "Увоз и извоз података",
|
||||||
"Import": "Увезите",
|
"Import": "Увези",
|
||||||
"Import Invidious data": "Увезите Invidious податке",
|
"Import Invidious data": "Увези податке са Individious-а",
|
||||||
"Import YouTube subscriptions": "Увезите праћења са YouTube-а",
|
"Import YouTube subscriptions": "Увези праћења са YouTube-а",
|
||||||
"Import FreeTube subscriptions (.db)": "Увезите праћења са FreeTube-а (.db)",
|
"Import FreeTube subscriptions (.db)": "Увези праћења са FreeTube-а (.db)",
|
||||||
"Import NewPipe subscriptions (.json)": "Увезите праћења са NewPipe-а (.json)",
|
"Import NewPipe subscriptions (.json)": "Увези праћења са NewPipe-а (.json)",
|
||||||
"Import NewPipe data (.zip)": "Увезите NewPipe податке (.zip)",
|
"Import NewPipe data (.zip)": "Увези податке са NewPipe-a (.zip)",
|
||||||
"Export": "Извезите",
|
"Export": "Извези",
|
||||||
"Export subscriptions as OPML": "Извезите праћења у OPML формату",
|
"Export subscriptions as OPML": "Извези праћења као ОПМЛ датотеку",
|
||||||
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Извезите праћења у OPML формату (за NewPipe и FreeTube )",
|
"Export subscriptions as OPML (for NewPipe & FreeTube)": "Извези праћења као ОПМЛ датотеку (за NewPipe и FreeTube)",
|
||||||
"Export data as JSON": "Изветизе податке у JSON формату",
|
"Export data as JSON": "Извези податке као JSON датотеку",
|
||||||
"Delete account?": "Избришите налог?",
|
"Delete account?": "Избришите налог?",
|
||||||
"History": "Историја",
|
"History": "Историја",
|
||||||
"An alternative front-end to YouTube": "Алтернативни фронтенд за YouTube",
|
"An alternative front-end to YouTube": "Заменски кориснички слој за YouTube",
|
||||||
"JavaScript license information": "Извештај о JavaScript лиценци",
|
"JavaScript license information": "Извештај о JavaScript одобрењу",
|
||||||
"source": "извор",
|
"source": "извор",
|
||||||
"Log in": "Пријавите се",
|
"Log in": "Пријави се",
|
||||||
"Log in/register": "Пријавите се/направите налог",
|
"Log in/register": "Пријави се/Отворите налог",
|
||||||
"Log in with Google": "Пријавите се помоћу Google-а",
|
"Log in with Google": "Пријави се помоћу Google-а",
|
||||||
"User ID": "ИД корисника",
|
"User ID": "Кориснички ИД",
|
||||||
"Password": "Лозинка",
|
"Password": "Лозинка",
|
||||||
"Time (h:mm:ss):": "Колико је сати? (ч:мм:сс):",
|
"Time (h:mm:ss):": "Време (ч:мм:сс):",
|
||||||
"Text CAPTCHA": "Текстуална CAPTCHA",
|
"Text CAPTCHA": "Знаковни ЦАПТЧА",
|
||||||
"Image CAPTCHA": "Сликовна CAPTCHA",
|
"Image CAPTCHA": "Сликовни CAPTCHA",
|
||||||
"Sign In": "Пријавите се",
|
"Sign In": "Пријава",
|
||||||
"Register": "Направите налог",
|
"Register": "Отвори налог",
|
||||||
"E-mail": "Е-пошта",
|
"E-mail": "Е-пошта",
|
||||||
"Google verification code": "Google верификациони кôд",
|
"Google verification code": "Google-ова оверна кода",
|
||||||
"Preferences": "Подешавања",
|
"Preferences": "Подешавања",
|
||||||
"preferences_category_player": "Подешавања видео плејера",
|
"preferences_category_player": "Подешавања репродуктора",
|
||||||
"preferences_video_loop_label": "Увек понављај: ",
|
"preferences_video_loop_label": "Увек понављај: ",
|
||||||
"preferences_autoplay_label": "Аутоматско пуштање: ",
|
"preferences_autoplay_label": "Самопуштање: ",
|
||||||
"preferences_continue_label": "Увек пуштај следеће: ",
|
"preferences_continue_label": "Увек подразумевано пуштај следеће: ",
|
||||||
"preferences_continue_autoplay_label": "Аутоматско пуштање следећег видеа: ",
|
"preferences_continue_autoplay_label": "Самопуштање следећег видео записа: ",
|
||||||
"preferences_listen_label": "Режим слушања као подразумевано: ",
|
"preferences_listen_label": "Увек подразумевано укључен само звук: ",
|
||||||
"preferences_local_label": "Пуштање видеа кроз прокси сервер: ",
|
"preferences_local_label": "Приказ видео записа преко посредника: ",
|
||||||
"preferences_speed_label": "Подразумевана брзина репродукције: ",
|
"preferences_speed_label": "Подразумевана брзина: ",
|
||||||
"preferences_quality_label": "Претпостављени квалитет видеа: ",
|
"preferences_quality_label": "Преферирани видео квалитет: ",
|
||||||
"preferences_volume_label": "Јачина звука: ",
|
"preferences_volume_label": "Јачина звука: ",
|
||||||
"preferences_comments_label": "Подразумевани коментари: ",
|
"preferences_comments_label": "Подразумевани коментари: ",
|
||||||
"youtube": "са YouTube-а",
|
"youtube": "YouTube",
|
||||||
"reddit": "са редита",
|
"reddit": "Reddit",
|
||||||
"preferences_captions_label": "Подразумевани титлови: ",
|
"preferences_captions_label": "Подразумевани титл: ",
|
||||||
"Fallback captions: ": "Алтернативни титлови: ",
|
"Fallback captions: ": "Титл у случају да главни није доступан: ",
|
||||||
"preferences_related_videos_label": "Прикажи сличне видее: ",
|
"preferences_related_videos_label": "Прикажи сличне видео клипове: ",
|
||||||
"preferences_annotations_label": "Увек приказуј анотације: ",
|
"preferences_annotations_label": "Прикажи напомене подразумевано: ",
|
||||||
"preferences_category_visual": "Подешавања изгледа",
|
"preferences_category_visual": "Визуелне преференце",
|
||||||
"preferences_player_style_label": "Стил плејера: ",
|
"preferences_player_style_label": "Стил плејера: ",
|
||||||
"Dark mode: ": "Тамни режим: ",
|
"Dark mode: ": "Тамни режим: ",
|
||||||
"preferences_dark_mode_label": "Тема: ",
|
"preferences_dark_mode_label": "Изглед/Тема: ",
|
||||||
"dark": "тамна",
|
"dark": "тамно",
|
||||||
"light": "светла",
|
"light": "светло",
|
||||||
"preferences_thin_mode_label": "Узани режим: ",
|
"preferences_thin_mode_label": "Компактни режим: ",
|
||||||
"preferences_category_subscription": "Подешавања о праћењима",
|
"preferences_category_subscription": "Подешавања праћења",
|
||||||
"preferences_annotations_subscribed_label": "Увек приказуј анотације за канале које пратим: ",
|
"preferences_annotations_subscribed_label": "Подразумевано приказати напомене за канале које пратите? ",
|
||||||
"Redirect homepage to feed: ": "Прикажи праћења као почетну страницу: ",
|
"Redirect homepage to feed: ": "Пребаци са почетне странице на доводну листу: ",
|
||||||
"preferences_max_results_label": "Количина приказаних видеа на доводу: ",
|
"preferences_max_results_label": "Број видео клипова приказаних у доводној листи: ",
|
||||||
"preferences_sort_label": "Сортирај према: ",
|
"preferences_sort_label": "Сортирај видео клипове по: ",
|
||||||
"published": "датуму објављивања",
|
"published": "објављено",
|
||||||
"published - reverse": "датуму објављивања - обрнуто",
|
"published - reverse": "објављено - обрнуто",
|
||||||
"alphabetically": "алфабету",
|
"alphabetically": "по алфабету",
|
||||||
"alphabetically - reverse": "алфабету - обрнуто",
|
"alphabetically - reverse": "по алфабету - обрнуто",
|
||||||
"channel name": "називу канала",
|
"channel name": "име канала",
|
||||||
"channel name - reverse": "називу канала - обрнуто",
|
"channel name - reverse": "име канала - обрнуто",
|
||||||
"Only show latest video from channel: ": "Прикажи само најновији видео са канала: ",
|
"Only show latest video from channel: ": "Приказуј последње видео клипове само са канала: ",
|
||||||
"Only show latest unwatched video from channel: ": "Прикажи само најновији негледани видео са канала: ",
|
"Only show latest unwatched video from channel: ": "Прикажи само последње видео клипове који нису погледани са канала: ",
|
||||||
"preferences_unseen_only_label": "Прикажи само негледано: ",
|
"preferences_unseen_only_label": "Прикажи само видео клипове који нису погледани: ",
|
||||||
"preferences_notifications_only_label": "Прикажи само обавештења (ако их има): ",
|
"preferences_notifications_only_label": "Прикажи само обавештења (ако их уопште има): ",
|
||||||
"Enable web notifications": "Укључи обавештења преко претраживача",
|
"Enable web notifications": "Омогући обавештења у веб претраживачу",
|
||||||
"`x` uploaded a video": "`x`је објавио/ла видео",
|
"`x` uploaded a video": "`x` је отпремио/ла видео клип",
|
||||||
"`x` is live": "`x` емитује уживо",
|
"`x` is live": "`x` преноси уживо",
|
||||||
"preferences_category_data": "Подешавања о подацима",
|
"preferences_category_data": "Подешавања података",
|
||||||
"Clear watch history": "Обришите историју прегледања",
|
"Clear watch history": "Обриши историју гледања",
|
||||||
"Import/export data": "Увезите или извезите податке",
|
"Import/export data": "Увези/Извези податке",
|
||||||
"Change password": "Промените лозинку",
|
"Change password": "Промени лозинку",
|
||||||
"Manage subscriptions": "Управљајте праћењима",
|
"Manage subscriptions": "Управљај записима",
|
||||||
"Manage tokens": "Управљајте токенима",
|
"Manage tokens": "Управљај жетонима",
|
||||||
"Watch history": "Историја прегледања",
|
"Watch history": "Историја гледања",
|
||||||
"Delete account": "Избришите налог",
|
"Delete account": "Обриши налог",
|
||||||
"preferences_category_admin": "Подешавања администратора",
|
"preferences_category_admin": "Администраторска подешавања",
|
||||||
"preferences_default_home_label": "Подразумевана главна страница: ",
|
"preferences_default_home_label": "Подразумевана почетна страница: ",
|
||||||
"preferences_feed_menu_label": "Мени довода: ",
|
"preferences_feed_menu_label": "Доводна страница: ",
|
||||||
"CAPTCHA enabled: ": "CAPTCHA укључена?: ",
|
"CAPTCHA enabled: ": "CAPTCHA омогућена: ",
|
||||||
"Login enabled: ": "Пријава укључена?: ",
|
"Login enabled: ": "Пријава омогућена: ",
|
||||||
"Registration enabled: ": "Регистрација укључена?: ",
|
"Registration enabled: ": "Регистрација омогућена: ",
|
||||||
"Save preferences": "Сачувај подешавања",
|
"Save preferences": "Сачувај подешавања",
|
||||||
"Subscription manager": "Управљање праћењима",
|
"Subscription manager": "Управљање праћењима",
|
||||||
"Token manager": "Управљање токенима",
|
"Token manager": "Управљање жетонима",
|
||||||
"Token": "Токен",
|
"Token": "Жетон",
|
||||||
"`x` subscriptions": {
|
"`x` subscriptions": {
|
||||||
"": "`x`праћења"
|
"": "`x` праћења",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` праћење"
|
||||||
},
|
},
|
||||||
"`x` tokens": {
|
"`x` tokens": {
|
||||||
"": "`x`токена"
|
"": "`x` жетона",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` жетон"
|
||||||
},
|
},
|
||||||
"Import/export": "Увези/извези",
|
"Import/export": "Увези/Извези",
|
||||||
"unsubscribe": "укини праћење",
|
"unsubscribe": "прекини са праћењем",
|
||||||
"revoke": "опозови",
|
"revoke": "опозови",
|
||||||
"Subscriptions": "Праћења",
|
"Subscriptions": "Праћења",
|
||||||
"`x` unseen notifications": {
|
"`x` unseen notifications": {
|
||||||
"": "`x` непрочитаних обавештења"
|
"": "`x` непрочитаних обавештења",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` непрегледано обавештење"
|
||||||
},
|
},
|
||||||
"search": "претрага",
|
"search": "претрага",
|
||||||
"Log out": "Одјавите се",
|
"Log out": "Одјава",
|
||||||
"Source available here.": "Изворни код доступан овде.",
|
"Source available here.": "Изворна кода је овде доступна.",
|
||||||
"View JavaScript license information.": "Прикажи информације о JavaScript лиценци.",
|
"View JavaScript license information.": "Погледај информације лиценце везане за JavaScript.",
|
||||||
"View privacy policy.": "Прикажи извештај о приватности.",
|
"View privacy policy.": "Погледај извештај о приватности.",
|
||||||
"Trending": "У тренду",
|
"Trending": "У тренду",
|
||||||
"Public": "Јавно",
|
"Public": "Јавно",
|
||||||
"Unlisted": "По позиву",
|
"Unlisted": "Ненаведено",
|
||||||
"Private": "Приватно",
|
"Private": "Приватно",
|
||||||
"View all playlists": "Прикажи све плејлисте",
|
"View all playlists": "Прегледај све плеј листе",
|
||||||
"Updated `x` ago": "Ажурирано пре `x`",
|
"Updated `x` ago": "Ажурирано пре `x`",
|
||||||
"Delete playlist `x`?": "Избриши плејлисту `x`?",
|
"Delete playlist `x`?": "Обриши плеј листу `x`?",
|
||||||
"Delete playlist": "Избриши плејлисту",
|
"Delete playlist": "Обриши плеј листу",
|
||||||
"Create playlist": "Направи плејлисту",
|
"Create playlist": "Направи плеј листу",
|
||||||
"Title": "Наслов",
|
"Title": "Наслов",
|
||||||
"Playlist privacy": "Видљивост плејлисте",
|
"Playlist privacy": "Подешавања приватности плеј листе",
|
||||||
"Editing playlist `x`": "Уређујете плејлисту `x`",
|
"Editing playlist `x`": "Измена плеј листе `x`",
|
||||||
"Watch on YouTube": "Гледајте на YouTube-у",
|
"Watch on YouTube": "Гледај на YouTube-у",
|
||||||
"Hide annotations": "Сакриј анотације",
|
"Hide annotations": "Сакриј напомене",
|
||||||
"Show annotations": "Прикажи анотације",
|
"Show annotations": "Прикажи напомене",
|
||||||
"Genre: ": "Жанр: ",
|
"Genre: ": "Жанр: ",
|
||||||
"License: ": "Лиценца: ",
|
"License: ": "Лиценца: ",
|
||||||
"Engagement: ": "Ангажовање: ",
|
"Engagement: ": "Ангажовање: ",
|
||||||
"Whitelisted regions: ": "Дозвољене области: ",
|
"Whitelisted regions: ": "Дозвољене области: ",
|
||||||
"Blacklisted regions: ": "Забрањене области: ",
|
"Blacklisted regions: ": "Забрањене области: ",
|
||||||
"`x` views": {
|
"`x` views": {
|
||||||
"": "`x` прегледа"
|
"": "`x` прегледа",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` преглед"
|
||||||
},
|
},
|
||||||
"Premieres in `x`": "Емитује се уживо за `x`",
|
"Premieres in `x`": "Премера у `x`",
|
||||||
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Здраво! Изгледа да је искључен JavaScript. Кликните овде да бисте приказали коментаре. Требаће мало дуже да се учитају.",
|
"Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Хеј! Изгледа да сте онемогућили JavaScript. Кликните овде да видите коментаре, чувајте на уму да ово може да потраје дуже док се не учитају.",
|
||||||
"View YouTube comments": "Прикажи коментаре са YouTube-а",
|
"View YouTube comments": "Прикажи YouTube коментаре",
|
||||||
"View more comments on Reddit": "Прикажи још коментара на Reddit-у",
|
"View more comments on Reddit": "Прикажи више коментара на Reddit-у",
|
||||||
"View Reddit comments": "Прикажи коментаре са Reddit-а",
|
"View Reddit comments": "Прикажи Reddit коментаре",
|
||||||
"Hide replies": "Сакриј одговоре",
|
"Hide replies": "Сакриј одговоре",
|
||||||
"Show replies": "Прикажи одговоре",
|
"Show replies": "Прикажи одговоре",
|
||||||
"Incorrect password": "Неисправна лозинка",
|
"Incorrect password": "Нетачна лозинка",
|
||||||
"Current version: ": "Тренутна верзија: "
|
"Current version: ": "Тренутна верзија: ",
|
||||||
|
"Wilson score: ": "Wилсонова оцена: ",
|
||||||
|
"Burmese": "Бурмански",
|
||||||
|
"preferences_quality_dash_label": "Преферирани квалитет DASH видео формата: ",
|
||||||
|
"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 је обавезно поље",
|
||||||
|
"No such user": "Непостојећи корисник",
|
||||||
|
"Chinese (Traditional)": "Кинески (Традиционални)",
|
||||||
|
"adminprefs_modified_source_code_url_label": "УРЛ веза до складишта са Измењеном Изворном Кодом",
|
||||||
|
"`x` hours": {
|
||||||
|
"": "`x` сати",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` сат"
|
||||||
|
},
|
||||||
|
"Lao": "Лаоски",
|
||||||
|
"Czech": "Чешки",
|
||||||
|
"Kannada": "Канада (Језик)",
|
||||||
|
"Polish": "Пољски",
|
||||||
|
"Cebuano": "Себуано",
|
||||||
|
"preferences_show_nick_label": "Прикажи надимке на врху: ",
|
||||||
|
"Report statistics: ": "Извештавај о статистици: ",
|
||||||
|
"Show more": "Прикажи више",
|
||||||
|
"Login failed. This may be because two-factor authentication is not turned on for your account.": "Неуспешна пријава! Ово се можда дешава јер двофакторна аутентикација није омогућена на vашем налогу.",
|
||||||
|
"Wrong answer": "Погрешан одговор",
|
||||||
|
"Hidden field \"token\" is a required field": "Сакривено \"token\" поље је обавезно",
|
||||||
|
"English": "Енглески",
|
||||||
|
"Albanian": "Албански",
|
||||||
|
"Amharic": "Амхарски",
|
||||||
|
"Azerbaijani": "Азербејџански",
|
||||||
|
"Basque": "Баскијски",
|
||||||
|
"Belarusian": "Белоруски",
|
||||||
|
"Chinese (Simplified)": "Кинески (Поједностављени)",
|
||||||
|
"Croatian": "Хрватски",
|
||||||
|
"Dutch": "Холандски",
|
||||||
|
"Esperanto": "Есперанто",
|
||||||
|
"Finnish": "Фински",
|
||||||
|
"French": "Француски",
|
||||||
|
"Georgian": "Грузијски",
|
||||||
|
"Greek": "Грчки",
|
||||||
|
"Hausa": "Хауса",
|
||||||
|
"video": "Видео",
|
||||||
|
"playlist": "Плеј листа",
|
||||||
|
"movie": "Филм",
|
||||||
|
"long": "Дуго (> 20 минута)",
|
||||||
|
"creative_commons": "Creative Commons (Лиценца)",
|
||||||
|
"live": "Уживо",
|
||||||
|
"location": "Локација",
|
||||||
|
"filter": "Филтер",
|
||||||
|
"next_steps_error_message": "Након чега би требали пробати: ",
|
||||||
|
"footer_donate_page": "Донирај",
|
||||||
|
"footer_documentation": "Документација",
|
||||||
|
"footer_modfied_source_code": "Измењена Изворна Кода",
|
||||||
|
"preferences_region_label": "Држава порекла садржаја: ",
|
||||||
|
"preferences_category_misc": "Остала подешавања",
|
||||||
|
"User ID is a required field": "Кориснички ИД је обавезно поље",
|
||||||
|
"Password is a required field": "Лозинка је обавезно поље",
|
||||||
|
"Wrong username or password": "Погрешно корисничко име или лозинка",
|
||||||
|
"Please sign in using 'Log in with Google'": "Молимо Вас да се пријавите помоћу 'Log in with Google'",
|
||||||
|
"Password cannot be empty": "Лозинка не може бити празна",
|
||||||
|
"Password cannot be longer than 55 characters": "Лозинка не може бити дужа од 55 карактера",
|
||||||
|
"Invidious Private Feed for `x`": "Инвидиоус Приватни Довод за `x`",
|
||||||
|
"Deleted or invalid channel": "Обрисан или непостојећи канал",
|
||||||
|
"This channel does not exist.": "Овај канал не постоји.",
|
||||||
|
"`x` points": {
|
||||||
|
"": "`x` поена",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` поен"
|
||||||
|
},
|
||||||
|
"Could not create mix.": "Прављење микса није успело.",
|
||||||
|
"Empty playlist": "Празна плеј листа",
|
||||||
|
"Not a playlist.": "Није плеј листа.",
|
||||||
|
"Playlist does not exist.": "Непостојећа плеј листа.",
|
||||||
|
"Could not pull trending pages.": "Учитавање 'У току' страница није успело.",
|
||||||
|
"Hidden field \"challenge\" is a required field": "Сакривено \"challenge\" поље је обавезно",
|
||||||
|
"Telugu": "Телугу",
|
||||||
|
"Turkish": "Турски",
|
||||||
|
"Urdu": "Урду",
|
||||||
|
"Western Frisian": "Западнофрисијски",
|
||||||
|
"Xhosa": "Коса (Језик)",
|
||||||
|
"Yiddish": "Јидиш",
|
||||||
|
"`x` years": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` година",
|
||||||
|
"": "`x` година"
|
||||||
|
},
|
||||||
|
"`x` weeks": {
|
||||||
|
"": "`x` седмица",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` седмица"
|
||||||
|
},
|
||||||
|
"Hawaiian": "Хавајски",
|
||||||
|
"Hmong": "Хмонг",
|
||||||
|
"Hungarian": "Мађарски",
|
||||||
|
"Igbo": "Игбо",
|
||||||
|
"Javanese": "Јавански",
|
||||||
|
"Khmer": "Кмерски",
|
||||||
|
"Kyrgyz": "Киргиски",
|
||||||
|
"Macedonian": "Македонски",
|
||||||
|
"Maori": "Маори (Језик)",
|
||||||
|
"Marathi": "Маратхи",
|
||||||
|
"Nepali": "Непалски",
|
||||||
|
"Norwegian Bokmål": "Норвешки Бокмал",
|
||||||
|
"Nyanja": "Чева",
|
||||||
|
"Russian": "Руски",
|
||||||
|
"Scottish Gaelic": "Шкотски Гелски",
|
||||||
|
"Shona": "Шона",
|
||||||
|
"Slovak": "Словачки",
|
||||||
|
"Spanish (Latin America)": "Шпански (Јужна Америка)",
|
||||||
|
"Sundanese": "Сундски",
|
||||||
|
"Swahili": "Свахили",
|
||||||
|
"Tajik": "Таџички",
|
||||||
|
"`x` days": {
|
||||||
|
"": "`x` дана",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` дан"
|
||||||
|
},
|
||||||
|
"`x` minutes": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` минут",
|
||||||
|
"": "`x` минута"
|
||||||
|
},
|
||||||
|
"`x` seconds": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` секунда",
|
||||||
|
"": "`x` секунди"
|
||||||
|
},
|
||||||
|
"Search": "Претрага",
|
||||||
|
"Rating: ": "Ocena/e: ",
|
||||||
|
"Default": "Подразумеван/о",
|
||||||
|
"News": "Вести",
|
||||||
|
"Download": "Преузми",
|
||||||
|
"(edited)": "(измењено)",
|
||||||
|
"`x` marked it with a ❤": "`x` је означио/ла ово са ❤",
|
||||||
|
"Audio mode": "Аудио мод",
|
||||||
|
"Videos": "Видео клипови",
|
||||||
|
"views": "Број прегледа",
|
||||||
|
"features": "Карактеристике",
|
||||||
|
"today": "Данас",
|
||||||
|
"%A %B %-d, %Y": "%A %B %-d, %Y",
|
||||||
|
"preferences_locale_label": "Језик: ",
|
||||||
|
"Persian": "Перзијски",
|
||||||
|
"View `x` comments": {
|
||||||
|
"": "Прикажи `x` коментара",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "Прикажи `x` коментар"
|
||||||
|
},
|
||||||
|
"channel": "Канал",
|
||||||
|
"Haitian Creole": "Хаићански Креолски",
|
||||||
|
"Armenian": "Јерменски",
|
||||||
|
"View `x` replies": {
|
||||||
|
"": "Прикажи `x` одговора",
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "Прикажи `x` одговор"
|
||||||
|
},
|
||||||
|
"next_steps_error_message_go_to_youtube": "Иди на YouTube",
|
||||||
|
"`x` months": {
|
||||||
|
"([^.,0-9]|^)1([^.,0-9]|$)": "`x` месец",
|
||||||
|
"": "`x` месеци"
|
||||||
|
},
|
||||||
|
"Indonesian": "Индонежански",
|
||||||
|
"preferences_vr_mode_label": "Интерактивни видео клипови у 360 степени: ",
|
||||||
|
"Switch Invidious Instance": "Промени Invidious инстанцу",
|
||||||
|
"Portuguese": "Португалски",
|
||||||
|
"week": "Ове седмице",
|
||||||
|
"show": "Емисија",
|
||||||
|
"Fallback comments: ": "Коментари у случају отказивања: ",
|
||||||
|
"hdr": "Видео Високе Резолуције",
|
||||||
|
"About": "О програму",
|
||||||
|
"Kazakh": "Казашки",
|
||||||
|
"Shared `x`": "Подељено `x`",
|
||||||
|
"Playlists": "Плеј листе",
|
||||||
|
"Yoruba": "Јоруба",
|
||||||
|
"Erroneous challenge": "Погрешан изазов",
|
||||||
|
"Danish": "Дански",
|
||||||
|
"Could not get channel info.": "Узимање података о каналу није успело.",
|
||||||
|
"hd": "HD",
|
||||||
|
"Slovenian": "Словеначки",
|
||||||
|
"Load more": "Учитај више",
|
||||||
|
"German": "Немачки",
|
||||||
|
"Luxembourgish": "Луксембуршки",
|
||||||
|
"Mongolian": "Монголски",
|
||||||
|
"Latvian": "Летонски",
|
||||||
|
"channel:`x`": "kanal:`x`",
|
||||||
|
"Southern Sotho": "Јужни Сото",
|
||||||
|
"Popular": "Популарно",
|
||||||
|
"Gujarati": "Гуџарати",
|
||||||
|
"year": "Ове године",
|
||||||
|
"Irish": "Ирски",
|
||||||
|
"YouTube comment permalink": "YouTube коментар трајна веза",
|
||||||
|
"Malagasy": "Малгашки",
|
||||||
|
"Token is expired, please try again": "Жетон је истекао, молимо вас да покушате поново",
|
||||||
|
"short": "Кратко (< 4 минуте)",
|
||||||
|
"Samoan": "Самоански",
|
||||||
|
"Tamil": "Тамилски",
|
||||||
|
"Ukrainian": "Украјински",
|
||||||
|
"permalink": "трајна веза",
|
||||||
|
"Pashto": "Паштунски",
|
||||||
|
"Community": "Заједница",
|
||||||
|
"Sindhi": "Синди",
|
||||||
|
"Could not fetch comments": "Узимање коментара није успело",
|
||||||
|
"Bangla": "Бангла/Бенгалски",
|
||||||
|
"Uzbek": "Узбечки",
|
||||||
|
"Lithuanian": "Литвански",
|
||||||
|
"Icelandic": "Исландски",
|
||||||
|
"Thai": "Тајски",
|
||||||
|
"month": "Овај месец",
|
||||||
|
"content_type": "Тип",
|
||||||
|
"hour": "Последњи сат",
|
||||||
|
"Spanish": "Шпански",
|
||||||
|
"date": "Датум отпремања",
|
||||||
|
"View as playlist": "Погледај као плеј листу",
|
||||||
|
"relevance": "Релевантност",
|
||||||
|
"Estonian": "Естонски",
|
||||||
|
"Sinhala": "Синхалешки",
|
||||||
|
"Corsican": "Корзикански",
|
||||||
|
"Filipino": "Филипино",
|
||||||
|
"Gaming": "Игрице",
|
||||||
|
"Movies": "Филмови",
|
||||||
|
"rating": "Оцене",
|
||||||
|
"Top enabled: ": "Врх омогућен: ",
|
||||||
|
"Released under the AGPLv3 on Github.": "Избачено под лиценцом AGPLv3 на Github-у.",
|
||||||
|
"Afrikaans": "Африканс",
|
||||||
|
"preferences_automatic_instance_redirect_label": "Аутоматско пребацивање на другу инстанцу у случају отказивања (пречи ће назад на редирецт.инвидиоус.ио): ",
|
||||||
|
"Invalid TFA code": "Неважећа TFA кода",
|
||||||
|
"Please log in": "Молимо вас да се пријавите",
|
||||||
|
"English (auto-generated)": "Енглески (аутоматски генерисано)",
|
||||||
|
"Hindi": "Хинди",
|
||||||
|
"Italian": "Талијански",
|
||||||
|
"Malayalam": "Малајалам",
|
||||||
|
"Punjabi": "Пунџаби",
|
||||||
|
"Somali": "Сомалијски",
|
||||||
|
"Vietnamese": "Вијетнамски",
|
||||||
|
"Welsh": "Велшки",
|
||||||
|
"Zulu": "Зулу",
|
||||||
|
"Maltese": "Малтешки",
|
||||||
|
"Swedish": "Шведски",
|
||||||
|
"Music": "Музика",
|
||||||
|
"Download as: ": "Преузми као: ",
|
||||||
|
"duration": "Трајање",
|
||||||
|
"sort": "Поредај према",
|
||||||
|
"subtitles": "Титл/Превод",
|
||||||
|
"preferences_extend_desc_label": "Аутоматски прикажи цео опис видеа: ",
|
||||||
|
"Show less": "Прикажи мање",
|
||||||
|
"Broken? Try another Invidious Instance": "Не функционише исправно? Пробајте другу Invidious инстанцу",
|
||||||
|
"Family friendly? ": "Погодно за породицу? ",
|
||||||
|
"Premieres `x`": "Премерe у `x`",
|
||||||
|
"Bosnian": "Босански",
|
||||||
|
"Catalan": "Каталонски",
|
||||||
|
"Japanese": "Јапански",
|
||||||
|
"Latin": "Латински",
|
||||||
|
"next_steps_error_message_refresh": "Освежи страницу",
|
||||||
|
"footer_original_source_code": "Оригинална Изворна Кода",
|
||||||
|
"Romanian": "Румунски",
|
||||||
|
"Serbian": "Српски",
|
||||||
|
"Top": "Врх",
|
||||||
|
"Video mode": "Видео мод",
|
||||||
|
"footer_source_code": "Изворна Кода",
|
||||||
|
"3d": "3D",
|
||||||
|
"4k": "4K",
|
||||||
|
"Erroneous CAPTCHA": "Погрешна CAPTCHA",
|
||||||
|
"`x` ago": "пре `x`",
|
||||||
|
"Arabic": "Арапски",
|
||||||
|
"Bulgarian": "Бугарски",
|
||||||
|
"Galician": "Галицијски",
|
||||||
|
"Hebrew": "Хебрејски",
|
||||||
|
"Korean": "Корејски",
|
||||||
|
"Kurdish": "Курдски",
|
||||||
|
"Malay": "Малајски"
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,5 +433,5 @@
|
||||||
"adminprefs_modified_source_code_url_label": "Değiştirilmiş kaynak kodları deposunun URL'si",
|
"adminprefs_modified_source_code_url_label": "Değiştirilmiş kaynak kodları deposunun URL'si",
|
||||||
"footer_donate_page": "Bağış yap",
|
"footer_donate_page": "Bağış yap",
|
||||||
"preferences_region_label": "İçerik ülkesi: ",
|
"preferences_region_label": "İçerik ülkesi: ",
|
||||||
"preferences_quality_dash_label": "Tercih edilen dash video kalitesi: "
|
"preferences_quality_dash_label": "Tercih edilen DASH video kalitesi: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,5 +433,5 @@
|
||||||
"footer_original_source_code": "原始源代码",
|
"footer_original_source_code": "原始源代码",
|
||||||
"footer_donate_page": "捐赠",
|
"footer_donate_page": "捐赠",
|
||||||
"preferences_region_label": "内容国家: ",
|
"preferences_region_label": "内容国家: ",
|
||||||
"preferences_quality_dash_label": "首选 dash 视频分辨率: "
|
"preferences_quality_dash_label": "首选 DASH 视频分辨率: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,5 +433,5 @@
|
||||||
"adminprefs_modified_source_code_url_label": "修改後的原始碼倉庫 URL",
|
"adminprefs_modified_source_code_url_label": "修改後的原始碼倉庫 URL",
|
||||||
"footer_donate_page": "捐款",
|
"footer_donate_page": "捐款",
|
||||||
"preferences_region_label": "內容國家: ",
|
"preferences_region_label": "內容國家: ",
|
||||||
"preferences_quality_dash_label": "偏好的 dash 影片品質: "
|
"preferences_quality_dash_label": "偏好的 DASH 影片品質: "
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,7 +408,7 @@ define_video_playback_routes()
|
||||||
# Users
|
# Users
|
||||||
|
|
||||||
post "/watch_ajax" do |env|
|
post "/watch_ajax" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -478,7 +478,7 @@ end
|
||||||
# /modify_notifications?receive_all_updates=false&receive_no_updates=false
|
# /modify_notifications?receive_all_updates=false&receive_no_updates=false
|
||||||
# will "unding" all subscriptions.
|
# will "unding" all subscriptions.
|
||||||
get "/modify_notifications" do |env|
|
get "/modify_notifications" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -551,7 +551,7 @@ get "/modify_notifications" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/subscription_ajax" do |env|
|
post "/subscription_ajax" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -621,7 +621,7 @@ post "/subscription_ajax" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/subscription_manager" do |env|
|
get "/subscription_manager" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -724,7 +724,7 @@ get "/subscription_manager" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/data_control" do |env|
|
get "/data_control" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -739,7 +739,7 @@ get "/data_control" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/data_control" do |env|
|
post "/data_control" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -902,7 +902,7 @@ post "/data_control" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/change_password" do |env|
|
get "/change_password" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -920,7 +920,7 @@ get "/change_password" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/change_password" do |env|
|
post "/change_password" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -976,7 +976,7 @@ post "/change_password" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/delete_account" do |env|
|
get "/delete_account" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -994,7 +994,7 @@ get "/delete_account" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/delete_account" do |env|
|
post "/delete_account" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1028,7 +1028,7 @@ post "/delete_account" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/clear_watch_history" do |env|
|
get "/clear_watch_history" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1046,7 +1046,7 @@ get "/clear_watch_history" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/clear_watch_history" do |env|
|
post "/clear_watch_history" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1071,7 +1071,7 @@ post "/clear_watch_history" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/authorize_token" do |env|
|
get "/authorize_token" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1099,7 +1099,7 @@ get "/authorize_token" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/authorize_token" do |env|
|
post "/authorize_token" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1147,7 +1147,7 @@ post "/authorize_token" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
get "/token_manager" do |env|
|
get "/token_manager" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1165,7 +1165,7 @@ get "/token_manager" do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
post "/token_ajax" do |env|
|
post "/token_ajax" do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -1225,7 +1225,7 @@ end
|
||||||
|
|
||||||
{"/channel/:ucid/live", "/user/:user/live", "/c/:user/live"}.each do |route|
|
{"/channel/:ucid/live", "/user/:user/live", "/c/:user/live"}.each do |route|
|
||||||
get route do |env|
|
get route do |env|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
# Appears to be a bug in routing, having several routes configured
|
# Appears to be a bug in routing, having several routes configured
|
||||||
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
# as `/a/:a`, `/b/:a`, `/c/:a` results in 404
|
||||||
|
@ -1347,7 +1347,7 @@ error 404 do |env|
|
||||||
end
|
end
|
||||||
|
|
||||||
error 500 do |env, ex|
|
error 500 do |env, ex|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
error_template(500, ex)
|
error_template(500, ex)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ def github_details(summary : String, content : String)
|
||||||
return HTML.escape(details)
|
return HTML.escape(details)
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_template_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, exception : Exception)
|
def error_template_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, exception : Exception)
|
||||||
if exception.is_a?(InfoException)
|
if exception.is_a?(InfoException)
|
||||||
return error_template_helper(env, locale, status_code, exception.message || "")
|
return error_template_helper(env, locale, status_code, exception.message || "")
|
||||||
end
|
end
|
||||||
|
@ -46,7 +46,7 @@ def error_template_helper(env : HTTP::Server::Context, locale : Hash(String, JSO
|
||||||
return templated "error"
|
return templated "error"
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_template_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, message : String)
|
def error_template_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, message : String)
|
||||||
env.response.content_type = "text/html"
|
env.response.content_type = "text/html"
|
||||||
env.response.status_code = status_code
|
env.response.status_code = status_code
|
||||||
error_message = translate(locale, message)
|
error_message = translate(locale, message)
|
||||||
|
@ -58,7 +58,7 @@ macro error_atom(*args)
|
||||||
error_atom_helper(env, locale, {{*args}})
|
error_atom_helper(env, locale, {{*args}})
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_atom_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, exception : Exception)
|
def error_atom_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, exception : Exception)
|
||||||
if exception.is_a?(InfoException)
|
if exception.is_a?(InfoException)
|
||||||
return error_atom_helper(env, locale, status_code, exception.message || "")
|
return error_atom_helper(env, locale, status_code, exception.message || "")
|
||||||
end
|
end
|
||||||
|
@ -67,7 +67,7 @@ def error_atom_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::A
|
||||||
return "<error>#{exception.inspect_with_backtrace}</error>"
|
return "<error>#{exception.inspect_with_backtrace}</error>"
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_atom_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, message : String)
|
def error_atom_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, message : String)
|
||||||
env.response.content_type = "application/atom+xml"
|
env.response.content_type = "application/atom+xml"
|
||||||
env.response.status_code = status_code
|
env.response.status_code = status_code
|
||||||
return "<error>#{message}</error>"
|
return "<error>#{message}</error>"
|
||||||
|
@ -77,7 +77,7 @@ macro error_json(*args)
|
||||||
error_json_helper(env, locale, {{*args}})
|
error_json_helper(env, locale, {{*args}})
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, exception : Exception, additional_fields : Hash(String, Object) | Nil)
|
def error_json_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, exception : Exception, additional_fields : Hash(String, Object) | Nil)
|
||||||
if exception.is_a?(InfoException)
|
if exception.is_a?(InfoException)
|
||||||
return error_json_helper(env, locale, status_code, exception.message || "", additional_fields)
|
return error_json_helper(env, locale, status_code, exception.message || "", additional_fields)
|
||||||
end
|
end
|
||||||
|
@ -90,11 +90,11 @@ def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::A
|
||||||
return error_message.to_json
|
return error_message.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, exception : Exception)
|
def error_json_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, exception : Exception)
|
||||||
return error_json_helper(env, locale, status_code, exception, nil)
|
return error_json_helper(env, locale, status_code, exception, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, message : String, additional_fields : Hash(String, Object) | Nil)
|
def error_json_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, message : String, additional_fields : Hash(String, Object) | Nil)
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
env.response.status_code = status_code
|
env.response.status_code = status_code
|
||||||
error_message = {"error" => message}
|
error_message = {"error" => message}
|
||||||
|
@ -104,11 +104,11 @@ def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::A
|
||||||
return error_message.to_json
|
return error_message.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_json_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil, status_code : Int32, message : String)
|
def error_json_helper(env : HTTP::Server::Context, locale : String?, status_code : Int32, message : String)
|
||||||
error_json_helper(env, locale, status_code, message, nil)
|
error_json_helper(env, locale, status_code, message, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
def error_redirect_helper(env : HTTP::Server::Context, locale : Hash(String, JSON::Any) | Nil)
|
def error_redirect_helper(env : HTTP::Server::Context, locale : String?)
|
||||||
request_path = env.request.path
|
request_path = env.request.path
|
||||||
|
|
||||||
if request_path.starts_with?("/search") || request_path.starts_with?("/watch") ||
|
if request_path.starts_with?("/search") || request_path.starts_with?("/watch") ||
|
||||||
|
|
|
@ -190,7 +190,7 @@ def create_notification_stream(env, topics, connection_channel)
|
||||||
connection = Channel(PQ::Notification).new(8)
|
connection = Channel(PQ::Notification).new(8)
|
||||||
connection_channel.send({true, connection})
|
connection_channel.send({true, connection})
|
||||||
|
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
since = env.params.query["since"]?.try &.to_i?
|
since = env.params.query["since"]?.try &.to_i?
|
||||||
id = 0
|
id = 0
|
||||||
|
|
|
@ -1,46 +1,47 @@
|
||||||
# "bn_BD" => load_locale("bn_BD"), # Bengali (Bangladesh) [Incomplete]
|
# "bn_BD" => load_locale("bn_BD"), # Bengali (Bangladesh) [Incomplete]
|
||||||
# "eu" => load_locale("eu"), # Basque [Incomplete]
|
# "eu" => load_locale("eu"), # Basque [Incomplete]
|
||||||
# "si" => load_locale("si"), # Sinhala [Incomplete]
|
|
||||||
# "sk" => load_locale("sk"), # Slovak [Incomplete]
|
# "sk" => load_locale("sk"), # Slovak [Incomplete]
|
||||||
# "sr" => load_locale("sr"), # Serbian [Incomplete]
|
# "sr" => load_locale("sr"), # Serbian [Incomplete]
|
||||||
# "sr_Cyrl" => load_locale("sr_Cyrl"), # Serbian (cyrillic) [Incomplete]
|
# "sr_Cyrl" => load_locale("sr_Cyrl"), # Serbian (cyrillic) [Incomplete]
|
||||||
LOCALES = {
|
LOCALES_LIST = {
|
||||||
"ar" => load_locale("ar"), # Arabic
|
"ar" => "العربية", # Arabic
|
||||||
"cs" => load_locale("cs"), # Czech
|
"cs" => "Čeština", # Czech
|
||||||
"da" => load_locale("da"), # Danish
|
"da" => "Dansk", # Danish
|
||||||
"de" => load_locale("de"), # German
|
"de" => "Deutsch", # German
|
||||||
"el" => load_locale("el"), # Greek
|
"el" => "Ελληνικά", # Greek
|
||||||
"en-US" => load_locale("en-US"), # English (US)
|
"en-US" => "English", # English
|
||||||
"eo" => load_locale("eo"), # Esperanto
|
"eo" => "Esperanto", # Esperanto
|
||||||
"es" => load_locale("es"), # Spanish
|
"es" => "Español", # Spanish
|
||||||
"fa" => load_locale("fa"), # Persian
|
"fa" => "فارسی", # Persian
|
||||||
"fi" => load_locale("fi"), # Finnish
|
"fi" => "Suomi", # Finnish
|
||||||
"fr" => load_locale("fr"), # French
|
"fr" => "Français", # French
|
||||||
"he" => load_locale("he"), # Hebrew
|
"he" => "עברית", # Hebrew
|
||||||
"hr" => load_locale("hr"), # Croatian
|
"hr" => "Hrvatski", # Croatian
|
||||||
"hu-HU" => load_locale("hu-HU"), # Hungarian
|
"hu-HU" => "Magyar Nyelv", # Hungarian
|
||||||
"id" => load_locale("id"), # Indonesian
|
"id" => "Bahasa Indonesia", # Indonesian
|
||||||
"is" => load_locale("is"), # Icelandic
|
"is" => "Íslenska", # Icelandic
|
||||||
"it" => load_locale("it"), # Italian
|
"it" => "Italiano", # Italian
|
||||||
"ja" => load_locale("ja"), # Japanese
|
"ja" => "日本語", # Japanese
|
||||||
"ko" => load_locale("ko"), # Korean
|
"ko" => "한국어", # Korean
|
||||||
"lt" => load_locale("lt"), # Lithuanian
|
"lt" => "Lietuvių", # Lithuanian
|
||||||
"nb-NO" => load_locale("nb-NO"), # Norwegian Bokmål
|
"nb-NO" => "Norsk bokmål", # Norwegian Bokmål
|
||||||
"nl" => load_locale("nl"), # Dutch
|
"nl" => "Nederlands", # Dutch
|
||||||
"pl" => load_locale("pl"), # Polish
|
"pl" => "Polski", # Polish
|
||||||
"pt" => load_locale("pt"), # Portuguese
|
"pt" => "Português", # Portuguese
|
||||||
"pt-BR" => load_locale("pt-BR"), # Portuguese (Brazil)
|
"pt-BR" => "Português Brasileiro", # Portuguese (Brazil)
|
||||||
"pt-PT" => load_locale("pt-PT"), # Portuguese (Portugal)
|
"pt-PT" => "Português de Portugal", # Portuguese (Portugal)
|
||||||
"ro" => load_locale("ro"), # Romanian
|
"ro" => "Română", # Romanian
|
||||||
"ru" => load_locale("ru"), # Russian
|
"ru" => "русский", # Russian
|
||||||
"sv-SE" => load_locale("sv-SE"), # Swedish
|
"sv-SE" => "Svenska", # Swedish
|
||||||
"tr" => load_locale("tr"), # Turkish
|
"tr" => "Türkçe", # Turkish
|
||||||
"uk" => load_locale("uk"), # Ukrainian
|
"uk" => "Українська", # Ukrainian
|
||||||
"vi" => load_locale("vi"), # Vietnamese
|
"vi" => "Tiếng Việt", # Vietnamese
|
||||||
"zh-CN" => load_locale("zh-CN"), # Chinese (Simplified)
|
"zh-CN" => "汉语", # Chinese (Simplified)
|
||||||
"zh-TW" => load_locale("zh-TW"), # Chinese (Traditional)
|
"zh-TW" => "漢語", # Chinese (Traditional)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOCALES = load_all_locales()
|
||||||
|
|
||||||
CONTENT_REGIONS = {
|
CONTENT_REGIONS = {
|
||||||
"AE", "AR", "AT", "AU", "AZ", "BA", "BD", "BE", "BG", "BH", "BO", "BR", "BY",
|
"AE", "AR", "AT", "AU", "AZ", "BA", "BD", "BE", "BG", "BH", "BO", "BR", "BY",
|
||||||
"CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE",
|
"CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE",
|
||||||
|
@ -53,21 +54,39 @@ CONTENT_REGIONS = {
|
||||||
"YE", "ZA", "ZW",
|
"YE", "ZA", "ZW",
|
||||||
}
|
}
|
||||||
|
|
||||||
def load_locale(name)
|
def load_all_locales
|
||||||
return JSON.parse(File.read("locales/#{name}.json")).as_h
|
locales = {} of String => Hash(String, JSON::Any)
|
||||||
|
|
||||||
|
LOCALES_LIST.each_key do |name|
|
||||||
|
locales[name] = JSON.parse(File.read("locales/#{name}.json")).as_h
|
||||||
|
end
|
||||||
|
|
||||||
|
return locales
|
||||||
end
|
end
|
||||||
|
|
||||||
def translate(locale : Hash(String, JSON::Any) | Nil, translation : String, text : String | Nil = nil)
|
def translate(locale : String?, key : String, text : String | Nil = nil) : String
|
||||||
# if locale && !locale[translation]?
|
# Log a warning if "key" doesn't exist in en-US locale and return
|
||||||
# puts "Could not find translation for #{translation.dump}"
|
# that key as the text, so this is more or less transparent to the user.
|
||||||
# end
|
if !LOCALES["en-US"].has_key?(key)
|
||||||
|
LOGGER.warn("i18n: Missing translation key \"#{key}\"")
|
||||||
|
return key
|
||||||
|
end
|
||||||
|
|
||||||
if locale && locale[translation]?
|
# Default to english, whenever the locale doesn't exist,
|
||||||
case locale[translation]
|
# or the key requested has not been translated
|
||||||
|
if locale && LOCALES.has_key?(locale) && LOCALES[locale].has_key?(key)
|
||||||
|
raw_data = LOCALES[locale][key]
|
||||||
|
else
|
||||||
|
raw_data = LOCALES["en-US"][key]
|
||||||
|
end
|
||||||
|
|
||||||
|
case raw_data
|
||||||
when .as_h?
|
when .as_h?
|
||||||
|
# Init
|
||||||
|
translation = ""
|
||||||
match_length = 0
|
match_length = 0
|
||||||
|
|
||||||
locale[translation].as_h.each do |key, value|
|
raw_data.as_h.each do |key, value|
|
||||||
if md = text.try &.match(/#{key}/)
|
if md = text.try &.match(/#{key}/)
|
||||||
if md[0].size >= match_length
|
if md[0].size >= match_length
|
||||||
translation = value.as_s
|
translation = value.as_s
|
||||||
|
@ -76,12 +95,9 @@ def translate(locale : Hash(String, JSON::Any) | Nil, translation : String, text
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
when .as_s?
|
when .as_s?
|
||||||
if !locale[translation].as_s.empty?
|
translation = raw_data.as_s
|
||||||
translation = locale[translation].as_s
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
raise "Invalid translation #{translation}"
|
raise "Invalid translation \"#{raw_data}\""
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if text
|
if text
|
||||||
|
@ -91,7 +107,7 @@ def translate(locale : Hash(String, JSON::Any) | Nil, translation : String, text
|
||||||
return translation
|
return translation
|
||||||
end
|
end
|
||||||
|
|
||||||
def translate_bool(locale : Hash(String, JSON::Any) | Nil, translation : Bool)
|
def translate_bool(locale : String?, translation : Bool)
|
||||||
case translation
|
case translation
|
||||||
when true
|
when true
|
||||||
return translate(locale, "Yes")
|
return translate(locale, "Yes")
|
||||||
|
|
|
@ -64,7 +64,7 @@ struct SearchVideo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, json : JSON::Builder)
|
def to_json(locale : String?, json : JSON::Builder)
|
||||||
json.object do
|
json.object do
|
||||||
json.field "type", "video"
|
json.field "type", "video"
|
||||||
json.field "title", self.title
|
json.field "title", self.title
|
||||||
|
@ -96,7 +96,7 @@ struct SearchVideo
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove the locale and follow the crystal convention
|
# TODO: remove the locale and follow the crystal convention
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, _json : Nil)
|
def to_json(locale : String?, _json : Nil)
|
||||||
JSON.build do |json|
|
JSON.build do |json|
|
||||||
to_json(locale, json)
|
to_json(locale, json)
|
||||||
end
|
end
|
||||||
|
@ -130,7 +130,7 @@ struct SearchPlaylist
|
||||||
property videos : Array(SearchPlaylistVideo)
|
property videos : Array(SearchPlaylistVideo)
|
||||||
property thumbnail : String?
|
property thumbnail : String?
|
||||||
|
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, json : JSON::Builder)
|
def to_json(locale : String?, json : JSON::Builder)
|
||||||
json.object do
|
json.object do
|
||||||
json.field "type", "playlist"
|
json.field "type", "playlist"
|
||||||
json.field "title", self.title
|
json.field "title", self.title
|
||||||
|
@ -161,7 +161,7 @@ struct SearchPlaylist
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove the locale and follow the crystal convention
|
# TODO: remove the locale and follow the crystal convention
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, _json : Nil)
|
def to_json(locale : String?, _json : Nil)
|
||||||
JSON.build do |json|
|
JSON.build do |json|
|
||||||
to_json(locale, json)
|
to_json(locale, json)
|
||||||
end
|
end
|
||||||
|
@ -183,7 +183,7 @@ struct SearchChannel
|
||||||
property description_html : String
|
property description_html : String
|
||||||
property auto_generated : Bool
|
property auto_generated : Bool
|
||||||
|
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, json : JSON::Builder)
|
def to_json(locale : String?, json : JSON::Builder)
|
||||||
json.object do
|
json.object do
|
||||||
json.field "type", "channel"
|
json.field "type", "channel"
|
||||||
json.field "author", self.author
|
json.field "author", self.author
|
||||||
|
@ -214,7 +214,7 @@ struct SearchChannel
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove the locale and follow the crystal convention
|
# TODO: remove the locale and follow the crystal convention
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, _json : Nil)
|
def to_json(locale : String?, _json : Nil)
|
||||||
JSON.build do |json|
|
JSON.build do |json|
|
||||||
to_json(locale, json)
|
to_json(locale, json)
|
||||||
end
|
end
|
||||||
|
@ -234,7 +234,7 @@ class Category
|
||||||
property description_html : String
|
property description_html : String
|
||||||
property badges : Array(Tuple(String, String))?
|
property badges : Array(Tuple(String, String))?
|
||||||
|
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, json : JSON::Builder)
|
def to_json(locale : String?, json : JSON::Builder)
|
||||||
json.object do
|
json.object do
|
||||||
json.field "type", "category"
|
json.field "type", "category"
|
||||||
json.field "title", self.title
|
json.field "title", self.title
|
||||||
|
@ -249,7 +249,7 @@ class Category
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove the locale and follow the crystal convention
|
# TODO: remove the locale and follow the crystal convention
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, _json : Nil)
|
def to_json(locale : String?, _json : Nil)
|
||||||
JSON.build do |json|
|
JSON.build do |json|
|
||||||
to_json(locale, json)
|
to_json(locale, json)
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,7 +36,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
max_results = env.params.query["max_results"]?.try &.to_i?
|
max_results = env.params.query["max_results"]?.try &.to_i?
|
||||||
max_results ||= user.preferences.max_results
|
max_results ||= user.preferences.max_results
|
||||||
|
@ -122,7 +122,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.list_playlists(env)
|
def self.list_playlists(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
|
@ -141,7 +141,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
def self.create_playlist(env)
|
def self.create_playlist(env)
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
title = env.params.json["title"]?.try &.as(String).delete("<>").byte_slice(0, 150)
|
title = env.params.json["title"]?.try &.as(String).delete("<>").byte_slice(0, 150)
|
||||||
if !title
|
if !title
|
||||||
|
@ -167,7 +167,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.update_playlist_attribute(env)
|
def self.update_playlist_attribute(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
|
@ -200,7 +200,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete_playlist(env)
|
def self.delete_playlist(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
|
@ -223,7 +223,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.insert_video_into_playlist(env)
|
def self.insert_video_into_playlist(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
|
@ -281,7 +281,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete_video_in_playlist(env)
|
def self.delete_video_in_playlist(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
|
@ -334,7 +334,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
|
|
||||||
def self.register_token(env)
|
def self.register_token(env)
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
case env.request.headers["Content-Type"]?
|
case env.request.headers["Content-Type"]?
|
||||||
when "application/x-www-form-urlencoded"
|
when "application/x-www-form-urlencoded"
|
||||||
|
@ -396,7 +396,7 @@ module Invidious::Routes::API::V1::Authenticated
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.unregister_token(env)
|
def self.unregister_token(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
user = env.get("user").as(User)
|
user = env.get("user").as(User)
|
||||||
scopes = env.get("scopes").as(Array(String))
|
scopes = env.get("scopes").as(Array(String))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Invidious::Routes::API::V1::Channels
|
module Invidious::Routes::API::V1::Channels
|
||||||
def self.home(env)
|
def self.home(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ module Invidious::Routes::API::V1::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.latest(env)
|
def self.latest(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ module Invidious::Routes::API::V1::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.videos(env)
|
def self.videos(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ module Invidious::Routes::API::V1::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.playlists(env)
|
def self.playlists(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ module Invidious::Routes::API::V1::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.community(env)
|
def self.community(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ module Invidious::Routes::API::V1::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.search(env)
|
def self.search(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Invidious::Routes::API::V1::Feeds
|
module Invidious::Routes::API::V1::Feeds
|
||||||
def self.trending(env)
|
def self.trending(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ module Invidious::Routes::API::V1::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.popular(env)
|
def self.popular(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module Invidious::Routes::API::V1::Misc
|
module Invidious::Routes::API::V1::Misc
|
||||||
# Stats API endpoint for Invidious
|
# Stats API endpoint for Invidious
|
||||||
def self.stats(env)
|
def self.stats(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
if !CONFIG.statistics_enabled
|
if !CONFIG.statistics_enabled
|
||||||
|
@ -15,7 +15,7 @@ module Invidious::Routes::API::V1::Misc
|
||||||
# user playlists and Invidious playlists. This means that we can't
|
# user playlists and Invidious playlists. This means that we can't
|
||||||
# reasonably split them yet. This should be addressed in APIv2
|
# reasonably split them yet. This should be addressed in APIv2
|
||||||
def self.get_playlist(env)
|
def self.get_playlist(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
plid = env.params.url["plid"]
|
plid = env.params.url["plid"]
|
||||||
|
@ -84,7 +84,7 @@ module Invidious::Routes::API::V1::Misc
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.mixes(env)
|
def self.mixes(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Invidious::Routes::API::V1::Search
|
module Invidious::Routes::API::V1::Search
|
||||||
def self.search(env)
|
def self.search(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
region = env.params.query["region"]?
|
region = env.params.query["region"]?
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
@ -43,7 +43,7 @@ module Invidious::Routes::API::V1::Search
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.search_suggestions(env)
|
def self.search_suggestions(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
region = env.params.query["region"]?
|
region = env.params.query["region"]?
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module Invidious::Routes::API::V1::Videos
|
module Invidious::Routes::API::V1::Videos
|
||||||
def self.videos(env)
|
def self.videos(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ module Invidious::Routes::API::V1::Videos
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.captions(env)
|
def self.captions(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ module Invidious::Routes::API::V1::Videos
|
||||||
# thumbnails for individual scenes in a video.
|
# thumbnails for individual scenes in a video.
|
||||||
# See https://support.jwplayer.com/articles/how-to-add-preview-thumbnails
|
# See https://support.jwplayer.com/articles/how-to-add-preview-thumbnails
|
||||||
def self.storyboards(env)
|
def self.storyboards(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ module Invidious::Routes::API::V1::Videos
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.annotations(env)
|
def self.annotations(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.content_type = "text/xml"
|
env.response.content_type = "text/xml"
|
||||||
|
|
||||||
|
@ -293,7 +293,7 @@ module Invidious::Routes::API::V1::Videos
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.comments(env)
|
def self.comments(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
region = env.params.query["region"]?
|
region = env.params.query["region"]?
|
||||||
|
|
||||||
env.response.content_type = "application/json"
|
env.response.content_type = "application/json"
|
||||||
|
|
|
@ -104,7 +104,7 @@ module Invidious::Routes::Channels
|
||||||
|
|
||||||
# Redirects brand url channels to a normal /channel/:ucid route
|
# Redirects brand url channels to a normal /channel/:ucid route
|
||||||
def self.brand_redirect(env)
|
def self.brand_redirect(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
# /attribution_link endpoint needs both the `a` and `u` parameter
|
# /attribution_link endpoint needs both the `a` and `u` parameter
|
||||||
# and in order to avoid detection from YouTube we should only send the required ones
|
# and in order to avoid detection from YouTube we should only send the required ones
|
||||||
|
@ -148,7 +148,7 @@ module Invidious::Routes::Channels
|
||||||
end
|
end
|
||||||
|
|
||||||
private def self.fetch_basic_information(env)
|
private def self.fetch_basic_information(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
if user
|
if user
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::Embed
|
module Invidious::Routes::Embed
|
||||||
def self.redirect(env)
|
def self.redirect(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
if plid = env.params.query["list"]?.try &.gsub(/[^a-zA-Z0-9_-]/, "")
|
if plid = env.params.query["list"]?.try &.gsub(/[^a-zA-Z0-9_-]/, "")
|
||||||
begin
|
begin
|
||||||
|
@ -26,7 +26,7 @@ module Invidious::Routes::Embed
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.show(env)
|
def self.show(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
id = env.params.url["id"]
|
id = env.params.url["id"]
|
||||||
|
|
||||||
plid = env.params.query["list"]?.try &.gsub(/[^a-zA-Z0-9_-]/, "")
|
plid = env.params.query["list"]?.try &.gsub(/[^a-zA-Z0-9_-]/, "")
|
||||||
|
|
|
@ -6,7 +6,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.playlists(env)
|
def self.playlists(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -31,7 +31,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.popular(env)
|
def self.popular(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
if CONFIG.popular_enabled
|
if CONFIG.popular_enabled
|
||||||
templated "feeds/popular"
|
templated "feeds/popular"
|
||||||
|
@ -42,7 +42,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.trending(env)
|
def self.trending(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
trending_type = env.params.query["type"]?
|
trending_type = env.params.query["type"]?
|
||||||
trending_type ||= "Default"
|
trending_type ||= "Default"
|
||||||
|
@ -60,7 +60,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.subscriptions(env)
|
def self.subscriptions(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -108,7 +108,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.history(env)
|
def self.history(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -137,7 +137,7 @@ module Invidious::Routes::Feeds
|
||||||
# RSS feeds
|
# RSS feeds
|
||||||
|
|
||||||
def self.rss_channel(env)
|
def self.rss_channel(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.headers["Content-Type"] = "application/atom+xml"
|
env.response.headers["Content-Type"] = "application/atom+xml"
|
||||||
env.response.content_type = "application/atom+xml"
|
env.response.content_type = "application/atom+xml"
|
||||||
|
@ -209,7 +209,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.rss_private(env)
|
def self.rss_private(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.headers["Content-Type"] = "application/atom+xml"
|
env.response.headers["Content-Type"] = "application/atom+xml"
|
||||||
env.response.content_type = "application/atom+xml"
|
env.response.content_type = "application/atom+xml"
|
||||||
|
@ -253,7 +253,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.rss_playlist(env)
|
def self.rss_playlist(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
env.response.headers["Content-Type"] = "application/atom+xml"
|
env.response.headers["Content-Type"] = "application/atom+xml"
|
||||||
env.response.content_type = "application/atom+xml"
|
env.response.content_type = "application/atom+xml"
|
||||||
|
@ -374,7 +374,7 @@ module Invidious::Routes::Feeds
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.push_notifications_post(env)
|
def self.push_notifications_post(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
token = env.params.url["token"]
|
token = env.params.url["token"]
|
||||||
body = env.request.body.not_nil!.gets_to_end
|
body = env.request.body.not_nil!.gets_to_end
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::Login
|
module Invidious::Routes::Login
|
||||||
def self.login_page(env)
|
def self.login_page(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ module Invidious::Routes::Login
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.login(env)
|
def self.login(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
referer = get_referer(env, "/feed/subscriptions")
|
referer = get_referer(env, "/feed/subscriptions")
|
||||||
|
|
||||||
|
@ -491,7 +491,7 @@ module Invidious::Routes::Login
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.signout(env)
|
def self.signout(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
module Invidious::Routes::Misc
|
module Invidious::Routes::Misc
|
||||||
def self.home(env)
|
def self.home(env)
|
||||||
preferences = env.get("preferences").as(Preferences)
|
preferences = env.get("preferences").as(Preferences)
|
||||||
locale = LOCALES[preferences.locale]?
|
locale = preferences.locale
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
|
|
||||||
case preferences.default_home
|
case preferences.default_home
|
||||||
|
@ -29,12 +29,12 @@ module Invidious::Routes::Misc
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.privacy(env)
|
def self.privacy(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
templated "privacy"
|
templated "privacy"
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.licenses(env)
|
def self.licenses(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
rendered "licenses"
|
rendered "licenses"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::Playlists
|
module Invidious::Routes::Playlists
|
||||||
def self.new(env)
|
def self.new(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -18,7 +18,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create(env)
|
def self.create(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -56,7 +56,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.subscribe(env)
|
def self.subscribe(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -73,7 +73,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete_page(env)
|
def self.delete_page(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -96,7 +96,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.delete(env)
|
def self.delete(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -129,7 +129,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.edit(env)
|
def self.edit(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -169,7 +169,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.update(env)
|
def self.update(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -213,7 +213,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.add_playlist_items_page(env)
|
def self.add_playlist_items_page(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -260,7 +260,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.playlist_ajax(env)
|
def self.playlist_ajax(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get? "user"
|
user = env.get? "user"
|
||||||
sid = env.get? "sid"
|
sid = env.get? "sid"
|
||||||
|
@ -387,7 +387,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.show(env)
|
def self.show(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
user = env.get?("user").try &.as(User)
|
user = env.get?("user").try &.as(User)
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
@ -435,7 +435,7 @@ module Invidious::Routes::Playlists
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.mix(env)
|
def self.mix(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
rdid = env.params.query["list"]?
|
rdid = env.params.query["list"]?
|
||||||
if !rdid
|
if !rdid
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::PreferencesRoute
|
module Invidious::Routes::PreferencesRoute
|
||||||
def self.show(env)
|
def self.show(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ module Invidious::Routes::PreferencesRoute
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.update(env)
|
def self.update(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
referer = get_referer(env)
|
referer = get_referer(env)
|
||||||
|
|
||||||
video_loop = env.params.body["video_loop"]?.try &.as(String)
|
video_loop = env.params.body["video_loop"]?.try &.as(String)
|
||||||
|
@ -227,7 +227,7 @@ module Invidious::Routes::PreferencesRoute
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.toggle_theme(env)
|
def self.toggle_theme(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
referer = get_referer(env, unroll: false)
|
referer = get_referer(env, unroll: false)
|
||||||
|
|
||||||
redirect = env.params.query["redirect"]?
|
redirect = env.params.query["redirect"]?
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::Search
|
module Invidious::Routes::Search
|
||||||
def self.opensearch(env)
|
def self.opensearch(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
env.response.content_type = "application/opensearchdescription+xml"
|
env.response.content_type = "application/opensearchdescription+xml"
|
||||||
|
|
||||||
XML.build(indent: " ", encoding: "UTF-8") do |xml|
|
XML.build(indent: " ", encoding: "UTF-8") do |xml|
|
||||||
|
@ -18,7 +18,7 @@ module Invidious::Routes::Search
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.results(env)
|
def self.results(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
|
||||||
query = env.params.query["search_query"]?
|
query = env.params.query["search_query"]?
|
||||||
query ||= env.params.query["q"]?
|
query ||= env.params.query["q"]?
|
||||||
|
@ -37,7 +37,7 @@ module Invidious::Routes::Search
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.search(env)
|
def self.search(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
region = env.params.query["region"]?
|
region = env.params.query["region"]?
|
||||||
|
|
||||||
query = env.params.query["search_query"]?
|
query = env.params.query["search_query"]?
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
module Invidious::Routes::VideoPlayback
|
module Invidious::Routes::VideoPlayback
|
||||||
# /videoplayback
|
# /videoplayback
|
||||||
def self.get_video_playback(env)
|
def self.get_video_playback(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
query_params = env.params.query
|
query_params = env.params.query
|
||||||
|
|
||||||
fvip = query_params["fvip"]? || "3"
|
fvip = query_params["fvip"]? || "3"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
module Invidious::Routes::Watch
|
module Invidious::Routes::Watch
|
||||||
def self.handle(env)
|
def self.handle(env)
|
||||||
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
region = env.params.query["region"]?
|
region = env.params.query["region"]?
|
||||||
|
|
||||||
if env.params.query.to_s.includes?("%20") || env.params.query.to_s.includes?("+")
|
if env.params.query.to_s.includes?("%20") || env.params.query.to_s.includes?("+")
|
||||||
|
|
|
@ -275,7 +275,7 @@ struct Video
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, json : JSON::Builder)
|
def to_json(locale : String?, json : JSON::Builder)
|
||||||
json.object do
|
json.object do
|
||||||
json.field "type", "video"
|
json.field "type", "video"
|
||||||
|
|
||||||
|
@ -475,7 +475,7 @@ struct Video
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove the locale and follow the crystal convention
|
# TODO: remove the locale and follow the crystal convention
|
||||||
def to_json(locale : Hash(String, JSON::Any) | Nil, _json : Nil)
|
def to_json(locale : String?, _json : Nil)
|
||||||
JSON.build { |json| to_json(locale, json) }
|
JSON.build { |json| to_json(locale, json) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -32,13 +32,11 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% preferred_captions.each do |caption| %>
|
<% preferred_captions.each do |caption| %>
|
||||||
<track kind="captions" src="/api/v1/captions/<%= video.id %>?label=<%= caption.name %>&hl=<%= env.get("preferences").as(Preferences).locale %>"
|
<track kind="captions" src="/api/v1/captions/<%= video.id %>?label=<%= caption.name %>" label="<%= caption.name %>">
|
||||||
label="<%= caption.name %>">
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% captions.each do |caption| %>
|
<% captions.each do |caption| %>
|
||||||
<track kind="captions" src="/api/v1/captions/<%= video.id %>?label=<%= caption.name %>&hl=<%= env.get("preferences").as(Preferences).locale %>"
|
<track kind="captions" src="/api/v1/captions/<%= video.id %>?label=<%= caption.name %>" label="<%= caption.name %>">
|
||||||
label="<%= caption.name %>">
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</video>
|
</video>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="flex-right">
|
<div class="flex-right">
|
||||||
<div class="icon-buttons">
|
<div class="icon-buttons">
|
||||||
<a title="<%=translate(locale, "Watch on YouTube")%>" href="https://www.youtube.com/watch<%=endpoint_params%>">
|
<a title="<%=translate(locale, "videoinfo_watch_on_youTube")%>" href="https://www.youtube.com/watch<%=endpoint_params%>">
|
||||||
<i class="icon ion-logo-youtube"></i>
|
<i class="icon ion-logo-youtube"></i>
|
||||||
</a>
|
</a>
|
||||||
<a title="<%=translate(locale, "Audio mode")%>" href="/watch<%=endpoint_params%>&listen=1">
|
<a title="<%=translate(locale, "Audio mode")%>" href="/watch<%=endpoint_params%>&listen=1">
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<div class="pure-g h-box">
|
<div class="pure-g h-box">
|
||||||
<div class="pure-u-2-3">
|
<div class="pure-u-2-3">
|
||||||
<h3><%= translate(locale, "`x` created playlists", %(<span id="count">#{items_created.size}</span>)) %></h3>
|
<h3><%= translate(locale, "user_created_playlists", %(<span id="count">#{items_created.size}</span>)) %></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="pure-u-1-3" style="text-align:right">
|
<div class="pure-u-1-3" style="text-align:right">
|
||||||
<h3>
|
<h3>
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
<div class="pure-g h-box">
|
<div class="pure-g h-box">
|
||||||
<div class="pure-u-1">
|
<div class="pure-u-1">
|
||||||
<h3><%= translate(locale, "`x` saved playlists", %(<span id="count">#{items_saved.size}</span>)) %></h3>
|
<h3><%= translate(locale, "user_saved_playlists", %(<span id="count">#{items_saved.size}</span>)) %></h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
<select name="quality" id="quality">
|
<select name="quality" id="quality">
|
||||||
<% {"dash", "hd720", "medium", "small"}.each do |option| %>
|
<% {"dash", "hd720", "medium", "small"}.each do |option| %>
|
||||||
<% if !(option == "dash" && CONFIG.disabled?("dash")) %>
|
<% if !(option == "dash" && CONFIG.disabled?("dash")) %>
|
||||||
<option value="<%= option %>" <% if preferences.quality == option %> selected <% end %>><%= translate(locale, option) %></option>
|
<option value="<%= option %>" <% if preferences.quality == option %> selected <% end %>><%= translate(locale, "preferences_quality_option_" + option) %></option>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</select>
|
</select>
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
<label for="quality_dash"><%= translate(locale, "preferences_quality_dash_label") %></label>
|
<label for="quality_dash"><%= translate(locale, "preferences_quality_dash_label") %></label>
|
||||||
<select name="quality_dash" id="quality_dash">
|
<select name="quality_dash" id="quality_dash">
|
||||||
<% {"auto", "best", "4320p", "2160p", "1440p", "1080p", "720p", "480p", "360p", "240p", "144p", "worst"}.each do |option| %>
|
<% {"auto", "best", "4320p", "2160p", "1440p", "1080p", "720p", "480p", "360p", "240p", "144p", "worst"}.each do |option| %>
|
||||||
<option value="<%= option %>" <% if preferences.quality_dash == option %> selected <% end %>><%= translate(locale, option) %></option>
|
<option value="<%= option %>" <% if preferences.quality_dash == option %> selected <% end %>><%= translate(locale, "preferences_quality_dash_option_" + option) %></option>
|
||||||
<% end %>
|
<% end %>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -121,8 +121,8 @@
|
||||||
<div class="pure-control-group">
|
<div class="pure-control-group">
|
||||||
<label for="locale"><%= translate(locale, "preferences_locale_label") %></label>
|
<label for="locale"><%= translate(locale, "preferences_locale_label") %></label>
|
||||||
<select name="locale" id="locale">
|
<select name="locale" id="locale">
|
||||||
<% LOCALES.each_key do |option| %>
|
<% LOCALES_LIST.each do |iso_name, full_name| %>
|
||||||
<option value="<%= option %>" <% if preferences.locale == option %> selected <% end %>><%= option %></option>
|
<option value="<%= iso_name %>" <% if preferences.locale == iso_name %> selected <% end %>><%= HTML.escape(full_name) %></option>
|
||||||
<% end %>
|
<% end %>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -20,8 +20,10 @@
|
||||||
<link rel="stylesheet" href="/css/keromod.css?v=<%= ASSET_COMMIT %>">
|
<link rel="stylesheet" href="/css/keromod.css?v=<%= ASSET_COMMIT %>">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<% locale = LOCALES[env.get("preferences").as(Preferences).locale]? %>
|
<%
|
||||||
<% dark_mode = env.get("preferences").as(Preferences).dark_mode %>
|
locale = env.get("preferences").as(Preferences).locale
|
||||||
|
dark_mode = env.get("preferences").as(Preferences).dark_mode
|
||||||
|
%>
|
||||||
|
|
||||||
<body class="<%= dark_mode.blank? ? "no" : dark_mode %>-theme">
|
<body class="<%= dark_mode.blank? ? "no" : dark_mode %>-theme">
|
||||||
<span style="display:none" id="dark_mode_pref"><%= env.get("preferences").as(Preferences).dark_mode %></span>
|
<span style="display:none" id="dark_mode_pref"><%= env.get("preferences").as(Preferences).dark_mode %></span>
|
||||||
|
|
|
@ -103,7 +103,7 @@ we're going to need to do it here in order to allow for translations.
|
||||||
</h3>
|
</h3>
|
||||||
<% elsif video.live_now %>
|
<% elsif video.live_now %>
|
||||||
<h3>
|
<h3>
|
||||||
<%= video.premiere_timestamp.try { |t| translate(locale, "Started streaming `x` ago", recode_date((Time.utc - t).ago, locale)) } %>
|
<%= video.premiere_timestamp.try { |t| translate(locale, "videoinfo_started_streaming_x_ago", recode_date((Time.utc - t).ago, locale)) } %>
|
||||||
</h3>
|
</h3>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
@ -112,8 +112,8 @@ we're going to need to do it here in order to allow for translations.
|
||||||
<div class="pure-u-1 pure-u-lg-1-5">
|
<div class="pure-u-1 pure-u-lg-1-5">
|
||||||
<div class="h-box">
|
<div class="h-box">
|
||||||
<span id="watch-on-youtube">
|
<span id="watch-on-youtube">
|
||||||
<a href="https://www.youtube.com/watch?v=<%= video.id %>"><%= translate(locale, "Watch on YouTube") %></a>
|
<a href="https://www.youtube.com/watch?v=<%= video.id %>"><%= translate(locale, "videoinfo_watch_on_youTube") %></a>
|
||||||
(<a href="https://www.youtube.com/embed/<%= video.id %>"><%= translate(locale, "Embed") %></a>)
|
(<a href="https://www.youtube.com/embed/<%= video.id %>"><%= translate(locale, "videoinfo_youTube_embed_link") %></a>)
|
||||||
</span>
|
</span>
|
||||||
<p id="watch-on-another-invidious-instance">
|
<p id="watch-on-another-invidious-instance">
|
||||||
<% if env.get("preferences").as(Preferences).automatic_instance_redirect%>
|
<% if env.get("preferences").as(Preferences).automatic_instance_redirect%>
|
||||||
|
@ -123,7 +123,7 @@ we're going to need to do it here in order to allow for translations.
|
||||||
<% end %>
|
<% end %>
|
||||||
</p>
|
</p>
|
||||||
<p id="embed-link">
|
<p id="embed-link">
|
||||||
<a href="<%= embed_link %>"><%= translate(locale, "Embed Link") %></a>
|
<a href="<%= embed_link %>"><%= translate(locale, "videoinfo_invidious_embed_link") %></a>
|
||||||
</p>
|
</p>
|
||||||
<p id="annotations">
|
<p id="annotations">
|
||||||
<% if params.annotations %>
|
<% if params.annotations %>
|
||||||
|
@ -189,7 +189,7 @@ we're going to need to do it here in order to allow for translations.
|
||||||
<% end %>
|
<% end %>
|
||||||
<% captions.each do |caption| %>
|
<% captions.each do |caption| %>
|
||||||
<option value='{"id":"<%= video.id %>","label":"<%= caption.name %>","title":"<%= URI.encode_www_form(video.title) %>-<%= video.id %>.<%= caption.language_code %>.vtt"}'>
|
<option value='{"id":"<%= video.id %>","label":"<%= caption.name %>","title":"<%= URI.encode_www_form(video.title) %>-<%= video.id %>.<%= caption.language_code %>.vtt"}'>
|
||||||
<%= translate(locale, "Subtitles - `x` (.vtt)", caption.name) %>
|
<%= translate(locale, "download_subtitles", translate(locale, caption.name)) %>
|
||||||
</option>
|
</option>
|
||||||
<% end %>
|
<% end %>
|
||||||
</select>
|
</select>
|
||||||
|
|
Loading…
Reference in a new issue