Merge pull request 'main' (#2) from RemixDev/deemix-webui:main into main

Reviewed-on: https://codeberg.org/m3troux/deemix-webui/pulls/2
This commit is contained in:
m3troux 2020-07-29 23:11:07 +02:00
commit f29fbf444c
7 changed files with 245 additions and 243 deletions

File diff suppressed because one or more lines are too long

View File

@ -156,3 +156,7 @@ socket.on('queueError', function(queueItem) {
socket.on('alreadyInQueue', function(data) {
toast(i18n.t('toasts.alreadyInQueue', [data.title]), 'playlist_add_check')
})
socket.on('loginNeededToDownload', function(data) {
toast(i18n.t('toasts.loginNeededToDownload'), 'report')
})

View File

@ -53,7 +53,7 @@ const en = {
newsChannel: 'News Channel',
questions: `If you have questions or problems with the app, search for a solution in the <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a> first. Then, if you don't find anything you can make a post with your issue on the subreddit.`,
beforeReporting: `Before reporting a bug make sure you're running the latest version of the app and that what you want to report is actually a bug and not something that's wrong only on your end.`,
beSure: `Make sure the bug is reproducible on another machines and also <strong>DO NOT</strong> report a bug if it's been already reported.`,
beSure: `Make sure the bug is reproducible on another machines and also <strong>DO NOT</strong> report a bug if it's been already reported.`,
duplicateReports: 'Duplicate bug reports will be closed, so keep an eye out on that.',
dontOpenIssues: `<strong>DO NOT</strong> open issues for asking questions, there is a subreddit for that.`,
newUI: `If you're fluent in python you could try to make a new UI for the app using the base library, or fix bugs in the library with a pull request on the <a href="https://codeberg.org/RemixDev/deemix" target="_blank">repo</a>.`,
@ -61,7 +61,7 @@ const en = {
otherLanguages: `If you're fluent in another programming language you could try to port deemix into other programming languages!`,
understandingCode: `You need help understanding the code? Just hit RemixDev up on Telegram or Reddit.`,
contributeWebUI: `If you know Vue.js (JavaScript), HTML or CSS you could contribute to the <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `You shoud remember that <strong>this is a free project</strong> and <strong>you should support the artists you love</strong> before supporting the developers.`,
itsFree: `You should remember that <strong>this is a free project</strong> and <strong>you should support the artists you love</strong> before supporting the developers.`,
notObligated: `Don't feel obligated to donate, I appreciate you anyway!`,
lincensedUnder: `This work is licensed under a
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
@ -158,7 +158,8 @@ const en = {
startAddingArtist: 'Adding {0} albums to queue',
finishAddingArtist: 'Added {0} albums to queue',
startConvertingSpotifyPlaylist: 'Converting spotify tracks to deezer tracks',
finishConvertingSpotifyPlaylist: 'Spotify playlist converted'
finishConvertingSpotifyPlaylist: 'Spotify playlist converted',
loginNeededToDownload: 'You need to log in to download tracks!'
},
settings: {
title: 'Settings',

View File

@ -7,10 +7,10 @@ const fr = {
by: 'par {0}',
in: 'en {0}',
download_hint: 'Télécharger',
play_hint: 'Jouer',
toggle_download_tab_hint: 'Agrandir/Réduire',
clean_queue_hint: 'Effacer les tâches terminées',
cancel_queue_hint: 'Tout Annuler',
play_hint: 'Lire',
toggle_download_tab_hint: 'Développer/Réduire',
clean_queue_hint: 'Retirer les tâches terminées',
cancel_queue_hint: 'Tout annuler',
listTabs: {
empty: '',
all: 'tout',
@ -21,133 +21,132 @@ const fr = {
title: 'titre | titres',
track: 'piste | pistes',
trackN: '0 pistes | {n} piste | {n} pistes',
releaseN: '0 releases | {n} sortie | {n} sorties',
releaseN: '0 parutions | {n} parution | {n} parutions',
playlist: 'playlist | playlists',
compile: 'compilation | compilations',
ep: 'ep | eps',
spotifyPlaylist: 'playlist spotify | playlists spotify',
releaseDate: 'date de sortie',
releaseDate: 'date de parution',
error: 'erreur'
}
},
about: {
titles: {
usefulLinks: 'Liens Utiles',
bugReports: 'Rapporter un Bug',
contributing: 'Contribuer',
donations: 'Donations',
bugReports: 'Rapports de Bug',
contributing: 'Contribution',
donations: 'Dons',
license: 'Licence'
},
subtitles: {
bugReports: 'Y a-t-il quelque chose qui ne fonctionne pas avec deemix ? Dites-le nous !',
bugReports: 'Y a-t-il quelque chose qui ne fonctionne pas dans deemix ? Dites-le nous !',
contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !',
donations: 'Vous souhaitez contribuer financièrement ? Vous pourriez faire un don !'
donations: 'Vous souhaitez contribuer financièrement ? Vous pouvez faire un don !'
},
usesLibrary:
'Cette application utilise la librairie <strong>deemix</strong>, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.',
thanks: `Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> pour m'avoir aidé avec ce projet et à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour avoir réalisé l'icône.`,
upToDate: `Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal d'information</a> sur Telegram.`,
'Cette application utilise la bibliothèque <strong>deemix</strong>, que vous pouvez exploiter afin de créer votre propre interface utilisateur pour deemix.',
thanks: "Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> de m'avoir aidé dans ce projet ainsi qu\'à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour avoir réalisé l'icône.",
upToDate: 'Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal de nouveautés</a> sur Telegram.',
officialWebsite: 'Site Officiel',
officialRepo: 'Site Officiel de la Librairie',
officialWebuiRepo: 'Site Officiel de WebUI',
officialSubreddit: 'Subreddit Officiel',
newsChannel: `Canal d'informations`,
questions: `Si vous avez des questions ou soucis avec l'application, cherchez une solution sur le <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a> d'abord. Ensuite, vous pouvez créer une publication sur le subreddit en décrivant votre problème.`,
beforeReporting: `Avant de rapporter un bug, assurez vous d'avoir la dernière version de l'application et que ce que vous voulez rapporter est bien un bug et non pas quelque chose qui ne fonctionne pas juste pour vous.`,
beSure: `Assurez vous que le bug est reproductible sur d'autres machines et <strong>NE PAS</strong> rapporter un bug si il l'est déjà par quelqu'un d'autre.`,
duplicateReports: 'Les doublons de rapports de bug seront fermés, gardez un œil sur cela.',
dontOpenIssues: `<strong>NE PAS</strong> ouvrir un problème pour poser des questions, il y a un subreddit pour cela.`,
newUI: `Si vous maitrisez le python, vous pourriez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la librairie de base, ou corriger des bugs de cette librairie sur son <a href="https://codeberg.org/RemixDev/deemix" target="_blank">repo git</a>.`,
acceptFeatures: `J'accepte également de nouvelles fonctionnalités, mais pas de choses complexes, car elles peuvent être implémentées directement dans l'application et non dans la librairie.`,
otherLanguages: `Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de porter deemix dans d'autres langages de programmation !`,
understandingCode: `Vous avez besoin d'aide pour comprendre le code ? Contactez RemixDev sur Telegram ou Reddit.`,
contributeWebUI: `Si vous vous y connaissez en Vue.js (JavaScript), HTML ou CSS vous pourriez contribuer au <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `N'oubliez pas que <strong>ce projet est gratuit</strong> et que <strong>vous devriez soutenir les artistes que vous aimez</strong> avant de supporter les développeurs.`,
notObligated: `Ne vous sentez pas obligé de faire un don, je vous apprécie quand même !`,
lincensedUnder: `Ce projet est fourni sous la
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>Licence publique générale GNU 3.0</a
>.`
officialRepo: 'Répertoire de dépôt officiel de la bibiliothèque',
officialWebuiRepo: 'Répertoire de dépôt officiel de la WebUI',
officialSubreddit: 'Subreddit officiel',
newsChannel: 'Canal de nouveautés',
questions: `Si vous avez des questions ou des problèmes avec l'application, cherchez d'abord une solution dans le <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Ensuite, si vous ne trouvez rien, vous pouvez publier un message avec votre problème sur le subreddit.`,
beforeReporting: "Avant de signaler un bug, assurez-vous que vous exécutez la dernière version de l'application et que ce que vous voulez signaler est bien un bug et non quelque chose qui ne va pas de votre côté.",
beSure: "Assurez-vous que le bug est reproductible sur d'autres machines et aussi de <strong>NE PAS</strong> signaler un bug si celui-ci a déjà été mentionné.",
duplicateReports: 'Les doublons de rapports de bug seront supprimés, alors gardez un œil sur cela.',
dontOpenIssues: "<strong>NE PAS</strong> ouvrir un nouveau problème pour poser des questions, il existe un subreddit pour cela.",
newUI: `Si vous maîtrisez python, vous pouvez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la bibliothèque de base, ou corriger des bugs dans la bibliothèque avec une requête sur le <a href="https://codeberg.org/RemixDev/deemix" target="_blank">répertoire de dépôt</a>.`,
acceptFeatures: "J'accepte également les fonctionnalités, mais pas de choses complexes, car elles peuvent être implémentées directement dans l'application et non dans la bibliothèque.",
otherLanguages: "Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de transposer deemix dans d'autres langages de programmation !",
understandingCode: "Vous avez besoin d'aide pour comprendre le code ? Contactez simplement RemixDev sur Telegram ou Reddit.",
contributeWebUI: `Si vous vous y connaissez en Vue.js (JavaScript), HTML ou CSS vous pouvez contribuer à la <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: "N'oubliez pas que <strong>ceci est un projet gratuit</strong> et que <strong>vous devez soutenir les artistes que vous appréciez</strong> avant de supporter les développeurs.",
notObligated: "Ne vous sentez pas obligé de faire un don, je vous apprécie quand même !",
lincensedUnder: `Ce projet est autorisé dans le cadre d'une
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.fr.html" target="_blank">
Licence publique générale GNU 3.0</a>.`
},
charts: {
title: 'Classements',
changeCountry: 'Changer le Pays',
download: 'Télécharger le Classement'
title: 'Hit-Parade',
changeCountry: 'Changer de Pays',
download: 'Télécharger le Hit-Parade'
},
errors: {
title: 'Erreurs pour {0}',
ids: {
invalidURL: 'URL non reconnue',
unsupportedURL: 'URL pas encore prise en charge',
ISRCnotOnDeezer: "L'ISRC de la piste n'est pas encore disponible sur deezer",
invalidURL: "Cette URL n'est pas reconnue",
unsupportedURL: "Cette URL n'est pas supportée actuellement",
ISRCnotOnDeezer: "L'ISRC de la piste n'est pas disponible sur Deezer",
notYourPrivatePlaylist: "Vous ne pouvez pas télécharger les playlists privées de quelqu'un d'autre.",
spotifyDisabled: 'Les Fonctionnalités Spotify ne sont pas bien configurées.',
trackNotOnDeezer: 'Piste introuvable sur deezer !',
albumNotOnDeezer: 'Album introuvable sur deezer !',
notOnDeezer: 'Piste non disponible sur Deezer !',
notEncoded: 'Piste pas encore encodée !',
notEncodedNoAlternative: 'Piste pas encore encodée et aucune alternative trouvée !',
wrongBitrate: 'Piste introuvable au débit souhaité.',
wrongBitrateNoAlternative: 'Piste introuvable au débit souhaité et aucune alternative trouvée !',
no360RA: "La piste n'est pas disponible avec Reality Audio 360.",
notAvailable: 'Piste non disponible sur les serveurs de deezer !',
notAvailableNoAlternative: 'Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !'
spotifyDisabled: 'Les Fonctionnalités Spotify ne sont pas configurées correctement.',
trackNotOnDeezer: 'La piste est introuvable sur Deezer !',
albumNotOnDeezer: "L'album est introuvable sur Deezer !",
notOnDeezer: 'La piste est indisponible sur Deezer !',
notEncoded: "La piste n'a pas encore été encodée !",
notEncodedNoAlternative: "La piste n'a pas encore été encodée et aucune alternative n'a été trouvée !",
wrongBitrate: 'La piste est introuvable au débit souhaité.',
wrongBitrateNoAlternative: "La piste est introuvable au débit souhaité et aucune alternative n'a été trouvée !",
no360RA: "La piste n'est pas disponible au format Reality Audio 360.",
notAvailable: 'La piste est indisponible sur les serveurs de Deezer !',
notAvailableNoAlternative: "La piste est indisponible sur les serveurs de Deezer et aucune alternative n'a été trouvée !"
}
},
favorites: {
title: 'Favoris',
noPlaylists: 'Aucune Playlist trouvée',
noAlbums: 'Aucuns Album Favori trouvé',
noArtists: 'Aucun Artiste Favori trouvé',
noTracks: 'Aucune Piste Favorite trouvée'
noPlaylists: "Aucune playlist n'a été trouvée",
noAlbums: "Aucun album favori n'a été trouvé",
noArtists: "Aucun artiste favori n'a été trouvé",
noTracks: "Aucune piste favorite n'a été trouvée"
},
home: {
needTologin: 'Vous devez vous connecter à votre compte Deezer avant de pouvoir commencer le téléchargement.',
openSettings: 'Ouvrir les Paramètres',
openSettings: 'Ouvrir les paramètres',
sections: {
popularPlaylists: 'Playlists Populaires',
popularPlaylists: 'Playlists populaires',
popularAlbums: 'Albums les plus diffusés'
}
},
linkAnalyzer: {
info:
"Vous pouvez utiliser cette section afin de trouver plus d'informations sur le lien que vous essayer de télcharger.",
"Vous pouvez utiliser cette section pour obtenir plus d'informations sur le lien que vous essayez de télécharger.",
useful:
"C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.",
linkNotSupported: "Ce lien n'est pas encore supporté",
linkNotSupportedYet: 'Seems like this link is not yet supported, try analyzing another one.',
linkNotSupported: "Ce lien n'est pas encore pris en charge",
linkNotSupportedYet: "Il semble que ce lien ne soit pas encore pris en charge, essayez d'en analyser un autre.",
table: {
id: 'ID',
isrc: 'ISRC',
upc: 'UPC',
duration: 'Durée',
diskNumber: 'Numéro de Disque',
trackNumber: 'Numéro de Piste',
releaseDate: 'Date de Sortie',
diskNumber: 'Numéro de disque',
trackNumber: 'Numéro de disque',
releaseDate: 'Date de parution',
bpm: 'BPM',
label: 'Label',
recordType: "Type d'Enregistrement",
recordType: "Type d'enregistrement",
genres: 'Genres',
tracklist: 'Tracklist'
tracklist: 'Liste des pistes'
}
},
search: {
startSearching: 'Lancer la recherche !',
startSearching: 'Commencer une recherche !',
description:
'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist .... tout ! Vous pouvez également copier-coller un lien Deezer',
'Vous pouvez rechercher une piste, un album entier, un artiste, une playlist.... tout ! Vous pouvez également copier-coller un lien Deezer',
fans: '{0} fans',
noResults: 'Aucun résultat',
noResultsTrack: 'Aucune Piste trouvée',
noResultsAlbum: 'Aucun Album trouvé',
noResultsArtist: 'Aucun Artiste trouvé',
noResultsPlaylist: 'Aucune Playlist trouvée'
noResultsTrack: "Aucune piste n'a été trouvée",
noResultsAlbum: "Aucun album n'a été trouvé",
noResultsArtist: "Aucun artiste n'a été trouvé",
noResultsPlaylist: "Aucune playlist n'a été trouvée"
},
searchbar: 'Recherchez tout ce que vous voulez (ou copier-collez un lien)',
searchbar: 'Recherchez tout ce que vous voulez (ou copier-collez simplement un lien)',
downloads: 'téléchargements',
toasts: {
addedToQueue: "{0} ajouté à la file d'attente",
alreadyInQueue: "{0} est déjà en file d'attente !",
finishDownload: '{0} a fini de télécharger.',
finishDownload: '{0} a été téléchargé.',
allDownloaded: 'Tous les téléchargements sont terminés !',
refreshFavs: 'Actualisation terminée !',
loggingIn: 'Connexion',
@ -158,9 +157,9 @@ const fr = {
cancellingCurrentItem: "Annulation de l'élément actuel.",
currentItemCancelled: 'Élément actuel annulé.',
startAddingArtist: "Ajout de {0} albums en file d'attente",
finishAddingArtist: "Ajouté {0} en file d'attente",
startConvertingSpotifyPlaylist: 'Converting spotify tracks to deezer tracks',
finishConvertingSpotifyPlaylist: 'Spotify playlist converted'
finishAddingArtist: "{0} albums ajoutés en file d'attente",
startConvertingSpotifyPlaylist: 'Conversion de pistes Spotify en pistes Deezer',
finishConvertingSpotifyPlaylist: 'Playlist Spotify convertie'
},
settings: {
title: 'Paramètres',
@ -169,47 +168,47 @@ const fr = {
title: 'Connexion',
loggedIn: 'Vous êtes connecté en tant que {username}',
arl: {
question: 'Comment obtenir mon propre ARL ?',
question: 'Comment puis-je obtenir mon ARL personnel ?',
update: "Mettre à jour l'ARL"
},
logout: 'Déconnecter'
logout: 'Déconnexion'
},
appearance: {
title: 'Apparence',
slimDownloadTab: 'Onglet de téléchargement mince'
slimDownloadTab: 'Onglet de téléchargement plus petit'
},
downloadPath: {
title: 'Dossier de Téléchargement'
title: 'Emplacement de téléchargement'
},
templates: {
title: 'Modèles',
tracknameTemplate: 'Modèle de nom de piste',
albumTracknameTemplate: "Modèle de piste d'album",
playlistTracknameTemplate: 'Modèle de piste de playlist'
title: 'Gabarits',
tracknameTemplate: 'Gabarit pour le nom de piste',
albumTracknameTemplate: "Gabarit pour le nom de piste de l'album",
playlistTracknameTemplate: 'Gabarit pour le nom de piste de la playlist'
},
folders: {
title: 'Dossiers',
createPlaylistFolder: 'Créer un dossier pour Playlists',
playlistNameTemplate: 'Modèle de dossier pour Playlist',
createArtistFolder: 'Créer un dossier pour Artiste',
artistNameTemplate: 'Modèle de dossier pour Artiste',
createAlbumFolder: 'Créer un dossier pour Album',
albumNameTemplate: 'Modèle de dossier pour Album',
createCDFolder: 'Créer un dossier pour CDs',
createStructurePlaylist: 'Créer une structure de dossiers pour Playlists',
createSingleFolder: 'Créer une structure de dossiers pour Singles'
createPlaylistFolder: 'Générer des dossiers par playlist',
playlistNameTemplate: 'Gabarit pour le nom du dossier de playlist',
createArtistFolder: 'Générer des dossiers par artiste',
artistNameTemplate: "Gabarit pour le nom du dossier d'artiste",
createAlbumFolder: 'Générer des dossiers par album',
albumNameTemplate: "Gabarit pour le nom du dossier d'album",
createCDFolder: 'Générer des dossiers par CD',
createStructurePlaylist: 'Créer une structure de dossiers pour les playlists',
createSingleFolder: 'Créer une structure de dossiers pour les singles'
},
trackTitles: {
title: 'Titres de pistes',
padTracks: 'Pad tracks',
paddingSize: 'Écraser la taille du remplissage',
illegalCharacterReplacer: 'Caractère de remplacement illégal'
illegalCharacterReplacer: 'Remplacement de caractère inapproprié'
},
downloads: {
title: 'Téléchargements',
queueConcurrency: 'Téléchargements Simultanés',
maxBitrate: {
title: 'Débit Préféré',
title: 'Débit préféré',
9: 'FLAC 1411kbps',
3: 'MP3 320kbps',
1: 'MP3 128kbps'
@ -217,56 +216,56 @@ const fr = {
overwriteFile: {
title: 'Dois-je écraser les fichiers ?',
y: 'Oui, écraser le fichier',
n: "Non, n'écrasez pas le fichier",
t: 'Écraser uniquement les balises'
n: "Non, ne pas écraser le fichier",
t: 'Écraser uniquement les métadonnées'
},
fallbackBitrate: 'Débit de secours',
fallbackSearch: 'Recherche de secours',
logErrors: 'Créer des fichiers journaux pour les erreurs',
logSearched: 'Créer des fichiers journaux pour les pistes recherchées',
createM3U8File: 'Créer un fichier playlist',
syncedLyrics: 'Créer des fichiers .lyr (Sync Paroles)',
playlistFilenameTemplate: 'Modèle de nom de fichier de Playlist',
saveDownloadQueue: "Enregistrer la file d'attente lors de la fermeture de l'application"
fallbackBitrate: 'Débits plus faibles',
fallbackSearch: 'Rechercher un débit plus faible',
logErrors: "Créer un fichier journal d'erreurs",
logSearched: 'Créer un fichier journal des pistes recherchées',
createM3U8File: 'Créer un fichier de playlist',
syncedLyrics: 'Créer des fichiers .lyr (Paroles Synchronisées)',
playlistFilenameTemplate: 'Gabarit du nom de fichier de la playlist',
saveDownloadQueue: "Enregistrer la file d'attente de téléchargement lors de la fermeture de l'application"
},
covers: {
title: "Couvertures d'album",
saveArtwork: 'Enregistrer les couvertures',
coverImageTemplate: 'Modèle de nom de la couverture',
title: "Pochettes d'albums",
saveArtwork: 'Enregistrer les pochettes',
coverImageTemplate: 'Gabarit pour le nom de la pochette',
saveArtworkArtist: "Enregistrer l'image de l'artiste",
artistImageTemplate: "Modèle de l'image de l'artiste",
artistImageTemplate: "Gabarit pour le nom de l'image de l'artiste",
localArtworkSize: "Taille de l'illustration locale",
embeddedArtworkSize: "Taille de l'illustration intégrée",
embeddedArtworkSize: "Taille de l'illustration incorporée",
localArtworkFormat: {
title: "Dans quel format voulez-vous que l'illustration locale soit ?",
title: "Dans quel format souhaitez-vous l'illustration locale ?",
jpg: 'Une image jpeg',
png: 'Une image png',
both: 'Les deux, jpeg et png'
both: 'À la fois jpeg et png'
},
jpegImageQuality: "Qualité d'image JPEG"
},
tags: {
head: 'Balises à sauvegarder',
head: 'Métadonnées à sauvegarder',
title: 'Titre',
artist: 'Artiste',
album: 'Album',
cover: 'Couverture',
trackNumber: 'Numéro de Piste',
trackTotal: 'Nombre de Pistes',
discNumber: 'Numéro du Disque',
discTotal: 'Nombre de Disques',
albumArtist: "Artiste de l'Album",
cover: 'Reprise',
trackNumber: 'Numéro de piste',
trackTotal: 'Nombre de pistes',
discNumber: 'Numéro du disque',
discTotal: 'Nombre de disques',
albumArtist: "Artiste de l'album",
genre: 'Genre',
year: 'Année',
date: 'Date',
explicit: 'Paroles Explicites',
isrc: 'ISRC',
length: 'Durée de Piste',
length: 'Longueur de la piste',
barcode: "Code-barres de l'album (UPC)",
bpm: 'BPM',
replayGain: 'Gain du Replay',
label: "Label de l'Album",
lyrics: 'Paroles non synchronisées',
replayGain: 'Gain en Relecture (Replay Gain)',
label: "Label de l'album",
lyrics: 'Paroles non-synchronisées',
copyright: "Droits d'auteur (copyright)",
composer: 'Compositeur',
involvedPeople: 'Personnes impliquées'
@ -277,15 +276,15 @@ const fr = {
useNullSeparator: 'Utiliser un séparateur nul',
saveID3v1: "Enregistrez l'ID3v1 également",
multiArtistSeparator: {
title: 'Comment aimeriez-vous séparer vos artistes ?',
title: 'Comment aimeriez-vous séparer les artistes ?',
nothing: "Enregistrer uniquement l'artiste principal",
default: 'En utilisant la spécification standard',
andFeat: 'En utilisant & et feat.',
using: 'En utilisant "{0}"'
},
singleAlbumArtist: "Enregistrer uniquement l'artiste principal de l'album",
albumVariousArtists: `Conserver "Artistes Divers" dans les artistes de l'album`,
removeAlbumVersion: `Supprimer "Version de l'album" du titre de la piste`,
albumVariousArtists: `Conserver "Various Artists" dans les artistes de l'album`,
removeAlbumVersion: `Supprimer "Album Version" du titre de la piste`,
removeDuplicateArtists: "Supprimer les combinaisons d'artistes",
dateFormat: {
title: 'Format de date pour les fichiers FLAC',
@ -294,31 +293,31 @@ const fr = {
day: 'JJ'
},
featuredToTitle: {
title: 'Que dois-je faire avec les artistes en vedette ?',
0: 'Rien',
1: 'Retirez-les du titre',
3: "Supprimez-les du titre et du titre de l'album",
2: 'Déplacez-les vers le titre'
title: 'Que dois-je faire avec les artistes participants (featuring) ?',
0: 'Ne rien faire',
1: 'Les retirer du titre de la piste',
3: "Les supprimer du titre de la piste et du titre de l'album",
2: 'Les déplacer vers le titre de la piste'
},
titleCasing: 'Titre de la boîte',
artistCasing: "Boite de l'artiste",
titleCasing: 'Casse pour le titre',
artistCasing: "Casse pour l'artiste",
casing: {
nothing: 'Rester inchangé',
lower: 'minuscule',
upper: 'MAJUSCULE',
start: 'Début De Chaque Mot',
sentence: 'Comme une phrase'
nothing: 'Conserver inchangé',
lower: 'minuscules',
upper: 'MAJUSCULES',
start: 'Majuscule Au Début De Chaque Mot',
sentence: 'Majuscule seulement au début de la phrase'
},
previewVolume: 'Aperçu du volume',
previewVolume: 'Volume sonore des aperçus de pistes',
executeCommand: {
title: 'Commande à exécuter après le téléchargement',
description: 'Laisser vide pour aucune action'
description: "Laisser vide pour qu'aucune action n'ait lieu"
}
},
spotify: {
title: 'Fonctionnalités Spotify',
clientID: 'ID Client Spotify',
clientSecret: 'Secret Client Spotify',
clientID: 'clientID Spotify',
clientSecret: 'Client Secret Spotify',
username: "Nom d'utilisateur Spotify"
},
reset: 'Rétablir les valeurs par défaut',
@ -331,15 +330,15 @@ const fr = {
},
sidebar: {
home: 'accueil',
search: 'chercher',
charts: 'classements',
search: 'recherche',
charts: 'hit-parade',
favorites: 'favoris',
linkAnalyzer: 'analyseur de liens',
settings: 'paramètres',
about: 'à propos'
},
tracklist: {
downloadSelection: 'Section des téléchargements'
downloadSelection: 'Télécharger la sélection'
}
}

View File

@ -160,7 +160,8 @@ const it = {
startAddingArtist: 'Aggiungendo gli album di {0} alla coda',
finishAddingArtist: 'Aggiunto gli album di {0} alla coda',
startConvertingSpotifyPlaylist: 'Convertendo i brani da spotify a deezer',
finishConvertingSpotifyPlaylist: 'Playlist di spotify convertita'
finishConvertingSpotifyPlaylist: 'Playlist di spotify convertita',
loginNeededToDownload: 'Devi accedere prima di poter scaricare brani!'
},
settings: {
title: 'Impostazioni',

View File

@ -3,10 +3,10 @@ const ru = {
welcome: 'Добро пожаловать в deemix',
back: 'назад',
loading: 'загрузка',
download: 'Скачать {0}',
download: 'Загрузить {0}',
by: '{0}',
in: 'из {0}',
download_hint: 'Скачать',
download_hint: 'Загрузить',
play_hint: 'Прослушать',
toggle_download_tab_hint: 'Показать/Свернуть',
clean_queue_hint: 'Очистить завершённые',
@ -39,11 +39,11 @@ const ru = {
license: 'Лицензия'
},
subtitles: {
bugReports: "Что-то не работает? Скажите нам!",
contributing: 'Хотите поддержать проект? Это можно сделать разными способами!',
bugReports: "Что-то не работает? Сообщите нам!",
contributing: 'Хотите внести свой вклад в развитие этого проекта? Это можно сделать разными способами!',
donations: 'Хотите поддержать материально? Можно сделать пожертвование!'
},
usesLibrary: 'Приложение использует библиотеку <strong>deemix</strong>, с помощью которой вы можете сделать собственный UI deemix.',
usesLibrary: 'Приложение использует библиотеку <strong>deemix</strong>, с помощью которой вы можете разработать собственный UI deemix.',
thanks: `Спасибо <strong>rtonno</strong>, <strong>uhwot</strong> и <strong>lollilol</strong> за помощь с этим проектом, а также <strong>BasCurtiz</strong> и <strong>scarvimane</strong> за иконку.`,
upToDate: `Следите за последними обновлениями на <a href="https://t.me/RemixDevNews" target="_blank">канале</a> в Telegram.`,
officialWebsite: 'Официальный сайт',
@ -51,19 +51,19 @@ const ru = {
officialWebuiRepo: 'Официальный репозиторий WebUI',
officialSubreddit: 'Официальный сабреддит',
newsChannel: 'Канал новостей',
questions: `Если у вас возникли вопросы или проблемы с приложением, поищите решение на <a href="https://www.reddit.com/r/deemix" target="_blank">сабреддите</a>. Если решения не нашли, можете создать новый пост и описать вашу проблему.`,
beforeReporting: `Перед тем, как сообщать об ошибках, убедитесь, что у вас стоит последняя версия приложения и что проблема не на вашей стороне.`,
beSure: `Убедитесь, что ошибка возникает и на других устройствах. Также <strong>НЕ </strong> сообщайте об ошибке, если про неё уже известно.`,
questions: `Если у вас возникли вопросы или проблемы с приложением, поищите решение на <a href="https://www.reddit.com/r/deemix" target="_blank">сабреддите</a>. Если не нашли решение, можете создать новый пост и описать вашу проблему.`,
beforeReporting: `Перед тем, как сообщать об ошибках, убедитесь, что вы используете последнюю версию приложения и что проблема не на вашей стороне.`,
beSure: `Убедитесь, что ошибка возникает и на других устройствах. Также <strong>НЕ</strong> сообщайте об ошибке, если про неё уже известно.`,
duplicateReports: 'Повторные сообщения об ошибках рассматриваться не будут.',
dontOpenIssues: `<strong>НЕ НАДО</strong> создавать задачу с простым вопросом, для этого есть сабреддит.`,
dontOpenIssues: `<strong>НЕ</strong> используйте репозиторий для вопросов автору, для этого есть сабреддит.`,
newUI: `Если вы хорошо знаете python, то можете сделать новый UI для приложения с использованием базовой библиотеки или пофиксить в ней баги и сделать pull request в <a href="https://codeberg.org/RemixDev/deemix" target="_blank">репозитории</a>.`,
acceptFeatures: `Новые фичи также приветствуются, но не слишком сложные, так как они будут добавлены в приложение, а не в саму библиотеку.`,
acceptFeatures: `Можете предлагать новые функции, но не слишком сложные, так как они будут добавлены в приложение, а не в саму библиотеку.`,
otherLanguages: `Если вы хорошо знаете другой язык программирования, можете портировать на нём deemix!`,
understandingCode: `Не можете разобраться в коде? Напишите RemixDev в Telegram или на Reddit.`,
contributeWebUI: `Если вы знаете Vue.js (JavaScript), HTML или CSS, можете внести вклад в <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует <strong>поддерживать исполнителей</strong>, которые вам нравятся прежде, чем поддерживать разработчиков.`,
understandingCode: `Не можете понять код? Свяжитесь с RemixDev в Telegram или на Reddit.`,
contributeWebUI: `Если вы знаете Vue.js (JavaScript), HTML или CSS, можете внести вклад в развитие <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует прежде <strong>поддержать понравившихся исполнителей</strong>, а затем уже поддержать разработчиков.`,
notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`,
lincensedUnder: `Проект распространяется на условиях лицензии
lincensedUnder: `Проект выпускается под лицензией
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a
>.`
@ -71,26 +71,26 @@ const ru = {
charts: {
title: 'Чарты',
changeCountry: 'Изменить страну',
download: 'Скачать чарт'
download: 'Загрузить чарт'
},
errors: {
title: 'Ошибки {0}',
ids: {
invalidURL: 'URL не распознан',
unsupportedURL: 'URL не поддерживается',
ISRCnotOnDeezer: 'ISRC трека недоступен на deezer',
notYourPrivatePlaylist: "Нельзя скачивать чужие плейлисты.",
ISRCnotOnDeezer: 'ISRC данного трека не доступен на Deezer',
notYourPrivatePlaylist: "Вы не можете загружать чужие приватные плейлисты.",
spotifyDisabled: 'Неправильно настроены параметры Spotify.',
trackNotOnDeezer: 'Трек не найден на deezer!',
albumNotOnDeezer: 'Альбом не найден deezer!',
notOnDeezer: 'Трек недоступен на Deezer!',
trackNotOnDeezer: 'Трек не найден на Deezer!',
albumNotOnDeezer: 'Альбом не найден на Deezer!',
notOnDeezer: 'Трек не доступен на Deezer!',
notEncoded: 'Трек ещё не перекодирован!',
notEncodedNoAlternative: 'Трек не перекодирован, альтернатив не найдено!',
wrongBitrate: 'Не найден трек с нужным битрейтом.',
wrongBitrateNoAlternative: 'Не найден трек с нужным битрейтом. Альтернатив не найдено!',
no360RA: 'Трек недоступен в Reality Audio 360.',
notAvailable: "Трек недоступен на серверах deezer!",
notAvailableNoAlternative: "Трек недоступен на серверах deezer. Альтернатив не найдено!"
wrongBitrate: 'Для данного трека нет нужного битрейта.',
wrongBitrateNoAlternative: 'Для данного трека нет нужного битрейта. Альтернатив не найдено!',
no360RA: 'Трек недоступен в формате Reality Audio 360.',
notAvailable: "Трек недоступен на серверах Deezer!",
notAvailableNoAlternative: "Трек недоступен на серверах Deezer. Альтернатив не найдено!"
}
},
favorites: {
@ -101,7 +101,7 @@ const ru = {
noTracks: 'Избранные треки не найдены'
},
home: {
needTologin: 'Вам нужно зайти под своим аккаунтом Deezer прежде, чем скачивать.',
needTologin: 'Вам необходимо войти под своей учетной записью Deezer, прежде чем вы сможете начать скачивание.',
openSettings: 'Открыть настройки',
sections: {
popularPlaylists: 'Популярные плейлисты',
@ -109,9 +109,9 @@ const ru = {
}
},
linkAnalyzer: {
info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, по которой вы хотите скачать.',
info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, которую необходимо загрузить.',
useful:
"Этот раздел нужен, если вы хотите скачать треки, недоступные в вашей стране, а также посмотреть, где они доступны.",
"Этот раздел нужен, если вы хотите загрузить треки, недоступные в вашей стране, а также посмотреть, где они доступны.",
linkNotSupported: 'Ссылка не поддерживается',
linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.',
table: {
@ -123,7 +123,7 @@ const ru = {
trackNumber: 'Номер трека',
releaseDate: 'Дата выхода',
bpm: 'BPM',
label: 'Издатель',
label: 'Издатедь',
recordType: 'Тип',
genres: 'Жанр',
tracklist: 'Треклист'
@ -144,8 +144,8 @@ const ru = {
downloads: 'загрузки',
toasts: {
addedToQueue: '{0} добавлено в очередь',
alreadyInQueue: '{0} уже есть в очереди!',
finishDownload: '{0} загрузок завершено.',
alreadyInQueue: '{0} уже присутствует в очереди!',
finishDownload: 'Загрузка {0} завершена.',
allDownloaded: 'Все загрузки завершены!',
refreshFavs: 'Обновление завершено!',
loggingIn: 'Вход',
@ -153,12 +153,12 @@ const ru = {
alreadyLogged: 'Вход уже выполнен',
loginFailed: "Вход не выполнен",
loggedOut: 'Вы вышли из аккаунта',
cancellingCurrentItem: 'Отмена закачки.',
cancellingCurrentItem: 'Отменена текущая загрузка.',
currentItemCancelled: 'Отменено.',
startAddingArtist: 'Добавление {0} альбомов в очередь',
finishAddingArtist: 'Добавлено {0} альбомов в очередь',
startConvertingSpotifyPlaylist: 'Преобразование треков из spotify в deezer',
finishConvertingSpotifyPlaylist: 'Преобразование Spotify playlist converted'
startAddingArtist: 'Добавление альбомов {0} в очередь',
finishAddingArtist: 'Альбомы {0} добавлены в очередь',
startConvertingSpotifyPlaylist: 'Добавление плейлиста Spotify в очередь',
finishConvertingSpotifyPlaylist: 'Spotify плейлист добавлен в очередь'
},
settings: {
title: 'Настройки',
@ -177,35 +177,35 @@ const ru = {
slimDownloadTab: 'Компактная вкладка с загрузками'
},
downloadPath: {
title: 'Путь сохранения'
title: 'Путь для сохранения'
},
templates: {
title: 'Шаблоны',
tracknameTemplate: 'Шаблон названия трека',
tracknameTemplate: 'Шаблон названия синглов',
albumTracknameTemplate: 'Шаблон названия трека альбома',
playlistTracknameTemplate: 'Шаблон названия трека плейлиста'
},
folders: {
title: 'Папки',
createPlaylistFolder: 'Создавать папки для плейлистов',
createPlaylistFolder: 'Создать папки для плейлистов',
playlistNameTemplate: 'Название папки плейлиста',
createArtistFolder: 'Создавать папки для исполнителя',
createArtistFolder: 'Создать папки для исполнителя',
artistNameTemplate: 'Название папки исполнителя',
createAlbumFolder: 'Создавать папки для альбома',
createAlbumFolder: 'Создать папки для альбома',
albumNameTemplate: 'Название папки альбома',
createCDFolder: 'Создавать папки для CD',
createStructurePlaylist: 'Создавать структуру папок для плейлистов',
createSingleFolder: 'Создавать структуру папок для синглов'
createCDFolder: 'Создать папки для CD',
createStructurePlaylist: 'Создать структуру папок для плейлистов',
createSingleFolder: 'Создать структуру папок для синглов'
},
trackTitles: {
title: 'Названия треков',
padTracks: 'Добавлять нули',
paddingSize: 'Количество цифр',
illegalCharacterReplacer: 'Замена для запрещённых символов'
padTracks: 'Добавить ноль к номерам треков (01, 02, ...)',
paddingSize: 'Кол-во добавленных нолей',
illegalCharacterReplacer: 'Замена для запрещённых в имени символов'
},
downloads: {
title: 'Загрузки',
queueConcurrency: 'Количество одновременных закачек',
queueConcurrency: 'Количество одновременных загрузок',
maxBitrate: {
title: 'Предпочитаемый битрейт',
9: 'FLAC 1411kbps',
@ -218,23 +218,23 @@ const ru = {
n: "Нет, не перезаписывать",
t: 'Обновить только теги'
},
fallbackBitrate: 'Скачивать с низким битрейтом, если текущий недоступен',
fallbackSearch: 'Искать похожий трек, если нужный недоступен',
logErrors: 'Сохранять логи ошибок',
logSearched: 'Сохранять лог истории поиска',
createM3U8File: 'Создавать файлы плейлистов',
syncedLyrics: 'Создавать .lyr файлы (синхронизированная лирика)',
playlistFilenameTemplate: 'Шаблон названия плейлиста',
saveDownloadQueue: 'Сохранять текущий список загрузок при закрытии приложения'
fallbackBitrate: 'Загружать с битрейтом ниже, если текущий недоступен',
fallbackSearch: 'Искать похожий трек, если запрашиваемый недоступен',
logErrors: 'Создать логи для ошибок',
logSearched: 'Создать лог поиска',
createM3U8File: 'Создать файлы плейлистов',
syncedLyrics: 'Создать .lyr файлы (Синхронизированный текст)',
playlistFilenameTemplate: 'Шаблон названия плейлистов',
saveDownloadQueue: 'Сохранять текущую очередь загрузок при закрытии приложения'
},
covers: {
title: 'Обложки',
saveArtwork: 'Сохранять обложки',
coverImageTemplate: 'Шаблон названия обложки',
saveArtworkArtist: 'Сохранять изображение исполнителя',
saveArtwork: 'Сохранять обложки файлом',
coverImageTemplate: 'Шаблон названия изображения',
saveArtworkArtist: 'Сохранять изображение исполнителя файлом',
artistImageTemplate: 'Шаблон названия изображения',
localArtworkSize: 'Размер сохраненной обложки',
embeddedArtworkSize: 'Размер встроенной',
localArtworkSize: 'Размер сохраненной обложки файлом',
embeddedArtworkSize: 'Размер встроенной в теги обложки',
localArtworkFormat: {
title: 'В каком формате сохранять обложки?',
jpg: 'jpeg',
@ -257,23 +257,23 @@ const ru = {
genre: 'Жанр',
year: 'Год',
date: 'Дата',
explicit: 'Нецензурная лирика',
isrc: 'ISRC',
explicit: 'Пометка о нецензурной лексике',
isrc: 'Идентиф. код трека (ISRC)',
length: 'Продолжительность',
barcode: 'Штрихкод альбома (UPC)',
barcode: 'Идентиф. код альбома (UPC)',
bpm: 'BPM',
replayGain: 'Replay Gain',
label: 'Издатель',
lyrics: 'Несинхронизированная лирика',
copyright: 'Права',
lyrics: 'Текст песни',
copyright: 'Автор. права',
composer: 'Композитор',
involvedPeople: 'Вовлечённые люди'
},
other: {
title: 'Разное',
savePlaylistAsCompilation: 'Сохранять плейлисты как сборники',
useNullSeparator: 'Использовать null в качестве разделителя',
saveID3v1: 'Сохранять ID3v1',
savePlaylistAsCompilation: 'Сохранить плейлисты как сборники',
useNullSeparator: 'Использовать нулевой символ в качестве разделителя',
saveID3v1: 'Дополнительно сохранять ID3v1',
multiArtistSeparator: {
title: 'Как разделять несколько исполнителей?',
nothing: 'Сохранить только основного',
@ -281,22 +281,22 @@ const ru = {
andFeat: 'Используя & и feat.',
using: 'Используя "{0}"'
},
singleAlbumArtist: 'Сохранять только основного исполнителя альбома',
albumVariousArtists: 'Оставлять "Various Artists" в Исполнителях альбома',
removeAlbumVersion: 'Удалять "Album Version" из названия трека',
removeDuplicateArtists: 'Удалять повторяющихся исполнителей',
singleAlbumArtist: 'Сохранить только основного исполнителя альбома',
albumVariousArtists: 'Оставить "Various Artists" в исполнителях альбома',
removeAlbumVersion: 'Удалить "Album Version" из названия трека',
removeDuplicateArtists: 'Удалить повторяющихся исполнителей',
dateFormat: {
title: 'Формат даты для FLAC файлов',
year: 'YYYY',
month: 'MM',
day: 'DD'
year: 'ГГГГ',
month: 'ММ',
day: 'ДД'
},
featuredToTitle: {
title: 'Что делать с приглашёнными исполнителями?',
title: 'Что делать с "feat."?',
0: 'Ничего',
1: 'Удалить их из названия',
3: 'Удалить из названия и названия альбома',
2: 'Добавить в название'
1: 'Удалить из названия трека',
3: 'Удалить из названия трека и альбома',
2: 'Добавить в название трека'
},
titleCasing: 'Регистр названия',
artistCasing: 'Регистр исполнителя',
@ -310,7 +310,7 @@ const ru = {
previewVolume: 'Громкость прослушивания',
executeCommand: {
title: 'Выполнять команды по окончании загрузок',
description: 'Оставьте поле пустым, если ничего не требуется'
description: 'Оставьте пустым, если ничего не требуется'
}
},
spotify: {
@ -337,7 +337,7 @@ const ru = {
about: 'о проекте'
},
tracklist: {
downloadSelection: 'Скачать выбранные'
downloadSelection: 'Загрузить выбранные'
}
}

View File

@ -43,25 +43,22 @@ const i18n = new VueI18n({
* @returns a final choice index to select plural word by
*/
ru: function(choice, choicesLength) {
if (choice === 0) {
return 0
}
var n = Math.abs(choice) % 100
var n1 = n % 10
if (n > 10 && n < 20) {
return 3
}
if (n1 > 1 && n1 < 5) {
return 2
}
if (n1 == 1) {
if (n1 > 1 && n1 < 5) {
return 1
}
return 3
if (n1 == 1) {
return 0
}
return 2
}
}
})