mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 23:35:44 +00:00
feat(i18n): add Italian translation (#1250)
Full Italian (Italiano) UI translation, selectable from the language picker on the Settings and Login screens.
This commit is contained in:
@@ -81,6 +81,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
* A third **Fullscreen player style**, **Prism** — a full-bleed artist backdrop with a floating glass lyrics panel on the right and a single glass control bar at the bottom (transport, a centred now-playing pill with an integrated progress line, and utilities). The cover-derived accent colour drives the progress fill and the active lyric line, and upcoming lyric lines fade out with a progressive blur.
|
* A third **Fullscreen player style**, **Prism** — a full-bleed artist backdrop with a floating glass lyrics panel on the right and a single glass control bar at the bottom (transport, a centred now-playing pill with an integrated progress line, and utilities). The cover-derived accent colour drives the progress fill and the active lyric line, and upcoming lyric lines fade out with a progressive blur.
|
||||||
|
|
||||||
|
### Italian translation
|
||||||
|
|
||||||
|
**By [@daquino94](https://github.com/daquino94), PR [#1250](https://github.com/Psychotoxical/psysonic/pull/1250)**
|
||||||
|
|
||||||
|
* Full Italian (Italiano) UI translation — selectable from the language picker on the Settings and Login screens.
|
||||||
|
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
|
|||||||
@@ -449,6 +449,13 @@ const CONTRIBUTOR_ENTRIES = [
|
|||||||
'Bulgarian (bg) full UI translation (PR #1228)',
|
'Bulgarian (bg) full UI translation (PR #1228)',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
github: 'daquino94',
|
||||||
|
since: '1.50.0',
|
||||||
|
contributions: [
|
||||||
|
'Italian (it) full UI translation (PR #1250)',
|
||||||
|
],
|
||||||
|
},
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
// PR number of a contributor's first listed contribution, used as the
|
// PR number of a contributor's first listed contribution, used as the
|
||||||
|
|||||||
@@ -303,6 +303,7 @@ export default function Login() {
|
|||||||
{ value: 'de', label: t('settings.languageDe') },
|
{ value: 'de', label: t('settings.languageDe') },
|
||||||
{ value: 'es', label: t('settings.languageEs') },
|
{ value: 'es', label: t('settings.languageEs') },
|
||||||
{ value: 'fr', label: t('settings.languageFr') },
|
{ value: 'fr', label: t('settings.languageFr') },
|
||||||
|
{ value: 'it', label: t('settings.languageIt') },
|
||||||
{ value: 'nl', label: t('settings.languageNl') },
|
{ value: 'nl', label: t('settings.languageNl') },
|
||||||
{ value: 'nb', label: t('settings.languageNb') },
|
{ value: 'nb', label: t('settings.languageNb') },
|
||||||
{ value: 'ru', label: t('settings.languageRu') },
|
{ value: 'ru', label: t('settings.languageRu') },
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ export function SystemTab() {
|
|||||||
{ value: 'de', label: t('settings.languageDe') },
|
{ value: 'de', label: t('settings.languageDe') },
|
||||||
{ value: 'es', label: t('settings.languageEs') },
|
{ value: 'es', label: t('settings.languageEs') },
|
||||||
{ value: 'fr', label: t('settings.languageFr') },
|
{ value: 'fr', label: t('settings.languageFr') },
|
||||||
|
{ value: 'it', label: t('settings.languageIt') },
|
||||||
{ value: 'nl', label: t('settings.languageNl') },
|
{ value: 'nl', label: t('settings.languageNl') },
|
||||||
{ value: 'nb', label: t('settings.languageNb') },
|
{ value: 'nb', label: t('settings.languageNb') },
|
||||||
{ value: 'ru', label: t('settings.languageRu') },
|
{ value: 'ru', label: t('settings.languageRu') },
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import { initReactI18next } from 'react-i18next';
|
|||||||
import { deTranslation } from '@/locales/de';
|
import { deTranslation } from '@/locales/de';
|
||||||
import { enTranslation } from '@/locales/en';
|
import { enTranslation } from '@/locales/en';
|
||||||
import { frTranslation } from '@/locales/fr';
|
import { frTranslation } from '@/locales/fr';
|
||||||
|
import { itTranslation } from '@/locales/it';
|
||||||
import { zhTranslation } from '@/locales/zh';
|
import { zhTranslation } from '@/locales/zh';
|
||||||
import { nbTranslation } from '@/locales/nb';
|
import { nbTranslation } from '@/locales/nb';
|
||||||
import { ruTranslation } from '@/locales/ru';
|
import { ruTranslation } from '@/locales/ru';
|
||||||
@@ -24,6 +25,7 @@ i18n
|
|||||||
de: { translation: deTranslation },
|
de: { translation: deTranslation },
|
||||||
es: { translation: esTranslation },
|
es: { translation: esTranslation },
|
||||||
fr: { translation: frTranslation },
|
fr: { translation: frTranslation },
|
||||||
|
it: { translation: itTranslation },
|
||||||
nl: { translation: nlTranslation },
|
nl: { translation: nlTranslation },
|
||||||
zh: { translation: zhTranslation },
|
zh: { translation: zhTranslation },
|
||||||
nb: { translation: nbTranslation },
|
nb: { translation: nbTranslation },
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export const settings = {
|
|||||||
languageHu: 'Magyar',
|
languageHu: 'Magyar',
|
||||||
languagePl: 'Polski',
|
languagePl: 'Polski',
|
||||||
languageBg: 'Български',
|
languageBg: 'Български',
|
||||||
|
languageIt: 'Italiano',
|
||||||
font: 'Шрифт',
|
font: 'Шрифт',
|
||||||
fontHintOpenDyslexic: 'Подходящ за дислексия · без поддръжка на китайски',
|
fontHintOpenDyslexic: 'Подходящ за дислексия · без поддръжка на китайски',
|
||||||
theme: 'Тема',
|
theme: 'Тема',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
export const albumDetail = {
|
||||||
|
back: 'Indietro',
|
||||||
|
orbitDoubleClickHint: 'Doppio-click per aggiungere questo brano alla coda Orbit',
|
||||||
|
playAll: 'Riproduci tutto',
|
||||||
|
shareAlbum: 'Condividi album',
|
||||||
|
enqueue: 'Accoda',
|
||||||
|
enqueueTooltip: 'Aggiungi l\'album alla coda',
|
||||||
|
artistBio: 'Biografia artista',
|
||||||
|
download: 'Scarica (ZIP)',
|
||||||
|
playTooltip: 'Riproduci questo album',
|
||||||
|
artistBioTooltip: 'Leggi la biografia artista',
|
||||||
|
downloadTooltip: 'Scarica l\'album come ZIP',
|
||||||
|
downloading: 'Caricamento…',
|
||||||
|
cacheOffline: 'Rendi disponibile offline',
|
||||||
|
offlineCached: 'Disponibile offline',
|
||||||
|
offlineQueued: 'In coda',
|
||||||
|
offlineDownloading: 'Caching… ({{n}}/{{total}})',
|
||||||
|
removeOffline: 'Rimuovi dalla cache offline',
|
||||||
|
removeFromOfflineQueue: 'Rimuovi dalla coda offline',
|
||||||
|
offlineStorageFull: 'Memoria offline piena (limite: {{mb}} MB). Libera spazio cancellando alcuni album dalla tua libreria offline, o aumenta il limite dalle impostazioni.',
|
||||||
|
offlineStorageGoToLibrary: 'Libreria Offline',
|
||||||
|
offlineStorageGoToSettings: 'Impostazioni',
|
||||||
|
favoriteAdd: 'Aggiungi ai preferiti',
|
||||||
|
favoriteRemove: 'Rimuovi dai Preferiti',
|
||||||
|
favorite: 'Preferiti',
|
||||||
|
noBio: 'Nessuna biografia disponibile.',
|
||||||
|
moreByArtist: 'Altro di {{artist}}',
|
||||||
|
tracksCount: '{{n}} Brani',
|
||||||
|
goToArtist: 'Vai a {{artist}}',
|
||||||
|
moreLabelAlbums: 'Altri album su {{label}}',
|
||||||
|
moreGenreAlbums: 'Altri album {{genre}}',
|
||||||
|
genresModalTitle: 'Generi',
|
||||||
|
showAllGenres: 'Mostra tutti i generi',
|
||||||
|
trackTitle: 'Titolo',
|
||||||
|
trackAlbum: 'Album',
|
||||||
|
trackArtist: 'Artista',
|
||||||
|
trackGenre: 'Genere',
|
||||||
|
trackPlayCount: 'Riprodotto',
|
||||||
|
trackLastPlayed: 'Ultima Riproduzione',
|
||||||
|
trackBpm: 'BPM',
|
||||||
|
trackFormat: 'Formato',
|
||||||
|
trackFavorite: 'Preferito',
|
||||||
|
trackRating: 'Valutazione',
|
||||||
|
trackDuration: 'Durata',
|
||||||
|
trackTotal: 'Totale',
|
||||||
|
columns: 'Colonne',
|
||||||
|
resetColumns: 'Ripristina predefinite',
|
||||||
|
notFound: 'Album non trovato.',
|
||||||
|
bioModal: 'Biografia Artista',
|
||||||
|
bioClose: 'Chiudi',
|
||||||
|
ratingLabel: 'Valuta',
|
||||||
|
enlargeCover: 'Ingrandisci',
|
||||||
|
filterSongs: 'Filtra canzoni…',
|
||||||
|
sortNatural: 'Naturale',
|
||||||
|
sortByTitle: 'A–Z (Titolo)',
|
||||||
|
sortByArtist: 'A–Z (Artisti)',
|
||||||
|
sortByAlbum: 'A–Z (Album)',
|
||||||
|
};
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
export const albums = {
|
||||||
|
title: 'Tutti gli Album',
|
||||||
|
sortByName: 'A–Z (Album)',
|
||||||
|
sortByArtist: 'A–Z (Artisti)',
|
||||||
|
sortByArtistYear: 'Artisti → Anno',
|
||||||
|
sortNewest: 'Prima i più recenti',
|
||||||
|
sortRandom: 'Casuale',
|
||||||
|
yearFrom: 'Da',
|
||||||
|
yearTo: 'a',
|
||||||
|
yearFilterClear: 'Cancella filtro per anno',
|
||||||
|
yearFilterLabel: 'Anno',
|
||||||
|
sortTooltip: 'Cambia l\'ordine di ordinamento',
|
||||||
|
yearFilterTooltip: 'Filtra per anno di rilascio',
|
||||||
|
compilationLabel: 'Compilation',
|
||||||
|
compilationOnly: 'Solo compilation',
|
||||||
|
compilationHide: 'Nascondi compilation',
|
||||||
|
compilationTooltipAll: 'Tutti gli album · click: solo compilation',
|
||||||
|
compilationTooltipOnly: 'Solo compilations · click: nascondi compilation',
|
||||||
|
compilationTooltipHide: 'Compilation nascoste · click: mostra tutte',
|
||||||
|
losslessLabel: 'Lossless',
|
||||||
|
losslessTooltipOn: 'Solo album Lossless · click per mostrarle tutte',
|
||||||
|
losslessTooltipOff: 'mostra lossless solo album',
|
||||||
|
select: 'Multi selezione',
|
||||||
|
startSelect: 'Abilita multi selezione',
|
||||||
|
cancelSelect: 'Cancella',
|
||||||
|
selectionCount: '{{count}} selezionati',
|
||||||
|
downloadZips: 'Scarica ZIP',
|
||||||
|
addOffline: 'Aggiungi all\'Offline',
|
||||||
|
enqueueSelected_one: 'accodato ({{count}})',
|
||||||
|
enqueueSelected_other: 'accodati ({{count}})',
|
||||||
|
enqueueQueued_one: 'Aggiunto {{count}} album alla coda',
|
||||||
|
enqueueQueued_other: 'Aggiunti {{count}} album alla coda',
|
||||||
|
downloadingZip: 'download {{current}}/{{total}}: {{name}}',
|
||||||
|
downloadZipDone: '{{count}} ZIP scaricati',
|
||||||
|
downloadZipFailed: 'Errore nel download {{name}}',
|
||||||
|
offlineQueuing: 'Accodamento di {{count}} album per l\'uso offline…',
|
||||||
|
offlineFailed: 'Errore nell\' aggiunta {{name}} offline',
|
||||||
|
noFavorites: 'Nessun album preferito corrisponde ai filtri attuali.',
|
||||||
|
noCompilations: 'Nessuna compilation corrisponde ai filtri attualmente selezionati.',
|
||||||
|
noMatchingFilters: 'Nessun album corrisponde ai filtri attuali.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
export const artistDetail = {
|
||||||
|
back: 'Indietro',
|
||||||
|
albums: 'Album',
|
||||||
|
album: 'Album',
|
||||||
|
playAll: 'Riproduci tutto',
|
||||||
|
shareArtist: 'Condividi artista',
|
||||||
|
shuffle: 'Casuale',
|
||||||
|
radio: 'Radio',
|
||||||
|
lastfmTooltip: 'Apri l\'artista su Last.fm',
|
||||||
|
wikipediaTooltip: 'Apri l\'artista su Wikipedia',
|
||||||
|
playAllTooltip: 'Ascolta tutta la discografia',
|
||||||
|
shuffleTooltip: 'Mescola tutta la discografia',
|
||||||
|
radioTooltip: 'Crea una radio basata su questo artista',
|
||||||
|
loading: 'Caricamento…',
|
||||||
|
noRadio: 'Non sono stati trovati brani simili per questo artista.',
|
||||||
|
notFound: 'Artista non trovato.',
|
||||||
|
albumsBy: 'Album di {{name}}',
|
||||||
|
albumsByLossless: 'Album Lossless di {{name}}',
|
||||||
|
sortYearToggleAria: 'Attiva/disattiva ordinamento per anno all\'interno di ogni tipo di uscita',
|
||||||
|
sortYearDesc: 'Anno, dai più recenti ai più vecchi',
|
||||||
|
sortYearAsc: 'Anno, dal più vecchio al più recente',
|
||||||
|
topTracks: 'Brani più ascoltati',
|
||||||
|
topTracksLossless: 'Brani Lossless',
|
||||||
|
noAlbums: 'Nessun album trovato.',
|
||||||
|
trackTitle: 'titolo',
|
||||||
|
trackAlbum: 'Album',
|
||||||
|
trackDuration: 'Durata',
|
||||||
|
favoriteAdd: 'Aggiungi ai preferiti',
|
||||||
|
favoriteRemove: 'Rimuovi dai preferiti',
|
||||||
|
favorite: 'Preferiti',
|
||||||
|
albumCount_one: '{{count}} Album',
|
||||||
|
albumCount_other: '{{count}} Album',
|
||||||
|
openedInBrowser: 'Aperto nel browser',
|
||||||
|
featuredOn: 'Presente anche in',
|
||||||
|
similarArtists: 'Artisti Simili',
|
||||||
|
cacheOffline: 'Salva la discografia offline',
|
||||||
|
offlineCached: 'Discografia salvata nella cache',
|
||||||
|
offlineQueued: 'In coda',
|
||||||
|
offlineDownloading: 'Caching… ({{done}}/{{total}} album)',
|
||||||
|
uploadImage: 'Carica l\'immagine artista',
|
||||||
|
uploadImageError: 'Errore caricamento immagine',
|
||||||
|
releaseTypes: {
|
||||||
|
album: 'Album',
|
||||||
|
ep: 'EP',
|
||||||
|
single: 'Singoli',
|
||||||
|
compilation: 'Compilation',
|
||||||
|
live: 'Live',
|
||||||
|
soundtrack: 'Soundtrack',
|
||||||
|
remix: 'Remix',
|
||||||
|
other: 'Altro',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export const artists = {
|
||||||
|
title: 'Artisti',
|
||||||
|
search: 'Cerca…',
|
||||||
|
all: 'Tutti',
|
||||||
|
other: 'Altri',
|
||||||
|
gridView: 'Griglia',
|
||||||
|
listView: 'Lista',
|
||||||
|
imagesOn: 'Le immagini degli artisti presenti — potrebbero aumentare il carico sulla rete e sul sistema',
|
||||||
|
imagesOff: 'Immagini degli artisti disattivate — verranno visualizzate solo le iniziali',
|
||||||
|
loadMore: 'Carica altro',
|
||||||
|
notFound: 'Nessun artista trovato.',
|
||||||
|
albumCount_one: '{{count}} Album',
|
||||||
|
albumCount_other: '{{count}} Album',
|
||||||
|
selectionCount: '{{count}} selezionati',
|
||||||
|
select: 'Multi selezione',
|
||||||
|
startSelect: 'Abilita selezione multipla',
|
||||||
|
cancelSelect: 'Cancella',
|
||||||
|
addToPlaylist: 'Aggiungi alla Playlist',
|
||||||
|
browse: {
|
||||||
|
creditMode: {
|
||||||
|
album: 'Artisti degli album',
|
||||||
|
track: 'Artisti dei brani',
|
||||||
|
tooltipAlbum: 'Mostra solo gli artisti degli album (indice predefinito della libreria)',
|
||||||
|
tooltipTrack: 'Mostra tutti gli interpreti dei brani, inclusi gli ospiti nelle compilation',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export const changelog = {
|
||||||
|
modalTitle: "Novità",
|
||||||
|
dontShowAgain: "Non mostrare più",
|
||||||
|
close: 'Ho capito',
|
||||||
|
};
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
export const common = {
|
||||||
|
albums: 'Album',
|
||||||
|
album: 'Album',
|
||||||
|
loading: 'Caricamento…',
|
||||||
|
loadingMore: 'Caricamento…',
|
||||||
|
loadingPlaylists: 'Caricamento Playlist…',
|
||||||
|
noAlbums: 'Nessun album trovato.',
|
||||||
|
downloading: 'Scaricamento…',
|
||||||
|
downloadZip: 'scarica (ZIP)',
|
||||||
|
back: 'Indietro',
|
||||||
|
backToTop: 'Torna all\'inizio',
|
||||||
|
cancel: 'Annulla',
|
||||||
|
close: 'Chiudi',
|
||||||
|
save: 'Salva',
|
||||||
|
delete: 'Elimina',
|
||||||
|
use: 'Usa',
|
||||||
|
add: 'Aggiungi',
|
||||||
|
new: 'Nuovo',
|
||||||
|
active: 'Attivo',
|
||||||
|
download: 'Download',
|
||||||
|
chooseDownloadFolder: 'Scegli la cartella per il download',
|
||||||
|
noFolderSelected: 'Nessuna cartella selezionata',
|
||||||
|
rememberDownloadFolder: 'Ricorda questa cartella',
|
||||||
|
filterGenre: 'Filtro Genere',
|
||||||
|
filterGenreTooltip: 'Filtra per genere',
|
||||||
|
filterSearchGenres: 'Cerca generi…',
|
||||||
|
filterNoGenres: 'Nessun genere trovato',
|
||||||
|
filterClear: 'Pulisci',
|
||||||
|
favorites: 'Preferiti',
|
||||||
|
favoritesTooltipOff: 'Mostra solo preferiti',
|
||||||
|
favoritesTooltipOn: 'Mostra tutto',
|
||||||
|
play: 'Riproduci',
|
||||||
|
addToQueue: 'Aggiungi alla coda',
|
||||||
|
bulkSelected: '{{count}} selezionati',
|
||||||
|
clearSelection: 'Pulisci selezione',
|
||||||
|
bulkAddToPlaylist: 'Aggiungi alla Playlist',
|
||||||
|
bulkRemoveFromPlaylist: 'Rimuovi dalla Playlist',
|
||||||
|
bulkClear: 'Pulisci selezione',
|
||||||
|
updaterAvailable: 'Aggiornamento disponibile',
|
||||||
|
updaterVersion: 'v{{version}} è disponibile',
|
||||||
|
updaterWebsite: 'Sito internet',
|
||||||
|
updaterModalTitle: 'Nuova versione disponibile',
|
||||||
|
updaterChangelog: "Aggiornamenti",
|
||||||
|
updaterDownloadBtn: 'Scarica ora',
|
||||||
|
updaterSkipBtn: 'Salta questa versione',
|
||||||
|
updaterRemindBtn: 'Ricordamelo più tardi',
|
||||||
|
updaterDone: 'Download completato',
|
||||||
|
updaterShowFolder: 'Mostra nella cartella',
|
||||||
|
updaterInstallHint: 'chiudi Psysonic e installa manualmente.',
|
||||||
|
updaterAurHint: 'Installa aggiornamento tramite AUR:',
|
||||||
|
updaterWingetHint: 'O aggiorna tramite WinGet:',
|
||||||
|
updaterErrorMsg: 'Download fallito',
|
||||||
|
updaterRetryBtn: 'Riprova',
|
||||||
|
updaterInstallNow: 'Installa ora',
|
||||||
|
updaterMacReadyTitle: 'Pronto per l\'installazione',
|
||||||
|
updaterMacReady: 'L\'aggiornamento verrà scaricato, verificato e applicato direttamente sul dispositivo, senza bisogno di file DMG. Al termine dell\'operazione, l\'app si riavvierà automaticamente.',
|
||||||
|
updaterTrustNotarized: 'Verificato da Apple',
|
||||||
|
updaterTrustSignature: 'Firma verificata',
|
||||||
|
updaterMacDoneTitle: 'Aggiornamento installato',
|
||||||
|
updaterRestartingIn: 'riavvio in {{n}}s…',
|
||||||
|
updaterRestarting: 'Riavvio…',
|
||||||
|
updaterRestartNow: 'Riavvia ora',
|
||||||
|
durationHoursMinutes: '{{hours}}h {{minutes}}m',
|
||||||
|
durationMinutesOnly: '{{minutes}}m',
|
||||||
|
updaterOpenGitHub: 'Apri in GitHub',
|
||||||
|
filters: 'Filtri',
|
||||||
|
more: 'altro',
|
||||||
|
yearRange: 'Intervallo anni',
|
||||||
|
clearAll: 'Pulisci tutto',
|
||||||
|
libraryEmpty: 'La libreria è vuota.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
export const composerDetail = {
|
||||||
|
back: 'Indietro',
|
||||||
|
notFound: 'Compositore non trovato.',
|
||||||
|
about: 'Altro su questo compositore',
|
||||||
|
works: 'Lavori',
|
||||||
|
noWorks: 'Nessun lavoro trovato.',
|
||||||
|
workCount_one: '{{count}} lavoro',
|
||||||
|
workCount_other: '{{count}} lavori',
|
||||||
|
shareComposer: 'Condividi compositore',
|
||||||
|
unknownComposer: 'Compositore',
|
||||||
|
};
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
export const composers = {
|
||||||
|
title: 'Compositori',
|
||||||
|
search: 'Cerca…',
|
||||||
|
notFound: 'Nessun compositore trovato.',
|
||||||
|
unsupported: 'La funzionalità “Sfoglia per compositore” richiede Navidrome 0.55 o versioni successive.',
|
||||||
|
loadFailed: 'Impossibile caricare i compositori.',
|
||||||
|
retry: 'Riprova',
|
||||||
|
involvedIn_one: 'Ha partecipato a {{count}} album',
|
||||||
|
involvedIn_other: 'Ha partecipato a {{count}} album',
|
||||||
|
};
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
export const connection = {
|
||||||
|
connected: 'Connesso',
|
||||||
|
connectedTo: 'Connesso a {{server}}',
|
||||||
|
disconnected: 'Disconnesso',
|
||||||
|
disconnectedFrom: 'Impossibile raggiungere {{server}} — click per verificare le impostazioni',
|
||||||
|
checking: 'Connessione in corso…',
|
||||||
|
extern: 'Esterno',
|
||||||
|
offlineTitle: 'Nessuna connessione al server',
|
||||||
|
offlineSubtitle: 'Impossibile raggiungere {{server}}. Verifica la tua connessione o il server.',
|
||||||
|
offlineModeBanner: 'Modalità Offline — riproduzione dalla cache locale',
|
||||||
|
offlineNoCacheBanner: 'Nessuna connessione — Impossibile raggiungere {{server}}',
|
||||||
|
offlineLibraryTitle: 'Libreria Offline',
|
||||||
|
offlineLibraryDiskLabel: 'Sul disco',
|
||||||
|
offlineLibraryDiskUsage: 'sul disco: {{size}}',
|
||||||
|
offlineLibraryDiskUsageLoading: 'Sul disco …',
|
||||||
|
offlineLibraryDiskTierLibrary: 'Libreria Offline (media/libreria): {{size}}',
|
||||||
|
offlineLibraryDiskTierFavorites: 'Preferiti (media/preferiti): {{size}}',
|
||||||
|
offlineLibraryEmpty: 'Non ci sono ancora album salvati nella cache. Connettiti a Internet, apri un album e clicca su “Rendi disponibile offline”.',
|
||||||
|
offlinePlaybackUnavailable: 'I file locali relativi a questo album mancano o non sono indicizzati.',
|
||||||
|
offlineCachedOnServer: 'Su {{server}}',
|
||||||
|
offlineAlbumCount: '{{n}} album',
|
||||||
|
offlineAlbumCount_plural: '{{n}} album',
|
||||||
|
offlineFilterAll: 'Tutti',
|
||||||
|
offlineFilterAlbums: 'Album',
|
||||||
|
offlineFilterPlaylists: 'Playlist',
|
||||||
|
offlineFilterArtists: 'Discografie',
|
||||||
|
offlineCacheQueueTitle: 'Coda cache',
|
||||||
|
offlineCacheQueueSubtitle: '{{n}} Brani in media/cache — mescola e riproduci',
|
||||||
|
offlineCacheQueuePlayAria: 'Riproduci in ordine casuale tutti i brani memorizzati nella cache',
|
||||||
|
offlineFavoritesQueueTitle: 'Preferiti',
|
||||||
|
offlineFavoritesQueuePlayAria: 'Mescola e riproduci tutti i brani preferiti salvati offline',
|
||||||
|
retry: 'Riprova',
|
||||||
|
serverSettings: 'Impostazioni Server',
|
||||||
|
switchServerTitle: 'Cambia server',
|
||||||
|
switchServerHint: 'Clicca per scegliere un altro server.',
|
||||||
|
manageServers: 'gestisci i server…',
|
||||||
|
switchFailed: 'Impossibile cambiare — server non raggiungibile.',
|
||||||
|
queueSynced: 'La coda è sincronizzata con il server',
|
||||||
|
queuePullHint: 'Clicca per recuperare la coda di riproduzione da {{server}}',
|
||||||
|
queueLocalEditHint: 'La coda di riproduzione è stata modificata localmente — la sincronizzazione automatica è stata sospesa. Clicca per recuperare i dati dal server.',
|
||||||
|
queuePulling: 'Caricamento della coda di riproduzione in corso…',
|
||||||
|
queuePullSuccess: 'Coda di riproduzione aggiornata dal server',
|
||||||
|
queuePullEmpty: 'La coda di riproduzione del server è vuota',
|
||||||
|
queuePullFailed: 'Impossibile recuperare la coda di riproduzione dal server',
|
||||||
|
queuePullAria: 'Sincronizza la coda di riproduzione dal server',
|
||||||
|
};
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
export const contextMenu = {
|
||||||
|
playNow: 'Riproduci ora',
|
||||||
|
playNext: 'Riproduci dopo',
|
||||||
|
addToQueue: 'Aggiungi alla coda',
|
||||||
|
enqueueAlbum: 'Aggiungi album alla coda',
|
||||||
|
enqueueAlbums_one: 'Aggiungi {{count}} album alla coda',
|
||||||
|
enqueueAlbums_other: 'Aggiungi {{count}} album alla coda',
|
||||||
|
startRadio: 'Avvia radio',
|
||||||
|
instantMix: 'Mix istantaneo',
|
||||||
|
instantMixFailed: 'Impossibile creare il Mix istantaneo — errore del server o del plugin.',
|
||||||
|
cliMixNeedsTrack: 'Nessuna riproduzione in corso — avvia prima la riproduzione, poi esegui di nuovo il comando mix.',
|
||||||
|
networkLove: 'Metti "Like" su {{provider}}',
|
||||||
|
networkUnlove: 'Rimuovi "Like" su {{provider}}',
|
||||||
|
favorite: 'Preferito',
|
||||||
|
favoriteArtist: 'Artista preferito',
|
||||||
|
favoriteAlbum: 'Album preferito',
|
||||||
|
unfavorite: 'Rimuovi dai preferiti',
|
||||||
|
unfavoriteArtist: 'Rimuovi artista dai preferiti',
|
||||||
|
unfavoriteAlbum: 'Rimuovi album dai preferiti',
|
||||||
|
removeFromQueue: 'Rimuovi dalla coda',
|
||||||
|
removeFromPlaylist: 'Rimuovi dalla playlist',
|
||||||
|
openAlbum: 'Apri album',
|
||||||
|
goToArtist: 'Vai all\'artista',
|
||||||
|
download: 'Scarica (ZIP)',
|
||||||
|
addToPlaylist: 'Aggiungi alla playlist',
|
||||||
|
selectedPlaylists: '{{count}} playlist selezionate',
|
||||||
|
selectedAlbums: '{{count}} album selezionati',
|
||||||
|
selectedArtists: '{{count}} artisti selezionati',
|
||||||
|
songInfo: 'Informazioni brano',
|
||||||
|
shareLink: 'Copia link di condivisione',
|
||||||
|
shareCopied: 'Link di condivisione copiato negli appunti.',
|
||||||
|
shareCopyFailed: 'Impossibile copiare negli appunti.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
export const deviceSync = {
|
||||||
|
title: 'Sincronizzazione dispositivo',
|
||||||
|
targetFolder: 'Cartella di destinazione',
|
||||||
|
noFolderChosen: 'Nessuna cartella scelta',
|
||||||
|
selectDrive: 'Seleziona un\'unità…',
|
||||||
|
refreshDrives: 'Aggiorna unità',
|
||||||
|
noDrivesDetected: 'Nessuna unità rimovibile rilevata',
|
||||||
|
browseManual: 'Sfoglia manualmente…',
|
||||||
|
free: 'liberi',
|
||||||
|
notMountedVolume: 'La destinazione non si trova su un volume montato. L\'unità potrebbe essere stata scollegata.',
|
||||||
|
chooseFolder: 'Scegli…',
|
||||||
|
targetDevice: 'Dispositivo di destinazione',
|
||||||
|
schemaLabel: 'Schema di denominazione',
|
||||||
|
schemaHint: 'Schema fisso per una sincronizzazione affidabile tra sistemi operativi diversi. Le playlist vengono salvate come file .m3u8 che fanno riferimento ai brani dell\'album — nessun duplicato sul dispositivo.',
|
||||||
|
migrateButton: 'Riorganizza i file esistenti…',
|
||||||
|
migrateTooltip: 'Rinomina i file esistenti sul dispositivo secondo il nuovo schema (a partire dal vecchio modello di nome file).',
|
||||||
|
migrateTitle: 'Riorganizza i file esistenti',
|
||||||
|
migrateLoading: 'Analisi dei file esistenti…',
|
||||||
|
migrateNothingToDo: 'Tutti i file esistenti corrispondono già al nuovo schema — nulla da fare.',
|
||||||
|
migrateNoTemplate: 'Nessun modello di nome file precedente trovato sul dispositivo. La migrazione si applica solo se la chiavetta è stata sincronizzata con una versione di Psysonic che supportava modelli personalizzati.',
|
||||||
|
migrateFilesToRename: 'file verranno rinominati',
|
||||||
|
migrateUnchanged: '{{n}} file si trovano già nel percorso corretto',
|
||||||
|
migrateCollisions: '{{n}} file non possono essere rinominati automaticamente (più brani corrispondono alla stessa destinazione). Verranno lasciati invariati — la prossima sincronizzazione li scaricherà di nuovo nella posizione corretta.',
|
||||||
|
migratePreviewNote: 'Modello precedente: {{tpl}}',
|
||||||
|
migrateExecuting: 'Ridenominazione dei file…',
|
||||||
|
migrateSuccess: '{{n}} file rinominati correttamente',
|
||||||
|
migrateFailed: '{{n}} ridenominazioni non riuscite',
|
||||||
|
migrateShowErrors: 'Mostra errori',
|
||||||
|
migrateStart: 'Avvia ridenominazione',
|
||||||
|
onDevice: 'Gestione dispositivo',
|
||||||
|
addSources: 'Aggiungi…',
|
||||||
|
colName: 'Nome',
|
||||||
|
colType: 'Tipo',
|
||||||
|
colStatus: 'Stato',
|
||||||
|
syncResult: '{{done}} trasferiti, {{skipped}} già aggiornati ({{total}} totali)',
|
||||||
|
deleteFromDevice: 'Contrassegna per l\'eliminazione ({{count}})',
|
||||||
|
confirmDelete: 'Eliminare {{count}} elemento/i dal dispositivo: {{names}}?',
|
||||||
|
deleteComplete: '{{count}} elemento/i rimossi dal dispositivo.',
|
||||||
|
manifestImported: 'Importate {{count}} fonte/i dal manifesto del dispositivo.',
|
||||||
|
selectedSources: 'Fonti selezionate',
|
||||||
|
noSourcesSelected: 'Nessuna fonte selezionata. Clicca gli elementi nel browser per aggiungerli.',
|
||||||
|
clearAll: 'Cancella tutto',
|
||||||
|
tabPlaylists: 'Playlist',
|
||||||
|
tabAlbums: 'Album',
|
||||||
|
tabArtists: 'Artisti',
|
||||||
|
searchPlaceholder: 'Cerca…',
|
||||||
|
syncButton: 'Sincronizza sul dispositivo',
|
||||||
|
actionTransfer: 'Trasferisci sul dispositivo',
|
||||||
|
actionDelete: 'Elimina dal dispositivo',
|
||||||
|
actionApplyAll: 'Applica tutte le modifiche',
|
||||||
|
cancel: 'Annulla',
|
||||||
|
noTargetDir: 'Scegli prima una cartella di destinazione.',
|
||||||
|
noSources: 'Seleziona almeno una fonte.',
|
||||||
|
noTracks: 'Nessun brano trovato nelle fonti selezionate.',
|
||||||
|
fetchError: 'Impossibile recuperare i brani dal server.',
|
||||||
|
syncComplete: 'Sincronizzazione completata.',
|
||||||
|
dismiss: 'Ignora',
|
||||||
|
cancelSync: 'Annulla',
|
||||||
|
syncCancelled: 'Sincronizzazione annullata ({{done}} / {{total}} trasferiti).',
|
||||||
|
statusSynced: 'Sincronizzato',
|
||||||
|
statusPending: 'In attesa',
|
||||||
|
statusDeletion: 'Eliminazione',
|
||||||
|
markForDeletion: 'Contrassegna per l\'eliminazione',
|
||||||
|
undoDeletion: 'Annulla eliminazione',
|
||||||
|
removeSource: 'Rimuovi',
|
||||||
|
syncInBackground: 'Sincronizzazione avviata in background — puoi cambiare pagina.',
|
||||||
|
syncInProgress: '{{done}} / {{total}} brani…',
|
||||||
|
scanningDevice: 'Scansione del dispositivo…',
|
||||||
|
syncSummary: 'Riepilogo sincronizzazione',
|
||||||
|
calculating: 'Calcolo dei dati necessari…',
|
||||||
|
filesToAdd: 'File da aggiungere:',
|
||||||
|
filesToDelete: 'File da eliminare:',
|
||||||
|
netChange: 'Variazione netta:',
|
||||||
|
availableSpace: 'Spazio disco disponibile:',
|
||||||
|
spaceWarning: 'Attenzione: il dispositivo di destinazione non dispone di spazio sufficiente segnalato.',
|
||||||
|
proceed: 'Procedi con la sincronizzazione',
|
||||||
|
notEnoughSpace: 'Spazio su disco fisico insufficiente rilevato!',
|
||||||
|
liveSearch: 'Live',
|
||||||
|
randomAlbumsLabel: 'Album casuali',
|
||||||
|
};
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
export const discordBanner = {
|
||||||
|
ariaLabel: 'Unisciti a Psysonic su Discord',
|
||||||
|
message: 'Unisciti alla community di Psysonic su Discord',
|
||||||
|
join: 'Unisciti',
|
||||||
|
neverShow: 'Non mostrare più',
|
||||||
|
close: 'Ignora',
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export const entityRating = {
|
||||||
|
albumShort: 'Valutazione album',
|
||||||
|
artistShort: 'Valutazione artista',
|
||||||
|
albumAriaLabel: 'Valutazione album',
|
||||||
|
artistAriaLabel: 'Valutazione artista',
|
||||||
|
selectedArtistsRatingAriaLabel: 'Valutazione di {{count}} stelle per gli artisti selezionati',
|
||||||
|
selectedAlbumsRatingAriaLabel: 'Valutazione di {{count}} stelle per gli album selezionati',
|
||||||
|
saveFailed: 'Impossibile salvare la valutazione.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
export const favorites = {
|
||||||
|
title: 'Preferiti',
|
||||||
|
empty: "Non hai ancora salvato nessun preferito.",
|
||||||
|
artists: 'Artisti',
|
||||||
|
albums: 'Album',
|
||||||
|
songs: 'Canzoni',
|
||||||
|
enqueueAll: 'Aggiungi tutto alla coda',
|
||||||
|
enqueueSelected: 'Aggiungi i selezionati alla coda',
|
||||||
|
playAll: 'Riproduci tutto',
|
||||||
|
playSelected: 'Riproduci i selezionati',
|
||||||
|
removeSong: 'Rimuovi dai preferiti',
|
||||||
|
stations: 'Stazioni Radio',
|
||||||
|
showingFiltered: 'Mostra {{filtered}} di {{total}} ({{artist}})',
|
||||||
|
showingCount: 'Mostra {{filtered}} di {{total}}',
|
||||||
|
clearArtistFilter: 'Ripristina filtro artisti',
|
||||||
|
noFilterResults: 'Nessun risultato con i filtri selezionati.',
|
||||||
|
allArtists: 'Tutti gli artisti',
|
||||||
|
topArtists: 'Top Artisti dai preferiti',
|
||||||
|
topArtistsSongCount_one: '{{count}} canzone',
|
||||||
|
topArtistsSongCount_other: '{{count}} canzoni',
|
||||||
|
offlineTooltip: 'Salva i preferiti per l\'ascolto offline',
|
||||||
|
offlineJobName: 'Preferiti',
|
||||||
|
offlineSemaphoreSyncing: 'Sincronizzazione preferiti {{saved}} di {{total}}',
|
||||||
|
offlineSemaphoreSynced: 'Tutti i preferiti sono stati salvati per l\'ascolto offline',
|
||||||
|
offlineSemaphoreError: 'Errore sincronizzazione — alcuni brani non possono essere salvati',
|
||||||
|
};
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export const folderBrowser = {
|
||||||
|
empty: 'Cartella vuota',
|
||||||
|
error: 'Errore caricamento',
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
export const genres = {
|
||||||
|
title: 'Generi',
|
||||||
|
genreCount: 'Generi',
|
||||||
|
albumCount_one: '{{count}} album',
|
||||||
|
albumCount_other: '{{count}} album',
|
||||||
|
loading: 'Caricamento generi…',
|
||||||
|
empty: 'Nessun genere trovato.',
|
||||||
|
albumsLoading: 'Caricamento album…',
|
||||||
|
albumsEmpty: 'Nessun album trovato per questo genere.',
|
||||||
|
loadMore: 'Carica altro',
|
||||||
|
back: 'Indietro',
|
||||||
|
playTooltip: 'Riproduci (Tieni premuto per riproduzione casuale)',
|
||||||
|
shuffle: 'Casuale',
|
||||||
|
addToQueue: 'Aggiungi alla coda',
|
||||||
|
};
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
export const help = {
|
||||||
|
title: 'Guida',
|
||||||
|
searchPlaceholder: 'Cerca nella guida…',
|
||||||
|
noResults: 'Nessun argomento corrispondente. Prova un altro termine di ricerca.',
|
||||||
|
// ── Section 1: Getting Started ─────────────────────────────────────────
|
||||||
|
s1: 'Per iniziare',
|
||||||
|
q1: 'Quali server sono compatibili?',
|
||||||
|
a1: 'Psysonic è pensato prima di tutto per Navidrome ed è pienamente compatibile con Subsonic — funzionano anche Gonic, Airsonic, LMS e altri server con API Subsonic. Alcune funzionalità avanzate (valutazioni, playlist intelligenti, condivisione tramite magic string, gestione utenti) richiedono Navidrome.',
|
||||||
|
q2: 'Come aggiungo un server?',
|
||||||
|
a2: 'Impostazioni → Server → Aggiungi server. Inserisci l\'URL (es. http://192.168.1.100:4533), nome utente e password. Psysonic testa la connessione prima di salvare — se il test fallisce non viene salvato nulla. Puoi aggiungere tutti i server che vuoi e passare dall\'uno all\'altro in qualsiasi momento dall\'intestazione; ne è attivo solo uno alla volta.',
|
||||||
|
q3: 'Un rapido tour dell\'interfaccia?',
|
||||||
|
a3: 'Barra laterale (a sinistra) per la navigazione, Mainstage / pagine al centro, barra del player in basso e pannello Coda a destra (attivabile dall\'intestazione in alto a destra, accanto all\'indicatore "In riproduzione"). La barra di ricerca in alto cerca in tutta la tua libreria; "In riproduzione" mostra cosa stanno ascoltando in questo momento gli altri utenti sullo stesso server Navidrome.',
|
||||||
|
// ── Section 2: Playback & Queue ────────────────────────────────────────
|
||||||
|
s2: 'Riproduzione e coda',
|
||||||
|
q4: 'Come uso la coda?',
|
||||||
|
a4: 'Apri il pannello Coda dall\'intestazione in alto a destra. Trascina le righe per riordinarle, trascinale fuori per rimuoverle, oppure usa la barra degli strumenti della coda per mescolare, salvare la coda come playlist o saltare a un brano. Trascina le righe fuori dal pannello per spostarle altrove.',
|
||||||
|
q5: 'Gapless e Crossfade — qual è la differenza?',
|
||||||
|
a5: 'Gapless pre-carica il brano successivo in modo che non ci sia silenzio tra un brano e l\'altro (ideale per album live e mix da DJ). Crossfade dissolve il brano corrente mentre entra in dissolvenza il successivo, in 1–10 secondi (ideale per mix casuali). Le due modalità si escludono a vicenda — attivandone una si disattiva l\'altra. Configurale entrambe in Impostazioni → Audio.',
|
||||||
|
q6: 'Cos\'è la Coda infinita?',
|
||||||
|
a6: 'Quando la coda finisce e Ripeti è disattivato, Psysonic aggiunge automaticamente brani simili o casuali dalla tua libreria, così la riproduzione non si interrompe mai. I brani aggiunti automaticamente compaiono sotto un separatore "— Aggiunti automaticamente —". Attivala/disattivala con l\'icona dell\'infinito nell\'intestazione della coda; puoi limitare le aggiunte automatiche a un genere in Impostazioni → Coda.',
|
||||||
|
q7: 'Selezione multipla e selezione di un intervallo con Maiusc+clic?',
|
||||||
|
a7: 'Attiva "Seleziona" su Album / Nuove uscite / Album casuali / Playlist. Clicca un elemento per selezionarlo, poi tieni premuto Maiusc e clicca un altro elemento per selezionare tutto ciò che si trova tra i due nell\'ordine visibile. I clic con Maiusc si estendono dall\'ultimo elemento cliccato. La barra degli strumenti sopra la griglia offre azioni in blocco (aggiungi alla coda, scarica, elimina, ecc.).',
|
||||||
|
q8: 'Scorciatoie da tastiera e tasti di scelta rapida globali?',
|
||||||
|
a8: 'Tasti predefiniti nell\'app: Spazio = Riproduci/Pausa, Esc = chiudi schermo intero / finestre di dialogo, F1 = elenco scorciatoie. Impostazioni → Input ti permette di riassegnare ogni azione dell\'app (anche come combinazioni tipo Ctrl+Maiusc+P) e di impostare scorciatoie globali di sistema che funzionano anche quando Psysonic è in background o ridotto a icona. I tasti multimediali (Riproduci/Pausa, Successivo, Precedente) funzionano su tutte le piattaforme.',
|
||||||
|
// ── Section 3: Audio Tools ─────────────────────────────────────────────
|
||||||
|
s3: 'Strumenti audio',
|
||||||
|
q9: 'Modalità Replay Gain?',
|
||||||
|
a9: 'Impostazioni → Audio → Replay Gain. La modalità Brano normalizza ogni canzone a un livello target. La modalità Album mantiene la curva di volume all\'interno di un album. La modalità Auto sceglie tra Brano e Album a seconda che la coda provenga da un unico album. I brani senza tag Replay Gain usano un preamplificatore configurabile.',
|
||||||
|
q10: 'Cos\'è la normalizzazione intelligente del volume (LUFS)?',
|
||||||
|
a10: 'Un\'alternativa moderna al Replay Gain, in Impostazioni → Audio. Psysonic analizza ogni brano secondo lo standard LUFS / EBU R128 e memorizza il risultato, così il volume resta coerente in tutta la libreria — anche per i brani senza tag Replay Gain. L\'analisi a cache fredda viene eseguita in background e usa il 35–40% della CPU per circa un minuto, per poi tornare a 0. Imposta una sola volta il volume target (predefinito −10 LUFS).',
|
||||||
|
q11: 'EQ e AutoEQ?',
|
||||||
|
a11: 'Un equalizzatore parametrico a 10 bande si trova in Impostazioni → Audio → Equalizzatore, con bande manuali e preset. Accanto, AutoEQ recupera dal database AutoEQ un profilo di correzione misurato per il tuo modello di cuffie e lo applica automaticamente alle bande — scegli le tue cuffie e l\'EQ si adatta alla curva corretta.',
|
||||||
|
q12: 'Come cambio il dispositivo di uscita audio?',
|
||||||
|
a12: 'Impostazioni → Audio → Dispositivo di uscita. Psysonic elenca tutte le uscite disponibili e passa istantaneamente a quella scelta. Il pulsante di aggiornamento rileva i dispositivi collegati dopo l\'avvio. I nomi ALSA su Linux, come "sysdefault", vengono ripuliti automaticamente per una migliore leggibilità.',
|
||||||
|
q13: 'Cos\'è la Cache attiva (Hot Cache)?',
|
||||||
|
a13: 'La Cache attiva precarica il brano corrente e i successivi in RAM e su disco, così la riproduzione parte senza buffering — utile soprattutto su server lenti o remoti. Quando si raggiunge il limite di dimensione, i dati più vecchi vengono eliminati. Configura la dimensione e il ritardo anti-rimbalzo (per evitare che i salti rapidi sovraccarichino il caricamento) in Impostazioni → Audio.',
|
||||||
|
// ── Section 4: Library & Discovery ─────────────────────────────────────
|
||||||
|
s4: 'Libreria e scoperta',
|
||||||
|
q14: 'Come funzionano le valutazioni e "Salta a 1★"?',
|
||||||
|
a14: 'Psysonic supporta valutazioni da 1 a 5 stelle tramite OpenSubsonic (Navidrome ≥ 0.53). Valuta i brani negli elenchi, nel menu contestuale o nella barra del player sotto il nome dell\'artista; gli album nella pagina dell\'album; gli artisti nella pagina dell\'artista. "Salta a 1★" (Impostazioni → Libreria → Valutazioni) assegna automaticamente 1 stella dopo un numero configurabile di salti consecutivi. Lo stesso pannello permette di impostare una valutazione minima per Mix casuale e altri mix generati.',
|
||||||
|
q15: 'Come navigo tra cartelle, generi e brani?',
|
||||||
|
a15: 'Il Browser cartelle (barra laterale) mostra la struttura delle cartelle musicali del server in una visualizzazione a colonne: clicca una cartella per aprirla, clicca un brano o l\'icona di riproduzione di una cartella per riprodurre / aggiungere alla coda. Generi mostra una nuvola di tag proporzionata al numero di brani; clicca un genere per aprirlo. Brani è un elenco unificato della libreria, con colonne ordinabili, scorrimento virtuale e ricerca in tempo reale.',
|
||||||
|
q16: 'Ricerca e Ricerca avanzata?',
|
||||||
|
a16: 'La barra di ricerca nell\'intestazione esegue una ricerca rapida in tempo reale tra artisti, album e brani mentre digiti. Apri Ricerca avanzata (barra laterale) per una visualizzazione più completa: filtra per anno, genere, valutazione, formato, canali, sample rate, BPM, mood, e combina più criteri. Clicca con il tasto destro su qualsiasi risultato per lo stesso menu contestuale usato nel resto dell\'app.',
|
||||||
|
q17: 'Cosa sono i Mix (Casuale / Genere / Super genere / Fortunato)?',
|
||||||
|
a17: 'Mix casuale crea una playlist di brani casuali dalla tua libreria; il Filtro per parole chiave esclude audiolibri, comicità, ecc. in base a sottostringhe di genere, titolo o album. Super genere Mix raggruppa la tua libreria in stili ampi (Rock, Metal, Elettronica, Jazz, Classica…) e crea un mix mirato su uno di essi. Mix fortunato usa la cronologia di ascolto, le valutazioni e i brani simili di AudioMuse-AI per creare una playlist istantanea con un clic.',
|
||||||
|
q18: 'La pagina Statistiche?',
|
||||||
|
a18: 'Statistiche (barra laterale) mostra gli artisti, gli album e i brani più ascoltati, la suddivisione per genere, il tempo di ascolto nel tempo, con un ambito per singola libreria se hai configurato più cartelle musicali. Diverse visualizzazioni possono essere esportate come immagine condivisibile.',
|
||||||
|
q19: 'Come scarico un album come file ZIP?',
|
||||||
|
a19: 'Pagina dell\'album → "Scarica (ZIP)". Il server comprime prima l\'album — per album grandi o lossless (FLAC / WAV) la barra di avanzamento compare solo dopo che la compressione è terminata e il trasferimento è iniziato. È normale.',
|
||||||
|
// ── Section 5: Lyrics ──────────────────────────────────────────────────
|
||||||
|
s5: 'Testi',
|
||||||
|
q20: 'Da dove provengono i testi?',
|
||||||
|
a20: 'Tre fonti configurabili in Impostazioni → Testi: il tuo server Navidrome (testi incorporati / OpenSubsonic), LRCLIB (testi sincronizzati forniti dalla community) e NetEase Cloud Music (ampio catalogo asiatico e internazionale). Ogni fonte può essere attivata/disattivata e riordinata trascinandola.',
|
||||||
|
q21: 'Come visualizzo i testi durante la riproduzione?',
|
||||||
|
a21: 'Clicca l\'icona del microfono nella barra del player per aprire la scheda Testi nel pannello della coda. I testi sincronizzati scorrono automaticamente e permettono di saltare a un punto specifico cliccando; i testi in formato semplice scorrono come blocco statico. Attiva il Player a schermo intero dalla copertina nella barra del player per una visualizzazione immersiva dei testi con sfondo animato.',
|
||||||
|
// ── Section 6: Sharing & Social ────────────────────────────────────────
|
||||||
|
s6: 'Condivisione e social',
|
||||||
|
q22: 'Cosa sono le Magic String?',
|
||||||
|
a22: 'Le Magic String sono brevi codici da copiare e incollare che permettono di condividere contenuti tra utenti Psysonic senza server di terze parti. Le stringhe di invito al server permettono a un amico di accedere al tuo Navidrome con un semplice incolla; le Magic String di album, artista o coda aprono lo stesso album / artista / coda sull\'installazione Psysonic del destinatario. Generale dal menu di condivisione, incollale nella barra di ricerca per utilizzarle.',
|
||||||
|
q23: 'Cos\'è Orbit?',
|
||||||
|
a23: 'Orbit è l\'ascolto sincronizzato di gruppo: un host riproduce un brano, ogni ospite lo ascolta in sincronia, e gli ospiti possono suggerire brani che l\'host può accettare in coda. Avvia una sessione dal pulsante Orbit nell\'intestazione, condividi il link di invito, e gli altri potranno unirsi da qualsiasi installazione di Psysonic. L\'host controlla la riproduzione (salta, avanza, coda) — gli ospiti hanno una vista in tempo reale e possono inviare suggerimenti. Le sessioni sono temporanee e terminano quando l\'host le chiude.',
|
||||||
|
q24: 'Cos\'è il menu a tendina "In riproduzione"?',
|
||||||
|
a24: 'L\'icona di trasmissione nell\'intestazione in alto a destra mostra cosa stanno ascoltando in questo momento gli altri utenti sul tuo server Navidrome, aggiornata ogni 10 secondi. La tua voce scompare non appena metti in pausa. È specifico per ogni server, quindi gli utenti su un altro server attivo non vengono mostrati.',
|
||||||
|
// ── Section 7: Personalization ─────────────────────────────────────────
|
||||||
|
s7: 'Personalizzazione',
|
||||||
|
q25: 'Temi e Pianificazione automatica dei temi?',
|
||||||
|
a25: 'Impostazioni → Aspetto → Tema permette di scegliere tra oltre 60 temi suddivisi in 8 gruppi (Psysonic, Media Player, Sistemi operativi, Giochi, Film, Serie TV, Social Media, Classici Open Source — Catppuccin / Nord / Gruvbox / Nightfox / Dracula). Il cambio automatico del tema permette di impostare un tema diurno e uno notturno con orari di inizio, così Psysonic passa dall\'uno all\'altro automaticamente.',
|
||||||
|
q26: 'Posso personalizzare la barra laterale, la Home e le pagine artista?',
|
||||||
|
a26: 'Sì — in Impostazioni → Personalizzazione. Il personalizzatore della barra laterale permette di trascinare le voci di navigazione nell\'ordine desiderato e di nascondere quelle che non usi. Il personalizzatore della Home attiva/disattiva ogni sezione del Mainstage (In evidenza, Recenti, Scopri, Ascoltati di recente, Preferiti…). Il personalizzatore della pagina artista riordina le sezioni (Brani più ascoltati, Album, Singoli, Compilation, Artisti simili, ecc.) e permette di nascondere quelle che non guardi mai.',
|
||||||
|
q27: 'Cos\'è il Mini player?',
|
||||||
|
a27: 'Una piccola finestra flottante con copertina, controlli di riproduzione e una coda compatta. Aprila dall\'icona del mini player nella barra del player o con la relativa scorciatoia da tastiera. La finestra ricorda posizione e dimensioni tra una sessione e l\'altra. Su Windows la mini-webview viene pre-creata all\'avvio, così l\'apertura è istantanea; su Linux / macOS va attivata in Impostazioni → Aspetto → Precarica mini player.',
|
||||||
|
q28: 'Cos\'è la Barra del player flottante?',
|
||||||
|
a28: 'Uno stile opzionale della barra del player (Impostazioni → Aspetto) che si stacca dal bordo inferiore, con sfondo a tema, bordo in evidenza, copertina arrotondata e sezione volume centrata. Utile su monitor verticali o con temi compatti.',
|
||||||
|
q29: 'Anteprima del brano al passaggio del mouse?',
|
||||||
|
a29: 'Passa il mouse sopra una riga di un brano, clicca il piccolo pulsante di anteprima sulla copertina, oppure avvia l\'anteprima dal menu contestuale — Psysonic riproduce in streaming i primi ~15 secondi tramite lo stesso motore audio Rust, così si applica anche la normalizzazione del volume. Utile per farsi un\'idea di un album mai ascoltato prima.',
|
||||||
|
q30: 'Timer di spegnimento?',
|
||||||
|
a30: 'Clicca l\'icona della luna nella barra del player per aprire il timer di spegnimento. Scegli una durata (oppure "fine del brano corrente") e Psysonic sfumerà il volume e metterà in pausa al termine. Il pulsante mostra un anello circolare e un conto alla rovescia mentre il timer è attivo.',
|
||||||
|
q31: 'Scala dell\'interfaccia, font, stile della barra di avanzamento?',
|
||||||
|
a31: 'Impostazioni → Aspetto — Scala dell\'interfaccia (80–125%, senza modificare la dimensione dei caratteri di sistema), Font (10 font per l\'interfaccia, tra cui IBM Plex Mono, Fira Code, Geist, Golos Text…), Stile della barra di avanzamento (Forma d\'onda analizzata / pseudowave deterministica / Linea e punto / Barra / Barra spessa / Segmentata / Bagliore al neon / Onda pulsante / Scia di particelle / Riempimento liquido / Nastro retrò).',
|
||||||
|
// ── Section 8: Power User ──────────────────────────────────────────────
|
||||||
|
s8: 'Utenti avanzati',
|
||||||
|
q32: 'Controlli del player da riga di comando (CLI)?',
|
||||||
|
a32: 'L\'eseguibile di Psysonic funge anche da telecomando. Esempi: psysonic --player play / pause / next / prev, --player volume 75, --player seek 15, --player shuffle, --player repeat off|all|one, --player rating 1-5. Puoi cambiare server, dispositivi audio, librerie; avviare un Mix istantaneo; cercare artisti / album / brani. Esegui psysonic --player --help per l\'elenco completo. Sono disponibili i completamenti della shell per bash e zsh tramite psysonic completions.',
|
||||||
|
q33: 'Playlist intelligenti (Navidrome)?',
|
||||||
|
a33: 'Le Playlist intelligenti sono playlist dinamiche lato Navidrome definite da regole (genere = Rock E anno > 2020, ecc.). La pagina Playlist di Psysonic permette di crearle, modificarle ed eliminarle con un editor di regole visivo — Psysonic comunica con l\'API nativa di Navidrome per questo. Si comportano come playlist normali nel resto dell\'app e si aggiornano automaticamente man mano che la libreria cambia.',
|
||||||
|
q34: 'Backup e ripristino delle impostazioni?',
|
||||||
|
a34: 'Impostazioni → Archiviazione → Backup e ripristino esporta profili server, temi, associazioni di tasti e altre impostazioni in un unico file JSON. Importa il file su un\'altra macchina o dopo una reinstallazione per ripristinare tutto in una volta. Le password dei server sono incluse — mantieni il file privato.',
|
||||||
|
q35: 'Dove trovo tutte le licenze open source?',
|
||||||
|
a35: 'Impostazioni → Sistema → Licenze Open Source. L\'elenco completo delle dipendenze (crate Cargo e pacchetti npm) è incluso nella build insieme ai testi delle licenze. Clicca su una voce per il testo completo; il riquadro in evidenza in alto segnala le librerie più riconoscibili (Tauri, React, rodio, symphonia, ecc.).',
|
||||||
|
// ── Section 9: Offline & Sync ──────────────────────────────────────────
|
||||||
|
s9: 'Offline e sincronizzazione',
|
||||||
|
q36: 'Modalità Offline — memorizzare album e playlist nella cache?',
|
||||||
|
a36: 'Apri un album o una playlist e clicca l\'icona di download nell\'intestazione — Psysonic salva ogni brano localmente, così viene riprodotto da disco senza bisogno di rete. La pagina Libreria offline (barra laterale) elenca tutto ciò che è stato salvato, mostra l\'avanzamento dei download in corso e permette di rimuovere le voci con l\'icona del cestino (che appare una volta completato il download).',
|
||||||
|
q37: 'Limite di spazio per l\'archiviazione offline?',
|
||||||
|
a37: 'Impostazioni → Libreria → Offline permette di impostare una dimensione massima della cache. Quando il limite viene raggiunto, il pulsante di download nella pagina dell\'album mostra un banner di avviso. Libera spazio rimuovendo album o playlist dalla pagina Libreria offline.',
|
||||||
|
q38: 'Sincronizzazione dispositivo — copiare musica su USB / SD?',
|
||||||
|
a38: 'Sincronizzazione dispositivo (barra laterale) copia album, playlist o interi artisti su un\'unità esterna per l\'ascolto offline su altri dispositivi. Scegli una cartella di destinazione, seleziona le fonti dalle schede del browser, clicca "Trasferisci sul dispositivo". Psysonic scrive un file manifesto (psysonic-sync.json) per sapere quali file sono già presenti, anche riaprendo Sincronizzazione dispositivo su un sistema operativo diverso con un modello di nome file diverso. I modelli supportano i segnaposto {artist} / {album} / {title} / {track_number} / {disc_number} / {year}, con / come separatore di cartella.',
|
||||||
|
// ── Section 10: Integrations & Troubleshooting ─────────────────────────
|
||||||
|
s10: 'Integrazioni e risoluzione dei problemi',
|
||||||
|
q39: 'Scrobbling — Last.fm, ListenBrainz, Maloja…?',
|
||||||
|
a39: 'Impostazioni → Integrazioni → Rete musicale. Collega uno o più servizi di scrobbling (Last.fm, Libre.fm, Rocksky, ListenBrainz, Maloja o qualsiasi server compatibile con GNU FM) — non serve alcuna configurazione su Navidrome. Ogni servizio collegato con lo scrobbling attivato riceve la riproduzione; l\'interruttore principale "Attiva scrobbling" accende o spegne tutto l\'invio. Uno scrobble viene inviato dopo che hai ascoltato il 50% di un brano; le notifiche "in riproduzione" vengono inviate all\'inizio, sui servizi che le supportano. Un servizio è impostato come principale — da lì vengono letti i tuoi brani amati, gli artisti simili e le statistiche di ascolto. Suggerimento: se il tuo server Navidrome esegue già lo scrobbling verso un servizio (es. Maloja), non collegare anche qui lo stesso servizio, altrimenti otterrai scrobble duplicati.',
|
||||||
|
q40: 'Discord Rich Presence?',
|
||||||
|
a40: 'Impostazioni → Integrazioni → Discord mostra il brano in riproduzione sul tuo profilo Discord. Scegli tra l\'icona dell\'app, la copertina del tuo server (tramite getAlbumInfo2 — richiede un server raggiungibile pubblicamente) oppure le copertine di Apple Music. Personalizza le stringhe visualizzate (dettagli, stato, descrizione) con modelli basati su token.',
|
||||||
|
q41: 'Date dei concerti da Bandsintown?',
|
||||||
|
a41: 'Attivala in Impostazioni → Integrazioni → Info in riproduzione. La scheda "In riproduzione" nella pagina In Riproduzione mostrerà quindi le prossime date dei concerti dell\'artista in riproduzione tramite il widget API di Bandsintown. Disattivata di default — nessuna richiesta viene effettuata finché non la attivi.',
|
||||||
|
q42: 'Radio Internet — riproduzione di stream live?',
|
||||||
|
a42: 'Radio Internet (barra laterale) riproduce qualsiasi stream live memorizzato sul tuo server Navidrome (aggiungi le stazioni tramite l\'interfaccia di amministrazione di Navidrome). La riproduzione avviene tramite il motore audio HTML5 del browser — la maggior parte delle impostazioni di EQ / Replay Gain / Loudness non si applica alla radio, ma i metadati ICY (nome del brano corrente) vengono comunque mostrati. Supporta MP3, AAC, OGG Vorbis e la maggior parte degli stream HLS; il supporto dei codec dipende dalla piattaforma.',
|
||||||
|
q43: 'Il test di connessione fallisce — cosa faccio?',
|
||||||
|
a43: 'Controlla attentamente l\'URL, incluso il numero di porta (es. http://192.168.1.100:4533). Su una rete locale, http:// spesso funziona dove https:// no (per mancanza di certificato). Assicurati che nessun firewall blocchi la porta e che nome utente e password siano corretti. Se il tuo server è dietro un reverse proxy, prova prima l\'URL diretto per isolare la causa.',
|
||||||
|
q44: 'La copertina e le immagini degli artisti si caricano lentamente.',
|
||||||
|
a44: 'Le immagini vengono scaricate dal server alla prima visualizzazione e poi salvate in cache localmente per 30 giorni. Se l\'archiviazione del tuo server è lenta, la prima visita a una pagina può richiedere un momento; le visite successive sono istantanee. La Cache attiva aiuta anche per i brani, ma la cache delle immagini è indipendente.',
|
||||||
|
q45: 'Problemi su Linux — schermo nero o assenza di audio?',
|
||||||
|
a45: 'Uno schermo nero su Linux è di solito un problema grafico o del WebView. Prova con una sessione X11, oppure imposta GDK_BACKEND=x11 e EGL_PLATFORM=x11 prima di avviare l\'app se usi Wayland. Per l\'audio, assicurati che PipeWire o PulseAudio siano in esecuzione. Se il suono si interrompe dopo la sospensione o il risveglio, chiudi completamente Psysonic e riaprilo.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export const hero = {
|
||||||
|
eyebrow: 'Album in primo piano',
|
||||||
|
playAlbum: 'Riproduci Album',
|
||||||
|
playAlbumTooltip: 'Riproduci album (Tieni premuto per mescolare)',
|
||||||
|
enqueue: 'Accoda',
|
||||||
|
enqueueTooltip: 'Aggiungi l\'album alla coda',
|
||||||
|
previousAlbum: 'Album precedente',
|
||||||
|
nextAlbum: 'prossimo album',
|
||||||
|
};
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
export const home = {
|
||||||
|
hero: 'In evidenza',
|
||||||
|
starred: 'Preferiti personali',
|
||||||
|
mostPlayed: 'Più ascoltati',
|
||||||
|
recentlyPlayed: 'Ascoltati di recente',
|
||||||
|
losslessAlbums: 'Album lossless',
|
||||||
|
discover: 'Scopri',
|
||||||
|
discoverSongs: 'Scopri nuovi brani',
|
||||||
|
loadMore: 'Carica altri',
|
||||||
|
discoverMore: 'Scopri altro',
|
||||||
|
discoverArtists: 'Scopri nuovi artisti',
|
||||||
|
discoverArtistsMore: 'Tutti gli artisti',
|
||||||
|
becauseYouLike: 'Perché hai ascoltato…',
|
||||||
|
becauseYouLikeFor: 'Perché hai ascoltato {{artist}}',
|
||||||
|
similarTo: 'Simile a {{artist}}',
|
||||||
|
becauseYouLikeTracks_one: '{{count}} brano',
|
||||||
|
becauseYouLikeTracks_other: '{{count}} brani',
|
||||||
|
mainstageEmptyTitle: 'Il tuo Mainstage è vuoto',
|
||||||
|
mainstageEmptyBody: 'Tutte le sezioni sono disattivate. Riattivale, oppure nascondi Mainstage dalla barra laterale.',
|
||||||
|
mainstageEmptyCta: 'Apri le impostazioni di Personalizzazione'
|
||||||
|
};
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
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 { musicNetwork } from './musicNetwork';
|
||||||
|
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';
|
||||||
|
import { migration } from './migration';
|
||||||
|
import { discordBanner } from './discordBanner';
|
||||||
|
|
||||||
|
export const itTranslation = {
|
||||||
|
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,
|
||||||
|
musicNetwork,
|
||||||
|
help,
|
||||||
|
queue,
|
||||||
|
miniPlayer,
|
||||||
|
statistics,
|
||||||
|
player,
|
||||||
|
nowPlayingInfo,
|
||||||
|
songInfo,
|
||||||
|
playlists,
|
||||||
|
smartPlaylists,
|
||||||
|
mostPlayed,
|
||||||
|
losslessAlbums,
|
||||||
|
radio,
|
||||||
|
folderBrowser,
|
||||||
|
deviceSync,
|
||||||
|
orbit,
|
||||||
|
tray,
|
||||||
|
licenses,
|
||||||
|
migration,
|
||||||
|
discordBanner,
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
export const licenses = {
|
||||||
|
title: 'Licenze Open Source',
|
||||||
|
intro: 'Psysonic è costruito su software open-source. L\'elenco qui sotto mostra ogni dipendenza inclusa nell\'app, con versione, licenza e testo della licenza.',
|
||||||
|
highlights: 'Dipendenze principali',
|
||||||
|
searchPlaceholder: 'Cerca per nome, versione o licenza…',
|
||||||
|
noResults: 'Nessun risultato.',
|
||||||
|
loading: 'Caricamento licenze…',
|
||||||
|
loadError: 'Impossibile caricare licenze.',
|
||||||
|
noLicenseText: 'Nessun testo di licenza incluso per questa dipendenza.',
|
||||||
|
viewSource: 'Visualizza sorgente',
|
||||||
|
totalLine: '{{total}} dipendenze — {{cargo}} cargo, {{npm}} npm',
|
||||||
|
generatedAt: 'Ultimo aggiornamento {{date}}',
|
||||||
|
};
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
export const login = {
|
||||||
|
subtitle: 'Il tuo Desktop Player Navidrome',
|
||||||
|
serverName: 'Nome Server (opzionale)',
|
||||||
|
serverNamePlaceholder: 'My Navidrome',
|
||||||
|
serverUrl: 'Server URL',
|
||||||
|
serverUrlPlaceholder: '192.168.1.100:4533 or https://music.example.com',
|
||||||
|
username: 'Username',
|
||||||
|
usernamePlaceholder: 'admin',
|
||||||
|
password: 'Password',
|
||||||
|
showPassword: 'Mostra password',
|
||||||
|
hidePassword: 'Nascondi password',
|
||||||
|
connect: 'Connetti',
|
||||||
|
connecting: 'Connessione in corso...',
|
||||||
|
connected: 'Connesso!',
|
||||||
|
error: 'Connessione fallita – per favore verifica i parametri.',
|
||||||
|
urlRequired: 'inserisci il server URL.',
|
||||||
|
savedServers: 'Server Salvati',
|
||||||
|
addNew: 'O aggiungi un nuovo server',
|
||||||
|
orMagicString: 'O Magic String',
|
||||||
|
magicStringPlaceholder: 'Incolla la stringa condivisa (psysonic1-…)',
|
||||||
|
magicStringInvalid: 'Stringa magica non valida o illeggibile.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
export const losslessAlbums = {
|
||||||
|
empty: 'Nessun album lossless nella libreria.',
|
||||||
|
unsupported: 'Questo server non espone i metadati necessari per trovare album lossless.',
|
||||||
|
slowFetchHint: 'Caricamento più lento rispetto ad altre pagine album — Psysonic analizza l\'intero catalogo per qualità.',
|
||||||
|
modeBanner: 'Modalità lossless — mostra solo formati FLAC, WAV e altri lossless.',
|
||||||
|
modeBannerExit: 'Mostra tutti i formati',
|
||||||
|
};
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
export const luckyMix = {
|
||||||
|
done: 'Lucky Mix pronto: {{count}} brani',
|
||||||
|
failed: 'Impossibile creare Lucky Mix. Prova di nuovo.',
|
||||||
|
unavailable: 'Lucky Mix non disponibile per questo server.',
|
||||||
|
cancelTooltip: 'Cancella Lucky Mix creato',
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
export const migration = {
|
||||||
|
preparing: 'Preparazione aggiornamento…',
|
||||||
|
preparingBody: 'Analisi della tua libreria e della cache in corso…',
|
||||||
|
migrating: 'Migra dati',
|
||||||
|
working: 'In corso…',
|
||||||
|
skippedRows: 'Le righe relative ai server rimossi sono state saltate e il vecchio database di backup verrà rimosso una volta completato.',
|
||||||
|
failed: 'Migrazione fallita',
|
||||||
|
retry: 'Riprova',
|
||||||
|
copyDetails: 'Copia dettagli',
|
||||||
|
complete: 'Aggiornamento completato',
|
||||||
|
completeRows: '{{count}} righe migrate',
|
||||||
|
genreTagsTitle: 'Aggiornamento indice generi…',
|
||||||
|
genreTagsBody: 'Indicizzazione dei generi per la navigazione e i filtri. Questa operazione viene eseguita una sola volta dopo l\'aggiornamento.',
|
||||||
|
genreTagsFailed: 'Aggiornamento indice generi fallito',
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export const miniPlayer = {
|
||||||
|
showQueue: 'Mostra coda',
|
||||||
|
hideQueue: 'Nascondi coda',
|
||||||
|
pinOnTop: 'Fissa in alto',
|
||||||
|
pinOff: 'Rimuovi',
|
||||||
|
openMainWindow: 'Apri finestra principale',
|
||||||
|
close: 'Chiudi',
|
||||||
|
emptyQueue: 'La coda è vuota',
|
||||||
|
};
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
export const mostPlayed = {
|
||||||
|
title: 'Più Ascoltati',
|
||||||
|
topArtists: 'Artisti Top',
|
||||||
|
topAlbums: 'Top Album',
|
||||||
|
plays: '{{n}} riproduzioni',
|
||||||
|
sortMost: 'Prima i più riprodotti',
|
||||||
|
sortLeast: 'Prima i meno riprodotti',
|
||||||
|
loadMore: 'Carica altri album',
|
||||||
|
noData: 'Nessun dato di riproduzione. Inizia ad ascoltare!',
|
||||||
|
noArtists: 'Tutti gli artisti sono stati filtrati.',
|
||||||
|
filterCompilations: 'Nascondi artisti delle compilation (Artisti Vari, Colonne Sonore, ecc.)',
|
||||||
|
filterCompilationsShort: 'Nascondi compilation',
|
||||||
|
};
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
export const musicNetwork = {
|
||||||
|
title: 'Rete musicale',
|
||||||
|
desc: 'Invia le tue riproduzioni in scrobbling a uno o più servizi. I brani amati, gli artisti simili e le statistiche di ascolto provengono dal servizio principale scelto.',
|
||||||
|
masterToggle: 'Attiva scrobbling',
|
||||||
|
masterToggleDesc: 'Interruttore principale per l\'invio delle riproduzioni a tutti i servizi collegati.',
|
||||||
|
addService: 'Aggiungi un servizio',
|
||||||
|
connect: 'Connetti',
|
||||||
|
connecting: 'Connessione in corso…',
|
||||||
|
disconnect: 'Disconnetti',
|
||||||
|
scrobbleHere: 'Scrobbling qui',
|
||||||
|
primaryLabel: 'Servizio principale',
|
||||||
|
primaryDesc: 'I brani amati (❤), gli artisti simili e le tue statistiche di ascolto provengono da qui — lo scrobbling viene comunque inviato a tutti i servizi attivi.',
|
||||||
|
primaryNone: 'Nessuno',
|
||||||
|
statusConnected: 'Connesso',
|
||||||
|
statusError: 'Riconnessione necessaria',
|
||||||
|
scrobbles: '{{n}} scrobble',
|
||||||
|
memberSince: 'Membro dal {{year}}',
|
||||||
|
connectFailed: 'Impossibile connettersi — riprova.',
|
||||||
|
connectProbeFailed: '{{provider}} connesso, ma non è stato possibile convalidarlo: {{message}}',
|
||||||
|
fieldRequired: '{{field}} è obbligatorio.',
|
||||||
|
malojaProxyWarning: 'Il tuo server Maloja potrebbe inoltrare gli scrobble a Last.fm. Disattiva lo scrobbling da un lato per evitare duplicati.',
|
||||||
|
presets: {
|
||||||
|
lastfm: { desc: 'Il servizio di scrobbling originale, con brani amati, artisti simili e statistiche.' },
|
||||||
|
librefm: { desc: 'Scrobbling open source su Libre.fm, compatibile con Last.fm.' },
|
||||||
|
rocksky: { desc: 'Destinazione solo per lo scrobbling sull\'AT Protocol.' },
|
||||||
|
listenbrainz: { desc: 'Cronologia di ascolto aperta di MetaBrainz. Destinazione per lo scrobbling.' },
|
||||||
|
malojaNative: { desc: 'Server di scrobbling autogestito (API nativa).' },
|
||||||
|
malojaCompat: { desc: 'Maloja autogestito tramite la sua API Audioscrobbler (GNU FM).' },
|
||||||
|
malojaListenbrainz: { desc: 'Maloja autogestito tramite la sua API compatibile con ListenBrainz.' },
|
||||||
|
koito: { desc: 'Tracker di ascolto autogestito tramite la sua API compatibile con ListenBrainz.' },
|
||||||
|
customGnufm: { desc: 'Qualsiasi istanza autogestita GNU FM / compatibile con Last.fm.' },
|
||||||
|
},
|
||||||
|
fields: {
|
||||||
|
lbToken: 'Token utente',
|
||||||
|
malojaUrl: 'URL del server',
|
||||||
|
malojaKey: 'Chiave API',
|
||||||
|
koitoUrl: 'URL del server',
|
||||||
|
koitoToken: 'Chiave API',
|
||||||
|
koitoTokenHelp: 'Genera una chiave API in Koito da Impostazioni → Chiavi API, poi incollala qui.',
|
||||||
|
rockskySessionKey: 'Chiave di sessione',
|
||||||
|
rockskySessionKeyHelp: 'Rocksky rilascia questa chiave solo tramite la sua CLI:\n1. npx -y @rocksky/cli@latest login your-handle\n2. cat ~/.rocksky/token.json\n3. Incolla qui il valore di "token".',
|
||||||
|
gnufmUrl: 'URL del server',
|
||||||
|
apiKey: 'Chiave API',
|
||||||
|
apiSecret: 'Segreto condiviso',
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
AUTH_SESSION_INVALID: 'Sessione scaduta — riconnettiti dalle impostazioni.',
|
||||||
|
AUTH_TIMEOUT: 'Autorizzazione scaduta — riprova.',
|
||||||
|
PROBE_FAILED: 'Questa funzionalità non è disponibile su questo servizio.',
|
||||||
|
CAPABILITY_UNSUPPORTED: 'Questo servizio non supporta questa funzionalità.',
|
||||||
|
NETWORK: 'Errore di rete — controlla la connessione o l\'URL.',
|
||||||
|
MALOJA_BAD_KEY: 'Chiave API di Maloja non valida.',
|
||||||
|
CUSTOM_URL_INVALID: 'L\'URL del server non è raggiungibile.',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
export const nowPlaying = {
|
||||||
|
tooltip: 'Chi sta ascoltando?',
|
||||||
|
title: 'Chi sta ascoltando?',
|
||||||
|
loading: 'Caricamento…',
|
||||||
|
nobody: 'Nessuno sta ascoltando al momento.',
|
||||||
|
presence: {
|
||||||
|
playing: 'In riproduzione',
|
||||||
|
paused: 'In pausa',
|
||||||
|
idle: 'Inattivo',
|
||||||
|
},
|
||||||
|
nothingPlaying: 'Ancora niente in riproduzione. Avvia un brano!',
|
||||||
|
aboutArtist: 'Informazioni sull\'Artista',
|
||||||
|
fromAlbum: 'Da questo Album',
|
||||||
|
viewAlbum: 'Visualizza Album',
|
||||||
|
goToArtist: 'Vai all\'Artista',
|
||||||
|
readMore: 'Leggi di più',
|
||||||
|
showLess: 'Mostra meno',
|
||||||
|
genreInfo: 'Genere',
|
||||||
|
trackInfo: 'Info Brano',
|
||||||
|
topSongs: 'I più ascoltati di questo artista',
|
||||||
|
topSongsCredit: 'Brani più ascoltati di {{name}}',
|
||||||
|
trackPosition: 'Brano {{pos}}',
|
||||||
|
playsCount_one: '{{count}} riproduzione',
|
||||||
|
playsCount_other: '{{count}} riproduzioni',
|
||||||
|
releasedYearsAgo_one: '{{count}} anno fa',
|
||||||
|
releasedYearsAgo_other: '{{count}} anni fa',
|
||||||
|
discography: 'Discografia',
|
||||||
|
thisTrack: 'Questo brano',
|
||||||
|
thisArtist: 'Questo artista',
|
||||||
|
listeners: 'ascoltatori',
|
||||||
|
scrobbles: 'scrobbles',
|
||||||
|
yourScrobbles: 'da te',
|
||||||
|
listenersN: '{{n}} ascoltatori',
|
||||||
|
scrobblesN: '{{n}} scrobbles',
|
||||||
|
playsByYouN: 'riprodotto {{n}}× da te',
|
||||||
|
rgTrackTooltip: 'ReplayGain (brano)',
|
||||||
|
rgAlbumTooltip: 'ReplayGain (album)',
|
||||||
|
rgAutoTooltip: 'ReplayGain (auto)',
|
||||||
|
showMoreTracks: 'Mostra altri {{count}}',
|
||||||
|
showLessTracks: 'Mostra meno',
|
||||||
|
hideCard: 'Nascondi scheda',
|
||||||
|
layoutMenu: 'Layout',
|
||||||
|
visibleCards: 'Schede visibili',
|
||||||
|
hiddenCards: 'Schede nascoste',
|
||||||
|
noHiddenCards: 'Nessuna scheda nascosta',
|
||||||
|
resetLayout: 'Reimposta layout',
|
||||||
|
emptyColumn: 'Trascina qui le schede',
|
||||||
|
};
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
export const nowPlayingInfo = {
|
||||||
|
tab: 'Info',
|
||||||
|
empty: 'Riproduci qualcosa per vedere le informazioni',
|
||||||
|
artist: 'Artista',
|
||||||
|
songInfo: 'Info Canzone',
|
||||||
|
onTour: 'In tour',
|
||||||
|
noTourEvents: 'Nessuno spettacolo in programma',
|
||||||
|
tourLoading: 'Caricamento…',
|
||||||
|
poweredByBandsintown: 'Informazioni sul tour tramite Bandsintown',
|
||||||
|
bioReadMore: 'Leggi altro',
|
||||||
|
bioReadLess: 'Mostra meno',
|
||||||
|
showMoreTours_one: 'Mostra altro {{count}}',
|
||||||
|
showMoreTours_other: 'Mostra altri {{count}}',
|
||||||
|
showLessTours: 'Mostra meno',
|
||||||
|
enableBandsintownPrompt: 'Vuoi vedere le prossime date dei tour?',
|
||||||
|
enableBandsintownPromptDesc: 'Opzionale. Carica i concerti dell\'artista corrente tramite l\'API pubblica di Bandsintown.',
|
||||||
|
enableBandsintownPrivacy: 'Quando questa funzione è attivata, il nome dell\'artista attualmente in riproduzione viene inviato all\'API di Bandsintown per recuperare le date del tour. Nessun account né dato personale viene trasmesso al di fuori del tuo dispositivo.',
|
||||||
|
enableBandsintownAction: 'Abilita',
|
||||||
|
role: {
|
||||||
|
artist: 'Artista',
|
||||||
|
albumArtist: 'Album artista',
|
||||||
|
composer: 'Compositore',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
export const orbit = {
|
||||||
|
triggerLabel: 'Orbit',
|
||||||
|
triggerTooltip: 'Avvia o unisciti a una sessione di ascolto condivisa',
|
||||||
|
launchCreate: 'Crea una sessione',
|
||||||
|
launchJoin: 'Unisciti a una sessione',
|
||||||
|
launchHelp: 'Come funziona?',
|
||||||
|
launchHelpSoon: 'Prossimamente',
|
||||||
|
joinModalTitle: 'Unisciti a una sessione Orbit',
|
||||||
|
joinModalSub: 'Incolla il link di invito che ti ha mandato l\'host.',
|
||||||
|
joinModalLinkLabel: 'Link di invito',
|
||||||
|
joinModalLinkPlaceholder: 'psysonic2-…',
|
||||||
|
joinModalLinkHelper: 'Funziona con qualsiasi link Orbit valido. Deve puntare al server in cui hai effettuato l\'accesso.',
|
||||||
|
joinModalPasteTooltip: 'Incolla dagli appunti',
|
||||||
|
joinModalSubmit: 'Unisciti',
|
||||||
|
joinModalBusy: 'Accesso in corso…',
|
||||||
|
joinErrEmpty: 'Incolla un link di invito.',
|
||||||
|
joinErrInvalid: 'Non sembra un link di invito Orbit valido.',
|
||||||
|
closeAria: 'Chiudi',
|
||||||
|
heroTitlePrefix: 'Ascolta insieme con',
|
||||||
|
heroTitleBrand: 'Orbit',
|
||||||
|
heroSub: 'Avvia una sessione — gli altri utenti su {{server}} ascolteranno insieme a te e potranno suggerire brani.',
|
||||||
|
fallbackServer: 'questo server',
|
||||||
|
tipLan: 'Sei connesso tramite un indirizzo di rete domestica. Gli ospiti esterni alla tua rete non potranno unirsi — passa a un indirizzo server pubblico nelle impostazioni prima di iniziare.',
|
||||||
|
tipRemote: 'Perché gli ospiti esterni alla tua rete domestica possano unirsi, il tuo server deve essere raggiungibile pubblicamente. Se il tuo server è solo interno, cambialo prima di iniziare.',
|
||||||
|
labelName: 'Nome sessione',
|
||||||
|
namePlaceholder: 'Velvet Orbit',
|
||||||
|
reshuffleTooltip: 'Nuovo suggerimento',
|
||||||
|
reshuffleAria: 'Suggerisci un nuovo nome',
|
||||||
|
helperName: 'Come la sessione appare ai tuoi ospiti — mantienilo o scrivine uno tuo.',
|
||||||
|
labelMax: 'Ospiti massimi',
|
||||||
|
helperMax: 'Tu non conti — questo limita solo gli ospiti in ingresso.',
|
||||||
|
labelLink: 'Link di invito',
|
||||||
|
tooltipCopied: 'Copiato',
|
||||||
|
tooltipCopy: 'Copia',
|
||||||
|
ariaCopyLink: 'Copia link di invito',
|
||||||
|
helperLink: 'Invia questo link ai tuoi ospiti. Possono incollarlo ovunque in Psysonic con Ctrl+V.',
|
||||||
|
labelClearQueue: 'Svuota prima la mia coda',
|
||||||
|
helperClearQueue: 'Avvia la sessione con una coda nuova e vuota. Disattivato: i brani già in coda restano e vengono condivisi con gli ospiti.',
|
||||||
|
btnCancel: 'Annulla',
|
||||||
|
btnStarting: 'Avvio in corso…',
|
||||||
|
btnStart: 'Avvia Orbit',
|
||||||
|
btnCopyAndStart: 'Copia link e avvia',
|
||||||
|
errNameRequired: 'Dai un nome alla tua sessione.',
|
||||||
|
errStartFailed: 'Impossibile avviare.',
|
||||||
|
hostLabel: 'Host: {{name}}',
|
||||||
|
participantsTooltip: 'Partecipanti',
|
||||||
|
settingsTooltip: 'Impostazioni sessione',
|
||||||
|
shareTooltip: 'Condividi link di invito',
|
||||||
|
shuffleLabel: 'La coda si rimescola tra',
|
||||||
|
catchUpLabel: 'raggiungi',
|
||||||
|
catchUpTooltip: 'Salta alla posizione attuale dell\'host',
|
||||||
|
hostAway: 'Host offline',
|
||||||
|
hostOnline: 'Host online',
|
||||||
|
endTooltip: 'Termina sessione',
|
||||||
|
leaveTooltip: 'Abbandona sessione',
|
||||||
|
helpTooltip: 'Come funziona Orbit',
|
||||||
|
diag: {
|
||||||
|
openTooltip: 'Diagnostica — log eventi copiabile',
|
||||||
|
title: 'Diagnostica Orbit',
|
||||||
|
role: 'Ruolo',
|
||||||
|
hostTrack: 'ID brano host',
|
||||||
|
hostPos: 'Posizione host',
|
||||||
|
guestTrack: 'ID mio brano',
|
||||||
|
guestPos: 'Mia posizione',
|
||||||
|
drift: 'Scarto',
|
||||||
|
stateAge: 'Età dello stato',
|
||||||
|
eventLog: 'Log eventi ({{count}})',
|
||||||
|
copyLabel: 'Copia',
|
||||||
|
copyTooltip: 'Copia il log negli appunti',
|
||||||
|
clearLabel: 'Cancella',
|
||||||
|
clearTooltip: 'Svuota il buffer',
|
||||||
|
empty: 'Nessun evento ancora — gli eventi appaiono man mano che Orbit si sincronizza.',
|
||||||
|
hint: 'Apri questa finestra prima di riprodurre un problema, poi clicca Copia e incolla nella segnalazione del bug.',
|
||||||
|
copied: 'Copiate {{count}} righe di eventi',
|
||||||
|
copyFailed: 'Impossibile copiare negli appunti',
|
||||||
|
cleared: 'Buffer svuotato',
|
||||||
|
},
|
||||||
|
helpTitle: 'Come funziona Orbit',
|
||||||
|
helpIntro: 'Orbit trasforma Psysonic in una stanza di ascolto condivisa. Un host sceglie la musica; gli ospiti ascoltano in sincronia e possono suggerire brani.',
|
||||||
|
helpHostOnly: '(host)',
|
||||||
|
helpSec1Title: 'Cos\'è Orbit?',
|
||||||
|
helpSec1Body: 'Una modalità di "ascolto condiviso" — l\'host guida la riproduzione, gli ospiti si sintonizzano. Tutto avviene tramite playlist sul tuo server Navidrome; nessuna infrastruttura esterna.',
|
||||||
|
helpSec2Title: 'Host e ospiti',
|
||||||
|
helpSec2Body: 'L\'host controlla la riproduzione (riproduci / pausa / salta / avanza) e decide quando termina la sessione. Gli ospiti seguono la riproduzione dell\'host, possono suggerire brani e uscire o rientrare in qualsiasi momento. Solo l\'host può espellere o bandire definitivamente un partecipante.',
|
||||||
|
helpSec2WarnHead: 'Importante: account separati.',
|
||||||
|
helpSec2WarnBody: 'Ogni partecipante deve avere un proprio account Navidrome. Se host e ospite accedono con lo stesso utente, i loro invii entrano in conflitto e l\'host non vede mai i suggerimenti dell\'ospite.',
|
||||||
|
helpSec3Title: 'Avviare e invitare',
|
||||||
|
helpSec3Body: 'Clicca il pulsante "Orbit" → Crea una sessione → la finestra di avvio mostra un link di invito pronto da copiare e ti permette, se vuoi, di svuotare la coda attuale. Condividi il link come preferisci. Durante una sessione attiva, il pulsante di condivisione nella barra della sessione in alto copia di nuovo il link in qualsiasi momento.',
|
||||||
|
helpSec4Title: 'Unirsi',
|
||||||
|
helpSec4Body: 'Incolla il link di invito ovunque in Psysonic con Ctrl+V / Cmd+V — la richiesta di accesso comparirà automaticamente. In alternativa: "Orbit" → Unisciti a una sessione → incolla nel campo. Se il link punta a un server su cui hai un account, Psysonic passa a quel server automaticamente. Se hai più di un account su quel server, un piccolo selettore ti chiederà quale usare.',
|
||||||
|
helpSec5Title: 'Suggerire brani',
|
||||||
|
helpSec5Body: 'In qualsiasi elenco di brani: doppio clic su una riga, oppure clic destro → "Aggiungi alla sessione Orbit". Un singolo clic mostra un suggerimento invece di riversare l\'intero album nella coda condivisa — è voluto. Le azioni collettive esplicite come "Riproduci tutto" o "Riproduci album" chiedono prima conferma e poi aggiungono (senza mai sostituire).',
|
||||||
|
helpSec6Title: 'La coda condivisa',
|
||||||
|
helpSec6Body: 'La coda mostra i prossimi brani dell\'host — visibile a tutti. Le aggiunte collettive in arrivo vengono sempre accodate, così i suggerimenti degli ospiti non vanno persi. Il rimescolamento automatico riordina periodicamente la coda (configurabile: 1 / 5 / 10 / 15 / 30 min). Se la tua riproduzione si scosta da quella dell\'host, il pulsante "Raggiungi" nella barra della sessione ti riporta alla posizione live dell\'host.',
|
||||||
|
helpSec7Title: 'Approvazioni',
|
||||||
|
helpSec7Body: 'Per impostazione predefinita, i suggerimenti degli ospiti richiedono approvazione manuale — compaiono in una striscia "Approvazioni" in cima al pannello della coda con pulsanti accetta / rifiuta. L\'approvazione automatica può essere attivata nelle impostazioni della sessione così tutto viene aggiunto immediatamente.',
|
||||||
|
helpSec8Title: 'Partecipanti e impostazioni',
|
||||||
|
helpSec8Body: 'Apri l\'icona delle impostazioni nella barra della sessione per la cadenza del rimescolamento, l\'approvazione automatica e la scorciatoia "Rimescola ora". Clicca sul contatore dei partecipanti per vedere chi è connesso — espelli (può rientrare tramite il link) o bandisci (bloccato per la sessione). Anche gli ospiti vedono l\'elenco dei partecipanti, ma in sola lettura.',
|
||||||
|
helpSec9Title: 'Terminare la sessione',
|
||||||
|
helpSec9Body: 'Host X → finestra di conferma → la sessione si chiude per tutti e le playlist del server vengono ripulite automaticamente. Ospite X → l\'ospite esce, la sessione continua. Se l\'host resta silente per 5 minuti, l\'ospite esce automaticamente con un avviso; brevi disconnessioni entro questo periodo sono invisibili.',
|
||||||
|
participantsInviteLabel: 'Link di invito',
|
||||||
|
participantsCountLabel: '{{count}} in sessione',
|
||||||
|
participantsHost: 'host',
|
||||||
|
participantsEmpty: 'Nessun ospite ancora',
|
||||||
|
participantsKickTooltip: 'Rimuovi dalla sessione',
|
||||||
|
participantsKickAria: 'Rimuovi {{user}}',
|
||||||
|
participantsRemoveTooltip: 'Rimuovi dalla sessione',
|
||||||
|
participantsRemoveAria: 'Rimuovi {{user}} da questa sessione',
|
||||||
|
participantsBanTooltip: 'Bandisci definitivamente',
|
||||||
|
participantsBanAria: 'Bandisci definitivamente {{user}}',
|
||||||
|
participantsMuteTooltip: 'Silenzia suggerimenti',
|
||||||
|
participantsUnmuteTooltip: 'Consenti suggerimenti',
|
||||||
|
participantsMuteAria: 'Silenzia i suggerimenti di {{user}}',
|
||||||
|
participantsUnmuteAria: 'Consenti i suggerimenti di {{user}}',
|
||||||
|
confirmRemoveTitle: 'Rimuovere dalla sessione?',
|
||||||
|
confirmRemoveBody: '{{user}} verrà rimosso dalla sessione, ma potrà rientrare tramite il tuo link di invito.',
|
||||||
|
confirmRemoveConfirm: 'Rimuovi',
|
||||||
|
confirmBanTitle: 'Bandire definitivamente?',
|
||||||
|
confirmBanBody: '{{user}} verrà rimosso e non potrà più rientrare in questa sessione. L\'azione non può essere annullata per l\'intera durata della sessione.',
|
||||||
|
confirmBanConfirm: 'Bandisci',
|
||||||
|
confirmCancel: 'Annulla',
|
||||||
|
confirmJoinTitle: 'Unirti alla sessione Orbit?',
|
||||||
|
confirmJoinBody: '{{host}} ti ha invitato a "{{name}}". Vuoi unirti alla sessione?',
|
||||||
|
confirmJoinConfirm: 'Unisciti',
|
||||||
|
confirmLeaveTitle: 'Abbandonare la sessione?',
|
||||||
|
confirmLeaveBody: 'Abbandonare "{{name}}"? Puoi rientrare in qualsiasi momento tramite il link di invito di {{host}}.',
|
||||||
|
confirmLeaveConfirm: 'Abbandona',
|
||||||
|
confirmEndTitle: 'Terminare la sessione per tutti?',
|
||||||
|
confirmEndBody: '"{{name}}" si chiuderà per tutti i partecipanti. Le playlist della sessione verranno ripulite automaticamente.',
|
||||||
|
confirmEndConfirm: 'Termina sessione',
|
||||||
|
invalidLinkTitle: 'Il link di invito non è più valido',
|
||||||
|
invalidLinkBody: 'Questa sessione Orbit non esiste più o è già terminata. Chiedi all\'host un nuovo link di invito.',
|
||||||
|
settingsTitle: 'Impostazioni sessione',
|
||||||
|
settingAutoApprove: 'Approva automaticamente i suggerimenti',
|
||||||
|
settingAutoApproveHint: 'I suggerimenti degli ospiti finiscono subito nella tua coda. Disattivato: restano nell\'elenco della sessione per essere esaminati in seguito.',
|
||||||
|
settingAutoShuffle: 'Rimescolamento automatico',
|
||||||
|
settingAutoShuffleHint: 'Rimescola periodicamente la coda dei prossimi brani. Disattivato: l\'ordine cambia solo se lo riorganizzi manualmente.',
|
||||||
|
settingShuffleInterval: 'Rimescola ogni',
|
||||||
|
settingShuffleIntervalHint: 'Ogni quanto viene rimescolata la coda dei prossimi brani mentre la sessione è attiva.',
|
||||||
|
suggestBlockedMuted: 'L\'host ti ha silenziato per questa sessione — i suggerimenti sono disattivati.',
|
||||||
|
settingShuffleIntervalValue_one: '{{count}} min',
|
||||||
|
settingShuffleIntervalValue_other: '{{count}} min',
|
||||||
|
settingShuffleNow: 'Rimescola ora',
|
||||||
|
toastSuggested: '{{user}} ha suggerito "{{title}}"',
|
||||||
|
toastSuggestedMany: '{{count}} nuovi suggerimenti in coda',
|
||||||
|
toastSuggestLost: 'Il tuo suggerimento potrebbe non essere arrivato all\'host',
|
||||||
|
toastShuffled: 'Coda rimescolata',
|
||||||
|
toastJoined: 'Ti sei unito alla sessione',
|
||||||
|
toastLoginFirst: 'Accedi prima di unirti a una sessione',
|
||||||
|
toastSwitchServer: 'Passa prima a {{url}}, poi incolla di nuovo',
|
||||||
|
toastNoAccountForServer: 'Non hai accesso a {{url}}. Chiedi un invito all\'host.',
|
||||||
|
toastSwitchFailed: 'Impossibile passare a {{url}}',
|
||||||
|
accountPickerTitle: 'Quale account?',
|
||||||
|
accountPickerSub: 'Hai più di un account per {{url}}. Scegli con quale unirti alla sessione.',
|
||||||
|
toastJoinFail: 'Impossibile unirsi alla sessione',
|
||||||
|
joinErrNotFound: 'Sessione non trovata',
|
||||||
|
joinErrEnded: 'La sessione è terminata',
|
||||||
|
joinErrFull: 'La sessione è al completo',
|
||||||
|
joinErrKicked: 'Non puoi rientrare in questa sessione',
|
||||||
|
joinErrNoUser: 'Nessun server attivo',
|
||||||
|
joinErrServerError: 'Impossibile unirsi',
|
||||||
|
ctxAddToSession: 'Aggiungi alla sessione Orbit',
|
||||||
|
ctxSuggestedToast: 'Suggerito alla sessione',
|
||||||
|
ctxSuggestFailed: 'Impossibile suggerire — non sei nella sessione',
|
||||||
|
ctxAddToSessionHost: 'Aggiungi alla sessione Orbit',
|
||||||
|
ctxAddedHostToast: 'Aggiunto alla sessione',
|
||||||
|
ctxAddHostFailed: 'Impossibile aggiungere alla sessione',
|
||||||
|
bulkConfirmTitle: 'Aggiungere tutto questo alla coda Orbit?',
|
||||||
|
bulkConfirmBody: 'Questo aggiungerebbe {{count}} brani alla coda condivisa in un colpo solo. È tanto da notare per i tuoi ospiti. Vuoi procedere?',
|
||||||
|
bulkConfirmYes: 'Aggiungi tutti',
|
||||||
|
bulkConfirmNo: 'Annulla',
|
||||||
|
guestLive: 'Live',
|
||||||
|
guestPlaying: 'In riproduzione',
|
||||||
|
guestPaused: 'In pausa',
|
||||||
|
guestLoading: 'Caricamento…',
|
||||||
|
guestSuggestions: 'Suggerimenti',
|
||||||
|
guestUpNext: 'A seguire',
|
||||||
|
guestUpNextEmpty: 'Nessun brano in coda. Apri il menu contestuale di un brano e scegli "Aggiungi alla sessione Orbit" per suggerirne uno.',
|
||||||
|
guestPendingTitle: 'In attesa dell\'host',
|
||||||
|
guestPendingHint: 'Suggerito — apparirà in coda quando l\'host lo accetterà.',
|
||||||
|
approvalTitle: 'Approvazioni in sospeso',
|
||||||
|
approvalFrom: 'Suggerito da {{user}}',
|
||||||
|
approvalAccept: 'Accetta',
|
||||||
|
approvalDecline: 'Rifiuta',
|
||||||
|
guestUpNextMore: '+ altri {{count}} nella coda dell\'host',
|
||||||
|
guestSubmitter: 'di {{user}}',
|
||||||
|
queueAddedByHost: 'Aggiunto dall\'host',
|
||||||
|
queueAddedByYou: 'Aggiunto da te',
|
||||||
|
queueAddedByUser: 'Aggiunto da {{user}}',
|
||||||
|
guestEmpty: 'Nessun suggerimento ancora. Apri il menu contestuale di un brano e scegli "Aggiungi alla sessione Orbit".',
|
||||||
|
guestFooter: 'L\'host controlla la riproduzione — non puoi modificare l\'elenco.',
|
||||||
|
exitKickedTitle: 'Sei stato bandito dalla sessione',
|
||||||
|
exitRemovedTitle: 'Sei stato rimosso dalla sessione',
|
||||||
|
exitEndedTitle: 'L\'host ha terminato la sessione',
|
||||||
|
exitHostTimeoutTitle: 'L\'host è diventato silente',
|
||||||
|
exitHostTimeoutBody: '{{host}} non invia aggiornamenti da un po\', quindi "{{name}}" è stata chiusa dal tuo lato. Puoi rientrare in qualsiasi momento con il link di invito.',
|
||||||
|
exitKickedBody: '{{host}} ti ha bandito da "{{name}}". Non puoi rientrare.',
|
||||||
|
exitRemovedBody: '{{host}} ti ha rimosso da "{{name}}". Puoi rientrare in qualsiasi momento tramite il link di invito.',
|
||||||
|
exitEndedBody: '"{{name}}" è terminata. Speriamo ti sia divertito.',
|
||||||
|
exitOk: 'OK',
|
||||||
|
};
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
export const player = {
|
||||||
|
regionLabel: 'Lettore musicale',
|
||||||
|
openFullscreen: 'Apri lettore a schermo intero',
|
||||||
|
fullscreen: 'Lettore a schermo intero',
|
||||||
|
closeFullscreen: 'Chiudi schermo intero',
|
||||||
|
closeTooltip: 'Chiudi (Esc)',
|
||||||
|
noTitle: 'Nessun titolo',
|
||||||
|
stop: 'Stop',
|
||||||
|
prev: 'Brano precedente',
|
||||||
|
play: 'Riproduci',
|
||||||
|
pause: 'Pausa',
|
||||||
|
autoDjMixing: 'AutoDJ — mixaggio in corso',
|
||||||
|
autoDjPreparing: 'AutoDJ — preparazione brano successivo',
|
||||||
|
bufferingStream: 'Caricamento brano dal server',
|
||||||
|
previewActive: 'Anteprima in riproduzione',
|
||||||
|
previewLabel: 'Anteprima',
|
||||||
|
delayModalTitle: 'Timer',
|
||||||
|
delayPauseSection: 'Metti in pausa dopo',
|
||||||
|
delayStartSection: 'Avvia dopo',
|
||||||
|
delayPreviewPause: 'Pausa alle',
|
||||||
|
delayPreviewStart: 'Avvio alle',
|
||||||
|
delaySchedulePause: 'Pianifica pausa',
|
||||||
|
delayScheduleStart: 'Pianifica avvio',
|
||||||
|
delayCancelPause: 'Annulla timer di pausa',
|
||||||
|
delayCancelStart: 'Annulla timer di avvio',
|
||||||
|
delayInactivePause: 'Disponibile solo durante la riproduzione.',
|
||||||
|
delayInactiveStart: 'Disponibile in pausa con un brano o una radio caricati.',
|
||||||
|
delayCustomMinutes: 'Ritardo personalizzato (minuti)',
|
||||||
|
delayCustomPlaceholder: 'es. 2.5',
|
||||||
|
closeDelayModal: 'Chiudi',
|
||||||
|
delayIn: 'tra',
|
||||||
|
delayFmtSec: '{{n}}s',
|
||||||
|
delayFmtMin: '{{n}} min',
|
||||||
|
delayFmtHr: '{{n}} h',
|
||||||
|
delayCancel: 'Annulla',
|
||||||
|
delayApply: 'Applica',
|
||||||
|
next: 'Brano successivo',
|
||||||
|
repeat: 'Ripeti',
|
||||||
|
repeatOff: 'Disattivata',
|
||||||
|
repeatAll: 'Tutti',
|
||||||
|
repeatOne: 'Uno',
|
||||||
|
progress: 'Avanzamento brano',
|
||||||
|
volume: 'Volume',
|
||||||
|
mute: 'Disattiva audio',
|
||||||
|
unmute: 'Riattiva audio',
|
||||||
|
toggleQueue: 'Mostra/nascondi coda',
|
||||||
|
collapseQueueResize: 'Comprimi coda, ridimensiona',
|
||||||
|
moreOptions: 'Altre opzioni',
|
||||||
|
equalizer: 'Equalizzatore',
|
||||||
|
playbackRate: 'Velocità di riproduzione',
|
||||||
|
miniPlayer: 'Mini player',
|
||||||
|
lyrics: 'Testi',
|
||||||
|
fsNowPlaying: 'In riproduzione…',
|
||||||
|
fsTrackPosition: 'Brano {{current}} / {{total}}',
|
||||||
|
fsNext: 'Successivo',
|
||||||
|
fsUpNext: 'A seguire',
|
||||||
|
fsQueueEmpty: 'Nessun brano in coda.',
|
||||||
|
shuffle: 'Riproduzione casuale',
|
||||||
|
fsLyricsToggle: 'Testi a schermo intero',
|
||||||
|
lyricsLoading: 'Caricamento testi…',
|
||||||
|
lyricsNotFound: 'Nessun testo trovato per questo brano',
|
||||||
|
lyricsNoSources: 'Nessuna fonte per i testi selezionata — attivane alcune in Impostazioni → Testi',
|
||||||
|
lyricsSourceServer: 'Fonte: Server',
|
||||||
|
lyricsSourceLrclib: 'Fonte: LRCLIB',
|
||||||
|
lyricsSourceNetease: 'Fonte: Netease',
|
||||||
|
lyricsSourceLyricsplus: 'Fonte: YouLyPlus',
|
||||||
|
showDuration: 'Mostra durata',
|
||||||
|
showRemainingTime: 'Mostra tempo rimanente',
|
||||||
|
};
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
export const playlists = {
|
||||||
|
sortTooltip: 'Ordina brani',
|
||||||
|
sortDateAddedNewest: 'Data aggiunta (più recenti)',
|
||||||
|
sortDateAddedOldest: 'Data aggiunta (meno recenti)',
|
||||||
|
title: 'Playlist',
|
||||||
|
newPlaylist: 'Nuova playlist',
|
||||||
|
unnamed: 'Playlist senza nome',
|
||||||
|
createName: 'Nome playlist…',
|
||||||
|
create: 'Crea',
|
||||||
|
cancel: 'Annulla',
|
||||||
|
empty: 'Ancora nessuna playlist.',
|
||||||
|
emptyPlaylist: 'Questa playlist è vuota.',
|
||||||
|
addFirstSong: 'Aggiungi il tuo primo brano',
|
||||||
|
notFound: 'Playlist non trovata.',
|
||||||
|
songs_one: '{{count}} brano',
|
||||||
|
songs_other: '{{count}} brani',
|
||||||
|
playAll: 'Riproduci tutto',
|
||||||
|
playTooltip: 'Riproduci playlist',
|
||||||
|
shuffle: 'Riproduzione casuale',
|
||||||
|
addToQueue: 'Aggiungi alla coda',
|
||||||
|
back: 'Torna alle playlist',
|
||||||
|
deletePlaylist: 'Elimina',
|
||||||
|
confirmDelete: 'Clicca di nuovo per confermare',
|
||||||
|
removeSong: 'Rimuovi dalla playlist',
|
||||||
|
addSongs: 'Aggiungi brani',
|
||||||
|
addSongsTooltip: 'Cerca nella tua libreria per aggiungere brani',
|
||||||
|
searchPlaceholder: 'Cerca nella tua libreria…',
|
||||||
|
noResults: 'Nessun risultato.',
|
||||||
|
suggestions: 'Brani suggeriti',
|
||||||
|
noSuggestions: 'Nessun suggerimento disponibile.',
|
||||||
|
titleBadge: 'Playlist',
|
||||||
|
refreshSuggestions: 'Nuovi suggerimenti',
|
||||||
|
addSong: 'Aggiungi alla playlist',
|
||||||
|
preview: 'Anteprima (30s)',
|
||||||
|
previewStop: 'Interrompi anteprima',
|
||||||
|
playNextSuggestion: 'Riproduci successivo',
|
||||||
|
suggestionsHint: 'Fai doppio clic su una riga per aggiungerla alla playlist',
|
||||||
|
addSelected: 'Aggiungi selezionati',
|
||||||
|
cacheOffline: 'Memorizza playlist offline',
|
||||||
|
offlineCached: 'Playlist memorizzata',
|
||||||
|
removeOffline: 'Rimuovi dalla cache offline',
|
||||||
|
offlineDownloading: 'Memorizzazione in corso… ({{done}}/{{total}} album)',
|
||||||
|
publicLabel: 'Pubblica',
|
||||||
|
privateLabel: 'Privata',
|
||||||
|
editMeta: 'Modifica playlist',
|
||||||
|
editNamePlaceholder: 'Nome playlist…',
|
||||||
|
editCommentPlaceholder: 'Aggiungi una descrizione…',
|
||||||
|
editPublic: 'Playlist pubblica',
|
||||||
|
editSave: 'Salva',
|
||||||
|
editCancel: 'Annulla',
|
||||||
|
changeCover: 'Cambia immagine di copertina',
|
||||||
|
changeCoverLabel: 'Cambia foto',
|
||||||
|
removeCover: 'Rimuovi foto',
|
||||||
|
coverUpdated: 'Copertina aggiornata',
|
||||||
|
metaSaved: 'Playlist aggiornata',
|
||||||
|
downloadZip: 'Scarica (ZIP)',
|
||||||
|
// Toast notifications for multi-select
|
||||||
|
addSuccess: '{{count}} brani aggiunti a {{playlist}}',
|
||||||
|
addPartial: '{{added}} aggiunti, {{skipped}} saltati (duplicati)',
|
||||||
|
addAllSkipped: 'Tutti saltati ({{count}} duplicati)',
|
||||||
|
addedAsDuplicates: '{{count}} brani aggiunti a {{playlist}} (come duplicati)',
|
||||||
|
duplicateConfirmTitle: 'Già in playlist',
|
||||||
|
duplicateConfirmMessage: 'Tutti i {{count}} brani sono già in "{{playlist}}". Vuoi aggiungerli comunque come duplicati?',
|
||||||
|
duplicateConfirmAction: 'Aggiungi comunque',
|
||||||
|
addError: 'Errore durante l\'aggiunta dei brani',
|
||||||
|
createAndAddSuccess: 'Playlist "{{playlist}}" creata con {{count}} brani',
|
||||||
|
createError: 'Errore durante la creazione della playlist',
|
||||||
|
deleteSuccess: '{{count}} playlist eliminate',
|
||||||
|
deleteFailed: 'Errore durante l\'eliminazione di {{name}}',
|
||||||
|
deleteSelected: 'Elimina selezionate',
|
||||||
|
deleteSelectedPartial: 'Solo {{n}} playlist su {{total}} selezionate possono essere eliminate (le altre appartengono a qualcun altro).',
|
||||||
|
mergeSuccess: '{{count}} brani uniti a {{playlist}}',
|
||||||
|
mergeNoNewSongs: 'Nessun nuovo brano da aggiungere',
|
||||||
|
mergeError: 'Errore durante l\'unione delle playlist',
|
||||||
|
mergeInto: 'Unisci in',
|
||||||
|
selectionCount: '{{count}} selezionate',
|
||||||
|
select: 'Seleziona',
|
||||||
|
startSelect: 'Attiva selezione',
|
||||||
|
cancelSelect: 'Annulla',
|
||||||
|
loadingAlbums: 'Risoluzione di {{count}} album…',
|
||||||
|
loadingArtists: 'Risoluzione di {{count}} artisti…',
|
||||||
|
myPlaylists: 'Le mie playlist',
|
||||||
|
noOtherPlaylists: 'Nessun\'altra playlist disponibile',
|
||||||
|
addToPlaylistSuccess: '{{count}} brani aggiunti a {{playlist}}',
|
||||||
|
addToPlaylistNoNew: 'Nessun nuovo brano da aggiungere a {{playlist}}',
|
||||||
|
addToPlaylistError: 'Errore durante l\'aggiunta alla playlist',
|
||||||
|
removeSuccess: 'Brano rimosso dalla playlist',
|
||||||
|
removeError: 'Errore durante la rimozione del brano dalla playlist',
|
||||||
|
importCSV: 'Importa CSV',
|
||||||
|
importCSVTooltip: 'Importa da CSV di Spotify',
|
||||||
|
csvImportReport: 'Report importazione CSV',
|
||||||
|
csvImportTotal: 'Totale',
|
||||||
|
csvImportAdded: 'Aggiunti',
|
||||||
|
csvImportDuplicates: 'Duplicati',
|
||||||
|
csvImportNotFound: 'Non trovati',
|
||||||
|
csvImportNetworkErrors: 'Errori di rete',
|
||||||
|
csvImportDuplicatesTitle: 'Brani duplicati (già in playlist):',
|
||||||
|
csvImportNotFoundTitle: 'Brani non trovati:',
|
||||||
|
csvImportNetworkErrorsTitle: 'Errori di rete (l\'importazione potrebbe essere ritentata):',
|
||||||
|
csvImportDownloadReport: 'Scarica report',
|
||||||
|
csvImportClose: 'Chiudi',
|
||||||
|
csvImportNoValidTracks: 'Nessun brano valido trovato nel file CSV',
|
||||||
|
csvImportFailed: 'Impossibile importare il file CSV',
|
||||||
|
csvImportToast: '{{added}} aggiunti, {{notFound}} non trovati, {{duplicates}} duplicati',
|
||||||
|
csvImportDownloadSuccess: 'Report scaricato correttamente',
|
||||||
|
csvImportDownloadError: 'Impossibile scaricare il report',
|
||||||
|
// Playlist folders (local, per-server organisation layer)
|
||||||
|
folders: {
|
||||||
|
newFolder: 'Nuova cartella',
|
||||||
|
namePlaceholder: 'Nome cartella…',
|
||||||
|
create: 'Crea',
|
||||||
|
rename: 'Rinomina',
|
||||||
|
delete: 'Elimina cartella',
|
||||||
|
ungrouped: 'Senza gruppo',
|
||||||
|
moveToFolder: 'Sposta nella cartella',
|
||||||
|
removeFromFolder: 'Rimuovi dalla cartella',
|
||||||
|
expandFolder: 'Espandi cartella',
|
||||||
|
collapseFolder: 'Comprimi cartella',
|
||||||
|
groupByFolders: 'Raggruppa per cartelle',
|
||||||
|
count_one: '{{count}} playlist',
|
||||||
|
count_other: '{{count}} playlist',
|
||||||
|
localOnlyNotice:
|
||||||
|
'Le cartelle vengono salvate solo in Psysonic su questo dispositivo. Navidrome e l\'API Subsonic non supportano nativamente le cartelle di playlist, quindi la struttura non viene memorizzata sul server né sincronizzata con gli altri tuoi dispositivi e app.',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
export const queue = {
|
||||||
|
title: 'Coda',
|
||||||
|
modePlaylist: 'Playlist',
|
||||||
|
modeTimeline: 'Cronologia',
|
||||||
|
upNext: 'Successivo',
|
||||||
|
history: 'Storia',
|
||||||
|
noUpcoming: 'Nessun brano in programma.',
|
||||||
|
savePlaylist: 'Salva Playlist',
|
||||||
|
updatePlaylist: 'Aggiorna Playlist',
|
||||||
|
filterPlaylists: 'Filtra playlist…',
|
||||||
|
playlistName: 'Nome Playlist',
|
||||||
|
cancel: 'Annulla',
|
||||||
|
save: 'Salva',
|
||||||
|
loadPlaylist: 'Carica Playlist',
|
||||||
|
loading: 'Caricamento…',
|
||||||
|
noPlaylists: 'Nessuna playlist trovata.',
|
||||||
|
load: 'Sostituisci coda e riproduci',
|
||||||
|
appendToQueue: 'Aggiungi alla coda',
|
||||||
|
delete: 'Elimina',
|
||||||
|
deleteConfirm: 'Vuoi eliminare la playlist "{{name}}"?',
|
||||||
|
clear: 'Pulisci coda',
|
||||||
|
shuffle: 'Mescola coda',
|
||||||
|
gapless: 'Gapless',
|
||||||
|
crossfade: 'Crossfade',
|
||||||
|
autoDj: 'AutoDJ',
|
||||||
|
infiniteQueue: 'Coda infinita',
|
||||||
|
playlist: 'Playlist',
|
||||||
|
autoAdded: '— Aggiunti automaticamente —',
|
||||||
|
radioAdded: '— Radio —',
|
||||||
|
hide: 'Nascondi',
|
||||||
|
hideNowPlaying: 'Nascondi le informazioni sul brano in riproduzione',
|
||||||
|
showNowPlaying: 'Mostra le informazioni sul brano in riproduzione',
|
||||||
|
close: 'Chiudi',
|
||||||
|
nextTracks: 'Prossimi brani',
|
||||||
|
shareQueue: 'Copia il link di condivisione della coda',
|
||||||
|
shareQueueEmpty: 'La coda è vuota — niente da condividere.',
|
||||||
|
emptyQueue: 'La coda è vuota.',
|
||||||
|
crossServerEnqueueBlocked: 'Non possono essere aggiungti brani alla coda attuale da un altro server. Termina o svuota la coda.',
|
||||||
|
trackSingular: 'Brano',
|
||||||
|
trackPlural: 'Brani',
|
||||||
|
showRemaining: 'Mostra tempo rimanente',
|
||||||
|
showTotal: 'Mostra tempo totale',
|
||||||
|
showEta: 'Mostra l\'ora di fine prevista',
|
||||||
|
replayGain: 'ReplayGain',
|
||||||
|
rgTrack: 'T {{db}} dB',
|
||||||
|
rgAlbum: 'A {{db}} dB',
|
||||||
|
rgPeak: 'Peak {{pk}}',
|
||||||
|
sourceOffline: 'Riproduzione dalla libreria offline',
|
||||||
|
sourceHot: 'Riproduzione dalla cache',
|
||||||
|
sourceStream: 'Riproduzione dalla rete',
|
||||||
|
clearCachedLoudnessWaveform: 'Cancella la memoria cache del volume e della forma d\'onda, ri-analizza questo brano',
|
||||||
|
recalculatingLoudnessWaveform: 'Ricalcolo del volume e della forma d\'onda per questo brano…',
|
||||||
|
bpm: '{{bpm}} BPM',
|
||||||
|
moods: {
|
||||||
|
happy: 'Felice',
|
||||||
|
excited: 'Entusiasta',
|
||||||
|
calm: 'Calmo',
|
||||||
|
peaceful: 'Sereno',
|
||||||
|
angry: 'Arrabbiato',
|
||||||
|
tense: 'Teso',
|
||||||
|
sad: 'Triste',
|
||||||
|
melancholic: 'Malinconico',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
export const radio = {
|
||||||
|
title: 'Radio Internet',
|
||||||
|
empty: 'Nessuna stazione radio configurata.',
|
||||||
|
addStation: 'Aggiungi stazione',
|
||||||
|
editStation: 'Modifica',
|
||||||
|
playStation: 'Riproduci stazione',
|
||||||
|
stopStation: 'Interrompi stazione',
|
||||||
|
deleteStation: 'Elimina stazione',
|
||||||
|
confirmDelete: 'Clicca di nuovo per confermare',
|
||||||
|
stationName: 'Nome stazione…',
|
||||||
|
streamUrl: 'URL dello stream…',
|
||||||
|
homepageUrl: 'URL sito web (facoltativo)',
|
||||||
|
save: 'Salva',
|
||||||
|
cancel: 'Annulla',
|
||||||
|
live: 'LIVE',
|
||||||
|
liveStream: 'Radio Internet',
|
||||||
|
openHomepage: 'Apri sito web',
|
||||||
|
changeCoverLabel: 'Cambia copertina',
|
||||||
|
removeCover: 'Rimuovi copertina',
|
||||||
|
browseDirectory: 'Cerca nella directory',
|
||||||
|
directoryPlaceholder: 'Cerca stazioni…',
|
||||||
|
noResults: 'Nessuna stazione trovata.',
|
||||||
|
stationAdded: 'Stazione aggiunta',
|
||||||
|
filterAll: 'Tutte',
|
||||||
|
filterFavorites: 'Preferite',
|
||||||
|
sortManual: 'Manuale',
|
||||||
|
sortAZ: 'A → Z',
|
||||||
|
sortZA: 'Z → A',
|
||||||
|
sortNewest: 'Più recenti',
|
||||||
|
favorite: 'Aggiungi ai preferiti',
|
||||||
|
unfavorite: 'Rimuovi dai preferiti',
|
||||||
|
noFavorites: 'Nessuna stazione preferita.',
|
||||||
|
listenerCount_one: '{{count}} ascoltatore',
|
||||||
|
listenerCount_other: '{{count}} ascoltatori',
|
||||||
|
recentlyPlayed: 'Ascoltate di recente',
|
||||||
|
upNext: 'A seguire',
|
||||||
|
};
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export const randomAlbums = {
|
||||||
|
title: 'Album Casuali',
|
||||||
|
refresh: 'Aggiorna',
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export const randomLanding = {
|
||||||
|
title: 'Crea un Mix',
|
||||||
|
mixByTracks: 'Mix per Brani',
|
||||||
|
mixByTracksDesc: 'Selezione casuale di brani da tutta la libreria',
|
||||||
|
mixByAlbums: 'Mix per Album',
|
||||||
|
mixByAlbumsDesc: 'Scelta casuale di album per la tua prossima scoperta',
|
||||||
|
mixByLucky: 'Mix Fortunato',
|
||||||
|
mixByLuckyDesc: 'Mix intelligente istantaneo dai tuoi artisti, album e valutazioni migliori',
|
||||||
|
};
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
export const randomMix = {
|
||||||
|
title: 'Mix casuale',
|
||||||
|
remix: 'Remix',
|
||||||
|
remixTooltip: 'Carica nuovi brani casuali',
|
||||||
|
remixGenre: 'Remix {{genre}}',
|
||||||
|
remixTooltipGenre: 'Carica nuovi brani {{genre}}',
|
||||||
|
playAll: 'Riproduci tutto',
|
||||||
|
trackTitle: 'Titolo',
|
||||||
|
trackArtist: 'Artista',
|
||||||
|
trackAlbum: 'Album',
|
||||||
|
trackFavorite: 'Preferito',
|
||||||
|
trackDuration: 'Durata',
|
||||||
|
favoriteAdd: 'Aggiungi ai preferiti',
|
||||||
|
favoriteRemove: 'Rimuovi dai preferiti',
|
||||||
|
play: 'Riproduci',
|
||||||
|
trackGenre: 'Genere',
|
||||||
|
mixSettingsHeader: 'Impostazioni mix',
|
||||||
|
exclusionsHeader: 'Esclusioni',
|
||||||
|
filterPanelInexactSizeNote: 'La dimensione del mix è un obiettivo — le richieste ampie possono restituire meno brani unici se il pool casuale del server si esaurisce.',
|
||||||
|
mixSize: 'Dimensione playlist',
|
||||||
|
excludeAudiobooks: 'Escludi audiolibri e radio',
|
||||||
|
excludeAudiobooksDesc: 'Confronta le parole chiave con genere, titolo, album e artista — es. Hörbuch, Audiobook, Spoken Word, …',
|
||||||
|
genreBlocked: 'Parola chiave bloccata',
|
||||||
|
genreAddedToBlacklist: 'Aggiunta all\'elenco filtri',
|
||||||
|
genreAlreadyBlocked: 'Già bloccata',
|
||||||
|
artistBlocked: 'Artista bloccato',
|
||||||
|
artistAddedToBlacklist: 'Artista aggiunto all\'elenco filtri',
|
||||||
|
artistClickHint: 'Clicca per bloccare questo artista',
|
||||||
|
blacklistToggle: 'Filtro per parole chiave',
|
||||||
|
genreMixTitle: 'Mix per genere',
|
||||||
|
genreMixDesc: 'I 20 generi principali per numero di brani — clicca per caricare un mix casuale',
|
||||||
|
genreMixAll: 'Tutti i brani',
|
||||||
|
genreMixLoadMore: 'Carica altri 10',
|
||||||
|
genreMixNoGenres: 'Nessun genere trovato sul server.',
|
||||||
|
noSongsMatchFilters: 'Nessun brano corrisponde ai filtri attuali. Prova a rimuovere i blocchi per parola chiave o a cambiare le impostazioni del mix.',
|
||||||
|
shuffleGenres: 'Mostra generi diversi',
|
||||||
|
filterPanelTitle: 'Filtri',
|
||||||
|
filterPanelDesc: 'Clicca un tag genere o il nome di un artista nell\'elenco brani qui sotto per bloccarlo dai mix futuri.',
|
||||||
|
genreClickHint: 'Clicca un tag genere per aggiungerlo\ncome parola chiave filtro.\nCorrisponde a genere, titolo, album e artista.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
export const search = {
|
||||||
|
placeholder: 'Cerca artista, album o brano…',
|
||||||
|
noResults: 'Nessun risultato per "{{query}}"',
|
||||||
|
artists: 'Artisti',
|
||||||
|
albums: 'Album',
|
||||||
|
songs: 'Brani',
|
||||||
|
clearLabel: 'Cancella ricerca',
|
||||||
|
addedToQueueToast: '"{{title}}" aggiunto alla coda',
|
||||||
|
title: 'Cerca',
|
||||||
|
resultsFor: 'Risultati per "{{query}}"',
|
||||||
|
album: 'Album',
|
||||||
|
advanced: 'Ricerca avanzata',
|
||||||
|
localIndexBadge: 'Indice locale',
|
||||||
|
localIndexBadgeTooltip: 'Risultati dall\'indice della libreria locale su questo dispositivo',
|
||||||
|
networkSearchBadge: 'Ricerca sul server',
|
||||||
|
networkSearchBadgeTooltip: 'Risultati dalla ricerca in tempo reale sul server connesso',
|
||||||
|
liveSearchFailed: 'Ricerca non riuscita — riprova',
|
||||||
|
indexIncompleteBanner: 'Indicizzazione in corso — i risultati potrebbero essere incompleti',
|
||||||
|
advancedSearchTerm: 'Termine di ricerca',
|
||||||
|
advancedSearchPlaceholder: 'Titolo, album, artista…',
|
||||||
|
advancedGenre: 'Genere',
|
||||||
|
advancedAllGenres: 'Tutti i generi',
|
||||||
|
advancedYear: 'Anno',
|
||||||
|
advancedYearFrom: 'da',
|
||||||
|
advancedYearTo: 'a',
|
||||||
|
advancedBpm: 'BPM',
|
||||||
|
advancedBpmClear: 'Rimuovi filtro BPM',
|
||||||
|
advancedLossless: 'Formato',
|
||||||
|
advancedLosslessOnly: 'Solo lossless',
|
||||||
|
bpmSourceTag: 'BPM dal tag del file',
|
||||||
|
bpmSourceAnalysis: 'BPM dall\'analisi audio',
|
||||||
|
advancedMoodGroup: 'Mood',
|
||||||
|
advancedAllMoods: 'Tutti i mood',
|
||||||
|
advancedMoodLocalNote: 'Richiede l\'indice della libreria locale e l\'analisi dei brani',
|
||||||
|
scopeRowLabel: 'Cerca in:',
|
||||||
|
scopeAllTooltip: 'Cerca ovunque',
|
||||||
|
scopeArtistsChipTooltip: 'Limita i risultati agli artisti',
|
||||||
|
scopeAlbumsChipTooltip: 'Limita i risultati agli album',
|
||||||
|
scopeSongsChipTooltip: 'Limita i risultati ai brani',
|
||||||
|
advancedAll: 'Tutti',
|
||||||
|
advancedSearch: 'Cerca',
|
||||||
|
advancedEmpty: 'Inserisci un termine di ricerca o seleziona un filtro per iniziare.',
|
||||||
|
advancedNoResults: 'Nessun risultato trovato.',
|
||||||
|
advancedGenreNote: 'I brani vengono selezionati casualmente da questo genere.',
|
||||||
|
recentSearches: 'Ricerche recenti',
|
||||||
|
browse: 'Esplora',
|
||||||
|
emptyHint: 'Cosa vuoi ascoltare?',
|
||||||
|
scopeArtistsPlaceholder: 'Cerca un artista…',
|
||||||
|
scopeArtistsBadgeTooltip: 'Clicca per rimuovere',
|
||||||
|
scopeArtistsGhostTooltip: 'Clicca per cercare solo in questa pagina',
|
||||||
|
scopeAlbumsPlaceholder: 'Cerca un album…',
|
||||||
|
scopeAlbumsBadgeTooltip: 'Clicca per rimuovere',
|
||||||
|
scopeAlbumsGhostTooltip: 'Clicca per cercare solo in questa pagina',
|
||||||
|
scopeNewReleasesPlaceholder: 'Cerca nelle nuove uscite…',
|
||||||
|
scopeNewReleasesBadgeTooltip: 'Clicca per rimuovere',
|
||||||
|
scopeNewReleasesGhostTooltip: 'Clicca per cercare solo in questa pagina',
|
||||||
|
scopeTracksPlaceholder: 'Trova un brano per titolo, artista o album…',
|
||||||
|
scopeTracksBadgeTooltip: 'Clicca per rimuovere',
|
||||||
|
scopeTracksGhostTooltip: 'Clicca per cercare solo in questa pagina',
|
||||||
|
scopeComposersPlaceholder: 'Cerca un compositore…',
|
||||||
|
scopeComposersBadgeTooltip: 'Clicca per rimuovere',
|
||||||
|
scopeComposersGhostTooltip: 'Clicca per cercare solo in questa pagina',
|
||||||
|
genres: 'Generi',
|
||||||
|
shareLink: 'Condividi link',
|
||||||
|
shareTrackTitle: 'Brano condiviso',
|
||||||
|
shareQueueTitle_one: 'Coda condivisa ({{count}} brano)',
|
||||||
|
shareQueueTitle_other: 'Coda condivisa ({{count}} brani)',
|
||||||
|
shareQueueAction: 'Aggiungi alla coda',
|
||||||
|
shareQueueing: 'Aggiunta alla coda…',
|
||||||
|
shareQueued_one: '{{count}} brano condiviso aggiunto alla coda',
|
||||||
|
shareQueued_other: '{{count}} brani condivisi aggiunti alla coda',
|
||||||
|
shareQueuedPartial: 'Aggiunti {{queued}} brani condivisi su {{total}} alla coda ({{skipped}} non trovati).',
|
||||||
|
shareUnsupportedTitle: 'Questo link di condivisione non può essere usato qui',
|
||||||
|
shareUnsupportedSub: 'Usa un link di condivisione per un brano, album, artista, compositore o coda.',
|
||||||
|
shareFromServer: 'Da {{server}}',
|
||||||
|
shareQueuePreview: 'Anteprima brani',
|
||||||
|
shareQueuePreviewLoading: 'Caricamento brani…',
|
||||||
|
shareQueuePreviewEmpty: 'Nessun brano di questo link è stato trovato sul server.',
|
||||||
|
shareQueuePreviewSkipped: '{{skipped}} brani su {{total}} non sono stati trovati su questo server.',
|
||||||
|
moodGroups: {
|
||||||
|
joy: 'Gioia',
|
||||||
|
sadness: 'Tristezza',
|
||||||
|
dance: 'Ballo',
|
||||||
|
work: 'Lavoro',
|
||||||
|
romance: 'Romanticismo',
|
||||||
|
anger: 'Rabbia',
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -0,0 +1,791 @@
|
|||||||
|
export const settings = {
|
||||||
|
title: 'Impostazioni',
|
||||||
|
language: 'Lingua',
|
||||||
|
languageEn: 'English',
|
||||||
|
languageDe: 'Deutsch',
|
||||||
|
languageEs: 'Español',
|
||||||
|
languageFr: 'Français',
|
||||||
|
languageNl: 'Nederlands',
|
||||||
|
languageNb: 'Norsk',
|
||||||
|
languageIt: 'Italiano',
|
||||||
|
languageRu: 'Русский',
|
||||||
|
languageZh: '中文',
|
||||||
|
languageRo: 'Română',
|
||||||
|
languageJa: '日本語',
|
||||||
|
languageHu: 'Magyar',
|
||||||
|
languagePl: 'Polski',
|
||||||
|
languageBg: 'Български',
|
||||||
|
font: 'Font',
|
||||||
|
fontHintOpenDyslexic: 'Facilita la dislessia · nessun supporto per il cinese',
|
||||||
|
theme: 'Tema',
|
||||||
|
appearance: 'Aspetto',
|
||||||
|
servers: 'Server',
|
||||||
|
serverName: 'Nome server',
|
||||||
|
serverUrl: 'URL del server',
|
||||||
|
serverUrlPlaceholder: '192.168.1.100:4533 oppure https://music.example.com',
|
||||||
|
serverAlternateUrl: 'Secondo indirizzo (facoltativo)',
|
||||||
|
serverAlternateUrlPlaceholderPublic: 'https://music.example.com',
|
||||||
|
serverAlternateUrlPlaceholderLocal: '192.168.1.100:4533',
|
||||||
|
serverAlternateUrlHintAddPublic: 'Puoi aggiungere un indirizzo pubblico per accedere fuori dalla tua rete domestica.',
|
||||||
|
serverAlternateUrlHintAddLocal: 'Puoi aggiungere un indirizzo locale per una connessione più veloce quando sei a casa.',
|
||||||
|
serverBothLanError: 'Entrambi gli indirizzi sono locali — mantienine uno o aggiungi un indirizzo pubblico.',
|
||||||
|
dualAddressVerifying: 'Verifica che entrambi gli indirizzi puntino allo stesso server…',
|
||||||
|
dualAddressMismatch: 'I due indirizzi puntano a server diversi. Controlla l\'ortografia e riprova.',
|
||||||
|
dualAddressInsufficient: 'Impossibile confermare che i due indirizzi siano lo stesso server. Rimuovi un indirizzo per continuare.',
|
||||||
|
dualAddressUnreachable: 'Impossibile raggiungere {{host}}. Controlla l\'indirizzo e la tua rete, poi riprova.',
|
||||||
|
urlRemigrationTitle: 'Spostare i dati della libreria?',
|
||||||
|
urlRemigrationMessage: 'Modificando l\'indirizzo, tutti i dati di libreria, analisi e cache delle copertine verranno spostati da {{oldKey}} a {{newKey}}. L\'operazione non può essere annullata.',
|
||||||
|
urlRemigrationConfirm: 'Sposta i dati',
|
||||||
|
urlRemigrationProgress: 'Spostamento dei dati della libreria…',
|
||||||
|
urlRemigrationFailureInspect: 'Impossibile verificare cosa verrebbe spostato. Riprova, oppure apri il log di debug.',
|
||||||
|
urlRemigrationFailureRun: 'Lo spostamento dei dati della libreria non è riuscito. I tuoi dati salvati non sono stati modificati — riprova.',
|
||||||
|
urlRemigrationFailureCoverRename: 'I dati della libreria sono stati spostati, ma non è stato possibile rinominare i file di copertina. Le copertine verranno ricreate al prossimo accesso.',
|
||||||
|
shareUsesLocalUrl: 'Usa l\'indirizzo locale nei link di condivisione',
|
||||||
|
shareUsesLocalUrlDesc: 'Riguarda gli inviti Orbit e le condivisioni di libreria. Predefinito: indirizzo pubblico.',
|
||||||
|
serverUsername: 'Nome utente',
|
||||||
|
serverPassword: 'Password',
|
||||||
|
customHeadersTitle: 'Intestazioni HTTP personalizzate',
|
||||||
|
customHeadersHelp: 'Per gate reverse-proxy (Pangolin, Cloudflare Access). Inviate solo al tuo server — mai a servizi di terze parti.',
|
||||||
|
customHeadersNamePlaceholder: 'Nome intestazione',
|
||||||
|
customHeadersValuePlaceholder: 'Valore intestazione',
|
||||||
|
customHeadersAddRow: 'Aggiungi intestazione',
|
||||||
|
customHeadersRemoveRow: 'Rimuovi intestazione',
|
||||||
|
customHeadersApplyTo: 'Applica intestazioni a',
|
||||||
|
customHeadersApplyTo_public: 'Indirizzo pubblico',
|
||||||
|
customHeadersApplyTo_local: 'Indirizzo locale',
|
||||||
|
customHeadersApplyTo_both: 'Entrambi gli indirizzi',
|
||||||
|
customHeadersNotInShare: 'Le intestazioni personalizzate non sono incluse negli inviti di condivisione — configurale di nuovo su ogni dispositivo.',
|
||||||
|
'customHeadersValidation.tooMany': 'Troppe intestazioni personalizzate (massimo 16).',
|
||||||
|
'customHeadersValidation.nameRequired': 'Il nome dell\'intestazione è obbligatorio.',
|
||||||
|
'customHeadersValidation.nameTooLong': 'Il nome dell\'intestazione è troppo lungo.',
|
||||||
|
'customHeadersValidation.valueTooLong': 'Il valore dell\'intestazione è troppo lungo.',
|
||||||
|
'customHeadersValidation.crlf': 'I nomi e i valori delle intestazioni non possono contenere interruzioni di riga.',
|
||||||
|
'customHeadersValidation.blocked': 'Questo nome di intestazione non è consentito.',
|
||||||
|
'customHeadersValidation.duplicate': 'Nome di intestazione duplicato.',
|
||||||
|
addServer: 'Aggiungi server',
|
||||||
|
addServerTitle: 'Aggiungi nuovo server',
|
||||||
|
editServer: 'Modifica',
|
||||||
|
editServerTitle: 'Modifica server',
|
||||||
|
useServer: 'Usa',
|
||||||
|
deleteServer: 'Elimina',
|
||||||
|
noServers: 'Nessun server salvato.',
|
||||||
|
serverActive: 'Attivo',
|
||||||
|
serverVersionUnknown: 'Versione del server sconosciuta',
|
||||||
|
confirmDeleteServer: 'Eliminare il server "{{name}}"?',
|
||||||
|
confirmDeleteServerLibrary: 'Eliminare anche l\'indice della libreria locale di questo server? Clicca Annulla per mantenere la copia in cache per l\'uso offline.',
|
||||||
|
serverConnecting: 'Connessione in corso…',
|
||||||
|
serverConnected: 'Connesso!',
|
||||||
|
serverFailed: 'Connessione non riuscita.',
|
||||||
|
testBtn: 'Testa connessione',
|
||||||
|
testingBtn: 'Test in corso…',
|
||||||
|
serverCompatible: 'Progettato per Navidrome. Altri server compatibili con Subsonic (Gonic, Airsonic, …) potrebbero funzionare con funzionalità ridotte, poiché Psysonic utilizza molti endpoint API specifici di Navidrome.',
|
||||||
|
userMgmtTitle: 'Gestione utenti',
|
||||||
|
userMgmtDesc: 'Gestisci gli utenti su questo server. Richiede privilegi di amministratore.',
|
||||||
|
userMgmtNoAdmin: 'Devi avere privilegi di amministratore per gestire gli utenti su questo server.',
|
||||||
|
userMgmtLoadError: 'Impossibile caricare gli utenti.',
|
||||||
|
userMgmtLoadFriendly: 'Il server non ha risposto — di solito si tratta di un caso isolato.',
|
||||||
|
userMgmtRetry: 'Riprova',
|
||||||
|
userMgmtEmpty: 'Nessun utente trovato.',
|
||||||
|
userMgmtYouBadge: 'Tu',
|
||||||
|
userMgmtAdminBadge: 'Admin',
|
||||||
|
userMgmtAddUser: 'Aggiungi utente',
|
||||||
|
userMgmtAddUserTitle: 'Aggiungi nuovo utente',
|
||||||
|
userMgmtEditUserTitle: 'Modifica utente',
|
||||||
|
userMgmtUsername: 'Nome utente',
|
||||||
|
userMgmtName: 'Nome visualizzato',
|
||||||
|
userMgmtEmail: 'Email',
|
||||||
|
userMgmtPassword: 'Password',
|
||||||
|
userMgmtPasswordEditHint: 'Inserisci una nuova password per aggiornarla.',
|
||||||
|
userMgmtRoleAdmin: 'Admin',
|
||||||
|
userMgmtLibraries: 'Librerie',
|
||||||
|
userMgmtLibrariesAdminHint: 'Gli utenti amministratori hanno automaticamente accesso a tutte le librerie.',
|
||||||
|
userMgmtLibrariesEmpty: 'Nessuna libreria disponibile su questo server.',
|
||||||
|
userMgmtLibrariesValidation: 'Seleziona almeno una libreria.',
|
||||||
|
userMgmtLibrariesUpdateError: 'Utente salvato, ma l\'assegnazione delle librerie non è riuscita',
|
||||||
|
userMgmtNoLibraries: 'Nessuna libreria assegnata',
|
||||||
|
userMgmtNeverSeen: 'Mai',
|
||||||
|
userMgmtSave: 'Salva',
|
||||||
|
userMgmtCancel: 'Annulla',
|
||||||
|
userMgmtDelete: 'Elimina',
|
||||||
|
userMgmtEdit: 'Modifica',
|
||||||
|
userMgmtConfirmDelete: 'Eliminare l\'utente "{{username}}"? L\'operazione non può essere annullata.',
|
||||||
|
userMgmtCreateError: 'Impossibile creare l\'utente.',
|
||||||
|
userMgmtUpdateError: 'Impossibile aggiornare l\'utente.',
|
||||||
|
userMgmtDeleteError: 'Impossibile eliminare l\'utente.',
|
||||||
|
userMgmtCreated: 'Utente creato.',
|
||||||
|
userMgmtUpdated: 'Utente aggiornato.',
|
||||||
|
userMgmtDeleted: 'Utente eliminato.',
|
||||||
|
userMgmtValidationMissing: 'Nome utente, nome visualizzato e password sono obbligatori.',
|
||||||
|
userMgmtValidationMissingIdentity: 'Nome utente e nome visualizzato sono obbligatori.',
|
||||||
|
userMgmtMagicStringGenerate: 'Genera magic string',
|
||||||
|
userMgmtSaveAndMagicString: 'Salva e genera magic string',
|
||||||
|
userMgmtMagicStringPasswordNavHint:
|
||||||
|
'Navidrome salverà questa password per l\'utente. Se è diversa da quella attuale, il server aggiornerà la password di accesso.',
|
||||||
|
userMgmtMagicStringPlaintextWarning:
|
||||||
|
'Condividi la magic string con attenzione: contiene una password non cifrata (la codifica non è crittografia). Chiunque possieda la stringa completa può accedere come questo utente.',
|
||||||
|
userMgmtMagicStringCopied: 'Magic string copiata negli appunti.',
|
||||||
|
userMgmtMagicStringCopyFailed: 'Impossibile copiare negli appunti.',
|
||||||
|
userMgmtMagicStringLoginFailed: 'Verifica della password non riuscita — le credenziali non hanno potuto essere confermate.',
|
||||||
|
userMgmtMagicStringModalTitle: 'Genera magic string',
|
||||||
|
userMgmtMagicStringModalDesc: 'Inserisci la password Subsonic per "{{username}}". Sarà inclusa nella magic string copiata.',
|
||||||
|
userMgmtMagicStringModalConfirm: 'Copia stringa',
|
||||||
|
audiomuseTitle: 'AudioMuse-AI (Navidrome)',
|
||||||
|
audiomuseBadge: 'AudioMuse-AI',
|
||||||
|
audiomuseDesc:
|
||||||
|
'Attiva se questo server ha configurato il <pluginLink>plugin Navidrome AudioMuse-AI</pluginLink>. Abilita il Mix istantaneo dai brani e usa gli artisti simili lato server invece di Last.fm nelle pagine artista.',
|
||||||
|
audiomuseStatusActive: 'Attivo',
|
||||||
|
audiomuseStatusChecking: 'Verifica in corso…',
|
||||||
|
audiomuseStatusNotDetected: 'Non rilevato',
|
||||||
|
audiomuseStatusProbeFailed: 'Verifica non riuscita',
|
||||||
|
audiomuseIssueHint:
|
||||||
|
'Il Mix istantaneo è fallito di recente — controlla il plugin Navidrome e l\'API AudioMuse. Gli artisti simili tornano a usare Last.fm quando il server non ne restituisce nessuno.',
|
||||||
|
connected: 'Connesso',
|
||||||
|
failed: 'Non riuscito',
|
||||||
|
eqTitle: 'Equalizzatore',
|
||||||
|
eqEnabled: 'Attiva equalizzatore',
|
||||||
|
eqPreset: 'Preset',
|
||||||
|
eqPresetCustom: 'Personalizzato',
|
||||||
|
eqPresetBuiltin: 'Preset integrati',
|
||||||
|
eqPresetCustomGroup: 'I miei preset',
|
||||||
|
eqPresetAutoEqGroup: 'AutoEQ',
|
||||||
|
eqSavePreset: 'Salva come preset',
|
||||||
|
eqPresetName: 'Nome preset…',
|
||||||
|
eqDeletePreset: 'Elimina preset',
|
||||||
|
eqResetBands: 'Ripristina piatto',
|
||||||
|
eqPreGain: 'Pre-guadagno',
|
||||||
|
eqResetPreGain: 'Ripristina pre-guadagno',
|
||||||
|
eqAutoEqTitle: 'Ricerca cuffie AutoEQ',
|
||||||
|
eqAutoEqPlaceholder: 'Cerca modello di cuffie / IEM…',
|
||||||
|
eqAutoEqSearching: 'Ricerca in corso…',
|
||||||
|
eqAutoEqNoResults: 'Nessun risultato trovato',
|
||||||
|
eqAutoEqError: 'Ricerca non riuscita',
|
||||||
|
eqAutoEqRateLimit: 'Limite di richieste GitHub raggiunto — riprova tra un minuto',
|
||||||
|
eqAutoEqFetchError: 'Impossibile recuperare il profilo EQ',
|
||||||
|
behavior: 'Comportamento dell\'app',
|
||||||
|
groupTray: 'Area di notifica',
|
||||||
|
groupLinuxRendering: 'Rendering Linux',
|
||||||
|
groupClock: 'Orologio',
|
||||||
|
groupDisplay: 'Visualizzazione',
|
||||||
|
groupWindow: 'Finestra',
|
||||||
|
cacheTitle: 'Dimensione massima archiviazione',
|
||||||
|
cacheDesc: 'Cache nel browser per copertine e immagini artisti (IndexedDB). Le voci più vecchie vengono rimosse automaticamente quando lo spazio scarseggia.',
|
||||||
|
cacheUsedImages: 'Immagini:',
|
||||||
|
cacheUsedOffline: 'Brani offline:',
|
||||||
|
cacheUsedHot: 'Spazio su disco:',
|
||||||
|
hotCacheTrackCount: 'Brani in cache:',
|
||||||
|
cacheMaxLabel: 'Dimensione massima',
|
||||||
|
imageCacheScopeLabel: 'Ambito',
|
||||||
|
imageCacheSubTitle: 'Anteprime nel browser',
|
||||||
|
coverDiskCacheSubTitle: 'Cache copertine su disco',
|
||||||
|
coverCacheStrategyTitle: 'Cache copertine',
|
||||||
|
coverCacheStrategyDesc: 'Puoi scegliere una strategia per ogni server: Lenta — carica le copertine quando servono; Aggressiva — carica quando servono più precaricamento aggiuntivo in background.',
|
||||||
|
coverCacheStrategyLabel: 'Strategia',
|
||||||
|
coverCacheStrategyServerLabel: 'Server',
|
||||||
|
coverCacheStrategyProgressLabel: 'Cache',
|
||||||
|
coverCacheStrategyActionsLabel: 'Azioni',
|
||||||
|
coverCacheStrategyLazy: 'Lenta',
|
||||||
|
coverCacheStrategyLazyDesc: 'Carica le copertine solo quando servono.',
|
||||||
|
coverCacheStrategyAggressive: 'Aggressiva',
|
||||||
|
coverCacheStrategyAggressiveDesc: 'Comportamento della strategia Lenta, con in più precaricamento in background.',
|
||||||
|
coverCacheStrategyDiskUsage: 'Su disco: {{size}}',
|
||||||
|
coverCacheStrategyProgressValue: '{{percent}}% ({{done}}/{{total}}) · {{size}}',
|
||||||
|
coverCacheStrategyClearAction: 'Svuota cache copertine',
|
||||||
|
coverCacheStrategyClearTitle: 'Svuotare la cache delle copertine?',
|
||||||
|
coverCacheStrategyClearDesc: 'Rimuove tutte le immagini di copertina in cache per {{server}}. Verranno riscaricate quando necessario.',
|
||||||
|
coverCacheStrategyClearConfirm: 'Svuota',
|
||||||
|
coverCacheStrategyClearCancel: 'Annulla',
|
||||||
|
coverCacheStrategyClearSuccess: 'Cache delle copertine svuotata per questo server.',
|
||||||
|
coverCacheStrategyClearError: 'Impossibile svuotare la cache delle copertine.',
|
||||||
|
coverCacheStrategyServerRemoved: 'server rimosso',
|
||||||
|
cacheClearBtn: 'Svuota cache',
|
||||||
|
cacheClearWarning: 'Elimina tutte le copertine e le immagini degli artisti in cache dall\'archiviazione del browser. Verranno riscaricate quando necessario.',
|
||||||
|
cacheClearConfirm: 'Svuota cache immagini',
|
||||||
|
cacheClearCancel: 'Annulla',
|
||||||
|
waveformCacheCleared: 'Cache della forma d\'onda svuotata ({{count}} righe).',
|
||||||
|
waveformCacheClearFailed: 'Impossibile svuotare la cache della forma d\'onda.',
|
||||||
|
storageTabTitle: 'Offline e cache',
|
||||||
|
mediaDirTitle: 'Cartella multimediale',
|
||||||
|
mediaDirDesc: 'Cartella principale per la riproduzione locale. La libreria offline usa library/; il precaricamento della coda usa cache/.',
|
||||||
|
mediaDirDefault: 'Predefinita (dati app)',
|
||||||
|
mediaDirChange: 'Cambia cartella',
|
||||||
|
mediaDirClear: 'Ripristina predefinita',
|
||||||
|
mediaDirHint: 'I nuovi download useranno questa posizione. I file esistenti restano nei loro percorsi originali finché non vengono rimossi.',
|
||||||
|
offlineStorageTitle: 'Archiviazione libreria offline',
|
||||||
|
offlineDirTitle: 'Libreria offline (nell\'app)',
|
||||||
|
offlineDirDesc: 'Posizione di archiviazione per i brani resi disponibili offline in Psysonic.',
|
||||||
|
offlineDirDefault: 'Predefinita (dati app)',
|
||||||
|
offlineDirChange: 'Cambia cartella',
|
||||||
|
offlineDirClear: 'Ripristina predefinita',
|
||||||
|
offlineDirHint: 'I nuovi download useranno questa posizione. I download esistenti restano nel loro percorso originale.',
|
||||||
|
hotCacheTitle: 'Cache attiva di riproduzione',
|
||||||
|
hotCacheDisclaimer: 'Precarica i prossimi brani in coda e mantiene quelli precedenti. Se attivata, usa spazio su disco e rete.',
|
||||||
|
hotCacheDirDefault: 'Predefinita (dati app)',
|
||||||
|
hotCacheDirChange: 'Cambia cartella',
|
||||||
|
hotCacheDirClear: 'Ripristina predefinita',
|
||||||
|
hotCacheDirHint: 'Cambiare la cartella reimposta l\'indice interno dell\'app; i file già su disco restano dove sono finché non li rimuovi.',
|
||||||
|
hotCacheEnabled: 'Attiva cache attiva di riproduzione',
|
||||||
|
hotCacheMaxMb: 'Dimensione massima cache',
|
||||||
|
hotCacheDebounce: 'Ritardo cambio coda',
|
||||||
|
hotCacheDebounceImmediate: 'Immediato',
|
||||||
|
hotCacheDebounceSeconds: '{{n}} s',
|
||||||
|
hotCacheClearBtn: 'Svuota cache attiva',
|
||||||
|
audioOutputDevice: 'Dispositivo di uscita audio',
|
||||||
|
audioOutputDeviceDesc: 'Seleziona il dispositivo audio usato da Psysonic per la riproduzione. Le modifiche hanno effetto immediato e riavviano il brano corrente.',
|
||||||
|
audioOutputDeviceDefault: 'Predefinito di sistema',
|
||||||
|
audioOutputDeviceRefresh: 'Aggiorna elenco dispositivi',
|
||||||
|
audioOutputDeviceOsDefaultNow: 'uscita di sistema attuale',
|
||||||
|
audioOutputDeviceListError: 'Impossibile caricare l\'elenco dei dispositivi audio.',
|
||||||
|
audioOutputDeviceNotInCurrentList: 'non nell\'elenco attuale',
|
||||||
|
audioOutputDeviceRememberEq: 'Ricorda EQ per dispositivo',
|
||||||
|
audioOutputDeviceRememberEqDesc: 'Salva le impostazioni dell\'equalizzatore per ogni dispositivo di uscita audio e ripristinale automaticamente quando cambi dispositivo. I profili cambiano solo quando scegli un dispositivo qui, mentre l\'uscita predefinita di sistema usa un unico profilo condiviso.',
|
||||||
|
hiResTitle: 'Riproduzione Hi-Res nativa',
|
||||||
|
hiResEnabled: 'Attiva riproduzione hi-res nativa',
|
||||||
|
hiResDesc: 'Riproduce ogni brano al suo sample rate originale invece di ricampionare tutto a 44,1 kHz, cambiando il dispositivo audio in base al file (da 88,2 kHz in su). Attivalo solo se il tuo hardware e la tua rete gestiscono in modo affidabile sample rate elevati.',
|
||||||
|
hiResCrossfadeResampleTitle: 'Frequenza di miscelazione per Crossfade / AutoDJ / Gapless',
|
||||||
|
hiResCrossfadeResampleDesc: 'Quando i brani adiacenti hanno sample rate diversi, entrambi vengono ricampionati a questa frequenza durante crossfade, AutoDJ e transizioni gapless.',
|
||||||
|
hiResCrossfadeResample44: '44,1 kHz',
|
||||||
|
hiResCrossfadeResample88: '88,2 kHz',
|
||||||
|
hiResCrossfadeResample96: '96 kHz',
|
||||||
|
hiResCrossfadeResampleWarning: 'Il ricampionamento usa più CPU e memoria — scegli con attenzione sui dispositivi più lenti.',
|
||||||
|
showArtistImages: 'Mostra immagini artisti',
|
||||||
|
showArtistImagesDesc: 'Carica e mostra le immagini degli artisti nella panoramica Artisti. Disattivato di default per ridurre il carico su disco e rete del server nelle librerie grandi.',
|
||||||
|
showOrbitTrigger: 'Mostra "Orbit" nell\'intestazione',
|
||||||
|
showOrbitTriggerDesc: 'Il pulsante nella barra superiore per avviare o unirsi a una sessione di ascolto condivisa. Nascondilo se non usi Orbit — puoi riattivarlo qui.',
|
||||||
|
showTrayIcon: 'Mostra icona nell\'area di notifica',
|
||||||
|
showTrayIconDesc: 'Mostra l\'icona di Psysonic nell\'area di notifica di sistema / barra dei menu.',
|
||||||
|
minimizeToTray: 'Riduci nell\'area di notifica',
|
||||||
|
minimizeToTrayDesc: 'Alla chiusura della finestra, mantieni Psysonic in esecuzione nell\'area di notifica invece di chiuderlo.',
|
||||||
|
clockFormat: 'Formato orario',
|
||||||
|
clockFormatDesc: 'Formato dell\'orario usato nella stima della coda e nell\'anteprima del timer di spegnimento.',
|
||||||
|
clockFormatAuto: 'Automatico (lingua di sistema)',
|
||||||
|
clockFormatTwentyFour: '24 ore',
|
||||||
|
clockFormatTwelve: '12 ore (AM/PM)',
|
||||||
|
preloadMiniPlayer: 'Precarica mini player',
|
||||||
|
preloadMiniPlayerDesc: 'Crea la finestra del mini player in background all\'avvio dell\'app, così mostra i contenuti istantaneamente alla prima apertura. Usa un po\' di memoria in più.',
|
||||||
|
discordRichPresence: 'Discord Rich Presence',
|
||||||
|
discordRichPresenceDesc: 'Mostra il brano attualmente in riproduzione sul tuo profilo Discord. Richiede che Discord sia in esecuzione.',
|
||||||
|
discordRichPresenceNotice: 'Attenzione: questo è il Discord Rich Presence integrato di Psysonic. Se preferisci usare il plugin ufficiale Discord Rich Presence di Navidrome, lascia questa opzione disattivata e attiva invece "Mostra in In riproduzione" più in basso in questa pagina.',
|
||||||
|
useCustomTitlebar: 'Barra del titolo personalizzata',
|
||||||
|
useCustomTitlebarDesc: 'Sostituisce la barra del titolo di sistema con una integrata coerente con il tema dell\'app. Disattivala per usare la barra del titolo nativa GNOME/GTK.',
|
||||||
|
windowButtonStyle: 'Pulsanti della finestra',
|
||||||
|
windowButtonStyleDesc: 'Scegli l\'aspetto dei pulsanti di riduzione a icona, ingrandimento e chiusura.',
|
||||||
|
windowButtonsDots: 'Puntini',
|
||||||
|
windowButtonsDotsGlyph: 'Puntini + icone',
|
||||||
|
windowButtonsFlat: 'Piatto',
|
||||||
|
windowButtonsPill: 'Pillola',
|
||||||
|
windowButtonsOutline: 'Contorno',
|
||||||
|
windowButtonsGlyph: 'Minimale',
|
||||||
|
showMinimizeButton: 'Mostra pulsante di riduzione a icona',
|
||||||
|
showMinimizeButtonDesc: 'Disattiva per mostrare solo i pulsanti di ingrandimento e chiusura.',
|
||||||
|
linuxWebkitSmoothScroll: 'Scorrimento fluido (Linux)',
|
||||||
|
linuxWebkitSmoothScrollDesc: 'Attivo: scorrimento inerziale. Disattivo: riga per riga, in stile GTK.',
|
||||||
|
linuxWebkitInputForceRepaint: 'Ridisegna i campi al focus (Linux)',
|
||||||
|
linuxWebkitInputForceRepaintDesc: 'Risolve i campi di testo che si bloccano al clic. Le icone di ricerca potrebbero lampeggiare brevemente al focus.',
|
||||||
|
linuxWaylandTextRender: 'Rendering testo Wayland (Linux)',
|
||||||
|
linuxWaylandTextRenderDesc:
|
||||||
|
'La levigatura dei caratteri si aggiorna immediatamente. Il preset di accelerazione (Nitido / GPU) ha effetto dopo il riavvio dell\'app.',
|
||||||
|
linuxWaylandTextRenderBalanced: 'Bilanciato',
|
||||||
|
linuxWaylandTextRenderSharp: 'Nitido (leggero sulla CPU)',
|
||||||
|
linuxWaylandTextRenderGpu: 'Priorità GPU',
|
||||||
|
linuxWaylandTextRenderMinimal: 'Minimo (levigatura CSS predefinita)',
|
||||||
|
discordCoverTitle: 'Fonte della copertina',
|
||||||
|
discordCoverDesc: 'Da dove proviene la copertina dell\'album mostrata sul tuo profilo Discord.',
|
||||||
|
discordCoverNone: 'Nessuna (solo icona dell\'app)',
|
||||||
|
discordCoverServer: 'Server (tramite info album)',
|
||||||
|
discordCoverApple: 'Apple Music',
|
||||||
|
discordOptions: 'Opzioni avanzate Discord',
|
||||||
|
discordTemplates: 'Modelli di testo personalizzati',
|
||||||
|
discordTemplatesDesc: 'Personalizza quali informazioni vengono mostrate sul tuo profilo Discord. Variabili: {title}, {artist}, {album}',
|
||||||
|
discordTemplateDetails: 'Riga principale (dettagli)',
|
||||||
|
discordTemplateState: 'Riga secondaria (stato)',
|
||||||
|
discordTemplateLargeText: 'Descrizione album (largeText)',
|
||||||
|
discordTemplateName: 'Riga nell\'elenco utenti (nome)',
|
||||||
|
nowPlayingEnabled: 'Mostra in In riproduzione',
|
||||||
|
nowPlayingEnabledDesc: 'Trasmette il brano attualmente in riproduzione alla vista degli ascoltatori in tempo reale del server. Disattiva per interrompere l\'invio dei dati di riproduzione.',
|
||||||
|
nowPlayingPluginNote: 'Richiesto quando si utilizza il plugin ufficiale Discord Rich Presence di Navidrome.',
|
||||||
|
externalArtwork: 'Recupero copertine esterne',
|
||||||
|
externalArtworkDesc: 'Recupera sfondi e banner artista ad alta risoluzione da fanart.tv per l\'hero del Mainstage, le pagine artista e il player a schermo intero. Disattivato di default.',
|
||||||
|
externalArtworkNote: 'Se attivo, invia il nome dell\'artista (e dell\'album corrente) a musicbrainz.org per identificare l\'artista, quindi recupera le immagini da fanart.tv — su richiesta e in sola lettura; i tag della tua libreria non vengono mai modificati. Le immagini sono fornite da fanart.tv e dai suoi collaboratori.',
|
||||||
|
externalArtworkByokTitle: 'Chiave API personale (BYOK)',
|
||||||
|
externalArtworkByokDesc: 'Facoltativo. Inserisci qui la tua chiave API personale di fanart.tv — verrà inviata in aggiunta alla chiave dell\'app.',
|
||||||
|
externalArtworkByokSaved: 'Salvata — inviata insieme alla chiave dell\'app finché il recupero è attivo.',
|
||||||
|
enableBandsintown: 'Date dei concerti Bandsintown',
|
||||||
|
enableBandsintownDesc: 'Mostra i prossimi concerti dell\'artista corrente nella scheda Info. I dati provengono dall\'API pubblica di Bandsintown.',
|
||||||
|
lyricsServerFirst: 'Preferisci i testi del server',
|
||||||
|
lyricsServerFirstDesc: 'Controlla i testi forniti dal server (tag incorporati, file collaterali) prima di interrogare LRCLIB. Disattiva per usare prima LRCLIB.',
|
||||||
|
enableNeteaselyrics: 'Testi di Netease Cloud Music',
|
||||||
|
enableNeteaselyricsDesc: 'Usa Netease Cloud Music come fonte di ultima istanza per i testi quando sia il server che LRCLIB non restituiscono nulla. Copertura migliore per la musica asiatica e internazionale.',
|
||||||
|
lyricsSourcesTitle: 'Fonti dei testi',
|
||||||
|
lyricsSourcesDesc: 'Scegli quali fonti interrogare per i testi e in quale ordine. Trascina per riordinare. Le fonti disattivate vengono saltate completamente.',
|
||||||
|
lyricsSourceServer: 'Server',
|
||||||
|
lyricsSourceLrclib: 'LRCLIB',
|
||||||
|
lyricsSourceNetease: 'Netease Cloud Music',
|
||||||
|
lyricsYouLyPlus: 'YouLyPlus (Karaoke)',
|
||||||
|
lyricsYouLyPlusDesc: 'Sincronizzazione parola per parola da un backend della community (Apple Music, Spotify, Musixmatch, QQ). Provato per primo; le fonti attivate sotto agiscono come riserva.',
|
||||||
|
lyricsSourcesFallbackHint: 'Usata come riserva quando YouLyPlus non trova nulla. Trascina per riordinare.',
|
||||||
|
lyricsSourcesPrimaryHint: 'Provate in ordine. Trascina per riordinare. Tutte disattivate = testi disabilitati.',
|
||||||
|
lyricsStaticOnly: 'Mostra i testi solo come testo statico',
|
||||||
|
lyricsStaticOnlyDesc: 'Visualizza i testi sincronizzati senza scorrimento automatico e senza evidenziazione delle parole.',
|
||||||
|
downloadsTitle: 'Esportazione ZIP e archiviazione',
|
||||||
|
downloadsFolderDesc: 'Cartella di destinazione per gli album che scarichi come file ZIP sul tuo computer.',
|
||||||
|
downloadsDefault: 'Cartella download predefinita',
|
||||||
|
pickFolder: 'Seleziona',
|
||||||
|
pickFolderTitle: 'Seleziona cartella di download',
|
||||||
|
clearFolder: 'Rimuovi cartella di download',
|
||||||
|
logout: 'Esci',
|
||||||
|
aboutTitle: 'Informazioni su Psysonic',
|
||||||
|
aboutDesc: 'Un moderno player musicale desktop realizzato per Navidrome. Utilizza l\'API Subsonic con estensioni specifiche di Navidrome. Sviluppato su Tauri v2 con un motore audio nativo in Rust — leggero e veloce, ma ricco di funzionalità: barra di avanzamento a forma d\'onda, testi sincronizzati, integrazione con Last.fm, equalizzatore a 10 bande, crossfade, riproduzione gapless, Replay Gain, esplorazione per genere e un\'ampia libreria di temi.',
|
||||||
|
aboutLicense: 'Licenza',
|
||||||
|
aboutLicenseText: 'GNU GPL v3 — libero da usare, modificare e distribuire con la stessa licenza.',
|
||||||
|
aboutRepo: 'Codice sorgente su GitHub',
|
||||||
|
aboutVersion: 'Versione',
|
||||||
|
aboutBuiltWith: 'Sviluppato con Tauri · React · TypeScript · Rust/rodio',
|
||||||
|
aboutMaintainersLabel: 'Manutentori',
|
||||||
|
aboutReleaseNotesLabel: 'Note di rilascio',
|
||||||
|
aboutReleaseNotesLink: 'Apri le novità di questa versione',
|
||||||
|
aboutContributorsLabel: 'Collaboratori',
|
||||||
|
showChangelogOnUpdate: 'Mostra "Novità" dopo l\'aggiornamento',
|
||||||
|
showChangelogOnUpdateDesc: 'Mostra un discreto banner con il changelog sopra In riproduzione dopo un aggiornamento. Cliccandolo si aprono le note di rilascio; la X lo chiude.',
|
||||||
|
libraryGridMaxColumnsTitle: 'Griglie a schede della libreria',
|
||||||
|
libraryGridMaxColumnsPerfHint: 'Valori più alti inseriscono più riquadri per riga e possono aumentare il lavoro di layout e disegno — evidente su librerie molto grandi o dispositivi più lenti.',
|
||||||
|
libraryGridMaxColumnsRangeLabel: 'Colonne massime ({{min}}–{{max}})',
|
||||||
|
libraryGridMaxColumnsDesc: 'Si applica alle viste a schede di album, artisti, playlist, radio, offline e altre viste della libreria. Valori più bassi usano riquadri più grandi e sono di solito più leggeri per la CPU.',
|
||||||
|
libraryIndexTitle: 'Indice locale della libreria (anteprima)',
|
||||||
|
libraryIndexDesc: 'Mantiene una copia locale del database dei brani di ogni server, così la navigazione e la ricerca restano veloci e funzionano offline. La sincronizzazione iniziale viene eseguita per ogni server configurato; i server offline vengono ritentati automaticamente.',
|
||||||
|
libraryIndexDeltaHint: 'La sincronizzazione differenziale in background controlla i server collegati ogni 30 secondi ed esegue quando necessario — in genere ogni 5–45 minuti a seconda della dimensione della libreria e del carico.',
|
||||||
|
libraryIndexEnable: 'Attiva indice locale della libreria',
|
||||||
|
libraryIndexEnableAllDesc: 'Indicizza e sincronizza tutti i server configurati in background.',
|
||||||
|
libraryIndexNoServer: 'Aggiungi prima un server.',
|
||||||
|
libraryIndexServerListTitle: 'Server indicizzati',
|
||||||
|
libraryIndexAllExcluded: 'Tutti i server sono esclusi dalla sincronizzazione. Riattiva l\'indice o aggiungi un server.',
|
||||||
|
libraryIndexServerOffline: 'Server offline — sincronizzazione rinviata',
|
||||||
|
libraryIndexServerSyncing: 'Sincronizzazione in corso…',
|
||||||
|
libraryIndexFullResync: 'Risincronizzazione completa',
|
||||||
|
libraryIndexDeltaSync: 'Sincronizzazione differenziale',
|
||||||
|
libraryIndexExcludeServer: 'Escludi dalla sincronizzazione',
|
||||||
|
libraryIndexExcludingServer: 'Esclusione in corso…',
|
||||||
|
libraryIndexExcludedTitle: 'Escluso dalla sincronizzazione',
|
||||||
|
libraryIndexIncludeServer: 'Includi di nuovo',
|
||||||
|
libraryIndexIncludingServer: 'Inclusione in corso…',
|
||||||
|
libraryIndexStatus: 'Stato',
|
||||||
|
libraryIndexStatusIdle: 'Inattivo',
|
||||||
|
libraryIndexStatusProbing: 'Verifica del server…',
|
||||||
|
libraryIndexStatusInitial: 'Sincronizzazione iniziale…',
|
||||||
|
libraryIndexStatusReady: 'Pronto ({{count}} brani)',
|
||||||
|
libraryIndexStatusError: 'Errore — controlla i log',
|
||||||
|
libraryIndexProgressIngest: 'Indicizzati {{count}} brani…',
|
||||||
|
libraryIndexProgressVerify: 'Verificati {{checked}} ({{deleted}} rimossi)',
|
||||||
|
libraryIndexSyncNow: 'Sincronizza ora',
|
||||||
|
libraryIndexVerify: 'Verifica integrità della libreria',
|
||||||
|
libraryIndexCancel: 'Annulla',
|
||||||
|
libraryIndexAutoReconcile: 'Riconcilia automaticamente al calo del conteggio',
|
||||||
|
libraryIndexAutoReconcileDesc: 'Controlla automaticamente i brani rimossi quando il server segnala un numero inferiore al previsto.',
|
||||||
|
libraryIndexSyncError: 'Sincronizzazione della libreria non riuscita: {{error}}',
|
||||||
|
libraryIndexBindError: 'Impossibile attivare l\'indice: {{error}}',
|
||||||
|
analyticsStrategyTitle: 'Strategie di analisi',
|
||||||
|
analyticsStrategyDesc: 'Scegli lo stile di analisi per la libreria.',
|
||||||
|
analyticsStrategyLabel: 'Strategia',
|
||||||
|
analyticsStrategyLazy: 'Lenta',
|
||||||
|
analyticsStrategyLazyDesc: 'Analizza solo quando i brani vengono riprodotti o entrano nella cache attiva/offline — uso minimo di CPU e rete.',
|
||||||
|
analyticsStrategyAdvanced: 'Aggressiva',
|
||||||
|
analyticsStrategyAdvancedDesc: 'Scansione in background più aggressiva. Una volta terminata, ottieni il BPM per ogni brano e caricamenti istantanei di volume e forma d\'onda.',
|
||||||
|
analyticsStrategyPriorityTitle: 'Priorità di analisi (sempre applicata)',
|
||||||
|
analyticsStrategyPriorityHigh: '1 — In riproduzione: scarica e analizza per primo (byte di riproduzione, recupero volume o HTTP se necessario).',
|
||||||
|
analyticsStrategyPriorityMiddle: '2 — A seguire: i prossimi ~5 brani in coda e i vicini della cache attiva — analizza dai byte in cache/scaricati quando possibile; recupero HTTP solo in caso di mancanza.',
|
||||||
|
analyticsStrategyPriorityLow: '3 — Coda della libreria (solo Aggressiva): coda automatica in background in coda; ricaricata per soglia (~3× worker) senza attendere una coda vuota.',
|
||||||
|
analyticsStrategyServerLabel: 'Server',
|
||||||
|
analyticsStrategyProgressLabel: 'Avanzamento analisi:',
|
||||||
|
analyticsStrategyProgressValue: '{{percent}}% ({{done}}/{{total}})',
|
||||||
|
analyticsStrategyActionsLabel: 'Azioni',
|
||||||
|
analyticsStrategyParallelismLabel: 'Worker paralleli',
|
||||||
|
analyticsStrategyParallelismValue: '{{n}} thread',
|
||||||
|
analyticsStrategyParallelismDesc: 'Quanti brani scaricare e analizzare contemporaneamente (HTTP + CPU). Valori più alti velocizzano il recupero della libreria ma usano più rete e CPU.',
|
||||||
|
analyticsStrategyAdvancedWarning: 'La strategia Aggressiva usa più CPU e banda di rete mentre la coda della libreria viene elaborata in background.',
|
||||||
|
analyticsStrategyServerRemoved: 'Server rimosso',
|
||||||
|
analyticsStrategyClearAction: 'Cancella analisi',
|
||||||
|
analyticsStrategyClearTitle: 'Cancellare l\'analisi?',
|
||||||
|
analyticsStrategyClearDesc: 'Cancellando l\'analisi per {{server}} vengono rimosse le forme d\'onda e i dati di volume in cache. Riaggiungere questo server in seguito potrebbe richiedere una lunga re-indicizzazione.',
|
||||||
|
analyticsStrategyClearCancel: 'Annulla',
|
||||||
|
analyticsStrategyClearConfirm: 'Cancella analisi',
|
||||||
|
analyticsStrategyClearSuccess: 'Analisi cancellata per il server rimosso.',
|
||||||
|
analyticsStrategyClearError: 'Impossibile cancellare l\'analisi per il server rimosso.',
|
||||||
|
analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, bloccato da brani non riusciti)',
|
||||||
|
analyticsFailedTracksOpenTitle: 'Brani non riusciti: {{count}}',
|
||||||
|
analyticsFailedTracksTitle: 'Brani con analisi non riuscita — {{server}}',
|
||||||
|
analyticsFailedTracksDesc: 'Questi brani hanno ripetutamente fallito la decodifica/l\'arricchimento e sono esclusi dall\'analisi automatica in background.',
|
||||||
|
analyticsFailedTracksLoading: 'Caricamento elenco brani non riusciti…',
|
||||||
|
analyticsFailedTracksEmpty: 'Nessun brano non riuscito per questo server.',
|
||||||
|
analyticsFailedTracksClose: 'Chiudi',
|
||||||
|
analyticsFailedTracksExport: 'Esporta elenco',
|
||||||
|
analyticsFailedTracksExportSuccess: 'Elenco brani non riusciti esportato ({{count}}).',
|
||||||
|
analyticsFailedTracksExportError: 'Impossibile esportare l\'elenco dei brani non riusciti.',
|
||||||
|
analyticsFailedTracksRescan: 'Riesegui scansione brani non riusciti',
|
||||||
|
analyticsFailedTracksRescanSuccess: 'Nuova scansione pianificata per {{count}} brani non riusciti.',
|
||||||
|
analyticsFailedTracksRescanError: 'Impossibile rieseguire la scansione dei brani non riusciti.',
|
||||||
|
analyticsFailedTracksLoadError: 'Impossibile caricare i brani non riusciti.',
|
||||||
|
randomMixTitle: 'Blacklist Mix casuale',
|
||||||
|
luckyMixMenuTitle: 'Mostra Mix fortunato nel menu',
|
||||||
|
luckyMixMenuDesc: 'Abilita Mix fortunato in Crea un mix e come voce di menu separata quando la navigazione divisa è attiva. Visibile solo quando AudioMuse è abilitato sul server attivo.',
|
||||||
|
randomMixBlacklistTitle: 'Parole chiave filtro personalizzate',
|
||||||
|
randomMixBlacklistDesc: 'I brani vengono esclusi quando una parola chiave corrisponde a genere, titolo, album o artista (attivo quando la casella sopra è selezionata).',
|
||||||
|
randomMixBlacklistPlaceholder: 'Aggiungi parola chiave…',
|
||||||
|
randomMixBlacklistAdd: 'Aggiungi',
|
||||||
|
randomMixBlacklistEmpty: 'Nessuna parola chiave personalizzata aggiunta ancora.',
|
||||||
|
randomMixHardcodedTitle: 'Parole chiave integrate (attive quando la casella è selezionata)',
|
||||||
|
tabAudio: 'Audio',
|
||||||
|
tabStorage: 'Offline e cache',
|
||||||
|
tabAppearance: 'Aspetto',
|
||||||
|
tabThemes: 'Temi',
|
||||||
|
themesYourThemesTitle: 'I tuoi temi',
|
||||||
|
themesCvdTooltip: 'Sicuro per il daltonismo — deuteranopia, protanopia, tritanopia',
|
||||||
|
themeAnimationWarning: 'Questo tema utilizza animazioni che potrebbero aumentare l\'uso della CPU sul tuo sistema (Nvidia/Linux o compositing disattivato).',
|
||||||
|
themeStoreTitle: 'Store dei temi',
|
||||||
|
themeStoreSubmitText: 'Hai creato un tuo tema? Condividilo con la community — maggiori informazioni nel repository dei temi.',
|
||||||
|
themeStoreSubmitLink: 'Apri il repository dei temi',
|
||||||
|
themeStoreNetworkNotice: 'Lo Store dei temi carica il suo catalogo e le anteprime da GitHub. Nessun dato personale viene inviato.',
|
||||||
|
themeStoreStatsNotice: 'Le date di ultima modifica si aggiornano una volta al giorno (intorno alle 04:17 UTC).',
|
||||||
|
themeStoreSearchPlaceholder: 'Cerca temi…',
|
||||||
|
themeStoreFilterMode: 'Filtra per modalità',
|
||||||
|
themeStoreModeAll: 'Tutte',
|
||||||
|
themeStoreModeDark: 'Scura',
|
||||||
|
themeStoreModeLight: 'Chiara',
|
||||||
|
themeStoreRefresh: 'Aggiorna',
|
||||||
|
themeStoreLoading: 'Caricamento temi…',
|
||||||
|
themeStoreError: 'Impossibile caricare lo store dei temi. Controlla la connessione.',
|
||||||
|
themeStoreRetry: 'Riprova',
|
||||||
|
themeStoreOfflineTitle: 'Lo Store dei temi è offline',
|
||||||
|
themeStoreEmpty: 'Nessun tema corrisponde ai tuoi filtri.',
|
||||||
|
themeStoreActive: 'Attivo',
|
||||||
|
themeStoreEnlarge: 'Ingrandisci anteprima',
|
||||||
|
themeStoreSortNewest: 'Più recenti',
|
||||||
|
themeStoreSortName: 'Alfabetico',
|
||||||
|
themeStoreAnimAll: 'Tutti',
|
||||||
|
themeStoreAnimAnimated: 'Animati',
|
||||||
|
themeStoreAnimStatic: 'Statici',
|
||||||
|
themeStoreByAuthor: 'di {{author}}',
|
||||||
|
themeStoreLastChanged: 'Ultima modifica',
|
||||||
|
themeStoreWhatsNew: 'Novità',
|
||||||
|
themeMigrationNoticeTitle: 'Tema spostato nello Store',
|
||||||
|
themeMigrationNoticeBody: '{{themes}} non è più incluso nell\'app. Puoi reinstallarlo dallo Store dei temi (Impostazioni → Temi), oppure scegliere un altro tema.',
|
||||||
|
themeMigrationNoticeOpen: 'Apri lo Store dei temi',
|
||||||
|
themeStoreOffline: 'Visualizzazione dell\'ultimo catalogo salvato in cache — sembra che tu sia offline.',
|
||||||
|
themeStoreInstall: 'Installa',
|
||||||
|
themeStoreInstalling: 'Installazione in corso…',
|
||||||
|
themeStoreApply: 'Applica',
|
||||||
|
themeStoreUpdate: 'Aggiorna',
|
||||||
|
themeStoreUpdating: 'Aggiornamento in corso…',
|
||||||
|
themeStoreUninstall: 'Disinstalla',
|
||||||
|
themeStoreInstallFailed: 'Installazione non riuscita',
|
||||||
|
themeStorePagePrev: 'Pagina precedente',
|
||||||
|
themeStorePageNext: 'Pagina successiva',
|
||||||
|
themeStorePageStatus: 'Pagina {{page}} di {{total}}',
|
||||||
|
themeImportTitle: 'Importa un tema',
|
||||||
|
themeImportButton: 'Importa tema…',
|
||||||
|
themeImporting: 'Importazione in corso…',
|
||||||
|
themeImportHint: 'Carica un tema pacchettizzato come .zip (manifest.json + theme.css).',
|
||||||
|
themeImportSuccess: '"{{name}}" importato.',
|
||||||
|
themeImportErrorTitle: 'Impossibile importare questo tema',
|
||||||
|
themeImportErrorBody: 'Non corrisponde al formato dei temi di Psysonic. Potrebbe essere stato creato per una versione diversa, oppure il file è incompleto — verifica di aver scelto il file .zip giusto, o contatta l\'autore del tema.',
|
||||||
|
themeImportErrorDetails: 'Dettagli tecnici',
|
||||||
|
themeImportConfirmTitle: 'Installare il tema?',
|
||||||
|
themeImportConfirmBody: 'Installare "{{name}}" di {{author}}?',
|
||||||
|
themeImportConfirmRisk: 'I temi importati non vengono verificati — installa solo temi di cui ti fidi.',
|
||||||
|
tabLibrary: 'Libreria',
|
||||||
|
tabServers: 'Server',
|
||||||
|
tabLyrics: 'Testi',
|
||||||
|
tabPersonalisation: 'Personalizzazione',
|
||||||
|
tabIntegrations: 'Integrazioni',
|
||||||
|
inputKeybindingsTitle: 'Scorciatoie da tastiera',
|
||||||
|
aboutContributorsCount_one: '{{count}} contributo',
|
||||||
|
aboutContributorsCount_other: '{{count}} contributi',
|
||||||
|
aboutContributorsApp: 'App',
|
||||||
|
aboutContributorsThemes: 'Temi',
|
||||||
|
aboutThemeContributorsCount_one: '{{count}} tema',
|
||||||
|
aboutThemeContributorsCount_other: '{{count}} temi',
|
||||||
|
searchPlaceholder: 'Cerca nelle impostazioni…',
|
||||||
|
searchNoResults: 'Nessuna impostazione corrisponde alla tua ricerca.',
|
||||||
|
integrationsPrivacyTitle: 'Informativa sulla privacy',
|
||||||
|
integrationsPrivacyBody: 'Tutte le integrazioni in questa scheda sono <strong>opzionali</strong> e inviano dati a servizi esterni o al tuo server Navidrome quando attivate. Last.fm riceve la tua cronologia di ascolto, Discord mostra il brano in riproduzione sul tuo profilo, Bandsintown viene interrogato per artista per recuperare le date dei concerti, e la condivisione In riproduzione pubblica il tuo brano attuale ad altri utenti del tuo server Navidrome. Se non desideri nulla di tutto ciò, lascia semplicemente disattivata la sezione corrispondente.',
|
||||||
|
homeCustomizerTitle: 'Mainstage',
|
||||||
|
queueSettingsTitle: 'Impostazioni coda',
|
||||||
|
queueModeTitle: 'Modalità visualizzazione coda',
|
||||||
|
queueModeQueueSub: 'Mostra solo i prossimi brani. Il brano corrente resta nell\'intestazione e lascia l\'elenco una volta riprodotto.',
|
||||||
|
queueModePlaylistSub: 'Mantiene l\'intera coda nell\'elenco con il brano corrente evidenziato in alto; i brani riprodotti restano.',
|
||||||
|
queueModeTimelineSub: 'Mantiene il brano corrente in cima all\'elenco, con la cronologia riprodotta scorribile sopra e i prossimi brani (in ordine casuale) sotto.',
|
||||||
|
queueToolbarTitle: 'Barra degli strumenti coda',
|
||||||
|
queueToolbarReset: 'Ripristina predefinita',
|
||||||
|
queueToolbarSeparator: 'Separatore',
|
||||||
|
sidebarTitle: 'Barra laterale',
|
||||||
|
sidebarReset: 'Ripristina predefinita',
|
||||||
|
artistLayoutTitle: 'Sezioni pagina artista',
|
||||||
|
artistLayoutDesc: 'Trascina per riordinare, attiva/disattiva per nascondere singole sezioni della pagina artista. Le sezioni senza dati vengono saltate automaticamente.',
|
||||||
|
artistLayoutReset: 'Ripristina predefinita',
|
||||||
|
artistLayoutBio: 'Biografia artista',
|
||||||
|
artistLayoutTopTracks: 'Brani più ascoltati',
|
||||||
|
artistLayoutSimilar: 'Artisti simili',
|
||||||
|
artistLayoutAlbums: 'Album',
|
||||||
|
artistLayoutFeatured: 'Presente anche in',
|
||||||
|
playlistLayoutTitle: 'Layout pagina playlist',
|
||||||
|
playlistLayoutDesc: 'Mostra o nascondi singoli elementi nella pagina playlist.',
|
||||||
|
playlistLayoutReset: 'Ripristina predefinita',
|
||||||
|
playerBarTitle: 'Barra del player',
|
||||||
|
playerBarReset: 'Ripristina predefinita',
|
||||||
|
playerBarStarRating: 'Valutazione a stelle',
|
||||||
|
playerBarFavorite: 'Preferito (cuore)',
|
||||||
|
playerBarLastfmLove: 'Pulsante Love',
|
||||||
|
playerBarPlaybackRate: 'Velocità di riproduzione',
|
||||||
|
playerBarEqualizer: 'Equalizzatore',
|
||||||
|
playerBarMiniPlayer: 'Mini player',
|
||||||
|
playbackRateTitle: 'Velocità di riproduzione',
|
||||||
|
playbackRateEnabled: 'Attiva velocità di riproduzione',
|
||||||
|
playbackRateEnabledDesc: 'Cambia la velocità globalmente per tutti i brani. Non si applica alla radio o alle anteprime.',
|
||||||
|
playbackRateStrategy: 'Strategia',
|
||||||
|
playbackRateStrategySpeed: 'Velocità',
|
||||||
|
playbackRateStrategyVarispeed: 'Varispeed',
|
||||||
|
playbackRateStrategyVarispeedSemitones: 'Semitoni',
|
||||||
|
playbackRateStrategyPreserve: 'Variazione tonalità',
|
||||||
|
playbackRateStrategySpeedTip: 'Cambia il tempo; la tonalità viene corretta automaticamente.',
|
||||||
|
playbackRateStrategyVarispeedTip: 'Velocità e tonalità si muovono insieme, come un nastro. La tonalità segue la velocità: 12 × log2(velocità).',
|
||||||
|
playbackRateStrategyVarispeedSemitonesTip: 'Varispeed impostato direttamente in semitoni. Velocità = 2^(st/12).',
|
||||||
|
playbackRateStrategyPreserveTip: 'Tempo regolabile più uno scostamento manuale di tonalità (±12 st).',
|
||||||
|
playbackRateSpeed: 'Velocità',
|
||||||
|
playbackRatePitch: 'Tonalità',
|
||||||
|
playbackRateDerivedPitch: 'Variazione tonalità dalla velocità: {{value}}',
|
||||||
|
playbackRateDerivedSpeed: 'Velocità dai semitoni: {{value}}',
|
||||||
|
playbackRateFineStep: 'Regolazione fine',
|
||||||
|
playbackRateFineStepDesc: 'Incrementi più piccoli: 0,01× per la velocità e 0,01 st per la tonalità.',
|
||||||
|
playbackRateAutoPitch: 'La tonalità viene corretta automaticamente.',
|
||||||
|
playbackRateHint: 'Velocità mantiene la tonalità naturale. Varispeed cambia la tonalità con la velocità. Varispeed (semitoni) imposta direttamente in semitoni quella variazione. Variazione tonalità aggiunge uno scostamento manuale. Usa più CPU rispetto a varispeed. Non disponibile per radio, anteprime o Orbit.',
|
||||||
|
playbackRateNeutral: 'A 1,0× senza scostamento di tonalità, la riproduzione è normale.',
|
||||||
|
playbackRateOrbitPaused: 'Non applicata durante le sessioni Orbit — la riproduzione resta a 1,0× per la sincronizzazione.',
|
||||||
|
playbackRateOrbitPausedShort: 'Orbit: 1,0× per la sincronizzazione.',
|
||||||
|
advancedMode: 'Avanzate',
|
||||||
|
advancedModeTooltip: 'Mostra opzioni avanzate in tutte le schede delle Impostazioni. Contributi della community che non riflettono necessariamente la filosofia di design dei manutentori di Psysonic.',
|
||||||
|
advancedBadge: 'Avanzato',
|
||||||
|
sidebarDrag: 'Trascina per riordinare',
|
||||||
|
sidebarFixed: 'Sempre visibile',
|
||||||
|
nowPlayingTopTitle: 'In riproduzione in alto',
|
||||||
|
nowPlayingTopDesc: 'Fissa la voce "In riproduzione" in cima alla barra laterale invece che in fondo.',
|
||||||
|
randomNavSplitTitle: 'Dividi la navigazione dei mix',
|
||||||
|
randomNavSplitDesc: 'Mostra "Mix casuale", "Album casuali" e "Mix fortunato" come voci separate nella barra laterale invece dell\'hub "Crea un mix".',
|
||||||
|
tabInput: 'Input',
|
||||||
|
tabUsers: 'Utenti',
|
||||||
|
tabSystem: 'Sistema',
|
||||||
|
loggingTitle: 'Log',
|
||||||
|
loggingModeDesc: 'Controlla il livello di dettaglio dei log del backend nel terminale.',
|
||||||
|
loggingModeOff: 'Disattivato',
|
||||||
|
loggingModeNormal: 'Normale',
|
||||||
|
loggingModeDebug: 'Debug',
|
||||||
|
loggingExport: 'Esporta log',
|
||||||
|
loggingExportSuccess: 'Log esportati ({{count}} righe).',
|
||||||
|
loggingExportError: 'Impossibile esportare i log.',
|
||||||
|
ratingsSectionTitle: 'Valutazioni',
|
||||||
|
ratingsSkipStarTitle: 'Salta a 1 stella',
|
||||||
|
ratingsSkipStarDesc:
|
||||||
|
'Dopo diversi salti consecutivi, imposta il brano a 1★. Solo per i brani non ancora valutati.',
|
||||||
|
ratingsSkipStarThresholdLabel: 'Salti',
|
||||||
|
ratingsMixFilterTitle: 'Filtra per valutazione',
|
||||||
|
ratingsMixFilterDesc:
|
||||||
|
'Filtra gli elementi con valutazione bassa in {{mix}} e {{albums}}. Clicca di nuovo sulla stella selezionata per disattivare la soglia.',
|
||||||
|
ratingsMixMinSong: 'Brani',
|
||||||
|
ratingsMixMinAlbum: 'Album',
|
||||||
|
ratingsMixMinArtist: 'Artisti',
|
||||||
|
ratingsMixMinThresholdAria: 'Stelle minime: {{label}}',
|
||||||
|
backupTitle: 'Backup e ripristino',
|
||||||
|
backupExport: 'Esporta impostazioni',
|
||||||
|
backupExportDesc: 'Salva tutte le impostazioni, i profili server, la configurazione Last.fm, il tema, l\'EQ e le associazioni di tasti in un file .psybkp. Le password vengono salvate in chiaro — mantieni il file al sicuro.',
|
||||||
|
backupImport: 'Importa impostazioni',
|
||||||
|
backupImportDesc: 'Ripristina le impostazioni da un file .psybkp. L\'app si ricaricherà dopo l\'importazione.',
|
||||||
|
backupImportConfirm: 'Questo sovrascriverà tutte le impostazioni attuali. Continuare?',
|
||||||
|
backupImportAny: 'Importa backup',
|
||||||
|
backupImportAnyConfirm: 'Importa il file di backup selezionato e applica il suo contenuto (impostazioni, database di libreria o completo). Continuare?',
|
||||||
|
backupSuccess: 'Backup salvato',
|
||||||
|
backupImportSuccess: 'Impostazioni ripristinate — ricaricamento in corso…',
|
||||||
|
backupImportError: 'File di backup non valido o danneggiato.',
|
||||||
|
backupModeFull: 'Completo',
|
||||||
|
backupModeLibrary: 'Database di libreria',
|
||||||
|
backupModeConfig: 'Configurazione',
|
||||||
|
backupFullDesc: 'Archivia impostazioni e database di libreria in un unico file di backup.',
|
||||||
|
backupFullExport: 'Esporta backup completo',
|
||||||
|
backupFullImport: 'Importa backup completo',
|
||||||
|
backupFullImportConfirm: 'Questo sovrascriverà le impostazioni, sostituirà gli attuali database di libreria e li sposterà in .bak. Continuare?',
|
||||||
|
backupFullExportSuccess: 'Backup completo esportato.',
|
||||||
|
backupFullImportSuccess: 'Backup completo importato — ricaricamento in corso…',
|
||||||
|
backupFullImportError: 'Impossibile importare il backup completo.',
|
||||||
|
backupLibraryExport: 'Esporta database',
|
||||||
|
backupLibraryExportDesc: 'Crea un archivio compresso con snapshot SQLite puliti dei database di libreria.',
|
||||||
|
backupLibraryImport: 'Importa database',
|
||||||
|
backupLibraryImportDesc: 'Ripristina i database di libreria da un file di archivio. I database attuali vengono spostati in .bak prima della sostituzione.',
|
||||||
|
backupLibraryImportConfirm: 'Questo sostituirà gli attuali database di libreria e li sposterà in .bak. Continuare?',
|
||||||
|
backupLibraryExportSuccess: 'Backup dei database esportato.',
|
||||||
|
backupLibraryImportSuccess: 'Backup dei database importato.',
|
||||||
|
backupLibraryImportError: 'Impossibile importare il backup dei database.',
|
||||||
|
backupOverlayExportTitle: 'Creazione del backup…',
|
||||||
|
backupOverlayImportTitle: 'Ripristino del backup…',
|
||||||
|
backupOverlayHint: 'Puoi tenere la finestra aperta mentre elaboriamo i file. L\'input è temporaneamente bloccato.',
|
||||||
|
shortcutsReset: 'Ripristina predefinite',
|
||||||
|
shortcutListening: 'Premi un tasto…',
|
||||||
|
shortcutUnbound: '—',
|
||||||
|
globalShortcutsTitle: 'Scorciatoie globali',
|
||||||
|
globalShortcutsNote: 'Funzionano a livello di sistema anche quando Psysonic è in background. Richiedono Ctrl, Alt o Super come modificatore.',
|
||||||
|
shortcutClear: 'Cancella',
|
||||||
|
shortcutPlayPause: 'Riproduci / Pausa',
|
||||||
|
shortcutNext: 'Brano successivo',
|
||||||
|
shortcutPrev: 'Brano precedente',
|
||||||
|
shortcutVolumeUp: 'Alza volume',
|
||||||
|
shortcutVolumeDown: 'Abbassa volume',
|
||||||
|
shortcutSeekForward: 'Avanti di 10s',
|
||||||
|
shortcutSeekBackward: 'Indietro di 10s',
|
||||||
|
shortcutToggleQueue: 'Mostra/nascondi coda',
|
||||||
|
shortcutOpenFolderBrowser: 'Apri {{folderBrowser}}',
|
||||||
|
shortcutFullscreenPlayer: 'Player a schermo intero',
|
||||||
|
shortcutNativeFullscreen: 'Schermo intero nativo',
|
||||||
|
shortcutOpenMiniPlayer: 'Apri mini player',
|
||||||
|
shortcutStartSearch: 'Avvia una ricerca',
|
||||||
|
shortcutStartAdvancedSearch: 'Avvia una ricerca avanzata',
|
||||||
|
shortcutToggleSidebar: 'Mostra/nascondi barra laterale',
|
||||||
|
shortcutMuteSound: 'Disattiva audio',
|
||||||
|
shortcutToggleEqualizer: 'Apri / Mostra-nascondi equalizzatore',
|
||||||
|
shortcutToggleRepeat: 'Attiva/disattiva Ripeti',
|
||||||
|
shortcutOpenNowPlaying: 'Apri "In riproduzione"',
|
||||||
|
shortcutShowLyrics: 'Mostra testi',
|
||||||
|
shortcutFavoriteCurrentTrack: 'Aggiungi il brano corrente ai preferiti',
|
||||||
|
shortcutOpenHelp: 'Guida',
|
||||||
|
playbackTitle: 'Riproduzione',
|
||||||
|
replayGain: 'Replay Gain',
|
||||||
|
replayGainDesc: 'Normalizza il volume dei brani usando i metadati ReplayGain',
|
||||||
|
replayGainMode: 'Modalità',
|
||||||
|
replayGainAuto: 'Auto',
|
||||||
|
replayGainAutoDesc: 'Sceglie il guadagno per album quando i brani vicini in coda appartengono allo stesso album, altrimenti il guadagno per brano.',
|
||||||
|
replayGainTrack: 'Brano',
|
||||||
|
replayGainAlbum: 'Album',
|
||||||
|
replayGainPreGain: 'Pre-guadagno (file con tag)',
|
||||||
|
replayGainPreGainDesc: 'Incremento universale aggiunto sopra ogni calcolo ReplayGain. Usalo per compensare se la tua libreria risulta complessivamente troppo silenziosa.',
|
||||||
|
replayGainFallback: 'Riserva (senza tag / radio)',
|
||||||
|
replayGainFallbackDesc: 'Applicato ai brani (e agli stream radio) privi di qualsiasi tag ReplayGain, così i contenuti senza tag non risultano più forti del resto.',
|
||||||
|
normalization: 'Normalizzazione',
|
||||||
|
normalizationDesc: 'Uniforma il volume percepito tra brani, album e radio.',
|
||||||
|
normalizationOff: 'Disattivata',
|
||||||
|
normalizationReplayGain: 'ReplayGain',
|
||||||
|
normalizationLufs: 'LUFS',
|
||||||
|
loudnessTargetLufs: 'LUFS target',
|
||||||
|
loudnessTargetLufsDesc: 'Volume di riferimento a cui vengono uniformati tutti i brani. Numeri più bassi = output più forte. I servizi di streaming si attestano tipicamente intorno a -14 LUFS.',
|
||||||
|
loudnessPreAnalysisAttenuation: 'Attenuazione pre-analisi',
|
||||||
|
loudnessPreAnalysisAttenuationDesc:
|
||||||
|
'Attenuazione extra finché il volume di questo brano non viene salvato. Lo streaming usa quindi stime approssimative, non una misurazione completa. 0 dB = disattivato; valori più bassi = più silenzioso. Il numero a destra è il dB effettivo per il tuo target attuale.',
|
||||||
|
loudnessPreAnalysisAttenuationRef: 'Effettivo {{eff}} dB con target {{tgt}} LUFS.',
|
||||||
|
loudnessPreAnalysisAttenuationReset: 'Ripristina predefinito',
|
||||||
|
loudnessFirstPlayNote:
|
||||||
|
'La prima riproduzione di un brano nuovo di zecca potrebbe variare brevemente di volume mentre viene misurato. La riproduzione successiva usa la misurazione in cache ed è perfettamente stabile. I prossimi brani in coda vengono di solito pre-analizzati durante il brano precedente, quindi in pratica accade raramente.',
|
||||||
|
crossfade: 'Crossfade',
|
||||||
|
crossfadeSecs: '{{n}} s',
|
||||||
|
autoDj: 'AutoDJ',
|
||||||
|
autoDjDesc: 'Nessuna durata fissa — AutoDJ segue l\'audio reale, miscelando dissolvenze e intro effettive invece di un numero fisso di secondi. Per risultati affidabili, attiva la Cache attiva di riproduzione.',
|
||||||
|
autodjSmoothSkip: 'Salto fluido',
|
||||||
|
autodjSmoothSkipDesc: 'Quando salti al brano successivo o precedente durante la riproduzione, si passa al nuovo brano seguendo le stesse regole di AutoDJ (durata sovrapposizione, taglio intro) dalla tua posizione attuale invece di un taglio brusco. Funziona meglio quando il prossimo brano è già in buffer.',
|
||||||
|
autodjOverlapCapTitle: 'Limite di sovrapposizione',
|
||||||
|
autodjOverlapCapDesc: 'Limita per quanto tempo AutoDJ può sovrapporre i brani. Auto segue l\'analisi del contenuto (fino a 12 s). Limite imposta il tuo massimo personale.',
|
||||||
|
autodjOverlapCapAuto: 'Auto',
|
||||||
|
autodjOverlapCapLimit: 'Limite',
|
||||||
|
autodjOverlapCapSecs: '{{n}} s',
|
||||||
|
gapless: 'Riproduzione Gapless',
|
||||||
|
transitionsTitle: 'Transizioni tra brani',
|
||||||
|
transitionsDesc: 'Come si fondono i brani consecutivi. Solo una modalità può essere attiva alla volta.',
|
||||||
|
transitionOff: 'Disattivata',
|
||||||
|
transitionsHostControlled: 'Controllata dall\'host Orbit durante la sessione',
|
||||||
|
queueBehaviourTitle: 'Comportamento della coda',
|
||||||
|
preservePlayNextOrder: 'Mantieni l\'ordine di "Riproduci dopo"',
|
||||||
|
preservePlayNextOrderDesc: 'I nuovi elementi aggiunti con Riproduci dopo si accodano dietro quelli precedenti invece di passare avanti.',
|
||||||
|
trackPreviewsTitle: 'Anteprime brani',
|
||||||
|
trackPreviewsToggle: 'Attiva anteprime brani',
|
||||||
|
trackPreviewsDesc: 'Mostra i pulsanti Riproduci e Anteprima direttamente negli elenchi brani per un rapido assaggio a metà brano.',
|
||||||
|
trackPreviewStart: 'Posizione di inizio',
|
||||||
|
trackPreviewStartDesc: 'Da che punto del brano parte l\'anteprima (% della durata del brano).',
|
||||||
|
trackPreviewDuration: 'Durata',
|
||||||
|
trackPreviewDurationDesc: 'Per quanto tempo viene riprodotta ogni anteprima prima di fermarsi.',
|
||||||
|
trackPreviewDurationSecs: '{{n}} s',
|
||||||
|
trackPreviewLocationsTitle: 'Dove appaiono le anteprime',
|
||||||
|
trackPreviewLocationsDesc: 'Scegli in quali elenchi mostrare i pulsanti di anteprima integrati.',
|
||||||
|
trackPreviewLocation_suggestions: 'Nei suggerimenti di playlist',
|
||||||
|
trackPreviewLocation_albums: 'Negli elenchi brani degli album',
|
||||||
|
trackPreviewLocation_playlists: 'Nelle playlist',
|
||||||
|
trackPreviewLocation_favorites: 'Nei preferiti',
|
||||||
|
trackPreviewLocation_artist: 'Nei brani più ascoltati dell\'artista',
|
||||||
|
trackPreviewLocation_randomMix: 'In Mix casuale',
|
||||||
|
nextTrackBufferingTitle: 'Buffering',
|
||||||
|
infiniteQueue: 'Coda infinita',
|
||||||
|
infiniteQueueDesc: 'Aggiunge automaticamente brani casuali quando la coda finisce',
|
||||||
|
experimental: 'Sperimentale',
|
||||||
|
sidebarLyricsStyle: 'Stile di scorrimento dei testi',
|
||||||
|
sidebarLyricsStyleClassic: 'Classico',
|
||||||
|
sidebarLyricsStyleClassicDesc: 'Scorre la riga attiva al centro.',
|
||||||
|
sidebarLyricsStyleApple: 'Stile Apple Music',
|
||||||
|
sidebarLyricsStyleAppleDesc: 'La riga attiva resta ancorata vicino alla parte superiore con transizioni fluide a molla.',
|
||||||
|
seekbarStyle: 'Stile barra di avanzamento',
|
||||||
|
fullscreenPlayerStyle: 'Stile del player a schermo intero',
|
||||||
|
fsLyricsStyleRail: 'Barra',
|
||||||
|
fsLyricsStyleRailDesc: 'Barra scorrevole classica a 5 righe.',
|
||||||
|
fsLyricsStyleApple: 'Scorrimento',
|
||||||
|
fsLyricsStyleAppleDesc: 'Elenco scorrevole a schermo intero.',
|
||||||
|
fullscreenPlayerStyleDesc: 'Scegli l\'aspetto della vista a schermo intero in riproduzione.',
|
||||||
|
fullscreenPlayerMinimal: 'Minimale',
|
||||||
|
fullscreenPlayerImmersive: 'Immersivo',
|
||||||
|
fullscreenPlayerPrism: 'Prism',
|
||||||
|
fsShowArtistPortrait: 'Mostra foto dell\'artista',
|
||||||
|
fsShowArtistPortraitDesc: 'Mostra la foto dell\'artista (o la copertina dell\'album) sul lato destro del player a schermo intero.',
|
||||||
|
fsPortraitDim: 'Attenuazione foto',
|
||||||
|
seekbarStyleDesc: 'Scegli l\'aspetto della barra di avanzamento del player',
|
||||||
|
buttonSizeTitle: 'Pulsanti compatti',
|
||||||
|
buttonSizeLabel: 'Dimensione pulsanti',
|
||||||
|
buttonSizeDesc: 'Riduce i pulsanti delle azioni e della barra degli strumenti a icone nelle pagine di dettaglio e nelle viste di esplorazione.',
|
||||||
|
buttonSize_large: 'Grande',
|
||||||
|
buttonSize_small: 'Piccola',
|
||||||
|
seekbarTruewave: 'Forma d\'onda reale',
|
||||||
|
seekbarPseudowave: 'Pseudo-forma d\'onda',
|
||||||
|
seekbarLinedot: 'Linea e punto',
|
||||||
|
seekbarBar: 'Barra',
|
||||||
|
seekbarThick: 'Barra spessa',
|
||||||
|
seekbarSegmented: 'Segmentata',
|
||||||
|
seekbarNeon: 'Bagliore al neon',
|
||||||
|
seekbarPulsewave: 'Onda pulsante',
|
||||||
|
seekbarParticletrail: 'Scia di particelle',
|
||||||
|
seekbarLiquidfill: 'Riempimento liquido',
|
||||||
|
seekbarRetrotape: 'Nastro retrò',
|
||||||
|
themeSchedulerTitle: 'Cambio automatico del tema',
|
||||||
|
themeSchedulerEnable: 'Attiva pianificazione temi',
|
||||||
|
themeSchedulerEnableSub: 'Passa automaticamente tra due temi in base all\'ora del giorno o al tema di sistema',
|
||||||
|
themeSchedulerDayTheme: 'Tema diurno',
|
||||||
|
themeSchedulerDayStart: 'Il giorno inizia alle',
|
||||||
|
themeSchedulerNightTheme: 'Tema notturno',
|
||||||
|
themeSchedulerNightStart: 'La notte inizia alle',
|
||||||
|
themeSchedulerActiveHint: 'La pianificazione dei temi è attiva - i cambi di tema sono gestiti automaticamente.',
|
||||||
|
themeSchedulerModeLabel: 'Cambia in base a',
|
||||||
|
themeSchedulerModeTime: 'Ora del giorno',
|
||||||
|
themeSchedulerModeSystem: 'Tema di sistema',
|
||||||
|
themeSchedulerLightTheme: 'Tema chiaro',
|
||||||
|
themeSchedulerDarkTheme: 'Tema scuro',
|
||||||
|
themeSchedulerSystemRestartHint: 'La modifica dell\'impostazione chiaro/scuro di sistema ha effetto dopo il riavvio dell\'app.',
|
||||||
|
visualOptionsTitle: 'Opzioni visive',
|
||||||
|
coverArtBackground: 'Sfondo con copertina',
|
||||||
|
coverArtBackgroundSub: 'Mostra la copertina sfocata come sfondo nelle intestazioni di album/playlist',
|
||||||
|
backdropSourcesTitle: 'Sfondi',
|
||||||
|
backdropSourcesSub: 'Scegli quale immagine usa ogni superficie come sfondo e l\'ordine in cui provarle. Trascina per riordinare, oppure disattiva una fonte per saltarla.',
|
||||||
|
backdropSurfaceMainstage: 'Hero del Mainstage',
|
||||||
|
backdropSurfaceArtistDetail: 'Intestazione pagina artista',
|
||||||
|
backdropSurfaceFullscreen: 'Player a schermo intero',
|
||||||
|
backdropSourceBanner: 'Banner',
|
||||||
|
backdropSourceFanart: 'Immagine artista Fanart',
|
||||||
|
backdropSourceNavidrome: 'Immagine Navidrome',
|
||||||
|
backdropMoveUp: 'Sposta su',
|
||||||
|
backdropMoveDown: 'Sposta giù',
|
||||||
|
playlistCoverPhoto: 'Foto di copertina playlist',
|
||||||
|
playlistCoverPhotoSub: 'Mostra la griglia delle foto di copertina nella vista dettaglio playlist',
|
||||||
|
showBitrate: 'Mostra bitrate',
|
||||||
|
showBitrateSub: 'Mostra il bitrate audio negli elenchi dei brani',
|
||||||
|
floatingPlayerBar: 'Barra del player flottante',
|
||||||
|
floatingPlayerBarSub: 'Mantieni la barra del player fluttuante sopra i contenuti',
|
||||||
|
squareCorners: 'Angoli squadrati',
|
||||||
|
squareCornersSub: 'Rimuove gli angoli arrotondati dalle schede per un aspetto netto e squadrato',
|
||||||
|
uiScaleTitle: 'Scala dell\'interfaccia',
|
||||||
|
uiScaleLabel: 'Zoom',
|
||||||
|
};
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
export const sharePaste = {
|
||||||
|
notLoggedIn: 'Accedi e aggiungi il server prima di incollare un link di condivisione.',
|
||||||
|
noMatchingServer: 'Nessun server salvato corrisponde a questo link. Aggiungi un server con questo indirizzo: {{url}}',
|
||||||
|
trackUnavailable: 'Questo brano non è stato trovato sul server.',
|
||||||
|
albumUnavailable: 'Questo album non è stato trovato sul server.',
|
||||||
|
artistUnavailable: 'Questo artista non è stato trovato sul server.',
|
||||||
|
composerUnavailable: 'Questo compositore non è stato trovato sul server.',
|
||||||
|
openedTrack: 'Riproduzione del brano condiviso.',
|
||||||
|
openedAlbum: 'Apertura dell\'album condiviso.',
|
||||||
|
openedArtist: 'Apertura dell\'artista condiviso.',
|
||||||
|
openedComposer: 'Apertura del compositore condiviso.',
|
||||||
|
openedQueue_one: 'Riproduzione di {{count}} brano dal link di condivisione.',
|
||||||
|
openedQueue_other: 'Riproduzione di {{count}} brani dal link di condivisione.',
|
||||||
|
openedQueuePartial:
|
||||||
|
'Riproduzione di {{played}} brani su {{total}} dal link ({{skipped}} non trovati su questo server).',
|
||||||
|
queueAllUnavailable: 'Nessuno dei brani di questo link è stato trovato sul server.',
|
||||||
|
playQueue: 'Riproduci coda',
|
||||||
|
playQueueing: 'Avvio della riproduzione…',
|
||||||
|
genericError: 'Impossibile aprire il link di condivisione.',
|
||||||
|
};
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
export const sidebar = {
|
||||||
|
library: 'Libreria',
|
||||||
|
mainstage: 'Mainstage',
|
||||||
|
newReleases: 'Nuove uscite',
|
||||||
|
allAlbums: 'Tutti gli Album',
|
||||||
|
randomAlbums: 'Album Casuali',
|
||||||
|
randomPicker: 'Crea un Mix',
|
||||||
|
artists: 'Artisti',
|
||||||
|
composers: 'Compositori',
|
||||||
|
randomMix: 'Mix Casuale',
|
||||||
|
favorites: 'Preferiti',
|
||||||
|
nowPlaying: 'In Riproduzione',
|
||||||
|
system: 'Sistema',
|
||||||
|
statistics: 'Statistiche',
|
||||||
|
settings: 'Impostazioni',
|
||||||
|
help: 'Aiuto',
|
||||||
|
expand: 'Espandi Sidebar',
|
||||||
|
collapse: 'Riduci Sidebar',
|
||||||
|
|
||||||
|
downloadingTracks: 'Salvataggio di {{n}} brani in cache…',
|
||||||
|
offlinePinActive: 'Salvataggio di «{{name}}» in cache…',
|
||||||
|
offlinePinActiveQueued: 'Salvataggio di «{{name}}» in cache · +{{queued}} in coda',
|
||||||
|
syncingTracks: 'Sincronizzazione {{done}}/{{total}}…',
|
||||||
|
cancelDownload: 'Cancella download',
|
||||||
|
offlineLibrary: 'Libreria Offline',
|
||||||
|
genres: 'Generi',
|
||||||
|
tracks: 'Brani',
|
||||||
|
playlists: 'Playlist',
|
||||||
|
smartPlaylists: 'Smart Playlist',
|
||||||
|
mostPlayed: 'Più riprodotti',
|
||||||
|
losslessAlbums: 'Lossless',
|
||||||
|
radio: 'Internet Radio',
|
||||||
|
folderBrowser: 'Esplora cartelle',
|
||||||
|
deviceSync: 'Sincronizzazione dei dispositivi',
|
||||||
|
libraryScope: 'Ambito libreria',
|
||||||
|
allLibraries: 'Tutte le librerie',
|
||||||
|
librarySelect: 'Includi {{name}}',
|
||||||
|
libraryDeselect: 'Escludi {{name}}',
|
||||||
|
librarySelectionCount: '{{count}} librerie',
|
||||||
|
expandPlaylists: 'Espandi playlist',
|
||||||
|
collapsePlaylists: 'Riduci playlist',
|
||||||
|
more: 'Altro',
|
||||||
|
feelingLucky: 'Mix Fortunato',
|
||||||
|
|
||||||
|
themeUpdatesTitle: 'Aggiorna Temi',
|
||||||
|
themeUpdatesTooltip: 'Aggiornamento tema disponibile',
|
||||||
|
themeUpdatesDismiss: 'Ignora',
|
||||||
|
};
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
export const smartPlaylists = {
|
||||||
|
sectionBasic: '1. Informazioni di base',
|
||||||
|
sectionGenres: '2. Generi',
|
||||||
|
sectionYearsAndFilters: '3. Anni e filtri',
|
||||||
|
genreMode: 'Modalità genere',
|
||||||
|
genreModeInclude: 'Includi generi',
|
||||||
|
genreModeExclude: 'Escludi generi',
|
||||||
|
genreSearchPlaceholder: 'Filtra generi...',
|
||||||
|
availableGenres: 'Disponibili',
|
||||||
|
selectedGenres: 'Selezionati',
|
||||||
|
yearMode: 'Modalità anno',
|
||||||
|
yearModeInclude: 'Includi intervallo',
|
||||||
|
yearModeExclude: 'Escludi intervallo',
|
||||||
|
name: 'Nome (senza prefisso)',
|
||||||
|
limit: 'Limite',
|
||||||
|
limitHint: 'Quanti brani includere nella playlist (1-{{max}}, di solito 50).',
|
||||||
|
artistContains: 'L\'artista contiene…',
|
||||||
|
albumContains: 'L\'album contiene…',
|
||||||
|
titleContains: 'Il titolo contiene…',
|
||||||
|
minRating: 'Valutazione minima',
|
||||||
|
minRatingAria: 'Valutazione minima per la playlist intelligente',
|
||||||
|
minRatingHint: '0 disattiva la soglia minima; 1-5 mantiene i brani con valutazione superiore al valore selezionato.',
|
||||||
|
fromYear: 'Dall\'anno',
|
||||||
|
toYear: 'All\'anno',
|
||||||
|
excludeUnrated: 'Escludi brani senza valutazione',
|
||||||
|
compilationOnly: 'Solo compilation',
|
||||||
|
create: 'Nuova playlist intelligente',
|
||||||
|
save: 'Salva playlist intelligente',
|
||||||
|
created: '{{name}} creata',
|
||||||
|
updated: '{{name}} aggiornata',
|
||||||
|
createFailed: 'Impossibile creare la playlist intelligente.',
|
||||||
|
updateFailed: 'Impossibile aggiornare la playlist intelligente.',
|
||||||
|
navidromeOnly: 'Le playlist intelligenti possono essere create solo su server Navidrome.',
|
||||||
|
loadFailed: 'Impossibile caricare le playlist intelligenti da Navidrome.',
|
||||||
|
sortRandom: 'Ordina: casuale',
|
||||||
|
sortTitleAsc: 'Ordina: titolo A-Z',
|
||||||
|
sortTitleDesc: 'Ordina: titolo Z-A',
|
||||||
|
sortYearDesc: 'Ordina: anno decrescente',
|
||||||
|
sortYearAsc: 'Ordina: anno crescente',
|
||||||
|
sortPlayCountDesc: 'Ordina: numero riproduzioni decrescente',
|
||||||
|
};
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
export const songInfo = {
|
||||||
|
title: 'Info Canzone',
|
||||||
|
songTitle: 'Titolo',
|
||||||
|
artist: 'Artista',
|
||||||
|
album: 'Album',
|
||||||
|
albumArtist: 'Artista Album',
|
||||||
|
year: 'Anno',
|
||||||
|
genre: 'Genere',
|
||||||
|
duration: 'Durata',
|
||||||
|
track: 'Brano',
|
||||||
|
bpm: 'BPM',
|
||||||
|
mood: 'Mood',
|
||||||
|
playCount: 'Numero riproduzioni',
|
||||||
|
lastPlayed: 'Ultima riproduzione',
|
||||||
|
format: 'Formato',
|
||||||
|
bitrate: 'Bitrate',
|
||||||
|
sampleRate: 'Sample Rate',
|
||||||
|
bitDepth: 'Bit Depth',
|
||||||
|
channels: 'Canali',
|
||||||
|
fileSize: 'Dimensione File',
|
||||||
|
path: 'Percorso',
|
||||||
|
replayGainTrack: 'RG Track Gain',
|
||||||
|
replayGainAlbum: 'RG Album Gain',
|
||||||
|
replayGainPeak: 'RG Track Peak',
|
||||||
|
mono: 'Mono',
|
||||||
|
stereo: 'Stereo',
|
||||||
|
};
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
export const statistics = {
|
||||||
|
title: 'Statistiche',
|
||||||
|
recentlyPlayed: 'Ascoltati di recente',
|
||||||
|
mostPlayed: 'Album più ascoltati',
|
||||||
|
highestRated: 'Album più votati',
|
||||||
|
genreDistribution: 'Distribuzione per genere (Top 20)',
|
||||||
|
loadMore: 'Carica altri',
|
||||||
|
statArtists: 'Artisti',
|
||||||
|
statArtistsTooltip: 'Solo artisti a livello di album — gli artisti presenti solo a livello di brano (feat., ospiti, ecc.) senza un proprio album non sono inclusi.',
|
||||||
|
statAlbums: 'Album',
|
||||||
|
statSongs: 'Brani',
|
||||||
|
statGenres: 'Generi',
|
||||||
|
statPlaytime: 'Tempo totale di ascolto',
|
||||||
|
genreInsights: 'Approfondimenti sui generi',
|
||||||
|
formatDistribution: 'Distribuzione per formato',
|
||||||
|
formatSample: 'Campione di {{n}} brani',
|
||||||
|
computing: 'Calcolo in corso…',
|
||||||
|
genreSongs: '{{count}} brani',
|
||||||
|
genreAlbums: '{{count}} album',
|
||||||
|
recentlyAdded: 'Aggiunti di recente',
|
||||||
|
decadeDistribution: 'Album per decennio',
|
||||||
|
decadeAlbums_one: '{{count}} album',
|
||||||
|
decadeAlbums_other: '{{count}} album',
|
||||||
|
decadeUnknown: 'Sconosciuto',
|
||||||
|
lfmTitle: 'Statistiche {{provider}}',
|
||||||
|
lfmTopArtists: 'Artisti più ascoltati',
|
||||||
|
lfmTopAlbums: 'Album più ascoltati',
|
||||||
|
lfmTopTracks: 'Brani più ascoltati',
|
||||||
|
lfmPlays: '{{count}} riproduzioni',
|
||||||
|
lfmPeriodOverall: 'Sempre',
|
||||||
|
lfmPeriod7day: '7 giorni',
|
||||||
|
lfmPeriod1month: '1 mese',
|
||||||
|
lfmPeriod3month: '3 mesi',
|
||||||
|
lfmPeriod6month: '6 mesi',
|
||||||
|
lfmPeriod12month: '12 mesi',
|
||||||
|
lfmRecentTracks: 'Scrobble recenti',
|
||||||
|
lfmNowPlaying: 'In riproduzione',
|
||||||
|
lfmJustNow: 'proprio ora',
|
||||||
|
lfmMinutesAgo: '{{n}}m fa',
|
||||||
|
lfmHoursAgo: '{{n}}h fa',
|
||||||
|
lfmDaysAgo: '{{n}}g fa',
|
||||||
|
topRatedSongs: 'Brani più votati',
|
||||||
|
topRatedArtists: 'Artisti più votati',
|
||||||
|
noRatedSongs: 'Nessun brano votato ancora. Vota i brani dalla vista album o playlist.',
|
||||||
|
noRatedArtists: 'Nessun artista votato ancora.',
|
||||||
|
exportShare: 'Condividi',
|
||||||
|
exportTitle: 'Condividi i migliori album',
|
||||||
|
exportSubtitle: 'Genera un\'immagine condivisibile dei tuoi album più ascoltati.',
|
||||||
|
exportFormat: 'Formato',
|
||||||
|
exportFormatStory: 'Storia',
|
||||||
|
exportFormatSquare: 'Quadrato',
|
||||||
|
exportFormatTwitter: 'Scheda Twitter',
|
||||||
|
exportGrid: 'Griglia',
|
||||||
|
exportGridLabel: '{{n}}×{{n}}',
|
||||||
|
exportPreview: 'Anteprima',
|
||||||
|
exportGenerate: 'Genera',
|
||||||
|
exportSave: 'Salva immagine…',
|
||||||
|
exportCancel: 'Annulla',
|
||||||
|
exportFooterLabel: 'Album più ascoltati',
|
||||||
|
exportNotEnough: 'Servono almeno {{count}} album nella tua libreria per una griglia {{n}}×{{n}}.',
|
||||||
|
exportSaving: 'Salvataggio…',
|
||||||
|
exportSaved: 'Salvato.',
|
||||||
|
exportSaveFailed: 'Impossibile salvare l\'immagine.',
|
||||||
|
tabServer: 'Statistiche server',
|
||||||
|
tabPlayer: 'Statistiche player',
|
||||||
|
playerEmpty: 'Inizia ad ascoltare — la tua cronologia di ascolto locale apparirà qui.',
|
||||||
|
playerSummaryTime: 'Tempo di ascolto',
|
||||||
|
playerListeningDayShort: '{{count}}g',
|
||||||
|
playerListeningHourShort: '{{count}}h',
|
||||||
|
playerListeningMinuteShort: '{{count}}m',
|
||||||
|
playerSummarySessions: 'Sessioni',
|
||||||
|
playerSummaryTracks: 'Riproduzioni brani',
|
||||||
|
playerSummaryUniqueTracks: 'Brani unici',
|
||||||
|
playerSummaryDays: 'Giorni',
|
||||||
|
playerIndexRequired: 'Le statistiche del player richiedono almeno un server configurato.',
|
||||||
|
playerPartialIndexSettings: 'Impostazioni server',
|
||||||
|
playerSummaryCompletion: 'Completi / parziali',
|
||||||
|
playerYearPrev: 'Anno precedente',
|
||||||
|
playerYearNext: 'Anno successivo',
|
||||||
|
playerHeatmapLegend: 'Le celle più scure indicano più brani riprodotti quel giorno.',
|
||||||
|
playerHeatmapLess: 'Meno',
|
||||||
|
playerHeatmapMore: 'Più',
|
||||||
|
playerDaySessions: '{{count}} sessioni',
|
||||||
|
playerDayTrackPlays: '{{count}} brani',
|
||||||
|
playerDayFullPartial: '{{full}} completi · {{partial}} parziali',
|
||||||
|
playerRecentDaysTitle: 'Giorni recenti',
|
||||||
|
playerDayToday: 'Oggi',
|
||||||
|
playerDayYesterday: 'Ieri',
|
||||||
|
playerListenedSecShort: '{{seconds}}s',
|
||||||
|
playerListenedMinDecimal: '{{minutes}} min',
|
||||||
|
completionFull: 'Ascolto completo',
|
||||||
|
completionPartial: 'Parziale',
|
||||||
|
};
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
export const tracks = {
|
||||||
|
title: 'Brani',
|
||||||
|
subtitle: 'Sfoglia. Cerca. Scopri.',
|
||||||
|
heroEyebrow: 'Canzone del momento',
|
||||||
|
heroReroll: 'Prendine un\'altra',
|
||||||
|
playSong: 'Riproduci',
|
||||||
|
enqueueSong: 'Aggiungi alla coda',
|
||||||
|
toAlbum: 'Vai all\'album',
|
||||||
|
railRandom: 'Casuali',
|
||||||
|
railHighlyRated: 'Molto apprezzate',
|
||||||
|
browseTitle: 'Sfoglia tutti i brani',
|
||||||
|
browseUnsupported: "Questo server non mostra l'intero catalogo in una volta sola. Usa la funzione di ricerca qui sopra per trovare brani specifici.",
|
||||||
|
searchPlaceholder: 'Cerca un brano per titolo, artista o album…',
|
||||||
|
count_one: '{{count}} brano',
|
||||||
|
count_other: '{{count}} brani',
|
||||||
|
};
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
export const tray = {
|
||||||
|
playPause: 'Riproduci / Pausa',
|
||||||
|
nextTrack: 'Brano successivo',
|
||||||
|
previousTrack: 'brano precedente',
|
||||||
|
showHide: 'Mostra / Nascondi',
|
||||||
|
exitPsysonic: 'Esci da Psysonic',
|
||||||
|
nothingPlaying: 'Niente in riproduzione',
|
||||||
|
};
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
export const whatsNew = {
|
||||||
|
title: "Novità",
|
||||||
|
changelogTitle: 'Changelog',
|
||||||
|
viewTabsLabel: 'release notes',
|
||||||
|
viewHighlights: 'Punti salienti',
|
||||||
|
viewChangelog: 'Changelog',
|
||||||
|
empty: 'Non c\'è ancora nessun changelog per questa versione',
|
||||||
|
bannerTitle: 'Changelog',
|
||||||
|
bannerCollapsed: "Novità nella v{{version}}",
|
||||||
|
dismiss: 'Ignora',
|
||||||
|
close: 'Chiudi',
|
||||||
|
};
|
||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export const settings = {
|
|||||||
languageEn: 'Engleză',
|
languageEn: 'Engleză',
|
||||||
languageDe: 'Germană',
|
languageDe: 'Germană',
|
||||||
languageFr: 'Franceză',
|
languageFr: 'Franceză',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Olandeză',
|
languageNl: 'Olandeză',
|
||||||
languageZh: 'Chineză',
|
languageZh: 'Chineză',
|
||||||
languageNb: 'Norvegiană',
|
languageNb: 'Norvegiană',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export const settings = {
|
|||||||
languageDe: 'Deutsch',
|
languageDe: 'Deutsch',
|
||||||
languageEs: 'Español',
|
languageEs: 'Español',
|
||||||
languageFr: 'Français',
|
languageFr: 'Français',
|
||||||
|
languageIt: 'Italiano',
|
||||||
languageNl: 'Nederlands',
|
languageNl: 'Nederlands',
|
||||||
languageNb: 'Norsk',
|
languageNb: 'Norsk',
|
||||||
languageRu: 'Русский',
|
languageRu: 'Русский',
|
||||||
|
|||||||
Reference in New Issue
Block a user