Merge branch 'master' into api-only

This commit is contained in:
Omar Roth 2019-08-02 10:43:39 -05:00
commit a339fec572
No known key found for this signature in database
GPG Key ID: B8254FB7EC3D37F2
7 changed files with 67 additions and 65 deletions

View File

@ -16,12 +16,12 @@
"Clear watch history?": "Verlauf löschen?", "Clear watch history?": "Verlauf löschen?",
"New password": "Neues Passwort", "New password": "Neues Passwort",
"New passwords must match": "Neue Passwörter müssen übereinstimmen", "New passwords must match": "Neue Passwörter müssen übereinstimmen",
"Cannot change password for Google accounts": "Das Passwort für Google -Konten kann nicht geändert werden", "Cannot change password for Google accounts": "Das Passwort für Google-Konten kann nicht geändert werden",
"Authorize token?": "Token autorisieren?", "Authorize token?": "Token autorisieren?",
"Authorize token for `x`?": "Token für `x` autorisieren?", "Authorize token for `x`?": "Token für `x` autorisieren?",
"Yes": "Ja", "Yes": "Ja",
"No": "Nein", "No": "Nein",
"Import and Export Data": "Import und Export Daten", "Import and Export Data": "Daten importieren und exportieren",
"Import": "Importieren", "Import": "Importieren",
"Import Invidious data": "Invidious Daten importieren", "Import Invidious data": "Invidious Daten importieren",
"Import YouTube subscriptions": "YouTube Abonnements importieren", "Import YouTube subscriptions": "YouTube Abonnements importieren",
@ -39,18 +39,18 @@
"source": "Quelle", "source": "Quelle",
"Log in": "Einloggen", "Log in": "Einloggen",
"Log in/register": "Einloggen/Registrieren", "Log in/register": "Einloggen/Registrieren",
"Log in with Google": "In Google einloggen", "Log in with Google": "Mit Google einloggen",
"User ID": "Benutzer ID", "User ID": "Benutzer ID",
"Password": "Passwort", "Password": "Passwort",
"Time (h:mm:ss):": "Zeit (h:mm:ss):", "Time (h:mm:ss):": "Zeit (h:mm:ss):",
"Text CAPTCHA": "Text CAPTCHA", "Text CAPTCHA": "Text CAPTCHA",
"Image CAPTCHA": "Image CAPTCHA", "Image CAPTCHA": "Bild CAPTCHA",
"Sign In": "Einloggen", "Sign In": "Einloggen",
"Register": "Registrieren", "Register": "Registrieren",
"E-mail": "Email", "E-mail": "Email",
"Google verification code": "Google Bestätigungscode", "Google verification code": "Google Bestätigungscode",
"Preferences": "Einstellungen", "Preferences": "Einstellungen",
"Player preferences": "Playereinstellungen", "Player preferences": "Wiedergabeeinstellungen",
"Always loop: ": "Immer wiederholen: ", "Always loop: ": "Immer wiederholen: ",
"Autoplay: ": "Automatisch abspielen: ", "Autoplay: ": "Automatisch abspielen: ",
"Play next by default: ": "Standardmäßig als nächstes abspielen: ", "Play next by default: ": "Standardmäßig als nächstes abspielen: ",
@ -59,7 +59,7 @@
"Proxy videos: ": "Proxy-Videos? ", "Proxy videos: ": "Proxy-Videos? ",
"Default speed: ": "Standardgeschwindigkeit: ", "Default speed: ": "Standardgeschwindigkeit: ",
"Preferred video quality: ": "Bevorzugte Videoqualität: ", "Preferred video quality: ": "Bevorzugte Videoqualität: ",
"Player volume: ": "Playerlautstärke: ", "Player volume: ": "Wiedergabelautstärke: ",
"Default comments: ": "Standardkommentare: ", "Default comments: ": "Standardkommentare: ",
"youtube": "youtube", "youtube": "youtube",
"reddit": "reddit", "reddit": "reddit",
@ -90,7 +90,7 @@
"`x` is live": "`x` ist live", "`x` is live": "`x` ist live",
"Data preferences": "Dateneinstellungen", "Data preferences": "Dateneinstellungen",
"Clear watch history": "Verlauf löschen", "Clear watch history": "Verlauf löschen",
"Import/export data": "Daten im- exportieren", "Import/export data": "Daten im-/exportieren",
"Change password": "Passwort ändern", "Change password": "Passwort ändern",
"Manage subscriptions": "Abonnements verwalten", "Manage subscriptions": "Abonnements verwalten",
"Manage tokens": "Token verwalten", "Manage tokens": "Token verwalten",
@ -106,7 +106,7 @@
"Report statistics: ": "Statistiken berichten? ", "Report statistics: ": "Statistiken berichten? ",
"Save preferences": "Einstellungen speichern", "Save preferences": "Einstellungen speichern",
"Subscription manager": "Abonnementverwaltung", "Subscription manager": "Abonnementverwaltung",
"Token manager": "Token-Manager", "Token manager": "Token-Verwaltung",
"Token": "Token", "Token": "Token",
"`x` subscriptions": "`x` Abonnements", "`x` subscriptions": "`x` Abonnements",
"`x` tokens": "`x` Tokens", "`x` tokens": "`x` Tokens",
@ -136,7 +136,7 @@
"Shared `x`": "Geteilt `x`", "Shared `x`": "Geteilt `x`",
"`x` views": "`x` Ansichten", "`x` views": "`x` Ansichten",
"Premieres in `x`": "Premieren in `x`", "Premieres in `x`": "Premieren in `x`",
"Premieres `x`": "", "Premieres `x`": "Erster Start `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.": "Hallo! Anscheinend haben Sie JavaScript deaktiviert. Klicken Sie hier um Kommentare anzuzeigen, beachten sie dass es etwas länger dauern kann um sie zu laden.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Hallo! Anscheinend haben Sie JavaScript deaktiviert. Klicken Sie hier um Kommentare anzuzeigen, beachten sie dass es etwas länger dauern kann um sie zu laden.",
"View YouTube comments": "YouTube Kommentare anzeigen", "View YouTube comments": "YouTube Kommentare anzeigen",
"View more comments on Reddit": "Mehr Kommentare auf Reddit anzeigen", "View more comments on Reddit": "Mehr Kommentare auf Reddit anzeigen",
@ -177,9 +177,9 @@
"Hidden field \"challenge\" is a required field": "Verstecktes Feld \"challenge\" ist eine erforderliche Eingabe", "Hidden field \"challenge\" is a required field": "Verstecktes Feld \"challenge\" ist eine erforderliche Eingabe",
"Hidden field \"token\" is a required field": "Verstecktes Feld \"token\" ist eine erforderliche Eingabe", "Hidden field \"token\" is a required field": "Verstecktes Feld \"token\" ist eine erforderliche Eingabe",
"Erroneous challenge": "Ungültiger Test", "Erroneous challenge": "Ungültiger Test",
"Erroneous token": "Ungöltige Marke", "Erroneous token": "Ungültiger Token",
"No such user": "Ungültiger Benutzer", "No such user": "Ungültiger Benutzer",
"Token is expired, please try again": "Marke ist abgelaufen, bitte erneut versuchen", "Token is expired, please try again": "Token ist abgelaufen, bitte erneut versuchen",
"English": "Englisch", "English": "Englisch",
"English (auto-generated)": "Englisch (automatisch erzeugt)", "English (auto-generated)": "Englisch (automatisch erzeugt)",
"Afrikaans": "Afrikaans", "Afrikaans": "Afrikaans",
@ -310,12 +310,12 @@
"%A %B %-d, %Y": "%A %B %-d, %Y", "%A %B %-d, %Y": "%A %B %-d, %Y",
"(edited)": "(editiert)", "(edited)": "(editiert)",
"YouTube comment permalink": "YouTube-Kommentar Permalink", "YouTube comment permalink": "YouTube-Kommentar Permalink",
"permalink": "", "permalink": "Permalink",
"`x` marked it with a ❤": "`x` markierte es mit einem ❤", "`x` marked it with a ❤": "`x` markierte es mit einem ❤",
"Audio mode": "Audiomodus", "Audio mode": "Audiomodus",
"Video mode": "Videomodus", "Video mode": "Videomodus",
"Videos": "Videos", "Videos": "Videos",
"Playlists": "Wiedergabelisten", "Playlists": "Wiedergabelisten",
"Community": "", "Community": "Community",
"Current version: ": "Aktuelle Version: " "Current version: ": "Aktuelle Version: "
} }

