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

Reviewed-on: https://codeberg.org/m3troux/deemix-webui/pulls/1
This commit is contained in:
m3troux 2020-07-29 20:34:48 +02:00
commit 9b2aa61975
12 changed files with 1260 additions and 541 deletions

View File

@ -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 - Use Vue as much as possible
- First step: rewrite the app in Single File Components way ✅ - First step: rewrite the app in Single File Components way ✅
- Second step: Implement routing for the whole app using Vue Router - Second step: Implement custom contextmenu
- Third step: Remove jQuery - 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) - Make i18n async (https://kazupon.github.io/vue-i18n/guide/lazy-loading.html)
- Use ES2020 async imports, if possible - Use ES2020 async imports, if possible
- Make the UI look coherent - Make the UI look coherent

File diff suppressed because one or more lines are too long

View File

@ -623,6 +623,55 @@ export default {
} }
} }
}, },
mounted() {
this.locales = this.$i18n.availableLocales
EventBus.$on('settingsTab:revertSettings', this.revertSettings)
EventBus.$on('settingsTab:revertCredentials', this.revertCredentials)
this.$refs.loggedInInfo.classList.add('hide')
let storedLocale = localStorage.getItem('locale')
if (storedLocale) {
this.$i18n.locale = storedLocale
this.currentLocale = storedLocale
}
let storedArl = localStorage.getItem('arl')
if (storedArl) {
this.$refs.loginInput.value = storedArl.trim()
}
let storedAccountNum = localStorage.getItem('accountNum')
if (storedAccountNum) {
this.accountNum = storedAccountNum
}
let spotifyUser = localStorage.getItem('spotifyUser')
if (spotifyUser) {
this.lastUser = spotifyUser
this.spotifyUser = spotifyUser
socket.emit('update_userSpotifyPlaylists', spotifyUser)
}
this.changeSlimDownloads = 'true' === localStorage.getItem('slimDownloads')
let volume = parseInt(localStorage.getItem('previewVolume'))
if (isNaN(volume)) {
volume = 80
localStorage.setItem('previewVolume', volume)
}
window.vol.preview_max_volume = volume
socket.on('init_settings', this.initSettings)
socket.on('updateSettings', this.updateSettings)
socket.on('accountChanged', this.accountChanged)
socket.on('familyAccounts', this.initAccounts)
},
methods: { methods: {
revertSettings() { revertSettings() {
this.settings = { ...this.lastSettings } this.settings = { ...this.lastSettings }
@ -705,55 +754,6 @@ export default {
resetSettings() { resetSettings() {
this.settings = { ...this.defaultSettings } this.settings = { ...this.defaultSettings }
} }
},
mounted() {
this.locales = this.$i18n.availableLocales
EventBus.$on('settingsTab:revertSettings', this.revertSettings)
EventBus.$on('settingsTab:revertCredentials', this.revertCredentials)
this.$refs.loggedInInfo.classList.add('hide')
let storedLocale = localStorage.getItem('locale')
if (storedLocale) {
this.$i18n.locale = storedLocale
this.currentLocale = storedLocale
}
let storedArl = localStorage.getItem('arl')
if (storedArl) {
this.$refs.loginInput.value = storedArl.trim()
}
let storedAccountNum = localStorage.getItem('accountNum')
if (storedAccountNum) {
this.accountNum = storedAccountNum
}
let spotifyUser = localStorage.getItem('spotifyUser')
if (spotifyUser) {
this.lastUser = spotifyUser
this.spotifyUser = spotifyUser
socket.emit('update_userSpotifyPlaylists', spotifyUser)
}
this.changeSlimDownloads = 'true' === localStorage.getItem('slimDownloads')
let volume = parseInt(localStorage.getItem('previewVolume'))
if (isNaN(volume)) {
volume = 80
localStorage.setItem('previewVolume', volume)
}
window.vol.preview_max_volume = volume
socket.on('init_settings', this.initSettings)
socket.on('updateSettings', this.updateSettings)
socket.on('accountChanged', this.accountChanged)
socket.on('familyAccounts', this.initAccounts)
} }
} }
</script> </script>

View File

@ -40,28 +40,28 @@ const de = {
}, },
subtitles: { subtitles: {
bugReports: "Gibt es etwas, das im Deemix nicht funktioniert? Teil es uns mit!", bugReports: "Gibt es etwas, das im Deemix nicht funktioniert? Teil es uns mit!",
contributing: 'du möchtest zu diesem Projekt beitragen? Das kannst du auf verschiedene Weise tun!', contributing: 'Du möchtest zu diesem Projekt beitragen? Das kannst du auf verschiedene Arten tun!',
donations: 'du möchtest einen monetären Beitrag leisten? Gib uns eine Spende!' donations: 'Du möchtest deemix finanziell unterstützen? Dann mach eine Spende'
}, },
usesLibrary: 'Diese App verwendet die <strong>deemix</strong> Bibliothek, die du verwenden kannst, um Deine eigene UI für Deemix zu erstellen.', usesLibrary: 'Diese App verwendet die <strong>deemix</strong> Bibliothek, die du verwenden kannst, um Deine eigene UI für Deemix zu erstellen.',
thanks: `Danke an <strong>rtonno</strong>, <strong>uhwot</strong> und <strong>lollilol</strong> für die Hilfe bei diesem Projekt und an <strong>BasCurtiz</strong> und <strong>scarvimane</strong> für das Design der Icons.`, thanks: `Danke an <strong>rtonno</strong>, <strong>uhwot</strong> und <strong>lollilol</strong> für die Hilfe bei diesem Projekt und an <strong>BasCurtiz</strong> und <strong>scarvimane</strong> für das Design der Icons.`,
upToDate: `Bleibe mit den Aktualisierungen auf dem Laufenden, indem du dem <a href="https://t.me/RemixDevNews" target="_blank">Nachrichtenkanal</a> auf Telegram folgst.`, upToDate: `Bleib auf dem Laufenden mit den Updates indem du dem <a href="https://t.me/RemixDevNews" target="_blank">News Channel</a> auf Telegram folgst.`,
officialWebsite: 'Offizielle Webseite', officialWebsite: 'Offizielle Webseite',
officialRepo: 'Offizielle Library Repository', officialRepo: 'Offizielle Library Repository',
officialWebuiRepo: 'Offizielle WebUI Repository', officialWebuiRepo: 'Offizielle WebUI Repository',
officialSubreddit: 'Offizieller Subreddit', officialSubreddit: 'Offizieller Subreddit',
newsChannel: 'News Kanal', newsChannel: 'News Kanal',
questions: `Wenn du Fragen oder Probleme mit der App hast, suche zuerst nach einer Lösung im <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Wenn du dann nichts findest, kannst du einen Beitrag mit Deinem Thema auf dem subreddit verfassen.`, questions: `Wenn du Fragen oder Probleme mit der App hast, suche zuerst nach einer Lösung im <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Wenn du dann nichts findest, kannst du einen Beitrag mit Deinem Thema auf dem Subreddit verfassen.`,
beforeReporting: `Bevor du einen Fehler meldest, stelle sicher, dass du die neueste Version der App benutzt und dass das, was du melden möchtest, tatsächlich ein Fehler ist und nicht etwas, das nur auf deiner Seite falsch ist.`, beforeReporting: `Bevor du einen Fehler meldest, stelle sicher, dass du die neueste Version der App benutzt und dass das, was du melden möchtest, tatsächlich ein Bug ist und nicht etwas, das nur bei dir falsch ist.`,
beSure: `Vergewissere dich, dass der Fehler auf einem anderen Rechner reproduzierbar ist und auch <stark>DO NOT</stark> melde einen Fehler, wenn er bereits gemeldet wurde.`, beSure: `Vergewissere dich, dass der Bug auf einem anderen Rechner vorhanden ist und melde <stark>NICHT</stark> einen Bug, wenn er bereits gemeldet wurde.`,
duplicateReports: 'Doppelte Fehlerberichte werden geschlossen, also behalte das im Auge.', duplicateReports: 'Doppelte Fehlerberichte werden geschlossen, also behalte das im Auge.',
dontOpenIssues: `Erstelle <strong>KEINE</strong> Einträge, um Fragen zu stellen, dafür gibt es einen Unterpunkt.`, dontOpenIssues: `Erstelle <strong>KEINE</strong> Fehlerberichte, um Fragen zu stellen, dafür gibt es einen Subreddit.`,
newUI: `Wenn du dich mit Python auskennst, könntest du versuchen, ein neues UI für die Anwendung zu erstellen, indem du die Basisbibliothek benutzt, oder Fehler in der Bibliothek mit einer Pull-Anfrage auf der <a href="https://codeberg.org/RemixDev/deemix" target="_blank">Repo</a> behebst.`, newUI: `Wenn du dich mit Python auskennst, könntest du versuchen, mit hilfe der base library eine neue Benutzeroberfläche für die App zu erstellen oder Fehler in der library mit einem Pull-Request in der <a href="https://codeberg.org/RemixDev/deemix" target="_blank">deemix Repo</a> zu beheben.`,
acceptFeatures: `Ich akzeptiere auch Features, aber keine komplexen Dinge, da sie direkt in der App und nicht in der Bibliothek implementiert werden können.`, acceptFeatures: `Ich akzeptiere auch Features, aber keine komplexen Dinge, da sie direkt in der App und nicht in der Bibliothek implementiert werden können.`,
otherLanguages: `Wenn du eine andere Programmiersprache fließend beherrschst, könntest du versuchen, deemix in andere Programmiersprachen zu portieren!`, otherLanguages: `Wenn du eine andere Programmiersprache fließend beherrschst, könntest du versuchen, deemix in andere Programmiersprachen zu portieren!`,
understandingCode: `Sie benötigen Hilfe beim Verständnis des Codes? Drücken Sie einfach RemixDev auf Telegram oder Reddit.`, understandingCode: `Du benötigst Hilfe beim verstehen des Codes? Frag einfach RemixDev auf Telegram oder Reddit.`,
contributeWebUI: `Wenn du Vue.js (JavaScript), HTML oder CSS kennst, könntest du zum <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a> beitragen.`, contributeWebUI: `Wenn du Vue.js (JavaScript) oder HTML und CSS kennst, könntest du etwas zum <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a> beitragen.`,
itsFree: `Du solltest daran denken, dass dies ist ein <strong>freies Projekt</strong> ist und <strong>Du solltest die Künstler, die du liebst, unterstützen<strong>, bevor du die Entwickler unterstützt.`, itsFree: `Du solltest daran denken, dass dies ist ein <strong>kostenloses Projekt</strong> ist und <strong>Du solltest die Künstler, die du magst, unterstützen<strong>, bevor du die Entwickler unterstützt.`,
notObligated: `Fühle dich nicht verpflichtet zu spenden, wir schätzen deinen Beitrag trotzdem!`, notObligated: `Fühle dich nicht verpflichtet zu spenden, wir schätzen deinen Beitrag trotzdem!`,
lincensedunder: `Diese Arbeit ist lizensiert unter einer lincensedunder: `Diese Arbeit ist lizensiert unter einer
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
@ -76,21 +76,21 @@ const de = {
errors: { errors: {
title: 'Fehler für {0}', title: 'Fehler für {0}',
ids: { ids: {
invaliduRL: 'URL nicht erkannt', invalidURL: 'URL nicht erkannt',
unsupporteduRL: 'URL noch nicht unterstützt', unsupportedURL: 'URL noch nicht unterstützt',
ISRCnotOnDeezer: 'Titel ISRC ist auf deezer nicht verfügbar', ISRCnotOnDeezer: 'Track ISRC ist auf deezer nicht verfügbar',
notYourPrivatePlaylist: "Du kannst keine privaten Playlisten anderer herunterladen.", notYourPrivatePlaylist: "Du kannst keine privaten Playlisten anderer herunterladen.",
spotifyDisabled: 'Spotify Features sind nicht korrekt eingerichtet.', spotifyDisabled: 'Spotify-Funktionen sind nicht richtig eingerichtet',
trackNotOnDeezer: 'Titel auf der Deezer nicht gefunden!', trackNotOnDeezer: 'Track ist nicht verfügbar auf Deezer!',
albumNotOnDeezer: 'Album auf der Deezer nicht gefunden!', albumNotOnDeezer: 'Album auf Deezer nicht gefunden!',
notOnDeezer: 'Titel bei Deezer nicht verfügbar!', notOnDeezer: 'Track auf Deezer nicht verfügbar!',
notEncoded: 'Titel noch nicht kodiert!', notEncoded: 'Track noch nicht codiert!',
notEncodedNoAlternative: 'Titel noch nicht kodiert und keine Alternative gefunden!', notEncodedNoAlternative: 'Track noch nicht codiert und keine Alternative gefunden!',
wrongBitrate: 'Titel mit der gewünschten Bitrate nicht gefunden.', wrongBitrate: 'Spur mit gewünschter Bitrate nicht gefunden.',
wrongBitrateNoAlternative: 'Titel mit der gewünschten Bitrate nicht gefunden und keine Alternative gefunden!', wrongBitrateNoAlternative: 'Track mit gewünschter Bitrate nicht gefunden und keine Alternative gefunden!',
no360RA: 'Der Titel ist im Reality Audio 360 Format nicht verfügbar.', no360RA: 'Track ist nicht verfügbar in Reality Audio 360.',
notAvailable: "Titel auf den Servern von deezer nicht verfügbar!", notAvailable: "Track ist noch nicht verfügbar auf den Servern von Deezer!",
notAvailableNoAlternative: "Titel auf den Servern von deezer nicht verfügbar und keine Alternative gefunden!" notAvailableNoAlternative: "Track ist noch nicht verfügbar auf den Servern von Deezer und keine Alternativen gefunden!!"
} }
}, },
favorites: { favorites: {
@ -141,7 +141,7 @@ const de = {
noResultsPlaylist: 'Keine Playlisten gefunden' noResultsPlaylist: 'Keine Playlisten gefunden'
}, },
searchbar: 'Suche alles, was du willst (oder füge einfach einen Link ein)', searchbar: 'Suche alles, was du willst (oder füge einfach einen Link ein)',
downloads: 'downloads', downloads: 'Downloads',
toasts: { toasts: {
addedToQueue: '{0} zur Warteschlange hinzugefügt', addedToQueue: '{0} zur Warteschlange hinzugefügt',
alreadyInQueue: '{0} ist bereits in der Warteschlange!', alreadyInQueue: '{0} ist bereits in der Warteschlange!',
@ -153,15 +153,15 @@ const de = {
alreadyLogged: 'Bereits eingeloggt', alreadyLogged: 'Bereits eingeloggt',
loginFailed: "Einloggen nicht möglich", loginFailed: "Einloggen nicht möglich",
loggedOut: 'Ausgeloggt', loggedOut: 'Ausgeloggt',
cancellingCurrentItem: 'Aktuellen Eintrag abbrechen.', cancellingCurrentItem: 'Aktuelle Auswahl abbrechen.',
currentItemCancelled: 'Aktueller Eintrag abgebrochen.', currentItemCancelled: 'Aktuelle Auswahl abgebrochen.',
startAddingArtist: '{0} Alben zur Warteschlange hinzufügen', startAddingArtist: '{0} Alben zur Warteschlange hinzufügen',
finishAddingArtist: '{0} Alben zur Warteschlange hinzugefügt', finishAddingArtist: '{0} Alben zur Warteschlange hinzugefügt',
startConvertingSpotifyPlaylist: 'Umwandlung von Spotify-Titel in Deezer-Titel', startConvertingSpotifyPlaylist: 'Umwandlung von Spotify-Titel in Deezer-Titel',
finishConvertingSpotifyPlaylist: 'Spotify Playlist konvertiert' finishConvertingSpotifyPlaylist: 'Spotify Playlist konvertiert'
}, },
settings: { settings: {
title: 'Eisntellungen', title: 'Einstellungen',
languages: 'Sprachen', languages: 'Sprachen',
login: { login: {
title: 'Login', title: 'Login',
@ -187,21 +187,21 @@ const de = {
}, },
folders: { folders: {
title: 'Ordner', title: 'Ordner',
createPlaylistFolder: 'Ordner für Playlists erstellen', createPlaylistFolder: 'Ordner für Playlist erstellen',
playlistNameTemplate: 'Vorlage für Playlist-Ordner', playlistNameTemplate: 'Playlist Ordner Vorlage',
createArtistFolder: 'Ordner für Künstler erstellen', createArtistFolder: 'Ordner für Künstler erstellen',
artistNameTemplate: 'Vorlage für Künstler-Ordner', artistNameTemplate: 'Künstler Ordner Vorlage',
createAlbumFolder: 'Ordner für Album erstellen', createAlbumFolder: 'Ordner für Album erstellen',
albumNameTemplate: 'Vorlage für Album-Ordner', albumNameTemplate: 'Album Ordner Vorlage',
createCDFolder: 'Ordner für CDs erstellen', createCDFolder: 'Ordner für CDs erstellen',
createStructurePlaylist: 'Ordnerstruktur für Wiedergabelisten erstellen', createStructurePlaylist: 'Erstellen von Künstler-, Alben- und CD-Ordnern auch für Playlisten',
createSingleFolder: 'Ordnerstruktur für Singles erstellen' createSingleFolder: 'Ordner für einzelne Titel erstellen'
}, },
trackTitles: { trackTitles: {
title: 'Tracktitel', title: 'Track Titel',
padTracks: 'Pad tracks', padTracks: 'einheitliche Länge der Titelnummern (voranstehende Nullen werden ergänzt)',
paddingSize: 'Overwrite padding size', paddingSize: 'Paddinggröße überschreiben',
illegalCharacterReplacer: 'Unzulässiger Zeichen-Ersetzer' illegalCharacterReplacer: 'unzulässige Zeichen ersetzen'
}, },
downloads: { downloads: {
title: 'Downloads', title: 'Downloads',
@ -218,14 +218,14 @@ const de = {
n: "Nein, Datei nicht überschreiben", n: "Nein, Datei nicht überschreiben",
t: 'Nur Tags überschreiben' t: 'Nur Tags überschreiben'
}, },
fallbackBitrate: 'Fallback Bitrate', fallbackBitrate: 'Falls gewünschte Bitrate nicht verfügbar, auf niedrigere Bitrate zurückgreifen',
fallbackSearch: 'Fallback suchen', fallbackSearch: 'Zur Suche zurückkehren, wenn der Song nicht verfügbar ist',
logErrors: 'Protokolldateien für Fehler erstellen', logErrors: 'Protokolldatei für Fehler im Download-Ordner erstellen',
logSearched: 'Protokolldateien für gesuchte Titel erstellen', logSearched: 'Protokolldatei für gesuchte Tracks erstellen',
createM3U8File: 'Playlist-Datei erstellen (M3U8)', createM3U8File: 'Erstelle Playlist-Datei (M3U8)',
syncedLyrics: '.lyr-Dateien erstellen (Liedtexte synchronisieren)', syncedLyrics: 'Erstelle synchrone Lyric-Datei (.lyr)',
playlistFilenameTemplate: 'Vorlage für Playlist-Dateinamen', playlistFilenameTemplate: 'Dateinamenvorlage für Playlist',
saveDownloadQueue: 'Speichern der Download-Warteschlange beim Schließen der Anwendung' saveDownloadQueue: 'Download-Warteschlange beim Schließen der App speichern'
}, },
covers: { covers: {
title: 'Album-Cover', title: 'Album-Cover',
@ -271,7 +271,7 @@ const de = {
}, },
other: { other: {
title: 'Andere', title: 'Andere',
savePlaylistAsCompilation: 'Wiedergabelisten als Compilation speichern', savePlaylistAsCompilation: 'Wiedergabelisten als Zussammenstellung speichern',
useNullSeparator: 'Null-Trennzeichen verwenden', useNullSeparator: 'Null-Trennzeichen verwenden',
saveID3v1: 'ID3v1 ebenfalls speichern', saveID3v1: 'ID3v1 ebenfalls speichern',
multiArtistSeparator: { multiArtistSeparator: {
@ -279,7 +279,7 @@ const de = {
nothing: 'Nur den Hauptkünstler speichern', nothing: 'Nur den Hauptkünstler speichern',
default: 'Verwendung der Standardspezifikation', default: 'Verwendung der Standardspezifikation',
andFeat: 'Verwendung von & und feat.', andFeat: 'Verwendung von & und feat.',
using: 'Verwendet "{0}"' using: 'Verwende "{0}"'
}, },
singleAlbumArtist: 'Nur den Interpreten des Hauptalbums speichern', singleAlbumArtist: 'Nur den Interpreten des Hauptalbums speichern',
albumVariousArtists: '"Verschiedene Künstler" im Album Künstler Tag behalten', albumVariousArtists: '"Verschiedene Künstler" im Album Künstler Tag behalten',
@ -305,7 +305,7 @@ const de = {
lower: 'kleinbuchstaben', lower: 'kleinbuchstaben',
upper: 'GROSSBUCHSTABEN', upper: 'GROSSBUCHSTABEN',
start: 'Anfang Jedes Wortes', start: 'Anfang Jedes Wortes',
sentence: 'Wie einen Satz' sentence: 'Wie einen satz'
}, },
previewVolume: 'Vorschau Lautstärke', previewVolume: 'Vorschau Lautstärke',
executeCommand: { executeCommand: {

View File

@ -39,11 +39,12 @@ const es = {
license: 'Licencia' license: 'Licencia'
}, },
subtitles: { 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!', contributing: '¿Quieres contribuir a este proyecto? ¡Puedes hacerlo de diferentes maneras!',
donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!' donations: '¿Quiere contribuir monetariamente? ¡Podrías hacer una donación!'
}, },
usesLibrary: 'Esta aplicación usa la biblioteca <strong>deemix</strong>, que puedes usar para hacer tu propia interfaz de usuario para deemix.', usesLibrary:
'Esta aplicación usa la biblioteca <strong>deemix</strong>, que puedes usar para hacer tu propia interfaz de usuario para deemix.',
thanks: `Gracias a <strong>rtonno</fuerte>, <strong>uhwot</fuerte> y <strong>lollilol</fuerte> por ayudarme con este proyecto, a <strong>BasCurtiz</fuerte> y <strong>scarvimane</fuerte> por hacer el icono.`, thanks: `Gracias a <strong>rtonno</fuerte>, <strong>uhwot</fuerte> y <strong>lollilol</fuerte> por ayudarme con este proyecto, a <strong>BasCurtiz</fuerte> y <strong>scarvimane</fuerte> por hacer el icono.`,
upToDate: `Mantente al día con las actualizaciones siguiendo el <a href="https://t.me/RemixDevNews" target="_blank">canal de noticias</a> en Telegram.`, upToDate: `Mantente al día con las actualizaciones siguiendo el <a href="https://t.me/RemixDevNews" target="_blank">canal de noticias</a> en Telegram.`,
officialWebsite: 'Página web oficial', officialWebsite: 'Página web oficial',
@ -78,7 +79,7 @@ const es = {
invalidURL: 'No se reconoce la URL', invalidURL: 'No se reconoce la URL',
unsupportedURL: 'La URL no está soportada aún', unsupportedURL: 'La URL no está soportada aún',
ISRCnotOnDeezer: 'Pista ISRC no está disponible en Deezer', 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.', spotifyDisabled: 'Funciones de Spotify no está configurado correctamente.',
trackNotOnDeezer: '¡No se encontró la pista en Deezer!', trackNotOnDeezer: '¡No se encontró la pista en Deezer!',
albumNotOnDeezer: '¡El álbum no se encuentra en Deezer!', albumNotOnDeezer: '¡El álbum no se encuentra en Deezer!',
@ -86,10 +87,12 @@ const es = {
notEncoded: '¡Pista aún no codificada!', notEncoded: '¡Pista aún no codificada!',
notEncodedNoAlternative: '¡Pista aún no codificada y no se ha encontrado ninguna alternativa!', 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.', 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.', no360RA: 'La pista no está disponible en Reality Audio 360.',
notAvailable: "¡La pista no está disponible en los servidores de Deezer!", 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!" notAvailableNoAlternative:
'¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!'
} }
}, },
favorites: { favorites: {
@ -109,7 +112,8 @@ const es = {
}, },
linkAnalyzer: { linkAnalyzer: {
info: 'Puedes usar esta sección para encontrar más información sobre el enlace que estás tratando de descargar.', 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', linkNotSupported: 'Este enlace aún no está soportado',
linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.', linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.',
table: { table: {
@ -129,7 +133,8 @@ const es = {
}, },
search: { search: {
startSearching: '¡Comienza a buscar!', 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', fans: '{0} fanáticos',
noResults: 'No hay resultados', noResults: 'No hay resultados',
noResultsTrack: 'No se encontraron pistas', noResultsTrack: 'No se encontraron pistas',
@ -148,7 +153,7 @@ const es = {
loggingIn: 'Conectando...', loggingIn: 'Conectando...',
loggedIn: 'Conectado', loggedIn: 'Conectado',
alreadyLogged: 'Ya está conectado', alreadyLogged: 'Ya está conectado',
loginFailed: "No se puede conectar", loginFailed: 'No se puede conectar',
loggedOut: 'Desconectado', loggedOut: 'Desconectado',
cancellingCurrentItem: 'Cancelando el elemento actual.', cancellingCurrentItem: 'Cancelando el elemento actual.',
currentItemCancelled: 'El elemento actual se ha cancelado.', currentItemCancelled: 'El elemento actual se ha cancelado.',
@ -212,7 +217,7 @@ const es = {
overwriteFile: { overwriteFile: {
title: '¿Desea que sobreescriba los archivos?', title: '¿Desea que sobreescriba los archivos?',
y: 'Sí, sobrescribir el archivo', y: 'Sí, sobrescribir el archivo',
n: "No, no sobrescribir el archivo", n: 'No, no sobrescribir el archivo',
t: 'Sobrescribir sólo las etiquetas' t: 'Sobrescribir sólo las etiquetas'
}, },
fallbackBitrate: 'La solución alternativa de bitrate', fallbackBitrate: 'La solución alternativa de bitrate',
@ -338,4 +343,4 @@ const es = {
} }
} }
export default es export default es

View File

@ -39,11 +39,12 @@ const fr = {
license: 'Licence' license: 'Licence'
}, },
subtitles: { subtitles: {
bugReports: "Y a-t-il quelque chose qui ne fonctionne pas avec deemix ? Dites-le nous !", bugReports: 'Y a-t-il quelque chose qui ne fonctionne pas avec deemix ? Dites-le nous !',
contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !', contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !',
donations: 'Vous souhaitez contribuer financièrement ? Vous pourriez faire un don !' donations: 'Vous souhaitez contribuer financièrement ? Vous pourriez faire un don !'
}, },
usesLibrary: 'Cette application utilise la librairie <strong>deemix</strong>, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.', usesLibrary:
'Cette application utilise la librairie <strong>deemix</strong>, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.',
thanks: `Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> pour m'avoir aidé avec ce projet et à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour avoir réalisé l'icône.`, thanks: `Merci à <strong>rtonno</strong>, <strong>uhwot</strong> et <strong>lollilol</strong> pour m'avoir aidé avec ce projet et à <strong>BasCurtiz</strong> et <strong>scarvimane</strong> pour avoir réalisé l'icône.`,
upToDate: `Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal d'information</a> sur Telegram.`, upToDate: `Restez informé des mises à jour en suivant le <a href="https://t.me/RemixDevNews" target="_blank">canal d'information</a> sur Telegram.`,
officialWebsite: 'Site Officiel', officialWebsite: 'Site Officiel',
@ -85,19 +86,19 @@ const fr = {
albumNotOnDeezer: 'Album introuvable sur deezer !', albumNotOnDeezer: 'Album introuvable sur deezer !',
notOnDeezer: 'Piste non disponible sur Deezer !', notOnDeezer: 'Piste non disponible sur Deezer !',
notEncoded: 'Piste pas encore encodée !', 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é.', wrongBitrate: 'Piste introuvable au débit souhaité.',
wrongBitrateNoAlternative: 'Piste introuvable au débit souhaité et aucune alternative trouvée !', wrongBitrateNoAlternative: 'Piste introuvable au débit souhaité et aucune alternative trouvée !',
no360RA: "La piste n'est pas disponible avec Reality Audio 360.", no360RA: "La piste n'est pas disponible avec Reality Audio 360.",
notAvailable: "Piste non disponible sur les serveurs de deezer !", notAvailable: 'Piste non disponible sur les serveurs de deezer !',
notAvailableNoAlternative: "Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !" notAvailableNoAlternative: 'Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !'
} }
}, },
favorites: { favorites: {
title: 'Favoris', title: 'Favoris',
noPlaylists: 'Aucune Playlist trouvée', noPlaylists: 'Aucune Playlist trouvée',
noAlbums: "Aucuns Album Favori trouvé", noAlbums: 'Aucuns Album Favori trouvé',
noArtists: "Aucun Artiste Favori trouvé", noArtists: 'Aucun Artiste Favori trouvé',
noTracks: 'Aucune Piste Favorite trouvée' noTracks: 'Aucune Piste Favorite trouvée'
}, },
home: { home: {
@ -109,7 +110,8 @@ const fr = {
} }
}, },
linkAnalyzer: { 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: useful:
"C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.", "C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.",
linkNotSupported: "Ce lien n'est pas encore supporté", linkNotSupported: "Ce lien n'est pas encore supporté",
@ -151,7 +153,7 @@ const fr = {
loggingIn: 'Connexion', loggingIn: 'Connexion',
loggedIn: 'Connecté', loggedIn: 'Connecté',
alreadyLogged: 'Déjà connecté', alreadyLogged: 'Déjà connecté',
loginFailed: "Connexion impossible", loginFailed: 'Connexion impossible',
loggedOut: 'Déconnecté', loggedOut: 'Déconnecté',
cancellingCurrentItem: "Annulation de l'élément actuel.", cancellingCurrentItem: "Annulation de l'élément actuel.",
currentItemCancelled: 'Élément actuel annulé.', currentItemCancelled: 'Élément actuel annulé.',
@ -262,7 +264,7 @@ const fr = {
length: 'Durée de Piste', length: 'Durée de Piste',
barcode: "Code-barres de l'album (UPC)", barcode: "Code-barres de l'album (UPC)",
bpm: 'BPM', bpm: 'BPM',
replayGain: "Gain du Replay", replayGain: 'Gain du Replay',
label: "Label de l'Album", label: "Label de l'Album",
lyrics: 'Paroles non synchronisées', lyrics: 'Paroles non synchronisées',
copyright: "Droits d'auteur (copyright)", copyright: "Droits d'auteur (copyright)",
@ -277,7 +279,7 @@ const fr = {
multiArtistSeparator: { multiArtistSeparator: {
title: 'Comment aimeriez-vous séparer vos artistes ?', title: 'Comment aimeriez-vous séparer vos artistes ?',
nothing: "Enregistrer uniquement l'artiste principal", nothing: "Enregistrer uniquement l'artiste principal",
default: "En utilisant la spécification standard", default: 'En utilisant la spécification standard',
andFeat: 'En utilisant & et feat.', andFeat: 'En utilisant & et feat.',
using: 'En utilisant "{0}"' using: 'En utilisant "{0}"'
}, },
@ -341,4 +343,4 @@ const fr = {
} }
} }
export default fr export default fr

345
src/lang/pt-br.js Normal file
View File

@ -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 <strong>deemix</strong>, no qual você pode usar para construir uma UI para o seu deemix.',
thanks: `Obrigado <strong>rtonno</strong>, <strong>uhwot</strong> e <strong>lollilol</strong> por me ajudarem com este projeto e <strong>BasCurtiz</strong> e <strong>scarvimane</strong> por fazerem o ícone.`,
upToDate: `Seja avisado quando houver novas atualizações, siga o <a href="https://t.me/RemixDevNews" target="_blank">nosso canal de notícias</a> 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 <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. 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 <strong>NÃO</strong> relate-o caso ele já tenha sido relatado.`,
duplicateReports: 'Relatos duplicados de bug serão fechados, então fique de olho.',
dontOpenIssues: `<strong>NÃO</strong> 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 <a href="https://codeberg.org/RemixDev/deemix" target="_blank">repo do projeto</a>.`,
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 <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Mantenha em mente que <strong>este é um projeto gratuito</strong> e que <strong>você deve apoiar os artistas que ama</strong> antes de apoiar os desenvolvedores.`,
notObligated: `Não se sinta obrigado a doar, agradecemos da mesma forma!`,
lincensedUnder: `Este trabalho é licenciado sob a
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a
>.`
},
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

View File

@ -39,7 +39,7 @@ const pt = {
license: 'Licenças' license: 'Licenças'
}, },
subtitles: { subtitles: {
bugReports: "Existe alguma coisa que não funciona no deemix? Informa-nos!", bugReports: 'Existe alguma coisa que não funciona no deemix? Informa-nos!',
contributing: 'Queres contribuir para o projecto? Podes fazê-lo de diferentes formas!', contributing: 'Queres contribuir para o projecto? Podes fazê-lo de diferentes formas!',
donations: 'Desejas contribuir monetariamente? Faz uma doação!' donations: 'Desejas contribuir monetariamente? Faz uma doação!'
}, },
@ -63,9 +63,9 @@ const pt = {
contributeWebUI: `Caso saibas Vue.js (JavaScript), HTML ou CSS podes contribuir para o <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`, contributeWebUI: `Caso saibas Vue.js (JavaScript), HTML ou CSS podes contribuir para o <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Deves ter em conta que <strong>que este projecto é gratuito</strong> e <strong>deverás apoiar os artistas que aprecias</strong> antes de apoiares os programadores.`, itsFree: `Deves ter em conta que <strong>que este projecto é gratuito</strong> e <strong>deverás apoiar os artistas que aprecias</strong> antes de apoiares os programadores.`,
notObligated: `Não te sintas obrigado a doar, agradeço-te na mesma!`, notObligated: `Não te sintas obrigado a doar, agradeço-te na mesma!`,
lincensedUnder: `This work is licensed under a lincensedUnder: `Este trabalho esta licenciado sobre a
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a >GNU Licença publica geral 3.0</a
>.` >.`
}, },
charts: { charts: {
@ -78,8 +78,8 @@ const pt = {
ids: { ids: {
invalidURL: 'URL não reconhecido', invalidURL: 'URL não reconhecido',
unsupportedURL: 'URL ainda não suportado', unsupportedURL: 'URL ainda não suportado',
ISRCnotOnDeezer: 'Track ISRC não disponível no deezer', ISRCnotOnDeezer: 'Faixa ISRC não disponível no deezer',
notYourPrivatePlaylist: "You can't download others private playlists.", notYourPrivatePlaylist: "Nao podes baixar listas de reprodução privado dos outros.",
spotifyDisabled: 'Funcionalidades do Spotify não estão definidas corretamente.', spotifyDisabled: 'Funcionalidades do Spotify não estão definidas corretamente.',
trackNotOnDeezer: 'Faixa não encontrada no deezer!', trackNotOnDeezer: 'Faixa não encontrada no deezer!',
albumNotOnDeezer: 'Álbum não encontrado no deezer!', albumNotOnDeezer: 'Álbum não encontrado no deezer!',
@ -89,8 +89,8 @@ const pt = {
wrongBitrate: 'Faixa não encontrada no bitrate desejado.', wrongBitrate: 'Faixa não encontrada no bitrate desejado.',
wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e não foi encontrada alternativa!', wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e não foi encontrada alternativa!',
no360RA: 'Faixa não disponível em Reality Audio 360.', no360RA: 'Faixa não disponível em Reality Audio 360.',
notAvailable: "Faixa não disponível nos servidores do deezer!", 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!" notAvailableNoAlternative: 'Faixa não disponível nos servidores do deezer e não foi encontrada alternativa!'
} }
}, },
favorites: { favorites: {
@ -110,8 +110,7 @@ const pt = {
}, },
linkAnalyzer: { linkAnalyzer: {
info: 'Podes usar esta secção para obteres mais informação sobre o link que estás a tentar transferir.', info: 'Podes usar esta secção para obteres mais informação sobre o link que estás a tentar transferir.',
useful: 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.',
"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', linkNotSupported: 'Este link ainda não é suportado',
linkNotSupportedYet: 'Parece que este link ainda não é suportado, tenta analisar outro.', linkNotSupportedYet: 'Parece que este link ainda não é suportado, tenta analisar outro.',
table: { table: {
@ -124,15 +123,14 @@ const pt = {
releaseDate: 'Data de lançamento', releaseDate: 'Data de lançamento',
bpm: 'BPM', bpm: 'BPM',
label: 'Editora', label: 'Editora',
recordType: 'Record Type', recordType: 'Tipo de Recorde',
genres: 'Géneros', genres: 'Géneros',
tracklist: 'Lista de faixas' tracklist: 'Lista de faixas'
} }
}, },
search: { search: {
startSearching: 'Começa a pesquisar!', startSearching: 'Começa a pesquisar!',
description: 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',
'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', fans: '{0} fãs',
noResults: 'Sem resultados', noResults: 'Sem resultados',
noResultsTrack: 'Faixa não encontrada', noResultsTrack: 'Faixa não encontrada',
@ -151,8 +149,8 @@ const pt = {
loggingIn: 'A autenticar', loggingIn: 'A autenticar',
loggedIn: 'Autenticado', loggedIn: 'Autenticado',
alreadyLogged: 'Já estás autenticado', alreadyLogged: 'Já estás autenticado',
loginFailed: "Couldn't log in", loginFailed: "Nao foi possivel iniciar sessão",
loggedOut: 'Logged out', loggedOut: 'Desconectado',
cancellingCurrentItem: 'A cancelar item actual.', cancellingCurrentItem: 'A cancelar item actual.',
currentItemCancelled: 'Item actual cancelado.', currentItemCancelled: 'Item actual cancelado.',
startAddingArtist: 'A adicionar {0} álbuns à fila', startAddingArtist: 'A adicionar {0} álbuns à fila',
@ -164,7 +162,7 @@ const pt = {
title: 'Definições', title: 'Definições',
languages: 'Idioma', languages: 'Idioma',
login: { login: {
title: 'Login', title: 'Inicio de Sessão',
loggedIn: 'Estás autenticado como {username}', loggedIn: 'Estás autenticado como {username}',
arl: { arl: {
question: 'Como obter o meu ARL?', question: 'Como obter o meu ARL?',
@ -199,8 +197,8 @@ const pt = {
}, },
trackTitles: { trackTitles: {
title: 'Título', title: 'Título',
padTracks: 'Pad tracks', padTracks: 'Bloco de Faixas',
paddingSize: 'Overwrite padding size', paddingSize: 'Substituir tamanho do preenchimento',
illegalCharacterReplacer: 'Substituir caractere inválidos' illegalCharacterReplacer: 'Substituir caractere inválidos'
}, },
downloads: { downloads: {
@ -215,31 +213,31 @@ const pt = {
overwriteFile: { overwriteFile: {
title: 'Ficheiros existentes. Substituir?', title: 'Ficheiros existentes. Substituir?',
y: 'Sim, substituir o ficheiro', y: 'Sim, substituir o ficheiro',
n: "Não substituir o ficheiro", n: 'Não substituir o ficheiro',
t: 'Sobrescrever apenas as etiquetas' t: 'Subescrever apenas as etiquetas'
}, },
fallbackBitrate: 'Bitrate fallback', fallbackBitrate: 'Reserva de taxa de bits',
fallbackSearch: 'Fallback de pesquisa', fallbackSearch: 'reserva de pesquisa',
logErrors: 'Criar logs para erros', logErrors: 'Criar histórico para erros',
logSearched: 'Criar logs para faixas pesquisadas', logSearched: 'Criar histórico para faixas pesquisadas',
createM3U8File: 'Criar ficheiro de lista de reprodução', createM3U8File: 'Criar ficheiro de lista de reprodução',
syncedLyrics: 'Criar ficheiro .lyr (Letras Sincronizadas)', syncedLyrics: 'Criar ficheiro .lyr (Letras Sincronizadas)',
playlistFilenameTemplate: 'Formato do nome de ficheiro playlists', playlistFilenameTemplate: 'Formato do nome de ficheiro da lista de reprodução',
saveDownloadQueue: 'Guardar fila de transferências ao fechar a aplicação' saveDownloadQueue: 'Guardar fila de transferências ao fechar a aplicação'
}, },
covers: { covers: {
title: 'Capas do Álbum', title: 'Capas do Álbum',
saveArtwork: 'Guardar capas', saveArtwork: 'Guardar capas',
coverImageTemplate: 'Cover name template', coverImageTemplate: 'Modelo do nome da capa',
saveArtworkArtist: 'Save artist image', saveArtworkArtist: 'Salvar imagem do artista',
artistImageTemplate: 'Artist image template', artistImageTemplate: 'Modelo de imagem do artista',
localArtworkSize: 'Local artwork size', localArtworkSize: 'Tamanho do trabalho artístico local',
embeddedArtworkSize: 'Embedded artwork size', embeddedArtworkSize: 'Tamanho do trabalho artístico incorporado',
localArtworkFormat: { localArtworkFormat: {
title: 'What format do you want the local artwork to be?', title: 'Que formato você deseja que o trabalho artístico local seja?',
jpg: 'A jpeg image', jpg: 'Uma imagem jpeg',
png: 'A png image', png: 'Uma imagem png',
both: 'Both a jpeg and a png' both: 'Os dois um jpeg e um png'
}, },
jpegImageQuality: 'Qualidade de imagem JPEG' jpegImageQuality: 'Qualidade de imagem JPEG'
}, },
@ -262,17 +260,17 @@ const pt = {
length: 'Duração da faixa', length: 'Duração da faixa',
barcode: 'Código de barras do álbum (UPC)', barcode: 'Código de barras do álbum (UPC)',
bpm: 'BPM', bpm: 'BPM',
replayGain: 'Replay Gain', replayGain: 'Ganho de Repeticao',
label: 'Editora do álbum', label: 'Editora do álbum',
lyrics: 'Unsynchronized Lyrics', lyrics: 'Letra da música não sincronizado',
copyright: 'Copyright', copyright: 'Direito Autoral',
composer: 'Compositor', composer: 'Compositor',
involvedPeople: 'Pessoas envolvidas' involvedPeople: 'Pessoas envolvidas'
}, },
other: { other: {
title: 'Outros', title: 'Outros',
savePlaylistAsCompilation: 'Save playlists as compilation', savePlaylistAsCompilation: 'Guardar a lista de reproducao como uma compilacao',
useNullSeparator: 'Usar separador null', useNullSeparator: 'Usar separador nulo',
saveID3v1: 'Também guardar ID3v1', saveID3v1: 'Também guardar ID3v1',
multiArtistSeparator: { multiArtistSeparator: {
title: 'Como queres separarar os artistas?', title: 'Como queres separarar os artistas?',
@ -292,22 +290,22 @@ const pt = {
day: 'DD' day: 'DD'
}, },
featuredToTitle: { featuredToTitle: {
title: 'What should I do with featured artists?', title: 'O que devo fazer com os artistas em destaque?',
0: 'Nada', 0: 'Nada',
1: 'Remover do título', 1: 'Remover do título',
3: 'Remover do título de do título do album', 3: 'Remover do título de do título do album',
2: 'Movê-lo para o título' 2: 'Movê-lo para o título'
}, },
titleCasing: 'Title casing', titleCasing: 'Caixa do Título',
artistCasing: 'Artist casing', artistCasing: 'Caixa do Artista',
casing: { casing: {
nothing: 'Manter inalterado', nothing: 'Manter inalterado',
lower: 'minusculas', lower: 'minusculas',
upper: 'MAIÙSCULAS', upper: 'MAIÙSCULAS',
start: 'Ínicio De Cada Palavra', start: 'Ínicio De Cada Palavra',
sentence: 'Like a sentence' sentence: 'Como uma frase'
}, },
previewVolume: 'Preview Volume', previewVolume: 'Pre visualizacao do volume',
executeCommand: { executeCommand: {
title: 'Comando a executar após transferir', title: 'Comando a executar após transferir',
description: 'Deixar em branco para nenhuma acção' description: 'Deixar em branco para nenhuma acção'
@ -319,12 +317,12 @@ const pt = {
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'nome de utilizador Spotify' username: 'nome de utilizador Spotify'
}, },
reset: 'Reset to Default', reset: 'Restaurar para o padrao',
save: 'Save', save: 'Guardar',
toasts: { toasts: {
init: 'Configurações carregadas!', init: 'Configurações carregadas!',
update: 'Configurações actualizadas', update: 'Configurações actualizadas',
ARLcopied: 'ARL copied to clipboard' ARLcopied: 'ARL copiado para area de transferencia'
} }
}, },
sidebar: { sidebar: {
@ -332,7 +330,7 @@ const pt = {
search: 'pesquisa', search: 'pesquisa',
charts: 'tabelas', charts: 'tabelas',
favorites: 'favoritos', favorites: 'favoritos',
linkAnalyzer: 'link analyzer', linkAnalyzer: 'Analizador de Links',
settings: 'definições', settings: 'definições',
about: 'sobre' about: 'sobre'
}, },
@ -341,4 +339,4 @@ const pt = {
} }
} }
export default pt export default pt

View File

@ -1,344 +1,344 @@
const ru = { const ru = {
globals: { globals: {
welcome: 'Добро пожаловать в deemix', welcome: 'Добро пожаловать в deemix',
back: 'назад', back: 'назад',
loading: 'загрузка', loading: 'загрузка',
download: 'Скачать {0}', download: 'Скачать {0}',
by: '{0}', by: '{0}',
in: 'из {0}', in: 'из {0}',
download_hint: 'Скачать', download_hint: 'Скачать',
play_hint: 'Прослушать', play_hint: 'Прослушать',
toggle_download_tab_hint: 'Показать/Свернуть', toggle_download_tab_hint: 'Показать/Свернуть',
clean_queue_hint: 'Очистить завершённые', clean_queue_hint: 'Очистить завершённые',
cancel_queue_hint: 'Очистить всё', cancel_queue_hint: 'Очистить всё',
listTabs: { listTabs: {
empty: '', empty: '',
all: 'все', all: 'все',
top_result: 'лучший результат', top_result: 'лучший результат',
album: 'альбом | альбомы', album: 'альбом | альбомы',
artist: 'исполнитель | исполнители', artist: 'исполнитель | исполнители',
single: 'сингл | синглы', single: 'сингл | синглы',
title: 'название | названия', title: 'название | названия',
track: 'трек | треки', track: 'трек | треки',
trackN: '0 треков | {n} трек | {n} трека | {n} треков', trackN: '0 треков | {n} трек | {n} трека | {n} треков',
releaseN: '0 релизов | {n} релиз | {n} релиза | {n} релизов', releaseN: '0 релизов | {n} релиз | {n} релиза | {n} релизов',
playlist: 'плейлист | плейлисты', playlist: 'плейлист | плейлисты',
compile: 'сборник | сборники', compile: 'сборник | сборники',
ep: 'ep | eps', ep: 'ep | eps',
spotifyPlaylist: 'плейлисты spotify | плейлисты spotify', spotifyPlaylist: 'плейлисты spotify | плейлисты spotify',
releaseDate: 'Дата выхода', releaseDate: 'Дата выхода',
error: 'ошибка' error: 'ошибка'
} }
}, },
about: { about: {
titles: { titles: {
usefulLinks: 'Полезные ссылки', usefulLinks: 'Полезные ссылки',
bugReports: 'Баг репорты', bugReports: 'Баг репорты',
contributing: 'Помощь проекту', contributing: 'Помощь проекту',
donations: 'Пожертвования', donations: 'Пожертвования',
license: 'Лицензия' license: 'Лицензия'
}, },
subtitles: { subtitles: {
bugReports: "Что-то не работает? Скажите нам!", bugReports: "Что-то не работает? Скажите нам!",
contributing: 'Хотите поддержать проект? Это можно сделать разными способами!', contributing: 'Хотите поддержать проект? Это можно сделать разными способами!',
donations: 'Хотите поддержать материально? Можно сделать пожертвование!' donations: 'Хотите поддержать материально? Можно сделать пожертвование!'
}, },
usesLibrary: 'Приложение использует библиотеку <strong>deemix</strong>, с помощью которой вы можете сделать собственный UI deemix.', usesLibrary: 'Приложение использует библиотеку <strong>deemix</strong>, с помощью которой вы можете сделать собственный UI deemix.',
thanks: `Спасибо <strong>rtonno</strong>, <strong>uhwot</strong> и <strong>lollilol</strong> за помощь с этим проектом, а также <strong>BasCurtiz</strong> и <strong>scarvimane</strong> за иконку.`, thanks: `Спасибо <strong>rtonno</strong>, <strong>uhwot</strong> и <strong>lollilol</strong> за помощь с этим проектом, а также <strong>BasCurtiz</strong> и <strong>scarvimane</strong> за иконку.`,
upToDate: `Следите за последними обновлениями на <a href="https://t.me/RemixDevNews" target="_blank">канале</a> в Telegram.`, upToDate: `Следите за последними обновлениями на <a href="https://t.me/RemixDevNews" target="_blank">канале</a> в Telegram.`,
officialWebsite: 'Официальный сайт', officialWebsite: 'Официальный сайт',
officialRepo: 'Официальный репозиторий библиотеки', officialRepo: 'Официальный репозиторий библиотеки',
officialWebuiRepo: 'Официальный репозиторий WebUI', officialWebuiRepo: 'Официальный репозиторий WebUI',
officialSubreddit: 'Официальный сабреддит', officialSubreddit: 'Официальный сабреддит',
newsChannel: 'Канал новостей', newsChannel: 'Канал новостей',
questions: `Если у вас возникли вопросы или проблемы с приложением, поищите решение на <a href="https://www.reddit.com/r/deemix" target="_blank">сабреддите</a>. Если решения не нашли, можете создать новый пост и описать вашу проблему.`, questions: `Если у вас возникли вопросы или проблемы с приложением, поищите решение на <a href="https://www.reddit.com/r/deemix" target="_blank">сабреддите</a>. Если решения не нашли, можете создать новый пост и описать вашу проблему.`,
beforeReporting: `Перед тем, как сообщать об ошибках, убедитесь, что у вас стоит последняя версия приложения и что проблема не на вашей стороне.`, beforeReporting: `Перед тем, как сообщать об ошибках, убедитесь, что у вас стоит последняя версия приложения и что проблема не на вашей стороне.`,
beSure: `Убедитесь, что ошибка возникает и на других устройствах. Также <strong>НЕ </strong> сообщайте об ошибке, если про неё уже известно.`, beSure: `Убедитесь, что ошибка возникает и на других устройствах. Также <strong>НЕ </strong> сообщайте об ошибке, если про неё уже известно.`,
duplicateReports: 'Повторные сообщения об ошибках рассматриваться не будут.', duplicateReports: 'Повторные сообщения об ошибках рассматриваться не будут.',
dontOpenIssues: `<strong>НЕ НАДО</strong> создавать задачу с простым вопросом, для этого есть сабреддит.`, dontOpenIssues: `<strong>НЕ НАДО</strong> создавать задачу с простым вопросом, для этого есть сабреддит.`,
newUI: `Если вы хорошо знаете python, то можете сделать новый UI для приложения с использованием базовой библиотеки или пофиксить в ней баги и сделать pull request в <a href="https://codeberg.org/RemixDev/deemix" target="_blank">репозитории</a>.`, newUI: `Если вы хорошо знаете python, то можете сделать новый UI для приложения с использованием базовой библиотеки или пофиксить в ней баги и сделать pull request в <a href="https://codeberg.org/RemixDev/deemix" target="_blank">репозитории</a>.`,
acceptFeatures: `Новые фичи также приветствуются, но не слишком сложные, так как они будут добавлены в приложение, а не в саму библиотеку.`, acceptFeatures: `Новые фичи также приветствуются, но не слишком сложные, так как они будут добавлены в приложение, а не в саму библиотеку.`,
otherLanguages: `Если вы хорошо знаете другой язык программирования, можете портировать на нём deemix!`, otherLanguages: `Если вы хорошо знаете другой язык программирования, можете портировать на нём deemix!`,
understandingCode: `Не можете понять код? Напишите RemixDev up в Telegram или на Reddit.`, understandingCode: `Не можете понять код? Напишите RemixDev up в Telegram или на Reddit.`,
contributeWebUI: `Если вы знаете Vue.js (JavaScript), HTML или CSS, можете внести вклад в <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`, contributeWebUI: `Если вы знаете Vue.js (JavaScript), HTML или CSS, можете внести вклад в <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a>.`,
itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует <strong>поддерживать исполнителей</strong>, которые вам нравятся прежде, чем поддерживать разработчиков.`, itsFree: `Помните, что это <strong>бесплатное приложение</strong> и вам следует <strong>поддерживать исполнителей</strong>, которые вам нравятся прежде, чем поддерживать разработчиков.`,
notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`, notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`,
lincensedUnder: `Проект находится под лицензией lincensedUnder: `Проект находится под лицензией
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank" <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a >GNU General Public License 3.0</a
>.` >.`
}, },
charts: { charts: {
title: 'Чарты', title: 'Чарты',
changeCountry: 'Изменить страну', changeCountry: 'Изменить страну',
download: 'Скачать чарт' download: 'Скачать чарт'
}, },
errors: { errors: {
title: 'Errors for {0}', title: 'Errors for {0}',
ids: { ids: {
invalidURL: 'URL не распознана', invalidURL: 'URL не распознана',
unsupportedURL: 'URL не поддерживается', unsupportedURL: 'URL не поддерживается',
ISRCnotOnDeezer: 'ISRC трека недоступен на deezer', ISRCnotOnDeezer: 'ISRC трека недоступен на deezer',
notYourPrivatePlaylist: "Нельзя скачивать чужие плейлисты.", notYourPrivatePlaylist: "Нельзя скачивать чужие плейлисты.",
spotifyDisabled: 'Неправильно настроены параметры Spotify.', spotifyDisabled: 'Неправильно настроены параметры Spotify.',
trackNotOnDeezer: 'Трек не найден на deezer!', trackNotOnDeezer: 'Трек не найден на deezer!',
albumNotOnDeezer: 'Альбом не найден deezer!', albumNotOnDeezer: 'Альбом не найден deezer!',
notOnDeezer: 'Трек недоступен на Deezer!', notOnDeezer: 'Трек недоступен на Deezer!',
notEncoded: 'Трек ещё не перекодирован!', notEncoded: 'Трек ещё не перекодирован!',
notEncodedNoAlternative: 'Трек не перекодирован, альтернатив не найдено!', notEncodedNoAlternative: 'Трек не перекодирован, альтернатив не найдено!',
wrongBitrate: 'Не найден трек с нужным битрейтом.', wrongBitrate: 'Не найден трек с нужным битрейтом.',
wrongBitrateNoAlternative: 'Не найден трек с нужным битрейтом. Альтернатив не найдено!', wrongBitrateNoAlternative: 'Не найден трек с нужным битрейтом. Альтернатив не найдено!',
no360RA: 'Трек недоступен в Reality Audio 360.', no360RA: 'Трек недоступен в Reality Audio 360.',
notAvailable: "Трек недоступен на серверах deezer!", notAvailable: "Трек недоступен на серверах deezer!",
notAvailableNoAlternative: "Трек недоступен на серверах deezer. Альтернатив не найдено!" notAvailableNoAlternative: "Трек недоступен на серверах deezer. Альтернатив не найдено!"
} }
}, },
favorites: { favorites: {
title: 'Избранное', title: 'Избранное',
noPlaylists: 'Плейлисты не найдены', noPlaylists: 'Плейлисты не найдены',
noAlbums: 'Избранные альбомы не найдены', noAlbums: 'Избранные альбомы не найдены',
noArtists: 'Избранные исполнители не найдены', noArtists: 'Избранные исполнители не найдены',
noTracks: 'Избранные треки не найдены' noTracks: 'Избранные треки не найдены'
}, },
home: { home: {
needTologin: 'Вам нужно зайти под своим Deezer аккаунтом прежде, чем скачивать.', needTologin: 'Вам нужно зайти под своим Deezer аккаунтом прежде, чем скачивать.',
openSettings: 'Открыть настройки', openSettings: 'Открыть настройки',
sections: { sections: {
popularPlaylists: 'Популярные плейлисты', popularPlaylists: 'Популярные плейлисты',
popularAlbums: 'Самые прослушиваемые альбомы' popularAlbums: 'Самые прослушиваемые альбомы'
} }
}, },
linkAnalyzer: { linkAnalyzer: {
info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, по которой вы хотите скачать.', info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, по которой вы хотите скачать.',
useful: useful:
"Этот раздел нужен, если вы хотите скачать треки, недоступные в вашей стране, а также посмотреть, где они доступны.", "Этот раздел нужен, если вы хотите скачать треки, недоступные в вашей стране, а также посмотреть, где они доступны.",
linkNotSupported: 'Ссылка не поддерживается', linkNotSupported: 'Ссылка не поддерживается',
linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.', linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.',
table: { table: {
id: 'ID', id: 'ID',
isrc: 'ISRC', isrc: 'ISRC',
upc: 'UPC', upc: 'UPC',
duration: 'Продолжительность', duration: 'Продолжительность',
diskNumber: 'Номер диска', diskNumber: 'Номер диска',
trackNumber: 'Номер трека', trackNumber: 'Номер трека',
releaseDate: 'Дата выхода', releaseDate: 'Дата выхода',
bpm: 'BPM', bpm: 'BPM',
label: 'Издатель', label: 'Издатель',
recordType: 'Тип', recordType: 'Тип',
genres: 'Жанр', genres: 'Жанр',
tracklist: 'Треклист' tracklist: 'Треклист'
} }
}, },
search: { search: {
startSearching: 'Начните искать!', startSearching: 'Начните искать!',
description: description:
'Здесь можно найти трек, альбом, исполнителя, плейлист... всё! Можно также вставить ссылку Deezer', 'Здесь можно найти трек, альбом, исполнителя, плейлист... всё! Можно также вставить ссылку Deezer',
fans: '{0} поклонников', fans: '{0} поклонников',
noResults: 'Нет результатов', noResults: 'Нет результатов',
noResultsTrack: 'Треков не найдено', noResultsTrack: 'Треков не найдено',
noResultsAlbum: 'Альбомов не найдено', noResultsAlbum: 'Альбомов не найдено',
noResultsArtist: 'Исполнителей не найдено', noResultsArtist: 'Исполнителей не найдено',
noResultsPlaylist: 'Плейлистов не найдено' noResultsPlaylist: 'Плейлистов не найдено'
}, },
searchbar: 'Ищите, что хотите (или вставьте ссылку)', searchbar: 'Ищите, что хотите (или вставьте ссылку)',
downloads: 'загрузки', downloads: 'загрузки',
toasts: { toasts: {
addedToQueue: '{0} добавлено в очередь', addedToQueue: '{0} добавлено в очередь',
alreadyInQueue: '{0} уже есть в очереди!', alreadyInQueue: '{0} уже есть в очереди!',
finishDownload: '{0} загрузок завершено.', finishDownload: '{0} загрузок завершено.',
allDownloaded: 'Все загрузки завершены!', allDownloaded: 'Все загрузки завершены!',
refreshFavs: 'Обновление завершено!', refreshFavs: 'Обновление завершено!',
loggingIn: 'Вход', loggingIn: 'Вход',
loggedIn: 'Вход выполнен', loggedIn: 'Вход выполнен',
alreadyLogged: 'Вход уже выполнен', alreadyLogged: 'Вход уже выполнен',
loginFailed: "Вход не выполнен", loginFailed: "Вход не выполнен",
loggedOut: 'Logged out', loggedOut: 'Logged out',
cancellingCurrentItem: 'Отмена закачки.', cancellingCurrentItem: 'Отмена закачки.',
currentItemCancelled: 'Отменено.', currentItemCancelled: 'Отменено.',
startAddingArtist: 'Добавление {0} альбомов в очередь', startAddingArtist: 'Добавление {0} альбомов в очередь',
finishAddingArtist: 'Добавлено {0} альбомов в очередь', finishAddingArtist: 'Добавлено {0} альбомов в очередь',
startConvertingSpotifyPlaylist: 'Преобразование треков из spotify в deezer', startConvertingSpotifyPlaylist: 'Преобразование треков из spotify в deezer',
finishConvertingSpotifyPlaylist: 'Преобразование Spotify playlist converted' finishConvertingSpotifyPlaylist: 'Преобразование Spotify playlist converted'
}, },
settings: { settings: {
title: 'Настройки', title: 'Настройки',
languages: 'Язык', languages: 'Язык',
login: { login: {
title: 'Вход', title: 'Вход',
loggedIn: 'Вы вошли как {username}', loggedIn: 'Вы вошли как {username}',
arl: { arl: {
question: 'Как узнать свой ARL?', question: 'Как узнать свой ARL?',
update: 'Обновить ARL' update: 'Обновить ARL'
}, },
logout: 'Выйти' logout: 'Выйти'
}, },
appearance: { appearance: {
title: 'Внешний вид', title: 'Внешний вид',
slimDownloadTab: 'Обрезать вкладку с загрузками' slimDownloadTab: 'Обрезать вкладку с загрузками'
}, },
downloadPath: { downloadPath: {
title: 'Путь сохранения' title: 'Путь сохранения'
}, },
templates: { templates: {
title: 'Шаблоны', title: 'Шаблоны',
tracknameTemplate: 'Шаблон названия трека', tracknameTemplate: 'Шаблон названия трека',
albumTracknameTemplate: 'Шаблон названия трека альбома', albumTracknameTemplate: 'Шаблон названия трека альбома',
playlistTracknameTemplate: 'Шаблон названия трека плейлиста' playlistTracknameTemplate: 'Шаблон названия трека плейлиста'
}, },
folders: { folders: {
title: 'Папки', title: 'Папки',
createPlaylistFolder: 'Создать папки для плейлистов', createPlaylistFolder: 'Создать папки для плейлистов',
playlistNameTemplate: 'Название папки плейлиста', playlistNameTemplate: 'Название папки плейлиста',
createArtistFolder: 'Создать папки для исполнителя', createArtistFolder: 'Создать папки для исполнителя',
artistNameTemplate: 'Название папки исполнителя', artistNameTemplate: 'Название папки исполнителя',
createAlbumFolder: 'Создать папки для альбома', createAlbumFolder: 'Создать папки для альбома',
albumNameTemplate: 'Название папки альбома', albumNameTemplate: 'Название папки альбома',
createCDFolder: 'Создать папки для CD', createCDFolder: 'Создать папки для CD',
createStructurePlaylist: 'Создать структуру папок для плейлистов', createStructurePlaylist: 'Создать структуру папок для плейлистов',
createSingleFolder: 'Создать структуру папок для синглов' createSingleFolder: 'Создать структуру папок для синглов'
}, },
trackTitles: { trackTitles: {
title: 'Названия треков', title: 'Названия треков',
padTracks: 'Добавлять нули', padTracks: 'Добавлять нули',
paddingSize: 'Количество цифр', paddingSize: 'Количество цифр',
illegalCharacterReplacer: 'Замена для запрещённых символов' illegalCharacterReplacer: 'Замена для запрещённых символов'
}, },
downloads: { downloads: {
title: 'Загрузки', title: 'Загрузки',
queueConcurrency: 'Количество одновременных закачек', queueConcurrency: 'Количество одновременных закачек',
maxBitrate: { maxBitrate: {
title: 'Битрейт', title: 'Битрейт',
9: 'FLAC 1411kbps', 9: 'FLAC 1411kbps',
3: 'MP3 320kbps', 3: 'MP3 320kbps',
1: 'MP3 128kbps' 1: 'MP3 128kbps'
}, },
overwriteFile: { overwriteFile: {
title: 'Нужно ли перезаписывать файлы?', title: 'Нужно ли перезаписывать файлы?',
y: 'Да, перезаписать файл', y: 'Да, перезаписать файл',
n: "Нет, не перезаписывать", n: "Нет, не перезаписывать",
t: 'Обновить только теги' t: 'Обновить только теги'
}, },
fallbackBitrate: 'Скачивать с низким битрейтом, если текущий недоступен', fallbackBitrate: 'Скачивать с низким битрейтом, если текущий недоступен',
fallbackSearch: 'Искать другой трек, если нужный недоступен', fallbackSearch: 'Искать другой трек, если нужный недоступен',
logErrors: 'Создать логи для ошибок', logErrors: 'Создать логи для ошибок',
logSearched: 'Создать лог поиска', logSearched: 'Создать лог поиска',
createM3U8File: 'Создать файлы плейлистов', createM3U8File: 'Создать файлы плейлистов',
syncedLyrics: 'Создать .lyr файлы (Синхронизированный текст)', syncedLyrics: 'Создать .lyr файлы (Синхронизированный текст)',
playlistFilenameTemplate: 'Шаблон названия плейлиста', playlistFilenameTemplate: 'Шаблон названия плейлиста',
saveDownloadQueue: 'Сохранять текущий список загрузок при закрытии приложения' saveDownloadQueue: 'Сохранять текущий список загрузок при закрытии приложения'
}, },
covers: { covers: {
title: 'Обложки', title: 'Обложки',
saveArtwork: 'Сохранять обложки', saveArtwork: 'Сохранять обложки',
coverImageTemplate: 'Шаблон названия обложки', coverImageTemplate: 'Шаблон названия обложки',
saveArtworkArtist: 'Сохранять изображение исполнителя', saveArtworkArtist: 'Сохранять изображение исполнителя',
artistImageTemplate: 'Шаблон названия изображения', artistImageTemplate: 'Шаблон названия изображения',
localArtworkSize: 'Размер сохраненной обложки', localArtworkSize: 'Размер сохраненной обложки',
embeddedArtworkSize: 'Размер встроенной', embeddedArtworkSize: 'Размер встроенной',
localArtworkFormat: { localArtworkFormat: {
title: 'В каком формате сохранять обложки?', title: 'В каком формате сохранять обложки?',
jpg: 'jpeg', jpg: 'jpeg',
png: 'png', png: 'png',
both: 'jpeg и png' both: 'jpeg и png'
}, },
jpegImageQuality: 'Качество JPEG' jpegImageQuality: 'Качество JPEG'
}, },
tags: { tags: {
head: 'Какие теги сохранять', head: 'Какие теги сохранять',
title: 'Название', title: 'Название',
artist: 'Исполнитель', artist: 'Исполнитель',
album: 'Альбом', album: 'Альбом',
cover: 'Обложка', cover: 'Обложка',
trackNumber: 'Номер трека', trackNumber: 'Номер трека',
trackTotal: 'Кол-во треков', trackTotal: 'Кол-во треков',
discNumber: 'Номер диска', discNumber: 'Номер диска',
discTotal: 'Кол-во дисков', discTotal: 'Кол-во дисков',
albumArtist: 'Исполнитель альбома', albumArtist: 'Исполнитель альбома',
genre: 'Жанр', genre: 'Жанр',
year: 'Год', year: 'Год',
date: 'Дата', date: 'Дата',
explicit: 'Нецензурная лирика', explicit: 'Нецензурная лирика',
isrc: 'ISRC', isrc: 'ISRC',
length: 'Продолжительность', length: 'Продолжительность',
barcode: 'Штрихкод альбома (UPC)', barcode: 'Штрихкод альбома (UPC)',
bpm: 'BPM', bpm: 'BPM',
replayGain: 'Replay Gain', replayGain: 'Replay Gain',
label: 'Издатель', label: 'Издатель',
lyrics: 'Несинхронизированный текст', lyrics: 'Несинхронизированный текст',
copyright: 'Права', copyright: 'Права',
composer: 'Композитор', composer: 'Композитор',
involvedPeople: 'Вовлечённые люди' involvedPeople: 'Вовлечённые люди'
}, },
other: { other: {
title: 'Разное', title: 'Разное',
savePlaylistAsCompilation: 'Сохранить плейлисты как сборники', savePlaylistAsCompilation: 'Сохранить плейлисты как сборники',
useNullSeparator: 'Использовать нулевой символ в качестве разделителя', useNullSeparator: 'Использовать нулевой символ в качестве разделителя',
saveID3v1: 'Дополнительно сохранять ID3v1', saveID3v1: 'Дополнительно сохранять ID3v1',
multiArtistSeparator: { multiArtistSeparator: {
title: 'Как разделять несколько исполнителей?', title: 'Как разделять несколько исполнителей?',
nothing: 'Сохранить только основного', nothing: 'Сохранить только основного',
default: 'Используя стандартную спецификацию', default: 'Используя стандартную спецификацию',
andFeat: 'Используя & и feat.', andFeat: 'Используя & и feat.',
using: 'Используя "{0}"' using: 'Используя "{0}"'
}, },
singleAlbumArtist: 'Сохранить только основного исполнителя альбома', singleAlbumArtist: 'Сохранить только основного исполнителя альбома',
albumVariousArtists: 'Оставить "Various Artists" в Исполнителях льбома', albumVariousArtists: 'Оставить "Various Artists" в Исполнителях льбома',
removeAlbumVersion: 'Удалить "Album Version" из названия трека', removeAlbumVersion: 'Удалить "Album Version" из названия трека',
removeDuplicateArtists: 'Удалить повторяющихся исполнителей', removeDuplicateArtists: 'Удалить повторяющихся исполнителей',
dateFormat: { dateFormat: {
title: 'Формат даты для FLAC файлов', title: 'Формат даты для FLAC файлов',
year: 'YYYY', year: 'YYYY',
month: 'MM', month: 'MM',
day: 'DD' day: 'DD'
}, },
featuredToTitle: { featuredToTitle: {
title: 'Что делать с приглашёнными исполнителями?', title: 'Что делать с приглашёнными исполнителями?',
0: 'Ничего', 0: 'Ничего',
1: 'Удалить их из названия', 1: 'Удалить их из названия',
3: 'Удалить из названия и названия альбома', 3: 'Удалить из названия и названия альбома',
2: 'Добавить в название' 2: 'Добавить в название'
}, },
titleCasing: 'Регистр названия', titleCasing: 'Регистр названия',
artistCasing: 'Регистр исполнителя', artistCasing: 'Регистр исполнителя',
casing: { casing: {
nothing: 'Не менять', nothing: 'Не менять',
lower: 'в нижнем регистре', lower: 'в нижнем регистре',
upper: 'В ВЕРХНЕМ РЕГИСТРЕ', upper: 'В ВЕРХНЕМ РЕГИСТРЕ',
start: 'Каждое Слово С Заглавной Буквы', start: 'Каждое Слово С Заглавной Буквы',
sentence: 'Как в предложении' sentence: 'Как в предложении'
}, },
previewVolume: 'Громкость прослушивания', previewVolume: 'Громкость прослушивания',
executeCommand: { executeCommand: {
title: 'Выполнить команды по окончании загрузок', title: 'Выполнить команды по окончании загрузок',
description: 'Оставьте пустым, если ничего не требуется' description: 'Оставьте пустым, если ничего не требуется'
} }
}, },
spotify: { spotify: {
title: 'Функции Spotify', title: 'Функции Spotify',
clientID: 'Spotify clientID', clientID: 'Spotify clientID',
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'Spotify username' username: 'Spotify username'
}, },
reset: 'По умолчанию', reset: 'По умолчанию',
save: 'Сохранить', save: 'Сохранить',
toasts: { toasts: {
init: 'Настройки загружены!', init: 'Настройки загружены!',
update: 'Настройки обновлены!', update: 'Настройки обновлены!',
ARLcopied: 'ARL скопирован в буфер обмена' ARLcopied: 'ARL скопирован в буфер обмена'
} }
}, },
sidebar: { sidebar: {
home: 'домой', home: 'домой',
search: 'поиск', search: 'поиск',
charts: 'чарты', charts: 'чарты',
favorites: 'избранное', favorites: 'избранное',
linkAnalyzer: 'просмотр ссылок', linkAnalyzer: 'просмотр ссылок',
settings: 'настройки', settings: 'настройки',
about: 'о проекте' about: 'о проекте'
}, },
tracklist: { tracklist: {
downloadSelection: 'Скачать выбранные' downloadSelection: 'Скачать выбранные'
} }
} }
export default ru export default ru

344
src/lang/tr.js Normal file
View File

@ -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:
'<strong>deemix</strong> kendi kullanıcı arabiriminizi oluşturabileceğiniz, kendine özgü kütüphanesini kullanıyor.',
thanks: ` <strong>rtonno</strong>, <strong>uhwot</strong> ve <strong>lollilol</strong>'a bu projeye yaptığı katkılardan ve <strong>BasCurtiz</strong> ile <strong>scarvimane</strong>'e ikonlardan dolayı teşekkür ederim.`,
upToDate: `Telegramdaki haber kanalını takip ederek <a href="https://t.me/RemixDevNews" target="_blank"></a>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 <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit adresinden </a> 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 <strong>Bildirilen</strong> bir hatayı tekrar bildirmeyin.`,
duplicateReports: 'Birbirinin aynısı olan hata bildirileri kapatılacaktır, o yüzden dikkatli olun.',
dontOpenIssues: `<strong>Soru sormak</strong> 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 <a href="https://codeberg.org/RemixDev/deemix" target="_blank">deposuna değişiklik isteği yollayabilirsin.</a>.`,
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, <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">Web Kullanıcı Arayüzüne katkıda bulanabilirsin</a>.`,
itsFree: `Bunun <strong>ücretsiz bir proje olduğunu</strong> ve <strong>geliştiricilerden önce</strong> 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:
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a
>.`
},
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

View File

@ -9,6 +9,9 @@ import de from '@/lang/de'
import fr from '@/lang/fr' import fr from '@/lang/fr'
import id from '@/lang/id' import id from '@/lang/id'
import pt from '@/lang/pt-pt' 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) Vue.use(VueI18n)
@ -23,7 +26,10 @@ const locales = {
de, de,
fr, fr,
id, id,
pt pt,
ptBr,
ru,
tr
} }
const i18n = new VueI18n({ const i18n = new VueI18n({
@ -31,21 +37,33 @@ const i18n = new VueI18n({
fallbackLocale: DEFAULT_LANG, fallbackLocale: DEFAULT_LANG,
messages: locales, messages: locales,
pluralizationRules: { pluralizationRules: {
/** /**
* @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` * @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 * @param choicesLength {number} an overall amount of available choices
* @returns a final choice index to select plural word by * @returns a final choice index to select plural word by
*/ */
'ru': function(choice, choicesLength) { ru: function(choice, choicesLength) {
if (choice === 0) { return 0 } if (choice === 0) {
return 0
}
var n = Math.abs(choice) % 100 var n = Math.abs(choice) % 100
var n1 = n % 10 var n1 = n % 10
if (n > 10 && n < 20) { return 3 }
if (n1 > 1 && n1 < 5) { return 2 } if (n > 10 && n < 20) {
if (n1 == 1) { return 1 } return 3
return 3; }
}
} if (n1 > 1 && n1 < 5) {
return 2
}
if (n1 == 1) {
return 1
}
return 3
}
}
}) })
export default i18n export default i18n

View File

@ -5,6 +5,9 @@ import de from 'svg-country-flags/svg/de.svg'
import fr from 'svg-country-flags/svg/fr.svg' import fr from 'svg-country-flags/svg/fr.svg'
import id from 'svg-country-flags/svg/id.svg' import id from 'svg-country-flags/svg/id.svg'
import pt from 'svg-country-flags/svg/pt.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 { export default {
it, it,
@ -13,5 +16,8 @@ export default {
de, de,
fr, fr,
id, id,
pt pt,
ptBr: br,
ru,
tr
} }