From ecdb8f96b252378553e2de5209c616621658be17 Mon Sep 17 00:00:00 2001 From: bottelliemanuele-maker Date: Tue, 13 Oct 2026 10:36:40 +0200 Subject: [PATCH] i18n: Italian interface catalog (it.tsv) (#789) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Italian as an interface language: 1,227 rows written from the English strings with Italian desktop-CAD vocabulary (Disegna, Tratteggio, Quota, Direttrice, layer, spazio modello/carta). Two `menu` entries keep the menu-bar headings apart from the command and tool-group labels: View → Visualizza (object label: Vista) and Modify → Edita (tool group: Modifica). Italian integer plurals follow the English rule (one, other). Registered in i18n::LANGUAGES and Preference (code `it`), reported in the catalog tests, with a locale/preference/plural/menu/font test; attributed in ATTRIBUTION.md; README, ROADMAP, docs/localization.md, docs/localization-parity.md, docs/control-protocol.md and the Options doc comment list the language. Co-authored-by: Claude Fable 5.1 --- ATTRIBUTION.md | 1 + README.md | 2 +- ROADMAP.md | 2 +- crates/ui-egui/src/i18n/it.tsv | 1237 +++++++++++++++++++++++++++++ crates/ui-egui/src/i18n/mod.rs | 12 +- crates/ui-egui/src/i18n/tests.rs | 37 +- crates/ui-egui/src/options/mod.rs | 2 +- docs/control-protocol.md | 2 +- docs/localization-parity.md | 4 +- docs/localization.md | 6 +- 10 files changed, 1294 insertions(+), 11 deletions(-) create mode 100644 crates/ui-egui/src/i18n/it.tsv diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 4a1b7c18..b49d56b8 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -64,3 +64,4 @@ Generated-in-code assets are original and have no file to list: | `crates/ui-egui/src/i18n/ru.tsv` | @pechnikov2026-star | Original Russian translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | | `crates/ui-egui/src/i18n/fr.tsv` | @pechnikov2026-star | Original French translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | | `crates/ui-egui/src/i18n/zh.tsv` | @mayloglog | Original Simplified Chinese translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | +| `crates/ui-egui/src/i18n/it.tsv` | Emanuele Bottelli (AI-assisted) | Original Italian translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | diff --git a/README.md b/README.md index 3c5720b1..50cc8516 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ numbers): | Layouts & plotting | Paper-space layouts, viewports (scale, lock, per-viewport layer freeze), MSPACE/PSPACE through viewports, page setups, PLOT and EXPORTPDF | | Parametric | Geometric and dimensional constraints, AUTOCONSTRAIN, PARAMETERS with expressions, conflict detection; constraints re-solve after every edit | | Grips | Hot grips with Space to cycle Stretch, Move, Rotate, Scale and Mirror | -| Interface languages | English, Ukrainian (Українська), Brazilian Portuguese (Português (Brasil)), German (Deutsch), Spanish (Español), Czech (Čeština), Russian (Русский), French (Français) and Simplified Chinese (简体中文, with an installed CJK font), live switching and a remembered Auto/system-language choice; [details](docs/localization.md) | +| Interface languages | English, Ukrainian (Українська), Brazilian Portuguese (Português (Brasil)), German (Deutsch), Spanish (Español), Czech (Čeština), Russian (Русский), French (Français), Simplified Chinese (简体中文, with an installed CJK font) and Italian (Italiano), live switching and a remembered Auto/system-language choice; [details](docs/localization.md) | | Automation | MCP server, JSON control channel, `cadcraft-cli` (info, convert, run, commands, mcp) | ## Quick start diff --git a/ROADMAP.md b/ROADMAP.md index c0690658..6ce41869 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -98,7 +98,7 @@ Ukrainian and German. Detail: [localization-parity.md](docs/localization-parity. | Korean | none | 0% | | Vietnamese | none | 0% | -Other languages shipped: Ukrainian and German, both partial (989 catalog rows each; Ukrainian landed with #36; engine messages stay English). +Other languages shipped: Ukrainian and German (989 catalog rows each; Ukrainian landed with #36), Brazilian Portuguese, Spanish, Czech, Russian, French, Simplified Chinese and Italian (1,227 rows, 2026-10-12); engine messages stay English. ## Upcoming diff --git a/crates/ui-egui/src/i18n/it.tsv b/crates/ui-egui/src/i18n/it.tsv new file mode 100644 index 00000000..0af3cb7b --- /dev/null +++ b/crates/ui-egui/src/i18n/it.tsv @@ -0,0 +1,1237 @@ +# CADCraft Italian interface catalog — original translations by Emanuele Bottelli (AI-assisted, Claude). +# License: MIT OR Apache-2.0 (the repository LICENSE-MIT and LICENSE-APACHE). +# Written from CADCraft's English strings; no proprietary translations were copied. +# UTF-8: contextEnglish sourceItalian translation. +# Empty context = ordinary label; menu = menu-bar heading; @plural = one|other forms with {n}. +# Keep command IDs, keywords, technology/product names and user data unchanged. +# Menu headings that differ from the object/command label (Italian desktop CAD convention). +menu View Visualizza +menu Modify Edita +# External References palette. + Apply Applica + Attach DWG... Associa DWG... + Bind Unisci + Detach Scollega + Loaded Caricato + Make it a block of this drawing, keeping its layer names Lo rende un blocco di questo disegno, conservando i nomi dei layer + Make it a block of this drawing; its layers become NAME$0$LAYER Lo rende un blocco di questo disegno; i suoi layer diventano NOME$0$LAYER + No external references are attached. Nessun riferimento esterno associato. + Not Found Non trovato + Not loaded Non caricato + Open Apri + Overlay Sovrapposizione + Reference Manager Gestore riferimenti + Reference Name Nome riferimento + References: {n} Riferimenti: {n} + Reload Ricarica + Reload All Ricarica tutto + Saved Path Percorso salvato + Unload Scarica + Unloaded Scaricato + Unreferenced Senza riferimenti + Unresolved Non risolto + Cancel Annulla + OK OK + or [ o [ + % of all commits % di tutti i commit + * Wildcard Match * Corrispondenza con caratteri jolly + *VARIES* *VARIA* + + | Top | 2D Wireframe + | Alto | Wireframe 2D + +Bin +Bin + +LOC +LOC + 1 Viewport 1 finestra + 2 Points 2 punti + 2 Viewports 2 finestre + 2D Solid Solido 2D + 3 Points 3 punti + 3 Viewports 3 finestre + 3D Face Faccia 3D + 3D Operations Operazioni 3D + 3D Polyline Polilinea 3D + 4 Viewports 4 finestre + < Less than < Minore di + <> Not Equal <> Diverso da + = Equals = Uguale a + > Greater than > Maggiore di + A variable name starts with a letter and has only letters, digits and _ Un nome di variabile inizia con una lettera e contiene solo lettere, cifre e _ + About Informazioni + About CADCraft Informazioni su CADCraft + Absolute Assoluto + Add Leader Aggiungi direttrice + Additional angles Angoli aggiuntivi + Align Allinea + Align Text Allinea testo + Aligned Allineata + All Tutte + All Annotation Objects Tutti gli oggetti di annotazione + All Used Layers Tutti i layer utilizzati + All files Tutti i file + Angle Angolo + Angular Angolare + Annotation Visibility Visibilità annotazioni + Annotation scale Scala di annotazione + Apparent Intersection Intersezione apparente + Append to current selection set Aggiungi al gruppo di selezione corrente + Apply to: Applica a: + Apply true color Applica colore reale + Arc Arco + Arc Length Lunghezza arco + Area Area + Arrange Panel Disponi pannello + Array Serie + Attach Associa + Attribute Attributo + Attribute Definition Definizione di attributo + Attribute Display Visualizzazione attributi + Audit Controlla + Auto (system language) Automatica (lingua di sistema) + Auto Constrain Vincola automaticamente + AutoConstrain Vincolo automatico + Axis, End Asse, fine + Base Base + Baseline Linea di base + Batch Publish Pubblicazione batch + Binary assets added Risorse binarie aggiunte + Binary assets removed Risorse binarie rimosse + Bind... Unisci... + Blend Fondi + Block Blocco + Block Attribute Manager... Gestore attributi blocco... + Block Editor Editor blocchi + Block Reference Riferimento di blocco + Block... Blocco... + Blocks Blocchi + Blue Blu + Bold Grassetto + Boolean Booleane + Boundary Contorno + Boundary... Contorno... + Box Parallelepipedo + Break Spezza + Break At Point Spezza in un punto + Bring Above Objects Porta sopra gli oggetti + Bring Annotations to Front Porta le annotazioni in primo piano + Bring to Front Porta in primo piano + Bulleted list Elenco puntato + ByBlock DaBlocco + ByColor DaColore + ByLayer DaLayer + CADCraft Help Aiuto di CADCraft + Cancel Annulla + Cartesian (x, y) Cartesiane (x, y) + Center Centro + Center Line Linea d'asse + Center Mark Segno di centro + Center X X centro + Center Y Y centro + Center Z Z centro + Center, Diameter Centro, diametro + Center, Radius Centro, raggio + Center, Start, Angle Centro, inizio, angolo + Center, Start, End Centro, inizio, fine + Center, Start, Length Centro, inizio, lunghezza + Chamfer Cima + Change Space Cambia spazio + Change to Current Layer Cambia al layer corrente + Changed: {n} Modificati: {n} + Circle Cerchio + Circumference Circonferenza + Clear History Cancella cronologia + Clear Cancella + Clip Delimita + Clip Viewport Delimita finestra + Clipboard Appunti + Close Chiudi + Close All Chiudi tutto + Close All Other Drawings Chiudi tutti gli altri disegni + Closed Chiusa + Close Comparison Chiudi confronto + Coincident Coincidente + Collapse Palettes Comprimi tavolozze + Collapse Tool Sets Comprimi set di strumenti + Collinear Collineare + Color Colore + Color 8 Colore 8 + Color 9 Colore 9 + Color Index Indice colore + Color... Colore... + Command Aliases Alias dei comandi + Command History Cronologia comandi + Clear Command History Cancella cronologia comandi + Command Line Riga di comando + Command Line History Lines Righe della cronologia della riga di comando + Command Reference Riferimento comandi + Commits Commit + Company Azienda + Compare Drawings... Confronta disegni... + Computer-aided design and drafting: an open-source, clean-room CAD application written in pure Rust. Progettazione e disegno assistiti dal computer: un'applicazione CAD open source, sviluppata in clean room e scritta interamente in Rust. + Concentric Concentrico + Cone Cono + Constraint Bars Barre dei vincoli + Constraint Settings Impostazioni vincoli + Construction Line Linea di costruzione + Contents Contenuto + Continue Continua + Contributors Collaboratori + Control Vertices Vertici di controllo + Convert Converti + Copy Copia + Copy Full File Path Copia percorso completo del file + Copy History Copia cronologia + Copy Layout Copia layout + Copy Nested Objects Copia oggetti nidificati + Copy Selection Copia selezione + Copy with Base Point Copia con punto base + Count Conta + Count List Elenco conteggio + Count Table Tabella conteggio + Create Block Crea blocco + Creates a user parameter Crea un parametro utente + Ctrl+Enter to finish Ctrl+Invio per terminare + Current layer Layer corrente + Current selection Selezione corrente + Current: {color} Corrente: {color} + Cut Taglia + Cyan Ciano + Cylinder Cilindro + DWG DWG + DWG Reference... Riferimento DWG... + DXF DXF + Dark Scuro + Data Extraction... Estrazione dati... + Default Predefinito + Data Link... Collegamento dati... + Default Save Format Formato di salvataggio predefinito + Default Save Version Versione di salvataggio predefinita + Define Attributes Definisci attributi + Define Attributes... Definisci attributi... + Defined width Larghezza definita + Degree Grado + Degrees of Freedom Gradi di libertà + Degrees of freedom: {n} Gradi di libertà: {n} + Delete Elimina + Delete Column Elimina colonna + Delete Constraints Elimina vincoli + Delete Dimension Style Elimina stile di quota + Delete Duplicate Objects Elimina oggetti duplicati + Delete Layer Elimina layer + Delete Layer State Elimina stato layer + Delete Layout Elimina layout + Delete Row Elimina riga + Delete Text Style Elimina stile di testo + Delta X Delta X + Delta Y Delta Y + Description Descrizione + Deselect All Deseleziona tutto + Diameter Diametro + Dim style Stile quota + Dimension Break Interrompi quota + Dimension Edit Edita quota + Dimension Quota + Dimension Objects Only Solo oggetti quota + Dimension Space Spazia quote + Dimension Style Override Sostituzione stile di quota + Dimension Style... Stile di quota... + Dimension Text Edit Edita testo quota + Dimension style Stile di quota + Dimensional Constraint Vincolo dimensionale + Dimensional Constraint Parameters Parametri dei vincoli dimensionali + Dimensional Constraints Vincoli dimensionali + Disassociate Dimensions Disassocia quote + Display name Nome visualizzato + Distance Distanza + Divide Dividi + Do not plot (click: plot) Non stampare (clic: stampa) + Donut Anello + Double-click to edit the description Doppio clic per modificare la descrizione + Down Giù + Drafting Disegno + Drafting Settings Impostazioni di disegno + Drafting Settings... Impostazioni di disegno... + Draw Disegna + Draw Order Ordine di visualizzazione + Drawing (DWG) Disegno (DWG) + Drawing (DXF) Disegno (DXF) + Drawing Limits Limiti del disegno + Drawing Template (DWT) Modello di disegno (DWT) + Drawing Utilities Utilità disegno + Drawings (DWG, DXF) Disegni (DWG, DXF) + SVG drawings (SVG, SVGZ) Disegni SVG (SVG, SVGZ) + Dynamic Dinamico + Dynamic Dimensions Quote dinamiche + Dynamic Input Input dinamico + Dynamic Input (F12) Input dinamico (F12) + E E + Edit Modifica + Edit Attributes... Modifica attributi... + Edit Text... Modifica testo... + Edit Table Cell Modifica cella tabella + Elevation Elevazione + Ellipse Ellisse + Elliptical Arc Arco ellittico + Enable Dynamic Input (F12) Abilita input dinamico (F12) + End Object Isolation Termina isolamento oggetti + End Width Larghezza finale + End X X finale + End Y Y finale + End angle Angolo finale + Endpoint Fine + Enter Invio + Enter Top, Zero or Bottom. Digitare Top, Zero o Bottom. + Enter a fit data option Digitare un'opzione dei dati di adattamento + Enter a pattern name Digitare il nome del modello + Enter a vertex editing option Digitare un'opzione di modifica dei vertici + Enter an option Digitare un'opzione + Enter angle of xline Digitare l'angolo della linea di costruzione + Enter angle of xline (0) or Digitare l'angolo della linea di costruzione (0) o + Enter area of rectangle in current units Digitare l'area del rettangolo nelle unità correnti + Enter attribute prompt Digitare il messaggio dell'attributo + Enter attribute tag name Digitare il nome dell'etichetta dell'attributo + Enter attribute value Digitare il valore dell'attributo + Enter block name Digitare il nome del blocco + Enter constraint type Digitare il tipo di vincolo + Enter continuity Digitare la continuità + Enter default attribute value Digitare il valore predefinito dell'attributo + Enter degree of spline Digitare il grado della spline + Enter delta angle Digitare la variazione dell'angolo + Enter delta length or Digitare la variazione di lunghezza o + Enter dimension text Digitare il testo della quota + Enter dimension text (<> = measurement) Digitare il testo della quota (<> = misura) + Enter dimension value or [name=expression] Digitare il valore della quota o [nome=espressione] + Enter dimension variable name to override Digitare il nome della variabile di quota da sostituire + Enter justification type Digitare il tipo di giustificazione + Enter leader text Digitare il testo della direttrice + Enter mline scale Digitare la scala della multilinea + Enter mode Digitare la modalità + Enter name of block to insert Digitare il nome del blocco da inserire + Enter new text Digitare il nuovo testo + Enter next point Digitare il punto successivo + Enter number of columns Digitare il numero di colonne + Enter number of data rows Digitare il numero di righe di dati + Enter number of items Digitare il numero di elementi + Enter number of items along path Digitare il numero di elementi lungo la traiettoria + Enter number of sides Digitare il numero di lati + Enter number of turns Digitare il numero di giri + Enter percentage length Digitare la percentuale della lunghezza + Enter rectangle length Digitare la lunghezza del rettangolo + Enter rectangle width Digitare la larghezza del rettangolo + Enter scale factor Digitare il fattore di scala + Enter text Digitare il testo + Enter text (use \P for new paragraphs) Digitare il testo (usare \P per i nuovi paragrafi) + Enter the number of segments Digitare il numero di segmenti + Enter twist direction of helix Digitare la direzione di avvolgimento dell'elica + Entire drawing Intero disegno + Equal Uguale + Erase Cancella + Evaluate Calcola + Exclude from new selection set Escludi dal nuovo gruppo di selezione + Explode Esplodi + Export Esporta + Export Table Esporta tabella + Export to PDF... Esporta in PDF... + Expression Espressione + Extend Estendi + Extension Estensione + Extents Estensioni + External Reference Riferimento esterno + External References Riferimenti esterni + Extrude Estrudi + File File + File Tab Scheda file + Fillet Raccordo + Filter Filtro + Filters Filtri + Find and Replace Trova e sostituisci + Find... Trova... + First Primo + First commit Primo commit + Fit Points Punti di adattamento + Fix Fisso + Flatten Objects Appiattisci oggetti + Format Formato + Freehand Schizzo + Freeze Congela + Freeze Layer Congela layer + Freeze in new viewports Congela nelle nuove finestre + Freeze/Thaw Congela/Scongela + Freeze/Thaw in all viewports Congela/Scongela in tutte le finestre + Freeze/Thaw in the current viewport Congela/Scongela nella finestra corrente + From Da + From Template... Da modello... + General Generale + Geometric Center Centro geometrico + Geometric Constraint Vincolo geometrico + Geometric Constraints Vincoli geometrici + Geometry Geometria + Get from the Drawing Prendi dal disegno + Get Variable Leggi variabile + Get View Leggi vista + Global Globale + Global width Larghezza globale + Grab bag Varie + Gradient Sfumatura + Gradient... Sfumatura... + Green Verde + Grid (F7) Griglia (F7) + Grid Display Visualizzazione griglia + Grid On (F7) Griglia attiva (F7) + Grid snap Snap griglia + Grid spacing Spaziatura griglia + Grip Edit Modifica con grip + Grip Mirror Specchio con grip + Grip Option Opzione grip + Grip Rotate Ruota con grip + Grip Scale Scala con grip + Grip Stretch Stira con grip + Group Gruppo + Group Edit Modifica gruppo + Group Options Opzioni gruppo + Group Selection Selezione gruppo + Hatch Tratteggio + Hatch Edit Edita tratteggio + Hatch Patterns Modelli di tratteggio + Hatch... Tratteggio... + Height Altezza + Height: {height} Altezza: {height} + Helix Elica + Help Aiuto + Hide All Nascondi tutto + Hide All Constraint Bars Nascondi tutte le barre dei vincoli + Hide All Dynamic Dimensions Nascondi tutte le quote dinamiche + Hide Layer List Nascondi elenco layer + Hide Objects Nascondi oggetti + Hide Palettes Nascondi tavolozze + History Cronologia + Home Inizio + Horizontal Orizzontale + HorizontalDistance DistanzaOrizzontale + How to apply: Modalità di applicazione: + ID Point Punto ID + Import Importa + In Avanti + In-window Menu Bar Barra dei menu nella finestra + Include in new selection set Includi nel nuovo gruppo di selezione + Increment angle Angolo incrementale + Index Color Colore indice + Index color: {index} Colore indice: {index} + Infer Constraints Deduci vincoli + Inquiry Interroga + Insert Inserisci + Insert Block Inserisci blocco + Insert Column Inserisci colonna + Insert Row Inserisci riga + Insert tab Inserisci scheda + Insert this block Inserisci questo blocco + Insert Table Formula Inserisci formula tabella + Insertion Inserimento + Insertion X X inserimento + Insertion Y Y inserimento + Insertion Z Z inserimento + Inspect Constraints Ispeziona vincoli + Inspect Drawing Ispeziona disegno + Inspection Ispezione + Interface Language Lingua dell'interfaccia + Interface Theme Tema dell'interfaccia + Intersect Interseca + Intersection Intersezione + Isolate Isola + Isolate Layer Isola layer + Isolate Objects Isola oggetti + Isometric Drafting Disegno isometrico + Jogged Spezzata + Jogged Linear Lineare spezzata + Join Unisci + Join the ArtCraft Discord… Unisciti al Discord di ArtCraft… + Join us on Discord Unisciti a noi su Discord + Isometric Plane Piano isometrico + Isometric snap Snap isometrico + Language Lingua + Last Ultimo + Last commit Ultimo commit + Layer Layer + Layer Delete Elimina layer + Layer Match Associa layer + Layer Merge Unisci layer + Layer Off Disattiva layer + Layer Properties Proprietà layer + Layer Properties Manager Gestore proprietà layer + Layer Properties Manager — current viewport Gestore proprietà layer — finestra corrente + Layer State Stato layer + Layer States Manager... Gestore stati layer... + Layer Tools Strumenti layer + Layer contains objects (double-click to make current) Il layer contiene oggetti (doppio clic per renderlo corrente) + Layer is empty (double-click to make current) Il layer è vuoto (doppio clic per renderlo corrente) + Layers Layer + Layers Palette Tavolozza layer + Hide Palette Nascondi tavolozza + Layers displayed: {shown} of {total}. Current layer: {layer} Layer visualizzati: {shown} di {total}. Layer corrente: {layer} + Layout Layout + Layout list Elenco layout + Leader Direttrice + Leaders Only Solo direttrici + Left Sinistra + Length Lunghezza + Length X Lunghezza X + Length Y Lunghezza Y + Lengthen Allunga + Light Chiaro + Line Linea + Line delta Delta linea + Linear Lineare + Lines +/− Righe +/− + Lines added Righe aggiunte + Lines deleted Righe eliminate + Lines of Command History Righe della cronologia comandi + Linetype Tipo di linea + Linetype Scale Scala tipo di linea + Linetype scale Scala tipo di linea + Ltscale Scala tipo di linea + Linetype... Tipo di linea... + Lineweight Spessore di linea + Lineweight... Spessore di linea... + List Lista + List Blocks Elenca blocchi + List Dimension Styles Elenca stili di quota + List Groups Elenca gruppi + List Layer States Elenca stati layer + List Layouts Elenca layout + List System Variables Elenca variabili di sistema + List Text Styles Elenca stili di testo + Load all Carica tutti + Load... Carica... + Loaded linetypes Tipi di linea caricati + Lock Blocca + Lock Layer Blocca layer + Lock viewport Blocca finestra + Lock/Unlock Blocca/Sblocca + Loft Loft + MIT OR Apache-2.0. Not affiliated with Autodesk, Inc. MIT OR Apache-2.0. Non affiliata ad Autodesk, Inc. + MODEL MODELLO + MText TestoM + Magenta Magenta + Major line every Linea principale ogni + Make Current Rendi corrente + Make Object's Layer Current Rendi corrente il layer dell'oggetto + Make... Crea... + Match Layer Associa layer + Match Properties Copia proprietà + Measure Misura + Measure Distance Misura distanza + Measure Geometry Misura geometria + Merge Cells Unisci celle + Merged PRs PR unite + Mid Between 2 Points Medio tra 2 punti + Midpoint Medio + Mirror Specchio + Model Modello + Model Space (in viewport) Spazio modello (nella finestra) + Modeling Modellazione + Models Modelli + Modify Modifica + Move Sposta + Multileader Multidirettrice + Multileader Style... Stile multidirettrice... + Multileader style Stile multidirettrice + Multiline Multilinea + Multiline Text Testo multilinea + Multiline Text... Testo multilinea... + Multiple Multiplo + Multiple Point Punti multipli + My Mie + My properties: not available yet Le mie proprietà: non ancora disponibili + N N + Name Nome + Name (A–Z) Nome (A–Z) + Named Views... Viste con nome... + Nearest Vicino + New Nuovo + New (metric) Nuovo (metrico) + New Drawing Nuovo disegno + New Drawing (⌘N) Nuovo disegno (⌘N) + New Drawing... Nuovo disegno... + New Layer Nuovo layer + New Layout Nuovo layout + New VP Freeze Congela nelle nuove FV + New Viewports... Nuove finestre... + New from Template... Nuovo da modello... + New layout Nuovo layout + New state name Nome del nuovo stato + Next Change Modifica successiva + No No + No blocks defined in this drawing. Nessun blocco definito in questo disegno. + No contributor data was built into this copy. In questa copia non sono inclusi i dati dei collaboratori. + No model credits were built into this copy. In questa copia non sono inclusi i crediti dei modelli. + No saved layer states Nessuno stato layer salvato + No selection Nessuna selezione + Node Nodo + None Nessuno + Not available Non disponibile + Not available yet Non ancora disponibile + Numbered list Elenco numerato + OK OK + Object Oggetto + Object Snap Snap ad oggetto + Object Snap (F3) Snap ad oggetto (F3) + Object Snap On (F3) Snap ad oggetto attivo (F3) + Object Snap Tracking Puntamento snap ad oggetto + Object Snap Tracking (F11) Puntamento snap ad oggetto (F11) + Object Snap Tracking Settings Impostazioni puntamento snap ad oggetto + Object type: Tipo di oggetto: + Oblique Obliquo + Off Disattivato + Offset Offset + On Attivato + On/Off Attiva/Disattiva + One of the Crafting Apps by the ArtCraft team and community. Una delle Crafting App del team e della comunità ArtCraft. + Only in this drawing: {n} Solo in questo disegno: {n} + Only in {name}: {n} Solo in {name}: {n} + Open (⌘O) Apri (⌘O) + Open Sample Drawing Apri disegno di esempio + Open sample drawing Apri disegno di esempio + Open Xref Apri xrif + Open... Apri... + Operator: Operatore: + Orbit Orbita + Ordinate Coordinata + Ortho (F8) Orto (F8) + Ortho Mode Modalità orto + Ortho Mode (F8) Modalità orto (F8) + Osnap Settings... Impostazioni snap ad oggetto... + Out Indietro + Over-constrained Sovravincolato + Override Sostituisci + PAPER CARTA + Percent Percentuale + Polar (distance < angle) Polari (distanza < angolo) + PRs PR + Page Setup Manager Gestore impostazioni pagina + Page Setup Manager... Gestore impostazioni pagina... + Pan Pan + Pan Down Pan in basso + Pan Left Pan a sinistra + Pan Right Pan a destra + Pan Up Pan in alto + Paper Space Spazio carta + Parallel Parallelo + Parameters Manager Gestore parametri + Parametric Parametrico + Paste Incolla + Paste as Block Incolla come blocco + Paste to Command Line Incolla nella riga di comando + Paste to Original Coordinates Incolla alle coordinate originali + Path Array Serie su traiettoria + Pattern Modello + Perpendicular Perpendicolare + Plot Stampa + Plot (click: do not plot) Stampa (clic: non stampare) + Plot Preview Anteprima di stampa + Plot Window Finestra di stampa + Plot style Stile di stampa + Plot style attached to Stile di stampa associato a + Plot style table Tabella stili di stampa + Plot Style... Stile di stampa... + Plot Style Manager Gestore stili di stampa + Plot Style Manager... Gestore stili di stampa... + Plot Styles... Stili di stampa... + Plotter Manager Gestore plotter + Plotter Manager... Gestore plotter... + New CTB Nuovo CTB + New STB Nuovo STB + New style Nuovo stile + Reset Panel Layout Reimposta disposizione pannelli + Send Hatches to Back Porta i tratteggi in secondo piano + Send Under Objects Porta sotto gli oggetti + Text Objects Only Solo oggetti testo + Use for this layout Usa per questo layout + Display plot styles Mostra stili di stampa + No plot style tables. Nessuna tabella stili di stampa. + A built-in table: editing it keeps an edited copy in the drawing. Tabella incorporata: modificandola, una copia modificata resta nel disegno. + Keep an editable copy of this table in the drawing Conserva una copia modificabile di questa tabella nel disegno + Layout {name}: {table} Layout {name}: {table} + Grayscale Scala di grigi + Screening Retinatura + Use object linetype Usa tipo di linea dell'oggetto + Use object lineweight Usa spessore di linea dell'oggetto + Remove Rimuovi + Add Aggiungi + Open a drawing first. Aprire prima un disegno. + Plot table type Tipo tabella di stampa + Color-dependent Dipendente dal colore + Named Con nome + Plus/minus Più/meno + Point Punto + Point Filters Filtri punto + Point Style... Stile punto... + Polar Array Serie polare + Polar Tracking Puntamento polare + Polar Tracking (F10) Puntamento polare (F10) + Polar Tracking On (F10) Puntamento polare attivo (F10) + Polar angle measurement Misurazione angolo polare + Polar distance Distanza polare + Polar: {distance} < {angle}° Polare: {distance} < {angle}° + PolarSnap Snap polare + Polygon Poligono + Polygonal Poligonale + Polygonal Viewport Finestra poligonale + Polyline Polilinea + Polyline Edit Edita polilinea + Position X Posizione X + Position Y Posizione Y + Position Z Posizione Z + Previous Precedente + Previous Change Modifica precedente + Previous Layer Layer precedente + Primitives Primitive + Print Stampa + Print... Stampa... + Properties Proprietà + Properties Inspector Ispettore proprietà + Properties: Proprietà: + Proxy Proxy + Purge Elimina + Pyramid Piramide + Quadrant Quadrante + Query Entities Interroga entità + Quick Rapida + Quick Dimension Quota rapida + Quick Properties Proprietà rapide + Quick Select Selezione rapida + Quick Select Properties Proprietà selezione rapida + Quick Select... Selezione rapida... + QuickCalc CalcRapida + QuickCalc Pick Punto CalcRapida + Quit CADCraft Esci da CADCraft + Radius Raggio + Raster Image Immagine raster + Ray Semiretta + Read-only Sola lettura + Real name Nome reale + Realtime Tempo reale + Reassociate Dimensions Riassocia quote + Recent Recenti + Recent Commands Comandi recenti + Recent Input Input recente + Recover... Ripristina... + Rectangle Rettangolo + Recalculate Table Formulas Ricalcola formule tabella + Rectangular Rettangolare + Rectangular snap Snap rettangolare + Rectangular Array Serie rettangolare + Red Rosso + Redo Ripeti + Redo (⇧⌘Z) Ripeti (⇧⌘Z) + Redraw Ridisegna + Regen Rigenera + Regen All Rigenera tutto + Region Regione + Region/Mass Properties Proprietà regione/massa + Reinitialize Reinizializza + Relative Relativo + Relative to last segment Relativo all'ultimo segmento + Remove Leader Rimuovi direttrice + Remove the viewport override Rimuovi la sostituzione della finestra + Rename Dimension Style Rinomina stile di quota + Rename Layer Rinomina layer + Rename Layer State Rinomina stato layer + Rename Layout Rinomina layout + Rename Text Style Rinomina stile di testo + Rename... Rinomina... + Repeat {command} Ripeti {command} + Requires a point (x,y, @dx,dy or @d Specificare il secondo punto o + Specify second source point Specificare il secondo punto di origine + Specify side to offset Specificare il lato dell'offset + Specify start angle Specificare l'angolo iniziale + Specify start point Specificare il punto iniziale + Specify start point of arc Specificare il punto iniziale dell'arco + Specify start point of polyline Specificare il punto iniziale della polilinea + Specify start point of text Specificare il punto iniziale del testo + Specify starting width Specificare la larghezza iniziale + Specify starting width for next segment Specificare la larghezza iniziale del segmento successivo + Specify tangent direction for the start point of arc Specificare la direzione della tangente nel punto iniziale dell'arco + Specify the elevation for rectangles Specificare l'elevazione dei rettangoli + Specify thickness for rectangles Specificare l'altezza oggetto dei rettangoli + Specify third point on circle Specificare il terzo punto sul cerchio + Specify third point on circle: _tan to Specificare il terzo punto sul cerchio: _tan a + Specify third source point or Specificare il terzo punto di origine o + Specify through point Specificare il punto di passaggio + Specify top diameter Specificare il diametro superiore + Specify top radius or Specificare il raggio superiore o + Specify total angle Specificare l'angolo totale + Specify total length or Specificare la lunghezza totale o + Specify width for rectangles Specificare la larghezza dei rettangoli + Sphere Sfera + Spline Spline + Spline Edit Edita spline + Stack (type 1/2 then select) Sovrapponi (digitare 1/2, poi selezionare) + Standard Standard + Start Inizia + Start Width Larghezza iniziale + Start X X iniziale + Start Y Y iniziale + Start angle Angolo iniziale + Start, Center, Angle Inizio, centro, angolo + Start, Center, End Inizio, centro, fine + Start, Center, Length Inizio, centro, lunghezza + Start, End, Angle Inizio, fine, angolo + Start, End, Direction Inizio, fine, direzione + Start, End, Radius Inizio, fine, raggio + Status Stato + Status Bar Barra di stato + Stretch Stira + Style: Standard Stile: Standard + Subtract Sottrazione + Sweep Sweep + Switch Drawing Cambia disegno + Switch Layout Cambia layout + Switch between model space in a viewport and paper space Passa dallo spazio modello in una finestra allo spazio carta e viceversa + Symmetric Simmetrico + Synchronize Attributes Sincronizza attributi + To A + Toggle PICKADD (off: each pick replaces the selection) Attiva/disattiva PICKADD (disattivato: ogni selezione sostituisce la precedente) + Toggle PICKADD (on: picks add to the selection) Attiva/disattiva PICKADD (attivato: le selezioni si aggiungono) + TOP ALTO + Table Tabella + Table Breaks Interruzioni tabella + Table Cell Style Stile cella tabella + Table Style... Stile tabella... + Table style Stile tabella + Table... Tabella... + Tan, Tan, Radius Tan, tan, raggio + Tan, Tan, Tan Tan, tan, tan + Tangent Tangente + Temporary track point Punto di puntamento temporaneo + Text Testo + Text Editor Editor di testo + Text Height Altezza testo + Text Style... Stile di testo... + Text height Altezza testo + Text override Sostituzione testo + Text style Stile di testo + Thaw All Layers Scongela tutti i layer + Thaw Layer Scongela layer + There is nothing here yet. Qui non c'è ancora niente. + Thickness Altezza oggetto + Time Tempo + To get started, create or open a drawing. Per iniziare, crea o apri un disegno. + Tool Bar Barra degli strumenti + Tool Sets Set di strumenti + Tools Strumenti + Torus Toro + Trace Traccia + Track orthogonally only Puntamento solo ortogonale + Track using all polar angle settings Puntamento con tutte le impostazioni degli angoli polari + Transparency Trasparenza + Trim Taglia + True Color Colori reali + Turn All Layers On Attiva tutti i layer + Turn Off Layer Disattiva layer + Turn On Layer Attiva layer + Turn Quick Properties off (QPMODE) Disattiva le proprietà rapide (QPMODE) + Type Tipo + Type a command Digitare un comando + Type text; Enter starts a new paragraph Digitare il testo; Invio inizia un nuovo paragrafo + UCS Icon Icona UCS + Undo Annulla + Undo (⌘Z) Annulla (⌘Z) + Ungroup Separa gruppo + Union Unione + Unisolate Layer Annulla isolamento layer + Units Conversion Conversione unità + Units... Unità... + Unlock Layer Sblocca layer + Unlock viewport Sblocca finestra + Unmerge Cells Separa celle + Unsaved Layer State Stato layer non salvato + Up Su + Update Data Links Aggiorna collegamenti dati + Update Aggiorna + Use System Setting Usa impostazione di sistema + User Utente + User Parameters Parametri utente + Username Nome utente + Volume Volume + VP Color Colore FV + VP Freeze Congela FV + Value Valore + Value: Valore: + Variables Variabili + Version Versione + Version 2000 Versione 2000 + Version 2004 Versione 2004 + Version 2007 Versione 2007 + Version 2010 Versione 2010 + Version 2013 Versione 2013 + Version 2018 Versione 2018 + Version {version} Versione {version} + Vertical Verticale + VerticalDistance DistanzaVerticale + View Vista + ViewCube ViewCube + Viewport Finestra + Viewport Layer Freeze Congela layer nella finestra + Viewport Properties Proprietà finestra + Viewport is locked La finestra è bloccata + Viewport scale Scala finestra + Viewport {id} Finestra {id} + Viewports Finestre + W O + WCS ⌄ WCS ⌄ + White Bianco + Width factor Fattore di larghezza + Window Finestra + Wipeout Copertura + Workspace Switching Cambio area di lavoro + Write Block Scrivi blocco + Xline Xlinea + Yellow Giallo + Yes Sì + Zoom Zoom + Zoom All Zoom tutto + Zoom Dynamic Zoom dinamico + Zoom Extents Zoom estensioni + Zoom In Ingrandisci + Zoom Object Zoom oggetto + Zoom Out Riduci + Zoom Previous Zoom precedente + Zoom Realtime Zoom in tempo reale + Zoom Window Zoom finestra + error errore + {contributors} · {commits} {contributors} · {commits} + {kind} (constraint {id}) {kind} (vincolo {id}) + {kind} constraint {name} = {expression} (double-click to edit) Vincolo {kind} {name} = {expression} (doppio clic per modificare) + {name}: {distance} < {angle}° {name}: {distance} < {angle}° + ƒx New User Parameter ƒx Nuovo parametro utente + ΔLOC ΔLOC + −Bin −Bin + −LOC −LOC + ⌘↩ to finish ⌘↩ per terminare +@plural {n} commit {n} commit|{n} commit +@plural {n} contributor {n} collaboratore|{n} collaboratori + Drawing as bytes Disegno in byte + Services Servizi + Hide CADCraft Nascondi CADCraft + Hide Others Nascondi altre + Accessibility Accessibilità + Show System Cursor Mostra cursore di sistema + Import... Importa... + Export... Esporta... + Batch Publish... Pubblicazione batch... + Scale List... Elenco scale... + Annotative Object Scale Scala oggetto annotativo + Add Current Scale Aggiungi scala corrente + Delete Current Scale Elimina scala corrente + Add/Delete Scales... Aggiungi/Elimina scale... + Synchronize Multiple-scale Positions Sincronizza posizioni a più scale + Annotative Update Aggiornamento annotativo + Show Annotative Objects Mostra oggetti annotativi + Current Scale Only Solo scala corrente + All Scales Tutte le scale + Drawing Recovery Manager... Gestore ripristino disegni... + Tolerance... Tolleranza... + Add Vertex Aggiungi vertice + Remove Vertex Rimuovi vertice + Convert to Arc Converti in arco + Convert to Line Converti in linea + Stretch Vertex Stira vertice + Edit Array Modifica serie + Close Array Editing Chiudi modifica serie + Multiline... Multilinea... + Multiline Style... Stile multilinea... + Solid Editing Modifica solidi + 3D Mouse... Mouse 3D... + 3D Mouse Mouse 3D + Calibrate 3D Mouse Calibra mouse 3D + 3D Mouse Navigation Navigazione con mouse 3D + 3D mouse input is unavailable on this platform L'input del mouse 3D non è disponibile su questa piattaforma + No supported 3D mouse found Nessun mouse 3D supportato trovato + Release the 3D mouse to calibrate its resting position Rilasciare il mouse 3D per calibrarne la posizione di riposo + 3D mouse connected Mouse 3D collegato + 3D mouse busy, possibly 3DxWare or missing device permissions Mouse 3D occupato, forse da 3DxWare o per permessi del dispositivo mancanti + 3D mouse disconnected Mouse 3D scollegato + 3D mouse input could not be started Impossibile avviare l'input del mouse 3D + Enable 3D mouse navigation Abilita la navigazione con il mouse 3D + Pan sensitivity Sensibilità del pan + Zoom sensitivity Sensibilità dello zoom + Reverse zoom direction Inverti la direzione dello zoom + Calibrate Calibra + Move sideways to pan; push/pull or twist to zoom. Muovere lateralmente per il pan; spingere/tirare o ruotare per lo zoom. + Left device button: zoom extents. Right device button: calibrate. Pulsante sinistro del dispositivo: zoom estensioni. Pulsante destro: calibra. + More toolbar commands Altri comandi della barra degli strumenti + Default save version Versione di salvataggio predefinita + Automatic save every Salvataggio automatico ogni + min min + Automatic save file location Percorso dei file di salvataggio automatico + Drawings with no file yet are saved in the default version. 0 minutes turns automatic save off. I disegni non ancora salvati su file usano la versione predefinita. 0 minuti disattiva il salvataggio automatico. + Time-sensitive right-click: a quick click is Enter, holding opens the menu Clic destro temporizzato: un clic rapido equivale a Invio, tenendo premuto si apre il menu + Turned off, a right-click while a command runs always opens the shortcut menu. Se disattivato, un clic destro durante un comando apre sempre il menu di scelta rapida. + Hatch Pattern Modello di tratteggio + Search for pattern Cerca modello + Run Script... Esegui script... + Select closed objects (regions, closed polylines, circles). Selezionare oggetti chiusi (regioni, polilinee chiuse, cerchi). diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index 95909905..983de93c 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -31,10 +31,12 @@ pub enum Preference { French, #[serde(rename = "zh")] Chinese, + #[serde(rename = "it")] + Italian, } impl Preference { - pub const ALL: [Self; 10] = [ + pub const ALL: [Self; 11] = [ Self::Auto, Self::English, Self::Ukrainian, @@ -45,6 +47,7 @@ impl Preference { Self::Russian, Self::French, Self::Chinese, + Self::Italian, ]; /// The codes a preference can be given as, for messages ("auto, en or uk"). @@ -68,6 +71,7 @@ impl Preference { Self::Russian => "ru", Self::French => "fr", Self::Chinese => "zh", + Self::Italian => "it", } } @@ -83,6 +87,7 @@ impl Preference { Self::Russian => "Русский", Self::French => "Français", Self::Chinese => "简体中文", + Self::Italian => "Italiano", } } @@ -106,6 +111,7 @@ impl Preference { Self::Russian => "ru", Self::French => "fr", Self::Chinese => "zh", + Self::Italian => "it", Self::Auto => locales.iter().find_map(|s| locale_language(s)).unwrap_or("en"), } } @@ -122,7 +128,7 @@ pub struct Language { catalog: OnceLock>, } -pub static LANGUAGES: [Language; 9] = [ +pub static LANGUAGES: [Language; 10] = [ Language { code: "en", name: "English", source: "", plural: plural_en, plural_forms: 2, catalog: OnceLock::new() }, Language { code: "uk", name: "Українська", source: include_str!("uk.tsv"), plural: plural_uk, plural_forms: 3, catalog: OnceLock::new() @@ -147,6 +153,8 @@ pub static LANGUAGES: [Language; 9] = [ // Chinese has no grammatical plural: both `@plural` forms read the same. Its glyphs come from // an installed CJK font (`theme::cjk_font`); without one the interface stays English. Language { code: "zh", name: "简体中文", source: include_str!("zh.tsv"), plural: plural_en, plural_forms: 2, catalog: OnceLock::new() }, + // Italian integer plurals (CLDR `it`) follow the English rule: one (1), other. + Language { code: "it", name: "Italiano", source: include_str!("it.tsv"), plural: plural_en, plural_forms: 2, catalog: OnceLock::new() }, ]; /// BCP 47 and POSIX locale tags, including `uk-UA`, `uk_UA.UTF-8` and `pt_BR.UTF-8`. diff --git a/crates/ui-egui/src/i18n/tests.rs b/crates/ui-egui/src/i18n/tests.rs index 0be170bd..d04daea5 100644 --- a/crates/ui-egui/src/i18n/tests.rs +++ b/crates/ui-egui/src/i18n/tests.rs @@ -39,7 +39,7 @@ fn catalog_is_valid_and_preserves_placeholders_and_ellipses() { /// to English for what they don't cover yet; their gaps are reported, not enforced, so adding a /// command doesn't require a row in every language. const REQUIRED: &[&str] = &["uk"]; -const REPORTED: &[&str] = &["pt-BR", "de", "es", "cs", "ru", "fr", "zh"]; +const REPORTED: &[&str] = &["pt-BR", "de", "es", "cs", "ru", "fr", "zh", "it"]; fn check(language: &str, what: &str, missing: Vec) { if REQUIRED.contains(&language) { @@ -527,6 +527,41 @@ fn russian_and_french_plurals() { }); } +#[test] +fn italian_locales_plurals_and_accents() { + for tag in ["it", "it-IT", "it_IT.UTF-8", "IT-ch", " it-CH ", "it_IT@euro"] { + assert_eq!(locale_language(tag), Some("it"), "{tag}"); + } + assert_eq!(locale_language("italic"), None); + assert_eq!(Preference::parse("it"), Some(Preference::Italian)); + assert_eq!(Preference::Auto.resolve(&["it-IT".into(), "en-US".into()]), "it"); + assert_eq!(Preference::Italian.resolve(&["uk-UA".into()]), "it"); + with_language("it", || { + for (n, word) in [(0, "collaboratori"), (1, "collaboratore"), (2, "collaboratori"), (21, "collaboratori")] { + assert_eq!(count(n, "{n} contributor", "{n} contributors"), format!("{n} {word}")); + } + assert_eq!(t("Draw"), "Disegna"); + assert_eq!(tr_menu("it", "Modify"), "Edita"); + assert_eq!(tr("it", "Modify"), "Modifica"); + assert_eq!(tr_menu("it", "View"), "Visualizza"); + assert_eq!(tr("it", "View"), "Vista"); + }); + // Italian accented letters (à è é ì ò ù and capitals) come from the bundled egui fonts. + let ctx = egui::Context::default(); + let mut output = ctx.run_ui(Default::default(), |_| {}); + output.textures_delta.clear(); + let letters: BTreeSet<_> = include_str!("it.tsv").chars().filter(|c| ('\u{00c0}'..='\u{00ff}').contains(c)).collect(); + assert!(letters.contains(&'à') && letters.contains(&'è')); + ctx.fonts_mut(|view| { + for family in [egui::FontFamily::Proportional, egui::FontFamily::Monospace] { + let mut font = view.fonts.font(&family); + for c in &letters { + assert!(font.characters().contains_key(c), "missing {c} in {family:?}"); + } + } + }); +} + /// Chinese shows only with an installed CJK font (none is bundled); without one the interface /// stays English instead of drawing boxes, and choosing it says why. #[test] diff --git a/crates/ui-egui/src/options/mod.rs b/crates/ui-egui/src/options/mod.rs index e64f4806..8a3c7b66 100644 --- a/crates/ui-egui/src/options/mod.rs +++ b/crates/ui-egui/src/options/mod.rs @@ -9,7 +9,7 @@ //! | name | value | //! |---|---| //! | `theme` | `"system"`, `"light"` or `"dark"` | -//! | `interfaceLanguage` | `"auto"`, `"en"`, `"uk"`, `"pt-BR"`, `"de"`, `"es"`, `"cs"`, `"ru"`, `"fr"` or `"zh"` | +//! | `interfaceLanguage` | `"auto"`, `"en"`, `"uk"`, `"pt-BR"`, `"de"`, `"es"`, `"cs"`, `"ru"`, `"fr"`, `"zh"` or `"it"` | //! | `saveFormat` | `"dxf"` or `"dwg"`: the format Save As suggests for new drawings | //! | `saveVersion` | `"2000"` … `"2018"`: the version drawings with no file yet are saved in | //! | `SAVETIME` | minutes between automatic saves, 0–600 (0: off) | diff --git a/docs/control-protocol.md b/docs/control-protocol.md index 1f4d9380..daf91120 100644 --- a/docs/control-protocol.md +++ b/docs/control-protocol.md @@ -115,7 +115,7 @@ Select a language with `engine.execute` and the UI command `ui.language`: {"id":1,"method":"engine.execute","params":{"command":"ui.language","params":{"lang":"uk"}}} ``` -Supported values are `auto`, `en`, `uk`, `pt-BR`, `de`, `es`, `cs`, `ru`, `fr` and `zh` (Chinese needs an installed CJK font; without one the result's `shown` is `en`). `ui.set` also accepts +Supported values are `auto`, `en`, `uk`, `pt-BR`, `de`, `es`, `cs`, `ru`, `fr`, `zh` and `it` (Chinese needs an installed CJK font; without one the result's `shown` is `en`). `ui.set` also accepts `{"interfaceLanguage":"uk"}`; `ui.inspect` reports the saved choice in its UI state. Invalid choices leave the current language unchanged. Menus, command labels and prompt text returned by the control channel retain their English source text. See [localization.md](localization.md). diff --git a/docs/localization-parity.md b/docs/localization-parity.md index d7ae1eec..eacfc5b9 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -66,8 +66,9 @@ plus native review by a human; extending the catalog to the remaining English-on | Vietnamese | vi | 0 (0%) | 0% | Latin with stacked diacritics: renders per code point, untested | no | none | 3–5 h | | Ukrainian | uk | 989 catalog rows (≈ 100% of the catalog; ≈ 80% of all UI strings, estimated: engine diagnostics and uncatalogued text stay English) | dialogs and tooltips yes; command reference searchable in Ukrainian | Cyrillic: yes (bundled egui fonts) | translated by a contributor; no second review | partial | 2–4 h | | Czech | cs | 1,202 catalog rows; reference catalog and marked UI literals covered | dialogs and tooltips yes; contextual menu headings; command reference searchable in Czech | Latin: yes (bundled egui proportional and monospace fonts; Czech letters and quotes tested) | AI-assisted by @Losminek; independent review pass; not yet proofread by a native speaker | complete current catalog; English-only interface gaps remain | native review + shared English-only UI work | +| Italian | it | 1,227 catalog rows; reference catalog and marked UI literals covered | dialogs and tooltips yes; contextual menu headings (Visualizza / Vista, Edita / Modifica); command reference searchable in Italian | Latin: yes (bundled egui fonts; accented letters tested) | AI-assisted by Emanuele Bottelli (Claude), written from the English strings with Italian desktop-CAD vocabulary; no native proofreading pass yet | complete current catalog; English-only interface gaps remain | native review + shared English-only UI work | -Other languages shipped: Ukrainian, Brazilian Portuguese, German, Czech, Russian and French. Czech covers the +Other languages shipped: Ukrainian, Brazilian Portuguese, German, Czech, Russian, French and Italian. Czech covers the reference catalog and marked UI literals; engine diagnostics and uncatalogued text remain English. AutoCAD for Mac ships 7 non-English languages (zh-Hans, es, fr, ja, de, ko, it); of those, CADCraft now ships German, and additionally Ukrainian, which AutoCAD for Mac doesn't ship. @@ -80,6 +81,7 @@ each language, which needs humans. Translations parallelise fully once the catal | Date | Change | Summary | |---|---|---| +| 2026-10-12 | minor | Italian added: 1,227 rows, one/other plurals, two `menu` headings, locale/preference/plural/font tests; AI-assisted, native proofreading pending | | 2026-10-11 | minor | Czech added: 1,202 rows, one/few/other plurals, locale/preferences/menu/font/render tests; independent review pass; native proofreading pending | | 2026-10-11 | minor | German catalog landed: `de` preference and catalog, per-language plural rules; non-English languages 1 → 2; total hours 60–100 → 55–95 | | 2026-10-10 | minor | Right-to-left drawing text: bidi and Arabic-script shaping in TEXT and MTEXT (#287) | diff --git a/docs/localization.md b/docs/localization.md index 32bbd460..932ae6d6 100644 --- a/docs/localization.md +++ b/docs/localization.md @@ -1,7 +1,7 @@ # Interface languages Choose **Edit → Interface Language** and select **Auto (system language)**, **English**, -**Українська**, **Português (Brasil)**, **Deutsch**, **Español**, or **Čeština** (Czech). +**Українська**, **Português (Brasil)**, **Deutsch**, **Español**, **Čeština** (Czech), **Русский**, **Français**, **简体中文**, or **Italiano**. The interface updates without restarting, including the native macOS menus. The choice is saved with the other interface preferences (`cadcraft.prefs`, beside the theme): eframe storage on the desktop, browser local storage on the web. Installations without a saved @@ -10,7 +10,7 @@ choice use Auto. Auto uses the first supported language in the operating system's preferred locales, or the browser's `navigator.languages` on the web. BCP 47 and POSIX tags select their primary language: `uk-UA` → `uk`, `de_AT.UTF-8` → `de`, `es-MX` → `es`, `pt_BR.UTF-8` → `pt-BR`, -`cs-CZ` and `cs_CZ.UTF-8` → `cs`. Unsupported languages fall back to English. +`cs-CZ` and `cs_CZ.UTF-8` → `cs`, `it-IT` and `it_CH.UTF-8` → `it`. Unsupported languages fall back to English. Set `CADCRAFT_LOCALE=cs-CZ` to override the desktop's locale for a launch. An explicit saved language choice takes precedence over that override. @@ -21,7 +21,7 @@ Automation can select the language through the existing control channel: ``` The `ui.set` method also accepts `{"interfaceLanguage":"cs"}`. Supported values are `auto`, -`en`, `uk`, `pt-BR`, `de`, `es`, and `cs`; invalid values are rejected without changing the current +`en`, `uk`, `pt-BR`, `de`, `es`, `cs`, `ru`, `fr`, `zh`, and `it`; invalid values are rejected without changing the current selection. Resetting palettes keeps the language choice. ## Translation coverage