View File

@ -6,7 +6,7 @@
"Unsubscribe": "Se désabonner", "Unsubscribe": "Se désabonner",
"Subscribe": "S'abonner", "Subscribe": "S'abonner",
"View channel on YouTube": "Voir la chaîne sur YouTube", "View channel on YouTube": "Voir la chaîne sur YouTube",
"View playlist on YouTube": "", "View playlist on YouTube": "Voir la liste de lecture sur YouTube",
"newest": "Date d'ajout (la plus récente)", "newest": "Date d'ajout (la plus récente)",
"oldest": "Date d'ajout (la plus ancienne)", "oldest": "Date d'ajout (la plus ancienne)",
"popular": "Les plus populaires", "popular": "Les plus populaires",
@ -53,10 +53,10 @@
"Player preferences": "Préférences du lecteur", "Player preferences": "Préférences du lecteur",
"Always loop: ": "Lire en boucle : ", "Always loop: ": "Lire en boucle : ",
"Autoplay: ": "Lire automatiquement : ", "Autoplay: ": "Lire automatiquement : ",
"Play next by default: ": "Jouer suirvante par défaut : ", "Play next by default: ": "Lire les vidéos suivantes par défaut (similaire a YouTube) : ",
"Autoplay next video: ": "Lire automatiquement la vidéo suivante : ", "Autoplay next video: ": "Lire automatiquement la vidéo en file d'attente : ",
"Listen by default: ": "Audio uniquement : ", "Listen by default: ": "Audio uniquement : ",
"Proxy videos: ": "Charger les vidéos à travers un proxy ? ", "Proxy videos: ": "Charger les vidéos à travers un proxy : ",
"Default speed: ": "Vitesse par défaut : ", "Default speed: ": "Vitesse par défaut : ",
"Preferred video quality: ": "Qualité vidéo souhaitée : ", "Preferred video quality: ": "Qualité vidéo souhaitée : ",
"Player volume: ": "Volume du lecteur : ", "Player volume: ": "Volume du lecteur : ",
@ -64,16 +64,16 @@
"youtube": "YouTube", "youtube": "YouTube",
"reddit": "Reddit", "reddit": "Reddit",
"Default captions: ": "Sous-titres par défaut : ", "Default captions: ": "Sous-titres par défaut : ",
"Fallback captions: ": "Sous-titres de repli : ", "Fallback captions: ": "Fallback captions: ",
"Show related videos: ": "Voir les vidéos liées ? ", "Show related videos: ": "Voir les vidéos liées : ",
"Show annotations by default: ": "Voir les annotations par défaut ? ", "Show annotations by default: ": "Voir les annotations par défaut : ",
"Visual preferences": "Préférences du site", "Visual preferences": "Préférences du site",
"Dark mode: ": "Mode Sombre : ", "Dark mode: ": "Mode Sombre : ",
"Thin mode: ": "Mode Simplifié : ", "Thin mode: ": "Mode Simplifié : ",
"Subscription preferences": "Préférences de la page d'abonnements", "Subscription preferences": "Préférences de la page d'abonnements",
"Show annotations by default for subscribed channels: ": "Voir les annotations par défaut sur les chaînes suivies ? ", "Show annotations by default for subscribed channels: ": "Voir les annotations par défaut sur les chaînes suivies : ",
"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 : ",
"Number of videos shown in feed: ": "Nombre de vidéos montrées dans la page d'abonnements : ", "Number of videos shown in feed: ": "Nombre de vidéos affichées dans la page d'abonnements : ",
"Sort videos by: ": "Trier les vidéos par : ", "Sort videos by: ": "Trier les vidéos par : ",
"published": "date de publication", "published": "date de publication",
"published - reverse": "date de publication - inversé", "published - reverse": "date de publication - inversé",
@ -85,9 +85,9 @@
"Only show latest unwatched video from channel: ": "Afficher uniquement la dernière vidéo de la chaîne non regardée : ", "Only show latest unwatched video from channel: ": "Afficher uniquement la dernière vidéo de la chaîne non regardée : ",
"Only show unwatched: ": "Afficher uniquement les vidéos non regardées : ", "Only show unwatched: ": "Afficher uniquement les vidéos non regardées : ",
"Only show notifications (if there are any): ": "Afficher uniquement les notifications (s'il y en a) : ", "Only show notifications (if there are any): ": "Afficher uniquement les notifications (s'il y en a) : ",
"Enable web notifications": "", "Enable web notifications": "Activer les notifications web",
"`x` uploaded a video": "", "`x` uploaded a video": "`x` a partagé(e) une video",
"`x` is live": "", "`x` is live": "`x` est en direct",
"Data preferences": "Préférences liées aux données", "Data preferences": "Préférences liées aux données",
"Clear watch history": "Supprimer l'historique des vidéos regardées", "Clear watch history": "Supprimer l'historique des vidéos regardées",
"Import/export data": "Importer/exporter les données", "Import/export data": "Importer/exporter les données",
@ -99,11 +99,11 @@
"Administrator preferences": "Préferences d'Administrateur", "Administrator preferences": "Préferences d'Administrateur",
"Default homepage: ": "Page d'accueil par défaut : ", "Default homepage: ": "Page d'accueil par défaut : ",
"Feed menu: ": "Menu des Flux : ", "Feed menu: ": "Menu des Flux : ",
"Top enabled: ": "Top activé ? ", "Top enabled: ": "Top activé : ",
"CAPTCHA enabled: ": "CAPTCHA activé ? ", "CAPTCHA enabled: ": "CAPTCHA activé : ",
"Login enabled: ": "Connexion activé ? ", "Login enabled: ": "Connexion activé : ",
"Registration enabled: ": "Inscription activée ? ", "Registration enabled: ": "Inscription activée : ",
"Report statistics: ": "Télémétrie activé ? ", "Report statistics: ": "Télémétrie activé : ",
"Save preferences": "Enregistrer les préférences", "Save preferences": "Enregistrer les préférences",
"Subscription manager": "Gestionnaire d'abonnement", "Subscription manager": "Gestionnaire d'abonnement",
"Token manager": "Gestionnaire de tokens", "Token manager": "Gestionnaire de tokens",
@ -112,15 +112,15 @@
"`x` tokens": "`x` tokens", "`x` tokens": "`x` tokens",
"Import/export": "Importer/Exporter", "Import/export": "Importer/Exporter",
"unsubscribe": "se désabonner", "unsubscribe": "se désabonner",
"revoke": "annuler", "revoke": "révoquer",
"Subscriptions": "Abonnements", "Subscriptions": "Abonnements",
"`x` unseen notifications": "`x` notifications non vues", "`x` unseen notifications": "`x` notifications non vues",
"search": "Rechercher", "search": "rechercher",
"Log out": "Déconnexion", "Log out": "Déconnexion",
"Released under the AGPLv3 by Omar Roth.": "Publié sous licence AGPLv3 par Omar Roth.", "Released under the AGPLv3 by Omar Roth.": "Publié sous licence AGPLv3 par Omar Roth.",
"Source available here.": "Code Source.", "Source available here.": "Code Source disponible ici.",
"View JavaScript license information.": "Voir les informations des licences JavaScript.", "View JavaScript license information.": "Informations des licences JavaScript.",
"View privacy policy.": "Voir la politique de confidentialité.", "View privacy policy.": "Politique de confidentialité.",
"Trending": "Tendances", "Trending": "Tendances",
"Unlisted": "Non répertoriée", "Unlisted": "Non répertoriée",
"Watch on YouTube": "Voir la vidéo sur Youtube", "Watch on YouTube": "Voir la vidéo sur Youtube",
@ -130,13 +130,13 @@
"License: ": "Licence : ", "License: ": "Licence : ",
"Family friendly? ": "Tout Public ? ", "Family friendly? ": "Tout Public ? ",
"Wilson score: ": "Score de Wilson : ", "Wilson score: ": "Score de Wilson : ",
"Engagement: ": "Poucentage de spectateur aillant aimé Like ou Dislike la vidéo : ", "Engagement: ": "Poucentage de spectateur aillant Like ou Dislike la vidéo : ",
"Whitelisted regions: ": "Régions en liste blanche : ", "Whitelisted regions: ": "Régions sur liste blanche : ",
"Blacklisted regions: ": "Régions sur liste noire : ", "Blacklisted regions: ": "Régions sur liste noire : ",
"Shared `x`": "Ajoutée le `x`", "Shared `x`": "Ajoutée le `x`",
"`x` views": "`x` vues", "`x` views": "`x` vues",
"Premieres in `x`": "Première dans `x`", "Premieres in `x`": "Première dans `x`",
"Premieres `x`": "", "Premieres `x`": "Première le `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.": "Il semblerait que JavaScript soit désactivé. Cliquez ici pour voir les commentaires sans. Gardez à l'esprit que le chargement peut prendre plus de temps.", "Hi! Looks like you have JavaScript turned off. Click here to view comments, keep in mind they may take a bit longer to load.": "Il semblerait que JavaScript soit désactivé. Cliquez ici pour voir les commentaires sans. Gardez à l'esprit que le chargement peut prendre plus de temps.",
"View YouTube comments": "Voir les commentaires YouTube", "View YouTube comments": "Voir les commentaires YouTube",
"View more comments on Reddit": "Voir plus de commentaires sur Reddit", "View more comments on Reddit": "Voir plus de commentaires sur Reddit",
@ -170,16 +170,16 @@
"Load more": "Charger plus", "Load more": "Charger plus",
"`x` points": "`x` points", "`x` points": "`x` points",
"Could not create mix.": "Impossible de charger cette liste de lecture.", "Could not create mix.": "Impossible de charger cette liste de lecture.",
"Empty playlist": "La liste de lecture est vide", "Empty playlist": "Liste de lecture vide",
"Not a playlist.": "Liste de lecture invalide.", "Not a playlist.": "Liste de lecture invalide.",
"Playlist does not exist.": "La liste de lecture n'existe pas.", "Playlist does not exist.": "La liste de lecture n'existe pas.",
"Could not pull trending pages.": "Impossible de charger les pages de tendances.", "Could not pull trending pages.": "Impossible de charger les pages de tendances.",
"Hidden field \"challenge\" is a required field": "Hidden field \"challenge\" is a required field", "Hidden field \"challenge\" is a required field": "Hidden field \"challenge\" is a required field",
"Hidden field \"token\" is a required field": "Hidden field \"token\" is a required field", "Hidden field \"token\" is a required field": "Le champ caché \"token\" est requis",
"Erroneous challenge": "Erroneous challenge", "Erroneous challenge": "Challenge Erroné",
"Erroneous token": "Erroneous token", "Erroneous token": "Token Erroné",
"No such user": "No such user", "No such user": "Cet utilisateur n'existe pas",
"Token is expired, please try again": "Token is expired, please try again", "Token is expired, please try again": "Le token est expiré, veuillez réessayer",
"English": "Anglais", "English": "Anglais",
"English (auto-generated)": "Anglais (générés automatiquement)", "English (auto-generated)": "Anglais (générés automatiquement)",
"Afrikaans": "Afrikaans", "Afrikaans": "Afrikaans",
@ -309,13 +309,13 @@
"Download as: ": "Télécharger en : ", "Download as: ": "Télécharger en : ",
"%A %B %-d, %Y": "%A %-d %B %Y", "%A %B %-d, %Y": "%A %-d %B %Y",
"(edited)": "(modifié)", "(edited)": "(modifié)",
"YouTube comment permalink": "Lien YouTube permanent vers le commentaire", "YouTube comment permalink": "Lien permanent vers le commentaire sur YouTube",
"permalink": "", "permalink": "",
"`x` marked it with a ❤": "`x` l'a marqué d'un ❤", "`x` marked it with a ❤": "`x` l'a marqué d'un ❤",
"Audio mode": "Mode Audio", "Audio mode": "Mode Audio",
"Video mode": "Mode Vidéo", "Video mode": "Mode Vidéo",
"Videos": "Vidéos", "Videos": "Vidéos",
"Playlists": "Liste de lecture", "Playlists": "Liste de lecture",
"Community": "", "Community": "Communauté",
"Current version: ": "Version actuelle : " "Current version: ": "Version actuelle : "
} }

