feat(catalog): add saved packages, preview and bulk price editing
CI / check (push) Successful in 52s
CI / deploy (push) Successful in 1m23s
CI / publish-container (push) Failing after 27s

This commit is contained in:
Simo committed 2026-09-09 20:04:10 +02:00
1 parent 867113d5d4
commit 047cd9f3dd
48 files changed
+7712

No files matched your search

+153
View File
@@ -2008,6 +2008,96 @@
"selectionHint": "Cambiare ricerca o filtro azzera la selezione.",
"noResults": "Nessuna offerta corrisponde alla ricerca e al filtro attuali.",
"selectVisible": "Seleziona tutte le offerte visibili"
},
"packages": {
"openPackages": "Pacchetti catalogo",
"title": "Pacchetti catalogo",
"description": "Prepara modifiche a categorie e prezzi in una bozza separata. Controlla il catalogo prima di pubblicare.",
"createPackage": "Nuovo pacchetto",
"createDraft": "Crea bozza",
"draftCreated": "Bozza del pacchetto creata. Il catalogo live non è stato modificato.",
"refresh": "Aggiorna elenco",
"searchPackages": "Cerca pacchetti",
"noPackages": "Nessun pacchetto corrisponde alla ricerca.",
"choosePackage": "Apri un pacchetto o crea una bozza dalle categorie esistenti.",
"name": "Nome pacchetto",
"mode": "Modalità pubblicazione",
"update": "Aggiorna categorie esistenti",
"copy": "Crea copie",
"updateHint": "La pubblicazione applica il pacchetto alle categorie e offerte esistenti.",
"copyHint": "La pubblicazione crea nuove categorie e offerte sotto il genitore scelto. I riferimenti ai furni vengono mantenuti.",
"sourceCategories": "Categorie di origine",
"packageLimits": "Sono incluse le sottocategorie. Ogni pacchetto supporta fino a 200 categorie e 500 offerte.",
"searchCategories": "Cerca categorie",
"selectedCategories": "Selezionate: {count}",
"targetParent": "Categoria genitore di destinazione",
"rootCategory": "Radice del catalogo",
"draft": "Bozza",
"published": "Pubblicato",
"editDraft": "Modifica bozza",
"catalogPreview": "Anteprima catalogo",
"showBaseline": "Mostra l’istantanea originale salvata",
"changes": "Prima e dopo",
"entry": "Voce",
"field": "Campo",
"before": "Prima",
"after": "Dopo",
"noChanges": "Nessun campo modificato rispetto all’istantanea originale.",
"copyReview": "Alla pubblicazione sarà copiato l’intero pacchetto, anche senza campi modificati. La tabella elenca le modifiche all’istantanea originale.",
"updateReview": "Queste modifiche della bozza aggiorneranno le voci esistenti dopo la pubblicazione.",
"saveDraft": "Salva bozza",
"saveHint": "Il salvataggio mantiene il pacchetto come bozza. Salva tutte le modifiche prima di richiedere la verifica di pubblicazione.",
"draftSaved": "Bozza salvata. La pubblicazione è un passaggio separato.",
"reviewPublication": "Verifica pubblicazione",
"publicationImpact": "La pubblicazione interessa {pages} categorie e {offers} offerte.",
"conflicts": "La pubblicazione è bloccata da conflitti. Risolvili prima di richiedere una nuova verifica.",
"readyToPublish": "La versione salvata ha superato la verifica. La pubblicazione modifica il catalogo live.",
"publish": "Pubblica pacchetto",
"confirmPublish": "Pubblicare ora questo pacchetto verificato nel catalogo live?",
"publishedSuccess": "Pacchetto pubblicato: {pages} categorie e {offers} offerte.",
"staleReview": "Questo pacchetto è cambiato in un’altra sessione. Riaprilo per verificare l’ultima versione salvata.",
"unsaved": "Modifiche non salvate",
"discardChanges": "Scartare le modifiche non salvate al pacchetto e continuare?",
"working": "Operazione in corso…",
"requestFailed": "La richiesta non è riuscita. Riprova.",
"invalidFields": "Controlla nomi obbligatori, layout e campi numerici interi prima di salvare.",
"category": "Categoria",
"caption": "Nome categoria",
"iconImage": "ID icona categoria",
"minRank": "Rango minimo",
"orderNum": "Ordine di visualizzazione",
"pageLayout": "Layout pagina",
"enabled": "Abilitata",
"visible": "Visibile",
"clubOnly": "Solo membri Club",
"vipOnly": "Solo membri VIP",
"offers": "Offerte ({count})",
"offer": "Offerta",
"catalogName": "Nome offerta",
"costCredits": "Crediti",
"costPoints": "Punti",
"pointsType": "ID valuta punti",
"amount": "Quantità",
"searchOffers": "Cerca offerte",
"currentCategoryOffers": "Solo la categoria selezionata",
"selectMatching": "Seleziona tutte le offerte filtrate ({count})",
"clearSelection": "Svuota selezione",
"selectedOffers": "Offerte selezionate: {count}",
"select": "Seleziona",
"selectOffer": "Seleziona offerta #{id}",
"noOffers": "Nessuna offerta corrisponde ai filtri.",
"bulkPrices": "Prezzi della bozza in blocco ({count} selezionate)",
"bulkHint": "Controlla i prezzi selezionati, poi accettali nella bozza. Il catalogo live resta invariato fino alla pubblicazione.",
"operation": "Operazione",
"set": "Imposta valore",
"add": "Aggiungi o sottrai",
"percent": "Variazione percentuale",
"value": "Valore",
"reviewBulk": "Anteprima prezzi",
"invalidBulk": "Scegli numeri validi e almeno un’offerta. I prezzi risultanti devono essere non negativi e nell’intervallo supportato.",
"acceptBulk": "Accetta prezzi nella bozza",
"previous": "Precedente",
"next": "Successiva"
}
},
"shop": {
@@ -3856,6 +3946,69 @@
"publications": "Bozze delle news",
"unavailable": "{source}: dati temporaneamente non disponibili.",
"installation": "Diagnostica installazione"
},
"catalogPackages": {
"backend": {
"sourceChanged": "Le categorie o le offerte sorgenti sono cambiate. Crea un nuovo pacchetto per includere i dati aggiornati.",
"saveConflict": "Il pacchetto è cambiato. Ricaricalo prima di salvare.",
"publishConflict": "Il pacchetto è cambiato. Aggiorna l’anteprima di pubblicazione.",
"catalogChanged": "Il catalogo è cambiato. Aggiorna l’anteprima di pubblicazione.",
"missing": "Pacchetto catalogo non trovato.",
"pageLimit": "Un pacchetto supporta al massimo 200 categorie, incluse le sottocategorie.",
"offerLimit": "Un pacchetto supporta al massimo 500 offerte.",
"payloadLimit": "I dati del pacchetto superano il limite di 8 MB.",
"membership": "Non puoi aggiungere o rimuovere elementi dal pacchetto.",
"hierarchy": "Non puoi modificare la gerarchia del pacchetto.",
"references": "Non puoi modificare i riferimenti ai furni del pacchetto.",
"furnitureMissing": "Un furni referenziato dal pacchetto non esiste più.",
"auditWarning": "Pacchetto pubblicato, ma la registrazione nell’audit non è riuscita.",
"hotelWarning": "Pacchetto pubblicato, ma l’aggiornamento non è stato inviato all’hotel.",
"exportWarning": "Pacchetto pubblicato, ma la pianificazione dell’esportazione non è riuscita.",
"refreshWarning": "Pacchetto pubblicato. Aggiorna la pagina per vedere il catalogo aggiornato."
}
},
"catalogPackagePreview": {
"title": "Anteprima catalogo",
"hint": "Sfoglia le pagine e le offerte reali del pacchetto. Questa è un’anteprima del catalogo, non la riproduzione completa del client di gioco. Non vengono effettuati acquisti.",
"search": "Cerca categorie o offerte",
"playerMode": "Accesso giocatore",
"rank": "Rango",
"club": "Club",
"vip": "VIP",
"externalParents": "La selezione appartiene a un catalogo più ampio. Non è possibile valutare le restrizioni delle categorie superiori esterne a questa istantanea.",
"invalidHierarchy": "{count} pagine hanno una gerarchia ciclica e non sono navigabili.",
"snapshotLimit": "Anteprima limitata a 200 pagine e 500 offerte.",
"restricted": "{count} pagine sono nascoste dalle impostazioni di accesso selezionate.",
"categories": "Categorie del catalogo",
"noPages": "Questa istantanea non contiene categorie.",
"inaccessible": "Nessuna categoria è accessibile con queste impostazioni. Modifica l’accesso giocatore o disattivalo per esaminare la bozza.",
"noMatches": "Nessun risultato per questa ricerca.",
"offerCount": "{count} offerte",
"layout": "Layout: {layout}",
"missingLayout": "Non specificato",
"unsupportedLayout": "Questo layout non ha un’anteprima dedicata. La griglia mostra le offerte reali; componenti e immagini del layout personalizzato non vengono riprodotti.",
"loadingIcons": "Caricamento delle icone dei furni…",
"assetsUnavailable": "I dettagli dei furni non sono al momento disponibili. I dati delle offerte restano visibili.",
"assetLimit": "Icone e nomi dei furni sono limitati ai primi 200 ID di questa vista.",
"emptyPage": "Questa categoria non contiene offerte dirette. Sfoglia le sottocategorie.",
"missingIcon": "Icona non disponibile",
"amount": "Quantità: {count}",
"bundle": "{count} tipi di furni",
"changed": "Modificato rispetto alla versione iniziale salvata",
"previous": "Precedente",
"next": "Successiva",
"page": "Pagina {page} di {total}",
"offerId": "Offerta #{id}",
"unknownFurniture": "Nome del furni non disponibile",
"selectOffer": "Seleziona un’offerta per esaminare il prezzo e i furni inclusi.",
"credits": "Crediti",
"duckets": "Duckets",
"diamonds": "Diamanti",
"pointsType": "Punti (tipo {type}):",
"free": "Gratis",
"specialPricing": "Prezzo speciale: {credits} crediti, {points} punti (tipo {type})",
"restrictedOffers": "{count} offerte in questa categoria richiedono l’iscrizione al Club.",
"clubOffer": "Offerta Club"
}
},
"radioRequests": {