From ade5469a2456ff4d1a71b9e07240cd2c50835346 Mon Sep 17 00:00:00 2001 From: pechnikov2026-star Date: Sun, 11 Oct 2026 21:22:47 -0300 Subject: [PATCH] i18n: add Russian, Spanish, French, Portuguese and German interfaces (#624) Squash of PR #624 by @pechnikov2026-star. Co-Authored-By: Claude Opus 5.5 --- ATTRIBUTION.md | 2 + README.md | 2 +- crates/ui-egui/src/i18n/fr.tsv | 998 ++++++++++++++++++++++++++++++ crates/ui-egui/src/i18n/mod.rs | 28 +- crates/ui-egui/src/i18n/ru.tsv | 998 ++++++++++++++++++++++++++++++ crates/ui-egui/src/i18n/tests.rs | 25 +- crates/ui-egui/src/options/mod.rs | 2 +- docs/control-protocol.md | 2 +- docs/localization-parity.md | 5 +- 9 files changed, 2052 insertions(+), 10 deletions(-) create mode 100644 crates/ui-egui/src/i18n/fr.tsv create mode 100644 crates/ui-egui/src/i18n/ru.tsv diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index f6fec9cc6..0ab99058f 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -61,3 +61,5 @@ Generated-in-code assets are original and have no file to list: | `crates/ui-egui/src/i18n/es.tsv` | @PedroGuille | Original Spanish translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | | `crates/ui-egui/src/i18n/pt_br.tsv` | @WladmirJunior | Original Brazilian Portuguese translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | | `crates/ui-egui/src/i18n/cs.tsv` | @Losminek (AI-assisted) | Original Czech translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | +| `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 | diff --git a/README.md b/README.md index 68252f337..00ab7add1 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) and Czech (Čeština), 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 (Русский) and French (Français), 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/crates/ui-egui/src/i18n/fr.tsv b/crates/ui-egui/src/i18n/fr.tsv new file mode 100644 index 000000000..1eb451782 --- /dev/null +++ b/crates/ui-egui/src/i18n/fr.tsv @@ -0,0 +1,998 @@ +# CADCraft French interface catalog — original translations by @pechnikov2026-star. +# 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 sourceFrench translation. +# Empty context = ordinary label; @plural = one|other forms with {n}. +# Command IDs, typed keywords, technology/product names and user data stay unchanged. + Cancel Annuler + OK OK + or [ ou [ + % of all commits % de toutes les révisions + * Wildcard Match * Correspondance générique + *VARIES* *DIVER* + + | Top | 2D Wireframe + | Dessus | Filaire 2D + +Bin +bin. + +LOC +lignes + 1 Viewport 1 fenêtre + 2 Points 2 points + 2 Viewports 2 fenêtres + 2D Solid Solide 2D + 3 Points 3 points + 3 Viewports 3 fenêtres + 3D Face Face 3D + 3D Operations Opérations 3D + 3D Polyline Polyligne 3D + 4 Viewports 4 fenêtres + < Less than < Inférieur à + <> Not Equal <> Différent de + = Equals = Égal à + > Greater than > Supérieur à + About À propos + About CADCraft À propos de CADCraft + Absolute Absolu + Add Leader Ajouter un repère + Align Aligner + Align Text Aligner le texte + Aligned Aligné + All Tous + All Used Layers Tous les calques utilisés + All files Tous les fichiers + Angle Angle + Angular Angulaire + Annotation Visibility Visibilité des annotations + Annotation scale Échelle des annotations + Apparent Intersection Intersection apparente + Append to current selection set Ajouter au jeu de sélection actuel + Apply to: Appliquer à : + Apply true color Appliquer la couleur RGB + Arc Arc + Arc Length Longueur d'arc + Area Aire + Arrange Panel Réorganiser le panneau + Array Réseau + Attach Joindre + Attribute Attribut + Attribute Definition Définition d'attribut + Attribute Display Affichage des attributs + Audit Vérifier + Auto (system language) Auto (langue du système) + Auto Constrain Contraintes automatiques + AutoConstrain ContraintesAuto + Axis, End Axe, extrémité + Base Base + Baseline Ligne de base + Batch Publish Publication par lots + Binary assets added Ressources binaires ajoutées + Binary assets removed Ressources binaires supprimées + Blend Raccord lissé + Block Bloc + Block Attribute Manager... Gestionnaire des attributs de bloc... + Block Editor Éditeur de blocs + Block Reference Référence de bloc + Block... Bloc... + Blocks Blocs + Blue Bleu + Bold Gras + Boolean Opérations booléennes + Boundary Frontière + Boundary... Frontière... + Box Pavé + Break Rupture + Break At Point Rupture en un point + Bring to Front Mettre au premier plan + ByBlock DuBloc + ByColor Par couleur + ByLayer DuCalque + CADCraft Help Aide de CADCraft + Cancel Annuler + Cartesian (x, y) Cartésien (x, y) + Center Centre + Center Line Ligne d'axe + Center Mark Marque de centre + Center X Centre X + Center Y Centre Y + Center Z Centre Z + Center, Diameter Centre, diamètre + Center, Radius Centre, rayon + Center, Start, Angle Centre, départ, angle + Center, Start, End Centre, départ, fin + Center, Start, Length Centre, départ, longueur + Chamfer Chanfrein + Change Space Changer d'espace + Change to Current Layer Déplacer vers le calque courant + Circle Cercle + Circumference Circonférence + Clear Effacer + Clipboard Presse-papiers + Close Fermer + Close All Tout fermer + Closed Fermé + Coincident Coïncidence + Collapse Tool Sets Réduire les jeux d'outils + Collinear Colinéarité + Color Couleur + Color 8 Couleur 8 + Color 9 Couleur 9 + Color Index Indice de couleur + Color... Couleur... + Command History Historique des commandes + Command Line Ligne de commande + Command Line History Lines Lignes d'historique de la ligne de commande + Command Reference Référence des commandes + Commits Révisions + Company Société + Computer-aided design and drafting: an open-source, clean-room CAD application written in pure Rust. Conception et dessin assistés par ordinateur : application de CAO open source, développée de manière indépendante en pur Rust. + Concentric Concentricité + Cone Cône + Constraint Bars Barres de contraintes + Constraint Settings Paramètres de contraintes + Construction Line Ligne de construction + Contents Sommaire + Continue Continuer + Contributors Contributeurs + Control Vertices Sommets de contrôle + Copy Copier + Copy Layout Copier la présentation + Copy Nested Objects Copier les objets imbriqués + Copy Selection Copier la sélection + Copy with Base Point Copier avec point de base + Count Nombre + Create Block Créer un bloc + Creates a user parameter Crée un paramètre utilisateur + Ctrl+Enter to finish Ctrl+Entrée pour terminer + Current layer Calque courant + Current selection Sélection actuelle + Current: {color} Actuel : {color} + Cut Couper + Cyan Cyan + Cylinder Cylindre + DWG DWG + DXF DXF + Dark Sombre + Default Par défaut + Default Save Format Format d'enregistrement par défaut + Define Attributes Définir les attributs + Define Attributes... Définir les attributs... + Defined width Largeur définie + Degree Degré + Delete Supprimer + Delete Column Supprimer la colonne + Delete Constraints Supprimer les contraintes + Delete Dimension Style Supprimer le style de cotation + Delete Duplicate Objects Supprimer les objets en double + Delete Layer Supprimer le calque + Delete Layer State Supprimer l'état des calques + Delete Layout Supprimer la présentation + Delete Row Supprimer la ligne + Delete Text Style Supprimer le style de texte + Delta X Écart X + Delta Y Écart Y + Description Description + Deselect All Désélectionner tout + Diameter Diamètre + Dim style Style de cotation + Dimension Cotation + Dimension Space Espace entre cotations + Dimension Style Override Substitution de style de cotation + Dimension Style... Style de cotation... + Dimension Text Edit Modifier le texte de cotation + Dimension style Style de cotation + Dimensional Constraint Contrainte dimensionnelle + Dimensional Constraint Parameters Paramètres de contraintes dimensionnelles + Dimensional Constraints Contraintes dimensionnelles + Disassociate Dimensions Dissocier les cotations + Display name Nom d'affichage + Distance Distance + Divide Diviser + Do not plot (click: plot) Ne pas tracer (cliquer pour tracer) + Donut Anneau + Double-click to edit the description Double-cliquez pour modifier la description + Down Bas + Drafting Dessin + Drafting Settings Paramètres de dessin + Drafting Settings... Paramètres de dessin... + Draw Dessin + Draw Order Ordre de dessin + Drawing (DWG) Dessin (DWG) + Drawing (DXF) Dessin (DXF) + Drawing Limits Limites du dessin + Drawing Utilities Utilitaires de dessin + Drawings (DWG, DXF) Dessins (DWG, DXF) + Dynamic Dimensions Cotations dynamiques + Dynamic Input Saisie dynamique + Dynamic Input (F12) Saisie dynamique (F12) + E Est + Edit Édition + Edit Text... Modifier le texte... + Elevation Élévation + Ellipse Ellipse + Elliptical Arc Arc elliptique + Enable Dynamic Input (F12) Activer la saisie dynamique (F12) + End Width Largeur finale + End X Extrémité X + End Y Extrémité Y + End angle Angle final + Endpoint Extrémité + Enter Top, Zero or Bottom. Entrez Top, Zero ou Bottom. + Enter a fit data option Entrez une option de données d'ajustage + Enter a pattern name Entrez un nom de motif + Enter a vertex editing option Entrez une option d'édition de sommet + Enter an option Entrez une option + Enter angle of xline Entrez l'angle de la ligne de construction + Enter angle of xline (0) or Entrez l'angle de la ligne de construction (0) ou + Enter area of rectangle in current units Entrez l'aire du rectangle dans les unités courantes + Enter attribute prompt Entrez l'invite de l'attribut + Enter attribute tag name Entrez le nom de l'étiquette d'attribut + Enter attribute value Entrez la valeur de l'attribut + Enter block name Entrez le nom du bloc + Enter constraint type Entrez le type de contrainte + Enter continuity Entrez la continuité + Enter default attribute value Entrez la valeur par défaut de l'attribut + Enter degree of spline Entrez le degré de la spline + Enter delta angle Entrez l'écart d'angle + Enter delta length or Entrez l'écart de longueur ou + Enter dimension text Entrez le texte de cotation + Enter dimension text (<> = measurement) Entrez le texte de cotation (<> = mesure) + Enter dimension value or [name=expression] Entrez la valeur de cotation ou [name=expression] + Enter dimension variable name to override Entrez le nom de la variable de cotation à substituer + Enter justification type Entrez le type de justification + Enter leader text Entrez le texte du repère + Enter mline scale Entrez l'échelle de la multiligne + Enter mode Entrez le mode + Enter name of block to insert Entrez le nom du bloc à insérer + Enter new text Entrez le nouveau texte + Enter next point Entrez le point suivant + Enter number of columns Entrez le nombre de colonnes + Enter number of data rows Entrez le nombre de lignes de données + Enter number of items Entrez le nombre d'éléments + Enter number of items along path Entrez le nombre d'éléments le long du tracé + Enter number of sides Entrez le nombre de côtés + Enter number of turns Entrez le nombre de tours + Enter percentage length Entrez la longueur en pourcentage + Enter rectangle length Entrez la longueur du rectangle + Enter rectangle width Entrez la largeur du rectangle + Enter scale factor Entrez le facteur d'échelle + Enter text Entrer le texte + Enter text (use \P for new paragraphs) Entrer le texte (utilisez \P pour les nouveaux paragraphes) + Enter the number of segments Entrer le nombre de segments + Enter twist direction of helix Entrer le sens de vrillage de l'hélice + Entire drawing Tout le dessin + Equal Égalité + Erase Effacer + Exclude from new selection set Exclure du nouveau jeu de sélection + Explode Décomposer + Export Exporter + Export to PDF... Exporter en PDF... + Expression Expression + Extend Prolonger + Extension Prolongement + Extents Étendue + Extrude Extruder + File Fichier + File Tab Onglet Fichier + Fillet Congé + Filter Filtre + Filters Filtres + Find and Replace Rechercher et remplacer + Find... Rechercher... + First Premier + First commit Première révision + Fit Points Points d'ajustement + Fix Fixation + Flatten Objects Aplatir les objets + Format Format + Freehand À main levée + Freeze Geler + Freeze Layer Geler le calque + Freeze in new viewports Geler dans les nouvelles fenêtres + Freeze/Thaw Geler/Dégeler + Freeze/Thaw in all viewports Geler/Dégeler dans toutes les fenêtres + Freeze/Thaw in the current viewport Geler/Dégeler dans la fenêtre courante + From À partir de + General Général + Geometric Center Centre géométrique + Geometric Constraint Contrainte géométrique + Geometric Constraints Contraintes géométriques + Geometry Géométrie + Get Variable Obtenir la variable + Get View Obtenir la vue + Global Global + Global width Largeur globale + Grab bag Liste + Gradient Dégradé + Gradient... Dégradé... + Green Vert + Grid (F7) Grille (F7) + Grid Display Affichage de la grille + Grid On (F7) Activer la grille (F7) + Grid spacing Espacement de la grille + Grip Mirror Miroir par poignées + Grip Rotate Rotation par poignées + Grip Scale Échelle par poignées + Grip Stretch Étirement par poignées + Group Grouper + Group Edit Modifier le groupe + Hatch Hachures + Hatch Edit Modifier les hachures + Hatch... Hachures... + Height Hauteur + Height: {height} Hauteur : {height} + Helix Hélice + Help Aide + Hide All Tout masquer + Hide All Constraint Bars Masquer toutes les barres de contraintes + Hide All Dynamic Dimensions Masquer toutes les cotes dynamiques + Hide Layer List Masquer la liste des calques + Hide Palettes Masquer les palettes + Home Vue d'accueil + Horizontal Horizontal + HorizontalDistance DistanceHorizontale + How to apply: Mode d'application : + ID Point ID du point + Import Importer + In Zoom avant + In-window Menu Bar Barre de menus dans la fenêtre + Include in new selection set Inclure dans le nouveau jeu de sélection + Increment angle Incrément d'angle + Index Color Couleur indexée + Index color: {index} Couleur indexée : {index} + Inquiry Interroger + Insert Insertion + Insert Block Insérer un bloc + Insert Column Insérer une colonne + Insert Row Insérer une ligne + Insert this block Insérer ce bloc + Insertion Point d'insertion + Insertion X Insertion X + Insertion Y Insertion Y + Insertion Z Insertion Z + Inspect Constraints Inspecter les contraintes + Inspect Drawing Inspecter le dessin + Interface Language Langue de l'interface + Interface Theme Thème de l'interface + Intersect Intersection + Intersection Intersection + Isolate Isoler + Isolate Layer Isoler le calque + Isometric Drafting Dessin isométrique + Join Rejoindre + Join the ArtCraft Discord… Rejoindre le Discord d'ArtCraft… + Join us on Discord Rejoignez-nous sur Discord + Language Langue + Last Dernier + Last commit Dernière révision + Layer Calque + Layer Delete Supprimer le calque + Layer Match Faire correspondre le calque + Layer Merge Fusionner les calques + Layer Off Désactiver le calque + Layer Properties Propriétés du calque + Layer Properties Manager Gestionnaire des propriétés des calques + Layer Properties Manager — current viewport Gestionnaire des propriétés des calques — fenêtre courante + Layer State État des calques + Layer States Manager... Gestionnaire des états de calques... + Layer Tools Outils de calque + Layer contains objects (double-click to make current) Le calque contient des objets (double-cliquez pour le rendre courant) + Layer is empty (double-click to make current) Le calque est vide (double-cliquez pour le rendre courant) + Layers Calques + Layers Palette Palette des calques + Layers displayed: {shown} of {total}. Current layer: {layer} Calques affichés : {shown} sur {total}. Calque courant : {layer} + Layout Présentation + Layout list Liste des présentations + Leader Repère + Left Gauche + Length Longueur + Length X Longueur X + Length Y Longueur Y + Lengthen Modifier la longueur + Light Clair + Line Ligne + Line delta Variation de lignes + Linear Linéaire + Lines +/− Lignes +/− + Lines added Lignes ajoutées + Lines deleted Lignes supprimées + Linetype Type de ligne + Linetype Scale Échelle du type de ligne + Linetype scale Échelle du type de ligne + Ltscale Échelle du type de ligne + Linetype... Type de ligne... + Lineweight Épaisseur de ligne + Lineweight... Épaisseur de ligne... + List Liste + List Blocks Liste des blocs + List Dimension Styles Liste des styles de cote + List Groups Liste des groupes + List Layer States Liste des états de calques + List Layouts Liste des présentations + List System Variables Liste des variables système + List Text Styles Liste des styles de texte + Load all Tout charger + Load... Charger... + Loaded linetypes Types de ligne chargés + Lock Verrouiller + Lock Layer Verrouiller le calque + Lock/Unlock Verrouiller/Déverrouiller + Loft Loft + MIT OR Apache-2.0. Not affiliated with Autodesk, Inc. MIT OR Apache-2.0. Non affilié à Autodesk, Inc. + MODEL MODÈLE + MText Texte multiligne + Magenta Magenta + Major line every Ligne principale tous les + Make Current Rendre courant + Make Object's Layer Current Rendre le calque de l'objet courant + Make... Créer... + Match Layer Faire correspondre le calque + Match Properties Copier les propriétés + Measure Mesurer + Measure Distance Mesurer la distance + Measure Geometry Mesurer la géométrie + Merge Cells Fusionner les cellules + Merged PRs PR fusionnés + Mid Between 2 Points Milieu entre 2 points + Midpoint Milieu + Mirror Miroir + Model Modèle + Model Space (in viewport) Espace objet (dans la fenêtre) + Modeling Modélisation + Models Modèles + Modify Modifier + Move Déplacer + Multileader Repère multiple + Multileader Style... Style de repère multiple... + Multileader style Style de repère multiple + Multiline Multiligne + Multiline Text Texte multiligne + Multiline Text... Texte multiligne... + Multiple Multiple + Multiple Point Points multiples + My Mes + My properties: not available yet Mes propriétés : pas encore disponibles + N N + Name Nom + Name (A–Z) Nom (A–Z) + Nearest Plus proche + New Nouveau + New (metric) Nouveau (métrique) + New Drawing Nouveau dessin + New Drawing (⌘N) Nouveau dessin (⌘N) + New Drawing... Nouveau dessin... + New Layer Nouveau calque + New Layout Nouvelle présentation + New VP Freeze Geler nouvelles fenêtres + New Viewports... Nouvelles fenêtres... + New layout Nouvelle présentation + New state name Nom du nouvel état + No Non + No blocks defined in this drawing. Aucun bloc défini dans ce dessin. + No contributor data was built into this copy. Cette version ne contient pas de données sur les contributeurs. + No model credits were built into this copy. Cette version ne contient pas de crédits de modèles. + No saved layer states Aucun état de calque enregistré + No selection Aucune sélection + Node Nœud + None Aucun + Not available Non disponible + Not available yet Pas encore disponible + OK OK + Object Objet + Object Snap Accrochage aux objets + Object Snap (F3) Accrochage aux objets (F3) + Object Snap On (F3) Activer l'accrochage aux objets (F3) + Object Snap Tracking Suivi de l'accrochage aux objets + Object Snap Tracking (F11) Suivi de l'accrochage aux objets (F11) + Object type: Type d'objet : + Off Désactivé + Offset Décalage + On Activé + On/Off Activer/Désactiver + One of the Crafting Apps by the ArtCraft team and community. L'une des applications Crafting Apps de l'équipe et de la communauté ArtCraft. + Open (⌘O) Ouvrir (⌘O) + Open Sample Drawing Ouvrir un dessin d'exemple + Open sample drawing Ouvrir un dessin d'exemple + Open... Ouvrir... + Operator: Opérateur : + Orbit Orbite + Ordinate Ordonnée + Ortho (F8) Ortho (F8) + Ortho Mode Mode Ortho + Ortho Mode (F8) Mode Ortho (F8) + Osnap Settings... Paramètres d'accrochage aux objets... + Out Zoom arrière + Override Outrepasser + PAPER PAPIER + Percent Pourcentage + Polar (distance < angle) Polaire (distance < angle) + PRs PR + Page Setup Manager Gestionnaire des mises en page + Page Setup Manager... Gestionnaire des mises en page... + Pan Panoramique + Pan Down Panoramique vers le bas + Pan Left Panoramique vers la gauche + Pan Right Panoramique vers la droite + Pan Up Panoramique vers le haut + Paper Space Espace papier + Parallel Parallèle + Parameters Manager Gestionnaire des paramètres + Parametric Paramétrique + Paste Coller + Paste as Block Coller en tant que bloc + Paste to Original Coordinates Coller aux coordonnées d'origine + Path Array Réseau sur trajectoire + Pattern Motif + Perpendicular Perpendiculaire + Plot Tracer + Plot (click: do not plot) Tracer (cliquer : ne pas tracer) + Plot Preview Aperçu du tracé + Plot style Style de tracé + Plot style attached to Style de tracé associé à + Plot style table Table de styles de tracé + Plot Style... Style de tracé... + Plot Style Manager Gestionnaire des styles de tracé + Plot Style Manager... Gestionnaire des styles de tracé... + Plot Styles... Styles de tracé... + New CTB Nouvelle CTB + New STB Nouvelle STB + New style Nouveau style + Reset Panel Layout Réinitialiser la disposition des panneaux + Use for this layout Utiliser pour cet espace + Display plot styles Afficher les styles de tracé + No plot style tables. Aucune table de styles de tracé. + A built-in table: editing it keeps an edited copy in the drawing. Table intégrée : sa modification conserve une copie modifiée dans le dessin. + Keep an editable copy of this table in the drawing Conserver une copie modifiable de cette table dans le dessin + Layout {name}: {table} Espace {name} : {table} + Grayscale Niveaux de gris + Screening Trame + Use object linetype Utiliser le type de ligne de l'objet + Use object lineweight Utiliser l'épaisseur de ligne de l'objet + Remove Supprimer + Add Ajouter + Open a drawing first. Ouvrez d'abord un dessin. + Plot table type Type de table de tracé + Color-dependent Dépendante des couleurs + Named Nommée + Plus/minus Plus/moins + Point Point + Point Filters Filtres de points + Point Style... Style de point... + Polar Array Réseau polaire + Polar Tracking Recherche polaire + Polar Tracking (F10) Recherche polaire (F10) + Polar Tracking On (F10) Activer la recherche polaire (F10) + Polar: {distance} < {angle}° Polaire : {distance} < {angle}° + Polygon Polygone + Polygonal Polygonal + Polyline Polyligne + Position X Position X + Position Y Position Y + Position Z Position Z + Previous Précédent + Previous Layer Calque précédent + Primitives Primitives + Print Imprimer + Print... Imprimer... + Properties Propriétés + Properties Inspector Inspecteur de propriétés + Properties: Propriétés : + Proxy Objet proxy + Purge Purger + Pyramid Pyramide + Quadrant Quadrant + Query Entities Interroger les entités + Quick Rapide + Quick Dimension Cotation rapide + Quick Properties Propriétés rapides + Quick Select Sélection rapide + Quick Select Properties Propriétés de la sélection rapide + Quick Select... Sélection rapide... + QuickCalc Calculatrice rapide + Quit CADCraft Quitter CADCraft + Radius Rayon + Raster Image Image raster + Ray Rayon + Read-only Lecture seule + Real name Nom réel + Realtime Temps réel + Reassociate Dimensions Réassocier les cotes + Recent Récents + Recover... Récupérer... + Rectangle Rectangle + Rectangular Rectangulaire + Rectangular Array Réseau rectangulaire + Red Rouge + Redo Rétablir + Redo (⇧⌘Z) Rétablir (⇧⌘Z) + Redraw Redessiner + Regen Régénérer + Regen All Régénérer tout + Region Région + Region/Mass Properties Propriétés de région/masse + Relative Relatif + Remove Leader Supprimer la ligne de repère + Remove the viewport override Supprimer le remplacement de la fenêtre + Rename Dimension Style Renommer le style de cote + Rename Layer Renommer le calque + Rename Layer State Renommer l'état des calques + Rename Layout Renommer l'espace + Rename Text Style Renommer le style de texte + Rename... Renommer... + Repeat {command} Répéter {command} + Requires a point (x,y, @dx,dy or @d Spécifiez le deuxième point ou + Specify second source point Spécifiez le deuxième point source + Specify side to offset Spécifiez le côté à décaler + Specify start angle Spécifiez l'angle de départ + Specify start point Spécifiez le point de départ + Specify start point of arc Spécifiez le point de départ de l'arc + Specify start point of polyline Spécifiez le point de départ de la polyligne + Specify start point of text Spécifiez le point de départ du texte + Specify starting width Spécifiez la largeur de départ + Specify starting width for next segment Spécifiez la largeur de départ du segment suivant + Specify tangent direction for the start point of arc Spécifiez la direction de la tangente au point de départ de l'arc + Specify the elevation for rectangles Spécifiez l'élévation des rectangles + Specify thickness for rectangles Spécifiez l'épaisseur des rectangles + Specify third point on circle Spécifiez le troisième point sur le cercle + Specify third point on circle: _tan to Spécifiez le troisième point sur le cercle : _tan à + Specify third source point or Spécifiez le troisième point source ou + Specify through point Spécifiez le point de passage + Specify top diameter Spécifiez le diamètre supérieur + Specify top radius or Spécifiez le rayon supérieur ou + Specify total angle Spécifiez l'angle total + Specify total length or Spécifiez la longueur totale ou + Specify width for rectangles Spécifiez la largeur des rectangles + Sphere Sphère + Spline Spline + Stack (type 1/2 then select) Empilement (tapez 1/2, puis sélectionnez) + Standard Standard + Start Départ + Start Width Largeur de départ + Start X X de départ + Start Y Y de départ + Start angle Angle de départ + Start, Center, Angle Départ, Centre, Angle + Start, Center, End Départ, Centre, Fin + Start, Center, Length Départ, Centre, Longueur + Start, End, Angle Départ, Fin, Angle + Start, End, Direction Départ, Fin, Direction + Start, End, Radius Départ, Fin, Rayon + Status État + Status Bar Barre d'état + Stretch Étirer + Style: Standard Style : Standard + Subtract Soustraction + Sweep Balayage + Switch Drawing Changer de dessin + Switch Layout Changer de présentation + Switch between model space in a viewport and paper space Basculer entre l'espace modèle dans une fenêtre et l'espace papier + Symmetric Symétrie + Synchronize Attributes Synchroniser les attributs + Toggle PICKADD (off: each pick replaces the selection) Basculer PICKADD (désactivé : chaque sélection remplace la sélection existante) + Toggle PICKADD (on: picks add to the selection) Basculer PICKADD (activé : les sélections s'ajoutent à la sélection existante) + TOP HAUT + Table Tableau + Table Style... Style de tableau... + Table style Style de tableau + Table... Tableau... + Tan, Tan, Radius Tangente, Tangente, Rayon + Tan, Tan, Tan Tangente, Tangente, Tangente + Tangent Tangente + Text Texte + Text Editor Éditeur de texte + Text Height Hauteur du texte + Text Style... Style de texte... + Text height Hauteur du texte + Text override Texte de remplacement + Text style Style de texte + Thaw All Layers Dégeler tous les calques + There is nothing here yet. Il n'y a encore rien ici. + Thickness Épaisseur + Time Heure + To get started, create or open a drawing. Pour commencer, créez ou ouvrez un dessin. + Tool Bar Barre d'outils + Tool Sets Ensembles d'outils + Tools Outils + Torus Tore + Trace Trace + Transparency Transparence + Trim Ajuster + True Color Couleur vraie + Turn All Layers On Activer tous les calques + Turn Off Layer Désactiver le calque + Turn Quick Properties off (QPMODE) Désactiver les propriétés rapides (QPMODE) + Type Type + Type a command Tapez une commande + Type text; Enter starts a new paragraph Saisissez le texte ; Entrée crée un nouveau paragraphe + UCS Icon Icône du SCU + Undo Annuler + Undo (⌘Z) Annuler (⌘Z) + Ungroup Dissocier + Union Union + Unisolate Layer Annuler l'isolement des calques + Units... Unités... + Unlock Layer Déverrouiller le calque + Unmerge Cells Annuler la fusion des cellules + Unsaved Layer State État de calque non enregistré + Up Haut + Update Mettre à jour + Use System Setting Utiliser le paramètre système + User Utilisateur + User Parameters Paramètres utilisateur + Username Nom d'utilisateur + VP Color Couleur de la fenêtre + VP Freeze Gel dans la fenêtre + Value Valeur + Value: Valeur : + Version Version + Version {version} Version {version} + Vertical Vertical + VerticalDistance VerticalDistance + View Vue + ViewCube ViewCube + Viewport Fenêtre + Viewport Layer Freeze Gel du calque dans la fenêtre + Viewport Properties Propriétés de la fenêtre + Viewport {id} Fenêtre {id} + Viewports Fenêtres + W O + WCS ⌄ SCG ⌄ + White Blanc + Width factor Facteur de largeur + Window Fenêtre + Wipeout Masquage + Workspace Switching Changement d'espace de travail + Write Block Enregistrer le bloc dans un fichier + Xline Ligne de construction + Yellow Jaune + Yes Oui + Zoom Zoom + Zoom All Zoom tout + Zoom Extents Zoom étendu + Zoom In Zoom avant + Zoom Object Zoom objet + Zoom Out Zoom arrière + Zoom Previous Zoom précédent + Zoom Window Zoom fenêtre + error erreur + {contributors} · {commits} {contributors} · {commits} + {kind} (constraint {id}) {kind} (contrainte {id}) + {kind} constraint {name} = {expression} (double-click to edit) Contrainte {kind} {name} = {expression} (double-cliquez pour modifier) + {name}: {distance} < {angle}° {name} : {distance} < {angle}° + ƒx New User Parameter ƒx Nouveau paramètre utilisateur + ΔLOC ΔLOC + −Bin −Bin + −LOC −LOC + ⌘↩ to finish ⌘↩ pour terminer +@plural {n} commit {n} révision|{n} révisions +@plural {n} contributor {n} contributeur|{n} contributeurs + Drawing as bytes Dessin sous forme d'octets + Services Services + Hide CADCraft Masquer CADCraft + Hide Others Masquer les autres + Accessibility Accessibilité + Show System Cursor Afficher le curseur système + Import... Importer... + Export... Exporter... + Batch Publish... Publication par lots... diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index 9253deb10..9f8da8fd5 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -25,10 +25,24 @@ pub enum Preference { Spanish, #[serde(rename = "cs")] Czech, + #[serde(rename = "ru")] + Russian, + #[serde(rename = "fr")] + French, } impl Preference { - pub const ALL: [Self; 7] = [Self::Auto, Self::English, Self::Ukrainian, Self::BrazilianPortuguese, Self::German, Self::Spanish, Self::Czech]; + pub const ALL: [Self; 9] = [ + Self::Auto, + Self::English, + Self::Ukrainian, + Self::BrazilianPortuguese, + Self::German, + Self::Spanish, + Self::Czech, + Self::Russian, + Self::French, + ]; /// The codes a preference can be given as, for messages ("auto, en or uk"). pub fn codes() -> String { @@ -48,6 +62,8 @@ impl Preference { Self::German => "de", Self::Spanish => "es", Self::Czech => "cs", + Self::Russian => "ru", + Self::French => "fr", } } @@ -60,6 +76,8 @@ impl Preference { Self::German => "Deutsch", Self::Spanish => "Español", Self::Czech => "Čeština", + Self::Russian => "Русский", + Self::French => "Français", } } @@ -80,6 +98,8 @@ impl Preference { Self::German => "de", Self::Spanish => "es", Self::Czech => "cs", + Self::Russian => "ru", + Self::French => "fr", Self::Auto => locales.iter().find_map(|s| locale_language(s)).unwrap_or("en"), } } @@ -96,7 +116,7 @@ pub struct Language { catalog: OnceLock>, } -pub static LANGUAGES: [Language; 6] = [ +pub static LANGUAGES: [Language; 8] = [ 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() @@ -114,6 +134,10 @@ pub static LANGUAGES: [Language; 6] = [ // Spanish integer plurals follow the English rule too. Language { code: "es", name: "Español", source: include_str!("es.tsv"), plural: plural_en, plural_forms: 2, catalog: OnceLock::new() }, Language { code: "cs", name: "Čeština", source: include_str!("cs.tsv"), plural: plural_cs, plural_forms: 3, catalog: OnceLock::new() }, + // Russian integer plurals follow the Ukrainian rule: one (1, 21), few (2–4), many. + Language { code: "ru", name: "Русский", source: include_str!("ru.tsv"), plural: plural_uk, plural_forms: 3, catalog: OnceLock::new() }, + // French integer plurals (CLDR `fr`): one (0, 1), other, the Portuguese rule. + Language { code: "fr", name: "Français", source: include_str!("fr.tsv"), plural: plural_pt, 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/ru.tsv b/crates/ui-egui/src/i18n/ru.tsv new file mode 100644 index 000000000..463651028 --- /dev/null +++ b/crates/ui-egui/src/i18n/ru.tsv @@ -0,0 +1,998 @@ +# CADCraft Russian interface catalog — original translations by @pechnikov2026-star. +# 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 sourceRussian translation. +# Empty context = ordinary label; @plural = one|few|many forms with {n}. +# Command IDs, typed keywords, technology/product names and user data stay unchanged. + Cancel Отмена + OK ОК + or [ или [ + % of all commits % всех коммитов + * Wildcard Match * По шаблону + *VARIES* *РАЗНЫЕ* + + | Top | 2D Wireframe + | Сверху | 2D-каркас + +Bin +двоич. + +LOC +строк + 1 Viewport 1 видовой экран + 2 Points 2 точки + 2 Viewports 2 видовых экрана + 2D Solid 2D-заливка + 3 Points 3 точки + 3 Viewports 3 видовых экрана + 3D Face 3D-грань + 3D Operations 3D-операции + 3D Polyline 3D-полилиния + 4 Viewports 4 видовых экрана + < Less than < Меньше чем + <> Not Equal <> Не равно + = Equals = Равно + > Greater than > Больше чем + About О программе + About CADCraft О CADCraft + Absolute Абсолютные + Add Leader Добавить выноску + Align Выровнять + Align Text Выровнять текст + Aligned Параллельный + All Все + All Used Layers Все используемые слои + All files Все файлы + Angle Угол + Angular Угловой + Annotation Visibility Видимость аннотаций + Annotation scale Масштаб аннотаций + Apparent Intersection Мнимое пересечение + Append to current selection set Добавить к текущему набору выделения + Apply to: Применить к: + Apply true color Применить цвет RGB + Arc Дуга + Arc Length Длина дуги + Area Площадь + Arrange Panel Расположить панель + Array Массив + Attach Присоединить + Attribute Атрибут + Attribute Definition Определение атрибута + Attribute Display Отображение атрибутов + Audit Проверка чертежа + Auto (system language) Авто (язык системы) + Auto Constrain Автоограничение + AutoConstrain Автоограничение + Axis, End Ось, конец + Base База + Baseline Базовый + Batch Publish Пакетная публикация + Binary assets added Добавленные двоичные ресурсы + Binary assets removed Удаленные двоичные ресурсы + Blend Сгладить + Block Блок + Block Attribute Manager... Диспетчер атрибутов блоков... + Block Editor Редактор блоков + Block Reference Вхождение блока + Block... Блок... + Blocks Блоки + Blue Синий + Bold Жирный + Boolean Булевы операции + Boundary Граница + Boundary... Граница... + Box Параллелепипед + Break Разорвать + Break At Point Разорвать в точке + Bring to Front На передний план + ByBlock Поблоку + ByColor ПоЦвету + ByLayer Послою + CADCraft Help Справка CADCraft + Cancel Отмена + Cartesian (x, y) Декартовы (x, y) + Center Центр + Center Line Осевая линия + Center Mark Знак центра + Center X Центр X + Center Y Центр Y + Center Z Центр Z + Center, Diameter Центр, диаметр + Center, Radius Центр, радиус + Center, Start, Angle Центр, начало, угол + Center, Start, End Центр, начало, конец + Center, Start, Length Центр, начало, длина + Chamfer Фаска + Change Space Изменить пространство + Change to Current Layer Перенести на текущий слой + Circle Круг + Circumference Длина окружности + Clear Очистить + Clipboard Буфер обмена + Close Закрыть + Close All Закрыть все + Closed Замкнутый + Coincident Совпадение + Collapse Tool Sets Свернуть наборы инструментов + Collinear Коллинеарность + Color Цвет + Color 8 Цвет 8 + Color 9 Цвет 9 + Color Index Индекс цвета + Color... Цвет... + Command History Журнал команд + Command Line Командная строка + Command Line History Lines Строки журнала командной строки + Command Reference Справочник команд + Commits Коммиты + Company Организация + Computer-aided design and drafting: an open-source, clean-room CAD application written in pure Rust. Автоматизированное проектирование и черчение: CAD-приложение с открытым кодом, независимо разработанное на Rust. + Concentric Концентричность + Cone Конус + Constraint Bars Панели ограничений + Constraint Settings Параметры ограничений + Construction Line Вспомогательная прямая + Contents Содержание + Continue Продолжить + Contributors Участники + Control Vertices Управляющие вершины + Copy Копировать + Copy Layout Копировать лист + Copy Nested Objects Копировать вложенные объекты + Copy Selection Копировать выделение + Copy with Base Point Копировать с базовой точкой + Count Количество + Create Block Создать блок + Creates a user parameter Создает пользовательский параметр + Ctrl+Enter to finish Ctrl+Enter для завершения + Current layer Текущий слой + Current selection Текущее выделение + Current: {color} Текущий: {color} + Cut Вырезать + Cyan Голубой + Cylinder Цилиндр + DWG DWG + DXF DXF + Dark Темная + Default По умолчанию + Default Save Format Формат сохранения по умолчанию + Define Attributes Определить атрибуты + Define Attributes... Определить атрибуты... + Defined width Заданная ширина + Degree Градус + Delete Удалить + Delete Column Удалить столбец + Delete Constraints Удалить ограничения + Delete Dimension Style Удалить размерный стиль + Delete Duplicate Objects Удалить дубликаты объектов + Delete Layer Удалить слой + Delete Layer State Удалить состояние слоев + Delete Layout Удалить лист + Delete Row Удалить строку + Delete Text Style Удалить текстовый стиль + Delta X Смещение X + Delta Y Смещение Y + Description Описание + Deselect All Снять выделение со всего + Diameter Диаметр + Dim style Размерный стиль + Dimension Размеры + Dimension Space Расстояние между размерами + Dimension Style Override Переопределение размерного стиля + Dimension Style... Размерный стиль... + Dimension Text Edit Редактировать размерный текст + Dimension style Размерный стиль + Dimensional Constraint Размерное ограничение + Dimensional Constraint Parameters Параметры размерных ограничений + Dimensional Constraints Размерные ограничения + Disassociate Dimensions Разъединить размеры + Display name Отображаемое имя + Distance Расстояние + Divide Поделить + Do not plot (click: plot) Не выводить на печать (щелкните для печати) + Donut Кольцо + Double-click to edit the description Дважды щелкните, чтобы изменить описание + Down Вниз + Drafting Черчение + Drafting Settings Режимы черчения + Drafting Settings... Режимы черчения... + Draw Рисование + Draw Order Порядок отрисовки + Drawing (DWG) Чертеж (DWG) + Drawing (DXF) Чертеж (DXF) + Drawing Limits Лимиты чертежа + Drawing Utilities Утилиты чертежа + Drawings (DWG, DXF) Чертежи (DWG, DXF) + Dynamic Dimensions Динамические размеры + Dynamic Input Динамический ввод + Dynamic Input (F12) Динамический ввод (F12) + E В + Edit Редактирование + Edit Text... Редактировать текст... + Elevation Уровень + Ellipse Эллипс + Elliptical Arc Эллиптическая дуга + Enable Dynamic Input (F12) Включить динамический ввод (F12) + End Width Конечная ширина + End X Конец X + End Y Конец Y + End angle Конечный угол + Endpoint Конечная точка + Enter Top, Zero or Bottom. Введите Top, Zero или Bottom. + Enter a fit data option Введите параметр аппроксимации + Enter a pattern name Введите имя шаблона + Enter a vertex editing option Введите параметр редактирования вершины + Enter an option Введите параметр + Enter angle of xline Введите угол вспомогательной прямой + Enter angle of xline (0) or Введите угол вспомогательной прямой (0) или + Enter area of rectangle in current units Введите площадь прямоугольника в текущих единицах + Enter attribute prompt Введите подсказку атрибута + Enter attribute tag name Введите имя тега атрибута + Enter attribute value Введите значение атрибута + Enter block name Введите имя блока + Enter constraint type Введите тип ограничения + Enter continuity Введите тип непрерывности + Enter default attribute value Введите значение атрибута по умолчанию + Enter degree of spline Введите степень сплайна + Enter delta angle Введите изменение угла + Enter delta length or Введите изменение длины или + Enter dimension text Введите размерный текст + Enter dimension text (<> = measurement) Введите размерный текст (<> = измеренное значение) + Enter dimension value or [name=expression] Введите размерное значение или [имя=выражение] + Enter dimension variable name to override Введите имя размерной переменной для переопределения + Enter justification type Введите тип выравнивания + Enter leader text Введите текст выноски + Enter mline scale Введите масштаб мультилинии + Enter mode Введите режим + Enter name of block to insert Введите имя блока для вставки + Enter new text Введите новый текст + Enter next point Введите следующую точку + Enter number of columns Введите количество столбцов + Enter number of data rows Введите количество строк данных + Enter number of items Введите количество элементов + Enter number of items along path Введите количество элементов вдоль траектории + Enter number of sides Введите количество сторон + Enter number of turns Введите количество витков + Enter percentage length Введите длину в процентах + Enter rectangle length Введите длину прямоугольника + Enter rectangle width Введите ширину прямоугольника + Enter scale factor Введите масштабный коэффициент + Enter text Введите текст + Enter text (use \P for new paragraphs) Введите текст (\P начинает новый абзац) + Enter the number of segments Введите количество сегментов + Enter twist direction of helix Введите направление закручивания спирали + Entire drawing Весь чертеж + Equal Равенство + Erase Стереть + Exclude from new selection set Исключить из нового набора выделения + Explode Расчленить + Export Экспортировать + Export to PDF... Экспортировать в PDF... + Expression Выражение + Extend Удлинить + Extension Продолжение + Extents Границы + Extrude Выдавить + File Файл + File Tab Вкладка файла + Fillet Сопряжение + Filter Фильтр + Filters Фильтры + Find and Replace Найти и заменить + Find... Найти... + First Первый + First commit Первый коммит + Fit Points Точки сглаживания + Fix Фиксация + Flatten Objects Спроецировать объекты на плоскость + Format Формат + Freehand От руки + Freeze Заморозить + Freeze Layer Заморозить слой + Freeze in new viewports Заморозить в новых видовых экранах + Freeze/Thaw Заморозить/разморозить + Freeze/Thaw in all viewports Заморозить/разморозить во всех видовых экранах + Freeze/Thaw in the current viewport Заморозить/разморозить в текущем видовом экране + From От точки + General Общие + Geometric Center Геометрический центр + Geometric Constraint Геометрическое ограничение + Geometric Constraints Геометрические ограничения + Geometry Геометрия + Get Variable Получить переменную + Get View Получить вид + Global Глобально + Global width Общая ширина + Grab bag Список + Gradient Градиент + Gradient... Градиент... + Green Зеленый + Grid (F7) Сетка (F7) + Grid Display Отображение сетки + Grid On (F7) Включить сетку (F7) + Grid spacing Шаг сетки + Grip Mirror Зеркальное отражение ручками + Grip Rotate Поворот ручками + Grip Scale Масштабирование ручками + Grip Stretch Растягивание ручками + Group Сгруппировать + Group Edit Редактировать группу + Hatch Штриховка + Hatch Edit Редактировать штриховку + Hatch... Штриховка... + Height Высота + Height: {height} Высота: {height} + Helix Спираль + Help Справка + Hide All Скрыть все + Hide All Constraint Bars Скрыть все панели ограничений + Hide All Dynamic Dimensions Скрыть все динамические размеры + Hide Layer List Скрыть список слоев + Hide Palettes Скрыть палитры + Home Исходный вид + Horizontal Горизонтальность + HorizontalDistance ГоризонтальноеРасстояние + How to apply: Способ применения: + ID Point Координаты точки + Import Импортировать + In Приблизить + In-window Menu Bar Строка меню в окне + Include in new selection set Включить в новый набор выделения + Increment angle Шаг угла + Index Color Индексированный цвет + Index color: {index} Индексированный цвет: {index} + Inquiry Измерение + Insert Вставка + Insert Block Вставить блок + Insert Column Вставить столбец + Insert Row Вставить строку + Insert this block Вставить этот блок + Insertion Точка вставки + Insertion X Точка вставки X + Insertion Y Точка вставки Y + Insertion Z Точка вставки Z + Inspect Constraints Просмотреть ограничения + Inspect Drawing Просмотреть чертеж + Interface Language Язык интерфейса + Interface Theme Тема интерфейса + Intersect Пересечение + Intersection Пересечение + Isolate Изолировать + Isolate Layer Изолировать слой + Isometric Drafting Изометрическое черчение + Join Объединить + Join the ArtCraft Discord… Присоединяйтесь к Discord ArtCraft… + Join us on Discord Присоединяйтесь к нам в Discord + Language Язык + Last Последний + Last commit Последний коммит + Layer Слой + Layer Delete Удалить слой с объектами + Layer Match Согласовать слой + Layer Merge Объединить слои + Layer Off Выключить слой + Layer Properties Свойства слоя + Layer Properties Manager Диспетчер свойств слоев + Layer Properties Manager — current viewport Диспетчер свойств слоев — текущий видовой экран + Layer State Состояние слоев + Layer States Manager... Диспетчер состояний слоев... + Layer Tools Инструменты слоев + Layer contains objects (double-click to make current) Слой содержит объекты (дважды щелкните, чтобы сделать текущим) + Layer is empty (double-click to make current) Слой пуст (дважды щелкните, чтобы сделать текущим) + Layers Слои + Layers Palette Палитра слоев + Layers displayed: {shown} of {total}. Current layer: {layer} Показано слоев: {shown} из {total}. Текущий слой: {layer} + Layout Лист + Layout list Список листов + Leader Выноска + Left Слева + Length Длина + Length X Длина X + Length Y Длина Y + Lengthen Изменить длину + Light Светлая + Line Отрезок + Line delta Изменение количества строк + Linear Линейный + Lines +/− Строки +/− + Lines added Добавленные строки + Lines deleted Удаленные строки + Linetype Тип линии + Linetype Scale Масштаб типа линии + Linetype scale Масштаб типа линии + Ltscale Масштаб типа линии + Linetype... Тип линии... + Lineweight Вес линии + Lineweight... Вес линии... + List Список + List Blocks Список блоков + List Dimension Styles Список размерных стилей + List Groups Список групп + List Layer States Список состояний слоев + List Layouts Список листов + List System Variables Список системных переменных + List Text Styles Список текстовых стилей + Load all Загрузить все + Load... Загрузить... + Loaded linetypes Загруженные типы линий + Lock Заблокировать + Lock Layer Заблокировать слой + Lock/Unlock Заблокировать/разблокировать + Loft Тело по сечениям + MIT OR Apache-2.0. Not affiliated with Autodesk, Inc. MIT OR Apache-2.0. Не аффилировано с Autodesk, Inc. + MODEL МОДЕЛЬ + MText Многострочный текст + Magenta Пурпурный + Major line every Основная линия каждые + Make Current Сделать текущим + Make Object's Layer Current Сделать слой объекта текущим + Make... Создать... + Match Layer Согласовать слой + Match Properties Копирование свойств + Measure Разметить + Measure Distance Измерить расстояние + Measure Geometry Измерить геометрию + Merge Cells Объединить ячейки + Merged PRs Принятые PR + Mid Between 2 Points Середина между двумя точками + Midpoint Середина + Mirror Зеркальное отражение + Model Модель + Model Space (in viewport) Пространство модели (в видовом экране) + Modeling Моделирование + Models Модели + Modify Модификация + Move Переместить + Multileader Мультивыноска + Multileader Style... Стиль мультивыносок... + Multileader style Стиль мультивыносок + Multiline Мультилиния + Multiline Text Многострочный текст + Multiline Text... Многострочный текст... + Multiple Разные типы + Multiple Point Несколько точек + My Мои + My properties: not available yet Мои свойства: пока недоступно + N С + Name Название + Name (A–Z) Название (А–Я) + Nearest Ближайшая точка + New Создать + New (metric) Создать (метрический) + New Drawing Новый чертеж + New Drawing (⌘N) Новый чертеж (⌘N) + New Drawing... Новый чертеж... + New Layer Новый слой + New Layout Новый лист + New VP Freeze Заморозить в новых ВЭ + New Viewports... Новые видовые экраны... + New layout Новый лист + New state name Название нового состояния + No Нет + No blocks defined in this drawing. В этом чертеже нет определенных блоков. + No contributor data was built into this copy. В эту сборку не включены данные об участниках. + No model credits were built into this copy. В эту сборку не включены данные о моделях. + No saved layer states Нет сохраненных состояний слоев + No selection Ничего не выделено + Node Узел + None Нет + Not available Недоступно + Not available yet Пока недоступно + OK ОК + Object Объект + Object Snap Объектная привязка + Object Snap (F3) Объектная привязка (F3) + Object Snap On (F3) Включить объектную привязку (F3) + Object Snap Tracking Отслеживание объектной привязки + Object Snap Tracking (F11) Отслеживание объектной привязки (F11) + Object type: Тип объекта: + Off Выключено + Offset Смещение + On Включено + On/Off Включить/выключить + One of the Crafting Apps by the ArtCraft team and community. Одна из программ Crafting Apps от команды и сообщества ArtCraft. + Open (⌘O) Открыть (⌘O) + Open Sample Drawing Открыть образец чертежа + Open sample drawing Открыть образец чертежа + Open... Открыть... + Operator: Оператор: + Orbit Орбита + Ordinate Ординатный + Ortho (F8) Орто (F8) + Ortho Mode Режим Орто + Ortho Mode (F8) Режим Орто (F8) + Osnap Settings... Параметры объектной привязки... + Out Отдалить + Override Переопределить + PAPER ЛИСТ + Percent Процент + Polar (distance < angle) Полярные (расстояние < угол) + PRs PR + Page Setup Manager Диспетчер параметров листов + Page Setup Manager... Диспетчер параметров листов... + Pan Панорамирование + Pan Down Панорамировать вниз + Pan Left Панорамировать влево + Pan Right Панорамировать вправо + Pan Up Панорамировать вверх + Paper Space Пространство листа + Parallel Параллельность + Parameters Manager Диспетчер параметров + Parametric Параметризация + Paste Вставить + Paste as Block Вставить как блок + Paste to Original Coordinates Вставить в исходные координаты + Path Array Массив по траектории + Pattern Шаблон + Perpendicular Перпендикулярность + Plot Печать чертежа + Plot (click: do not plot) Печатать (щелкните, чтобы отключить печать) + Plot Preview Предварительный просмотр печати + Plot style Стиль печати + Plot style attached to Стиль печати применен к + Plot style table Таблица стилей печати + Plot Style... Стиль печати... + Plot Style Manager Диспетчер стилей печати + Plot Style Manager... Диспетчер стилей печати... + Plot Styles... Стили печати... + New CTB Новая CTB + New STB Новая STB + New style Новый стиль + Reset Panel Layout Сбросить расположение панелей + Use for this layout Использовать для этого листа + Display plot styles Показывать стили печати + No plot style tables. Нет таблиц стилей печати. + A built-in table: editing it keeps an edited copy in the drawing. Встроенная таблица: изменения сохраняются как ее копия в чертеже. + Keep an editable copy of this table in the drawing Сохранить в чертеже копию этой таблицы для редактирования + Layout {name}: {table} Лист {name}: {table} + Grayscale Оттенки серого + Screening Тонирование + Use object linetype Тип линии объекта + Use object lineweight Вес линии объекта + Remove Удалить + Add Добавить + Open a drawing first. Сначала откройте чертеж. + Plot table type Тип таблицы печати + Color-dependent Зависимая от цвета + Named Именованная + Plus/minus Плюс/минус + Point Точка + Point Filters Фильтры точек + Point Style... Стиль точек... + Polar Array Полярный массив + Polar Tracking Полярное отслеживание + Polar Tracking (F10) Полярное отслеживание (F10) + Polar Tracking On (F10) Включить полярное отслеживание (F10) + Polar: {distance} < {angle}° Полярное: {distance} < {angle}° + Polygon Многоугольник + Polygonal Многоугольный + Polyline Полилиния + Position X Позиция X + Position Y Позиция Y + Position Z Позиция Z + Previous Предыдущий + Previous Layer Предыдущий слой + Primitives Примитивы + Print Печать + Print... Печать... + Properties Свойства + Properties Inspector Инспектор свойств + Properties: Свойства: + Proxy Прокси-объект + Purge Очистить неиспользуемое + Pyramid Пирамида + Quadrant Квадрант + Query Entities Запрос объектов + Quick Быстрый + Quick Dimension Быстрый размер + Quick Properties Быстрые свойства + Quick Select Быстрый выбор + Quick Select Properties Свойства быстрого выбора + Quick Select... Быстрый выбор... + QuickCalc Быстрокалькулятор + Quit CADCraft Выйти из CADCraft + Radius Радиус + Raster Image Растровое изображение + Ray Луч + Read-only Только для чтения + Real name Настоящее имя + Realtime В реальном времени + Reassociate Dimensions Восстановить ассоциативность размеров + Recent Недавние + Recover... Восстановить... + Rectangle Прямоугольник + Rectangular Прямоугольный + Rectangular Array Прямоугольный массив + Red Красный + Redo Повторить + Redo (⇧⌘Z) Повторить (⇧⌘Z) + Redraw Перерисовать + Regen Регенерация + Regen All Регенерировать все + Region Область + Region/Mass Properties Свойства области/массы + Relative Относительные + Remove Leader Удалить выноску + Remove the viewport override Удалить переопределение видового экрана + Rename Dimension Style Переименовать размерный стиль + Rename Layer Переименовать слой + Rename Layer State Переименовать состояние слоев + Rename Layout Переименовать лист + Rename Text Style Переименовать текстовый стиль + Rename... Переименовать... + Repeat {command} Повторить {command} + Requires a point (x,y, @dx,dy or @d Укажите вторую точку или <использовать первую точку как смещение> + Specify second source point Укажите вторую исходную точку + Specify side to offset Укажите сторону смещения + Specify start angle Укажите начальный угол + Specify start point Укажите начальную точку + Specify start point of arc Укажите начальную точку дуги + Specify start point of polyline Укажите начальную точку полилинии + Specify start point of text Укажите начальную точку текста + Specify starting width Укажите начальную ширину + Specify starting width for next segment Укажите начальную ширину следующего сегмента + Specify tangent direction for the start point of arc Укажите направление касательной в начальной точке дуги + Specify the elevation for rectangles Укажите уровень прямоугольников + Specify thickness for rectangles Укажите высоту выдавливания прямоугольников + Specify third point on circle Укажите третью точку на круге + Specify third point on circle: _tan to Укажите третью точку на круге: _tan к + Specify third source point or Укажите третью исходную точку или <продолжить> + Specify through point Укажите точку, через которую проходит прямая + Specify top diameter Укажите диаметр вершины + Specify top radius or Укажите радиус вершины или + Specify total angle Укажите полный угол + Specify total length or Укажите общую длину или + Specify width for rectangles Укажите ширину прямоугольников + Sphere Сфера + Spline Сплайн + Stack (type 1/2 then select) Дробь (введите 1/2, затем выберите) + Standard Стандартный + Start Начало + Start Width Начальная ширина + Start X Начало X + Start Y Начало Y + Start angle Начальный угол + Start, Center, Angle Начало, центр, угол + Start, Center, End Начало, центр, конец + Start, Center, Length Начало, центр, длина + Start, End, Angle Начало, конец, угол + Start, End, Direction Начало, конец, направление + Start, End, Radius Начало, конец, радиус + Status Состояние + Status Bar Строка состояния + Stretch Растянуть + Style: Standard Стиль: Standard + Subtract Вычесть + Sweep Тело по траектории + Switch Drawing Переключить чертеж + Switch Layout Переключить лист + Switch between model space in a viewport and paper space Переключить между пространством модели в видовом экране и пространством листа + Symmetric Симметрия + Synchronize Attributes Синхронизировать атрибуты + Toggle PICKADD (off: each pick replaces the selection) Переключить PICKADD (выкл.: каждый выбор заменяет набор выделения) + Toggle PICKADD (on: picks add to the selection) Переключить PICKADD (вкл.: выделение добавляется к набору) + TOP СВЕРХУ + Table Таблица + Table Style... Стиль таблиц... + Table style Стиль таблиц + Table... Таблица... + Tan, Tan, Radius Касательная, касательная, радиус + Tan, Tan, Tan Касательная, касательная, касательная + Tangent Касательность + Text Текст + Text Editor Текстовый редактор + Text Height Высота текста + Text Style... Текстовый стиль... + Text height Высота текста + Text override Переопределение текста + Text style Текстовый стиль + Thaw All Layers Разморозить все слои + There is nothing here yet. Здесь пока ничего нет. + Thickness Высота выдавливания + Time Время + To get started, create or open a drawing. Чтобы начать, создайте или откройте чертеж. + Tool Bar Панель инструментов + Tool Sets Наборы инструментов + Tools Инструменты + Torus Тор + Trace Широкая линия + Transparency Прозрачность + Trim Обрезать + True Color Цвет RGB + Turn All Layers On Включить все слои + Turn Off Layer Выключить слой + Turn Quick Properties off (QPMODE) Выключить быстрые свойства (QPMODE) + Type Тип + Type a command Введите команду + Type text; Enter starts a new paragraph Введите текст; Enter начинает новый абзац + UCS Icon Значок ПСК + Undo Отменить + Undo (⌘Z) Отменить (⌘Z) + Ungroup Разгруппировать + Union Объединение + Unisolate Layer Отменить изоляцию слоев + Units... Единицы... + Unlock Layer Разблокировать слой + Unmerge Cells Разъединить ячейки + Unsaved Layer State Несохраненное состояние слоев + Up Вверх + Update Обновить + Use System Setting Как в системе + User Пользователь + User Parameters Пользовательские параметры + Username Имя пользователя + VP Color Цвет ВЭ + VP Freeze Заморозка ВЭ + Value Значение + Value: Значение: + Version Версия + Version {version} Версия {version} + Vertical Вертикальность + VerticalDistance ВертикальноеРасстояние + View Вид + ViewCube Видовой куб + Viewport Видовой экран + Viewport Layer Freeze Заморозить слой в видовом экране + Viewport Properties Свойства видового экрана + Viewport {id} Видовой экран {id} + Viewports Видовые экраны + W З + WCS ⌄ МСК ⌄ + White Белый + Width factor Коэффициент ширины + Window Окно + Wipeout Маскировка + Workspace Switching Переключение рабочих сред + Write Block Записать блок в файл + Xline Вспомогательная прямая + Yellow Желтый + Yes Да + Zoom Показать + Zoom All Показать все + Zoom Extents Показать границы объектов + Zoom In Увеличить + Zoom Object Показать объект + Zoom Out Уменьшить + Zoom Previous Предыдущий масштаб + Zoom Window Показать рамкой + error ошибка + {contributors} · {commits} {contributors} · {commits} + {kind} (constraint {id}) {kind} (ограничение {id}) + {kind} constraint {name} = {expression} (double-click to edit) Ограничение «{kind}» {name} = {expression} (дважды щелкните для редактирования) + {name}: {distance} < {angle}° {name}: {distance} < {angle}° + ƒx New User Parameter ƒx Новый пользовательский параметр + ΔLOC Δстрок + −Bin −двоич. + −LOC −строк + ⌘↩ to finish ⌘↩ для завершения +@plural {n} commit {n} коммит|{n} коммита|{n} коммитов +@plural {n} contributor {n} участник|{n} участника|{n} участников + Drawing as bytes Чертеж как байты + Services Службы + Hide CADCraft Скрыть CADCraft + Hide Others Скрыть остальные + Accessibility Специальные возможности + Show System Cursor Показывать системный курсор + Import... Импорт... + Export... Экспорт... + Batch Publish... Пакетная публикация... diff --git a/crates/ui-egui/src/i18n/tests.rs b/crates/ui-egui/src/i18n/tests.rs index 6adf51dee..a340c6d35 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"]; +const REPORTED: &[&str] = &["pt-BR", "de", "es", "cs", "ru", "fr"]; fn check(language: &str, what: &str, missing: Vec) { if REQUIRED.contains(&language) { @@ -146,14 +146,18 @@ fn locale_and_saved_preference_resolution() { for tag in ["de", "de-DE", "de_DE.UTF-8", "DE-at", "de-CH"] { assert_eq!(locale_language(tag), Some("de"), "{tag}"); } - for tag in ["ua", "ukulele", "ru-RU", "", "garbage", "💙"] { + for (tag, code) in [("ru", "ru"), ("ru-RU", "ru"), ("ru_RU.UTF-8", "ru"), ("fr", "fr"), ("fr-FR", "fr"), ("fr_CA.UTF-8", "fr")] { + assert_eq!(locale_language(tag), Some(code), "{tag}"); + } + for tag in ["ua", "ukulele", "pl-PL", "", "garbage", "💙"] { assert_eq!(locale_language(tag), None, "{tag}"); } for tag in ["pt", "pt-BR", "pt_BR.UTF-8", "PT-br", "pt-PT"] { assert_eq!(locale_language(tag), Some("pt-BR"), "{tag}"); } assert_eq!(locale_language("ptolemy"), None); - assert_eq!(Preference::Auto.resolve(&["fr-FR".into(), "pt-BR".into()]), "pt-BR"); + assert_eq!(Preference::Auto.resolve(&["pl-PL".into(), "pt-BR".into()]), "pt-BR"); + assert_eq!(Preference::Auto.resolve(&["fr-FR".into(), "pt-BR".into()]), "fr"); for tag in ["es", "es-ES", "es_MX.UTF-8", "ES-ar"] { assert_eq!(locale_language(tag), Some("es"), "{tag}"); } @@ -504,3 +508,18 @@ fn default_fonts_cover_czech_letters_and_typographic_quotes() { } }); } + +#[test] +fn russian_and_french_plurals() { + with_language("ru", || { + for (n, word) in [(1, "участник"), (2, "участника"), (5, "участников"), (21, "участник"), (22, "участника"), (11, "участников")] + { + assert_eq!(count(n, "{n} contributor", "{n} contributors"), format!("{n} {word}")); + } + }); + with_language("fr", || { + for (n, word) in [(0, "contributeur"), (1, "contributeur"), (2, "contributeurs"), (10, "contributeurs")] { + assert_eq!(count(n, "{n} contributor", "{n} contributors"), format!("{n} {word}")); + } + }); +} diff --git a/crates/ui-egui/src/options/mod.rs b/crates/ui-egui/src/options/mod.rs index 49cc0c95c..4bff00c62 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"` or `"cs"` | +//! | `interfaceLanguage` | `"auto"`, `"en"`, `"uk"`, `"pt-BR"`, `"de"`, `"es"`, `"cs"`, `"ru"` or `"fr"` | //! | `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 94db087b1..50ed2d775 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` and `cs`. `ui.set` also accepts +Supported values are `auto`, `en`, `uk`, `pt-BR`, `de`, `es`, `cs`, `ru` and `fr`. `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 a56c3e8a9..d7ae1eecf 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -56,7 +56,8 @@ plus native review by a human; extending the catalog to the remaining English-on | Spanish | es | 0 (0%) | 0% | Latin: yes | no | none | 3–5 h | | Hindi | hi | 0 (0%) | 0% | Devanagari: no shaping | no | none | 3–5 h + 15–25 h shaping (shared with Arabic) | | Arabic | ar | 0 (0%) | 0% | Drawing text shaped and laid out right to left (#287); the UI is not mirrored | no | none | 3–5 h + 15–25 h RTL UI | -| French | fr | 0 (0%) | 0% | Latin: yes | no | none | 3–5 h | +| French | fr | ≈ 900 catalog rows (gaps reported, English fallback) | partial | Latin: yes | contributed by @pechnikov2026-star (#624); no native review yet | partial | 2–4 h | +| Russian | ru | ≈ 900 catalog rows (gaps reported, English fallback) | partial | Cyrillic: yes (bundled egui fonts) | contributed by @pechnikov2026-star (#624); no native review yet | partial | 2–4 h | | Portuguese | pt | 0 (0%) | 0% | Latin: yes | no | none | 3–5 h | | Indonesian | id | 0 (0%) | 0% | Latin: yes | no | none | 3–5 h | | Japanese | ja | 0 (0%) | 0% | CJK glyphs render; IME pending; no vertical text | no | none | 4–6 h | @@ -66,7 +67,7 @@ plus native review by a human; extending the catalog to the remaining English-on | 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 | -Other languages shipped: Ukrainian, Brazilian Portuguese, German and Czech. Czech covers the +Other languages shipped: Ukrainian, Brazilian Portuguese, German, Czech, Russian and French. 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.