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) { socket.on('alreadyInQueue', function(data) {
toast(i18n.t('toasts.alreadyInQueue', [data.title]), 'playlist_add_check') toast(i18n.t('toasts.alreadyInQueue', [data.title]), 'playlist_add_check')
}) })
socket.on('loginNeededToDownload', function(data) {
toast(i18n.t('toasts.loginNeededToDownload'), 'report')
})

View File

@ -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!`, 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.`, 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>.`, 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!`, notObligated: `Don't feel obligated to donate, I appreciate you anyway!`,
lincensedUnder: `This work is licensed under a lincensedUnder: `This work is licensed under a
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" <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', startAddingArtist: 'Adding {0} albums to queue',
finishAddingArtist: 'Added {0} albums to queue', finishAddingArtist: 'Added {0} albums to queue',
startConvertingSpotifyPlaylist: 'Converting spotify tracks to deezer tracks', 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: { settings: {
title: 'Settings', title: 'Settings',

View File

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

View File

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

View File

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