View File

@ -9,7 +9,7 @@
"View playlist on YouTube": "Skoða spilunarlisti á YouTube", "View playlist on YouTube": "Skoða spilunarlisti á YouTube",
"newest": "nýjasta", "newest": "nýjasta",
"oldest": "elsta", "oldest": "elsta",
"popular": "vinsællt", "popular": "vinsælt",
"last": "síðast", "last": "síðast",
"Next page": "Næsta síða", "Next page": "Næsta síða",
"Previous page": "Fyrri síða", "Previous page": "Fyrri síða",
@ -59,7 +59,7 @@
"Proxy videos: ": "Proxy myndbönd? ", "Proxy videos: ": "Proxy myndbönd? ",
"Default speed: ": "Sjálfgefinn hraði: ", "Default speed: ": "Sjálfgefinn hraði: ",
"Preferred video quality: ": "Æskilegt myndbands gæði: ", "Preferred video quality: ": "Æskilegt myndbands gæði: ",
"Player volume: ": "Spilara bindi: ", "Player volume: ": "Spilara hljóðstyrkur: ",
"Default comments: ": "Sjálfgefin ummæli: ", "Default comments: ": "Sjálfgefin ummæli: ",
"youtube": "youtube", "youtube": "youtube",
"reddit": "reddit", "reddit": "reddit",
@ -166,14 +166,14 @@
"Could not get channel info.": "Ekki tókst að fá rásarupplýsingar.", "Could not get channel info.": "Ekki tókst að fá rásarupplýsingar.",
"Could not fetch comments": "Ekki tókst að sækja ummæli", "Could not fetch comments": "Ekki tókst að sækja ummæli",
"View `x` replies.": "Skoða `x` svör.", "View `x` replies.": "Skoða `x` svör.",
"`x` ago": "' x ' síðan", "`x` ago": "`x` síðan",
"Load more": "Hlaða meira", "Load more": "Hlaða meira",
"`x` points.": "`x` stig.", "`x` points.": "`x` stig.",
"Could not create mix.": "Ekki tókst að búa til blöndu.", "Could not create mix.": "Ekki tókst að búa til blöndu.",
"Empty playlist": "Tómur spilunarlisti", "Empty playlist": "Tómur spilunarlisti",
"Not a playlist.": "Ekki spilunarlisti.", "Not a playlist.": "Ekki spilunarlisti.",
"Playlist does not exist.": "Spilunarlisti er ekki til.", "Playlist does not exist.": "Spilunarlisti er ekki til.",
"Could not pull trending pages.": "Ekki tókst að draga vinsællar síður.", "Could not pull trending pages.": "Ekki tókst að draga vinsælar síður.",
"Hidden field \"challenge\" is a required field": "Falinn reitur \"áskorun\" er nauðsynlegur reitur", "Hidden field \"challenge\" is a required field": "Falinn reitur \"áskorun\" er nauðsynlegur reitur",
"Hidden field \"token\" is a required field": "Falinn reitur \"tákn\" er nauðsynlegur reitur", "Hidden field \"token\" is a required field": "Falinn reitur \"tákn\" er nauðsynlegur reitur",
"Erroneous challenge": "Röng áskorun", "Erroneous challenge": "Röng áskorun",
@ -286,15 +286,15 @@
"Yiddish": "Jiddíska", "Yiddish": "Jiddíska",
"Yoruba": "Jórúba", "Yoruba": "Jórúba",
"Zulu": "Zúlú", "Zulu": "Zúlú",
"`x` years.": "' x ' ár.", "`x` years.": "`x` ár.",
"`x` months.": "' x ' mánuði.", "`x` months.": "`x` mánuði.",
"`x` weeks.": "`x` vikur.", "`x` weeks.": "`x` vikur.",
"`x` days.": "' x ' dagar.", "`x` days.": "`x` dagar.",
"`x` hours.": "`x` klukkustundir.", "`x` hours.": "`x` klukkustundir.",
"`x` minutes.": "`x` mínútur.", "`x` minutes.": "`x` mínútur.",
"`x` seconds.": "`x` sekúndur.", "`x` seconds.": "`x` sekúndur.",
"Fallback comments: ": "Vara ummæli: ", "Fallback comments: ": "Vara ummæli: ",
"Popular": "Vinsællt", "Popular": "Vinsælt",
"Top": "Topp", "Top": "Topp",
"About": "Um", "About": "Um",
"Rating: ": "Einkunn: ", "Rating: ": "Einkunn: ",
@ -316,4 +316,4 @@
"Videos": "Myndbönd", "Videos": "Myndbönd",
"Playlists": "Spilunarlistar", "Playlists": "Spilunarlistar",
"Current version: ": "Núverandi útgáfa: " "Current version: ": "Núverandi útgáfa: "
} }

