This commit is contained in:
2026-08-17 21:20:45 +02:00
parent 321f11e817
commit 6fcdc74843
157 changed files with 2895 additions and 7544 deletions
+31 -22
View File
@@ -78,7 +78,7 @@ export const it: MessageDict = {
"auth.login.failed": "Accesso non riuscito",
"auth.login.passwordNotSet": "Questo account richiede ancora una password. Apri il link di invito o chiedi a un amministratore di generarne uno nuovo.",
"auth.login.setPasswordFirstTitle": "Imposta prima la password:",
"auth.login.setPasswordFirstBody": "usa il link di invito dalla tua email. Se il link è andato a un indirizzo vecchio (deriva email), chiedi a un amministratore dell'azienda di riemettere un invito per impostare la password a {email}.",
"auth.login.setPasswordFirstBody": "usa il link di invito dalla tua email. Se ti serve un nuovo link, chiedi a un amministratore dell'azienda di riemettere un link per impostare la password a {email}.",
"auth.login.yourEmail": "la tua email",
"auth.login.platformAdminsReissue": "Gli amministratori della piattaforma possono riemettere da",
"auth.login.adminUsersLink": "Admin → Utenti",
@@ -144,9 +144,9 @@ export const it: MessageDict = {
"auth.invite.acceptFailed": "Impossibile accettare l'invito",
"auth.invite.setPasswordFailed": "Impossibile impostare la password",
"auth.invite.expired": "Questo invito non è valido o è scaduto. Chiedi all'amministratore dell'azienda di inviare un nuovo invito, poi apri il nuovo link (o incolla il nuovo token qui sotto).",
"auth.invite.setPasswordExpired": "Questo link per impostare la password non è valido o è scaduto. Chiedi a un amministratore dell'azienda o della piattaforma di riemetterlo, poi apri il nuovo link (o incolla il nuovo token qui sotto).",
"auth.invite.setPasswordExpired": "Questo link per impostare la password non è valido o è scaduto. Chiedi a un amministratore dell'azienda di riemettere un link per impostare la password a questa email, poi apri il nuovo link (o incolla il nuovo token qui sotto).",
"auth.invite.emailMismatchDefault": "Hai effettuato l'accesso con un'email diversa da questo invito.",
"auth.invite.expiredFooter": "Link scaduto? Chiedi a un amministratore di riemetterlo — non c'è un'API di reinvio self-service. Amministratori della piattaforma:",
"auth.invite.expiredFooter": "Link scaduto? Chiedi a un amministratore dell'azienda di riemetterlo non c'è un'API di reinvio self-service.",
"auth.invite.adminUsersLink": "Admin → Utenti",
"auth.invite.doneTitle": "Fai parte del team",
"auth.invite.doneSetPasswordTitle": "Password salvata",
@@ -163,7 +163,7 @@ export const it: MessageDict = {
"auth.invite.switchAccountTitle": "Cambia account:",
"auth.invite.switchAccountBody": "esci, poi completa questo modulo con l'email invitata{emailSuffix}.",
"auth.invite.reissueTitle": "Percorso di riemissione:",
"auth.invite.reissueBody": "se la tua email di accesso reale è cambiata (deriva email), chiedi a un amministratore dell'azienda di revocare questo invito e inviarne uno nuovo all'email con cui accedi. Gli amministratori della piattaforma possono anche riemettere link per impostare la password da Admin → Utenti.",
"auth.invite.reissueBody": "chiedi a un amministratore dell'azienda di riemettere un link per impostare la password a questa email, oppure di revocare questo invito e inviarne uno nuovo all'email con cui accedi.",
"locale.switcher": "Lingua dell'interfaccia",
"locale.menu": "Scegli la lingua dell'interfaccia",
"locale.label": "Lingua della dashboard",
@@ -276,7 +276,7 @@ export const it: MessageDict = {
"settings.table.lastUsed": "Ultimo utilizzo",
"dashboard.demoSandbox": "Sandbox demo",
"dashboard.demoEmptyTitle": "La sandbox demo è vuota",
"dashboard.demoEmptyHint": "La sandbox demo è vuota — passa ad A1 o collega un feed per vedere statistiche reali del catalogo.",
"dashboard.demoEmptyHint": "La sandbox demo è vuota collega un feed per vedere statistiche reali del catalogo.",
"dashboard.overviewTitle": "Panoramica",
"dashboard.quickLinks": "Collegamenti rapidi",
"dashboard.whatsNew": "Novità",
@@ -319,7 +319,7 @@ export const it: MessageDict = {
"dashboard.workflow.exportMap": "Mappa poi esporta",
"dashboard.workflowHint": "Catalogo in ingresso → arricchisci / elabora → esporta o invia agli store. Vai al passo successivo per {name}.",
"dashboard.overviewHint": "Totali in tempo reale per {name}",
"dashboard.demoEmptyMessage": "Passa ad A1 (o un'altra azienda con dati) nell'intestazione, oppure collega un feed qui per popolare questa sandbox.",
"dashboard.demoEmptyMessage": "Collega un feed qui per popolare questa sandbox, oppure passa a un'altra azienda nell'intestazione.",
"dashboard.emptyTitle": "Importa un catalogo",
"dashboard.emptyMessage": "Catalogo in ingresso → arricchisci / elabora → esporta o invia agli store. Inizia con Per iniziare qui sotto (o collega un feed / carica un CSV).",
"dashboard.connectFeedAnyway": "Collega comunque un feed",
@@ -367,29 +367,29 @@ export const it: MessageDict = {
"activation.focus.sync": "Avanti: sincronizza un campione dopo aver salvato la mappatura. Usa Sync su un feed mappato — evita fonti non mappate.",
"activation.focus.dismiss": "Chiudi suggerimento",
"activation.dismiss": "Nascondi checklist",
"hypercare.report.title": "Hypercare di cutover",
"hypercare.report.title": "Serve aiuto dopo il trasferimento?",
"hypercare.report.message": "Dati mancanti o errati dopo la migrazione? Segnalalo così possiamo correggere il tuo workspace.",
"hypercare.report.cta": "Segnala dati mancanti o errati",
"hypercare.report.dismiss": "Ignora",
"hypercare.report.adminTriage": "Apri coda hypercare",
"etl.gaps.title": "What did not migrate",
"etl.gaps.message": "These areas were intentionally left empty or partial after the Descrybe platform cutover. Nothing is “broken” — recreate or reconnect as needed.",
"etl.gaps.title": "What still needs setup",
"etl.gaps.message": "Some items weren't copied when we moved your workspace. Nothing is broken — recreate or reconnect as needed.",
"etl.gaps.dismiss": "Dismiss",
"etl.gaps.apiKeys.title": "API keys",
"etl.gaps.apiKeys.body": "Legacy API key secrets were not migrated. Create a new key to restore API access — the secret is shown only once.",
"etl.gaps.apiKeys.body": "Previous API keys weren't copied. Create a new key to restore API access the secret is shown only once.",
"etl.gaps.apiKeys.cta": "Open API keys",
"etl.gaps.blobs.title": "File contents (blobs)",
"etl.gaps.blobs.body": "Upload records may exist as metadata only. File bytes were not copied — re-upload CSVs or resync object storage if you need the originals.",
"etl.gaps.blobs.countHint": "{count} file records are metadata-only (bytes were not migrated).",
"etl.gaps.blobs.title": "Uploaded files",
"etl.gaps.blobs.body": "File names may appear even when the file itself wasn't copied. Re-upload CSVs if you need the originals.",
"etl.gaps.blobs.countHint": "{count} files are listed without their contents (they weren't copied).",
"etl.gaps.blobs.cta": "Open Files",
"etl.gaps.jobs.title": "Processing history",
"etl.gaps.jobs.body": "Legacy job and task history was not backfilled for cutover. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Optional jobs domain was not run — empty history is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were tagged migrated from an optional backfill.",
"etl.gaps.jobs.body": "Earlier job history wasn't imported. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Processing history wasn't imported — an empty list is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were imported from the previous workspace.",
"etl.gaps.jobs.cta": "Open Processing",
"etl.gaps.woo.title": "Store credentials",
"etl.gaps.woo.body": "WooCommerce and Shopify secrets may need to be re-entered after cutover — that is a reconnect step, not a broken sync.",
"etl.gaps.woo.body": "WooCommerce and Shopify passwords may need to be re-entered after the move — reconnect your store; sync is not broken.",
"etl.gaps.woo.cta": "Open Stores",
"etl.gaps.settings.title": "Company settings",
"etl.gaps.settings.body": "Only language and merge-products settings were imported. Re-check other company preferences in Settings.",
@@ -456,9 +456,9 @@ export const it: MessageDict = {
"errors.readOnly": "Il sistema è in modalità sola lettura. Le modifiche sono temporaneamente disabilitate.",
"errors.companyAdminDenied": "Solo gli amministratori dell'azienda possono {action}. Chiedi aiuto a un amministratore.",
"errors.companyAdminDenied.actionDefault": "fare questo",
"docs.tryIt.memberCannotCreate": "Solo gli admin azienda possono creare chiavi API. Le chiavi legacy non sono state migrate — incolla una chiave sotto o chiedi a un admin di crearne una nuova.",
"docs.tryIt.noKeysLegacyAdmin": "Le chiavi API legacy non sono state migrate. Creane una con Use my API key o Impostazioni → Chiavi API — il secret è mostrato una sola volta.",
"docs.tryIt.noKeysLegacyMember": "Nessuna chiave API elencata. Le chiavi legacy non sono state migrate — chiedi a un admin di crearne una, o incolla una chiave dk_.",
"docs.tryIt.memberCannotCreate": "Solo gli admin azienda possono creare chiavi API. Le chiavi non sono state migrate — incolla una chiave sotto o chiedi a un admin di crearne una nuova.",
"docs.tryIt.noKeysLegacyAdmin": "Le chiavi API non sono state migrate. Creane una con Use my API key o Impostazioni → Chiavi API — il secret è mostrato una sola volta.",
"docs.tryIt.noKeysLegacyMember": "Nessuna chiave API elencata. Le chiavi non sono state migrate — chiedi a un admin di crearne una, o incolla una chiave dk_.",
"errors.couldNotUpdateLanguage": "Impossibile aggiornare la lingua",
"toast.support.replyTitle": "Risposta del supporto",
"toast.support.replyBody": "Lo staff ha risposto al tuo ticket di supporto.",
@@ -3690,6 +3690,7 @@ export const it: MessageDict = {
"processing.receipt.cancelledDesc": "Il processo appena avviato è stato annullato.",
"processing.receipt.cancelFailed": "Impossibile annullare il processo",
"unsubscribe.title": "Annulla iscrizione",
"unsubscribe.useEmailLink": "Usa il link di disiscrizione nell'email che ti abbiamo inviato. Aprire questa pagina senza quel link non puo modificare le preferenze email.",
"unsubscribe.me": "Annulla la mia iscrizione",
"unsubscribe.invalidLink": "Link non valido",
"unsubscribe.failedShort": "Annullamento iscrizione non riuscito",
@@ -4727,6 +4728,10 @@ export const it: MessageDict = {
"seo.terms.description": "Termini di utilizzo di Descrybe: importazione di feed, arricchimento del catalogo, contenuti assistiti da IA, esportazioni e sincronizzazione WooCommerce per la tua azienda.",
"seo.features.title": "Funzionalità — Feed, arricchimento ed esportazione | Descrybe",
"seo.features.description": "Scopri come Descrybe importa i feed dei fornitori, mappa i campi alla tua tassonomia, arricchisce i dati di prodotto e distribuisce i cataloghi tramite feed di esportazione, WooCommerce o API.",
"seo.contactSales.title": "Contatta le vendite | Descrybe",
"seo.contactSales.description": "Parlaci del tuo catalogo e delle esigenze di capacita: prepareremo un piano personalizzato che puoi pagare online.",
"seo.unsubscribe.title": "Annulla iscrizione | Descrybe",
"seo.unsubscribe.description": "Interrompi le email di marketing Descrybe usando il link di disiscrizione nel messaggio che ti abbiamo inviato.",
"pricing.page.eyebrow": "Prezzi",
"pricing.page.title": "Piani semplici per cataloghi in crescita",
"pricing.page.lead": "Inizia gratis con mappatura feed e pulizia di base. Passa a un piano superiore quando ti servono titoli e descrizioni IA, più prodotti, feed di esportazione o sync WooCommerce — da Starter a Enterprise.",
@@ -4734,6 +4739,8 @@ export const it: MessageDict = {
"pricing.page.subscribedMid": "o confronta i piani in",
"pricing.page.plansLink": "Piani",
"pricing.page.subscribedAfter": ".",
"pricing.page.guestSubscribedBefore": "Gia abbonato?",
"pricing.page.guestSubscribedAfter": "per gestire la fatturazione e confrontare i piani.",
"legal.lastUpdated": "Ultimo aggiornamento: {date}",
"legal.backHome": "← Torna alla home",
"legal.emailLabel": "Email:",
@@ -5065,7 +5072,7 @@ export const it: MessageDict = {
"brand.uploadLogo": "Carica logo",
"brand.clear": "Cancella",
"brand.field.logoUrl": "URL del logo",
"brand.placeholder.logoUrl": "https://… oppure caricato /api/brand/logo/files/…",
"brand.placeholder.logoUrl": "https://",
"brand.logoAlt": "Anteprima logo del brand",
"brand.tipsTitle": "Suggerimenti formula / anteprima",
"brand.saving": "Salvataggio…",
@@ -5226,6 +5233,8 @@ export const it: MessageDict = {
"pricing.section.publicBefore": "Piani pubblici: Free, Starter, Growth, Business ed Enterprise. Crea un account Free, poi passa a un piano superiore in",
"pricing.section.publicOr": "o",
"pricing.section.publicAfter": "tramite Stripe Checkout. Enterprise resta gestito dalle vendite.",
"pricing.section.guestPublicBefore": "Piani pubblici: Free, Starter, Plus, Growth, Business, Scale ed Enterprise. Crea un account Free, poi",
"pricing.section.guestPublicAfter": "per passare a un piano superiore tramite Stripe Checkout. Enterprise resta gestito dalle vendite.",
"pricing.section.plansLink": "Piani",
"pricing.section.billingLink": "Fatturazione",
"pricing.section.capabilitiesTitle": "A cosa è pensato ogni piano",
@@ -5291,7 +5300,7 @@ export const it: MessageDict = {
"pricing.calc.enterpriseTitle": "Sounds like Enterprise",
"pricing.calc.enterpriseBody": "Your feeds or catalog size exceed self-serve caps. Talk to sales for unlimited capacity and a managed AI grant or BYOK.",
"pricing.calc.ctaPlan": "Choose {name}",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. A1 and other client deals stay admin-only.",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. Custom client deals stay admin-only.",
"pricing.card.mostPopular": "Più popolare",
"pricing.card.custom": "Personalizzato",
"pricing.card.forever": "per sempre",