From f24ba1da0e48f4a793c99349d4dcd85eed693a19 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Tue, 28 Jul 2020 19:55:32 +0200 Subject: [PATCH 01/20] Actualizar 'src/lang/es.js' --- src/lang/{en.js => es.js} | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) rename src/lang/{en.js => es.js} (95%) diff --git a/src/lang/en.js b/src/lang/es.js similarity index 95% rename from src/lang/en.js rename to src/lang/es.js index df1f8f6..1d00cf2 100644 --- a/src/lang/en.js +++ b/src/lang/es.js @@ -1,24 +1,24 @@ const en = { globals: { - welcome: 'Welcome to deemix', - back: 'back', - loading: 'loading', - download: 'Download {0}', - by: 'by {0}', - in: 'in {0}', - download_hint: 'Download', - play_hint: 'Play', - toggle_download_tab_hint: 'Expand/Collapse', - clean_queue_hint: 'Clear Finished', - cancel_queue_hint: 'Cancel All', + welcome: 'Bienvenido a deemix', + back: 'atrás', + loading: 'cargando', + download: 'Descarga {0}', + by: 'por {0}', + in: 'en {0}', + download_hint: 'Descargar', + play_hint: 'Reproducir', + toggle_download_tab_hint: 'Expandir/Colapsar', + clean_queue_hint: 'Limpiar terminados', + cancel_queue_hint: 'Cancelar todos', listTabs: { empty: '', - all: 'all', - top_result: 'top result', - album: 'album | albums', - artist: 'artist | artists', - single: 'single | singles', - title: 'title | titles', + all: 'todos', + top_result: 'mejores resultados', + album: 'álbum | álbumes', + artist: 'artista | artistas', + single: 'sencillo | sencillos', + title: 'título | títulos', track: 'track | tracks', trackN: '0 tracks | {n} track | {n} tracks', releaseN: '0 releases | {n} release | {n} releases', From 7167c71977d420b8fb6d900fe3f5aa496edb9f39 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Tue, 28 Jul 2020 20:17:00 +0200 Subject: [PATCH 02/20] Actualizar 'src/lang/es.js' --- src/lang/es.js | 88 +++++++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/src/lang/es.js b/src/lang/es.js index 1d00cf2..50fbf59 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -19,39 +19,39 @@ const en = { artist: 'artista | artistas', single: 'sencillo | sencillos', title: 'título | títulos', - track: 'track | tracks', - trackN: '0 tracks | {n} track | {n} tracks', - releaseN: '0 releases | {n} release | {n} releases', - playlist: 'playlist | playlists', - compile: 'compilation | compilations', + track: 'canción | canciones', + trackN: '0 canciones | {n} canción | {n} canciones', + releaseN: '0 entregas | {n} entrega | {n} entregas', + playlist: 'lista de reproducción | listas de reproducción', + compile: 'compilación | compilaciones', ep: 'ep | eps', - spotifyPlaylist: 'spotify playlist | spotify playlists', - releaseDate: 'release date', + spotifyPlaylist: 'lista de reproducción spotify | listas de reproducción spotify', + releaseDate: 'fecha de publicación', error: 'error' } }, about: { titles: { - usefulLinks: 'Useful Links', - bugReports: 'Bug Reports', - contributing: 'Contributing', - donations: 'Donations', - license: 'License' + usefulLinks: 'Enlaces útiles', + bugReports: 'Reportar fallos', + contributing: 'Contribuye', + donations: 'Donaciones', + license: 'Licencia' }, subtitles: { - bugReports: "Is there something that isn't working in deemix? Tell us!", - contributing: 'You want to contribute to this project? You can do it in different ways!', - donations: 'You want to contribute monetarily? You could make a donation!' + bugReports: "¿Hay algo que no funcione en Deemix? ¡Díganoslo!", + contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!', + donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' }, - usesLibrary: 'This app uses the deemix library, which you can use to make your own UI for deemix.', - thanks: `Thanks to rtonno, uhwot and lollilol for helping me with this project and to BasCurtiz and scarvimane for making the icon.`, - upToDate: `Stay up to date with the updates by following the news channel on Telegram.`, - officialWebsite: 'Official Website', - officialRepo: 'Official Library Repository', - officialWebuiRepo: 'Official WebUI Repository', - officialSubreddit: 'Official Subreddit', - newsChannel: 'News Channel', - questions: `If you have questions or problems with the app, search for a solution in the subreddit first. Then, if you don't find anything you can make a post with your issue on the subreddit.`, + usesLibrary: 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', + thanks: `Gracias a rtonno, uhwot y lollilol por ayudarme con este proyecto, a BasCurtiz y scarvimane por hacer el icono.`, + upToDate: `Mantente al día con las actualizaciones siguiendo el canal de noticias en Telegram.`, + officialWebsite: 'Página web oficial', + officialRepo: 'Repositorio de la biblioteca oficial', + officialWebuiRepo: 'Repositorio oficial de WebUI', + officialSubreddit: 'Subreddit oficial', + newsChannel: 'Canal de noticias', + questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el subreddit primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el 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 DO NOT report a bug if it's been already reported.`, duplicateReports: 'Duplicate bug reports will be closed, so keep an eye out on that.', @@ -307,38 +307,38 @@ const en = { start: 'Start Of Each Word', sentence: 'Like a sentence' }, - previewVolume: 'Preview Volume', + previewVolume: 'Volumen de previsualización', executeCommand: { - title: 'Command to execute after download', - description: 'Leave blank for no action' + title: 'Comando a ejecutar después de la descarga', + description: 'Deje en blanco para no hacer nada' } }, spotify: { - title: 'Spotify Features', - clientID: 'Spotify clientID', - clientSecret: 'Spotify Client Secret', - username: 'Spotify username' + title: 'Funciones de Spotify', + clientID: 'ID del cliente de Spotify', + clientSecret: 'Cliente secreto de Spotify', + username: 'Nombre de usuario de Spotify' }, - reset: 'Reset to Default', - save: 'Save', + reset: 'Restablecer el valor por defecto', + save: 'Guardar', toasts: { - init: 'Settings loaded!', - update: 'Settings updated!', - ARLcopied: 'ARL copied to clipboard' + init: '¡Configuraciones cargadas!', + update: '¡Ajustes actualizados!', + ARLcopied: 'ARL copiado al portapapeles' } }, sidebar: { - home: 'home', - search: 'search', + home: 'inicio', + search: 'buscar', charts: 'charts', - favorites: 'favorites', - linkAnalyzer: 'link analyzer', - settings: 'settings', - about: 'about' + favorites: 'favoritos', + linkAnalyzer: 'analizar links', + settings: 'ajustes', + about: 'acerca de' }, tracklist: { - downloadSelection: 'Download selection' + downloadSelection: 'Descargar selección' } } -export default en +export default es \ No newline at end of file From 1ad1ae2cc8d5b7953feba148629a0715170e9e07 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:13:05 +0200 Subject: [PATCH 03/20] Actualizar 'src/lang/en-modded.js' --- src/lang/{es.js => en-modded.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/lang/{es.js => en-modded.js} (100%) diff --git a/src/lang/es.js b/src/lang/en-modded.js similarity index 100% rename from src/lang/es.js rename to src/lang/en-modded.js From 1a3e42f3d7d0992e8bdb21bf784a8b1f04eb7d33 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:13:46 +0200 Subject: [PATCH 04/20] =?UTF-8?q?A=C3=B1adir=20'src/lang/es.js'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lang/es.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/lang/es.js diff --git a/src/lang/es.js b/src/lang/es.js new file mode 100644 index 0000000..e69de29 From 95292679beb1737ef0d9693c5da13e55ac26214b Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:27:42 +0200 Subject: [PATCH 05/20] Actualizar 'src/lang/es.js' --- src/lang/es.js | 344 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 344 insertions(+) diff --git a/src/lang/es.js b/src/lang/es.js index e69de29..50fbf59 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -0,0 +1,344 @@ +const en = { + globals: { + welcome: 'Bienvenido a deemix', + back: 'atrás', + loading: 'cargando', + download: 'Descarga {0}', + by: 'por {0}', + in: 'en {0}', + download_hint: 'Descargar', + play_hint: 'Reproducir', + toggle_download_tab_hint: 'Expandir/Colapsar', + clean_queue_hint: 'Limpiar terminados', + cancel_queue_hint: 'Cancelar todos', + listTabs: { + empty: '', + all: 'todos', + top_result: 'mejores resultados', + album: 'álbum | álbumes', + artist: 'artista | artistas', + single: 'sencillo | sencillos', + title: 'título | títulos', + track: 'canción | canciones', + trackN: '0 canciones | {n} canción | {n} canciones', + releaseN: '0 entregas | {n} entrega | {n} entregas', + playlist: 'lista de reproducción | listas de reproducción', + compile: 'compilación | compilaciones', + ep: 'ep | eps', + spotifyPlaylist: 'lista de reproducción spotify | listas de reproducción spotify', + releaseDate: 'fecha de publicación', + error: 'error' + } + }, + about: { + titles: { + usefulLinks: 'Enlaces útiles', + bugReports: 'Reportar fallos', + contributing: 'Contribuye', + donations: 'Donaciones', + license: 'Licencia' + }, + subtitles: { + bugReports: "¿Hay algo que no funcione en Deemix? ¡Díganoslo!", + contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!', + donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' + }, + usesLibrary: 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', + thanks: `Gracias a rtonno, uhwot y lollilol por ayudarme con este proyecto, a BasCurtiz y scarvimane por hacer el icono.`, + upToDate: `Mantente al día con las actualizaciones siguiendo el canal de noticias en Telegram.`, + officialWebsite: 'Página web oficial', + officialRepo: 'Repositorio de la biblioteca oficial', + officialWebuiRepo: 'Repositorio oficial de WebUI', + officialSubreddit: 'Subreddit oficial', + newsChannel: 'Canal de noticias', + questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el subreddit primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el 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 DO NOT report a bug if it's been already reported.`, + duplicateReports: 'Duplicate bug reports will be closed, so keep an eye out on that.', + dontOpenIssues: `DO NOT 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 repo.`, + acceptFeatures: `I accept features as well, but no complex things, as they can be implementend directly in the app and not the library.`, + 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 WebUI.`, + itsFree: `You shoud remember that this is a free project and you should support the artists you love before supporting the developers.`, + notObligated: `Don't feel obligated to donate, I appreciate you anyway!`, + lincensedUnder: `This work is licensed under a + GNU General Public License 3.0.` + }, + charts: { + title: 'Charts', + changeCountry: 'Change Country', + download: 'Download Chart' + }, + errors: { + title: 'Errors for {0}', + ids: { + invalidURL: 'URL not recognized', + unsupportedURL: 'URL not supported yet', + ISRCnotOnDeezer: 'Track ISRC is not available on deezer', + notYourPrivatePlaylist: "You can't download others private playlists.", + spotifyDisabled: 'Spotify Features is not setted up correctly.', + trackNotOnDeezer: 'Track not found on deezer!', + albumNotOnDeezer: 'Album not found on deezer!', + notOnDeezer: 'Track not available on Deezer!', + notEncoded: 'Track not yet encoded!', + notEncodedNoAlternative: 'Track not yet encoded and no alternative found!', + wrongBitrate: 'Track not found at desired bitrate.', + wrongBitrateNoAlternative: 'Track not found at desired bitrate and no alternative found!', + no360RA: 'Track is not available in Reality Audio 360.', + notAvailable: "Track not available on deezer's servers!", + notAvailableNoAlternative: "Track not available on deezer's servers and no alternative found!" + } + }, + favorites: { + title: 'Favorites', + noPlaylists: 'No Playlists found', + noAlbums: 'No Favorite Albums found', + noArtists: 'No Favorite Artists found', + noTracks: 'No Favorite Tracks found' + }, + home: { + needTologin: 'You need to log into your Deezer account before you can start downloading.', + openSettings: 'Open Settings', + sections: { + popularPlaylists: 'Popular playlists', + popularAlbums: 'Most streamed albums' + } + }, + linkAnalyzer: { + info: 'You can use this section to find out more information about the link you are trying to download.', + useful: + "This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.", + linkNotSupported: 'This link is not yet supported', + linkNotSupportedYet: 'Seems like this link is not yet supported, try analyzing another one.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Duration', + diskNumber: 'Disk Number', + trackNumber: 'Track Number', + releaseDate: 'Release Date', + bpm: 'BPM', + label: 'Label', + recordType: 'Record Type', + genres: 'Genres', + tracklist: 'Tracklist' + } + }, + search: { + startSearching: 'Start searching!', + description: + 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link', + fans: '{0} fans', + noResults: 'No results', + noResultsTrack: 'No Tracks found', + noResultsAlbum: 'No Albums found', + noResultsArtist: 'No Artists found', + noResultsPlaylist: 'No Playlists found' + }, + searchbar: 'Search anything you want (or just paste a link)', + downloads: 'downloads', + toasts: { + addedToQueue: '{0} added to queue', + alreadyInQueue: '{0} is already in queue!', + finishDownload: '{0} finished downloading.', + allDownloaded: 'All downloads completed!', + refreshFavs: 'Refresh completed!', + loggingIn: 'Logging in', + loggedIn: 'Logged in', + alreadyLogged: 'Already logged in', + loginFailed: "Couldn't log in", + loggedOut: 'Logged out', + cancellingCurrentItem: 'Cancelling current item.', + currentItemCancelled: 'Current item cancelled.', + startAddingArtist: 'Adding {0} albums to queue', + finishAddingArtist: 'Added {0} albums to queue', + startConvertingSpotifyPlaylist: 'Converting spotify tracks to deezer tracks', + finishConvertingSpotifyPlaylist: 'Spotify playlist converted' + }, + settings: { + title: 'Settings', + languages: 'Languages', + login: { + title: 'Login', + loggedIn: 'You are logged in as {username}', + arl: { + question: 'How do I get my own ARL?', + update: 'Update ARL' + }, + logout: 'Logout' + }, + appearance: { + title: 'Appearance', + slimDownloadTab: 'Slim download tab' + }, + downloadPath: { + title: 'Download Path' + }, + templates: { + title: 'Templates', + tracknameTemplate: 'Trackname template', + albumTracknameTemplate: 'Album track template', + playlistTracknameTemplate: 'Playlist track template' + }, + folders: { + title: 'Folders', + createPlaylistFolder: 'Create folder for playlists', + playlistNameTemplate: 'Playlist folder template', + createArtistFolder: 'Create folder for artist', + artistNameTemplate: 'Artist folder template', + createAlbumFolder: 'Create folder for album', + albumNameTemplate: 'Album folder template', + createCDFolder: 'Create folder for CDs', + createStructurePlaylist: 'Create folder structure for playlists', + createSingleFolder: 'Create folder structure for singles' + }, + trackTitles: { + title: 'Track titles', + padTracks: 'Pad tracks', + paddingSize: 'Overwrite padding size', + illegalCharacterReplacer: 'Illegal Character replacer' + }, + downloads: { + title: 'Downloads', + queueConcurrency: 'Concurrent Downloads', + maxBitrate: { + title: 'Preferred Bitrate', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Should I overwrite the files?', + y: 'Yes, overwrite the file', + n: "No, don't overwrite the file", + t: 'Overwrite only the tags' + }, + fallbackBitrate: 'Bitrate fallback', + fallbackSearch: 'Search fallback', + logErrors: 'Create log files for errors', + logSearched: 'Create log files for searched tracks', + createM3U8File: 'Create playlist file', + syncedLyrics: 'Create .lyr files (Sync Lyrics)', + playlistFilenameTemplate: 'Playlist filename template', + saveDownloadQueue: 'Save download queue when closing the app' + }, + covers: { + title: 'Album covers', + saveArtwork: 'Save Covers', + coverImageTemplate: 'Cover name template', + saveArtworkArtist: 'Save artist image', + artistImageTemplate: 'Artist image template', + localArtworkSize: 'Local artwork size', + embeddedArtworkSize: 'Embedded artwork size', + localArtworkFormat: { + title: 'What format do you want the local artwork to be?', + jpg: 'A jpeg image', + png: 'A png image', + both: 'Both a jpeg and a png' + }, + jpegImageQuality: 'JPEG image quality' + }, + tags: { + head: 'Which tags to save', + title: 'Title', + artist: 'Artist', + album: 'Album', + cover: 'Cover', + trackNumber: 'Track Number', + trackTotal: 'Track Total', + discNumber: 'Disc Number', + discTotal: 'Disc Total', + albumArtist: 'Album Artist', + genre: 'Genre', + year: 'Year', + date: 'Date', + explicit: 'Explicit Lyrics', + isrc: 'ISRC', + length: 'Track Length', + barcode: 'Album Barcode (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Album Label', + lyrics: 'Unsynchronized Lyrics', + copyright: 'Copyright', + composer: 'Composer', + involvedPeople: 'Involved People' + }, + other: { + title: 'Other', + savePlaylistAsCompilation: 'Save playlists as compilation', + useNullSeparator: 'Use null separator', + saveID3v1: 'Save ID3v1 as well', + multiArtistSeparator: { + title: 'How would you like to separate your artists?', + nothing: 'Save only the main artist', + default: 'Using standard specification', + andFeat: 'Using & and feat.', + using: 'Using "{0}"' + }, + singleAlbumArtist: 'Save only the main album artist', + albumVariousArtists: 'Keep "Various Artists" in the Album Artists', + removeAlbumVersion: 'Remove "Album Version" from track title', + removeDuplicateArtists: 'Remove combinations of artists', + dateFormat: { + title: 'Date format for FLAC files', + year: 'YYYY', + month: 'MM', + day: 'DD' + }, + featuredToTitle: { + title: 'What should I do with featured artists?', + 0: 'Nothing', + 1: 'Remove it from the title', + 3: 'Remove it from the title and the album title', + 2: 'Move it to the title' + }, + titleCasing: 'Title casing', + artistCasing: 'Artist casing', + casing: { + nothing: 'Keep unchanged', + lower: 'lowercase', + upper: 'UPPERCASE', + start: 'Start Of Each Word', + sentence: 'Like a sentence' + }, + previewVolume: 'Volumen de previsualización', + executeCommand: { + title: 'Comando a ejecutar después de la descarga', + description: 'Deje en blanco para no hacer nada' + } + }, + spotify: { + title: 'Funciones de Spotify', + clientID: 'ID del cliente de Spotify', + clientSecret: 'Cliente secreto de Spotify', + username: 'Nombre de usuario de Spotify' + }, + reset: 'Restablecer el valor por defecto', + save: 'Guardar', + toasts: { + init: '¡Configuraciones cargadas!', + update: '¡Ajustes actualizados!', + ARLcopied: 'ARL copiado al portapapeles' + } + }, + sidebar: { + home: 'inicio', + search: 'buscar', + charts: 'charts', + favorites: 'favoritos', + linkAnalyzer: 'analizar links', + settings: 'ajustes', + about: 'acerca de' + }, + tracklist: { + downloadSelection: 'Descargar selección' + } +} + +export default es \ No newline at end of file From f90db03a5949d9621a174c900a0f93b82fd3c716 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:29:23 +0200 Subject: [PATCH 06/20] Actualizar 'src/lang/es.js' --- src/lang/es.js | 379 ++++++++++++++++++++++++------------------------- 1 file changed, 188 insertions(+), 191 deletions(-) diff --git a/src/lang/es.js b/src/lang/es.js index 50fbf59..9b2a207 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -1,4 +1,4 @@ -const en = { +const es = { globals: { welcome: 'Bienvenido a deemix', back: 'atrás', @@ -19,8 +19,8 @@ const en = { artist: 'artista | artistas', single: 'sencillo | sencillos', title: 'título | títulos', - track: 'canción | canciones', - trackN: '0 canciones | {n} canción | {n} canciones', + track: 'pista | pistas', + trackN: '0 pistas | {n} pista | {n} pistas', releaseN: '0 entregas | {n} entrega | {n} entregas', playlist: 'lista de reproducción | listas de reproducción', compile: 'compilación | compilaciones', @@ -52,260 +52,257 @@ const en = { officialSubreddit: 'Subreddit oficial', newsChannel: 'Canal de noticias', questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el subreddit primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el 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 DO NOT report a bug if it's been already reported.`, - duplicateReports: 'Duplicate bug reports will be closed, so keep an eye out on that.', - dontOpenIssues: `DO NOT 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 repo.`, - acceptFeatures: `I accept features as well, but no complex things, as they can be implementend directly in the app and not the library.`, - 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 WebUI.`, - itsFree: `You shoud remember that this is a free project and you should support the artists you love before supporting the developers.`, - notObligated: `Don't feel obligated to donate, I appreciate you anyway!`, - lincensedUnder: `This work is licensed under a - GNU General Public License 3.0.` + beforeReporting: `Antes de informar de un error asegúrese de que está ejecutando la última versión de la aplicación y que lo que quiere informar es en realidad un error y no algo que está mal sólo en su extremo.`, + beSure: `Asegúrate de que el fallo es reproducible en otras máquinas y también NO reporte un fallo si ya ha sido reportado.`, + duplicateReports: 'Los informes de errores duplicados se cerrarán, así que manténgase al tanto de eso.', + dontOpenIssues: `NO abra problemas para hacer preguntas, hay un subreddit para eso.`, + newUI: `Si tienes fluidez en Python podrías intentar hacer una nueva interfaz de usuario para la aplicación usando la biblioteca base, o arreglar los errores de la biblioteca con una petición pull en el repo.`, + acceptFeatures: `También acepto características, pero no cosas complejas, ya que se pueden implementar directamente en la aplicación y no en la biblioteca.`, + otherLanguages: `¡Si dominas otro lenguaje de programación podrías intentar portar Deemix a otros lenguajes de programación!`, + understandingCode: `¿Necesitas ayuda para entender el código? Sólo tienes que poner RemixDev en Telegram o Reddit.`, + contributeWebUI: `Si conoces Vue.js (JavaScript), HTML o CSS podrías contribuir a la WebUI.`, + itsFree: `Debes recordar que este es un proyecto libre y debes apoyar a los artistas que amas antes de apoyar a los desarrolladores.`, + notObligated: `No te sientas obligado a donar, ¡te aprecio de todas formas!`, + lincensedUnder: `Esta obra está autorizada bajo una + GNU Licencia Pública General 3.0.` }, charts: { - title: 'Charts', - changeCountry: 'Change Country', - download: 'Download Chart' + title: 'Tablas', + changeCountry: 'Cambiar país', + download: 'Descargar la tabla' }, errors: { - title: 'Errors for {0}', + title: 'Errores para {0}', ids: { - invalidURL: 'URL not recognized', - unsupportedURL: 'URL not supported yet', - ISRCnotOnDeezer: 'Track ISRC is not available on deezer', - notYourPrivatePlaylist: "You can't download others private playlists.", - spotifyDisabled: 'Spotify Features is not setted up correctly.', - trackNotOnDeezer: 'Track not found on deezer!', - albumNotOnDeezer: 'Album not found on deezer!', - notOnDeezer: 'Track not available on Deezer!', - notEncoded: 'Track not yet encoded!', - notEncodedNoAlternative: 'Track not yet encoded and no alternative found!', - wrongBitrate: 'Track not found at desired bitrate.', - wrongBitrateNoAlternative: 'Track not found at desired bitrate and no alternative found!', - no360RA: 'Track is not available in Reality Audio 360.', - notAvailable: "Track not available on deezer's servers!", - notAvailableNoAlternative: "Track not available on deezer's servers and no alternative found!" + invalidURL: 'No se reconoce la URL', + unsupportedURL: 'La URL no está soportada aún', + ISRCnotOnDeezer: 'Pista ISRC no está disponible en Deezer', + notYourPrivatePlaylist: "No puedes descargar otras listas de reproducción privadas.", + spotifyDisabled: 'Funciones de Spotify no está configurado correctamente.', + trackNotOnDeezer: '¡No se encontró la pista en Deezer!', + albumNotOnDeezer: '¡El álbum no se encuentra en Deezer!', + notOnDeezer: '¡Pista no disponible en Deezer!', + notEncoded: '¡Pista aún no codificada!', + notEncodedNoAlternative: '¡Pista aún no codificada y no se ha encontrado ninguna alternativa!', + wrongBitrate: 'La pista no se encuentra a la velocidad de bitrate deseada.', + wrongBitrateNoAlternative: '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', + no360RA: 'La pista no está disponible en Reality Audio 360.', + notAvailable: "¡La pista no está disponible en los servidores de Deezer!", + notAvailableNoAlternative: "¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!" } }, favorites: { - title: 'Favorites', - noPlaylists: 'No Playlists found', - noAlbums: 'No Favorite Albums found', - noArtists: 'No Favorite Artists found', - noTracks: 'No Favorite Tracks found' + title: 'Favoritos', + noPlaylists: 'No se han encontrado listas de reproducción', + noAlbums: 'No se han encontrado álbumes favoritos', + noArtists: 'No se han encontrado artistas favoritos', + noTracks: 'No se han encontrado pistas favoritas' }, home: { - needTologin: 'You need to log into your Deezer account before you can start downloading.', - openSettings: 'Open Settings', + needTologin: 'Necesitas entrar en tu cuenta de Deezer antes de poder empezar a descargar.', + openSettings: 'Abrir la configuración', sections: { - popularPlaylists: 'Popular playlists', - popularAlbums: 'Most streamed albums' + popularPlaylists: 'Listas de reproducción populares', + popularAlbums: 'Los álbumes más transmitidos' } }, linkAnalyzer: { - info: 'You can use this section to find out more information about the link you are trying to download.', - useful: - "This is useful if you're trying to download some tracks that are not available in your country and want to know where they are available, for instance.", - linkNotSupported: 'This link is not yet supported', - linkNotSupportedYet: 'Seems like this link is not yet supported, try analyzing another one.', + info: 'Puedes usar esta sección para encontrar más información sobre el enlace que estás tratando de descargar.', + useful: "Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.", + linkNotSupported: 'Este enlace aún no está soportado', + linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.', table: { id: 'ID', isrc: 'ISRC', upc: 'UPC', - duration: 'Duration', - diskNumber: 'Disk Number', - trackNumber: 'Track Number', - releaseDate: 'Release Date', + duration: 'Duración', + diskNumber: 'Número del disco', + trackNumber: 'Número de la pista', + releaseDate: 'Fecha de lanzamiento', bpm: 'BPM', - label: 'Label', - recordType: 'Record Type', - genres: 'Genres', - tracklist: 'Tracklist' + label: 'Etiqueta', + recordType: 'Tipo de grabación', + genres: 'Géneros', + tracklist: 'Lista de pista' } }, search: { - startSearching: 'Start searching!', - description: - 'You can search a track, a whole album, an artist, a playlist.... everything! You can also paste a Deezer link', - fans: '{0} fans', - noResults: 'No results', - noResultsTrack: 'No Tracks found', - noResultsAlbum: 'No Albums found', - noResultsArtist: 'No Artists found', - noResultsPlaylist: 'No Playlists found' + startSearching: '¡Comienza a buscar!', + description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', + fans: '{0} fanáticos', + noResults: 'No hay resultados', + noResultsTrack: 'No se encontraron pistas', + noResultsAlbum: 'No se encontraron álbumes', + noResultsArtist: 'No se encontraron artistas', + noResultsPlaylist: 'No se encontraron listas de reproducción' }, - searchbar: 'Search anything you want (or just paste a link)', - downloads: 'downloads', + searchbar: 'Busca lo que quieras (o simplemente pega un enlace)', + downloads: 'descargas', toasts: { - addedToQueue: '{0} added to queue', - alreadyInQueue: '{0} is already in queue!', - finishDownload: '{0} finished downloading.', - allDownloaded: 'All downloads completed!', - refreshFavs: 'Refresh completed!', - loggingIn: 'Logging in', - loggedIn: 'Logged in', - alreadyLogged: 'Already logged in', - loginFailed: "Couldn't log in", - loggedOut: 'Logged out', - cancellingCurrentItem: 'Cancelling current item.', - currentItemCancelled: 'Current item cancelled.', - startAddingArtist: 'Adding {0} albums to queue', - finishAddingArtist: 'Added {0} albums to queue', - startConvertingSpotifyPlaylist: 'Converting spotify tracks to deezer tracks', - finishConvertingSpotifyPlaylist: 'Spotify playlist converted' + addedToQueue: '{0} añadidos a la cola', + alreadyInQueue: '¡{0} ya está en la cola!', + finishDownload: '{0} terminado de descargar.', + allDownloaded: '¡Todas las descargas se han completado!', + refreshFavs: '¡Actualización completada!', + loggingIn: 'Conectando...', + loggedIn: 'Conectado', + alreadyLogged: 'Ya está conectado', + loginFailed: "No se puede conectar", + loggedOut: 'Desconectado', + cancellingCurrentItem: 'Cancelando el elemento actual.', + currentItemCancelled: 'El elemento actual se ha cancelado.', + startAddingArtist: 'Añadiendo {0} álbumes a la cola', + finishAddingArtist: 'Añadido {0} álbumes a la cola', + startConvertingSpotifyPlaylist: 'Convertir las pistas de Spotify en pistas de Deezer', + finishConvertingSpotifyPlaylist: 'Lista de reproducción de Spotify convertida' }, settings: { - title: 'Settings', - languages: 'Languages', + title: 'Configuración', + languages: 'Idiomas', login: { - title: 'Login', - loggedIn: 'You are logged in as {username}', + title: 'Ingresa', + loggedIn: 'Usted está conectado como {nombre de usuario}', arl: { - question: 'How do I get my own ARL?', - update: 'Update ARL' + question: '¿Cómo consigo mi propio ARL?', + update: 'Actualizar la ARL' }, - logout: 'Logout' + logout: 'Cerrar sesión' }, appearance: { - title: 'Appearance', - slimDownloadTab: 'Slim download tab' + title: 'Apariencia', + slimDownloadTab: 'Pestaña de descargas delgada' }, downloadPath: { - title: 'Download Path' + title: 'Ruta de descarga' }, templates: { - title: 'Templates', - tracknameTemplate: 'Trackname template', - albumTracknameTemplate: 'Album track template', - playlistTracknameTemplate: 'Playlist track template' + title: 'Plantillas', + tracknameTemplate: 'Plantilla de nombres de pista', + albumTracknameTemplate: 'Plantilla de pista del álbum', + playlistTracknameTemplate: 'Plantilla de pista de la lista de reproducción' }, folders: { - title: 'Folders', - createPlaylistFolder: 'Create folder for playlists', - playlistNameTemplate: 'Playlist folder template', - createArtistFolder: 'Create folder for artist', - artistNameTemplate: 'Artist folder template', - createAlbumFolder: 'Create folder for album', - albumNameTemplate: 'Album folder template', - createCDFolder: 'Create folder for CDs', - createStructurePlaylist: 'Create folder structure for playlists', - createSingleFolder: 'Create folder structure for singles' + title: 'Carpetas', + createPlaylistFolder: 'Crear una carpeta para las listas de reproducción', + playlistNameTemplate: 'Plantilla de la carpeta de la lista de reproducción', + createArtistFolder: 'Crear carpeta para el artista', + artistNameTemplate: 'Plantilla de la carpeta del artista', + createAlbumFolder: 'Crear carpeta para el álbum', + albumNameTemplate: 'Plantilla de la carpeta del álbum', + createCDFolder: 'Crear una carpeta para los CDs', + createStructurePlaylist: 'Crear una estructura de carpetas para las listas de reproducción', + createSingleFolder: 'Crear una estructura de carpetas para individuales' }, trackTitles: { - title: 'Track titles', - padTracks: 'Pad tracks', - paddingSize: 'Overwrite padding size', - illegalCharacterReplacer: 'Illegal Character replacer' + title: 'Títulos de las pistas', + padTracks: 'Pad de pistas', + paddingSize: 'Sobrescribir el tamaño del pad', + illegalCharacterReplacer: 'Reemplazo del carácter ilegal' }, downloads: { - title: 'Downloads', - queueConcurrency: 'Concurrent Downloads', + title: 'Descargas', + queueConcurrency: 'Descargas simultáneas', maxBitrate: { - title: 'Preferred Bitrate', + title: 'Tasa de bits preferida', 9: 'FLAC 1411kbps', 3: 'MP3 320kbps', 1: 'MP3 128kbps' }, overwriteFile: { - title: 'Should I overwrite the files?', - y: 'Yes, overwrite the file', - n: "No, don't overwrite the file", - t: 'Overwrite only the tags' + title: '¿Desea que sobreescriba los archivos?', + y: 'Sí, sobrescribir el archivo', + n: "No, no sobrescribir el archivo", + t: 'Sobrescribir sólo las etiquetas' }, - fallbackBitrate: 'Bitrate fallback', - fallbackSearch: 'Search fallback', - logErrors: 'Create log files for errors', - logSearched: 'Create log files for searched tracks', - createM3U8File: 'Create playlist file', - syncedLyrics: 'Create .lyr files (Sync Lyrics)', - playlistFilenameTemplate: 'Playlist filename template', - saveDownloadQueue: 'Save download queue when closing the app' + fallbackBitrate: 'La solución alternativa de bitrate', + fallbackSearch: 'Búsqueda de la segunda opción', + logErrors: 'Crear archivos de registro de errores', + logSearched: 'Crear archivos de registro para las pistas buscadas', + createM3U8File: 'Crear archivo de la lista de reproducción', + syncedLyrics: 'Crear archivos .lyr (letras sincronizadas)', + playlistFilenameTemplate: 'Plantilla de nombres de archivos de la lista de reproducción', + saveDownloadQueue: 'Guardar la cola de descarga al cerrar la aplicación' }, covers: { - title: 'Album covers', - saveArtwork: 'Save Covers', - coverImageTemplate: 'Cover name template', - saveArtworkArtist: 'Save artist image', - artistImageTemplate: 'Artist image template', - localArtworkSize: 'Local artwork size', - embeddedArtworkSize: 'Embedded artwork size', + title: 'Cubiertas de álbumes', + saveArtwork: 'Guardar las cubiertas', + coverImageTemplate: 'Plantilla de nombres de portada', + saveArtworkArtist: 'Guardar imagen de artista', + artistImageTemplate: 'Plantilla de imagen de artista', + localArtworkSize: 'El tamaño de la imagen local', + embeddedArtworkSize: 'El tamaño de la imagen incorporada', localArtworkFormat: { - title: 'What format do you want the local artwork to be?', - jpg: 'A jpeg image', - png: 'A png image', - both: 'Both a jpeg and a png' + title: '¿Qué formato quieres que tenga la imagen de arte local?', + jpg: 'Una imagen jpeg', + png: 'Una imagen png', + both: 'Ambos, jpeg y png' }, - jpegImageQuality: 'JPEG image quality' + jpegImageQuality: 'Calidad de la imagen JPEG' }, tags: { - head: 'Which tags to save', - title: 'Title', - artist: 'Artist', - album: 'Album', - cover: 'Cover', - trackNumber: 'Track Number', - trackTotal: 'Track Total', - discNumber: 'Disc Number', - discTotal: 'Disc Total', - albumArtist: 'Album Artist', - genre: 'Genre', - year: 'Year', - date: 'Date', - explicit: 'Explicit Lyrics', + head: '¿Qué etiquetas guardar?', + title: 'Título', + artist: 'Artista', + album: 'Álbum', + cover: 'Portada', + trackNumber: 'Número de pista', + trackTotal: 'Total de pistas', + discNumber: 'Número del disco', + discTotal: 'Discos totales', + albumArtist: 'Artista del álbum', + genre: 'Género', + year: 'Año', + date: 'Fecha', + explicit: 'Letras explícitas', isrc: 'ISRC', - length: 'Track Length', - barcode: 'Album Barcode (UPC)', + length: 'Longitud de la pista', + barcode: 'Código de barras del álbum (UPC)', bpm: 'BPM', - replayGain: 'Replay Gain', - label: 'Album Label', - lyrics: 'Unsynchronized Lyrics', - copyright: 'Copyright', - composer: 'Composer', - involvedPeople: 'Involved People' + replayGain: 'Ganancia de la reproducción', + label: 'Etiqueta del álbum', + lyrics: 'Letras no sincronizadas', + copyright: 'Derechos de autor', + composer: 'Compositor', + involvedPeople: 'Personas involucradas' }, other: { - title: 'Other', - savePlaylistAsCompilation: 'Save playlists as compilation', - useNullSeparator: 'Use null separator', - saveID3v1: 'Save ID3v1 as well', + title: 'Otros', + savePlaylistAsCompilation: 'Guardar las listas de reproducción como una compilación', + useNullSeparator: 'Usar separador nulo', + saveID3v1: 'Guarda ID3v1 también', multiArtistSeparator: { - title: 'How would you like to separate your artists?', - nothing: 'Save only the main artist', - default: 'Using standard specification', - andFeat: 'Using & and feat.', - using: 'Using "{0}"' + title: '¿Cómo le gustaría separar a sus artistas?', + nothing: 'Guardar sólo el artista principal', + default: 'Usar la especificación estándar', + andFeat: 'Usar & y feat.', + using: 'Usar "{0}"' }, - singleAlbumArtist: 'Save only the main album artist', - albumVariousArtists: 'Keep "Various Artists" in the Album Artists', - removeAlbumVersion: 'Remove "Album Version" from track title', - removeDuplicateArtists: 'Remove combinations of artists', + singleAlbumArtist: 'Guardar sólo el artista principal del álbum', + albumVariousArtists: 'Mantén "Various Artists" en los artistas del álbum', + removeAlbumVersion: 'Eliminar "Album Version" del título de la pista', + removeDuplicateArtists: 'Eliminar las combinaciones de artistas', dateFormat: { - title: 'Date format for FLAC files', - year: 'YYYY', + title: 'Formato de fecha para los archivos FLAC', + year: 'AAAA', month: 'MM', day: 'DD' }, featuredToTitle: { - title: 'What should I do with featured artists?', - 0: 'Nothing', - 1: 'Remove it from the title', - 3: 'Remove it from the title and the album title', - 2: 'Move it to the title' + title: '¿Qué debo hacer con los artistas destacados?', + 0: 'Nada', + 1: 'Quítalo del título', + 3: 'Quítalo del título y del título del álbum', + 2: 'Muévalo al título' }, - titleCasing: 'Title casing', - artistCasing: 'Artist casing', + titleCasing: 'Capitalizar título', + artistCasing: 'Capitalizar artista', casing: { - nothing: 'Keep unchanged', - lower: 'lowercase', - upper: 'UPPERCASE', - start: 'Start Of Each Word', - sentence: 'Like a sentence' + nothing: 'Manténgase sin cambios', + lower: 'minúsculas', + upper: 'MAYÚSCULAS', + start: 'Al Principio De Cada Palabra', + sentence: 'Como una oración' }, previewVolume: 'Volumen de previsualización', executeCommand: { @@ -332,7 +329,7 @@ const en = { search: 'buscar', charts: 'charts', favorites: 'favoritos', - linkAnalyzer: 'analizar links', + linkAnalyzer: 'analizar enlaces', settings: 'ajustes', about: 'acerca de' }, From 3a58dba20bf5136563b3b10e648ff74eedbb4772 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:41:05 +0200 Subject: [PATCH 07/20] Actualizar 'src/lang/en-modded.js' --- src/lang/en-modded.js | 122 +++++++++++++++++++++--------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/src/lang/en-modded.js b/src/lang/en-modded.js index 50fbf59..ff70ee9 100644 --- a/src/lang/en-modded.js +++ b/src/lang/en-modded.js @@ -1,57 +1,57 @@ const en = { globals: { - welcome: 'Bienvenido a deemix', - back: 'atrás', - loading: 'cargando', - download: 'Descarga {0}', - by: 'por {0}', - in: 'en {0}', - download_hint: 'Descargar', - play_hint: 'Reproducir', - toggle_download_tab_hint: 'Expandir/Colapsar', - clean_queue_hint: 'Limpiar terminados', - cancel_queue_hint: 'Cancelar todos', + welcome: 'Welcome to deemix', + back: 'back', + loading: 'loading', + download: 'Download {0}', + by: 'by {0}', + in: 'in {0}', + download_hint: 'Download', + play_hint: 'Play', + toggle_download_tab_hint: 'Expand/Collapse', + clean_queue_hint: 'Clear Finished', + cancel_queue_hint: 'Cancel All', listTabs: { empty: '', - all: 'todos', - top_result: 'mejores resultados', - album: 'álbum | álbumes', - artist: 'artista | artistas', - single: 'sencillo | sencillos', - title: 'título | títulos', - track: 'canción | canciones', - trackN: '0 canciones | {n} canción | {n} canciones', - releaseN: '0 entregas | {n} entrega | {n} entregas', - playlist: 'lista de reproducción | listas de reproducción', - compile: 'compilación | compilaciones', + all: 'all', + top_result: 'top result', + album: 'album | albums', + artist: 'artist | artists', + single: 'single | singles', + title: 'title | titles', + track: 'track | tracks', + trackN: '0 tracks | {n} track | {n} tracks', + releaseN: '0 releases | {n} release | {n} releases', + playlist: 'playlist | playlists', + compile: 'compilation | compilations', ep: 'ep | eps', - spotifyPlaylist: 'lista de reproducción spotify | listas de reproducción spotify', - releaseDate: 'fecha de publicación', + spotifyPlaylist: 'spotify playlist | spotify playlists', + releaseDate: 'release date', error: 'error' } }, about: { titles: { - usefulLinks: 'Enlaces útiles', - bugReports: 'Reportar fallos', - contributing: 'Contribuye', - donations: 'Donaciones', - license: 'Licencia' + usefulLinks: 'Useful Links', + bugReports: 'Bug Reports', + contributing: 'Contributing', + donations: 'Donations', + license: 'License' }, subtitles: { - bugReports: "¿Hay algo que no funcione en Deemix? ¡Díganoslo!", - contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!', - donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' + bugReports: "Is there something that isn't working in deemix? Tell us!", + contributing: 'You want to contribute to this project? You can do it in different ways!', + donations: 'You want to contribute monetarily? You could make a donation!' }, - usesLibrary: 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', - thanks: `Gracias a rtonno, uhwot y lollilol por ayudarme con este proyecto, a BasCurtiz y scarvimane por hacer el icono.`, - upToDate: `Mantente al día con las actualizaciones siguiendo el canal de noticias en Telegram.`, - officialWebsite: 'Página web oficial', - officialRepo: 'Repositorio de la biblioteca oficial', - officialWebuiRepo: 'Repositorio oficial de WebUI', - officialSubreddit: 'Subreddit oficial', - newsChannel: 'Canal de noticias', - questions: `Si tienes preguntas o problemas con la aplicación, busca una solución en el subreddit primero. Luego, si no encuentras nada puedes hacer un post con tu problema en el subreddit.`, + usesLibrary: 'This app uses the deemix library, which you can use to make your own UI for deemix.', + thanks: `Thanks to rtonno, uhwot and lollilol for helping me with this project and to BasCurtiz and scarvimane for making the icon.`, + upToDate: `Stay up to date with the updates by following the news channel on Telegram.`, + officialWebsite: 'Official Website', + officialRepo: 'Official Library Repository', + officialWebuiRepo: 'Official WebUI Repository', + officialSubreddit: 'Official Subreddit', + newsChannel: 'News Channel', + questions: `If you have questions or problems with the app, search for a solution in the subreddit 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 DO NOT report a bug if it's been already reported.`, duplicateReports: 'Duplicate bug reports will be closed, so keep an eye out on that.', @@ -307,38 +307,38 @@ const en = { start: 'Start Of Each Word', sentence: 'Like a sentence' }, - previewVolume: 'Volumen de previsualización', + previewVolume: 'Preview Volume', executeCommand: { - title: 'Comando a ejecutar después de la descarga', - description: 'Deje en blanco para no hacer nada' + title: 'Command to execute after download', + description: 'Leave blank for no action' } }, spotify: { - title: 'Funciones de Spotify', - clientID: 'ID del cliente de Spotify', - clientSecret: 'Cliente secreto de Spotify', - username: 'Nombre de usuario de Spotify' + title: 'Spotify Features', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Spotify username' }, - reset: 'Restablecer el valor por defecto', - save: 'Guardar', + reset: 'Reset to Default', + save: 'Save', toasts: { - init: '¡Configuraciones cargadas!', - update: '¡Ajustes actualizados!', - ARLcopied: 'ARL copiado al portapapeles' + init: 'Settings loaded!', + update: 'Settings updated!', + ARLcopied: 'ARL copied to clipboard' } }, sidebar: { - home: 'inicio', - search: 'buscar', + home: 'home', + search: 'search', charts: 'charts', - favorites: 'favoritos', - linkAnalyzer: 'analizar links', - settings: 'ajustes', - about: 'acerca de' + favorites: 'favorites', + linkAnalyzer: 'link analyzer', + settings: 'settings', + about: 'about' }, tracklist: { - downloadSelection: 'Descargar selección' + downloadSelection: 'Download selection' } } -export default es \ No newline at end of file +export default en \ No newline at end of file From 91597ce1877e9a3d064568fd78dbe5ad14654a65 Mon Sep 17 00:00:00 2001 From: peter9811 Date: Wed, 29 Jul 2020 14:41:16 +0200 Subject: [PATCH 08/20] Actualizar 'src/lang/en.js' --- src/lang/{en-modded.js => en.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/lang/{en-modded.js => en.js} (100%) diff --git a/src/lang/en-modded.js b/src/lang/en.js similarity index 100% rename from src/lang/en-modded.js rename to src/lang/en.js From 6863384632b82f562240f3a026ca3d45dd286932 Mon Sep 17 00:00:00 2001 From: RemixDev Date: Wed, 29 Jul 2020 14:53:10 +0200 Subject: [PATCH 09/20] Added Spanish option in settings --- public/js/bundle.js | 10 +++++----- src/plugins/i18n.js | 4 +++- src/utils/flags.js | 4 +++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/public/js/bundle.js b/public/js/bundle.js index 1c5e5ee..8213249 100644 --- a/public/js/bundle.js +++ b/public/js/bundle.js @@ -3,7 +3,7 @@ * (c) 2014-2019 Evan You * Released under the MIT License. */ -var t=Object.freeze({});function e(t){return null==t}function n(t){return null!=t}function a(t){return!0===t}function i(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function r(t){return null!==t&&"object"==typeof t}var s=Object.prototype.toString;function o(t){return"[object Object]"===s.call(t)}function l(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function c(t){return n(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function u(t){return null==t?"":Array.isArray(t)||o(t)&&t.toString===s?JSON.stringify(t,null,2):String(t)}function d(t){var e=parseFloat(t);return isNaN(e)?t:e}function p(t,e){for(var n=Object.create(null),a=t.split(","),i=0;i-1)return t.splice(n,1)}}var v=Object.prototype.hasOwnProperty;function g(t,e){return v.call(t,e)}function _(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var y=/-(\w)/g,b=_((function(t){return t.replace(y,(function(t,e){return e?e.toUpperCase():""}))})),w=_((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),A=/\B([A-Z])/g,k=_((function(t){return t.replace(A,"-$1").toLowerCase()}));var C=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var a=arguments.length;return a?a>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function x(t,e){e=e||0;for(var n=t.length-e,a=new Array(n);n--;)a[n]=t[n+e];return a}function T(t,e){for(var n in e)t[n]=e[n];return t}function $(t){for(var e={},n=0;n0,K=W&&W.indexOf("edge/")>0,Y=(W&&W.indexOf("android"),W&&/iphone|ipad|ipod|ios/.test(W)||"ios"===V),J=(W&&/chrome\/\d+/.test(W),W&&/phantomjs/.test(W),W&&W.match(/firefox\/(\d+)/)),X={}.watch,Z=!1;if(U)try{var tt={};Object.defineProperty(tt,"passive",{get:function(){Z=!0}}),window.addEventListener("test-passive",null,tt)}catch(t){}var et=function(){return void 0===z&&(z=!U&&!H&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),z},nt=U&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function at(t){return"function"==typeof t&&/native code/.test(t.toString())}var it,rt="undefined"!=typeof Symbol&&at(Symbol)&&"undefined"!=typeof Reflect&&at(Reflect.ownKeys);it="undefined"!=typeof Set&&at(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var st=S,ot=0,lt=function(){this.id=ot++,this.subs=[]};lt.prototype.addSub=function(t){this.subs.push(t)},lt.prototype.removeSub=function(t){m(this.subs,t)},lt.prototype.depend=function(){lt.target&<.target.addDep(this)},lt.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e-1)if(r&&!g(i,"default"))s=!1;else if(""===s||s===k(t)){var l=Rt(String,i.type);(l<0||o0&&(le((l=t(l,(s||"")+"_"+o))[0])&&le(u)&&(d[c]=mt(u.text+l[0].text),l.shift()),d.push.apply(d,l)):i(l)?le(u)?d[c]=mt(u.text+l):""!==l&&d.push(mt(l)):le(l)&&le(u)?d[c]=mt(u.text+l.text):(a(r._isVList)&&n(l.tag)&&e(l.key)&&n(s)&&(l.key="__vlist"+s+"_"+o+"__"),d.push(l)));return d}(t):void 0}function le(t){return n(t)&&n(t.text)&&!1===t.isComment}function ce(t,e){if(t){for(var n=Object.create(null),a=rt?Reflect.ownKeys(t):Object.keys(t),i=0;i0,s=e?!!e.$stable:!r,o=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&a&&a!==t&&o===a.$key&&!r&&!a.$hasNormal)return a;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=fe(n,l,e[l]))}else i={};for(var c in n)c in i||(i[c]=he(n,c));return e&&Object.isExtensible(e)&&(e._normalized=i),R(i,"$stable",s),R(i,"$key",o),R(i,"$hasNormal",r),i}function fe(t,e,n){var a=function(){var t=arguments.length?n.apply(null,arguments):n({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:oe(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:a,enumerable:!0,configurable:!0}),a}function he(t,e){return function(){return t[e]}}function me(t,e){var a,i,s,o,l;if(Array.isArray(t)||"string"==typeof t)for(a=new Array(t.length),i=0,s=t.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return on.now()})}function ln(){var t,e;for(rn=sn(),nn=!0,Xe.sort((function(t,e){return t.id-e.id})),an=0;anan&&Xe[n].id>t.id;)n--;Xe.splice(n+1,0,t)}else Xe.push(t);en||(en=!0,Zt(ln))}}(this)},un.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||r(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){Bt(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},un.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},un.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},un.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||m(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:S,set:S};function pn(t,e,n){dn.get=function(){return this[e][n]},dn.set=function(t){this[e][n]=t},Object.defineProperty(t,n,dn)}function fn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},a=t._props={},i=t.$options._propKeys=[];t.$parent&&wt(!1);var r=function(r){i.push(r);var s=Mt(r,e,n,t);Ct(a,r,s),r in t||pn(t,"_props",r)};for(var s in e)r(s);wt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?S:C(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;o(e=t._data="function"==typeof e?function(t,e){ut();try{return t.call(e,e)}catch(t){return Bt(t,e,"data()"),{}}finally{dt()}}(e,t):e||{})||(e={});var n=Object.keys(e),a=t.$options.props,i=(t.$options.methods,n.length);for(;i--;){var r=n[i];a&&g(a,r)||j(r)||pn(t,"_data",r)}kt(e,!0)}(t):kt(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),a=et();for(var i in e){var r=e[i],s="function"==typeof r?r:r.get;a||(n[i]=new un(t,s||S,S,hn)),i in t||mn(t,i,r)}}(t,e.computed),e.watch&&e.watch!==X&&function(t,e){for(var n in e){var a=e[n];if(Array.isArray(a))for(var i=0;i-1:"string"==typeof t?t.split(",").indexOf(e)>-1:(n=t,"[object RegExp]"===s.call(n)&&t.test(e));var n}function xn(t,e){var n=t.cache,a=t.keys,i=t._vnode;for(var r in n){var s=n[r];if(s){var o=kn(s.componentOptions);o&&!e(o)&&Tn(n,r,a,i)}}}function Tn(t,e,n,a){var i=t[e];!i||a&&i.tag===a.tag||i.componentInstance.$destroy(),t[e]=null,m(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=yn++,n._isVue=!0,e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),a=e._parentVnode;n.parent=e.parent,n._parentVnode=a;var i=a.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=It(bn(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&We(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,a=e.$vnode=n._parentVnode,i=a&&a.context;e.$slots=ue(n._renderChildren,i),e.$scopedSlots=t,e._c=function(t,n,a,i){return Oe(e,t,n,a,i,!1)},e.$createElement=function(t,n,a,i){return Oe(e,t,n,a,i,!0)};var r=a&&a.data;Ct(e,"$attrs",r&&r.attrs||t,null,!0),Ct(e,"$listeners",n._parentListeners||t,null,!0)}(n),Je(n,"beforeCreate"),function(t){var e=ce(t.$options.inject,t);e&&(wt(!1),Object.keys(e).forEach((function(n){Ct(t,n,e[n])})),wt(!0))}(n),fn(n),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(n),Je(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=xt,t.prototype.$delete=Tt,t.prototype.$watch=function(t,e,n){if(o(e))return _n(this,t,e,n);(n=n||{}).user=!0;var a=new un(this,t,e,n);if(n.immediate)try{e.call(this,a.value)}catch(t){Bt(t,this,'callback for immediate watcher "'+a.expression+'"')}return function(){a.teardown()}}}(wn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var a=this;if(Array.isArray(t))for(var i=0,r=t.length;i1?x(n):n;for(var a=x(arguments,1),i='event handler for "'+t+'"',r=0,s=n.length;rparseInt(this.max)&&Tn(s,o[0],o,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return M}};Object.defineProperty(t,"config",e),t.util={warn:st,extend:T,mergeOptions:It,defineReactive:Ct},t.set=xt,t.delete=Tt,t.nextTick=Zt,t.observable=function(t){return kt(t),t},t.options=Object.create(null),I.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Sn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=x(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=It(this.options,t),this}}(t),An(t),function(t){I.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&o(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:et}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Le}),wn.version="2.6.11";var Nn=p("style,class"),Ln=p("input,textarea,option,select,progress"),Dn=function(t,e,n){return"value"===n&&Ln(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},En=p("contenteditable,draggable,spellcheck"),Pn=p("events,caret,typing,plaintext-only"),In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Mn=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},On=function(t){return Mn(t)?t.slice(6,t.length):""},jn=function(t){return null==t||!1===t};function Rn(t){for(var e=t.data,a=t,i=t;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(e=Bn(i.data,e));for(;n(a=a.parent);)a&&a.data&&(e=Bn(e,a.data));return function(t,e){if(n(t)||n(e))return zn(t,qn(e));return""}(e.staticClass,e.class)}function Bn(t,e){return{staticClass:zn(t.staticClass,e.staticClass),class:n(t.class)?[t.class,e.class]:e.class}}function zn(t,e){return t?e?t+" "+e:t:e||""}function qn(t){return Array.isArray(t)?function(t){for(var e,a="",i=0,r=t.length;i-1?fa(t,e,n):In(e)?jn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):En(e)?t.setAttribute(e,function(t,e){return jn(e)||"false"===e?"false":"contenteditable"===t&&Pn(e)?e:"true"}(e,n)):Mn(e)?jn(n)?t.removeAttributeNS(Fn,On(e)):t.setAttributeNS(Fn,e,n):fa(t,e,n)}function fa(t,e,n){if(jn(n))t.removeAttribute(e);else{if(Q&&!G&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var a=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",a)};t.addEventListener("input",a),t.__ieph=!0}t.setAttribute(e,n)}}var ha={create:da,update:da};function ma(t,a){var i=a.elm,r=a.data,s=t.data;if(!(e(r.staticClass)&&e(r.class)&&(e(s)||e(s.staticClass)&&e(s.class)))){var o=Rn(a),l=i._transitionClasses;n(l)&&(o=zn(o,qn(l))),o!==i._prevClass&&(i.setAttribute("class",o),i._prevClass=o)}}var va,ga,_a,ya,ba,wa,Aa={create:ma,update:ma},ka=/[\w).+\-_$\]]/;function Ca(t){var e,n,a,i,r,s=!1,o=!1,l=!1,c=!1,u=0,d=0,p=0,f=0;for(a=0;a=0&&" "===(m=t.charAt(h));h--);m&&ka.test(m)||(c=!0)}}else void 0===i?(f=a+1,i=t.slice(0,a).trim()):v();function v(){(r||(r=[])).push(t.slice(f,a).trim()),f=a+1}if(void 0===i?i=t.slice(0,a).trim():0!==f&&v(),r)for(a=0;a-1?{exp:t.slice(0,ya),key:'"'+t.slice(ya+1)+'"'}:{exp:t,key:null};ga=t,ya=ba=wa=0;for(;!za();)qa(_a=Ba())?Ha(_a):91===_a&&Ua(_a);return{exp:t.slice(0,ba),key:t.slice(ba+1,wa)}}(t);return null===n.key?t+"="+e:"$set("+n.exp+", "+n.key+", "+e+")"}function Ba(){return ga.charCodeAt(++ya)}function za(){return ya>=va}function qa(t){return 34===t||39===t}function Ua(t){var e=1;for(ba=ya;!za();)if(qa(t=Ba()))Ha(t);else if(91===t&&e++,93===t&&e--,0===e){wa=ya;break}}function Ha(t){for(var e=t;!za()&&(t=Ba())!==e;);}var Va;function Wa(t,e,n){var a=Va;return function i(){var r=e.apply(null,arguments);null!==r&&Ka(t,i,n,a)}}var Qa=Vt&&!(J&&Number(J[1])<=53);function Ga(t,e,n,a){if(Qa){var i=rn,r=e;e=r._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return r.apply(this,arguments)}}Va.addEventListener(t,e,Z?{capture:n,passive:a}:n)}function Ka(t,e,n,a){(a||Va).removeEventListener(t,e._wrapper||e,n)}function Ya(t,a){if(!e(t.data.on)||!e(a.data.on)){var i=a.data.on||{},r=t.data.on||{};Va=a.elm,function(t){if(n(t.__r)){var e=Q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}n(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(i),ie(i,r,Ga,Ka,Wa,a.context),Va=void 0}}var Ja,Xa={create:Ya,update:Ya};function Za(t,a){if(!e(t.data.domProps)||!e(a.data.domProps)){var i,r,s=a.elm,o=t.data.domProps||{},l=a.data.domProps||{};for(i in n(l.__ob__)&&(l=a.data.domProps=T({},l)),o)i in l||(s[i]="");for(i in l){if(r=l[i],"textContent"===i||"innerHTML"===i){if(a.children&&(a.children.length=0),r===o[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=r;var c=e(r)?"":String(r);ti(s,c)&&(s.value=c)}else if("innerHTML"===i&&Vn(s.tagName)&&e(s.innerHTML)){(Ja=Ja||document.createElement("div")).innerHTML=""+r+"";for(var u=Ja.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;u.firstChild;)s.appendChild(u.firstChild)}else if(r!==o[i])try{s[i]=r}catch(t){}}}}function ti(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var a=t.value,i=t._vModifiers;if(n(i)){if(i.number)return d(a)!==d(e);if(i.trim)return a.trim()!==e.trim()}return a!==e}(t,e))}var ei={create:Za,update:Za},ni=_((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var a=t.split(n);a.length>1&&(e[a[0].trim()]=a[1].trim())}})),e}));function ai(t){var e=ii(t.style);return t.staticStyle?T(t.staticStyle,e):e}function ii(t){return Array.isArray(t)?$(t):"string"==typeof t?ni(t):t}var ri,si=/^--/,oi=/\s*!important$/,li=function(t,e,n){if(si.test(e))t.style.setProperty(e,n);else if(oi.test(n))t.style.setProperty(k(e),n.replace(oi,""),"important");else{var a=ui(e);if(Array.isArray(n))for(var i=0,r=n.length;i-1?e.split(fi).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function mi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(fi).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",a=" "+e+" ";n.indexOf(a)>=0;)n=n.replace(a," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function vi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,gi(t.name||"v")),T(e,t),e}return"string"==typeof t?gi(t):void 0}}var gi=_((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),_i=U&&!G,yi="transition",bi="transitionend",wi="animation",Ai="animationend";_i&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(yi="WebkitTransition",bi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(wi="WebkitAnimation",Ai="webkitAnimationEnd"));var ki=U?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ci(t){ki((function(){ki(t)}))}function xi(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),hi(t,e))}function Ti(t,e){t._transitionClasses&&m(t._transitionClasses,e),mi(t,e)}function $i(t,e,n){var a=Ni(t,e),i=a.type,r=a.timeout,s=a.propCount;if(!i)return n();var o="transition"===i?bi:Ai,l=0,c=function(){t.removeEventListener(o,u),n()},u=function(e){e.target===t&&++l>=s&&c()};setTimeout((function(){l0&&(n="transition",u=s,d=r.length):"animation"===e?c>0&&(n="animation",u=c,d=l.length):d=(n=(u=Math.max(s,c))>0?s>c?"transition":"animation":null)?"transition"===n?r.length:l.length:0,{type:n,timeout:u,propCount:d,hasTransform:"transition"===n&&Si.test(a[yi+"Property"])}}function Li(t,e){for(;t.length1}function Mi(t,e){!0!==e.data.show&&Ei(e)}var Oi=function(t){var r,s,o={},l=t.modules,c=t.nodeOps;for(r=0;rh?y(t,e(i[g+1])?null:i[g+1].elm,i,f,g,r):f>g&&w(a,p,h)}(p,m,g,r,u):n(g)?(n(t.text)&&c.setTextContent(p,""),y(p,null,g,0,g.length-1,r)):n(m)?w(m,0,m.length-1):n(t.text)&&c.setTextContent(p,""):t.text!==i.text&&c.setTextContent(p,i.text),n(h)&&n(f=h.hook)&&n(f=f.postpatch)&&f(t,i)}}}function x(t,e,i){if(a(i)&&n(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,s.selected!==r&&(s.selected=r);else if(D(qi(s),a))return void(t.selectedIndex!==o&&(t.selectedIndex=o));i||(t.selectedIndex=-1)}}function zi(t,e){return e.every((function(e){return!D(e,t)}))}function qi(t){return"_value"in t?t._value:t.value}function Ui(t){t.target.composing=!0}function Hi(t){t.target.composing&&(t.target.composing=!1,Vi(t.target,"input"))}function Vi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Wi(t){return!t.componentInstance||t.data&&t.data.transition?t:Wi(t.componentInstance._vnode)}var Qi={model:ji,show:{bind:function(t,e,n){var a=e.value,i=(n=Wi(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;a&&i?(n.data.show=!0,Ei(n,(function(){t.style.display=r}))):t.style.display=a?r:"none"},update:function(t,e,n){var a=e.value;!a!=!e.oldValue&&((n=Wi(n)).data&&n.data.transition?(n.data.show=!0,a?Ei(n,(function(){t.style.display=t.__vOriginalDisplay})):Pi(n,(function(){t.style.display="none"}))):t.style.display=a?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,a,i){i||(t.style.display=t.__vOriginalDisplay)}}},Gi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ki(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ki(qe(e.children)):t}function Yi(t){var e={},n=t.$options;for(var a in n.propsData)e[a]=t[a];var i=n._parentListeners;for(var r in i)e[b(r)]=i[r];return e}function Ji(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Xi=function(t){return t.tag||ze(t)},Zi=function(t){return"show"===t.name},tr={name:"transition",props:Gi,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Xi)).length){var a=this.mode,r=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return r;var s=Ki(r);if(!s)return r;if(this._leaving)return Ji(t,r);var o="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?o+"comment":o+s.tag:i(s.key)?0===String(s.key).indexOf(o)?s.key:o+s.key:s.key;var l=(s.data||(s.data={})).transition=Yi(this),c=this._vnode,u=Ki(c);if(s.data.directives&&s.data.directives.some(Zi)&&(s.data.show=!0),u&&u.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(s,u)&&!ze(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var d=u.data.transition=T({},l);if("out-in"===a)return this._leaving=!0,re(d,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ji(t,r);if("in-out"===a){if(ze(s))return c;var p,f=function(){p()};re(l,"afterEnter",f),re(l,"enterCancelled",f),re(d,"delayLeave",(function(t){p=t}))}}return r}}},er=T({tag:String,moveClass:String},Gi);function nr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ar(t){t.data.newPos=t.elm.getBoundingClientRect()}function ir(t){var e=t.data.pos,n=t.data.newPos,a=e.left-n.left,i=e.top-n.top;if(a||i){t.data.moved=!0;var r=t.elm.style;r.transform=r.WebkitTransform="translate("+a+"px,"+i+"px)",r.transitionDuration="0s"}}delete er.mode;var rr={Transition:tr,TransitionGroup:{props:er,beforeMount:function(){var t=this,e=this._update;this._update=function(n,a){var i=Ge(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,a)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),a=this.prevChildren=this.children,i=this.$slots.default||[],r=this.children=[],s=Yi(this),o=0;o-1?Gn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Gn[t]=/HTMLUnknownElement/.test(e.toString())},T(wn.options.directives,Qi),T(wn.options.components,rr),wn.prototype.__patch__=U?Oi:S,wn.prototype.$mount=function(t,e){return function(t,e,n){var a;return t.$el=e,t.$options.render||(t.$options.render=ht),Je(t,"beforeMount"),a=function(){t._update(t._render(),n)},new un(t,a,S,{before:function(){t._isMounted&&!t._isDestroyed&&Je(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,Je(t,"mounted")),t}(this,t=t&&U?Yn(t):void 0,e)},U&&setTimeout((function(){M.devtools&&nt&&nt.emit("init",wn)}),0);var sr=/\{\{((?:.|\r?\n)+?)\}\}/g,or=/[-.*+?^${}()|[\]\/\\]/g,lr=_((function(t){var e=t[0].replace(or,"\\$&"),n=t[1].replace(or,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var cr={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var n=Fa(t,"class");n&&(t.staticClass=JSON.stringify(n));var a=Ia(t,"class",!1);a&&(t.classBinding=a)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}};var ur,dr={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var n=Fa(t,"style");n&&(t.staticStyle=JSON.stringify(ni(n)));var a=Ia(t,"style",!1);a&&(t.styleBinding=a)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},pr=function(t){return(ur=ur||document.createElement("div")).innerHTML=t,ur.textContent},fr=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),hr=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),mr=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),vr=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,gr=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,_r="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+O.source+"]*",yr="((?:"+_r+"\\:)?"+_r+")",br=new RegExp("^<"+yr),wr=/^\s*(\/?)>/,Ar=new RegExp("^<\\/"+yr+"[^>]*>"),kr=/^]+>/i,Cr=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Nr=/&(?:lt|gt|quot|amp|#39);/g,Lr=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Dr=p("pre,textarea",!0),Er=function(t,e){return t&&Dr(t)&&"\n"===e[0]};function Pr(t,e){var n=e?Lr:Nr;return t.replace(n,(function(t){return Sr[t]}))}var Ir,Fr,Mr,Or,jr,Rr,Br,zr,qr=/^@|^v-on:/,Ur=/^v-|^@|^:|^#/,Hr=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Vr=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Wr=/^\(|\)$/g,Qr=/^\[.*\]$/,Gr=/:(.*)$/,Kr=/^:|^\.|^v-bind:/,Yr=/\.[^.\]]+(?=[^\]]*$)/g,Jr=/^v-slot(:|$)|^#/,Xr=/[\r\n]/,Zr=/\s+/g,ts=_(pr);function es(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:ls(e),rawAttrsMap:{},parent:n,children:[]}}function ns(t,e){Ir=e.warn||Ta,Rr=e.isPreTag||N,Br=e.mustUseProp||N,zr=e.getTagNamespace||N;e.isReservedTag;Mr=$a(e.modules,"transformNode"),Or=$a(e.modules,"preTransformNode"),jr=$a(e.modules,"postTransformNode"),Fr=e.delimiters;var n,a,i=[],r=!1!==e.preserveWhitespace,s=e.whitespace,o=!1,l=!1;function c(t){if(u(t),o||t.processed||(t=as(t,e)),i.length||t===n||n.if&&(t.elseif||t.else)&&rs(n,{exp:t.elseif,block:t}),a&&!t.forbidden)if(t.elseif||t.else)s=t,(c=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(a.children))&&c.if&&rs(c,{exp:s.elseif,block:s});else{if(t.slotScope){var r=t.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[r]=t}a.children.push(t),t.parent=a}var s,c;t.children=t.children.filter((function(t){return!t.slotScope})),u(t),t.pre&&(o=!1),Rr(t.tag)&&(l=!1);for(var d=0;d]*>)","i")),p=t.replace(d,(function(t,n,a){return c=a.length,Tr(u)||"noscript"===u||(n=n.replace(//g,"$1").replace(//g,"$1")),Er(u,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));l+=t.length-p.length,t=p,T(u,l-c,l)}else{var f=t.indexOf("<");if(0===f){if(Cr.test(t)){var h=t.indexOf("--\x3e");if(h>=0){e.shouldKeepComment&&e.comment(t.substring(4,h),l,l+h+3),k(h+3);continue}}if(xr.test(t)){var m=t.indexOf("]>");if(m>=0){k(m+2);continue}}var v=t.match(kr);if(v){k(v[0].length);continue}var g=t.match(Ar);if(g){var _=l;k(g[0].length),T(g[1],_,l);continue}var y=C();if(y){x(y),Er(y.tagName,t)&&k(1);continue}}var b=void 0,w=void 0,A=void 0;if(f>=0){for(w=t.slice(f);!(Ar.test(w)||br.test(w)||Cr.test(w)||xr.test(w)||(A=w.indexOf("<",1))<0);)f+=A,w=t.slice(f);b=t.substring(0,f)}f<0&&(b=t),b&&k(b.length),e.chars&&b&&e.chars(b,l-b.length,l)}if(t===n){e.chars&&e.chars(t);break}}function k(e){l+=e,t=t.substring(e)}function C(){var e=t.match(br);if(e){var n,a,i={tagName:e[1],attrs:[],start:l};for(k(e[0].length);!(n=t.match(wr))&&(a=t.match(gr)||t.match(vr));)a.start=l,k(a[0].length),a.end=l,i.attrs.push(a);if(n)return i.unarySlash=n[1],k(n[0].length),i.end=l,i}}function x(t){var n=t.tagName,l=t.unarySlash;r&&("p"===a&&mr(n)&&T(a),o(n)&&a===n&&T(n));for(var c=s(n)||!!l,u=t.attrs.length,d=new Array(u),p=0;p=0&&i[s].lowerCasedTag!==o;s--);else s=0;if(s>=0){for(var c=i.length-1;c>=s;c--)e.end&&e.end(i[c].tag,n,r);i.length=s,a=s&&i[s-1].tag}else"br"===o?e.start&&e.start(t,[],!0,n,r):"p"===o&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}T()}(t,{warn:Ir,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,r,s,u,d){var p=a&&a.ns||zr(t);Q&&"svg"===p&&(r=function(t){for(var e=[],n=0;nl&&(o.push(r=t.slice(l,i)),s.push(JSON.stringify(r)));var c=Ca(a[1].trim());s.push("_s("+c+")"),o.push({"@binding":c}),l=i+a[0].length}return l-1"+("true"===r?":("+e+")":":_q("+e+","+r+")")),Pa(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+r+"):("+s+");if(Array.isArray($$a)){var $$v="+(a?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Ra(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Ra(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Ra(e,"$$c")+"}",null,!0)}(t,a,i);else if("input"===r&&"radio"===s)!function(t,e,n){var a=n&&n.number,i=Ia(t,"value")||"null";Sa(t,"checked","_q("+e+","+(i=a?"_n("+i+")":i)+")"),Pa(t,"change",Ra(e,i),null,!0)}(t,a,i);else if("input"===r||"textarea"===r)!function(t,e,n){var a=t.attrsMap.type,i=n||{},r=i.lazy,s=i.number,o=i.trim,l=!r&&"range"!==a,c=r?"change":"range"===a?"__r":"input",u="$event.target.value";o&&(u="$event.target.value.trim()");s&&(u="_n("+u+")");var d=Ra(e,u);l&&(d="if($event.target.composing)return;"+d);Sa(t,"value","("+e+")"),Pa(t,c,d,null,!0),(o||s)&&Pa(t,"blur","$forceUpdate()")}(t,a,i);else if(!M.isReservedTag(r))return ja(t,a,i),!1;return!0},text:function(t,e){e.value&&Sa(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Sa(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:fr,mustUseProp:Dn,canBeLeftOpenTag:hr,isReservedTag:Wn,getTagNamespace:Qn,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(ps)},vs=_((function(t){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function gs(t,e){t&&(fs=vs(e.staticKeys||""),hs=e.isReservedTag||N,function t(e){if(e.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||f(t.tag)||!hs(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(fs)))}(e),1===e.type){if(!hs(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var n=0,a=e.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,ys=/\([^)]*?\);*$/,bs=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ws={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},As={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ks=function(t){return"if("+t+")return null;"},Cs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ks("$event.target !== $event.currentTarget"),ctrl:ks("!$event.ctrlKey"),shift:ks("!$event.shiftKey"),alt:ks("!$event.altKey"),meta:ks("!$event.metaKey"),left:ks("'button' in $event && $event.button !== 0"),middle:ks("'button' in $event && $event.button !== 1"),right:ks("'button' in $event && $event.button !== 2")};function xs(t,e){var n=e?"nativeOn:":"on:",a="",i="";for(var r in t){var s=Ts(t[r]);t[r]&&t[r].dynamic?i+=r+","+s+",":a+='"'+r+'":'+s+","}return a="{"+a.slice(0,-1)+"}",i?n+"_d("+a+",["+i.slice(0,-1)+"])":n+a}function Ts(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return Ts(t)})).join(",")+"]";var e=bs.test(t.value),n=_s.test(t.value),a=bs.test(t.value.replace(ys,""));if(t.modifiers){var i="",r="",s=[];for(var o in t.modifiers)if(Cs[o])r+=Cs[o],ws[o]&&s.push(o);else if("exact"===o){var l=t.modifiers;r+=ks(["ctrl","shift","alt","meta"].filter((function(t){return!l[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else s.push(o);return s.length&&(i+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map($s).join("&&")+")return null;"}(s)),r&&(i+=r),"function($event){"+i+(e?"return "+t.value+"($event)":n?"return ("+t.value+")($event)":a?"return "+t.value:t.value)+"}"}return e||n?t.value:"function($event){"+(a?"return "+t.value:t.value)+"}"}function $s(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var n=ws[t],a=As[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(a)+")"}var Ss={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(n){return"_b("+n+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:S},Ns=function(t){this.options=t,this.warn=t.warn||Ta,this.transforms=$a(t.modules,"transformCode"),this.dataGenFns=$a(t.modules,"genData"),this.directives=T(T({},Ss),t.directives);var e=t.isReservedTag||N;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ls(t,e){var n=new Ns(e);return{render:"with(this){return "+(t?Ds(t,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ds(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Es(t,e);if(t.once&&!t.onceProcessed)return Ps(t,e);if(t.for&&!t.forProcessed)return Fs(t,e);if(t.if&&!t.ifProcessed)return Is(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',a=Rs(t,e),i="_t("+n+(a?","+a:""),r=t.attrs||t.dynamicAttrs?qs((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:b(t.name),value:t.value,dynamic:t.dynamic}}))):null,s=t.attrsMap["v-bind"];!r&&!s||a||(i+=",null");r&&(i+=","+r);s&&(i+=(r?"":",null")+","+s);return i+")"}(t,e);var n;if(t.component)n=function(t,e,n){var a=e.inlineTemplate?null:Rs(e,n,!0);return"_c("+t+","+Ms(e,n)+(a?","+a:"")+")"}(t.component,t,e);else{var a;(!t.plain||t.pre&&e.maybeComponent(t))&&(a=Ms(t,e));var i=t.inlineTemplate?null:Rs(t,e,!0);n="_c('"+t.tag+"'"+(a?","+a:"")+(i?","+i:"")+")"}for(var r=0;r>>0}(s):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(n+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var r=function(t,e){var n=t.children[0];if(n&&1===n.type){var a=Ls(n,e.options);return"inlineTemplate:{render:function(){"+a.render+"},staticRenderFns:["+a.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);r&&(n+=r+",")}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b("+n+',"'+t.tag+'",'+qs(t.dynamicAttrs)+")"),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Os(t){return 1===t.type&&("slot"===t.tag||t.children.some(Os))}function js(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Is(t,e,js,"null");if(t.for&&!t.forProcessed)return Fs(t,e,js);var a="_empty_"===t.slotScope?"":String(t.slotScope),i="function("+a+"){return "+("template"===t.tag?t.if&&n?"("+t.if+")?"+(Rs(t,e)||"undefined")+":undefined":Rs(t,e)||"undefined":Ds(t,e))+"}",r=a?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+i+r+"}"}function Rs(t,e,n,a,i){var r=t.children;if(r.length){var s=r[0];if(1===r.length&&s.for&&"template"!==s.tag&&"slot"!==s.tag){var o=n?e.maybeComponent(s)?",1":",0":"";return""+(a||Ds)(s,e)+o}var l=n?function(t,e){for(var n=0,a=0;a':'
',Qs.innerHTML.indexOf(" ")>0}var Ys=!!U&&Ks(!1),Js=!!U&&Ks(!0),Xs=_((function(t){var e=Yn(t);return e&&e.innerHTML})),Zs=wn.prototype.$mount;wn.prototype.$mount=function(t,e){if((t=t&&Yn(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var a=n.template;if(a)if("string"==typeof a)"#"===a.charAt(0)&&(a=Xs(a));else{if(!a.nodeType)return this;a=a.innerHTML}else t&&(a=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(a){var i=Gs(a,{outputSourceRange:!1,shouldDecodeNewlines:Ys,shouldDecodeNewlinesForHref:Js,delimiters:n.delimiters,comments:n.comments},this),r=i.render,s=i.staticRenderFns;n.render=r,n.staticRenderFns=s}}return Zs.call(this,t,e)},wn.compile=Gs;const to=io.connect(window.location.href);to.on("connect",()=>{document.getElementById("start_app_placeholder").classList.add("loading_placeholder--hidden")});var eo=new wn;function no(t,e){const{currentTarget:{dataset:{id:n}}}=e;switch(t){case"artist":eo.$emit("artistTab:reset");break;case"album":case"playlist":case"spotifyplaylist":eo.$emit("tracklistTab:reset")}to.emit("getTracklist",{type:t,id:n}),ro(t,n)}function ao(t,e,n){window.windows_stack=[],window.currentStack={};const a=document.getElementsByClassName(e+"_tabcontent");for(let t=0;t{t.addEventListener("click",so)})}window.search_selected="",window.main_selected="",window.windows_stack=[],window.currentStack={};const lo={name:"the-sidebar",data:()=>({appOnline:null,activeTheme:"light",themes:["purple","dark","light"]}),mounted(){this.appOnline=navigator.onLine,window.addEventListener("online",()=>{this.appOnline=!0}),window.addEventListener("offline",()=>{this.appOnline=!1}),this.activeTheme=localStorage.getItem("selectedTheme")||"light"},methods:{changeTheme(t){t!==this.activeTheme&&(this.activeTheme=t,document.documentElement.setAttribute("data-theme",t),localStorage.setItem("selectedTheme",t),document.querySelectorAll("*").forEach(t=>{t.style.transition="all 200ms ease-in-out"}),document.documentElement.addEventListener("transitionend",(function t(){document.querySelectorAll("*").forEach(t=>{t.style.transition=""}),document.documentElement.removeEventListener("transitionend",t)})))},handleSidebarClick(t){const{target:e}=t;if(!(e.matches(".main_tablinks")||e.parentElement.matches(".main_tablinks")))return;let n=e.matches(".main_tablinks")?e:e.parentElement,a=null;switch(n.id){case"main_search_tablink":a="search_tab";break;case"main_home_tablink":a="home_tab";break;case"main_charts_tablink":a="charts_tab";break;case"main_favorites_tablink":a="favorites_tab";break;case"main_analyzer_tablink":a="analyzer_tab";break;case"main_settings_tablink":a="settings_tab";break;case"main_about_tablink":a="about_tab"}a&&ao(n,"main",a)}}};var co=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("aside",{attrs:{id:"sidebar",role:"navigation"},on:{click:t.handleSidebarClick}},[n("span",{staticClass:"main_tablinks",attrs:{id:"main_home_tablink",role:"link","aria-label":"home"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("home")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.home")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_search_tablink",role:"link","aria-label":"search"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("search")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.search")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_charts_tablink",role:"link","aria-label":"charts"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("bubble_chart")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.charts")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_favorites_tablink",role:"link","aria-label":"favorites"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("album")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.favorites")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_analyzer_tablink",role:"link","aria-label":"link analyzer"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("link")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.linkAnalyzer")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_settings_tablink",role:"link","aria-label":"settings"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("settings")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.settings")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_about_tablink",role:"link","aria-label":"info"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("info")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.about")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"theme_selector",role:"link","aria-label":"theme selector"}},[n("i",{staticClass:"material-icons side_icon side_icon--theme"},[t._v("palette")]),t._v(" "),n("div",{attrs:{id:"theme_togglers"}},t._l(t.themes,(function(e){return n("div",{key:e,staticClass:"theme_toggler ",class:[{"theme_toggler--active":t.activeTheme===e},"theme_toggler--"+e],on:{click:function(n){return t.changeTheme(e)}}})})),0)]),t._v(" "),n("div",{class:{online:t.appOnline,offline:!t.appOnline},attrs:{id:"network-status"}},[t.appOnline?n("i",{staticClass:"material-icons"},[t._v("wifi")]):n("i",{staticClass:"material-icons"},[n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}},[n("path",{attrs:{d:"M24 .01c0-.01 0-.01 0 0L0 0v24h24V.01zM0 0h24v24H0V0zm0 0h24v24H0V0z",fill:"none"}}),t._v(" "),n("path",{attrs:{d:"M22.99 9C19.15 5.16 13.8 3.76 8.84 4.78l2.52 2.52c3.47-.17 6.99 1.05 9.63 3.7l2-2zm-4 4c-1.29-1.29-2.84-2.13-4.49-2.56l3.53 3.53.96-.97zM2 3.05L5.07 6.1C3.6 6.82 2.22 7.78 1 9l1.99 2c1.24-1.24 2.67-2.16 4.2-2.77l2.24 2.24C7.81 10.89 6.27 11.73 5 13v.01L6.99 15c1.36-1.36 3.14-2.04 4.92-2.06L18.98 20l1.27-1.26L3.29 1.79 2 3.05zM9 17l3 3 3-3c-1.65-1.66-4.34-1.66-6 0z"}})])])])])};co._withStripped=!0;var uo=function(t,e,n,a,i,r,s,o){const l=("function"==typeof n?n.options:n)||{};l.__file="/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue",l.render||(l.render=t.render,l.staticRenderFns=t.staticRenderFns,l._compiled=!0,i&&(l.functional=!0)),l._scopeId=a;{let t;if(e&&(t=function(t){e.call(this,s(t))}),void 0!==t)if(l.functional){const e=l.render;l.render=function(n,a){return t.call(a),e(n,a)}}else{const e=l.beforeCreate;l.beforeCreate=e?[].concat(e,t):[t]}}return l}({render:co,staticRenderFns:[]},(function(t){t&&t("data-v-7d8957a2_0",{source:"\n#network-status[data-v-7d8957a2] {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: relative;\n\tmargin-top: auto;\n\tbottom: 0;\n}\n#network-status.online i.material-icons[data-v-7d8957a2] {\n\tcolor: hsl(151, 100%, 31%);\n}\n#network-status.offline i.material-icons svg[data-v-7d8957a2] {\n\tfill: red;\n\twidth: 1em;\n\theight: 1em;\n}\n",map:{version:3,sources:["/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue"],names:[],mappings:";AA0DA;CACA,aAAA;CACA,uBAAA;CACA,mBAAA;CACA,kBAAA;CACA,gBAAA;CACA,SAAA;AACA;AAEA;CACA,0BAAA;AACA;AAEA;CACA,SAAA;CACA,UAAA;CACA,WAAA;AACA",file:"TheSidebar.vue",sourcesContent:['\n\n\n\n diff --git a/src/lang/es.js b/src/lang/es.js index 9b2a207..78f612e 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -39,11 +39,12 @@ const es = { license: 'Licencia' }, subtitles: { - bugReports: "¿Hay algo que no funcione en Deemix? ¡Díganoslo!", + bugReports: '¿Hay algo que no funcione en Deemix? ¡Díganoslo!', contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!', donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' }, - usesLibrary: 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', + usesLibrary: + 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', thanks: `Gracias a rtonno, uhwot y lollilol por ayudarme con este proyecto, a BasCurtiz y scarvimane por hacer el icono.`, upToDate: `Mantente al día con las actualizaciones siguiendo el canal de noticias en Telegram.`, officialWebsite: 'Página web oficial', @@ -78,7 +79,7 @@ const es = { invalidURL: 'No se reconoce la URL', unsupportedURL: 'La URL no está soportada aún', ISRCnotOnDeezer: 'Pista ISRC no está disponible en Deezer', - notYourPrivatePlaylist: "No puedes descargar otras listas de reproducción privadas.", + notYourPrivatePlaylist: 'No puedes descargar otras listas de reproducción privadas.', spotifyDisabled: 'Funciones de Spotify no está configurado correctamente.', trackNotOnDeezer: '¡No se encontró la pista en Deezer!', albumNotOnDeezer: '¡El álbum no se encuentra en Deezer!', @@ -86,10 +87,12 @@ const es = { notEncoded: '¡Pista aún no codificada!', notEncodedNoAlternative: '¡Pista aún no codificada y no se ha encontrado ninguna alternativa!', wrongBitrate: 'La pista no se encuentra a la velocidad de bitrate deseada.', - wrongBitrateNoAlternative: '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', + wrongBitrateNoAlternative: + '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', no360RA: 'La pista no está disponible en Reality Audio 360.', - notAvailable: "¡La pista no está disponible en los servidores de Deezer!", - notAvailableNoAlternative: "¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!" + notAvailable: '¡La pista no está disponible en los servidores de Deezer!', + notAvailableNoAlternative: + '¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!' } }, favorites: { @@ -109,7 +112,8 @@ const es = { }, linkAnalyzer: { info: 'Puedes usar esta sección para encontrar más información sobre el enlace que estás tratando de descargar.', - useful: "Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.", + useful: + 'Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.', linkNotSupported: 'Este enlace aún no está soportado', linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.', table: { @@ -129,7 +133,8 @@ const es = { }, search: { startSearching: '¡Comienza a buscar!', - description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', + description: + 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', fans: '{0} fanáticos', noResults: 'No hay resultados', noResultsTrack: 'No se encontraron pistas', @@ -148,7 +153,7 @@ const es = { loggingIn: 'Conectando...', loggedIn: 'Conectado', alreadyLogged: 'Ya está conectado', - loginFailed: "No se puede conectar", + loginFailed: 'No se puede conectar', loggedOut: 'Desconectado', cancellingCurrentItem: 'Cancelando el elemento actual.', currentItemCancelled: 'El elemento actual se ha cancelado.', @@ -212,7 +217,7 @@ const es = { overwriteFile: { title: '¿Desea que sobreescriba los archivos?', y: 'Sí, sobrescribir el archivo', - n: "No, no sobrescribir el archivo", + n: 'No, no sobrescribir el archivo', t: 'Sobrescribir sólo las etiquetas' }, fallbackBitrate: 'La solución alternativa de bitrate', @@ -338,4 +343,4 @@ const es = { } } -export default es \ No newline at end of file +export default es diff --git a/src/lang/fr.js b/src/lang/fr.js index b44992e..4194664 100644 --- a/src/lang/fr.js +++ b/src/lang/fr.js @@ -39,11 +39,12 @@ const fr = { 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 avec 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 !' }, - usesLibrary: 'Cette application utilise la librairie deemix, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.', + usesLibrary: + 'Cette application utilise la librairie deemix, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.', thanks: `Merci à rtonno, uhwot et lollilol pour m'avoir aidé avec ce projet et à BasCurtiz et scarvimane pour avoir réalisé l'icône.`, upToDate: `Restez informé des mises à jour en suivant le canal d'information sur Telegram.`, officialWebsite: 'Site Officiel', @@ -85,19 +86,19 @@ const fr = { 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 !", + 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 !" + notAvailable: 'Piste non disponible sur les serveurs de deezer !', + notAvailableNoAlternative: 'Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !' } }, favorites: { title: 'Favoris', noPlaylists: 'Aucune Playlist trouvée', - noAlbums: "Aucuns Album Favori trouvé", - noArtists: "Aucun Artiste Favori trouvé", + noAlbums: 'Aucuns Album Favori trouvé', + noArtists: 'Aucun Artiste Favori trouvé', noTracks: 'Aucune Piste Favorite trouvée' }, home: { @@ -109,7 +110,8 @@ const fr = { } }, linkAnalyzer: { - info: "Vous pouvez utiliser cette section afin de trouver plus d'informations sur le lien que vous essayer de télcharger.", + info: + "Vous pouvez utiliser cette section afin de trouver plus d'informations sur le lien que vous essayer de télcharger.", 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é", @@ -151,7 +153,7 @@ const fr = { loggingIn: 'Connexion', loggedIn: 'Connecté', alreadyLogged: 'Déjà connecté', - loginFailed: "Connexion impossible", + loginFailed: 'Connexion impossible', loggedOut: 'Déconnecté', cancellingCurrentItem: "Annulation de l'élément actuel.", currentItemCancelled: 'Élément actuel annulé.', @@ -262,7 +264,7 @@ const fr = { length: 'Durée de Piste', barcode: "Code-barres de l'album (UPC)", bpm: 'BPM', - replayGain: "Gain du Replay", + replayGain: 'Gain du Replay', label: "Label de l'Album", lyrics: 'Paroles non synchronisées', copyright: "Droits d'auteur (copyright)", @@ -277,7 +279,7 @@ const fr = { multiArtistSeparator: { title: 'Comment aimeriez-vous séparer vos artistes ?', 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.', using: 'En utilisant "{0}"' }, @@ -341,4 +343,4 @@ const fr = { } } -export default fr \ No newline at end of file +export default fr diff --git a/src/lang/pt-br.js b/src/lang/pt-br.js new file mode 100644 index 0000000..9d35fcb --- /dev/null +++ b/src/lang/pt-br.js @@ -0,0 +1,345 @@ +const ptBr = { + globals: { + welcome: 'Bem vindo ao deemix', + back: 'voltar', + loading: 'carregando', + download: 'Baixar {0}', + by: 'por {0}', + in: 'em {0}', + download_hint: 'Baixar', + play_hint: 'Reproduzir', + toggle_download_tab_hint: 'Expandir/Recolher', + clean_queue_hint: 'Limpar os terminados', + cancel_queue_hint: 'Cancelar todos', + listTabs: { + empty: '', + all: 'todos', + top_result: 'Resultado principal', + album: 'álbum | álbuns', + artist: 'artista | artistas', + single: 'single | singles', + title: 'título | títulos', + track: 'faixa | faixas', + trackN: '0 faixas | {n} faixa | {n} faixas', + releaseN: '0 lançamentos | {n} lançamento | {n} lançamentos', + playlist: 'playlist | playlists', + compile: 'compilação | compilações', + ep: 'ep | eps', + spotifyPlaylist: 'playlist do spotify | playlists do spotify', + releaseDate: 'data de lançamento', + error: 'erro' + } + }, + about: { + titles: { + usefulLinks: 'Links Úteis', + bugReports: 'Relatar Bugs', + contributing: 'Contribuições', + donations: 'Doações', + license: 'Licença' + }, + subtitles: { + bugReports: 'Tem algo não funcionando no deemix? Informe-nos!', + contributing: 'Quer contribuir com este projeto? Há várias formas!', + donations: 'Quer contribuir monetariamente? Você pode fazer uma doação!' + }, + usesLibrary: + 'Este programa usa a biblioteca deemix, no qual você pode usar para construir uma UI para o seu deemix.', + thanks: `Obrigado rtonno, uhwot e lollilol por me ajudarem com este projeto e BasCurtiz e scarvimane por fazerem o ícone.`, + upToDate: `Seja avisado quando houver novas atualizações, siga o nosso canal de notícias no Telegram.`, + officialWebsite: 'Website Oficial', + officialRepo: 'Repositório da Biblioteca Oficial', + officialWebuiRepo: 'Repositório da WebUI Oficial', + officialSubreddit: 'Subreddit Oficial', + newsChannel: 'Canal de Notícia', + questions: `Caso houver dúvidas ou problemas com o programa, procure uma solução no subreddit. Caso não encontre nada, você pode fazer um post com a sua dúvida no subreddit.`, + beforeReporting: `Antes de reportar um bug tenha certeza de que o seu deemix esteja atualizado e que o seu relato seja realmente um bug e não um problema no seu lado de usuário.`, + beSure: `Certifique-se de que o bug ocorra em outras máquinas e NÃO relate-o caso ele já tenha sido relatado.`, + duplicateReports: 'Relatos duplicados de bug serão fechados, então fique de olho.', + dontOpenIssues: `NÃO abra uma issue para fazer questões, o subreddit é para isso.`, + newUI: `Caso seja fluente em python, você pode tentar fazer uma nova UI para o app usando a biblioteca base, ou consertar os bugs da biblioteca com uma pull request na repo do projeto.`, + acceptFeatures: `Eu aceito recursos também, mas nada muito complexo e que possa ser implementado diretamente no aplicativo e não na biblioteca.`, + otherLanguages: `Caso seja fluente em outra linguagem de programação você pode tentar portar o deemix para ela!`, + understandingCode: `Precisa de ajuda para entender o código? Contate o RemixDev no Telegram ou Reddit.`, + contributeWebUI: `Caso saiba Vue.js (JavaScript), HTML ou CSS você pode contribuir para a WebUI.`, + itsFree: `Mantenha em mente que este é um projeto gratuito e que você deve apoiar os artistas que ama antes de apoiar os desenvolvedores.`, + notObligated: `Não se sinta obrigado a doar, agradecemos da mesma forma!`, + lincensedUnder: `Este trabalho é licenciado sob a + GNU General Public License 3.0.` + }, + charts: { + title: 'Charts', + changeCountry: 'Trocar o país', + download: 'Baixe a chart' + }, + errors: { + title: 'Erros para {0}', + ids: { + invalidURL: 'URL não reconhecida', + unsupportedURL: 'URL não suportada', + ISRCnotOnDeezer: 'ISRC da faixa não está no deezer', + notYourPrivatePlaylist: 'Você não pode baixar playlists privadas de outros usuários.', + spotifyDisabled: 'Recursos do Spotify não estão configurados corretamente.', + trackNotOnDeezer: 'Faixa não encontrada no deezer!', + albumNotOnDeezer: 'Álbum não encontrada no deezer!', + notOnDeezer: 'Faixa não disponível no Deezer!', + notEncoded: 'Faixa ainda não encodada!', + notEncodedNoAlternative: 'Faixa ainda não encodada e sem alternativas encontradas!', + wrongBitrate: 'Faixa não encontrada no bitrate desejado.', + wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e sem alternativas encontradas!', + no360RA: 'Faixa não disponível no Reality Audio 360.', + notAvailable: 'Faixa não disponível nos servidores do deezer!', + notAvailableNoAlternative: 'Faixa não disponível nos servidores do deezer e sem alternativas encontradas!' + } + }, + favorites: { + title: 'Favorites', + noPlaylists: 'Nenhuma playlists favorita encontrada', + noAlbums: 'Nenhum álbum favorito encontrado', + noArtists: 'Nenhum artista favorito encontrado', + noTracks: 'Nenhuma faixa favorita encontrada' + }, + home: { + needTologin: 'Você precisa logar na sua conta do Deezer antes de poder começar a baixar.', + openSettings: 'Abrir configurações', + sections: { + popularPlaylists: 'Playlists populares', + popularAlbums: 'Álbuns mais ouvidos' + } + }, + linkAnalyzer: { + info: 'Você pode usar esta seção para descobrir mais informações sobre o link que está tentando baixar.', + useful: + 'Esta função é útil caso esteja tentando baixar algumas faixas que não estão disponíveis no seu país e você quer descobrir aonde estão disponíveis, por exemplo.', + linkNotSupported: 'Este link não é suportado ainda', + linkNotSupportedYet: 'Aparentemente este link ainda não é suportado, tente analizar algum outro.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Duração', + diskNumber: 'Número do disco', + trackNumber: 'Número da faixa', + releaseDate: 'Data de lançamento', + bpm: 'BPM', + label: 'Gravadora', + recordType: 'Tipo de gravação', + genres: 'Gêneros', + tracklist: 'Lista de faixas' + } + }, + search: { + startSearching: 'Comece a procurar!', + description: + 'Você pode procurar uma faixa, um álbum inteiro, um artista, uma playlist... tudo! Você também pode colar um link do Deezer', + fans: '{0} fãs', + noResults: 'Sem resultados', + noResultsTrack: 'Nenhuma faixa encontrada', + noResultsAlbum: 'Nenhum álbum encontrado', + noResultsArtist: 'Nenhum artista encontrado', + noResultsPlaylist: 'Nenhuma playlist encontrada' + }, + searchbar: 'Pesquise tudo o que quiser (ou simplesmente cole um link)', + downloads: 'downloads', + toasts: { + addedToQueue: '{0} adicionado à lista de espera', + alreadyInQueue: '{0} já está na lista de espera!', + finishDownload: '{0} terminou de baixar.', + allDownloaded: 'Todos os downloads terminaram!', + refreshFavs: 'Atualização completa!', + loggingIn: 'Entrando na conta', + loggedIn: 'Conta logada', + alreadyLogged: 'Já está na conta', + loginFailed: 'Não pode entrar na conta', + loggedOut: 'Saindo da conta', + cancellingCurrentItem: 'Cancelando item atual.', + currentItemCancelled: 'Cancelado item atual.', + startAddingArtist: 'Adicionando {0} álbuns à lista de espera', + finishAddingArtist: '{0} álbuns adicionados à lista de espera', + startConvertingSpotifyPlaylist: 'Convertendo faixas do Spotify para faixas do Deezer', + finishConvertingSpotifyPlaylist: 'Playlist do Spotify convertida' + }, + settings: { + title: 'Configurações', + languages: 'Linguagens', + login: { + title: 'Login', + loggedIn: 'Você já está logado como {username}', + arl: { + question: 'Como eu pego a minha ARL?', + update: 'Atualizar a ARL' + }, + logout: 'Sair' + }, + appearance: { + title: 'Aparência', + slimDownloadTab: 'Guia de download slim' + }, + downloadPath: { + title: 'Diretório de download' + }, + templates: { + title: 'Templates', + tracknameTemplate: 'Template do nome da faixa avulsa', + albumTracknameTemplate: 'Template do nome da faixa no álbum', + playlistTracknameTemplate: 'Template do nome da faixa na playlist' + }, + folders: { + title: 'Pastas', + createPlaylistFolder: 'Criar pasta para playlists', + playlistNameTemplate: 'Template do nome da pasta da playlist', + createArtistFolder: 'Criar pasta para artistas', + artistNameTemplate: 'Template do nome da pasta do artista', + createAlbumFolder: 'Criar pasta para álbuns', + albumNameTemplate: 'Template do nome da pasta do álbum', + createCDFolder: 'Criar pasta para discos', + createStructurePlaylist: 'Criar estrutura de pasta para playlists', + createSingleFolder: 'Criar estrutura de pasta para singles' + }, + trackTitles: { + title: 'Títulos das faixas', + padTracks: 'Pad das faixas', + paddingSize: 'Substituir tamanho do padding', + illegalCharacterReplacer: 'Substituto de caracter ilegal' + }, + downloads: { + title: 'Downloads', + queueConcurrency: 'Downloads simultâneos', + maxBitrate: { + title: 'Bitrate preferido', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Posso substituir os arquivos?', + y: 'Sim, substitua os arquivos', + n: 'Não, não substitua os arquivos', + t: 'Substitua apenas as tags' + }, + fallbackBitrate: 'Bitrate reserva', + fallbackSearch: 'Pesquisa reserva', + logErrors: 'Criar log para erros', + logSearched: 'Criar log para faixas pesquisadas', + createM3U8File: 'Criar arquivo de playlist', + syncedLyrics: 'Criar arquivos .lyr (Letras sincronizadas)', + playlistFilenameTemplate: 'Template do nome da playlist', + saveDownloadQueue: 'Salvar lista de espera do download ao fechar o programa' + }, + covers: { + title: 'Capa dos álbuns', + saveArtwork: 'Salvar as capas', + coverImageTemplate: 'Template do nome da capa', + saveArtworkArtist: 'Salvar imagem do artista', + artistImageTemplate: 'Template da imagem do artista', + localArtworkSize: 'Tamanho da artwork local', + embeddedArtworkSize: 'Tamanho da artwork embutida', + localArtworkFormat: { + title: 'Qual formato você quer que a artwork local seja?', + jpg: 'Uma imagem jpeg', + png: 'Uma imagem png', + both: 'Ambos um jpeg e um png' + }, + jpegImageQuality: 'Qualidade do JPEG' + }, + tags: { + head: 'Quais tags salvar', + title: 'Título', + artist: 'Artista', + album: 'Álbuns', + cover: 'Capa', + trackNumber: 'Número da faixa', + trackTotal: 'Total de faixas', + discNumber: 'Número de discos', + discTotal: 'Total de discos', + albumArtist: 'Artista do álbum', + genre: 'Gênero', + year: 'Ano', + date: 'Data', + explicit: 'Letras explícitas', + isrc: 'ISRC', + length: 'Tamanho da faixa', + barcode: 'Barcode do álbum (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Gravadora do álbum', + lyrics: 'Letras desincronizadas', + copyright: 'Copyright', + composer: 'Compositor', + involvedPeople: 'Pessoas involvidas' + }, + other: { + title: 'Outros', + savePlaylistAsCompilation: 'Savar playlists como uma compilação', + useNullSeparator: 'Usar separador nulo', + saveID3v1: 'Salvar ID3v1', + multiArtistSeparator: { + title: 'Como gostaria de separar seus artistas?', + nothing: 'Salvar apenas o artista principal', + default: 'Usando especificação padrão', + andFeat: 'Usando & e feat.', + using: 'Usando "{0}"' + }, + singleAlbumArtist: 'Salvar apenas o artista principal do álbum', + albumVariousArtists: 'Manter "Various Artists" em Artistas do Álbum', + removeAlbumVersion: 'Remover "Album Version" do título de faixas', + removeDuplicateArtists: 'Remover combinações de artistas', + dateFormat: { + title: 'Formato da data para arquivos FLAC', + year: 'AAAA', + month: 'MM', + day: 'DD' + }, + featuredToTitle: { + title: 'O que eu deveria fazer com os artistas feat.?', + 0: 'Nada', + 1: 'Remova-os do título da faixa', + 3: 'Remova-os do título da faixa e do álbum', + 2: 'Mova-os para o título da faixa' + }, + titleCasing: 'Formatação do título', + artistCasing: 'Formatação do artista', + casing: { + nothing: 'Manter intocado', + lower: 'minúsculo', + upper: 'MAIÚSCULO', + start: 'No Começo De Cada Palavra', + sentence: 'Como uma frase' + }, + previewVolume: 'Volume da prévia', + executeCommand: { + title: 'Comando para executar depois do download', + description: 'Deixe em branco para não executar nada' + } + }, + spotify: { + title: 'Destaques do Spotify', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Nome de usuário do Spotify' + }, + reset: 'Resetar para Padrão', + save: 'Save', + toasts: { + init: 'Configurações carregadas!', + update: 'Configurações atualizadas!', + ARLcopied: 'ARL copiado para o clipboard' + } + }, + sidebar: { + home: 'home', + search: 'pesquisa', + charts: 'charts', + favorites: 'favoritos', + linkAnalyzer: 'analizador de links', + settings: 'configurações', + about: 'sobre' + }, + tracklist: { + downloadSelection: 'Baixar seleção' + } +} + +export default ptBr diff --git a/src/lang/pt-pt.js b/src/lang/pt-pt.js index 6c5fc24..c9a4648 100644 --- a/src/lang/pt-pt.js +++ b/src/lang/pt-pt.js @@ -1,344 +1,345 @@ const pt = { - globals: { - welcome: 'Bem-vindo ao deemix', - back: 'voltar', - loading: 'A carregar', - download: 'Transferir {0}', - by: 'por {0}', - in: 'em {0}', - download_hint: 'Descarregar', - play_hint: 'Tocar', - toggle_download_tab_hint: 'Expandir/Recolher', - clean_queue_hint: 'Limpar Finalizados', - cancel_queue_hint: 'Cancelar Tudo', - listTabs: { - empty: '', - all: 'Tudo', - top_result: 'melhor resultado', - album: 'álbum | álbums', - artist: 'artista | artistas', - single: 'single | singles', - title: 'título | títulos', - track: 'faixa | faixas', - trackN: '0 faixas | {n} faixa | {n} faixas', - releaseN: '0 lançamentos | {n} lançamento | {n} lançamento', - playlist: 'lista de reprodução | listas de reprodução', - compile: 'compilação | compilações', - ep: 'ep | eps', - spotifyPlaylist: 'lista de reprodução spotify | listas de reprodução spotify', - releaseDate: 'data de lançamento', - error: 'erro' - } - }, - about: { - titles: { - usefulLinks: 'Links Úteis', - bugReports: 'Relatório de erros', - contributing: 'Contribuir', - donations: 'Doações', - license: 'Licenças' - }, - subtitles: { - bugReports: "Existe alguma coisa que não funciona no deemix? Informa-nos!", - contributing: 'Queres contribuir para o projecto? Podes fazê-lo de diferentes formas!', - donations: 'Desejas contribuir monetariamente? Faz uma doação!' - }, - usesLibrary: 'Esta aplicação usa a biblioteca deemix, que poderás usar para desenvolver o teu proprio UI para o deemix.', - thanks: `Agradeço a rtonno, uhwot and lollilol por me ajudarem neste projeto e a BasCurtiz and scarvimane por elaborarem o ícone.`, - upToDate: `Mantem-te atualizado seguindo o canal de notícias no Telegram.`, - officialWebsite: 'Site Oficial', - officialRepo: 'Repositório Oficial da Biblioteca', - officialWebuiRepo: 'Repositório Oficial WebUI', - officialSubreddit: 'Subreddit Oficial', - newsChannel: 'Canal de Notícias', - questions: `Caso tenhas alguma duvida ou problema com a app, primeiro procura por uma solução no subreddit. Caso não encontres nada podes criar um post com a tua questão no subreddit.`, - beforeReporting: `Antes de reportares um bug certifica-te que estás a correr a versão mais recente e que o que queres reportar é mesmo um bug e não algo que apenas não funciona do teu lado.`, - beSure: `Certifica-te que o erro é reprodutivel noutros dispositivos e NÃO reportes um bug que já tenha sido reportado.`, - duplicateReports: 'Bug reports duplicados serão fechados, mantém-te atento a isso.', - dontOpenIssues: `NÃO abras issues para colocar questões, existe um subreddit para isso.`, - newUI: `Caso sejas fluente em python podes tentar criar um novo UI para a aplicação recorrendo à biblioteca base , ou corrigir erros na biblioteca com um pull request no repositório.`, - acceptFeatures: `Também aceito funcionalidades não complexas caso possam ser implementadas directamente na app e não na biblioteca.`, - otherLanguages: `Caso sejas fluente noutra linguagem de programação podes tentar migrar o deemix para outra linguagem de programação!`, - understandingCode: `Precisas de ajuda a entender o código? Acede a RemixDev no Telegram ou no Reddit.`, - contributeWebUI: `Caso saibas Vue.js (JavaScript), HTML ou CSS podes contribuir para o WebUI.`, - itsFree: `Deves ter em conta que que este projecto é gratuito e deverás apoiar os artistas que aprecias antes de apoiares os programadores.`, - notObligated: `Não te sintas obrigado a doar, agradeço-te na mesma!`, - lincensedUnder: `This work is licensed under a + globals: { + welcome: 'Bem-vindo ao deemix', + back: 'voltar', + loading: 'A carregar', + download: 'Transferir {0}', + by: 'por {0}', + in: 'em {0}', + download_hint: 'Descarregar', + play_hint: 'Tocar', + toggle_download_tab_hint: 'Expandir/Recolher', + clean_queue_hint: 'Limpar Finalizados', + cancel_queue_hint: 'Cancelar Tudo', + listTabs: { + empty: '', + all: 'Tudo', + top_result: 'melhor resultado', + album: 'álbum | álbums', + artist: 'artista | artistas', + single: 'single | singles', + title: 'título | títulos', + track: 'faixa | faixas', + trackN: '0 faixas | {n} faixa | {n} faixas', + releaseN: '0 lançamentos | {n} lançamento | {n} lançamento', + playlist: 'lista de reprodução | listas de reprodução', + compile: 'compilação | compilações', + ep: 'ep | eps', + spotifyPlaylist: 'lista de reprodução spotify | listas de reprodução spotify', + releaseDate: 'data de lançamento', + error: 'erro' + } + }, + about: { + titles: { + usefulLinks: 'Links Úteis', + bugReports: 'Relatório de erros', + contributing: 'Contribuir', + donations: 'Doações', + license: 'Licenças' + }, + subtitles: { + bugReports: 'Existe alguma coisa que não funciona no deemix? Informa-nos!', + contributing: 'Queres contribuir para o projecto? Podes fazê-lo de diferentes formas!', + donations: 'Desejas contribuir monetariamente? Faz uma doação!' + }, + usesLibrary: + 'Esta aplicação usa a biblioteca deemix, que poderás usar para desenvolver o teu proprio UI para o deemix.', + thanks: `Agradeço a rtonno, uhwot and lollilol por me ajudarem neste projeto e a BasCurtiz and scarvimane por elaborarem o ícone.`, + upToDate: `Mantem-te atualizado seguindo o canal de notícias no Telegram.`, + officialWebsite: 'Site Oficial', + officialRepo: 'Repositório Oficial da Biblioteca', + officialWebuiRepo: 'Repositório Oficial WebUI', + officialSubreddit: 'Subreddit Oficial', + newsChannel: 'Canal de Notícias', + questions: `Caso tenhas alguma duvida ou problema com a app, primeiro procura por uma solução no subreddit. Caso não encontres nada podes criar um post com a tua questão no subreddit.`, + beforeReporting: `Antes de reportares um bug certifica-te que estás a correr a versão mais recente e que o que queres reportar é mesmo um bug e não algo que apenas não funciona do teu lado.`, + beSure: `Certifica-te que o erro é reprodutivel noutros dispositivos e NÃO reportes um bug que já tenha sido reportado.`, + duplicateReports: 'Bug reports duplicados serão fechados, mantém-te atento a isso.', + dontOpenIssues: `NÃO abras issues para colocar questões, existe um subreddit para isso.`, + newUI: `Caso sejas fluente em python podes tentar criar um novo UI para a aplicação recorrendo à biblioteca base , ou corrigir erros na biblioteca com um pull request no repositório.`, + acceptFeatures: `Também aceito funcionalidades não complexas caso possam ser implementadas directamente na app e não na biblioteca.`, + otherLanguages: `Caso sejas fluente noutra linguagem de programação podes tentar migrar o deemix para outra linguagem de programação!`, + understandingCode: `Precisas de ajuda a entender o código? Acede a RemixDev no Telegram ou no Reddit.`, + contributeWebUI: `Caso saibas Vue.js (JavaScript), HTML ou CSS podes contribuir para o WebUI.`, + itsFree: `Deves ter em conta que que este projecto é gratuito e deverás apoiar os artistas que aprecias antes de apoiares os programadores.`, + notObligated: `Não te sintas obrigado a doar, agradeço-te na mesma!`, + lincensedUnder: `This work is licensed under a GNU General Public License 3.0.` - }, - charts: { - title: 'Tabelas', - changeCountry: 'Alterar país', - download: 'Descarregar tabela' - }, - errors: { - title: 'Erros para {0}', - ids: { - invalidURL: 'URL não reconhecido', - unsupportedURL: 'URL ainda não suportado', - ISRCnotOnDeezer: 'Track ISRC não disponível no deezer', - notYourPrivatePlaylist: "You can't download others private playlists.", - spotifyDisabled: 'Funcionalidades do Spotify não estão definidas corretamente.', - trackNotOnDeezer: 'Faixa não encontrada no deezer!', - albumNotOnDeezer: 'Álbum não encontrado no deezer!', - notOnDeezer: 'Faixa não encontrada no Deezer!', - notEncoded: 'Faixa ainda não codificada!', - notEncodedNoAlternative: 'Faixa ainda não codificada e não foi encontrada alternativa!', - wrongBitrate: 'Faixa não encontrada no bitrate desejado.', - wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e não foi encontrada alternativa!', - no360RA: 'Faixa não disponível em Reality Audio 360.', - notAvailable: "Faixa não disponível nos servidores do deezer!", - notAvailableNoAlternative: "Faixa não disponível nos servidores do deezer e não foi encontrada alternativa!" - } - }, - favorites: { - title: 'Favoritos', - noPlaylists: 'Listas de reprodução não encontradas', - noAlbums: 'Álbuns favoritos não encontrados', - noArtists: 'Artistas favoritos não encontrados', - noTracks: 'Faixas favoritas não encontradas' - }, - home: { - needTologin: 'Antes de iniciar transferências é necessário efectuar autenticação na conta Deezer.', - openSettings: 'Abrir Definições', - sections: { - popularPlaylists: 'Listas de reprodução populares', - popularAlbums: 'Álbuns mais ouvidos' - } - }, - linkAnalyzer: { - info: 'Podes usar esta secção para obteres mais informação sobre o link que estás a tentar transferir.', - useful: - "Isto é útil caso estejas a tentar transferir faixas que não estão disponíveis no teu país e queres saber onde estão disponíveis, por exemplo.", - linkNotSupported: 'Este link ainda não é suportado', - linkNotSupportedYet: 'Parece que este link ainda não é suportado, tenta analisar outro.', - table: { - id: 'ID', - isrc: 'ISRC', - upc: 'UPC', - duration: 'Duração', - diskNumber: 'Número do disco', - trackNumber: 'Número da faixa', - releaseDate: 'Data de lançamento', - bpm: 'BPM', - label: 'Editora', - recordType: 'Record Type', - genres: 'Géneros', - tracklist: 'Lista de faixas' - } - }, - search: { - startSearching: 'Começa a pesquisar!', - description: - 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer', - fans: '{0} fãs', - noResults: 'Sem resultados', - noResultsTrack: 'Faixa não encontrada', - noResultsAlbum: 'Álbum não encontrado', - noResultsArtist: 'Artista não encontrado', - noResultsPlaylist: 'Lista de reprodução não encontrada' - }, - searchbar: 'Pesquisa o que quiseres (ou cola um link)', - downloads: 'transferências', - toasts: { - addedToQueue: '{0} adicionados à fila', - alreadyInQueue: '{0} já está na fila!', - finishDownload: '{0} foi transferido.', - allDownloaded: 'Todas as transferências terminadas!', - refreshFavs: 'Actualizar terminados!', - loggingIn: 'A autenticar', - loggedIn: 'Autenticado', - alreadyLogged: 'Já estás autenticado', - loginFailed: "Couldn't log in", - loggedOut: 'Logged out', - cancellingCurrentItem: 'A cancelar item actual.', - currentItemCancelled: 'Item actual cancelado.', - startAddingArtist: 'A adicionar {0} álbuns à fila', - finishAddingArtist: 'Adicionados {0} álbuns à fila', - startConvertingSpotifyPlaylist: 'A converter faixas do spotify em faixas do deezer', - finishConvertingSpotifyPlaylist: 'Lista de reprodução do Spotify convertida.' - }, - settings: { - title: 'Definições', - languages: 'Idioma', - login: { - title: 'Login', - loggedIn: 'Estás autenticado como {username}', - arl: { - question: 'Como obter o meu ARL?', - update: 'Atualizar ARL' - }, - logout: 'Sair' - }, - appearance: { - title: 'Aspecto', - slimDownloadTab: 'Aba de transferências estreita' - }, - downloadPath: { - title: 'Caminho de transferências' - }, - templates: { - title: 'Formatos', - tracknameTemplate: 'Formato do nome de faixa', - albumTracknameTemplate: 'Formato do nome de Álbum', - playlistTracknameTemplate: 'Formato do nome de lista de reprodução' - }, - folders: { - title: 'Pastas', - createPlaylistFolder: 'Criar pasta para lista de reprodução', - playlistNameTemplate: 'Formato da pasta de lista de reprodução', - createArtistFolder: 'Criar pasta para artista', - artistNameTemplate: 'Formato da pasta de artista', - createAlbumFolder: 'Criar pasta para álbum', - albumNameTemplate: 'Formato da pasta de álbum', - createCDFolder: 'Criar pasta para CDs', - createStructurePlaylist: 'Criar estrutura de pastas para listas reprodução', - createSingleFolder: 'Criar estrutura de pastas para singles' - }, - trackTitles: { - title: 'Título', - padTracks: 'Pad tracks', - paddingSize: 'Overwrite padding size', - illegalCharacterReplacer: 'Substituir caractere inválidos' - }, - downloads: { - title: 'Transferências', - queueConcurrency: 'Transferências concorrentes', - maxBitrate: { - title: 'Bitrate preferencial', - 9: 'FLAC 1411kbps', - 3: 'MP3 320kbps', - 1: 'MP3 128kbps' - }, - overwriteFile: { - title: 'Ficheiros existentes. Substituir?', - y: 'Sim, substituir o ficheiro', - n: "Não substituir o ficheiro", - t: 'Sobrescrever apenas as etiquetas' - }, - fallbackBitrate: 'Bitrate fallback', - fallbackSearch: 'Fallback de pesquisa', - logErrors: 'Criar logs para erros', - logSearched: 'Criar logs para faixas pesquisadas', - createM3U8File: 'Criar ficheiro de lista de reprodução', - syncedLyrics: 'Criar ficheiro .lyr (Letras Sincronizadas)', - playlistFilenameTemplate: 'Formato do nome de ficheiro playlists', - saveDownloadQueue: 'Guardar fila de transferências ao fechar a aplicação' - }, - covers: { - title: 'Capas do Álbum', - saveArtwork: 'Guardar capas', - coverImageTemplate: 'Cover name template', - saveArtworkArtist: 'Save artist image', - artistImageTemplate: 'Artist image template', - localArtworkSize: 'Local artwork size', - embeddedArtworkSize: 'Embedded artwork size', - localArtworkFormat: { - title: 'What format do you want the local artwork to be?', - jpg: 'A jpeg image', - png: 'A png image', - both: 'Both a jpeg and a png' - }, - jpegImageQuality: 'Qualidade de imagem JPEG' - }, - tags: { - head: 'Etiquetas a guardar', - title: 'Título', - artist: 'Artista', - album: 'Álbum', - cover: 'Capa', - trackNumber: 'Número de faixa', - trackTotal: 'Total de faixas', - discNumber: 'Número do Disco', - discTotal: 'Total de Discos', - albumArtist: 'Artista do Álbum', - genre: 'Género', - year: 'Ano', - date: 'Data', - explicit: 'Letra Explícita', - isrc: 'ISRC', - length: 'Duração da faixa', - barcode: 'Código de barras do álbum (UPC)', - bpm: 'BPM', - replayGain: 'Replay Gain', - label: 'Editora do álbum', - lyrics: 'Unsynchronized Lyrics', - copyright: 'Copyright', - composer: 'Compositor', - involvedPeople: 'Pessoas envolvidas' - }, - other: { - title: 'Outros', - savePlaylistAsCompilation: 'Save playlists as compilation', - useNullSeparator: 'Usar separador null', - saveID3v1: 'Também guardar ID3v1', - multiArtistSeparator: { - title: 'Como queres separarar os artistas?', - nothing: 'Guardar apenas o artista principal', - default: 'Usar especificação padrão', - andFeat: 'Usar & e feat.', - using: 'Usar "{0}"' - }, - singleAlbumArtist: 'Guardar apenas o artista principal do álbum', - albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum', - removeAlbumVersion: 'Remover "Album Version" do título da faixa', - removeDuplicateArtists: 'Remover combinação de artistas', - dateFormat: { - title: 'Formtado de data nos ficheiros FLAC', - year: 'AAAA', - month: 'MM', - day: 'DD' - }, - featuredToTitle: { - title: 'What should I do with featured artists?', - 0: 'Nada', - 1: 'Remover do título', - 3: 'Remover do título de do título do album', - 2: 'Movê-lo para o título' - }, - titleCasing: 'Title casing', - artistCasing: 'Artist casing', - casing: { - nothing: 'Manter inalterado', - lower: 'minusculas', - upper: 'MAIÙSCULAS', - start: 'Ínicio De Cada Palavra', - sentence: 'Like a sentence' - }, - previewVolume: 'Preview Volume', - executeCommand: { - title: 'Comando a executar após transferir', - description: 'Deixar em branco para nenhuma acção' - } - }, - spotify: { - title: 'Funcionalidades Spotify', - clientID: 'Spotify clientID', - clientSecret: 'Spotify Client Secret', - username: 'nome de utilizador Spotify' - }, - reset: 'Reset to Default', - save: 'Save', - toasts: { - init: 'Configurações carregadas!', - update: 'Configurações actualizadas', - ARLcopied: 'ARL copied to clipboard' - } - }, - sidebar: { - home: 'início', - search: 'pesquisa', - charts: 'tabelas', - favorites: 'favoritos', - linkAnalyzer: 'link analyzer', - settings: 'definições', - about: 'sobre' - }, - tracklist: { - downloadSelection: 'Descarregar seleccionados' - } + }, + charts: { + title: 'Tabelas', + changeCountry: 'Alterar país', + download: 'Descarregar tabela' + }, + errors: { + title: 'Erros para {0}', + ids: { + invalidURL: 'URL não reconhecido', + unsupportedURL: 'URL ainda não suportado', + ISRCnotOnDeezer: 'Track ISRC não disponível no deezer', + notYourPrivatePlaylist: "You can't download others private playlists.", + spotifyDisabled: 'Funcionalidades do Spotify não estão definidas corretamente.', + trackNotOnDeezer: 'Faixa não encontrada no deezer!', + albumNotOnDeezer: 'Álbum não encontrado no deezer!', + notOnDeezer: 'Faixa não encontrada no Deezer!', + notEncoded: 'Faixa ainda não codificada!', + notEncodedNoAlternative: 'Faixa ainda não codificada e não foi encontrada alternativa!', + wrongBitrate: 'Faixa não encontrada no bitrate desejado.', + wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e não foi encontrada alternativa!', + no360RA: 'Faixa não disponível em Reality Audio 360.', + notAvailable: 'Faixa não disponível nos servidores do deezer!', + notAvailableNoAlternative: 'Faixa não disponível nos servidores do deezer e não foi encontrada alternativa!' + } + }, + favorites: { + title: 'Favoritos', + noPlaylists: 'Listas de reprodução não encontradas', + noAlbums: 'Álbuns favoritos não encontrados', + noArtists: 'Artistas favoritos não encontrados', + noTracks: 'Faixas favoritas não encontradas' + }, + home: { + needTologin: 'Antes de iniciar transferências é necessário efectuar autenticação na conta Deezer.', + openSettings: 'Abrir Definições', + sections: { + popularPlaylists: 'Listas de reprodução populares', + popularAlbums: 'Álbuns mais ouvidos' + } + }, + linkAnalyzer: { + info: 'Podes usar esta secção para obteres mais informação sobre o link que estás a tentar transferir.', + useful: + 'Isto é útil caso estejas a tentar transferir faixas que não estão disponíveis no teu país e queres saber onde estão disponíveis, por exemplo.', + linkNotSupported: 'Este link ainda não é suportado', + linkNotSupportedYet: 'Parece que este link ainda não é suportado, tenta analisar outro.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Duração', + diskNumber: 'Número do disco', + trackNumber: 'Número da faixa', + releaseDate: 'Data de lançamento', + bpm: 'BPM', + label: 'Editora', + recordType: 'Record Type', + genres: 'Géneros', + tracklist: 'Lista de faixas' + } + }, + search: { + startSearching: 'Começa a pesquisar!', + description: + 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer', + fans: '{0} fãs', + noResults: 'Sem resultados', + noResultsTrack: 'Faixa não encontrada', + noResultsAlbum: 'Álbum não encontrado', + noResultsArtist: 'Artista não encontrado', + noResultsPlaylist: 'Lista de reprodução não encontrada' + }, + searchbar: 'Pesquisa o que quiseres (ou cola um link)', + downloads: 'transferências', + toasts: { + addedToQueue: '{0} adicionados à fila', + alreadyInQueue: '{0} já está na fila!', + finishDownload: '{0} foi transferido.', + allDownloaded: 'Todas as transferências terminadas!', + refreshFavs: 'Actualizar terminados!', + loggingIn: 'A autenticar', + loggedIn: 'Autenticado', + alreadyLogged: 'Já estás autenticado', + loginFailed: "Couldn't log in", + loggedOut: 'Logged out', + cancellingCurrentItem: 'A cancelar item actual.', + currentItemCancelled: 'Item actual cancelado.', + startAddingArtist: 'A adicionar {0} álbuns à fila', + finishAddingArtist: 'Adicionados {0} álbuns à fila', + startConvertingSpotifyPlaylist: 'A converter faixas do spotify em faixas do deezer', + finishConvertingSpotifyPlaylist: 'Lista de reprodução do Spotify convertida.' + }, + settings: { + title: 'Definições', + languages: 'Idioma', + login: { + title: 'Login', + loggedIn: 'Estás autenticado como {username}', + arl: { + question: 'Como obter o meu ARL?', + update: 'Atualizar ARL' + }, + logout: 'Sair' + }, + appearance: { + title: 'Aspecto', + slimDownloadTab: 'Aba de transferências estreita' + }, + downloadPath: { + title: 'Caminho de transferências' + }, + templates: { + title: 'Formatos', + tracknameTemplate: 'Formato do nome de faixa', + albumTracknameTemplate: 'Formato do nome de Álbum', + playlistTracknameTemplate: 'Formato do nome de lista de reprodução' + }, + folders: { + title: 'Pastas', + createPlaylistFolder: 'Criar pasta para lista de reprodução', + playlistNameTemplate: 'Formato da pasta de lista de reprodução', + createArtistFolder: 'Criar pasta para artista', + artistNameTemplate: 'Formato da pasta de artista', + createAlbumFolder: 'Criar pasta para álbum', + albumNameTemplate: 'Formato da pasta de álbum', + createCDFolder: 'Criar pasta para CDs', + createStructurePlaylist: 'Criar estrutura de pastas para listas reprodução', + createSingleFolder: 'Criar estrutura de pastas para singles' + }, + trackTitles: { + title: 'Título', + padTracks: 'Pad tracks', + paddingSize: 'Overwrite padding size', + illegalCharacterReplacer: 'Substituir caractere inválidos' + }, + downloads: { + title: 'Transferências', + queueConcurrency: 'Transferências concorrentes', + maxBitrate: { + title: 'Bitrate preferencial', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Ficheiros existentes. Substituir?', + y: 'Sim, substituir o ficheiro', + n: 'Não substituir o ficheiro', + t: 'Sobrescrever apenas as etiquetas' + }, + fallbackBitrate: 'Bitrate fallback', + fallbackSearch: 'Fallback de pesquisa', + logErrors: 'Criar logs para erros', + logSearched: 'Criar logs para faixas pesquisadas', + createM3U8File: 'Criar ficheiro de lista de reprodução', + syncedLyrics: 'Criar ficheiro .lyr (Letras Sincronizadas)', + playlistFilenameTemplate: 'Formato do nome de ficheiro playlists', + saveDownloadQueue: 'Guardar fila de transferências ao fechar a aplicação' + }, + covers: { + title: 'Capas do Álbum', + saveArtwork: 'Guardar capas', + coverImageTemplate: 'Cover name template', + saveArtworkArtist: 'Save artist image', + artistImageTemplate: 'Artist image template', + localArtworkSize: 'Local artwork size', + embeddedArtworkSize: 'Embedded artwork size', + localArtworkFormat: { + title: 'What format do you want the local artwork to be?', + jpg: 'A jpeg image', + png: 'A png image', + both: 'Both a jpeg and a png' + }, + jpegImageQuality: 'Qualidade de imagem JPEG' + }, + tags: { + head: 'Etiquetas a guardar', + title: 'Título', + artist: 'Artista', + album: 'Álbum', + cover: 'Capa', + trackNumber: 'Número de faixa', + trackTotal: 'Total de faixas', + discNumber: 'Número do Disco', + discTotal: 'Total de Discos', + albumArtist: 'Artista do Álbum', + genre: 'Género', + year: 'Ano', + date: 'Data', + explicit: 'Letra Explícita', + isrc: 'ISRC', + length: 'Duração da faixa', + barcode: 'Código de barras do álbum (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Editora do álbum', + lyrics: 'Unsynchronized Lyrics', + copyright: 'Copyright', + composer: 'Compositor', + involvedPeople: 'Pessoas envolvidas' + }, + other: { + title: 'Outros', + savePlaylistAsCompilation: 'Save playlists as compilation', + useNullSeparator: 'Usar separador null', + saveID3v1: 'Também guardar ID3v1', + multiArtistSeparator: { + title: 'Como queres separarar os artistas?', + nothing: 'Guardar apenas o artista principal', + default: 'Usar especificação padrão', + andFeat: 'Usar & e feat.', + using: 'Usar "{0}"' + }, + singleAlbumArtist: 'Guardar apenas o artista principal do álbum', + albumVariousArtists: 'Manter "Various Artists" nos Artistas do Álbum', + removeAlbumVersion: 'Remover "Album Version" do título da faixa', + removeDuplicateArtists: 'Remover combinação de artistas', + dateFormat: { + title: 'Formtado de data nos ficheiros FLAC', + year: 'AAAA', + month: 'MM', + day: 'DD' + }, + featuredToTitle: { + title: 'What should I do with featured artists?', + 0: 'Nada', + 1: 'Remover do título', + 3: 'Remover do título de do título do album', + 2: 'Movê-lo para o título' + }, + titleCasing: 'Title casing', + artistCasing: 'Artist casing', + casing: { + nothing: 'Manter inalterado', + lower: 'minusculas', + upper: 'MAIÙSCULAS', + start: 'Ínicio De Cada Palavra', + sentence: 'Like a sentence' + }, + previewVolume: 'Preview Volume', + executeCommand: { + title: 'Comando a executar após transferir', + description: 'Deixar em branco para nenhuma acção' + } + }, + spotify: { + title: 'Funcionalidades Spotify', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'nome de utilizador Spotify' + }, + reset: 'Reset to Default', + save: 'Save', + toasts: { + init: 'Configurações carregadas!', + update: 'Configurações actualizadas', + ARLcopied: 'ARL copied to clipboard' + } + }, + sidebar: { + home: 'início', + search: 'pesquisa', + charts: 'tabelas', + favorites: 'favoritos', + linkAnalyzer: 'link analyzer', + settings: 'definições', + about: 'sobre' + }, + tracklist: { + downloadSelection: 'Descarregar seleccionados' + } } export default pt diff --git a/src/lang/tr.js b/src/lang/tr.js new file mode 100644 index 0000000..6812e67 --- /dev/null +++ b/src/lang/tr.js @@ -0,0 +1,344 @@ +const tr = { + globals: { + welcome: `Deemix'e hoş geldin.`, + back: `geri`, + loading: `yükleniyor`, + download: 'İndir {0}', + by: '{0} tarafından', + in: '{0} içinde', + download_hint: 'İndir', + play_hint: 'Oynat', + toggle_download_tab_hint: 'Genişlet/Daralt', + clean_queue_hint: 'Tamamlananları Temizle', + cancel_queue_hint: 'Hepsini ', + listTabs: { + empty: '', + all: 'Tümü', + top_result: 'top result', + album: 'albüm | albümler', + artist: 'sanatçı | sanatçılar', + single: 'single | singlelar', + title: 'başlık | başlıklar', + track: 'Parça | Parçalar', + trackN: '0 parça | {n} parça | {n} parça', + releaseN: '0 yayınlanan | {n} yayınlanan | {n} yayınlanan', + playlist: 'oynatma listesi | oynatma listeleri', + compile: 'derleme | derlemeler', + ep: 'kayıt | kayıtlar', + spotifyPlaylist: 'spotify oynatma listesi | oynatma listeleri', + releaseDate: 'yayınlanma tarihi', + error: 'hata' + } + }, + about: { + titles: { + usefulLinks: 'Yararlı Bağlantılar', + bugReports: 'Hata Raporları', + contributing: 'Katkı Sağlayanlar', + donations: 'Bağışlar', + license: 'Lisans' + }, + subtitles: { + bugReports: "Deemix'te çalışmayan bir şey mi var?, Bize bildirin!", + contributing: 'Projeye katkı sağlamak mı istiyorsun? Farklı yollardan sağlayabilirsin!', + donations: 'Bütçe yardımı mı yapmak istiyorsun? Bağış yapabilirsin!' + }, + usesLibrary: + 'deemix kendi kullanıcı arabiriminizi oluşturabileceğiniz, kendine özgü kütüphanesini kullanıyor.', + thanks: ` rtonno, uhwot ve lollilol'a bu projeye yaptığı katkılardan ve BasCurtiz ile scarvimane'e ikonlardan dolayı teşekkür ederim.`, + upToDate: `Telegramdaki haber kanalını takip ederek güncellemelerden haberdar olun.`, + officialWebsite: 'İlgili İnternet Sitemiz', + officialRepo: 'İlgili Kütüphanemiz', + officialWebuiRepo: 'İlgili Web Kullanıcı Arayüzü Kütüphanemiz.', + officialSubreddit: 'İlgili Subreddit adresimiz', + newsChannel: 'Haber Kanalı', + questions: `Eğer uygulama ile ilgili sorularınız veya bir probleminiz varsa,ilk önce subreddit adresinden sorununuzu arayın. Eğer bir şey bulamazsanız, sorununuz ile ilgili bir gönderi paylaşabilirsiniz.`, + beforeReporting: `Bir hatayı bildirmeden önce, uygulamanın son sürümünde olduğunuza veya sorunun sizden kaynaklı olmayıp bir hata olduğuna emin olduktan sonra emin olun.`, + beSure: `Hatanın başka cihazlarda da olduğunu doğrulayın ve Bildirilen bir hatayı tekrar bildirmeyin.`, + duplicateReports: 'Birbirinin aynısı olan hata bildirileri kapatılacaktır, o yüzden dikkatli olun.', + dontOpenIssues: `Soru sormak için hata bildirisi yollamayın, bunun için bir subreddit adresimiz var.`, + newUI: `Eğer Phython kullanmakta iyiysen, ana kütüphaneyi kullanan bir kullanıcı arayüzü yapmayı deneyebilir, veya kütüphanedeki hataları düzeltmek için deposuna değişiklik isteği yollayabilirsin..`, + acceptFeatures: `Yeni özellikleri de kabul ediyorum, fakat karışık şeyleri kütüphaneye değil uygulamaya eklendiği için kabul edemiyorum.`, + otherLanguages: `Eğer diğer programlama dillerinde kendine güveniyorsan, deemix'i farklı dillere port etmeye çalışabilirsin!`, + understandingCode: `Kodu anlamak için yardım mı lazım? Reddit üzerinden veya Telegramdan RemixDev'e ulaş.`, + contributeWebUI: `Eğer Vue.js (JavaScript), HTML veya CSS biliyorsan, Web Kullanıcı Arayüzüne katkıda bulanabilirsin.`, + itsFree: `Bunun ücretsiz bir proje olduğunu ve geliştiricilerden önce sevdiğiniz sanatçıları desteklemeniz gerektiğini unutmayın.`, + notObligated: `Kendinizi bağış yapmak zorunda hissetmeyin!, Sizi her halinizle seviyorum!`, + lincensedUnder: `Bu çalışma lisanslıdır: + GNU General Public License 3.0.` + }, + charts: { + title: 'Grafikler', + changeCountry: 'Ülke Değiştir', + download: 'Grafiği İndir' + }, + errors: { + title: '{0} Hatalı bulundu', + ids: { + invalidURL: 'URL geçersiz.', + unsupportedURL: 'URL şimdilik desteklenmiyor', + ISRCnotOnDeezer: 'ISRC parça deezerda bulunmuyor', + notYourPrivatePlaylist: 'Başkalarının özel oynatma listelerini indiremezsin.', + spotifyDisabled: 'Spotify Özellikleri doğru şekilde ayarlanmamış.', + trackNotOnDeezer: `Parça Deezer'da bulunamadı!`, + albumNotOnDeezer: `Albüm Deezer'da bulunamadı!`, + notOnDeezer: `Parça Deezer'da yok!`, + notEncoded: `Parça henüz dönüştürülmedi!`, + notEncodedNoAlternative: 'Parça henüz dönüştürülmedi ve alternatifi bulunamadı!', + wrongBitrate: 'Parça, istenen kalitede bulunamadı!', + wrongBitrateNoAlternative: 'Parça veya alternatifler istenen kalitede bulunamadı!', + no360RA: 'Parça 360 Derece gerçekçi ses olarak bulunamadı!', + notAvailable: 'Parça Deezer sunucularında bulunamadı!', + notAvailableNoAlternative: 'Parça veya Alternatifleri Deezer sunucularında bulunamadı.!' + } + }, + favorites: { + title: 'Favoriler', + noPlaylists: 'Oynatma listesi bulunamadı.', + noAlbums: 'Favori albümler bulunamadı.', + noArtists: 'Favori sanatçılar bulunamadı.', + noTracks: 'Favori parçalar bulunamadı.' + }, + home: { + needTologin: 'İndirmeden önce Deezer hesabına giriş yapmalısın.', + openSettings: 'Ayarları Aç', + sections: { + popularPlaylists: 'Popüler Oynatma Listeleri', + popularAlbums: 'En çok dinlenen albümler' + } + }, + linkAnalyzer: { + info: 'İndirmeye çalıştığın link hakkında daha fazla bilgi için burayı kullanabilirsin.', + useful: 'Mesela, ülkende dinlenebilir olmayan parçaların nerelerde var olduğunu bulmak için kullanabilirsin.', + linkNotSupported: 'Bu link şimdilik desteklenmemektedir.', + linkNotSupportedYet: 'Bu link şimdilik desteklenmiyor gibi duruyor, başkasını analiz etmeyi dene.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Süre', + diskNumber: 'Sıra numarası', + trackNumber: 'Parça numarası', + releaseDate: 'Yayınlanma tarihi', + bpm: 'BPM', + label: 'Etiketi', + recordType: 'Kayıt Şekli', + genres: 'Türü', + tracklist: 'Parça listesi' + } + }, + search: { + startSearching: 'Aramayı Başlat!', + description: + 'Bir parçayı, tüm albümü, bir sanatçıyı, bir oynatma listesini... kısaca her şeyi aratabilirsin! Ayrıca Deezer Linki de yapıştırabilirsin!', + fans: '{0} Hayranlar', + noResults: 'Sonuç Bulunamadı', + noResultsTrack: 'Parça bulunamadı', + noResultsAlbum: 'Albüm bulunamadı', + noResultsArtist: 'Sanatçı bulunamadı', + noResultsPlaylist: 'Oynatma Listesi bulunamadı' + }, + searchbar: 'İstediğin bir şeyi arat (ya da bir link yapıştır.)', + downloads: 'İndirilenler', + toasts: { + addedToQueue: '{0} kuyruğa eklendi', + alreadyInQueue: '{0} çoktan kuyrukta!', + finishDownload: '{0} indirmesi tamamlandı.', + allDownloaded: 'Tüm indirmeler tamamlandı!', + refreshFavs: 'Yenileme tamamlandı.!', + loggingIn: 'Giriş yapılıyor', + loggedIn: 'Giriş yapıldı', + alreadyLogged: 'Çoktan giriş yapıldı', + loginFailed: 'Giriş yapılamadı', + loggedOut: 'Oturum kapatıldı.', + cancellingCurrentItem: 'Geçerli öğe iptal ediliyor.', + currentItemCancelled: 'Geçerli öğe iptal edildi.', + startAddingArtist: '{0} albüm kuyruğa ekleniyor', + finishAddingArtist: '{0} albüm kuyruğa eklendi.', + startConvertingSpotifyPlaylist: 'Spotify parçaları deezer parçalarına dönüştürülüyor.', + finishConvertingSpotifyPlaylist: 'Spotify oynatma listesi dönüştürüldü.' + }, + settings: { + title: 'Ayarlar', + languages: 'Diller', + login: { + title: 'Giriş', + loggedIn: '{username} olarak giriş yaptın.', + arl: { + question: `Kendi ARL'mi nasıl alırım?`, + update: 'ARL güncelle.' + }, + logout: 'Çıkış' + }, + appearance: { + title: 'Görünüm', + slimDownloadTab: 'İnce indirme sekmesi' + }, + downloadPath: { + title: 'İndirilen dizin' + }, + templates: { + title: 'Şablonlar', + tracknameTemplate: 'Parça ismi şablonu', + albumTracknameTemplate: 'Albüm parçası şablonu', + playlistTracknameTemplate: 'Oynatma listesi parça şablonu' + }, + folders: { + title: 'Dosyalar', + createPlaylistFolder: 'Oynatma listesi için dosya oluştur', + playlistNameTemplate: 'Oynatma listesi dosyası şablonu', + createArtistFolder: 'Sanatçı için dosya oluştur', + artistNameTemplate: 'Sanatçı dosyası şablonu', + createAlbumFolder: 'Albüm için dosya oluştur', + albumNameTemplate: 'Albüm dosyası şablonu', + createCDFolder: 'CDler için dosya oluştur', + createStructurePlaylist: 'Oynatma listeleri için dosya kökü oluştur', + createSingleFolder: 'Singlelar için dosya kökü oluştur' + }, + trackTitles: { + title: 'Parça başlıkları', + padTracks: 'İz Numaraları', + paddingSize: 'İz Numaralarını değiştir', + illegalCharacterReplacer: 'Illegal Karakter Düzenleyici' + }, + downloads: { + title: 'İndirilenler', + queueConcurrency: 'Devam eden indirmeler', + maxBitrate: { + title: 'Tercih edilmiş Bitrateler (kaliteler)', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Dosyaların üstüne yazmalı mıyım?', + y: 'Evet, üstüne yaz', + n: 'Hayır, üstüne yazma', + t: 'Sadece izleri üstüne yaz' + }, + fallbackBitrate: 'Bitrate düşürme', + fallbackSearch: 'Düşürme ara', + logErrors: 'Hatalar için günlük tut', + logSearched: 'Aranmış parçalar için günlük tut', + createM3U8File: 'Oynatma sıra listesi oluştur', + syncedLyrics: '.lyr dosyaları oluştur (Senkronize şarkı sözleri)', + playlistFilenameTemplate: 'Oynatma listesi şablonu', + saveDownloadQueue: 'Uygulamayı kapatırken indirme kuyruğunu kaydet' + }, + covers: { + title: 'Albüm kapakları', + saveArtwork: 'Kapakları kaydet', + coverImageTemplate: 'Kapak ismi şablonu', + saveArtworkArtist: 'Sanatçı fotoğrafını kaydet', + artistImageTemplate: 'Şarkıcı fotoğraf şablonu', + localArtworkSize: 'Yerel fotoğraf boyutu', + embeddedArtworkSize: 'Gömülü fotoğraf boyutu', + localArtworkFormat: { + title: 'Yerel fotoğrafın hangi formatta olmasını istersin?', + jpg: 'Jpeg dosyası', + png: 'Png dosyası', + both: 'Her ikisi' + }, + jpegImageQuality: 'JPEG görüntü kalitesi' + }, + tags: { + head: 'Hangi izler kayıt edilsin?', + title: 'Başlık', + artist: 'Sanatçı', + album: 'Albüm', + cover: 'Kapak', + trackNumber: 'Parça Numarası', + trackTotal: 'Tüm Parça', + discNumber: 'Plak Sayısı', + discTotal: 'Tüm Plak', + albumArtist: 'Sanatçı Albümü', + genre: 'Tür', + year: 'Yıl', + date: 'Tarih', + explicit: 'Cinsel içerikli şarkı sözleri', + isrc: 'ISRC', + length: 'Parça Uzunluğu', + barcode: 'Albüm Barkodu (UPC)', + bpm: 'BPM', + replayGain: 'Ses Yüksekliği Normalleştirici', + label: 'Albüm Etiketi', + lyrics: 'Senkronize edilmemiş şarkı sözleri', + copyright: 'Telif hakkı', + composer: 'Besteleyen', + involvedPeople: 'Alakalı Kişiler' + }, + other: { + title: 'Diğer', + savePlaylistAsCompilation: 'Oynatma listelerini derleme olarak kaydet', + useNullSeparator: 'Boşluk ayırıcı kullan', + saveID3v1: 'ID3v1 dosyasını da kaydet', + multiArtistSeparator: { + title: 'Sanatçılarınızı nasıl ayırmak istersiniz?', + nothing: 'Sadece ana sanatçıyı kaydet', + default: 'Genel prosedür uygulansın', + andFeat: 'Kullanılanlar & ve Feat.', + using: 'Kullanılan "{0}"' + }, + singleAlbumArtist: 'Sadece ana albüm sanatçısını kaydet', + albumVariousArtists: '"Çeşitli sanatçılar"ı sanatçı albümlerinde tut', + removeAlbumVersion: '"Albüm Sürümü"nü parça başlığından çıkart', + removeDuplicateArtists: 'Sanatçı topluluğunu çıkart', + dateFormat: { + title: 'FLAC dosyalar için zaman formatı', + year: 'YYYY', + month: 'AA', + day: 'GG' + }, + featuredToTitle: { + title: 'Öne çıkan sanatçıları ne yapmalıyım?', + 0: 'Elleme', + 1: 'Başlıktan çıkart', + 3: 'Başlıktan ve albüm başlığından çıkart', + 2: 'Başlığa taşı' + }, + titleCasing: 'Albüm harfi', + artistCasing: 'Sanatçı harfi', + casing: { + nothing: 'Değiştirmeden bırak', + lower: 'küçük harf', + upper: 'BÜYÜK HARF', + start: 'Kelimenin başı ile başla', + sentence: 'Cümle gibi yap' + }, + previewVolume: 'Ses önizlemesi', + executeCommand: { + title: 'İndirdikten sonra komut uygula', + description: 'Bir şey yapmamak için boş bırak' + } + }, + spotify: { + title: 'Spotify Özelliği', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Spotify Kullanıcı Adı' + }, + reset: 'Varsayılana sıfırla', + save: 'Kaydet', + toasts: { + init: 'Ayarlar yüklendi!', + update: 'Ayarlar güncellendi!', + ARLcopied: 'ARL panoya kopyalandı!' + } + }, + sidebar: { + home: 'Ana sayfa', + search: 'Ara', + charts: 'Grafikler', + favorites: 'Favoriler', + linkAnalyzer: 'Link Analizörü', + settings: 'Ayarlar', + about: 'Hakkında' + }, + tracklist: { + downloadSelection: 'İndirme bölümü' + } +} + +export default tr diff --git a/src/plugins/i18n.js b/src/plugins/i18n.js index 4be9c13..6030be0 100644 --- a/src/plugins/i18n.js +++ b/src/plugins/i18n.js @@ -9,6 +9,9 @@ import de from '@/lang/de' import fr from '@/lang/fr' import id from '@/lang/id' import pt from '@/lang/pt-pt' +import ptBr from '@/lang/pt-br' +import ru from '@/lang/ru' +import tr from '@/lang/tr' Vue.use(VueI18n) @@ -23,7 +26,10 @@ const locales = { de, fr, id, - pt + pt, + ptBr, + ru, + tr } const i18n = new VueI18n({ @@ -31,21 +37,33 @@ const i18n = new VueI18n({ fallbackLocale: DEFAULT_LANG, messages: locales, pluralizationRules: { - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index to select plural word by - */ - 'ru': function(choice, choicesLength) { - if (choice === 0) { return 0 } + /** + * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` + * @param choicesLength {number} an overall amount of available choices + * @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) { return 1 } - return 3; - } - } + + if (n > 10 && n < 20) { + return 3 + } + + if (n1 > 1 && n1 < 5) { + return 2 + } + + if (n1 == 1) { + return 1 + } + + return 3 + } + } }) export default i18n diff --git a/src/utils/flags.js b/src/utils/flags.js index b04a1d8..3dad2c1 100644 --- a/src/utils/flags.js +++ b/src/utils/flags.js @@ -5,6 +5,9 @@ import de from 'svg-country-flags/svg/de.svg' import fr from 'svg-country-flags/svg/fr.svg' import id from 'svg-country-flags/svg/id.svg' import pt from 'svg-country-flags/svg/pt.svg' +import br from 'svg-country-flags/svg/br.svg' +import ru from 'svg-country-flags/svg/ru.svg' +import tr from 'svg-country-flags/svg/tr.svg' export default { it, @@ -13,5 +16,8 @@ export default { de, fr, id, - pt + pt, + ptBr: br, + ru, + tr } From 7db322c0be2d325a4d4737467744698ae0ae1168 Mon Sep 17 00:00:00 2001 From: Roberto Tonino Date: Wed, 29 Jul 2020 18:51:41 +0200 Subject: [PATCH 20/20] updated README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6b3673d..54c8c0a 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,9 @@ This is just the WebUI for deemix, it should be used with deemix-pyweb or someth - Use Vue as much as possible - First step: rewrite the app in Single File Components way ✅ - - Second step: Implement routing for the whole app using Vue Router - - Third step: Remove jQuery + - Second step: Implement custom contextmenu + - Third step: Implement routing for the whole app using Vue Router + - Fourth step: Remove jQuery - Make i18n async (https://kazupon.github.io/vue-i18n/guide/lazy-loading.html) - Use ES2020 async imports, if possible - Make the UI look coherent