refactor(i18n): split locale files into per-namespace modules (Phase K) (#688)

Each src/locales/<lang>.ts (~1800 LOC) becomes a folder src/locales/<lang>/
with one module per i18n namespace (44 each) plus an index.ts barrel that
reassembles <lang>Translation in the original key order.

Mechanical, script-driven split with a JSON round-trip check: every
locale object is byte-identical to its pre-split form. i18n.ts is
unchanged — './locales/<lang>' now resolves to the folder index.

The per-namespace settings.ts files land ~440-460 LOC; a single i18n
namespace is the natural, non-arbitrary split unit for a flat string
table, so they are intentionally left whole.
This commit is contained in:
Frank Stellmacher
2026-05-14 14:06:31 +02:00
committed by GitHub
parent ec112922a2
commit 2409a1fec8
414 changed files with 17424 additions and 16624 deletions
+47
View File
@@ -0,0 +1,47 @@
export const albumDetail = {
back: 'Înapoi',
orbitDoubleClickHint: 'Apasă dublu-clic pentru a adăuga această piesă în coada Orbit',
playAll: 'Redă tot',
shareAlbum: 'Distribuie Albumul',
enqueue: 'Adaugă în coadă',
enqueueTooltip: 'Adaugă întregul album în coadă',
artistBio: 'Biografia Artistului',
download: 'Descarcă (ZIP)',
downloading: 'Se încarcă…',
cacheOffline: 'Fă disponibil offline',
offlineCached: 'Disponibil offline',
offlineDownloading: 'Se salvează în cache… ({{n}}/{{total}})',
removeOffline: 'Șterge cache-ul offline',
offlineStorageFull: 'Stocare offline plină (limită: {{mb}} MB). Eliberează spațiu ștergând un album din Librăria Offline, sau mărește limita în Setări.',
offlineStorageGoToLibrary: 'Librăria Offline',
offlineStorageGoToSettings: 'Setări',
favoriteAdd: 'Adaugă la Favorite',
favoriteRemove: 'Șterge din Favorite',
favorite: 'Favorit',
noBio: 'Nicio biografie disponibilă.',
moreByArtist: 'Mai multe de la {{artist}}',
tracksCount: '{{n}} Piese',
goToArtist: 'Către {{artist}}',
moreLabelAlbums: 'Mai multe albume în {{label}}',
trackTitle: 'Titlu',
trackAlbum: 'Album',
trackArtist: 'Artist',
trackGenre: 'Gen',
trackFormat: 'Format',
trackFavorite: 'Favorit',
trackRating: 'Rating',
trackDuration: 'Durată',
trackTotal: 'Total',
columns: 'Coloane',
resetColumns: 'Resetează la predefinite',
notFound: 'Albumul nu a fost găsit.',
bioModal: 'Biografia Artistului',
bioClose: 'Închide',
ratingLabel: 'Rating',
enlargeCover: 'Extinde',
filterSongs: 'Filtrează piese…',
sortNatural: 'Natural',
sortByTitle: 'AZ (Titlu)',
sortByArtist: 'AZ (Artist)',
sortByAlbum: 'AZ (Album)',
};
+32
View File
@@ -0,0 +1,32 @@
export const albums = {
title: 'Toate albumele',
sortByName: 'AZ (Album)',
sortByArtist: 'AZ (Artist)',
sortNewest: 'Cele mai noi primele',
sortRandom: 'Aleatoriu',
yearFrom: 'De la',
yearTo: 'Până la',
yearFilterClear: 'Golește filtrul de an',
yearFilterLabel: 'An',
compilationLabel: 'Compilații',
compilationOnly: 'Doar compilații',
compilationHide: 'Ascunde compilațiile',
compilationTooltipAll: 'Toate albumele · clic: doar compilații',
compilationTooltipOnly: 'Doar compilații · clic: ascunde compilațiile',
compilationTooltipHide: 'Compilații ascunse · clic: arată toate',
select: 'Multi-selecție',
startSelect: 'Activează multi-selecția',
cancelSelect: 'Anulează',
selectionCount: '{{count}} selectate',
downloadZips: 'Descarcă ZIPuri',
addOffline: 'Adaugă Offline',
enqueueSelected_one: 'Adaugă în coadă ({{count}})',
enqueueSelected_other: 'Adaugă în coadă ({{count}})',
enqueueQueued_one: 'Adăugat {{count}} album în coadă',
enqueueQueued_other: 'Adăugat {{count}} albume în coadă',
downloadingZip: 'Se descarcă {{current}}/{{total}}: {{name}}',
downloadZipDone: '{{count}} ZIP(uri) descărcate',
downloadZipFailed: 'Nu s-a reușit descărcarea {{name}}',
offlineQueuing: 'Se adaugă în coadă {{count}} album(e) pentru offline…',
offlineFailed: 'Nu s-a reușit adăugarea {{name}} offline',
};
+41
View File
@@ -0,0 +1,41 @@
export const artistDetail = {
back: 'Înapoi',
albums: 'Albume',
album: 'Album',
playAll: 'Redă tot',
shareArtist: 'Distribuie artistul',
shuffle: 'Amestecă',
radio: 'Radio',
loading: 'Se încarcă…',
noRadio: 'Nicio piesă similară găsită pentru acest artist.',
notFound: 'Artistul nu a fost găsit.',
albumsBy: 'Albume de {{name}}',
topTracks: 'Top Piese',
noAlbums: 'Niciun album găsit.',
trackTitle: 'Titlu',
trackAlbum: 'Album',
trackDuration: 'Durată',
favoriteAdd: 'Adaugă la Favorite',
favoriteRemove: 'Șterge de la Favorite',
favorite: 'Favorit',
albumCount_one: '{{count}} Album',
albumCount_other: '{{count}} Albume',
openedInBrowser: 'Deschide în browser',
featuredOn: 'Apare de asemenea în',
similarArtists: 'Artiști similari',
cacheOffline: 'Salvează discografia offline',
offlineCached: 'Discografie stocată în cache',
offlineDownloading: 'Se salvează în cache… ({{done}}/{{total}} albume)',
uploadImage: 'Încarcă imaginea artistului',
uploadImageError: 'Nu s-a reușit încărcarea imaginii',
releaseTypes: {
album: 'Album',
ep: 'EP',
single: 'Single',
compilation: 'Compilație',
live: 'Live',
soundtrack: 'Soundtrack',
remix: 'Remix',
other: 'Altul',
},
};
+18
View File
@@ -0,0 +1,18 @@
export const artists = {
title: 'Artiști',
search: 'Caută…',
all: 'Tot',
gridView: 'Vizualizare grilă',
listView: 'Vizualizare listă',
imagesOn: 'Imagini artist pornit — poate mări încărcarea rețelei și a sistemului',
imagesOff: 'Imagini artist oprit — se arată doar inițialele',
loadMore: 'Încarcă mai mult',
notFound: 'Niciun artist găsit.',
albumCount_one: '{{count}} Album',
albumCount_other: '{{count}} Albume',
selectionCount: '{{count}} selectați',
select: 'Multi-selecție',
startSelect: 'Activează multi-selecția',
cancelSelect: 'Anulează',
addToPlaylist: 'Adaugă la Playlist',
};
+5
View File
@@ -0,0 +1,5 @@
export const changelog = {
modalTitle: "Ce este nou",
dontShowAgain: "Nu arăta din nou",
close: 'Am înțeles',
};
+66
View File
@@ -0,0 +1,66 @@
export const common = {
albums: 'Albume',
album: 'Album',
loading: 'Se încarcă…',
loadingMore: 'Se încarcă…',
loadingPlaylists: 'Se încarcă Playlisturi…',
noAlbums: 'Niciun album găsit.',
downloading: 'Se descarcă…',
downloadZip: 'Descarcă (ZIP)',
back: 'Înapoi',
cancel: 'Anulează',
close: 'Închide',
save: 'Salvează',
delete: 'Șterge',
use: 'Folosește',
add: 'Adaugă',
new: 'Nou',
active: 'Activ',
download: 'Descarcă',
chooseDownloadFolder: 'Alege folderul de descărcare',
noFolderSelected: 'Niciun folder selectat',
rememberDownloadFolder: 'Ține minte acest folder',
filterGenre: 'Filtru de gen',
filterSearchGenres: 'Caută genuri…',
filterNoGenres: 'Niciun gen nu corespunde',
filterClear: 'Golește',
favorites: 'Favorite',
favoritesTooltipOff: 'Arată doar favorite',
favoritesTooltipOn: 'Arată tot',
play: 'Redă',
bulkSelected: '{{count}} selectate',
clearSelection: 'Golește selecția',
bulkAddToPlaylist: 'Adaugă la Playlist',
bulkRemoveFromPlaylist: 'Șterge din Playlist',
bulkClear: 'Golește selecția',
updaterAvailable: 'Update disponibil',
updaterVersion: 'v{{version}} este disponibil',
updaterWebsite: 'Website',
updaterModalTitle: 'Nouă versiune disponibilă',
updaterChangelog: "Ce este nou",
updaterDownloadBtn: 'Descarcă acum',
updaterSkipBtn: 'Sari peste această Versiune',
updaterRemindBtn: 'Amintește-mi mai târziu',
updaterDone: 'Descărcare finalizată',
updaterShowFolder: 'Arată în Folder',
updaterInstallHint: 'Închide Psysonic și rulează programul de instalare manual.',
updaterAurHint: 'Instalează update-ul prin AUR:',
updaterErrorMsg: 'Descărcare eșuată',
updaterRetryBtn: 'Reîncearcă',
updaterInstallNow: 'Instalează acum',
updaterMacReadyTitle: 'Pregătit de instalare',
updaterMacReady: 'Acest update descarcă, verifică și este aplicat în loc — nu este nevoie de DMG. Aplicația își dă restart automat când e gata.',
updaterTrustNotarized: 'Notarizat de Apple',
updaterTrustSignature: 'Semnătură verificată',
updaterMacDoneTitle: 'Update instalat',
updaterRestartingIn: 'Se restartează în {{n}}s…',
updaterRestarting: 'Se restartează…',
updaterRestartNow: 'Restart acum',
durationHoursMinutes: '{{hours}}h {{minutes}}m',
durationMinutesOnly: '{{minutes}}m',
updaterOpenGitHub: 'Deschide în GitHub',
filters: 'Filtre',
more: 'mai mult',
yearRange: 'Interval de an',
clearAll: 'Golește tot',
};
+11
View File
@@ -0,0 +1,11 @@
export const composerDetail = {
back: 'Înapoi',
notFound: 'Compozitorul nu a fost găsit.',
about: 'Despre acest compozitor',
works: 'Lucrări',
noWorks: 'Nicio lucrare găsită.',
workCount_one: '{{count}} lucrare',
workCount_other: '{{count}} lucrări',
shareComposer: 'Distribuie compozitorul',
unknownComposer: 'Compozitor',
};
+10
View File
@@ -0,0 +1,10 @@
export const composers = {
title: 'Compozitori',
search: 'Caută…',
notFound: 'Niciun compozitor găsit.',
unsupported: 'Căutarea dupa Compozitori necesită Navidrome 0.55 sau mai nou.',
loadFailed: 'Nu s-au putut încărca compozitorii.',
retry: 'Reîncearcă',
involvedIn_one: 'Implicat în {{count}} album',
involvedIn_other: 'Implicat în {{count}} albume',
};
+28
View File
@@ -0,0 +1,28 @@
export const connection = {
connected: 'Conectat',
connectedTo: 'Conectat la {{server}}',
disconnected: 'Deconectat',
disconnectedFrom: 'Nu s-a putut ajunge la {{server}} — apasă pentru a verifica setările',
checking: 'Se conectează…',
extern: 'Extern',
offlineTitle: 'Nicio conexiune la server',
offlineSubtitle: 'Nu s-a putut ajunge la {{server}}. Verifică rețeaua sau serverul.',
offlineModeBanner: 'Modul Offline — se redă din cache-ul local',
offlineNoCacheBanner: 'Nicio conexiune la server — nu s-a putut ajunge la {{server}}',
offlineLibraryTitle: 'Librărie offline',
offlineLibraryEmpty: 'Niciun album adăugat în cache. Conectează-te, deschide un album și apasă "Fă disponibil offline".',
offlineAlbumCount: '{{n}} album',
offlineAlbumCount_plural: '{{n}} albume',
offlineFilterAll: 'Toate',
offlineFilterAlbums: 'Albume',
offlineFilterPlaylists: 'Playlisturi',
offlineFilterArtists: 'Discografii',
retry: 'Reîncearcă',
serverSettings: 'Setările serverului',
switchServerTitle: 'Schimbă serverul',
switchServerHint: 'Apasă pentru a alege alt server salvat.',
manageServers: 'Gestionează serverele…',
switchFailed: 'Nu s-a putut schimba — nu s-a putut ajunge la server.',
lastfmConnected: 'Last.fm conectat ca @{{user}}',
lastfmSessionInvalid: 'Sesiune invalidă — apasă pentru a te reconecta',
};
+33
View File
@@ -0,0 +1,33 @@
export const contextMenu = {
playNow: 'Redă acum',
playNext: 'Redă următorul',
addToQueue: 'Adaugă la coadă',
enqueueAlbum: 'Adaugă Albumul la coadă',
enqueueAlbums_one: 'Adaugă la coadă {{count}} Album',
enqueueAlbums_other: 'Adaugă la coadă {{count}} Albume',
startRadio: 'Pornește Radioul',
instantMix: 'Mix Instant',
instantMixFailed: 'Nu s-a putut crea Mixul Instant — eroare de server sau plugin.',
cliMixNeedsTrack: 'Nimic nu este redat — pornește redarea mai întâi, apoi rulează comanda mix din nou.',
lfmLove: 'Apreciază în Last.fm',
lfmUnlove: 'Elimină aprecierea în Last.fm',
favorite: 'Favorit',
favoriteArtist: 'Artist Favorit',
favoriteAlbum: 'Album Favorit',
unfavorite: 'Șterge din Favorite',
unfavoriteArtist: 'Șterge Artistul din Favorite',
unfavoriteAlbum: 'Șterge Albumul din Favorite',
removeFromQueue: 'Șterge din Coadă',
removeFromPlaylist: 'Șterge din Playlist',
openAlbum: 'Deschide Albumul',
goToArtist: 'Vezi Artistul',
download: 'Descarcă (ZIP)',
addToPlaylist: 'Adaugă la Playlist',
selectedPlaylists: '{{count}} playlisturi selectate',
selectedAlbums: '{{count}} albume selectate',
selectedArtists: '{{count}} artiști selectați',
songInfo: 'Informații despre Piesă',
shareLink: 'Copiază link-ul',
shareCopied: 'Link copiat în clipboard.',
shareCopyFailed: 'Nu s-a putut copia în clipboard.',
};
+80
View File
@@ -0,0 +1,80 @@
export const deviceSync = {
title: 'Sincronizare Dispozitiv',
targetFolder: 'Folder Țintă',
noFolderChosen: 'Niciun folder ales',
selectDrive: 'Selectați un drive…',
refreshDrives: 'Reactualizați drive-urile',
noDrivesDetected: 'Niciun drive înlăturabil detectat',
browseManual: 'Caută manual…',
free: 'liber',
notMountedVolume: 'Ținta nu este pe un volum montat. Drive-ul este posibil deconectat.',
chooseFolder: 'Alege…',
targetDevice: 'Dispozitiv țintă',
schemaLabel: 'Schemă de numire',
schemaHint: 'Schemă fixă pentru sincronizare de încredere între sisteme de operare. Playlisturile sunt scrise ca .m3u8 care referă piesele albumului — niciun duplicat pe dispozitiv.',
migrateButton: 'Reorganizează fișiere existente…',
migrateTooltip: 'Renumește fișiere existente de pe dispozitiv în noua schemă (din șablonul numelui de fișier vechi).',
migrateTitle: 'Reorganizează fișiere existente',
migrateLoading: 'Se analizează fișiere existente…',
migrateNothingToDo: 'Toate fișierele existente corespund deja cu noua schemă — nimic de făcut.',
migrateNoTemplate: 'Niciun șablon de nume de fișier găsit pe dispozitiv. Migrarea se aplică doar când stick-ul a fost sincronizat cu o versiune de Psysonic care a suportat șabloane personalizate.',
migrateFilesToRename: 'fișiere vor fi redenumite',
migrateUnchanged: '{{n}} fișiere sunt deja în calea corectă',
migrateCollisions: '{{n}} fișiere nu au putut fi redenumite automat (mai multe piese sunt mapate către aceași țintă). Ele vor fi lăsate neatinse — următoarea sincronizare le re-descarcă în locația corectă.',
migratePreviewNote: 'Șablonul vechi: {{tpl}}',
migrateExecuting: 'Se redenumesc fișierele…',
migrateSuccess: '{{n}} fișiere redenumite cu succes',
migrateFailed: '{{n}} redenumiri au eșuat',
migrateShowErrors: 'Arată erorile',
migrateStart: 'Începe redenumirea',
onDevice: 'Manager de dispozitive',
addSources: 'Adaugă…',
colName: 'Nume',
colType: 'Tip',
colStatus: 'Status',
syncResult: '{{done}} transferate, {{skipped}} deja la zi ({{total}} total)',
deleteFromDevice: 'Marchează pentru ștergere ({{count}})',
confirmDelete: 'Șterge {{count}} element(e) din dispozitiv: {{names}}?',
deleteComplete: '{{count}} element(e) șterse din dispozitiv.',
manifestImported: '{{count}} surse importate din manifestul dispozitivului.',
selectedSources: 'Sursele selectate',
noSourcesSelected: 'Nicio sursă selectată. Apasă elementele din browser pentru a le adăuga.',
clearAll: 'Golește tot',
tabPlaylists: 'Playlisturi',
tabAlbums: 'Albume',
tabArtists: 'Artiști',
searchPlaceholder: 'Caută…',
syncButton: 'Sincronizează la Dispozitiv',
actionTransfer: 'Transferă la Dispozitiv',
actionDelete: 'Șterge din Dispozitiv',
actionApplyAll: 'Aplică toate schimbările',
cancel: 'Anulează',
noTargetDir: 'Alege un folder țintă mai întâi.',
noSources: 'Alege cel puțin o sursă.',
noTracks: 'Nicio piesă găsită în sursele selectate.',
fetchError: 'Nu s-a reușit preluarea pieselor de pe server.',
syncComplete: 'Sincronizare completă.',
dismiss: 'Îndepărtează',
cancelSync: 'Anulează',
syncCancelled: 'Sincronizare anulată ({{done}} / {{total}} transferate).',
statusSynced: 'Sincronizat',
statusPending: 'În așteptare',
statusDeletion: 'Ștergere',
markForDeletion: 'Marchează pentru Ștergere',
undoDeletion: 'Anulează ștergerea',
removeSource: 'Elimină',
syncInBackground: 'Sincronizare pornită în fundal — poți naviga în alte părți.',
syncInProgress: '{{done}} / {{total}} piese…',
scanningDevice: 'Se scanează dispozitivul…',
syncSummary: 'Sumar sincronizare',
calculating: 'Se calculează încărcătura necesară…',
filesToAdd: 'Fișiere de Adăugat:',
filesToDelete: 'Fișiere de Șterse:',
netChange: 'Schimbarea netă:',
availableSpace: 'Spațiu pe Disc disponibil:',
spaceWarning: 'Alertă: Dispozitivul țintă nu are destul spațiu raportat.',
proceed: 'Continuă cu Sincronizarea',
notEnoughSpace: 'Nu s-a detectat destul spațiu fizic pe disc!',
liveSearch: 'Live',
randomAlbumsLabel: 'Albume aleatorii',
};
+9
View File
@@ -0,0 +1,9 @@
export const entityRating = {
albumShort: 'Rating album',
artistShort: 'Rating artist',
albumAriaLabel: 'Rating album',
artistAriaLabel: 'Rating artist',
selectedArtistsRatingAriaLabel: 'Rating în stele pentru {{count}} artiști selectați',
selectedAlbumsRatingAriaLabel: 'Rating în stele pentru {{count}} albume selectate ',
saveFailed: 'Nu s-a putut salva rating-ul.',
};
+19
View File
@@ -0,0 +1,19 @@
export const favorites = {
title: 'Favorite',
empty: "Nu ai salvat nimic la favorite încă.",
artists: 'Artiști',
albums: 'Albume',
songs: 'Piese',
enqueueAll: 'Adaugă tot la coadă',
playAll: 'Redă tot',
removeSong: 'Șterge de la favorite',
stations: 'Stații Radio',
showingFiltered: 'Se afișează {{filtered}} din {{total}} ({{artist}})',
showingCount: 'Se afișează {{filtered}} din {{total}}',
clearArtistFilter: 'Șterge filtrul de artist',
noFilterResults: 'Niciun rezultat cu filtrele selectate.',
allArtists: 'Toți Artiștii',
topArtists: 'Top Artiști din Favorite',
topArtistsSongCount_one: '{{count}} piesă',
topArtistsSongCount_other: '{{count}} piese',
};
+4
View File
@@ -0,0 +1,4 @@
export const folderBrowser = {
empty: 'Folder gol',
error: 'Nu s-a putut încărca',
};
+12
View File
@@ -0,0 +1,12 @@
export const genres = {
title: 'Genuri',
genreCount: 'Genuri',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albume',
loading: 'Se încarcă genuri…',
empty: 'Niciun gen găsit.',
albumsLoading: 'Se încarcă albume…',
albumsEmpty: 'Niciun album găsit pentru acest gen.',
loadMore: 'Încarcă mai mult',
back: 'Înapoi',
};
+115
View File
@@ -0,0 +1,115 @@
export const help = {
title: 'Ajutor',
searchPlaceholder: 'Caută Ajutor…',
noResults: 'Niciun topic corespunzător. Încearcă un alt termen de căutare.',
// ── Section 1: Getting Started ─────────────────────────────────────────
s1: 'Pentru început',
q1: 'Ce servere sunt compatibile?',
a1: 'Psysonic este construit în principal pentru Navidrome și este complet compatibil cu serverele Subsonic - Gonic, Airsonic, LMS și alte servere pe bază de API Subsonic de asemenea funcționează. Unele funcționalități avansate (ratinguri, playlisturi inteligente, distribuirea magic strings, managementul utilizatorilor) necesită Navidrome',
q2: 'Cum adaug un server?',
a2: 'Setări → Servere → Adaugă Server. Introdu URL-ul serverului (ex. 192.168.1.100:4533), numele de utilizator, și parola. Psysonic verifică conexiunea înainte de a salva — nimic nu este stocat dacă conexiunea eșuează. Poți adăuga și schimba oricâte servere dorești în bara de sus oricând; doar unul este activ deodată',
q3: 'Tur rapid al UI?',
a3: 'Bara laterală (stâng) pentru navigare, Scena Principală / paginile din mijloc, Bara de Redare jos, și Panoul Cozii în dreapta (comută din bara de dreapta-sus lângă indicatorul Se Redă Acum). Bara de căutare de sus caută în toată librăria; "Se Redă Acum" arată ce ascultă alți utilizatori de pe același server Navidrome acum',
// ── Section 2: Playback & Queue ────────────────────────────────────────
s2: 'Redare & Coadă',
q4: 'Cum folosesc coada?',
a4: 'Deschide Panoul Cozii din bara din dreapta-sus. Trage rândurile pentru a le reordona, lasă-le afară pentru a înlătura, sau folosește bara cozii pentru a amesteca, salva coada ca playlist, sau sări la o piesă.Trage rândurile din panou și lasă-le altundeva pentru a le transfera.',
q5: 'Gapless vs Crossfade - care este diferența?',
a5: 'Gapless preîncarcă următoarea piesă pentru a elimina liniștea dintre piese (cel mai bine pentru albume live și mixuri DJ). Crossfade estompează piesa curentă în timp ce următoarea este introdusă gradual pe parcursul a 1-10 s (cel mai bun pentru mixuri amestecate). Ele sunt opțiuni mutual exclusive - pornirea uneia o dezactivează pe cealaltă. Configurează ambele în Setări → Audio.',
q6: 'Ce este Coada Infinită?',
a6: 'Când coada se golește și Repetă este oprit, Psysonic adaugă în liniște piese aleatorii din librăria ta așa că redarea nu se oprește niciodată. Piesele auto-adăugate apar mai jos "— Adăugat automat —" divizate în coadă. Comutați-l cu iconița infinit din antetul cozii. Poți de asemenea restricționa piesele auto-adăugate către un gen specific în Setări → Coadă.',
q7: 'Selecție multiplă și interval Shift-clic?',
a7: 'Activează "Selectează" pe Albume / Lansări Noi / Albume Aleatorii / Playlisturi. Apasă pe un element pentru a-l comuta, apoi ține Shift și apasă pe alt element pentru a selecta totul dintre elementele alese în ordinea vizibilă. Shift-clicurile se extind de la cel mai recent element selectat. Bara de deasupra grilei oferă acțiuni în masă (adaugă în coadă, descarcă, șterge, etc.).',
q8: 'Scurtături ale tastaturii și taste globale?',
a8: 'Taste implicite în aplicație: Space = Redă / Pauză, Esc = închide ecranul complet / modale, F1 = cheat-sheet scurtături. În Setări → Input poți reconfigura fiecare acțiune din aplicație (chiar și combinații cum ar fi Ctrl+Shift+P) și seta scurtături globale la nivel de sistem care funcționează chiar și când Psysonic este în fundal sau minimizat. Tastele media (Redă/Pauză, Următoarea, Anterioara) funcționează pe toate platformele.',
// ── Section 3: Audio Tools ─────────────────────────────────────────────
s3: 'Unelte Audio',
q9: 'Moduri Replay Gain?',
a9: 'Setări → Audio → Replay Gain. Modul piesă normalizează fiecare piesă la un nivel țintă. Modul album păstrează curba de zgomot din album. Modul auto alege Piesă sau Album verificând dacă coada este formată dintr-un singur album. Piesele fără etichete Replay Gain ajung la o valoare preamp configurabilă',
q10: 'Ce este Normalizarea Zgomotului Inteligentă (LUFS)?',
a10: 'O alternativă modernă la Replay Gain în Setări → Audio. Psysonic analizează fiecare piesă la LUFS / EBU R128 și stochează rezultatul, ca volumul să fie consistent pe întreaga librărie - incluzând piesele fără etichete Replay Gain. Analiza cold-cache rulează în fundal și folosește în jur de 35-40 % CPU pentru ~1 minut, apoi coboară la 0. Setează nivelul de zgomot țintă (implicit -10 LUFS) o dată',
q11: 'EQ și AutoEQ?',
a11: 'Un EQ parametric pe 10 benzi se află în Setări → Audio → Egalizator cu benzi manuale și presetări. AutoEQ de lângă trage un profil de măsurătoare de corecție pentru modelul tău de căști din baza de date AutoEQ și o aplică pe benzi automat - alege-ți căștile și EQ-ul se aranjează la curba corectă',
q12: 'Cum schimb dispozitivul audio de ieșire?',
a12: 'Setări → Audio → Dispozitiv de Ieșire. Psysonic listează fiecare ieșire posibilă și se schimbă instant când alegi una. Butonul de reîmprospătare rescanează dispozitivele care au fost conectare după pornire. Numele Linux ALSA ca "sysdefault" sunt auto-curățate pentru lizibilitate',
q13: 'Ce este Hot Cache?',
a13: 'Hot Cache preîncarcă piesa curentă plus următoarele în RAM și pe disc pentru ca redarea să înceapă fără încărcare - folositor mai ales pe servere încete / îndepărtate. Piesele sunt eliminate din memorie când limita este atinsă. Configurează limita și întârzierea adăugării (pentru ca săriturile rapide să nu adauge piesele) în Setări → Audio.',
// ── Section 4: Library & Discovery ─────────────────────────────────────
s4: 'Librărie și Descoperire',
q14: 'Cum funcționează ratingurile și Sari-peste-1★?',
a14: 'Psysonic suportă ratinguri 15 stele prin OpenSubsonic (necesită Navidrome ≥ 0.53). Evaluează piese în lista de piese, în meniul clic-dreapta, sau în bara redării sub numele artistului; albumele pe pagina de album; artiștii pe pagina de artist. Sari-peste-1★ (Setări → Librărie → Ratinguri) auto-asignează 1 stea după un număr configurabil de sărituri consecutive. În același panou poți seta un filtru de rating minim pentru Mixul Aleatoriu sau alte mixuri generate',
q15: 'Cum răsfoiesc - Foldere, Genuri, Piese?',
a15: 'Browserul de foldere (bara laterală) parcurge prin directorul muzică al serverului tău folosind o schemă Miller-column - apasă pe un folder pentru a intra în el, apasă pe iconița de redare a unei piese pentru a o reda / adăuga în coadă. Genurile folosesc o vizualizare etichetă-nor scalată de numărul de piese; apasă pe un gen pentru a-l deschide. Piese este un hub librărie plată cu o listă virtuală cu coloane sortabile și search live.',
q16: 'Căutare și Căutare Avansată?',
a16: 'Bara de căutare rulează o căutare live rapidă prin artiști, albume și piese pe măsură ce scrii. Deschide Căutarea Avansată (bara laterală) pentru un afișaj mai amănunțit: filtrează după an, gen, rating, format, canale, sample rate, BPM, stare, și combină criterii. Clic-dreapta pe orice rezultat pentru același meniu de context folosit orinde altundeva în aplicație.',
q17: 'Ce sunt Mixurile (Aleatoriu / Gen / Super Gen / Norocos)?',
a17: 'Mixul Aleatoriu construiește un playlist din piese aleatorii din librăria ta; Filtrul Cuvinte Cheie exclude cărți audio, comedie, etc. substringuri după gen / titlu / album. Mixul Super Gen îți grupează librăria în stiluir largi (Rock, Metal, Electronic, Jazz, Clasic…) și construiește un mix focusat din unul. Mixul Norocos folosește istoricul ascultării tale, ratinguri și piese similare AudioMuse-AI pentru a asambla un playlist instant cu un clic.',
q18: 'Pagină de statistici?',
a18: 'Statistici (bara laterală) arată top artiști, top albume, top piese, detalii genuri, ascultarea în timp, și per-librărie când ai mai mult de un folder de muzică configurat. Mai multe vizualizări sunt exportabile ca o imagine card.',
q19: 'Cum descarc un album ca ZIP?',
a19: 'Pagină album → "Descarcă (ZIP)". Serverul compresează albumul prima oară — pentru albume mari sau necompresate (FLAC / WAV) bara de progres apare doar după ce arhivarea este completată și începe transferul. Acest lucru este normal.',
// ── Section 5: Lyrics ──────────────────────────────────────────────────
s5: 'Versuri',
q20: 'De unde vin versurile?',
a20: 'Trei surse, configurabile în Setări → Versuri: serverul tău Navidrome (versuri încorporate/ OpenSubsonic), LRCLIB (versuri contribuite de comunitate sincronizate), și NetEase Cloud Music (catalog larg Chinez și internațional). Poți porni sau dezactiva fiecare sursă și reordona prioritatea lor trăgând de ele.',
q21: 'Cum văd versurile în timpul redării?',
a21: 'Apasă pe iconița microfon din bara redării pentru a deschide tab-ul Versuri în panoul Cozii. Versurile sincronizate se auto-derulează și suportă clic-pentru-căutare; versurile pur text derulează ca un bloc static. Comutează Playerul pe Ecran Complet din arta barei de redare pentru o vedere imersivă de versuri cu fundal mesh-blob.',
// ── Section 6: Sharing & Social ────────────────────────────────────────
s6: 'Distribuire & Social',
q22: 'Ce sunt Stringurile Magice?',
a22: 'Stringurile Magice sunt jetoane copy-paste care distribuie informații între utilizatorii Psysonic fără niciun server terț. Stringurile Invitație-Server permit un prieten în Navidrome-ul tău cu o lipire; Stringurile Album / Artist / Coada Magică deschid același album / artist / coadă în Psysonic-ul instalat al recipientului. Generează-le din meniul de distribuire, lipește-le în bara de căutare pentru a le folosi.',
q23: 'Ce este Orbit?',
a23: 'Orbit este o ascultare-împreună sincronizată: o gazdă redă o piesă, fiecare oaspete o aude în sincron, și oaspeții pot sugera piese pe care gazda să le accepte în coadă. Începe o sesiune din butonul Orbit de sus, distribuie link-ul de invitație, și alții pot intra oricând din orice instalare Psysonic. Gazda controlează redarea (săriri, căutări, coadă) — oaspeții primesc o vizionare în timp real și o cutie de sugestii. Sesiunile sunt efemere și se termină când sunt închise de gazdă.',
q24: 'Ce este dropdown-ul Se Redă Acum?',
a24: 'Iconița de difuzare din antetul din dreapta-sus arată ce ascultă alți utilizatori din serverul tău Navidrome, reactualizat la fiecare 10 secunde. Intrarea ta dispare în momentul în care pui pauză. Acest lucru este per-server, deci utilizatorii activi de pe alte servere nu sunt afișați.',
// ── Section 7: Personalization ─────────────────────────────────────────
s7: 'Personalizare',
q25: 'Teme și Programatorul de Teme?',
a25: 'Setări → Aparență → Temă alege din 60+ teme din 8 grupe (Psysonic, Mediaplayer, Sisteme de Operare, Jocuri, Filme, Seriale, Social Media, Clasice Open Source — Catppuccin / Nord / Gruvbox / Nightfox / Dracula). Auto-comutatorul de Teme îți permite să alegi teme zi + noapte cu timpuri de începere prin care Psysonic să comute automat.',
q26: 'Pot customiza paginile Bara laterală, Acasă și Artist?',
a26: 'Da — Setări → Personalizare. Customizatorul bării laterale îți permite tragerea elementelor de navigare în ordinea pe care o dorești și ascunde cele pe care nu le folosești. Customizatorul Acasă comută fiecare șină din Scena Principală (Promovat, Recent, Descoperă, Redat Recent, Evaluate…). Customizatorul paginii de Artist reordonează secțiunile (Top Piese, Albume, Singleuri, Compilații, Artiști Similari, etc.) și te lasă să ascunzi cele la care nu te uiți niciodată.',
q27: 'Ce este Mini Playerul?',
a27: 'O fereastră mică plutitoare cu arta coperții, controale de transport și o coadă compactă. Deschide-o din iconița mini-playerului barei de redare sau prin scurtătura ei de tastatură. Fereastra ține minte poziția ei și mărimea între sesiuni. Pe Windows webview-ul miniatură este pre-creat la pornire pentru ca deschiderea să fie instantanee; Linux / macOS aleg asta prin Setări → Aparență → Preîncarcă mini player.',
q28: 'Ce este Bara de Redare Plutitoare?',
a28: 'Un stil de bară de redare opțional (Setări → Aparență) care se detașează de marginea de jos cu un fundal tematic, margine accentuată, artă de album rotunjită și o secțiune de volum centrată. Folositor pe monitoare înalte sau teme compacte.',
q29: 'Previzualizare piesă pe hover?',
a29: 'Hover peste un rând de piesă, clic pe butonul mic de previzualizare de pe copertă, sau declanșează previzualizarea din meniul clic-dreapta — Psysonic redă primele ~15 s prin același motor audio Rust ca normalizarea zgomotului să fie aplicată. Folositor pentru filtrarea unui album pe care nu l-ai mai auzit.',
q30: 'Cronometru de somn?',
a30: 'Apasă iconița lună în bara de redare pentru a deschide cronometrul de somn. Alege o durată (sau "sfârșitul piesei curente") și Psysonic estompează și pune pe pauză la final. Butonul arată un inel circular și un cronometru în buton cât timp cronometrul rulează.',
q31: 'Scalare UI, font, stil bară de căutare?',
a31: 'Setări → Aparență — Scară Interfață (80125 % fără a afecta mărimea fontului de sistem), Font (10 fonturi UI incluzând IBM Plex Mono, Fira Code, Geist, Golos Text…), Stil Bară de Căutare (Formă de undă analizată / pseudoundă deterministică / Linie & Punct / Bară / Bară Groasă / Segmentat / Strălucire Neon / Pulse Wave / Urmă de Particule / Lichid / Bandă Retro).',
// ── Section 8: Power User ──────────────────────────────────────────────
s8: 'Utilizatori Avansați',
q32: 'Controale player din CLI?',
a32: 'Binarul Psysonic este dublat ca o telecomandă. Exemple: psysonic --player play / pause / next / prev, --player volume 75, --player seek 15, --player shuffle, --player repeat off|all|one, --player rating 1-5. Schimbă servere, dispozitive audio, librării; declanșează Mixul Instant; caută artiști / albume / piese. Rulează psysonic --player --help pentru lista completă. Completările Shell pentru bash și zsh sunt disponibile via completări psysonic.',
q33: 'Playlisturi Inteligente (Navidrome)?',
a33: 'Playlisturile Inteligente sunt playlisturi dinamice pe partea Navidrome definite de reguli (gen = Rock ȘI an > 2020, etc.). Pagina de Playlisturi în Psysonic îți permite crearea, editarea și ștergerea lor cu un editor de reguli vizual - Psysonic comunică cu API-ul nativ Navidrome pentru asta. Ele se comportă ca playlisturi normale în restul aplicației și se actualizează pe măsură ce librăria ta se schimbă.',
q34: 'Backup și restaurarea setărilor?',
a34: 'Setări → Stocare → Backup & Restaurare exportă profilele serverului, temele, scurtăturile de tastatură și alte setări într-un singur fișier JSON. Importă fișierul pe alt calculator sau după o reinstalare pentru a restaura totul deodată. Parolele serverului sunt incluse — ține fișierul privat.',
q35: 'Unde pot vedea toate licențele open-source?',
a35: 'Setări → Sistem → Licențe Open Source. Toată lista de dependințe (cargo crates și npm packages) sunt livrate în build cu textele licențelor adunate. Apasă pe un element pentru textul complet; blocul evidențiat de sus menționează toate librăriile recunoscubile de utilizator (Tauri, React, rodio, symphonia, etc.).',
// ── Section 9: Offline & Sync ──────────────────────────────────────────
s9: 'Offline & Sincronizare',
q36: 'Modul Offline — adăugarea albumelor și playlisturilor în cache?',
a36: 'Deschide orice album sau playlist și apasă pe iconița de download din antet — Psysonic descarcă fiecare piesă local pentru a putea fi redată fără niciun apel la rețea. Pagina Librărie Offline (bara laterală) listează tot ce este în cache, afișează progresul în desfășurare, și îți permite să elimini intrări cu iconița de gunoi (care apare doar după ce descărcarea este completă).',
q37: 'Limită de stocare Offline?',
a37: 'Setări → Librărie → Offline îți permite să setezi o mărime maximă a cache. Când limita este atinsă, butonul de descărcare din pagina albumului arată un banner de avertisment. Eliberează spațiu prin eliminarea albumelor sau playlisturilor din pagina Librărie Offline.',
q38: 'Sincronizare Dispozitiv — copiază muzică la USB / SD?',
a38: 'Sincronizare Dispozitiv (bara laterală) copiază albume, playlisturi sau artiști compleți pe un dispozitiv extern pentru ascultare offline. Alege un folder țintă, sursele din tab-urile browser, apasă "Transfer la Dispozitiv". Psysonic scrie un manifest (psysonic-sync.json) pentru ca să știe ce fișiere sunt deja acolo chiar dacă deschizi Sincronizare Dispozitiv pe un alt sistem de operare cu alt șablon de nume de fișiere. Șabloanele suportă {artist} / {album} / {title} / {track_number} / {disc_number} / {year} jetoane cu / fără separatoare de folder.',
// ── Section 10: Integrations & Troubleshooting ─────────────────────────
s10: 'Integrări & Depanare',
q39: 'Scrobbling Last.fm?',
a39: 'Setări → Integrări → Last.fm. Conectează-ți contul o singură dată și Psysonic efectuează scrobble direct către Last.fm — nicio configurare Navidrome necesară. Un scrobble este trimis după ce ai ascultat 50 % dintr-o piesă. Pingurile se redă acum sunt trimise la început.',
q40: 'Prezență Discord Rich?',
a40: 'Setări → Integrări → Discord arată piesa curentă în ascultare pe profilul tău de Discord. Alege între iconița aplicației, arta de copertă a serverului (prin getAlbumInfo2 — necesită un server accesibil public), sau coperți Apple Music. Customizează stringurile de afișare (detalii, stadiu, tooltip) cu jetoane de șablon.',
q41: 'Date turneu Bandsintown?',
a41: 'Activează în Setări → Integrări → Info Se Redă Acum. Tab-ul Se Redă Acum pe pagina Se Redă Acum va afișa apoi datele turneurilor care urmează pentru artisul redat curent prin API-ul widget Bandsintown. Oprit implicit — nicio cerere nu este făcută până când nu o pornești.',
q42: 'Radio Internet — redarea streamurilor live?',
a42: 'Radio Internet (bara laterală) redă orice stream live stocat pe serverul tău Navidrome (adaugă stații prin UI admin Navidrome). Redarea rulează prin motorul audio HTML5 — cele mai multe setări EQ / Replay Gain / Zgomot nu se aplică la radio, dar metadata ICY (numele piesei curente) este arătat. Suportă MP3, AAC, OGG Vorbis și cele mai multe streamuri HLS; suportul codec depinde de platformă.',
q43: 'Testul conexiunii eșuează — ce fac acum?',
a43: 'Verifică de două ori URL-ul incluzând portul (ex. http://192.168.1.100:4533). Pe o rețea locală http:// de obicei funcționează unde https:// nu o face (niciun certificat). Asigură-te că niciun firewall nu blochează portul și că numele de utilizator și parola sunt corecte. Dacă serverul tău este în spatele unui reverse proxy, încearcă URL-ul direct prima oară pentru a izola cauza.',
q44: 'Arta copertei și imaginile artiștilor se încarcă încet.',
a44: 'Imaginile sunt preluate de pe serverul tău la prima vedere și apoi stocate în cache pentru 30 de zile. Dacă stocarea serverului tău este înceată, prima vizită către o pagină poate dura un moment; vizitele consecutive sunt instantanee. Hot Cache de asemenea ajută pentru piese dar nu pentru cache-ul imaginii.',
q45: 'Probleme pe Linux - ecran negru sau niciun audio?',
a45: 'Aceasta este de obicei o problemă de driver GPU/EGL în WebKitGTK. Pornește cu GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. Pachetul AUR și installer-ele oficiale .deb/.rpm fac asta automat.',
};
+6
View File
@@ -0,0 +1,6 @@
export const hero = {
eyebrow: 'Album Promovat',
playAlbum: 'Redă Album',
enqueue: 'Pune în coadă',
enqueueTooltip: 'Adaugă întregul album în coadă',
};
+19
View File
@@ -0,0 +1,19 @@
export const home = {
hero: 'Promovat',
starred: 'Evaluate',
recent: 'Adăugate Recent',
mostPlayed: 'Cele mai Redate',
recentlyPlayed: 'Redate Recent',
losslessAlbums: 'Albume Lossless',
discover: 'Descoperă',
discoverSongs: 'Descoperă Piese',
loadMore: 'Încarcă mai Mult',
discoverMore: 'Descoperă mai Mult',
discoverArtists: 'Descoperă Artiști',
discoverArtistsMore: 'Toți Artiștii',
becauseYouLike: 'Deoarece ai ascultat…',
becauseYouLikeFor: 'Deoarece ai ascultat {{artist}}',
similarTo: 'Similar cu {{artist}}',
becauseYouLikeTracks_one: '{{count}} piesă',
becauseYouLikeTracks_other: '{{count}} piese'
};
+91
View File
@@ -0,0 +1,91 @@
import { sidebar } from './sidebar';
import { home } from './home';
import { hero } from './hero';
import { search } from './search';
import { nowPlaying } from './nowPlaying';
import { contextMenu } from './contextMenu';
import { sharePaste } from './sharePaste';
import { albumDetail } from './albumDetail';
import { entityRating } from './entityRating';
import { artistDetail } from './artistDetail';
import { favorites } from './favorites';
import { randomLanding } from './randomLanding';
import { randomAlbums } from './randomAlbums';
import { genres } from './genres';
import { randomMix } from './randomMix';
import { luckyMix } from './luckyMix';
import { albums } from './albums';
import { tracks } from './tracks';
import { artists } from './artists';
import { composers } from './composers';
import { composerDetail } from './composerDetail';
import { login } from './login';
import { connection } from './connection';
import { common } from './common';
import { settings } from './settings';
import { changelog } from './changelog';
import { whatsNew } from './whatsNew';
import { help } from './help';
import { queue } from './queue';
import { miniPlayer } from './miniPlayer';
import { statistics } from './statistics';
import { player } from './player';
import { nowPlayingInfo } from './nowPlayingInfo';
import { songInfo } from './songInfo';
import { playlists } from './playlists';
import { smartPlaylists } from './smartPlaylists';
import { mostPlayed } from './mostPlayed';
import { losslessAlbums } from './losslessAlbums';
import { radio } from './radio';
import { folderBrowser } from './folderBrowser';
import { deviceSync } from './deviceSync';
import { orbit } from './orbit';
import { tray } from './tray';
import { licenses } from './licenses';
export const roTranslation = {
sidebar,
home,
hero,
search,
nowPlaying,
contextMenu,
sharePaste,
albumDetail,
entityRating,
artistDetail,
favorites,
randomLanding,
randomAlbums,
genres,
randomMix,
luckyMix,
albums,
tracks,
artists,
composers,
composerDetail,
login,
connection,
common,
settings,
changelog,
whatsNew,
help,
queue,
miniPlayer,
statistics,
player,
nowPlayingInfo,
songInfo,
playlists,
smartPlaylists,
mostPlayed,
losslessAlbums,
radio,
folderBrowser,
deviceSync,
orbit,
tray,
licenses,
};
+13
View File
@@ -0,0 +1,13 @@
export const licenses = {
title: 'Licențe Open Source',
intro: 'Psysonic este construit pe software open-source. Lista de mai jos arată fiecare dependință a aplicației, cu versiunea, licența și textul complet al licenței ei.',
highlights: 'Dependințe cheie',
searchPlaceholder: 'Caută după nume, versiune sau licență…',
noResults: 'Nicio potrivire.',
loading: 'Se încarcă licențele…',
loadError: 'Nu s-au putut încărca datele licenței.',
noLicenseText: 'Niciun text de licență inclus pentru această dependință.',
viewSource: 'Vezi sursa',
totalLine: '{{total}} dependințe — {{cargo}} cargo, {{npm}} npm',
generatedAt: 'Ultima dată a generării {{date}}',
};
+22
View File
@@ -0,0 +1,22 @@
export const login = {
subtitle: 'Playerul tău Navidrome Desktop',
serverName: 'Numele Serverului (opțional)',
serverNamePlaceholder: 'Navidrome-ul meu',
serverUrl: 'URL Server',
serverUrlPlaceholder: '192.168.1.100:4533 sau https://music.example.com',
username: 'Nume utilizator',
usernamePlaceholder: 'admin',
password: 'Parolă',
showPassword: 'Arată parola',
hidePassword: 'Ascunde parola',
connect: 'Conectează-te',
connecting: 'Se conectează…',
connected: 'Conectat!',
error: 'Conexiunea a eșuat verifică detaliile.',
urlRequired: 'Introdu un server URL.',
savedServers: 'Servere salvate',
addNew: 'Sau adaugă un nou server',
orMagicString: 'Sau un string magic',
magicStringPlaceholder: 'Lipește un string distribuit (psysonic1-…)',
magicStringInvalid: 'String magic invalid sau ilizibil.',
};
+5
View File
@@ -0,0 +1,5 @@
export const losslessAlbums = {
empty: 'Niciun album lossless în această librărie încă.',
unsupported: 'Acest server nu expune metadata necesară pentru a găsi albumele lossless.',
slowFetchHint: 'Se încarcă mai încet decât alte pagini de album — Psysonic parcurge prin tot catalogul pieselor după calitate.',
};
+6
View File
@@ -0,0 +1,6 @@
export const luckyMix = {
done: 'Mix Norocos pregătit: {{count}} piese',
failed: 'Nu s-a putut crea Mixul Norocos. Încercați din nou.',
unavailable: 'Mixul Norocos nu este disponibil pentru acest server.',
cancelTooltip: 'Anulează crearea Mixului Norocos',
};
+9
View File
@@ -0,0 +1,9 @@
export const miniPlayer = {
showQueue: 'Arată coada',
hideQueue: 'Ascunde coada',
pinOnTop: 'Fixează sus',
pinOff: 'Anulează fixarea',
openMainWindow: 'Deschide fereastra principală',
close: 'Închide',
emptyQueue: 'Coada este goală',
};
+13
View File
@@ -0,0 +1,13 @@
export const mostPlayed = {
title: 'Cele mai Redate',
topArtists: 'Top Artiști',
topAlbums: 'Top Albume',
plays: '{{n}} redări',
sortMost: 'Cele mai multe redări primele',
sortLeast: 'Cele mai puține redări primele',
loadMore: 'Încarcă mai multe albume',
noData: 'Nu există date de redare încă. Începe ascultarea!',
noArtists: 'Toți artiștii sunt filtrați.',
filterCompilations: 'Ascunde artiștii din compilații (Artiști variați, Coloane sonore, etc.)',
filterCompilationsShort: 'Ascunde compilațiile',
};
+47
View File
@@ -0,0 +1,47 @@
export const nowPlaying = {
tooltip: 'Cine ascultă?',
title: 'Cine ascultă?',
loading: 'Se încarcă…',
nobody: 'Nimeni nu ascultă momentan.',
minutesAgo: 'acum {{n}}m',
nothingPlaying: 'Nu se redă nimic încă. Începe o piesă!',
aboutArtist: 'Despre Artist',
fromAlbum: 'Din acest Album',
viewAlbum: 'Vezi Albumul',
goToArtist: 'Către Artist',
readMore: 'Mai mult',
showLess: 'Mai puțin',
genreInfo: 'Gen',
trackInfo: 'Informații despre Piesă',
topSongs: 'Cele mai redate din acest artist',
topSongsCredit: 'Top piese de la {{name}}',
trackPosition: 'Piesa {{pos}}',
playsCount_one: '{{count}} redare',
playsCount_other: '{{count}} redări',
releasedYearsAgo_one: 'acum {{count}} an',
releasedYearsAgo_other: 'acum {{count}} ani',
discography: 'Discografie',
lastfmStats: 'Statistici Last.fm',
thisTrack: 'Această piesă',
thisArtist: 'Acest artist',
listeners: 'ascultători',
scrobbles: 'scrobble-uri',
yourScrobbles: 'de tine',
listenersN: '{{n}} ascultători',
scrobblesN: '{{n}} scrobble-uri',
playsByYouN: 'redate {{n}}× de tine',
openTrackOnLastfm: 'Piesă în Last.fm',
openArtistOnLastfm: 'Artist în Last.fm',
rgTrackTooltip: 'ReplayGain (piesă)',
rgAlbumTooltip: 'ReplayGain (album)',
rgAutoTooltip: 'ReplayGain (auto)',
showMoreTracks: 'Arată încă {{count}}',
showLessTracks: 'Arată mai puțin',
hideCard: 'Ascunde cardul',
layoutMenu: 'Layout',
visibleCards: 'Carduri vizibile',
hiddenCards: 'Carduri ascunse',
noHiddenCards: 'Niciun card ascuns',
resetLayout: 'Resetează layout-ul',
emptyColumn: 'Lasă cardurile aici',
};
+24
View File
@@ -0,0 +1,24 @@
export const nowPlayingInfo = {
tab: 'Informații',
empty: 'Redă ceva pentru a vedea informații',
artist: 'Artist',
songInfo: 'Informații piesă',
onTour: 'În turneu',
noTourEvents: 'Niciun show următor',
tourLoading: 'Se încarcă…',
poweredByBandsintown: 'Date turneu prin Bandsintown',
bioReadMore: 'Citește mai multe',
bioReadLess: 'Arată mai puțin',
showMoreTours_one: 'Arată cu {{count}} mai mult',
showMoreTours_other: 'Arată cu {{count}} mai mult',
showLessTours: 'Arată mai puțin',
enableBandsintownPrompt: 'Vezi date următoare de turnee?',
enableBandsintownPromptDesc: 'Opțional. Încarcă concertele pentru artistul curent prin API-ul public Bandsintown.',
enableBandsintownPrivacy: 'Când este pornit, numele artistului piesei curente redate este trimis către API-ul Bandsintown pentru a prelua datele turneelor. Nimic din datele personale sau ale contului nu părăsesc dispozitivul.',
enableBandsintownAction: 'Pornește',
role: {
artist: 'Artist',
albumArtist: 'Artist album',
composer: 'Compozitor',
},
};
+200
View File
@@ -0,0 +1,200 @@
export const orbit = {
triggerLabel: 'Orbit',
triggerTooltip: 'Pornește sau intră în o sesiune de ascultare distribuită',
launchCreate: 'Crează o sesiune',
launchJoin: 'Intră într-o sesiune',
launchHelp: 'Cum funcționează asta?',
launchHelpSoon: 'În curând',
joinModalTitle: 'Intră într-o sesiune Orbit',
joinModalSub: 'Lipește link-ul de invitație pe care organizatorul ți l-a trimis.',
joinModalLinkLabel: 'Link-ul de invitație',
joinModalLinkPlaceholder: 'psysonic2-…',
joinModalLinkHelper: 'Funcționează cu orice link valid Orbit. Trebuie să arate spre serverul în care ești conectat acum.',
joinModalPasteTooltip: 'Lipește din clipboard',
joinModalSubmit: 'Intră',
joinModalBusy: 'Se intră…',
joinErrEmpty: 'Lipește un link de invitație.',
joinErrInvalid: 'Asta nu arată ca un link de invitație Orbit.',
closeAria: 'Închide',
heroTitlePrefix: 'Ascultă împreună cu',
heroTitleBrand: 'Orbit',
heroSub: 'Pornește o sesiune — alți utilizatori de pe {{server}} vor asculta deodată și pot sugera piese.',
fallbackServer: 'acest server',
tipLan: "Ești conectat acum printr-o adresă de rețea locală. Invitații din afara rețelei tale nu pot intra — schimbă pe o adresă publică de server în setări înainte de a începe.",
tipRemote: 'Pentru ca oaspeții din afara rețelei să poată intra, serverul tău trebuie să fie accesibil public. Dacă serverul tău este doar intern, schimbă înainte de a începe.',
labelName: 'Numele sesiunii',
namePlaceholder: 'Velvet Orbit',
reshuffleTooltip: 'Nouă sugestie',
reshuffleAria: 'Sugerează un nou nume',
helperName: 'Cum apare sesiunea către oaspeții tăi — păstrează-l sau folosește-l pe al tău.',
labelMax: 'Max oaspeți',
helperMax: "Tu nu ești numărat — se ține cont doar de oaspeții care intră.",
labelLink: 'Link-ul de invitație',
tooltipCopied: 'Copiat',
tooltipCopy: 'Copiază',
ariaCopyLink: 'Copiază link-ul de invitație',
helperLink: 'Trimite acest link către invitații tăi. Ei îl pot lipi oriunde în Psysonic cu Ctrl+V.',
labelClearQueue: 'Golește-mi coada mai întâi',
helperClearQueue: 'Începe sesiunea cu o coadă proaspătă goală. Oprit: piesele pe care le ai deja în coadă rămân și sunt distribuite cu oaspeții.',
btnCancel: 'Anulează',
btnStarting: 'Se începe…',
btnStart: 'Începe Orbit',
btnCopyAndStart: 'Copiază acest link & începe',
errNameRequired: 'Dă un nume sesiunii tale.',
errStartFailed: "Nu s-a putut începe.",
hostLabel: 'Gazdă: {{name}}',
participantsTooltip: 'Participanți',
settingsTooltip: 'Setările sesiunii',
shareTooltip: 'Distribuie link-ul de invitație',
shuffleLabel: 'Coada se re-amestecă în',
catchUpLabel: 'ajunge din urmă',
catchUpTooltip: "Sari către poziția curentă a gazdei",
hostAway: 'Gazdă offline',
hostOnline: 'Gazdă online',
endTooltip: 'Termină sesiunea',
leaveTooltip: 'Părăsește sesiunea',
helpTooltip: 'Cum funcționează Orbit',
diag: {
openTooltip: 'Diagnostice — log-uri evenimente copiabile',
title: 'Diagnostice Orbit',
role: 'Rol',
hostTrack: 'Id piesă gazdă',
hostPos: 'Poziție gazdă',
guestTrack: 'Id-ul piesei mele',
guestPos: 'Id-ul poziției mele',
drift: 'Drift',
stateAge: 'Status vârstă',
eventLog: 'Log-uri evenimente ({{count}})',
copyLabel: 'Copiază',
copyTooltip: 'Copiază log-urile în clipboard',
clearLabel: 'Golește',
clearTooltip: 'Șterge buffer-ul',
empty: 'Niciun eveniment deocamdată — evenimentele apar ca sincronizare Orbit.',
hint: 'Deschide asta înainte de a reproduce o problemă, apoi apasă Copiază și lipește în raportul problemei.',
copied: 'S-au copiat {{count}} linii de eveniment',
copyFailed: 'Nu s-a putut copia în clipboard',
cleared: 'Buffer curățat',
},
helpTitle: 'Cum funcționează Orbit',
helpIntro: 'Orbit transformă Psysonic într-o cameră distribuită de ascultare. O gazdă alege muzica; oaspeții ascultă în sincron și pot sugera piese.',
helpHostOnly: '(gazdă)',
helpSec1Title: 'Ce este Orbit?',
helpSec1Body: "Un mod \"ascultă împreună\" — gazda controlează redarea, oaspeții se alătură. Totul rulează prin playlisturile de pe serverul tău Navidrome; nicio infrastructură externă.",
helpSec2Title: 'Gazdă și oaspeți',
helpSec2Body: 'Gazda controlează redarea (redă / pauză / sari / caută) și decide când sesiunea se termină. Oaspeții urmează redarea gazdei, pot sugera piese, și pot ieși și re-intra oricând. Doar gazda poate da afară sau bana permanent un participant.',
helpSec2WarnHead: 'Important: conturi separate.',
helpSec2WarnBody: "Fiecare participant are nevoie de contul său Navidrome. Dacă gazda și oaspetele se conectează cu același utilizator propunerile lor se ciocnesc și gazda nu va vedea propunerile oaspetului.",
helpSec3Title: 'Pornirea și invitarea',
helpSec3Body: 'Apasă pe butonul "Orbit" → Crează o sesiune → modalul de pornire arată un link de invitație gata de copiat și te lasă opțional să golești coada curentă. Împarte acel link oricum dorești. Cât timp o sesiune este în derulare, butonul de distribuire din bara sesiunii de sus copiază link-ul din nou oricând.',
helpSec4Title: 'Intrare',
helpSec4Body: 'Lipește link-ul de invitație oriunde în Psysonic cu Ctrl+V / Cmd+V — prompt-ul de alăturare se deschide automat. Alternativă: "Orbit" → Intră într-o sesiune → lipește în câmpul prezentat. Dacă link-ul arată către un server pe care ai un cont, Psysonic îl schimbă pentru tine. Când ai mai mult de un cont pe acel server, un alegător mic te va întreba pe care să îl folosești.',
helpSec5Title: 'Sugerarea pieselor',
helpSec5Body: 'În orice listă de piese: dublu-clic pe un rând, sau clic-dreapta → "Adaugă la sesiunea Orbit". Un clic singular arată o sugestie în loc de a pune tot albumul în coada distribuită — asta este intenționat. Acțiunile explicite în masă cum ar fi "Redă Tot" sau "Redă Album" întreabă pentru confirmare mai întâi și după adaugă (niciodată schimbă).',
helpSec6Title: 'Coadă distribuită',
helpSec6Body: "Coada afișează piesele următoare ale gazdei — vizibile către toți. Adăugările în masă care sosesc sunt mereu adăugate, deci sugestiile oaspeților nu sunt pierdute. Auto-amestecarea reordonează coada periodic (configrabil: 1 / 5 / 10 / 15 / 30 min). Dacă redarea se Îndepărtează de gazdă, butonul de \"Ajunge din urmă\" în bara sesiunii sare înapoi către poziția live a gazdei.",
helpSec7Title: 'Aprobări',
helpSec7Body: 'Implicit, sugestiile oaspeților au nevoie de aprobare manuală — apar în banda "Aprobări" în vârful panoului cozii cu butoane de acceptă / respinge. Auto-aprobarea poate fi pornită în setările sesiunii pentru ca toate sugestiile să intre din prima.',
helpSec8Title: 'Participanți și setări',
helpSec8Body: 'Deschide iconița de setări din bara sesiunii pentru cadența amestecării, auto-aprobare, și scurtătura "Amestecă acum". Apasă pe numărul de participanți pentru a vedea cine este conectat — dă afară (se poate reconecta cu link-ul) sau ban (blocat din sesiune). Oaspeții pot vedea de asemenea lista de participanți, doar nu o pot modifica.',
helpSec9Title: 'Sfârșirea sesiunii',
helpSec9Body: "Gazdă X → dialog confirmare → sesiunea se închide pentru toată lumea și playlisturile serverului sunt curățate automat. Oaspete X → oaspetele pleacă, sesiunea continuă să ruleze. Dacă gazda nu răspunde pentru 5 minute oaspetele iese automat cu o notificare; reconectările scurte din acel interval sunt invizibile.",
participantsInviteLabel: 'Link-ul de invitație',
participantsCountLabel: '{{count}} în sesiune',
participantsHost: 'gazdă',
participantsEmpty: 'Niciun oaspete deocamdată',
participantsKickTooltip: 'Înlătură din sesiune',
participantsKickAria: 'Înlătură {{user}}',
participantsRemoveTooltip: 'Înlătură din sesiune',
participantsRemoveAria: 'Înlătură {{user}} din această sesiune',
participantsBanTooltip: 'Banează permanent',
participantsBanAria: 'Banează permanent {{user}}',
participantsMuteTooltip: 'Dezactivează sugestiile',
participantsUnmuteTooltip: 'Permite sugestiile',
participantsMuteAria: 'Dezactivează sugestii de la {{user}}',
participantsUnmuteAria: 'Permite sugestii de la {{user}}',
confirmRemoveTitle: 'Înlătură din sesiune?',
confirmRemoveBody: '{{user}} va fi dat afară din sesiune, dar poate reintra prin link-ul tău de invitație.',
confirmRemoveConfirm: 'Înlătură',
confirmBanTitle: 'Banezi permanent?',
confirmBanBody: '{{user}} va fi înlăturat și blocat din reintrarea în această sesiune. Acest lucru nu poate fi anulat pe durata sesiunii.',
confirmBanConfirm: 'Ban',
confirmCancel: 'Anulează',
confirmJoinTitle: 'Te alături sesiunii Orbit?',
confirmJoinBody: '{{host}} te-a invitat în "{{name}}". Intri în sesiune?',
confirmJoinConfirm: 'Intră',
confirmLeaveTitle: 'Părăsești sesiunea?',
confirmLeaveBody: 'Părăsești "{{name}}"? Poți reintra prin link-ul de invitație al {{host}} oricând.',
confirmLeaveConfirm: 'Pleacă',
confirmEndTitle: 'Termini sesiunea pentru toți?',
confirmEndBody: '"{{name}}" va închide pentru toți participanții. Playlisturile sesiunii sunt curățate automat.',
confirmEndConfirm: 'Termină sesiunea',
invalidLinkTitle: 'Link-ul de invitație nu mai este valid',
invalidLinkBody: 'Această sesiune Orbit nu mai există sau s-a terminat deja. Roagă gazda pentru un link de invitație proaspăt.',
settingsTitle: 'Setările sesiunii',
settingAutoApprove: 'Auto-aprobă sugestiile',
settingAutoApproveHint: "Sugestiile oaspeților intră în coadă instant. Oprit: ele rămân în lista sesiunii pentru ca tu să le revizuiești mai târziu.",
settingAutoShuffle: 'Reamestecare automată',
settingAutoShuffleHint: "Amestecare periodică FisherYates a cozii care urmează. Oprit: ordinea se schimbă doar când o rearanjezi.",
settingShuffleInterval: 'Reamestecă la fiecare',
settingShuffleIntervalHint: 'Cât de des se reamestecă coada în timp ce sesiunea rulează.',
suggestBlockedMuted: 'Gazda te-a oprit din a trimite sugestii pentru această sesiune — sugestiile sunt oprite.',
settingShuffleIntervalValue_one: '{{count}} min',
settingShuffleIntervalValue_other: '{{count}} min',
settingShuffleNow: 'Amestecă acum',
toastSuggested: '{{user}} a sugerat "{{title}}"',
toastSuggestedMany: '{{count}} noi sugestii în coadă',
toastShuffled: 'Coadă amestecată',
toastJoined: 'A intrat în sesiune',
toastLoginFirst: 'Log in before joining a session',
toastSwitchServer: 'Schimbă la {{url}} mai întâi, apoi lipește din nou',
toastNoAccountForServer: "Nu ai acces la {{url}}. Cere o invitație gazdei.",
toastSwitchFailed: "Nu s-a putut schimba la {{url}}",
accountPickerTitle: 'Ce cont?',
accountPickerSub: 'Ai mai mult de un cont pentru {{url}}. Alege unul cu care să intri în sesiune.',
toastJoinFail: "Nu s-a putut alătura sesiunii",
joinErrNotFound: 'Sesiunea nu a fost găsită',
joinErrEnded: 'Sesiunea s-a terminat',
joinErrFull: 'Sesiunea este plină',
joinErrKicked: "Nu poți reintra în această sesiune",
joinErrNoUser: 'Niciun server activ',
joinErrServerError: "Nu s-a putut intra",
ctxAddToSession: 'Adaugă la sesiunea Orbit',
ctxSuggestedToast: 'Sugerat la sesiune',
ctxSuggestFailed: "Nu s-a putut sugera — neintrat",
ctxAddToSessionHost: 'Adaugă la sesiunea Orbit',
ctxAddedHostToast: 'Adăugat la sesiune',
ctxAddHostFailed: "Nu s-a putut adăuga la sesiune",
bulkConfirmTitle: 'Adaugi tot în coada Orbit?',
bulkConfirmBody: "Asta va lăsa {{count}} piese în coada distribuită deodată. Asta este mult pentru toți oaspeții să remarce. Continui?",
bulkConfirmYes: 'Adaugă tot',
bulkConfirmNo: 'Anulează',
guestLive: 'Live',
guestPlaying: 'Se redă acum',
guestPaused: 'Pauză',
guestLoading: 'Se încarcă…',
guestSuggestions: 'Sugestii',
guestUpNext: 'Urmează',
guestUpNextEmpty: 'Nimic în coadă. Deschide meniul de context a unei piese și alege "Adaugă la sesiunea Orbit" pentru a sugera una.',
guestPendingTitle: 'Se așteaptă gazda',
guestPendingHint: 'Sugerat — va apărea în coadă când gazda o va alege.',
approvalTitle: 'Aprobări în așteptare',
approvalFrom: 'Sugerat de{{user}}',
approvalAccept: 'Accept',
approvalDecline: 'Respinge',
guestUpNextMore: '+ {{count}} mai multe în coada gazdei',
guestSubmitter: 'de {{user}}',
queueAddedByHost: 'Adăugat de gazdă',
queueAddedByYou: 'Adăugat de tine',
queueAddedByUser: 'Adăugat de {{user}}',
guestEmpty: 'Nicio sugestie încă. Deschide meniul de context a unei piese și alege "Adaugă la sesiunea Orbit".',
guestFooter: "Gazda controlează redarea — nu poți schimba lista.",
exitKickedTitle: 'Ai fost banat din sesiune',
exitRemovedTitle: 'Ai fost înlăturat din sesiune',
exitEndedTitle: 'Gazda a încheiat sesiunea',
exitHostTimeoutTitle: 'Gazda n-a mai răspuns',
exitHostTimeoutBody: "{{host}} nu a mai trimis un update de ceva timp, așa că \"{{name}}\" a fost închis pe partea ta. Poți reintra oricând cu link-ul de invitație.",
exitKickedBody: '{{host}} te-a banat din "{{name}}". Nu poți reintra',
exitRemovedBody: '{{host}} te-a înlăturat din "{{name}}". Poți reintra oricând cu link-ul de invitație.',
exitEndedBody: '"{{name}}" s-a terminat. Sper că te-ai distrat.',
exitOk: 'OK',
};
+56
View File
@@ -0,0 +1,56 @@
export const player = {
regionLabel: 'Player Muzică',
openFullscreen: 'Deschide Playerul pe ecran complet',
fullscreen: 'Player pe ecran complet',
closeFullscreen: 'Închide ecranul complet',
closeTooltip: 'Închide (Esc)',
noTitle: 'Fără Titlu',
stop: 'Stop',
prev: 'Piesa anterioară',
play: 'Redă',
pause: 'Pauză',
previewActive: 'Previzualizează redarea',
previewLabel: 'Previzualizare',
delayModalTitle: 'Temporizator',
delayPauseSection: 'Pune pauză după',
delayStartSection: 'Începe după',
delayPreviewPause: 'Se pune pauză la',
delayPreviewStart: 'Începe la',
delaySchedulePause: 'Programează pauza',
delayScheduleStart: 'Programează pornirea',
delayCancelPause: 'Anulează temporizatorul de pauză',
delayCancelStart: 'Anulează temporizatorul de start',
delayInactivePause: 'Disponibil până când ceva este redat.',
delayInactiveStart: 'Disponibil când o piesă sau un radio încărcat este în pauză.',
delayCustomMinutes: 'Întârziere personalizată (minute)',
delayCustomPlaceholder: 'ex. 2.5',
closeDelayModal: 'Închide',
delayIn: 'în',
delayFmtSec: '{{n}}s',
delayFmtMin: '{{n}} min',
delayFmtHr: '{{n}} h',
delayCancel: 'Anulează',
delayApply: 'Aplică',
next: 'Următoarea Piesă',
repeat: 'Repetă',
repeatOff: 'Oprit',
repeatAll: 'Tot',
repeatOne: 'Unul',
progress: 'Progresul Piesei',
volume: 'Volum',
toggleQueue: 'Comutați Coada',
collapseQueueResize: 'Strânge coada, redimensionează',
moreOptions: 'Mai multe opțiuni',
equalizer: 'Egalizator',
miniPlayer: 'Player Mini',
lyrics: 'Versuri',
fsLyricsToggle: 'Versuri în ecran complet',
lyricsLoading: 'Se încarcă versurile…',
lyricsNotFound: 'Niciun vers găsit pentru această piesă',
lyricsSourceServer: 'Sursa: Server',
lyricsSourceLrclib: 'Sursa: LRCLIB',
lyricsSourceNetease: 'Sursa: Netease',
lyricsSourceLyricsplus: 'Sursa: YouLyPlus',
showDuration: 'Arată durata',
showRemainingTime: 'Arată timpul rămas',
};
+101
View File
@@ -0,0 +1,101 @@
export const playlists = {
title: 'Playlisturi',
newPlaylist: 'Playlist nou',
unnamed: 'Playlist fără nume',
createName: 'Nume Playlist…',
create: 'Crează',
cancel: 'Anulează',
empty: 'Niciun playlist deocamdată.',
emptyPlaylist: 'Acest playlist este gol.',
addFirstSong: 'Adaugă prima ta piesă',
notFound: 'Playlistul nu a fost găsit.',
songs: '{{n}} piese',
playAll: 'Redă tot',
shuffle: 'Amestecă',
addToQueue: 'Adaugă la Coadă',
back: 'Înapoi la Playlisturi',
deletePlaylist: 'Șterge',
confirmDelete: 'Apasă din nou pentru a confirma',
removeSong: 'Șterge din playlist',
addSongs: 'Adaugă Piese',
searchPlaceholder: 'Caută în librărie…',
noResults: 'Niciun rezultat.',
suggestions: 'Piese sugerate',
noSuggestions: 'Nicio sugestie disponibilă.',
titleBadge: 'Playlist',
refreshSuggestions: 'Sugestii noi',
addSong: 'Adaugă la playlist',
preview: 'Previzualizare (30s)',
previewStop: 'Oprește previzualiarea',
playNextSuggestion: 'Redă următorul',
suggestionsHint: 'Dublu-clic pe un rând pentru a-l adăuga în playlist',
addSelected: 'Adaugă selectate',
cacheOffline: 'Adaugă playlistul în memoria cache offline',
offlineCached: 'Playlist adăugat în cache',
removeOffline: 'Șterge din cache-ul offline',
offlineDownloading: 'Se descarcă… ({{done}}/{{total}} albume)',
publicLabel: 'Public',
privateLabel: 'Privat',
editMeta: 'Editează playlist',
editNamePlaceholder: 'Nume playlist…',
editCommentPlaceholder: 'Adaugă o descriere…',
editPublic: 'Playlist public',
editSave: 'Salvează',
editCancel: 'Anulează',
changeCover: 'Schimbă imaginea de copertă',
changeCoverLabel: 'Schimbă poza',
removeCover: 'Șterge poza',
coverUpdated: 'Copertă actualizată',
metaSaved: 'Playlist actualizat',
downloadZip: 'Descarcă (ZIP)',
// Toast notifications for multi-select
addSuccess: '{{count}} piese adăugate la {{playlist}}',
addPartial: '{{added}} adăugate, {{skipped}} sărite (duplicate)',
addAllSkipped: 'Toate sărite ({{count}} duplicate)',
addedAsDuplicates: '{{count}} piese adăugate la {{playlist}} (ca duplicate)',
duplicateConfirmTitle: 'Deja în playlist',
duplicateConfirmMessage: 'Toate {{count}} piese sunt deja în "{{playlist}}". Adaugă-le din nou ca duplicate?',
duplicateConfirmAction: 'Adaugă oricum',
addError: 'Eroare la adăugarea pieselor',
createAndAddSuccess: 'Playlist "{{playlist}}" creat cu {{count}} piese',
createError: 'Eroare la crearea playlistului',
deleteSuccess: '{{count}} playlisturi șterse',
deleteFailed: 'Eroare la ștergerea {{name}}',
deleteSelected: 'Șterge selectate',
deleteSelectedPartial: 'Doar {{n}} din {{total}} playlisturi selectate pot fi șterse (celelalte aparțin altcuiva).',
mergeSuccess: '{{count}} piese comasate în {{playlist}}',
mergeNoNewSongs: 'Nicio piesă nouă de adăugat',
mergeError: 'Eroare la comasarea playlisturilor',
mergeInto: 'Comasează în',
selectionCount: '{{count}} selectate',
select: 'Selectează',
startSelect: 'Pornește selecția',
cancelSelect: 'Anulează',
loadingAlbums: 'Se rezolvă {{count}} albume…',
loadingArtists: 'Se rezolvă {{count}} artiști…',
myPlaylists: 'Playlisturile mele',
noOtherPlaylists: 'Niciun alt playlist disponibil',
addToPlaylistSuccess: '{{count}} piese adăugate în {{playlist}}',
addToPlaylistNoNew: 'Nicio piesă nouă adăugată în {{playlist}}',
addToPlaylistError: 'Eroare la adăugarea în playlist',
removeSuccess: 'Piesă ștearsă din playlist',
removeError: 'Eroare la ștergerea piesei din playlist',
importCSV: 'Import CSV',
importCSVTooltip: 'Import din CSV Spotify',
csvImportReport: 'Raport Import CSV',
csvImportTotal: 'Total',
csvImportAdded: 'Adăugate',
csvImportDuplicates: 'Duplicate',
csvImportNotFound: 'Negăsite',
csvImportNetworkErrors: 'Erori de rețea',
csvImportDuplicatesTitle: 'Piese duplicate (Deja în Playlist):',
csvImportNotFoundTitle: 'Piese negăsite:',
csvImportNetworkErrorsTitle: 'Erori de rețea (se poate reîncerca importul):',
csvImportDownloadReport: 'Descarcă Raport',
csvImportClose: 'Închide',
csvImportNoValidTracks: 'Nicio piesă validă găsită în fișierul CSV',
csvImportFailed: 'Nu s-a reușit importul fișierului CSV',
csvImportToast: '{{added}} adăugate, {{notFound}} negăsite, {{duplicates}} duplicate',
csvImportDownloadSuccess: 'Pagina de raport descărcată cu succes',
csvImportDownloadError: 'Nu s-a putut descărca raportul',
};
+45
View File
@@ -0,0 +1,45 @@
export const queue = {
title: 'Coadă',
savePlaylist: 'Salvează Playlist',
updatePlaylist: 'Actualizează Playlist',
filterPlaylists: 'Filtrează playlisturi…',
playlistName: 'Nume Playlist',
cancel: 'Anulează',
save: 'Salvează',
loadPlaylist: 'Încarcă Playlist',
loading: 'Se încarcă…',
noPlaylists: 'Niciun playlist găsit.',
load: 'Înlocuiește coadă & redare',
appendToQueue: 'Adaugă la coadă',
delete: 'Șterge',
deleteConfirm: 'Șterge playlist "{{name}}"?',
clear: 'Golește',
shuffle: 'Amestecă coada',
gapless: 'Gapless',
crossfade: 'Crossfade',
infiniteQueue: 'Coadă infinită',
autoAdded: '— Adăugat automat—',
radioAdded: '— Radio —',
hide: 'Ascunde',
hideNowPlaying: 'Ascunde informația now playing',
showNowPlaying: 'Arată informația now playing',
close: 'Închide',
nextTracks: 'Următoarele Piese',
shareQueue: 'Copiază link-ul distribuirii cozii',
shareQueueEmpty: 'Coada este goală — nimic de distribuit.',
emptyQueue: 'Coada este goală.',
trackSingular: 'piesă',
trackPlural: 'piese',
showRemaining: 'Arată timpul rămas',
showTotal: 'Arată timpul total',
showEta: 'Arată timpul estimativ până la final',
replayGain: 'ReplayGain',
rgTrack: 'P {{db}} dB',
rgAlbum: 'A {{db}} dB',
rgPeak: 'Vârf {{pk}}',
sourceOffline: 'Se redă din librăria offline',
sourceHot: 'Se redă din cache',
sourceStream: 'Se redă din stream-ul de rețea',
clearCachedLoudnessWaveform: 'Golește zgomotul si formele de undă din cache, apoi reanalizează piesa',
recalculatingLoudnessWaveform: 'Se recalculează zgomotul și formele de undă pentru această piesă…',
};
+35
View File
@@ -0,0 +1,35 @@
export const radio = {
title: 'Radio Internet',
empty: 'Nicio stație radio configurată.',
addStation: 'Adaugă Stație',
editStation: 'Editează',
deleteStation: 'Șterge stație',
confirmDelete: 'Apasă din nou pentru a confirma',
stationName: 'Numele stației…',
streamUrl: 'URL-ul streamului…',
homepageUrl: 'URL-ul paginii principale (opțional)',
save: 'Salvează',
cancel: 'Anulează',
live: 'LIVE',
liveStream: 'Radio Internet',
openHomepage: 'Deschide pagina principală',
changeCoverLabel: 'Schimbă coperta',
removeCover: 'Șterge coperta',
browseDirectory: 'Caută Director',
directoryPlaceholder: 'Caută stații…',
noResults: 'Nicio stație găsită.',
stationAdded: 'Stație adăugată',
filterAll: 'Toate',
filterFavorites: 'Favorite',
sortManual: 'Manual',
sortAZ: 'A → Z',
sortZA: 'Z → A',
sortNewest: 'Cele mai noi',
favorite: 'Adaugă la favorite',
unfavorite: 'Șterge din favorites',
noFavorites: 'Nicio stație favorită.',
listenerCount_one: '{{count}} ascultător',
listenerCount_other: '{{count}} ascultători',
recentlyPlayed: 'Redate recent',
upNext: 'Urmează',
};
+4
View File
@@ -0,0 +1,4 @@
export const randomAlbums = {
title: 'Albume aleatorii',
refresh: 'Reîmprospătează',
};
+9
View File
@@ -0,0 +1,9 @@
export const randomLanding = {
title: 'Crează un Mix',
mixByTracks: 'Mix după Piese',
mixByTracksDesc: 'Selecție aleatorie de piese din întreaga librărie',
mixByAlbums: 'Mix după Albume',
mixByAlbumsDesc: 'Selecție aleatorie de albume pentru următoarea ta descoperire',
mixByLucky: 'Mix Norocos',
mixByLuckyDesc: 'Mix instant inteligent din artiștii, albumele și ratingurile tale de top',
};
+39
View File
@@ -0,0 +1,39 @@
export const randomMix = {
title: 'Mix Aleatoriu',
remix: 'Remix',
remixTooltip: 'Încarcă noi piese aleatorii',
remixGenre: 'Remix {{genre}}',
remixTooltipGenre: 'Încarcă piese {{genre}} noi',
playAll: 'Redă tot',
trackTitle: 'Titlu',
trackArtist: 'Artist',
trackAlbum: 'Album',
trackFavorite: 'Favorit',
trackDuration: 'Durată',
favoriteAdd: 'Adaugă la Favorites',
favoriteRemove: 'Șterge din Favorite',
play: 'Redă',
trackGenre: 'Gen',
mixSettingsHeader: 'Setări Mix',
exclusionsHeader: 'Excluderi',
filterPanelInexactSizeNote: 'Mărimea mixului este o țintă — cererile mari pot returna mai puține piese dacă colecția serverului este mai mică.',
mixSize: 'Mărimea playlistului',
excludeAudiobooks: 'Exclude audiobookuri & redări radio',
excludeAudiobooksDesc: 'Potrivește cuvinte cheie cu gen, titlu, album și artist - ex. Hörbuch, Audiobook, Spoken Word, …',
genreBlocked: 'Cuvânt cheie blocat',
genreAddedToBlacklist: 'Adăugat la lista de filtre',
genreAlreadyBlocked: 'Deja blocat',
artistBlocked: 'Artist blocat',
artistAddedToBlacklist: 'Artist adăugat la lista de filtre',
artistClickHint: 'Clic pentru a bloca acest artist',
blacklistToggle: 'Filtru de cuvinte cheie',
genreMixTitle: 'Mix de Genuri',
genreMixDesc: 'Top 20 genuri după numărul de piese - clic pentru a încărca un mix aleatoriu',
genreMixAll: 'Toate piesele',
genreMixLoadMore: 'Încarcă încă 10',
genreMixNoGenres: 'Niciun gen găsit pe server.',
shuffleGenres: 'Arată genuri diferite',
filterPanelTitle: 'Filtre',
filterPanelDesc: 'Apasă pe un tag de gen sau nume de artist în lista de piese de mai jos pentru a o bloca din mixuri viitoare.',
genreClickHint: 'Apasă pe un tag de gen pentru a-l adăuga\nca un filtru de cuvânt cheie.\nFiltrul corespunde cu gen, titlu, album & artist.',
};
+29
View File
@@ -0,0 +1,29 @@
export const search = {
placeholder: 'Caută un artist, album sau piesă…',
noResults: 'Niciun rezultat pentru "{{query}}"',
artists: 'Artiști',
albums: 'Albume',
songs: 'Piese',
clearLabel: 'Șterge căutarea',
addedToQueueToast: 'Adăugat "{{title}}" în coadă',
title: 'Caută',
resultsFor: 'Rezultate pentru "{{query}}"',
album: 'Album',
advanced: 'Căutare avansată',
advancedSearchTerm: 'Termen de căutare',
advancedSearchPlaceholder: 'Titlu, album, artist…',
advancedGenre: 'Gen',
advancedAllGenres: 'Toate genurile',
advancedYear: 'An',
advancedYearFrom: 'de la',
advancedYearTo: 'până la',
advancedAll: 'Toate',
advancedSearch: 'Căutare',
advancedEmpty: 'Introdu un termen de căutare sau alege un filtru pentru a începe',
advancedNoResults: 'Niciun rezultat găsit.',
advancedGenreNote: 'Piesele sunt alese aleatoriu din acest gen',
recentSearches: 'Căutări Recente',
browse: 'Răsfoiește',
emptyHint: 'Ce vrei să auzi?',
genres: 'Genuri',
};
+445
View File
@@ -0,0 +1,445 @@
export const settings = {
title: 'Setări',
language: 'Limbă',
languageEn: 'Engleză',
languageDe: 'Germană',
languageFr: 'Franceză',
languageNl: 'Olandeză',
languageZh: 'Chineză',
languageNb: 'Norvegiană',
languageRu: 'Rusă',
languageEs: 'Spaniolă',
languageRo: 'Română',
font: 'Font',
fontHintOpenDyslexic: 'Prietenos cu dislexia · Chineza nu este suportată',
theme: 'Temă',
appearance: 'Aparență',
servers: 'Servere',
serverName: 'Nume Server',
serverUrl: 'URL Server',
serverUrlPlaceholder: '192.168.1.100:4533 sau https://music.example.com',
serverUsername: 'Nume utilizator',
serverPassword: 'Parolă',
addServer: 'Adaugă Server',
addServerTitle: 'Adaugă Server nou',
useServer: 'Folosește',
deleteServer: 'Șterge',
noServers: 'Niciun server salvat.',
serverActive: 'Activ',
confirmDeleteServer: 'Șterge server "{{name}}"?',
serverConnecting: 'Se conectează…',
serverConnected: 'Conectat!',
serverFailed: 'Conexiune eșuată.',
testBtn: 'Testează Conexiunea',
testingBtn: 'Se testează…',
serverCompatible: 'Făcut pentru Navidrome. Alte servere compatibile cu Subsonic (Gonic, Airsonic, …) pot rula cu funcționalitate redusă, deoarece Psysonic folosește multe endpointuri API specifice Navidrome.',
userMgmtTitle: 'Gestionarea Utilizatorilor',
userMgmtDesc: 'Gestionează utilizatorii de pe acest server. Necesită privilegii admin.',
userMgmtNoAdmin: 'Ai nevoie de privilegii de admin pentru a gestiona utilizatorii de pe acest server.',
userMgmtLoadError: 'Eroare la încărcarea utilizatorilor.',
userMgmtLoadFriendly: 'Serverul nu a răspuns — acesta este de obicei un caz singular.',
userMgmtRetry: 'Reîncearcă',
userMgmtEmpty: 'Niciun utilizator găsit.',
userMgmtYouBadge: 'Tu',
userMgmtAdminBadge: 'Admin',
userMgmtAddUser: 'Adaugă Utilizator',
userMgmtAddUserTitle: 'Adaugă Nou Utilizator',
userMgmtEditUserTitle: 'Editează Utilizatorul',
userMgmtUsername: 'Nume utilizator',
userMgmtName: 'Nume afișaj',
userMgmtEmail: 'Email',
userMgmtPassword: 'Parolă',
userMgmtPasswordEditHint: 'Introdu o parolă nouă pentru a o actualiza.',
userMgmtRoleAdmin: 'Admin',
userMgmtLibraries: 'Librării',
userMgmtLibrariesAdminHint: 'Utilizatorii Admin au acces automat la toate librăriile.',
userMgmtLibrariesEmpty: 'Nicio librărie disponibilă pe acest server.',
userMgmtLibrariesValidation: 'Alege cel puțin o librărie.',
userMgmtLibrariesUpdateError: 'Utilizator salvat, dar atribuirea librăriilor a eșuat',
userMgmtNoLibraries: 'Nicio librărie asignată',
userMgmtNeverSeen: 'Niciodată',
userMgmtSave: 'Salvează',
userMgmtCancel: 'Anulează',
userMgmtDelete: 'Șterge',
userMgmtEdit: 'Editează',
userMgmtConfirmDelete: 'Șterge utilizatorul "{{username}}"? Acestă acțiune nu poate fi anulată.',
userMgmtCreateError: 'Nu s-a putut crea utilizatorul.',
userMgmtUpdateError: 'Nu s-a putut actualiza utilizatorul.',
userMgmtDeleteError: 'Nu s-a putut șterge utilizatorul.',
userMgmtCreated: 'Utilizator creat.',
userMgmtUpdated: 'Utilizator actualizat.',
userMgmtDeleted: 'Utilizator șters.',
userMgmtValidationMissing: 'Numele de utilizator, numele de afișaj și parola sunt necesare.',
userMgmtValidationMissingIdentity: 'Numele de utilizator și numele de afișaj sunt necesare.',
userMgmtMagicStringGenerate: 'Generează string-ul magic',
userMgmtSaveAndMagicString: 'Salvează și obține string-ul magic',
userMgmtMagicStringPasswordNavHint:
'Navidrome va salva această parolă pentru utilizator. Dacă diferă de cea curentă, serverul va actualiza parola de login.',
userMgmtMagicStringPlaintextWarning:
'Distribuie string-ul magic cu grijă: conține o parolă necriptată (codificarea nu este criptare). Oricine cu string-ul complet se poate conecta ca acest utilizator.',
userMgmtMagicStringCopied: 'String-ul magic copiat în clipboard.',
userMgmtMagicStringCopyFailed: 'Nu s-a putut copia în clipboard.',
userMgmtMagicStringLoginFailed: 'Verificarea parolei a eșuat — credențialele nu au putut fi verificate.',
userMgmtMagicStringModalTitle: 'Generează string-ul magic',
userMgmtMagicStringModalDesc: 'Introdu parola Subsonic pentru "{{username}}". Este inclusă în string-ul magic copiat.',
userMgmtMagicStringModalConfirm: 'Copiază string-ul',
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
audiomuseDesc:
'Pornește dacă acest server are <pluginLink>AudioMuse-AI Navidrome plugin</pluginLink> configurat. Activează Mixul Instant din piese si folosește artiști similari de pe partea de server în loc de Last.fm pe paginile de artiști.',
audiomuseIssueHint:
'Mixul Instant a eșuat recent — verifică plugin-ul Navidrome și API-ul AudioMuse. Artiștii similari sunt bazați pe Last.fm când serverul nu returnează nimic.',
connected: 'Conectat',
failed: 'Eșuat',
eqTitle: 'Egalizator',
eqEnabled: 'Activează Egalizatorul',
eqPreset: 'Preset',
eqPresetCustom: 'Personalizat',
eqPresetBuiltin: 'Preseturi încorporate',
eqPresetCustomGroup: 'Preseturile mele',
eqSavePreset: 'Salvează ca Preset',
eqPresetName: 'Nume preset…',
eqDeletePreset: 'Șterge preset',
eqResetBands: 'Resetează la Plat',
eqPreGain: 'Pre-gain',
eqResetPreGain: 'Resetează pre-gain',
eqAutoEqTitle: 'Căutare Căști AutoEQ',
eqAutoEqPlaceholder: 'Caută model căști / IEM…',
eqAutoEqSearching: 'Se caută…',
eqAutoEqNoResults: 'Niciun rezultat găsit',
eqAutoEqError: 'Căutarea a eșuat',
eqAutoEqRateLimit: 'Limita ratei GitHub a fost atinsă — încearcă din nou într-un minut',
eqAutoEqFetchError: 'Nu s-a putut lua profilul EQ',
lfmTitle: 'Last.fm',
lfmConnect: 'Conectează-te cu Last.fm',
lfmConnecting: 'Se așteaptă autorizarea…',
lfmConfirm: 'Am autorizat aplicația',
lfmConnected: 'Conectat ca',
lfmDisconnect: 'Deconectează-te',
lfmConnectDesc: 'Conectează contul tău Last.fm pentru a pornit scrobbling și update-uri Now Playing direct din Psysonic — nicio nevoie configurare Navidrome necesară.',
lfmOpenBrowser: 'O fereastră browser se va deschide. Autorizează Psysonic în Last.fm, apoi apasă pe butonul de mai jos.',
lfmScrobbles: '{{n}} scrobble-uri',
lfmMemberSince: 'Membru din {{year}}',
scrobbleEnabled: 'Scrobbling dezactivat',
scrobbleDesc: 'Trimite piese la Last.fm după 50% timp de redare',
behavior: 'Comportamentul Aplicației',
cacheTitle: 'Spațiu de stocare maxim',
cacheDesc: 'Artă copertă și imagini artist. Când este plin, cele mai vechi intrări sunt șterse automat. Albumele offline nu sunt șterse automat, dar vor fi șterse când memoria cache este curățată manual.',
cacheUsedImages: 'Imagini:',
cacheUsedOffline: 'Piese offline:',
cacheUsedHot: 'Mărimea pe disc:',
hotCacheTrackCount: 'Piese în memoria cache:',
cacheMaxLabel: 'Mărimea maximă',
cacheClearBtn: 'Golește memoria cache',
waveformCacheClearBtn: 'Golește cache-ul formelor de undă',
cacheClearWarning: 'Aceasta va înlătura de asemenea toate albumele offline din librărie.',
cacheClearConfirm: 'Golește totul',
cacheClearCancel: 'Anulează',
waveformCacheCleared: 'Cache-ul formelor de undă golit ({{count}} rows).',
waveformCacheClearFailed: 'Golirea cache-ului formelor de undă a eșuat.',
offlineDirTitle: 'Librărie offline (În Aplicație)',
offlineDirDesc: 'Locația stocării pieselor pe care le faci disponibile offline în Psysonic.',
offlineDirDefault: 'Implicit (App Data)',
offlineDirChange: 'Schimbă directorul',
offlineDirClear: 'Resetează la implicit',
offlineDirHint: 'Noile descărcări vor folosi această locație. Descărcările existente rămân la adresa originală.',
hotCacheTitle: 'Cache-ul hot playback',
hotCacheDisclaimer: 'Preîncarcă piesele ce urmează din coadă și păstrează anterioarele. Când este pornit, folosește spațiu pe disc și rețea.',
hotCacheDirDefault: 'Implicit (App Data)',
hotCacheDirChange: 'Schimbă folderul',
hotCacheDirClear: 'Resetează la implicit',
hotCacheDirHint: 'Schimbarea folderului resetează indexul din aplicație; fișierele aflate deja pe disc stau unde sunt până când le ștergi.',
hotCacheEnabled: 'Activează cache-ul hot playback cache',
hotCacheMaxMb: 'Mărimea maximă cache',
hotCacheDebounce: 'Debounce la schimbarea cozii',
hotCacheDebounceImmediate: 'Imediat',
hotCacheDebounceSeconds: '{{n}} s',
hotCacheClearBtn: 'Golește hot cache',
audioOutputDevice: 'Dispozitiv de ieșire audio',
audioOutputDeviceDesc: 'Alege prin ce dispozitiv audio să redea Psysonic. Schimbările au efect imediat și re-încep piesa curentă.',
audioOutputDeviceDefault: 'Implicit sistem',
audioOutputDeviceRefresh: 'Reîmprospătează lista dispozitivelor',
audioOutputDeviceOsDefaultNow: 'ieșirea curentă a sistemului',
audioOutputDeviceListError: 'Nu s-a putut încărca lista dispozitivelor audio',
audioOutputDeviceNotInCurrentList: 'nu există în lista curentă',
audioOutputDeviceMacNotice: 'În macOS, redarea urmărește mereu dispozitivul audio de ieșire al sistemului din motive tehnice. Schimbă ținta în Setări → Sunet sau iconița difuzor din bara de meniu. Fundal: CoreAudio declanșează un prompt de permisiune de microfon când se deschide un stream non-implicit — îl evităm folosind opțiunea implicită a sistemului mereu.',
hiResTitle: 'Playback Hi-Res nativ',
hiResEnabled: 'Pornește playback-ul hi-res nativ',
hiResDesc: "Forțează ieșire implicită de 44.1 kHz pentru stabilitate maximă. Pornește doar dacă sistemul hardware și rețeaua suport fiabil rate mari de eșantionare (88.2 kHz+).",
showArtistImages: 'Afișează Imagini Artist',
showArtistImagesDesc: 'Încarcă și afișează imagini artist în Prezentarea generală a Artiștilor. Oprit implicit pentru a reduce I/O pe server și încărcarea rețelei pe librării mari.',
showOrbitTrigger: 'Afișează "Orbit" în antet',
showOrbitTriggerDesc: 'Declanșatorul din bara de sus pentru a începe sau intra într-o sesiune de ascultare distribuită. Ascunde-l dacă nu folosești Orbit - îl poți porni înapoi aici.',
showTrayIcon: 'Afișează Iconița Tavă',
showTrayIconDesc: 'Afișează iconița Psysonic în zona notificărilor de sistem / bara de meniu.',
minimizeToTray: 'Minimizează în Tavă',
minimizeToTrayDesc: 'La închiderea ferestrei, continuă rularea Psysonic în tava de sistem în loc de ieșire',
preloadMiniPlayer: 'Preîncarcă mini player',
preloadMiniPlayerDesc: 'Crează fereastra mini player în fundal la deschiderea aplicației pentru a arăta conținut instantaneu la prima deschidere. Folosește puțină extra memorie.',
discordRichPresence: 'Prezență Discord Rich',
discordRichPresenceDesc: 'Arată piesa redată curent pe profilul tău de Discord. Necesită Discord să ruleze.',
useCustomTitlebar: 'Bară de titlu personalizată',
useCustomTitlebarDesc: 'Înlocuiește bara de titlu a sistemului cu una care corespunde cu tema aplicației. Dezactivează pentru a folosi bara de titlu nativ GNOME/GTK.',
linuxWebkitSmoothScroll: 'Rotiță lină (Linux)',
linuxWebkitSmoothScrollDesc: 'Pornit: scroll inert. Oprit: linie cu linie, în stil GTK.',
discordCoverSource: 'Sursa artei de copertă',
discordCoverSourceDesc: 'De unde să fie preluată arta de album afișată pe profilul tău de Discord.',
discordCoverNone: 'Niciuna (doar iconița aplicației)',
discordCoverServer: 'Server (prin informații album)',
discordCoverApple: 'Apple Music',
discordOptions: 'Opțiuni avansate Discord',
discordTemplates: 'Șablon text personalizat',
discordTemplatesDesc: 'Personalizează ce informații sunt afișate pe profilul tău de Discord. Variabile: {title}, {artist}, {album}',
discordTemplateDetails: 'Linia principală (detalii)',
discordTemplateState: 'Linia secundară (status)',
discordTemplateLargeText: 'Tooltip album (largeText)',
nowPlayingEnabled: 'Se afișează în Now Playing',
nowPlayingEnabledDesc: 'Difuzează piesa redată curent către vizualizatorul de ascultare live a serverului. Dezactivează pentru a opri trimiterea datelor de redare.',
enableBandsintown: 'Date de turneu Bandsintown',
enableBandsintownDesc: 'Arată concertele următoare pentru artisul curent în tab-ul Informații. Datele sunt preluate din API-ul public Bandsintown.',
lyricsServerFirst: 'Preferă versurile de pe server',
lyricsServerFirstDesc: 'Verifică versurile furnizate de server (tag-uri încorporate, fișiere sidecar) înainte de interogarea LRCLIB. Dezactivează pentru a folosi LRCLIB primul.',
enableNeteaselyrics: 'Versuri Netease Cloud Music',
enableNeteaselyricsDesc: 'Folosește Netease Cloud Music ca ultimă soluție pentru versuri când serverul și LRCLIB nu returnează nimic. Cea mai bună acoperire pentru muzică Asiatică și internațională.',
lyricsSourcesTitle: 'Sursă versuri',
lyricsSourcesDesc: 'Alege ce surse se interoghează pentru versuri și în ce ordine. Trage pentru a reordona. Sursele dezactivate sunt ignorate complet.',
lyricsSourceServer: 'Server',
lyricsSourceLrclib: 'LRCLIB',
lyricsSourceNetease: 'Netease Cloud Music',
lyricsModeStandard: 'Standard',
lyricsModeStandardDesc: 'Trei surse în o listă ordonabilă: tag-uri server, LRCLIB, Netease.',
lyricsModeLyricsplus: 'YouLyPlus (Karaoke)',
lyricsModeLyricsplusDesc: 'Sincronizare cuvânt-cu-cuvânt preluată din Apple Music, Spotify, Musixmatch & QQ (backend comunitate). Recurge în tăcere la sursele standard când nimic nu este găsit.',
lyricsStaticOnly: 'Afișează versurile doar ca text static',
lyricsStaticOnlyDesc: 'Redă versurile sincronizate fără scroll automat și fără evidențierea cuvintelor.',
downloadsTitle: 'Export ZIP & Arhivare',
downloadsFolderDesc: 'Folder destinație pentru albumele pe care le descarci ca fișiere ZIP în calculator.',
downloadsDefault: 'Folderul Download Implicit',
pickFolder: 'Selectează',
pickFolderTitle: 'Selectează Folderul de Download',
clearFolder: 'Golește folderul de download',
logout: 'Deconectare',
aboutTitle: 'Despre Psysonic',
aboutDesc: 'Un player muzical desktop modern făcut pentru Navidrome. Folosește API-ul Subsonic plus extensiile specifice Navidrome. Construit cu Tauri v2 cu un motor audio nativ Rust — ușor și rapid, dar împachetat cu funcționalități: bară de redare cu forme de undă, versuri sincronizate, integrare Last.fm, EQ 10 benzi, crossfade, redare fără spațiu între piese, Replay Gain, navigarea pe gen, și o librărie largă de teme.',
aboutLicense: 'Licență',
aboutLicenseText: 'GNU GPL v3 — liber de utilizat, modificat, și distribuit sub aceeași licență.',
aboutRepo: 'Cod Sursă pe GitHub',
aboutVersion: 'Versiune',
aboutBuiltWith: 'Construit cu Tauri · React · TypeScript · Rust/rodio',
aboutMaintainersLabel: 'Dezvoltatori',
aboutReleaseNotesLabel: 'Notițe lansare',
aboutReleaseNotesLink: "Deschide ce e nou pentru această versiune",
aboutContributorsLabel: 'Contribuabili',
showChangelogOnUpdate: "Arată 'Ce este nou' în update",
showChangelogOnUpdateDesc: "Arată un banner discret cu lista modificărilor deasupra Now Playing după un update. Apasă pentru a deschide lista modificărilor; X îl respinge.",
randomMixTitle: 'Lista neagră Mix Aleatoriu',
luckyMixMenuTitle: 'Arată Mixul Norocos în meniu',
luckyMixMenuDesc: 'Activează Mixul Norocos în Construiește un Mix și ca un element separat în meniu când navigarea împărțită este pornită. Vizibil doar când AudioMuse este activat pe serverul activ.',
randomMixBlacklistTitle: 'Cuvinte cheie personalizate pentru filtre',
randomMixBlacklistDesc: 'Piesele sunt excluse când orice cuvânt cheie corespunde cu genul, titlul, albumul sau artistul lor (activ când checkbox-ul de deasupra este pornit).',
randomMixBlacklistPlaceholder: 'Adaugă cuvânt cheie…',
randomMixBlacklistAdd: 'Adaugă',
randomMixBlacklistEmpty: 'Niciun cuvânt cheie adăugat încă.',
randomMixHardcodedTitle: 'Cuvinte cheie predefinite (activ când checkbox-ul este pornit)',
tabAudio: 'Audio',
tabStorage: 'Offline & Cache',
tabAppearance: 'Aparență',
tabLibrary: 'Librărie',
tabServers: 'Servere',
tabLyrics: 'Versuri',
tabPersonalisation: 'Personalizare',
tabIntegrations: 'Integrări',
inputKeybindingsTitle: 'Scurtături tastatură',
aboutContributorsCount_one: '{{count}} contribuție',
aboutContributorsCount_other: '{{count}} contribuții',
searchPlaceholder: 'Caută setări…',
searchNoResults: 'Nicio setare nu corespunde cu ce ai căutat.',
integrationsPrivacyTitle: 'Notificare de confidențialitate',
integrationsPrivacyBody: 'Toate integrările din acest tab sunt <strong>opționale</strong> și trimit date către servicii externe sau server-ul tău Navidrome când sunt activate. Last.fm primește istoricul ascultărilor tale, Discord arată piesa redată curent în profilul tău, Bandsintown e interogat per artist pentru a aduce date de turnee, și distribuirea Now-Playing publică piesa curentă către alți useri din server-ul tău Navidrome. Dacă nu vrei vreo opțiune, doar lasă secțiunea corespunzătoare dezactivată',
homeCustomizerTitle: 'Pagina Principală',
queueToolbarTitle: 'Toolbar Coadă',
queueToolbarReset: 'Resetează la implicit',
queueToolbarSeparator: 'Separator',
sidebarTitle: 'Bara laterală',
sidebarReset: 'Resetează la implicit',
artistLayoutTitle: 'Secțiunile paginii artistului',
artistLayoutDesc: 'Trage pentru a reordona, comutați pentru a ascunde secțiuni individuale ale paginii de artist. Secțiunile fără date sunt ignorate automat.',
artistLayoutReset: 'Resetează la implicit',
artistLayoutBio: 'Biografie artist',
artistLayoutTopTracks: 'Top piese',
artistLayoutSimilar: 'Artiști similari',
artistLayoutAlbums: 'Albume',
artistLayoutFeatured: 'Prezentat și pe',
sidebarDrag: 'Trage pentru a reordona',
sidebarFixed: 'Mereu vizibil',
randomNavSplitTitle: 'Navigare Mix împărțită',
randomNavSplitDesc: 'Arată "Mix Aleatoriu", "Albume Aleatorii", și "Mix Norocos" ca intrări separate în bara laterală în loc de hub-ul "Construiește un Mix".',
tabInput: 'Input',
tabUsers: 'Useri',
tabSystem: 'Sistem',
loggingTitle: 'Logging',
loggingModeDesc: 'Controlează verbozitatea log-urilor din backend în terminal.',
loggingModeOff: 'Oprit',
loggingModeNormal: 'Normal',
loggingModeDebug: 'Debug',
loggingExport: 'Exportă log-uri',
loggingExportSuccess: 'Log-uri exportate ({{count}} linii).',
loggingExportError: 'Nu s-au putut exporta log-urile.',
ratingsSectionTitle: 'Ratinguri',
ratingsSkipStarTitle: 'Sari peste 1 stea',
ratingsSkipStarDesc:
'După mai multe salturi la rând, setează ratingul piesei la 1★. Doar pentru piesele care nu au fost deja evaluate.',
ratingsSkipStarThresholdLabel: 'Salturi',
ratingsMixFilterTitle: 'Filtrează după rating',
ratingsMixFilterDesc:
'Filtrează elementele cu scor mic în {{mix}} și {{albums}}. Apasă pe steaua selectată din nou pentru a opri limita.',
ratingsMixMinSong: 'Piese',
ratingsMixMinAlbum: 'Albume',
ratingsMixMinArtist: 'Artiști',
ratingsMixMinThresholdAria: 'Stele minime: {{label}}',
backupTitle: 'Backup & Restaurare',
backupExport: 'Setări de export',
backupExportDesc: 'Salvează toate setările, profilele de server, configurări Last.fm, teme, EQ și combinații de taste către un fișier .psybkp. Parolele sunt stocate ca text — păstrează fișierul în siguranță.',
backupImport: 'Setări de Import',
backupImportDesc: 'Restaurează setări dintr-in fișier .psybkp. Aplicația se va reîncărca după import.',
backupImportConfirm: 'Aceasta va suprascrie toate setările curente. Continuați?',
backupSuccess: 'Backup salvat',
backupImportSuccess: 'Setări restaurate — se reîncarcă…',
backupImportError: 'Fișier de backup invalid sau corupt.',
shortcutsReset: 'Resetează la implicite',
shortcutListening: 'Apasă o tastă…',
shortcutUnbound: '—',
globalShortcutsTitle: 'Scurtături globale',
globalShortcutsNote: 'Funcționează la nivel de sistem și când Psysonic este în fundal. Necesită Ctrl, Alt, sau Super ca un modificator.',
shortcutClear: 'Golește',
shortcutPlayPause: 'Redă / Pauză',
shortcutNext: 'Următoarea piesă',
shortcutPrev: 'Piesa anterioară',
shortcutVolumeUp: 'Ridică volumul',
shortcutVolumeDown: 'Coboară volumul',
shortcutSeekForward: 'Dă înainte 10s',
shortcutSeekBackward: 'Dă înapoi 10s',
shortcutToggleQueue: 'Comutați coada',
shortcutOpenFolderBrowser: 'Deschide {{folderBrowser}}',
shortcutFullscreenPlayer: 'Player pe ecran complet',
shortcutNativeFullscreen: 'Ecran complet nativ',
shortcutOpenMiniPlayer: 'Deschide mini player',
shortcutStartSearch: 'Începe o căutare',
shortcutStartAdvancedSearch: 'Începe o căutare avansată',
shortcutToggleSidebar: 'Comutați bara laterală',
shortcutMuteSound: 'Opriți sunetul',
shortcutToggleEqualizer: 'Porniți / Comutați Egalizatorul',
shortcutToggleRepeat: 'Comutați repetarea',
shortcutOpenNowPlaying: 'Deschide "Now Playing"',
shortcutShowLyrics: 'Arată Versurile',
shortcutFavoriteCurrentTrack: 'Adaugă piesa curentă la favorite',
shortcutOpenHelp: 'Ajutor',
playbackTitle: 'Redare',
replayGain: 'Replay Gain',
replayGainDesc: 'Normalizează volumul pieselor folosind metadata ReplayGain',
replayGainMode: 'Mod',
replayGainAuto: 'Auto',
replayGainAutoDesc: 'Alege volumul albumului când piesele vecine din coadă sunt din același album, altfel volumul piesei.',
replayGainTrack: 'Piesă',
replayGainAlbum: 'Album',
replayGainPreGain: 'Pre-Gain (fișiere etichetate)',
replayGainPreGainDesc: 'Boost universal adăugat peste fiecare calculare ReplayGain. Folosește pentru a compensa dacă librăria ta se simte prea liniștită per total.',
replayGainFallback: 'Rezervă (neetichetat / radio)',
replayGainFallbackDesc: 'Aplicat la piesele (și stream-urile radio) care nu au tag-uri ReplayGain deloc, pentru ca conținutul neetichetat să nu se audă mai gălăgios decât restul.',
normalization: 'Normalizare',
normalizationDesc: 'Aliniază volumul perceput peste piese, albume și radio.',
normalizationOff: 'Oprit',
normalizationReplayGain: 'ReplayGain',
normalizationLufs: 'LUFS',
loudnessTargetLufs: 'Țintă LUFS',
loudnessTargetLufsDesc: 'Volumul de referință la care toate piesele sunt ajustate. Numere mai mici = volum mai mare. Serviciile de streaming sunt setate în mod obișnuit la -14 LUFS.',
loudnessPreAnalysisAttenuation: 'Atenuare pre-analiză',
loudnessPreAnalysisAttenuationDesc:
'Extra coborâre a volumului până când nivelul pentru această piesă este salvat. Streaming apoi folosește presupuneri aproximative, nu o măsurătoare completă. 0 dB = oprit; mai jos = mai încet. Numărul din dreapta este nivelul dB efectif pentru ținta curentă.',
loudnessPreAnalysisAttenuationRef: '{{eff}} dB efectiv cu ținta {{tgt}} LUFS.',
loudnessPreAnalysisAttenuationReset: 'Resetează la implicit',
loudnessFirstPlayNote:
'Prima redate a unei piese noi își poate schimba brusc volumul cât este măsurată. Următoarea redare folosește măsurătoarea stocată și este stabilă. Piesele următoare din coadă sunt de obicei pre-analizate în timpul piesei anterioare, deci acest fenomen se întâmplă rar în practică.',
crossfade: 'Crossfade',
crossfadeDesc: 'Estompează între piese',
crossfadeSecs: '{{n}} s',
notWithGapless: 'Nu este valabil cât Gapless este activ',
notWithCrossfade: 'Nu este valabil cât Crossfade este activ',
gapless: 'Playback Gapless',
gaplessDesc: 'Pre-încarcă următoarea piesă pentru a elimina spațiile dintre piese',
preservePlayNextOrder: 'Prezervă ordinea "Redă următoarea"',
preservePlayNextOrderDesc: 'Elementele Redă Următoarea noi adăugate sunt puse după cele adăugate mai devreme în loc să sară în față.',
trackPreviewsTitle: 'Previzualizări Piese',
trackPreviewsToggle: 'Pornește previzualizările pieselor',
trackPreviewsDesc: 'Arată butoanele de Redare și Pre-vizualizare în rând în listele de piese pentru o mostră rapidă din mijlocul piesei.',
trackPreviewStart: 'Poziția de începere',
trackPreviewStartDesc: 'Cât de departe în piesă să înceapă pre-vizualizarea (% din lungimea piesei).',
trackPreviewDuration: 'Durată',
trackPreviewDurationDesc: 'Cât de mult se redă fiecare pre-vizualizare până se oprește.',
trackPreviewDurationSecs: '{{n}} s',
trackPreviewLocationsTitle: 'Unde apar pre-vizualizările',
trackPreviewLocationsDesc: 'Alege ce liste arată butoanele de pre-vizualizare în linie.',
trackPreviewLocation_suggestions: 'Sugestii în playlist',
trackPreviewLocation_albums: 'Liste de piese în album',
trackPreviewLocation_playlists: 'În playlist-uri',
trackPreviewLocation_favorites: 'În favorite',
trackPreviewLocation_artist: 'În top piese ale artistului',
trackPreviewLocation_randomMix: 'În Mixul Aleatoriu',
preloadMode: 'Preîncarcă Următoarea Piesă',
preloadModeDesc: 'Când să înceapă preîncărcarea următoarei piese din coadă',
nextTrackBufferingTitle: 'Preîncarcă',
preloadHotCacheMutualExclusive: 'Preîncarcarea și Hot Cache au același scop — doar una poate fi activată deodată. Pornirea unei opțiuni o dezactivează pe cealaltă.',
preloadOff: 'Oprit',
preloadBalanced: 'Balansat (30 s înainte de sfârșit)',
preloadEarly: 'Devreme (după 5 s de redare)',
preloadCustom: 'Personalizat',
preloadCustomSeconds: 'Secunde înainte de sfârșit: {{n}}',
infiniteQueue: 'Coadă Infinită',
infiniteQueueDesc: 'Adaugă automat piese aleatorii când coada se golește',
experimental: 'Experimental',
fsPlayerSection: 'Player pe ecran complet',
fsLyricsStyle: 'Stilul versurilor',
fsLyricsStyleRail: 'Șină',
fsLyricsStyleRailDesc: 'Șină clasica pe 5 linii.',
fsLyricsStyleApple: 'Derulare',
fsLyricsStyleAppleDesc: 'Listă în derulare pe ecran complet.',
sidebarLyricsStyle: 'Stilul derulării versurilor',
sidebarLyricsStyleClassic: 'Clasic',
sidebarLyricsStyleClassicDesc: 'Derulează linia activă în centru.',
sidebarLyricsStyleApple: 'Ca Apple Music',
sidebarLyricsStyleAppleDesc: 'Linia activă este ancorată aproape de vârf cu animații netede.',
fsShowArtistPortrait: 'Arată poza artisului',
fsShowArtistPortraitDesc: 'Arată poza artistului (sau arta albumului) în partea dreaptă a playerului pe ecran complet.',
fsPortraitDim: 'Estomparea fotografiei',
seekbarStyle: 'Stilul barei de redare',
seekbarStyleDesc: 'Alege aspectul barei de redare a playerului',
seekbarTruewave: 'Truewave',
seekbarPseudowave: 'Pseudowave',
seekbarLinedot: 'Linie & Punct',
seekbarBar: 'Bară',
seekbarThick: 'Bară groasă',
seekbarSegmented: 'Segmentat',
seekbarNeon: 'Strălucire Neon',
seekbarPulsewave: 'Undă de Puls',
seekbarParticletrail: 'Urmă de Particule',
seekbarLiquidfill: 'Lichid',
seekbarRetrotape: 'Bandă Retro',
themeSchedulerTitle: 'Schimbă Tema automat',
themeSchedulerEnable: 'Pornește temele programate',
themeSchedulerEnableSub: 'Schimbă automat între două teme pe baza orei din zi',
themeSchedulerDayTheme: 'Temă de zi',
themeSchedulerDayStart: 'Ziua începe la',
themeSchedulerNightTheme: 'Temă de noapte',
themeSchedulerNightStart: 'Noaptea începe la',
themeSchedulerActiveHint: 'Temele programate sunt active - aceste schimbări de teme sunt gestionate automat.',
visualOptionsTitle: 'Opțiuni vizuale',
coverArtBackground: 'Arta de fundal a copertei',
coverArtBackgroundSub: 'Arată arta de copertă blurată ca fundal în antetele albumelor/playlisturilor',
playlistCoverPhoto: 'Poza de copertă a playlistului',
playlistCoverPhotoSub: 'Arată poza grilă de copertă în afișajul de detalii al playlistului',
showBitrate: 'Arată Bitrate',
showBitrateSub: 'Arată bitrate-ul audio în listările de piese',
floatingPlayerBar: 'Bară Player plutitoare',
floatingPlayerBarSub: 'Păstrează bara playerului plutind deasupra conținutului',
uiScaleTitle: 'Scara interfaței',
uiScaleLabel: 'Zoom',
};
+18
View File
@@ -0,0 +1,18 @@
export const sharePaste = {
notLoggedIn: 'Loghează-te și adaugă serverul înainte de a lipi link-ul distribuit.',
noMatchingServer: 'Niciun server nu corespunde cu acest link. Adaugă un server cu această adresă: {{url}}',
trackUnavailable: 'Această piesă nu a fost găsită în server.',
albumUnavailable: 'Acest album nu a fost găsit în server.',
artistUnavailable: 'Acest artist nu a fost găsit în server.',
composerUnavailable: 'Acest compozitor nu a fost găsit pe server.',
openedTrack: 'Se redă piesa distribuită.',
openedAlbum: 'Se deschide albumul distribuit.',
openedArtist: 'Se deschide artistul distribuit.',
openedComposer: 'Se deschide compozitorul distribuit.',
openedQueue_one: 'Se redă {{count}} piesă din link-ul distribuit.',
openedQueue_other: 'Se redau {{count}} piese din link-ul distribuit.',
openedQueuePartial:
'Se redau {{played}} din {{total}} piese din link ({{skipped}} nu au fost găsite în server).',
queueAllUnavailable: 'Nicio piesă din acest link nu a fost găsită în server.',
genericError: 'Nu s-a putut deschide link-ul distribuit.',
};
+39
View File
@@ -0,0 +1,39 @@
export const sidebar = {
library: 'Librărie',
mainstage: 'Scena Principală',
newReleases: 'Lansări Noi',
allAlbums: 'Toate Albumele',
randomAlbums: 'Albume Aleatorii',
randomPicker: 'Construiește un Mix',
artists: 'Artiști',
composers: 'Compozitori',
randomMix: 'Mix Aleatoriu',
favorites: 'Favorite',
nowPlaying: 'Se Redă Acum',
system: 'Sistem',
statistics: 'Statistici',
settings: 'Setări',
help: 'Ajutor',
expand: 'Extinde bara laterală',
collapse: 'Restrânge bara laterală',
downloadingTracks: 'Se descarcă {{n}} piese…',
syncingTracks: 'Se sincronizează {{done}}/{{total}}…',
cancelDownload: 'Anulează descărcarea',
offlineLibrary: 'Librărie Offline',
genres: 'Genuri',
tracks: 'Piese',
playlists: 'Playlisturi',
smartPlaylists: 'Playlisturi Smart',
mostPlayed: 'Cele mai Redate',
losslessAlbums: 'Lossless',
radio: 'Radio Internet',
folderBrowser: 'Browser de foldere',
deviceSync: 'Sincronizare Dispozitive',
libraryScope: 'Domeniul bibliotecii',
allLibraries: 'Toate librăriile',
expandPlaylists: 'Extinde playlisturi',
collapsePlaylists: 'Restrânge playlisturi',
more: 'Mai mult',
feelingLucky: 'Mix Norocos',
};
+41
View File
@@ -0,0 +1,41 @@
export const smartPlaylists = {
sectionBasic: '1. De bază',
sectionGenres: '2. Genuri',
sectionYearsAndFilters: '3. Ani și filtre',
genreMode: 'Mod gen',
genreModeInclude: 'Include genuri',
genreModeExclude: 'Exclude genuri',
genreSearchPlaceholder: 'Filtrează genuri...',
availableGenres: 'Disponibil',
selectedGenres: 'Selectat',
yearMode: 'Mod an',
yearModeInclude: 'Include distanță',
yearModeExclude: 'Exclude distanță',
name: 'Nume (fără prefix)',
limit: 'Limită',
limitHint: 'Cât de multe piese să fie incluse în playlist (1-{{max}}, de obicei 50).',
artistContains: 'Artistul conține…',
albumContains: 'Albumul conține…',
titleContains: 'Titlul conține…',
minRating: 'Rating minim',
minRatingAria: 'Rating minim pentru playlist inteligent',
minRatingHint: '0 dezactivează limita minimă; 1-5 păstrează piesele cu rating peste valoarea selectată.',
fromYear: 'Din anul',
toYear: 'Până la anul',
excludeUnrated: 'Exclude piesele fără rating',
compilationOnly: 'Doar compilații',
create: 'Nou Playlist Inteligent',
save: 'Salvează Playlist Inteligent',
created: 'Creat {{name}}',
updated: 'Actualizat {{name}}',
createFailed: 'Nu s-a putut crea playlistul inteligent.',
updateFailed: 'Nu s-a putut actualiza playlistul inteligent.',
navidromeOnly: 'Playlisturile inteligente pot fi create doar pe servere Navidrome.',
loadFailed: 'Nu s-a putut încărca playlistul inteligent din Navidrome.',
sortRandom: 'Sortează: aleatoriu',
sortTitleAsc: 'Sortează: titlu A-Z',
sortTitleDesc: 'Sortează: titlu Z-A',
sortYearDesc: 'Sortează: an desc',
sortYearAsc: 'Sortează: an asc',
sortPlayCountDesc: 'Sortează: număr de redări desc',
};
+23
View File
@@ -0,0 +1,23 @@
export const songInfo = {
title: 'Informație piesă',
songTitle: 'Titlu',
artist: 'Artist',
album: 'Album',
albumArtist: 'Artist Album',
year: 'An',
genre: 'Gen',
duration: 'Durată',
track: 'Piesă',
format: 'Format',
bitrate: 'Bitrate',
sampleRate: 'Rată de Sample',
bitDepth: 'Adâncimea Biților',
channels: 'Canale',
fileSize: 'Mărime fișier',
path: 'Cale',
replayGainTrack: 'RG Gain Piesă',
replayGainAlbum: 'RG Gain Album',
replayGainPeak: 'RG Vârf Piesă',
mono: 'Mono',
stereo: 'Stereo',
};
+65
View File
@@ -0,0 +1,65 @@
export const statistics = {
title: 'Statistici',
recentlyPlayed: 'Redate recent',
mostPlayed: 'Cele mai Redate Albume',
highestRated: 'Cele mai Votate Albume',
genreDistribution: 'Distribuția de Genuri (Top 20)',
loadMore: 'Încearcă mai mult',
statArtists: 'Artiști',
statArtistsTooltip: 'Doar albume de artiști — artiștii care apar doar ca un artist la nivel de piesă (prezentate, oaspete, etc.) fără albumul lor nu sunt incluși.',
statAlbums: 'Albume',
statSongs: 'Piese',
statGenres: 'Genuri',
statPlaytime: 'Timpul total de redare',
genreInsights: 'Perspectivele Genurilor',
formatDistribution: 'Distribuția Formatului',
formatSample: 'Eșantion de {{n}} piese',
computing: 'Se calculează…',
genreSongs: '{{count}} Piese',
genreAlbums: '{{count}} Albume',
recentlyAdded: 'Adăugate recent',
decadeDistribution: 'Albume după Deceniu',
decadeAlbums_one: '{{count}} Album',
decadeAlbums_other: '{{count}} Albume',
decadeUnknown: 'Necunoscut',
lfmTitle: 'Statistici Last.fm',
lfmTopArtists: 'Artiști de top',
lfmTopAlbums: 'Albume de top',
lfmTopTracks: 'Piese de top',
lfmPlays: '{{count}} redări',
lfmPeriodOverall: 'Din tot timpul',
lfmPeriod7day: '7 Zile',
lfmPeriod1month: '1 Lună',
lfmPeriod3month: '3 Luni',
lfmPeriod6month: '6 Luni',
lfmPeriod12month: '12 Luni',
lfmNotConnected: 'Conectează Last.fm în Setări pentru a îți vedea statisticile.',
lfmRecentTracks: 'Scrobble-uri Recente',
lfmNowPlaying: 'Now Playing',
lfmJustNow: 'tocmai acum',
lfmMinutesAgo: 'acum {{n}}m',
lfmHoursAgo: 'acum {{n}}h',
lfmDaysAgo: 'acum {{n}}d',
topRatedSongs: 'Cele mai bine cotate Piese',
topRatedArtists: 'Cei mai bine cotați Artiști',
noRatedSongs: 'Nicio piesă evaluată încă. Evaluează piese în afișajul de album sau playlist.',
noRatedArtists: 'Niciun artist evaluat încă.',
exportShare: 'Distribuie',
exportTitle: 'Distribuie Albumele din Top',
exportSubtitle: 'Generează o imagine distribuibilă cu cele mai redate albume ale tale.',
exportFormat: 'Format',
exportFormatStory: 'Poveste',
exportFormatSquare: 'Pătrat',
exportFormatTwitter: 'Card Twitter',
exportGrid: 'Grilă',
exportGridLabel: '{{n}}×{{n}}',
exportPreview: 'Previzualizare',
exportGenerate: 'Generează',
exportSave: 'Salvează imaginea…',
exportCancel: 'Anulează',
exportFooterLabel: 'Top Albume',
exportNotEnough: 'Ai nevoie de cel puțin {{count}} albume în librăria ta pentru o grilă {{n}}×{{n}}.',
exportSaving: 'Se salvează…',
exportSaved: 'Salvat.',
exportSaveFailed: 'Nu s-a putut salva imaginea.',
};
+15
View File
@@ -0,0 +1,15 @@
export const tracks = {
title: 'Piese',
subtitle: 'Răsfoiește. Caută. Descoperă.',
heroEyebrow: 'Piesa momentului',
heroReroll: 'Alege alta',
playSong: 'Redă',
enqueueSong: 'Adaugă în coadă',
railRandom: 'Alegere aleatorie',
railHighlyRated: 'Foarte apreciate',
browseTitle: 'Caută toate piesele',
browseUnsupported: "Acest server nu afișează toată librăria deodată. Folosește căutarea de mai sus pentru a găsi piese specifice.",
searchPlaceholder: 'Găsește o piesă după titlu, artist sau album…',
count_one: '{{count}} piesă',
count_other: '{{count}} piese',
};
+8
View File
@@ -0,0 +1,8 @@
export const tray = {
playPause: 'Redă / Pauză',
nextTrack: 'Următoarea Piesă',
previousTrack: 'Piesa Anterioară',
showHide: 'Arată / Ascunde',
exitPsysonic: 'Ieși din Psysonic',
nothingPlaying: 'Nimic nu este redat',
};
+8
View File
@@ -0,0 +1,8 @@
export const whatsNew = {
title: "Ce este nou",
empty: 'Nicio intrare în lista de schimbări pentru această versiune încă.',
bannerTitle: 'Lista de schimbări',
bannerCollapsed: "Ce este nou în v{{version}}",
dismiss: 'Respinge',
close: 'Închide',
};