View File

@ -698,7 +698,7 @@ get "/api/v1/channels/:ucid" do |env|
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", channel.author_thumbnail.gsub("=s100-", "=s#{quality}-") json.field "url", channel.author_thumbnail.gsub(/=\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", quality json.field "height", quality
end end
@ -740,7 +740,7 @@ get "/api/v1/channels/:ucid" do |env|
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", related_channel.author_thumbnail.gsub("=s48-", "=s#{quality}-") json.field "url", related_channel.author_thumbnail.gsub(/=\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", quality json.field "height", quality
end end
@ -1038,7 +1038,7 @@ get "/api/v1/playlists/:plid" do |env|
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", playlist.author_thumbnail.gsub("=s100-", "=s#{quality}-") json.field "url", playlist.author_thumbnail.gsub(/=\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", quality json.field "height", quality
end end

View File

@ -804,12 +804,13 @@ def fetch_channel_community(ucid, continuation, locale, config, kemal_config, fo
width = thumbnail["width"].as_i width = thumbnail["width"].as_i
height = thumbnail["height"].as_i height = thumbnail["height"].as_i
aspect_ratio = (width.to_f / height.to_f) aspect_ratio = (width.to_f / height.to_f)
url = thumbnail["url"].as_s.gsub(/=w\d+-h\d+(-p)?(-nd)?(-df)?(-rwa)?/, "=s640")
qualities = {320, 560, 640, 1280, 2000} qualities = {320, 560, 640, 1280, 2000}
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", thumbnail["url"].as_s.gsub("=s640-", "=s#{quality}-") json.field "url", url.gsub(/=s\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", (quality / aspect_ratio).ceil.to_i json.field "height", (quality / aspect_ratio).ceil.to_i
end end
@ -957,7 +958,8 @@ def get_about_info(ucid, locale)
banner = nil banner = nil
end end
description_html = about.xpath_node(%q(//div[contains(@class,"about-description")])).try &.to_s || "" description_html = about.xpath_node(%q(//div[contains(@class,"about-description")])).try &.to_s ||
%(<div class="about-description branded-page-box-padding"><pre></pre></div>)
paid = about.xpath_node(%q(//meta[@itemprop="paid"])).not_nil!["content"] == "True" paid = about.xpath_node(%q(//meta[@itemprop="paid"])).not_nil!["content"] == "True"
is_family_friendly = about.xpath_node(%q(//meta[@itemprop="isFamilyFriendly"])).not_nil!["content"] == "True" is_family_friendly = about.xpath_node(%q(//meta[@itemprop="isFamilyFriendly"])).not_nil!["content"] == "True"

View File

@ -176,7 +176,7 @@ struct SearchChannel
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", self.author_thumbnail.gsub("=s176-", "=s#{quality}-") json.field "url", self.author_thumbnail.gsub(/=\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", quality json.field "height", quality
end end

View File

@ -319,7 +319,7 @@ struct Video
qualities.each do |quality| qualities.each do |quality|
json.object do json.object do
json.field "url", self.author_thumbnail.gsub("=s48-", "=s#{quality}-") json.field "url", self.author_thumbnail.gsub(/=s\d+/, "=s#{quality}")
json.field "width", quality json.field "width", quality
json.field "height", quality json.field "height", quality
end end
@ -1179,7 +1179,7 @@ def fetch_video(id, region)
raise "Video unavailable." raise "Video unavailable."
end end
if info["reason"]? if info["reason"]? && !info["player_response"]["videoDetails"]?
raise info["reason"] raise info["reason"]
end end
@ -1187,7 +1187,7 @@ def fetch_video(id, region)
title = player_json["videoDetails"]["title"].as_s title = player_json["videoDetails"]["title"].as_s
author = player_json["videoDetails"]["author"]?.try &.as_s || "" author = player_json["videoDetails"]["author"]?.try &.as_s || ""
ucid = player_json["videoDetails"]["ucid"]?.try &.as_s || "" ucid = player_json["videoDetails"]["channelId"]?.try &.as_s || ""
views = html.xpath_node(%q(//meta[@itemprop="interactionCount"])) views = html.xpath_node(%q(//meta[@itemprop="interactionCount"]))
.try &.["content"].to_i64? || 0_i64 .try &.["content"].to_i64? || 0_i64