mirror of
https://github.com/CNCKitchen/stlTexturizer.git
synced 2026-04-07 22:11:32 +00:00
ce5b040972
- Split monolithic i18n.js into per-language files under js/i18n/ - Lazy-load translations via dynamic import() with caching - Add French (fr) language support - Add error handling in _loadLang with English fallback - Remove duplicated lang.name from per-language files (registry is single source of truth) - Add dev-time key validation (warns on localhost when keys are missing vs en.js) - Add missing alerts.fileTooLarge key from main to all language files - Await async initLang() in main.js (supported by type=module)
144 lines
13 KiB
JavaScript
144 lines
13 KiB
JavaScript
export default {
|
||
"theme.dark": "Tema Scuro",
|
||
"theme.light": "Tema Chiaro",
|
||
"theme.toggleTitle": "Attiva/disattiva modalità chiara/scura",
|
||
"theme.toggleAriaLabel": "Attiva/disattiva modalità chiara/scura",
|
||
"dropHint.text": "Trascina qui un file <strong>.stl</strong>, <strong>.obj</strong> o <strong>.3mf</strong><br/>o <label for=\"stl-file-input\" class=\"link-label\">clicca per sfogliare</label>",
|
||
"ui.wireframe": "Wireframe",
|
||
"ui.controlsHint": "Trascina a sx: orbita · Trascina a dx: sposta · Scorri: zoom",
|
||
"ui.meshInfo": "{n} triangoli · {mb} MB · {sx} × {sy} × {sz} mm",
|
||
"ui.loadStl": "Carica Modello…",
|
||
"sections.displacementMap": "Mappa di Deformazione",
|
||
"ui.uploadCustomMap": "Carica mappa personalizzata",
|
||
"ui.noMapSelected": "Nessuna mappa selezionata",
|
||
"sections.projection": "Proiezione",
|
||
"labels.mode": "Modalità",
|
||
"projection.triplanar": "Triplanare",
|
||
"projection.cubic": "Cubica (Box)",
|
||
"projection.cylindrical": "Cilindrica",
|
||
"projection.spherical": "Sferica",
|
||
"projection.planarXY": "Planare XY",
|
||
"projection.planarXZ": "Planare XZ",
|
||
"projection.planarYZ": "Planare YZ",
|
||
"sections.transform": "Trasformazioni",
|
||
"labels.scaleU": "Scala U",
|
||
"labels.scaleV": "Scala V",
|
||
"labels.offsetU": "Offset U",
|
||
"labels.offsetV": "Offset V",
|
||
"labels.rotation": "Rotazione",
|
||
"tooltips.proportionalScaling": "Scala proporzionale (U = V)",
|
||
"tooltips.proportionalScalingAria": "Scala proporzionale (U = V)",
|
||
"sections.displacement": "Profondità Texture",
|
||
"labels.amplitude": "Ampiezza",
|
||
"labels.seamBlend": "Unione dei bordi ⓘ",
|
||
"tooltips.seamBlend": "Attenua il bordo netto dove si incontrano le facce della proiezione. Efficace per le modalità Cubica e Cilindrica.",
|
||
"labels.transitionSmoothing": "Smoothing di transizione ⓘ",
|
||
"tooltips.transitionSmoothing": "Larghezza della zona di fusione vicino ai bordi della giuntura. Valori più bassi mantengono le transizioni aderenti alla giuntura; valori più alti sfumano una fascia più ampia.",
|
||
"labels.textureSmoothing": "Smoothing della texture ⓘ",
|
||
"tooltips.textureSmoothing": "Applica una sfocatura gaussiana alla mappa di deformazione. Valori più alti producono dettagli superficiali più morbidi e graduali. 0 = disattivato.",
|
||
"labels.capAngle": "Angolo di copertura ⓘ",
|
||
"tooltips.capAngle": "Angolo (in gradi) rispetto alla verticale al quale entra in gioco la proiezione della copertura superiore/inferiore. Valori più piccoli limitano la proiezione della copertura a facce quasi piatte.",
|
||
"sections.masking": "Mascheramento",
|
||
"sections.maskAngles": "Per angolo ⓘ",
|
||
"tooltips.maskAngles": "0° = nessuna mascheratura. Le superfici comprese in questo angolo rispetto all'orizzontale non saranno texturizzate.",
|
||
"labels.bottomFaces": "Facce inferiori",
|
||
"tooltips.bottomFaces": "Elimina la texture sulle superfici rivolte verso il basso entro questo angolo rispetto all'orizzontale",
|
||
"labels.topFaces": "Facce superiori",
|
||
"tooltips.topFaces": "Elimina la texture sulle superfici rivolte verso l'alto entro questo angolo rispetto all'orizzontale",
|
||
"sections.surfaceMasking": "Per superficie ⓘ",
|
||
"sections.surfaceSelection": "Selezione delle superfici",
|
||
"tooltips.surfaceMasking": "Mascherare le superfici per controllare quali aree subiscono la deformazione.",
|
||
"tooltips.surfaceSelection": "Le superfici selezionate appaiono in verde e saranno le uniche a subire la deformazione durante l'esportazione.",
|
||
"excl.modeExclude": "Escludi",
|
||
"excl.modeExcludeTitle": "Modalità Escludi: le superfici dipinte non subiranno la deformazione della texture",
|
||
"excl.modeIncludeOnly": "Includi solo",
|
||
"excl.modeIncludeOnlyTitle": "Modalità Includi solo: solo le superfici dipinte subiranno la deformazione della texture",
|
||
"excl.toolBrush": "Pennello",
|
||
"excl.toolBrushTitle": "Pennello: dipingi i triangoli da escludere",
|
||
"excl.toolFill": "Riempimento",
|
||
"excl.toolFillTitle": "Riempimento a secchiello: riempi la superficie fino a un angolo di soglia",
|
||
"excl.shiftHint": "Tieni premuto Shift per cancellare",
|
||
"labels.type": "Tipo",
|
||
"brushType.single": "Singolo",
|
||
"brushType.circle": "Cerchio",
|
||
"labels.size": "Dimensione",
|
||
"labels.maxAngle": "Angolo massimo",
|
||
"tooltips.maxAngle": "Angolo diedro massimo tra triangoli adiacenti che il riempimento può attraversare",
|
||
"ui.clearAll": "Cancella tutto",
|
||
"excl.initExcluded": "0 facce mascherate",
|
||
"excl.faceExcluded": "{n} facce mascherate",
|
||
"excl.facesExcluded": "{n} facce mascherate",
|
||
"excl.faceSelected": "{n} faccia selezionata",
|
||
"excl.facesSelected": "{n} facce selezionate",
|
||
"excl.hintExclude": "Le superfici mascherate appaiono in arancione e non riceveranno deformazione durante l'esportazione",
|
||
"excl.hintInclude": "Le superfici selezionate appaiono verdi e saranno le uniche a ricevere la deformazione durante l'esportazione.",
|
||
"precision.label": "Precisione (Beta) ⓘ",
|
||
"precision.labelTitle": "Suddividi la mesh in background in modo che il pennello selezioni con una granularità più fine",
|
||
"precision.outdated": "⚠ Obsoleto",
|
||
"precision.refreshTitle": "Risuddividi la mesh per adattarla alle dimensioni attuali del pennello",
|
||
"precision.triCount": "{n} △",
|
||
"precision.refining": "Raffinamento…",
|
||
"precision.warningBody": "Stima ~{n} triangoli. Ciò potrebbe rallentare il browser. Continuare?",
|
||
"labels.boundaryFalloff": "Maschera liscia ⓘ",
|
||
"tooltips.boundaryFalloff": "Riduce gradualmente la deformazione a zero vicino ai bordi mascherati, impedendo sovrapposizioni di triangoli tra zone con e senza texture.",
|
||
"labels.symmetricDisplacement": "Deformazione simmetrica ⓘ",
|
||
"tooltips.symmetricDisplacement": "Quando è attivo, il grigio al 50% = nessuna deformazione; il bianco spinge verso l'esterno, il nero spinge verso l'interno. Mantiene il volume della parte approssimativamente costante.",
|
||
"labels.displacementPreview": "Anteprima 3D ⓘ",
|
||
"tooltips.displacementPreview": "Suddivide la mesh e sposta i vertici in tempo reale in modo da poter valutare la profondità effettiva. Richiede un uso intensivo della GPU su modelli complessi.",
|
||
"ui.placeOnFace": "Posiziona su una faccia",
|
||
"ui.placeOnFaceTitle": "Clicca su una faccia per orientarla verso il basso sul piano di stampa",
|
||
"progress.subdividingPreview": "Preparazione dell'anteprima...",
|
||
"warnings.amplitudeOverlap": "⚠ L'ampiezza supera il 10% della dimensione più piccola del modello — potrebbero verificarsi sovrapposizioni geometriche nel file STL esportato.",
|
||
"sections.export": "Esporta ⓘ",
|
||
"tooltips.export": "Lunghezza del bordo più piccola = dettagli della deformazione più precisi. L'output viene quindi ridotto al limite di triangoli.",
|
||
"labels.resolution": "Risoluzione",
|
||
"tooltips.resolution": "I bordi più lunghi di questo valore verranno suddivisi durante l'esportazione",
|
||
"labels.outputTriangles": "Triangoli in uscita",
|
||
"tooltips.outputTriangles": "La mesh viene prima suddivisa completamente, poi decimata fino a questo numero",
|
||
"warnings.safetyCapHit": "⚠ Limite di sicurezza di 20 milioni di triangoli raggiunto durante la suddivisione — il risultato potrebbe comunque essere più grossolano della lunghezza del bordo richiesta.",
|
||
"ui.exportStl": "Esporta STL",
|
||
"progress.subdividing": "Suddivisione della mesh…",
|
||
"progress.refining": "Raffinamento: {cur} triangoli, spigolo più lungo {edge}",
|
||
"progress.applyingDisplacement": "Applicazione dello spostamento a {n} triangoli…",
|
||
"progress.displacingVertices": "Spostamento dei vertici…",
|
||
"progress.decimatingTo": "Semplificazione da {from} → {to} triangoli…",
|
||
"progress.decimating": "Semplificazione: {cur} → {to} triangoli",
|
||
"progress.writingStl": "Scrittura STL…",
|
||
"progress.done": "Fatto!",
|
||
"progress.processing": "Elaborazione…",
|
||
"license.btn": "Licenza e condizioni",
|
||
"license.title": "Licenza e condizioni",
|
||
"license.item1": "Utilizzo gratuito per qualsiasi scopo, compresi <strong>lavori commerciali</strong> (ad es. la creazione di texture per file STL destinati a clienti o prodotti).",
|
||
"license.item2": "L'attribuzione è <strong>gradita</strong> ma <strong>non richiesta</strong> quando si utilizza questo strumento così com'è.",
|
||
"license.item3": "Vuoi sostenere questo strumento? Acquista su <a href=\"https://geni.us/CNCStoreTexture\" target=\"_blank\" rel=\"noopener\">CNCKitchen.STORE</a> o fai una donazione su <a href=\"https://www.paypal.me/CNCKitchen\" target=\"_blank\" rel=\"noopener\">PayPal</a>.",
|
||
"license.item4": "Questo strumento viene fornito <strong>così com'è</strong> senza <strong>alcuna garanzia</strong> di alcun tipo. L'utilizzo è a proprio rischio.",
|
||
"license.item5": "<strong>Non viene fornita alcuna assistenza</strong>. L'autore non ha alcun obbligo di correggere bug, rispondere a domande o aggiornare questo strumento. Detto questo, segnalazioni di bug e richieste di funzionalità sono sempre ben accette all'indirizzo <a href=\"mailto:texturizer@cnckitchen.com\">texturizer@cnckitchen.com</a>.",
|
||
"license.item6": "L'autore non potrà essere ritenuto <strong>responsabile</strong> per eventuali danni, perdita di dati o problemi derivanti dall'uso di questo strumento.",
|
||
"license.item7": "Vuoi ottenere una licenza o incorporare questo strumento per la tua attività o il tuo sito web? Contattaci all'indirizzo <a href=\"mailto:contact@cnckitchen.com\">contact@cnckitchen.com</a>.",
|
||
"license.item8": "Codice sorgente disponibile su <a href=\"https://github.com/CNCKitchen/stlTexturizer\" target=\"_blank\" rel=\"noopener\">GitHub</a>.",
|
||
"imprint.btn": "Note legali e privacy",
|
||
"imprint.title": "Note legali e informativa sulla privacy",
|
||
"imprint.sectionImprint": "Note legali (Impressum)",
|
||
"imprint.info": "CNC Kitchen<br>Stefan Hermann<br>Bahnhofstr. 2<br>88145 Hergatz<br>Germania",
|
||
"imprint.contact": "E-mail: <a href=\"mailto:contact@cnckitchen.com\">contact@cnckitchen.com</a><br>Telefono: +49 175 2011824<br><em>Il numero di telefono è riservato esclusivamente a richieste legali/commerciali — non per l'assistenza. </em>",
|
||
"imprint.odr": "Piattaforma UE per la risoluzione delle controversie online: <a href=\"https://ec.europa.eu/consumers/odr\" target=\"_blank\" rel=\"noopener\">https://ec.europa.eu/consumers/odr</a>",
|
||
"imprint.sectionPrivacy": "Informativa sulla privacy (Datenschutzerklärung)",
|
||
"imprint.privacyIntro": "<strong>Titolare del trattamento</strong> (Verantwortlicher gem. Art. 4 Abs. 7 DSGVO): Stefan Hermann, Bahnhofstr. 2, 88145 Hergatz, Germania.",
|
||
"imprint.privacyHosting": "Questo sito web è ospitato su <strong>GitHub Pages</strong> (GitHub Inc. / Microsoft Corp., 88 Colin P Kelly Jr St, San Francisco, CA 94107, USA). Quando visiti questo sito, GitHub potrebbe elaborare il tuo indirizzo IP nei log del server. Base giuridica: Art. 6(1)(f) GDPR (interesse legittimo alla fornitura del sito web). Vedi <a href=\"https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement\" target=\"_blank\" rel=\"noopener\">Informativa sulla privacy di GitHub</a>.",
|
||
"imprint.privacyLocal": "Questo strumento memorizza le preferenze dell'utente (lingua, tema) nel <strong>localStorage</strong> del tuo browser. Questi dati non lasciano mai il tuo dispositivo e non vengono trasmessi a nessun server.",
|
||
"imprint.privacyNoCookies": "Questo sito web <strong>non</strong> utilizza cookie, strumenti di analisi o tecnologie di tracciamento.",
|
||
"imprint.privacyExternal": "Questo sito contiene link a siti web esterni (ad es. CNCKitchen.STORE, PayPal). Questi siti hanno le proprie politiche sulla privacy, sulle quali non abbiamo alcun controllo.",
|
||
"imprint.privacyRights": "Ai sensi del GDPR hai il diritto di <strong>accesso, rettifica, cancellazione, limitazione del trattamento, portabilità dei dati</strong> e il diritto di <strong>presentare un reclamo</strong> presso un'autorità di controllo.",
|
||
"sponsor.title": "Grazie per aver scelto BumpMesh di CNC Kitchen!",
|
||
"sponsor.body": "Questo strumento è offerto <strong>completamente gratis</strong> da CNC Kitchen.<br>Mentre il tuo file STL viene elaborato, perché non dai un'occhiata al negozio che ci aiuta a continuare a creare cose fantastiche per te?",
|
||
"sponsor.visitStore": "🛒 Visita CNCKitchen.STORE",
|
||
"sponsor.donate": "💙 Dona su PayPal",
|
||
"sponsor.dontShow": "Non mostrare più questo messaggio",
|
||
"sponsor.closeAndContinue": "Chiudi e continua",
|
||
"cta.store": "Vuoi sostenere questo strumento? Acquista su <a href=\"https://geni.us/CNCStoreTexture\" target=\"_blank\" rel=\"noopener noreferrer\">CNCKitchen.STORE</a> o dona su <a href=\"https://www.paypal.me/CNCKitchen\" target=\"_blank\" rel=\"noopener noreferrer\">PayPal</a>",
|
||
"cta.storeDismiss": "Chiudi",
|
||
"alerts.loadFailed": "Caricamento del modello fallito: {msg}",
|
||
"alerts.exportFailed": "Esportazione fallita: {msg}",
|
||
"alerts.fileTooLarge": "File troppo grande ({size} MB). Massimo: {max} MB."
|
||
};
|