From 54ea5e743a29acd8f3178cfaa82fb74a38c2de72 Mon Sep 17 00:00:00 2001 From: PedroGuille Date: Sun, 11 Oct 2026 15:42:39 -0300 Subject: [PATCH] Spanish translation (#610) Squash of PR #610 by @PedroGuille. Co-Authored-By: Claude Opus 5.5 --- ATTRIBUTION.md | 1 + crates/ui-egui/src/i18n/es.tsv | 995 +++++++++++++++++++++++++++++++ crates/ui-egui/src/i18n/mod.rs | 11 +- crates/ui-egui/src/i18n/tests.rs | 9 +- crates/ui-egui/src/viewcube.rs | 10 +- 5 files changed, 1017 insertions(+), 9 deletions(-) create mode 100644 crates/ui-egui/src/i18n/es.tsv diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 73f3ddb6..d5fac750 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -58,4 +58,5 @@ Generated-in-code assets are original and have no file to list: |---|---|---|---|---| | `crates/ui-egui/src/i18n/uk.tsv` | @dmatviichuk | Original Ukrainian translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | | `crates/ui-egui/src/i18n/de.tsv` | the CADCraft contributors | Original German translations of CADCraft English strings | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | No proprietary localization resources copied | +| `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 | diff --git a/crates/ui-egui/src/i18n/es.tsv b/crates/ui-egui/src/i18n/es.tsv new file mode 100644 index 00000000..095c9835 --- /dev/null +++ b/crates/ui-egui/src/i18n/es.tsv @@ -0,0 +1,995 @@ +# CADCraft Spanish interface catalog — original translations. +# 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 sourceSpanish translation. +# Empty context = ordinary label; @plural = one|other forms with {n}. +# Command IDs, typed keywords, technology/product names and user data stay unchanged. + Cancel Cancelar + OK Aceptar + or [ o [ + % of all commits % de todos los commits + * Wildcard Match * Coincidencia con comodines + *VARIES* *VARIOS* + + | Top | 2D Wireframe + | Superior | Estructura alámbrica 2D + +Bin +Bin + +LOC +Líneas + 1 Viewport 1 ventana gráfica + 2 Points 2 puntos + 2 Viewports 2 ventanas gráficas + 2D Solid Sólido 2D + 3 Points 3 puntos + 3 Viewports 3 ventanas gráficas + 3D Face Cara 3D + 3D Operations Operaciones 3D + 3D Polyline Polilínea 3D + 4 Viewports 4 ventanas gráficas + < Less than < Menor que + <> Not Equal <> Distinto de + = Equals = Igual a + > Greater than > Mayor que + About Acerca de + About CADCraft Acerca de CADCraft + Absolute Absolutas + Add Leader Añadir directriz + Align Alinear + Align Text Alinear texto + Aligned Alineada + All Todas + All Used Layers Todas las capas usadas + All files Todos los archivos + Angle Ángulo + Angular Angular + Annotation Visibility Visibilidad de anotaciones + Annotation scale Escala de anotación + Apparent Intersection Intersección aparente + Append to current selection set Añadir al conjunto de selección actual + Apply to: Aplicar a: + Apply true color Aplicar color verdadero + Arc Arco + Arc Length Longitud de arco + Area Área + Arrange Panel Organizar panel + Array Matriz + Attach Adjuntar + Attribute Atributo + Attribute Definition Definición de atributo + Attribute Display Visualización de atributos + Audit Verificar dibujo + Auto (system language) Automático (idioma del sistema) + Auto Constrain Restricciones automáticas + AutoConstrain Restricciones automáticas + Axis, End Eje, extremo + Base Base + Baseline Línea base + Batch Publish Publicar en lote + Binary assets added Recursos binarios añadidos + Binary assets removed Recursos binarios eliminados + Blend Fusión de curvas + Block Bloque + Block Attribute Manager... Administrador de atributos de bloque... + Block Editor Editor de bloques + Block Reference Referencia de bloque + Block... Bloque... + Blocks Bloques + Blue Azul + Bold Negrita + Boolean Operaciones booleanas + Boundary Contorno + Boundary... Contorno... + Box Prisma rectangular + Break Partir + Break At Point Partir en un punto + Bring to Front Traer al frente + ByBlock PorBloque + ByColor PorColor + ByLayer PorCapa + CADCraft Help Ayuda de CADCraft + Cancel Cancelar + Cartesian (x, y) Cartesianas (x, y) + Center Centro + Center Line Línea de centro + Center Mark Marca de centro + Center X Centro X + Center Y Centro Y + Center Z Centro Z + Center, Diameter Centro, diámetro + Center, Radius Centro, radio + Center, Start, Angle Centro, inicio, ángulo + Center, Start, End Centro, inicio, fin + Center, Start, Length Centro, inicio, longitud + Chamfer Chaflán + Change Space Cambiar espacio + Change to Current Layer Cambiar a la capa actual + Circle Círculo + Circumference Circunferencia + Clear Limpiar + Clipboard Portapapeles + Close Cerrar + Close All Cerrar todo + Closed Cerrada + Coincident Coincidente + Collapse Tool Sets Contraer herramientas de dibujo + Collinear Colineal + Color Color + Color 8 Color 8 + Color 9 Color 9 + Color Index Índice de color + Color... Color... + Command History Historial de comandos + Command Line Línea de comandos + Command Line History Lines Líneas del historial de comandos + Command Reference Referencia de comandos + Commits Commits + Company Empresa + Computer-aided design and drafting: an open-source, clean-room CAD application written in pure Rust. Diseño y dibujo asistidos por computadora: una aplicación CAD de código abierto, desarrollada de forma independiente en Rust. + Concentric Concéntrica + Cone Cono + Constraint Bars Barras de restricciones + Constraint Settings Configuración de restricciones + Construction Line Línea auxiliar + Contents Contenido + Continue Continuar + Contributors Colaboradores + Control Vertices Vértices de control + Copy Copiar + Copy Layout Copiar presentación + Copy Nested Objects Copiar objetos anidados + Copy Selection Copiar selección + Copy with Base Point Copiar con punto base + Count Contar + Create Block Crear bloque + Creates a user parameter Crea un parámetro de usuario + Ctrl+Enter to finish Ctrl+Enter para terminar + Current layer Capa actual + Current selection Selección actual + Current: {color} Actual: {color} + Cut Cortar + Cyan Cian + Cylinder Cilindro + DWG DWG + DXF DXF + Dark Oscuro + Default Predeterminado + Default Save Format Formato de guardado predeterminado + Define Attributes Definir atributos + Define Attributes... Definir atributos... + Defined width Anchura definida + Degree Grado + Delete Eliminar + Delete Column Eliminar columna + Delete Constraints Eliminar restricciones + Delete Dimension Style Eliminar estilo de cota + Delete Duplicate Objects Eliminar objetos duplicados + Delete Layer Eliminar capa + Delete Layer State Eliminar estado de capas + Delete Layout Eliminar presentación + Delete Row Eliminar fila + Delete Text Style Eliminar estilo de texto + Delta X Incremento X + Delta Y Incremento Y + Description Descripción + Deselect All Deseleccionar todo + Diameter Diámetro + Dim style Estilo de cota + Dimension Acotación + Dimension Space Espaciado de cotas + Dimension Style Override Modificar estilo de cota + Dimension Style... Estilo de cota... + Dimension Text Edit Editar texto de cota + Dimension style Estilo de cota + Dimensional Constraint Restricción dimensional + Dimensional Constraint Parameters Parámetros de restricciones dimensionales + Dimensional Constraints Restricciones dimensionales + Disassociate Dimensions Desasociar cotas + Display name Nombre visible + Distance Distancia + Divide Dividir + Do not plot (click: plot) No se trazará (clic: trazar) + Donut Arandela + Double-click to edit the description Doble clic para editar la descripción + Down Abajo + Drafting Dibujo + Drafting Settings Configuración de dibujo + Drafting Settings... Configuración de dibujo... + Draw Dibujo + Draw Order Orden de dibujo + Drawing (DWG) Dibujo (DWG) + Drawing (DXF) Dibujo (DXF) + Drawing Limits Límites del dibujo + Drawing Utilities Utilidades de dibujo + Drawings (DWG, DXF) Dibujos (DWG, DXF) + Dynamic Dimensions Cotas dinámicas + Dynamic Input Entrada dinámica + Dynamic Input (F12) Entrada dinámica (F12) + E E + Edit Edición + Edit Text... Editar texto... + Elevation Elevación + Ellipse Elipse + Elliptical Arc Arco elíptico + Enable Dynamic Input (F12) Activar entrada dinámica (F12) + End Width Anchura final + End X X final + End Y Y final + End angle Ángulo final + Endpoint Punto final + Enter Top, Zero or Bottom. Introduce Top, Zero o Bottom. + Enter a fit data option Introduce una opción de datos de ajuste + Enter a pattern name Introduce un nombre de patrón + Enter a vertex editing option Introduce una opción de edición de vértices + Enter an option Introduce una opción + Enter angle of xline Introduce el ángulo de la línea auxiliar + Enter angle of xline (0) or Introduce el ángulo de la línea auxiliar (0) o + Enter area of rectangle in current units Introduce el área del rectángulo en las unidades actuales + Enter attribute prompt Introduce la solicitud del atributo + Enter attribute tag name Introduce la etiqueta del atributo + Enter attribute value Introduce el valor del atributo + Enter block name Introduce el nombre del bloque + Enter constraint type Introduce el tipo de restricción + Enter continuity Introduce la continuidad + Enter default attribute value Introduce el valor predeterminado del atributo + Enter degree of spline Introduce el grado de la spline + Enter delta angle Introduce el incremento angular + Enter delta length or Introduce el incremento de longitud o + Enter dimension text Introduce el texto de cota + Enter dimension text (<> = measurement) Introduce el texto de cota (<> = medida) + Enter dimension value or [name=expression] Introduce el valor de cota o [nombre=expresión] + Enter dimension variable name to override Introduce la variable de cota que deseas modificar + Enter justification type Introduce el tipo de justificación + Enter leader text Introduce el texto de la directriz + Enter mline scale Introduce la escala de la línea múltiple + Enter mode Introduce el modo + Enter name of block to insert Introduce el nombre del bloque que deseas insertar + Enter new text Introduce el nuevo texto + Enter next point Introduce el siguiente punto + Enter number of columns Introduce el número de columnas + Enter number of data rows Introduce el número de filas de datos + Enter number of items Introduce el número de elementos + Enter number of items along path Introduce el número de elementos a lo largo del camino + Enter number of sides Introduce el número de lados + Enter number of turns Introduce el número de vueltas + Enter percentage length Introduce el porcentaje de longitud + Enter rectangle length Introduce la longitud del rectángulo + Enter rectangle width Introduce la anchura del rectángulo + Enter scale factor Introduce el factor de escala + Enter text Introduce el texto + Enter text (use \P for new paragraphs) Introduce el texto (usa \P para párrafos nuevos) + Enter the number of segments Introduce el número de segmentos + Enter twist direction of helix Introduce el sentido de giro de la hélice + Entire drawing Todo el dibujo + Equal Igual + Erase Borrar + Exclude from new selection set Excluir del nuevo conjunto de selección + Explode Descomponer + Export Exportar + Export to PDF... Exportar a PDF... + Expression Expresión + Extend Alargar + Extension Extensión + Extents Extensión + Extrude Extruir + File Archivo + File Tab Pestañas de archivos + Fillet Empalme + Filter Filtrar + Filters Filtros + Find and Replace Buscar y reemplazar + Find... Buscar... + First Primero + First commit Primer commit + Fit Points Puntos de ajuste + Fix Fijar + Flatten Objects Aplanar objetos + Format Formato + Freehand Mano alzada + Freeze Inutilizar + Freeze Layer Inutilizar capa + Freeze in new viewports Inutilizar en nuevas ventanas gráficas + Freeze/Thaw Inutilizar/reutilizar + Freeze/Thaw in all viewports Inutilizar/reutilizar en todas las ventanas gráficas + Freeze/Thaw in the current viewport Inutilizar/reutilizar en la ventana gráfica actual + From Desde + General General + Geometric Center Centro geométrico + Geometric Constraint Restricción geométrica + Geometric Constraints Restricciones geométricas + Geometry Geometría + Get Variable Consultar variable + Get View Consultar vista + Global Global + Global width Anchura global + Grab bag Lista + Gradient Degradado + Gradient... Degradado... + Green Verde + Grid (F7) Rejilla (F7) + Grid Display Mostrar rejilla + Grid On (F7) Activar rejilla (F7) + Grid spacing Espaciado de rejilla + Grip Mirror Simetría con pinzamientos + Grip Rotate Girar con pinzamientos + Grip Scale Escalar con pinzamientos + Grip Stretch Estirar con pinzamientos + Group Agrupar + Group Edit Editar grupo + Hatch Sombreado + Hatch Edit Editar sombreado + Hatch... Sombreado... + Height Altura + Height: {height} Altura: {height} + Helix Hélice + Help Ayuda + Hide All Ocultar todo + Hide All Constraint Bars Ocultar todas las barras de restricciones + Hide All Dynamic Dimensions Ocultar todas las cotas dinámicas + Hide Layer List Ocultar lista de capas + Hide Palettes Ocultar paletas + Home Inicio + Horizontal Horizontal + HorizontalDistance Distancia horizontal + How to apply: Cómo aplicar: + ID Point Coordenadas de un punto + Import Importar + In Acercar + In-window Menu Bar Barra de menús en la ventana + Include in new selection set Incluir en el nuevo conjunto de selección + Increment angle Incremento angular + Index Color Color indexado + Index color: {index} Color de índice: {index} + Inquiry Consultar + Insert Insertar + Insert Block Insertar bloque + Insert Column Insertar columna + Insert Row Insertar fila + Insert this block Insertar este bloque + Insertion Inserción + Insertion X Inserción X + Insertion Y Inserción Y + Insertion Z Inserción Z + Inspect Constraints Inspeccionar restricciones + Inspect Drawing Inspeccionar dibujo + Interface Language Idioma de la interfaz + Interface Theme Tema de la interfaz + Intersect Intersección + Intersection Intersección + Isolate Aislar + Isolate Layer Aislar capa + Isometric Drafting Dibujo isométrico + Join Unir + Join the ArtCraft Discord… Únete al Discord de ArtCraft… + Join us on Discord Únete a nosotros en Discord + Language Idioma + Last Último + Last commit Último commit + Layer Capa + Layer Delete Eliminar capa + Layer Match Igualar capa + Layer Merge Fusionar capas + Layer Off Desactivar capa + Layer Properties Propiedades de capa + Layer Properties Manager Administrador de capas + Layer Properties Manager — current viewport Administrador de capas — ventana gráfica actual + Layer State Estado de capas + Layer States Manager... Administrador de estados de capas... + Layer Tools Herramientas de capas + Layer contains objects (double-click to make current) La capa contiene objetos (doble clic para establecer como actual) + Layer is empty (double-click to make current) La capa está vacía (doble clic para establecer como actual) + Layers Capas + Layers Palette Paleta de capas + Layers displayed: {shown} of {total}. Current layer: {layer} Capas mostradas: {shown} de {total}. Capa actual: {layer} + Layout Presentación + Layout list Lista de presentaciones + Leader Directriz + Left Izquierda + Length Longitud + Length X Longitud X + Length Y Longitud Y + Lengthen Longitud + Light Claro + Line Línea + Line delta Diferencia de líneas + Linear Lineal + Lines +/− Líneas +/− + Lines added Líneas añadidas + Lines deleted Líneas eliminadas + Linetype Tipo de línea + Linetype Scale Escala del tipo de línea + Linetype scale Escala del tipo de línea + Ltscale Escala de tipo de línea + Linetype... Tipo de línea... + Lineweight Grosor de línea + Lineweight... Grosor de línea... + List Lista + List Blocks Listar bloques + List Dimension Styles Listar estilos de cota + List Groups Listar grupos + List Layer States Listar estados de capas + List Layouts Listar presentaciones + List System Variables Listar variables del sistema + List Text Styles Listar estilos de texto + Load all Cargar todos + Load... Cargar... + Loaded linetypes Tipos de línea cargados + Lock Bloquear + Lock Layer Bloquear capa + Lock/Unlock Bloquear/desbloquear + Loft Solevación + MIT OR Apache-2.0. Not affiliated with Autodesk, Inc. MIT O Apache-2.0. Sin afiliación con Autodesk, Inc. + MODEL MODELO + MText Texto multilínea + Magenta Magenta + Major line every Línea principal cada + Make Current Establecer actual + Make Object's Layer Current Usar como actual la capa del objeto + Make... Crear... + Match Layer Igualar capa + Match Properties Igualar propiedades + Measure Medir + Measure Distance Medir distancia + Measure Geometry Medir geometría + Merge Cells Combinar celdas + Merged PRs PR integradas + Mid Between 2 Points Punto medio entre 2 puntos + Midpoint Punto medio + Mirror Simetría + Model Modelo + Model Space (in viewport) Espacio modelo (en ventana gráfica) + Modeling Modelado + Models Modelos + Modify Modificar + Move Desplazar + Multileader Directriz múltiple + Multileader Style... Estilo de directriz múltiple... + Multileader style Estilo de directriz múltiple + Multiline Línea múltiple + Multiline Text Texto multilínea + Multiline Text... Texto multilínea... + Multiple Varios + Multiple Point Puntos múltiples + My Mías + My properties: not available yet Mis propiedades: aún no disponible + N N + Name Nombre + Name (A–Z) Nombre (A–Z) + Nearest Cercano + New Nuevo + New (metric) Nuevo (métrico) + New Drawing Nuevo dibujo + New Drawing (⌘N) Nuevo dibujo (⌘N) + New Drawing... Nuevo dibujo... + New Layer Nueva capa + New Layout Nueva presentación + New VP Freeze Inutilizar en nuevas ventanas + New Viewports... Nuevas ventanas gráficas... + New layout Nueva presentación + New state name Nombre del nuevo estado + No No + No blocks defined in this drawing. No hay bloques definidos en este dibujo. + No contributor data was built into this copy. Esta copia no incluye datos de colaboradores. + No model credits were built into this copy. Esta copia no incluye créditos de modelos. + No saved layer states No hay estados de capas guardados + No selection Sin selección + Node Nodo + None Ninguno + Not available No disponible + Not available yet Aún no disponible + OK Aceptar + Object Objeto + Object Snap Referencia a objetos + Object Snap (F3) Referencia a objetos (F3) + Object Snap On (F3) Activar referencia a objetos (F3) + Object Snap Tracking Rastreo de referencia a objetos + Object Snap Tracking (F11) Rastreo de referencia a objetos (F11) + Object type: Tipo de objeto: + Off Desactivado + Offset Desfase + On Activado + On/Off Activar/desactivar + One of the Crafting Apps by the ArtCraft team and community. Una de las Crafting Apps del equipo y la comunidad de ArtCraft. + Open (⌘O) Abrir (⌘O) + Open Sample Drawing Abrir dibujo de ejemplo + Open sample drawing Abrir dibujo de ejemplo + Open... Abrir... + Operator: Operador: + Orbit Órbita + Ordinate Coordenadas + Ortho (F8) Ortogonal (F8) + Ortho Mode Modo ortogonal + Ortho Mode (F8) Modo ortogonal (F8) + Osnap Settings... Configuración de referencia a objetos... + Out Alejar + Override Modificar + PAPER PAPEL + Percent Porcentaje + Polar (distance < angle) Polares (distancia < ángulo) + PRs PRs + Page Setup Manager Administrador de configuración de página + Page Setup Manager... Administrador de configuración de página... + Pan Encuadre + Pan Down Encuadrar hacia abajo + Pan Left Encuadrar a la izquierda + Pan Right Encuadrar a la derecha + Pan Up Encuadrar hacia arriba + Paper Space Espacio papel + Parallel Paralela + Parameters Manager Administrador de parámetros + Parametric Paramétrico + Paste Pegar + Paste as Block Pegar como bloque + Paste to Original Coordinates Pegar en coordenadas originales + Path Array Matriz de camino + Pattern Patrón + Perpendicular Perpendicular + Plot Trazar + Plot (click: do not plot) Se trazará (clic: no trazar) + Plot Preview Vista previa de impresión + Plot style Estilo de trazado + Plot style attached to Estilo de trazado asociado a + Plot style table Tabla de estilos de trazado + Plot Style... Estilo de trazado... + Plot Style Manager Administrador de estilos de trazado + Plot Style Manager... Administrador de estilos de trazado... + Plot Styles... Estilos de trazado... + New CTB Nueva CTB + New STB Nueva STB + New style Nuevo estilo + Reset Panel Layout Restablecer disposición de paneles + Use for this layout Usar en esta presentación + Display plot styles Mostrar estilos de trazado + No plot style tables. No hay tablas de estilos de trazado. + A built-in table: editing it keeps an edited copy in the drawing. Tabla incorporada: al editarla se guarda una copia modificada en el dibujo. + Keep an editable copy of this table in the drawing Guardar una copia editable de esta tabla en el dibujo + Layout {name}: {table} Presentación {name}: {table} + Grayscale Escala de grises + Screening Intensidad + Use object linetype Usar tipo de línea del objeto + Use object lineweight Usar grosor de línea del objeto + Remove Quitar + Add Añadir + Open a drawing first. Abre primero un dibujo. + Plot table type Tipo de tabla de trazado + Color-dependent Dependiente del color + Named Por nombre + Plus/minus Más/menos + Point Punto + Point Filters Filtros de puntos + Point Style... Estilo de punto... + Polar Array Matriz polar + Polar Tracking Rastreo polar + Polar Tracking (F10) Rastreo polar (F10) + Polar Tracking On (F10) Activar rastreo polar (F10) + Polar: {distance} < {angle}° Polar: {distance} < {angle}° + Polygon Polígono + Polygonal Poligonal + Polyline Polilínea + Position X Posición X + Position Y Posición Y + Position Z Posición Z + Previous Anterior + Previous Layer Capa anterior + Primitives Primitivas + Print Imprimir + Print... Imprimir... + Properties Propiedades + Properties Inspector Inspector de propiedades + Properties: Propiedades: + Proxy Objeto proxy + Purge Limpiar elementos sin usar + Pyramid Pirámide + Quadrant Cuadrante + Query Entities Consultar entidades + Quick Rápido + Quick Dimension Acotación rápida + Quick Properties Propiedades rápidas + Quick Select Selección rápida + Quick Select Properties Propiedades de selección rápida + Quick Select... Selección rápida... + QuickCalc Calculadora rápida + Quit CADCraft Salir de CADCraft + Radius Radio + Raster Image Imagen ráster + Ray Semirrecta + Read-only Solo lectura + Real name Nombre real + Realtime Tiempo real + Reassociate Dimensions Reasociar cotas + Recent Recientes + Recover... Recuperar... + Rectangle Rectángulo + Rectangular Rectangular + Rectangular Array Matriz rectangular + Red Rojo + Redo Rehacer + Redo (⇧⌘Z) Rehacer (⇧⌘Z) + Redraw Redibujar + Regen Regenerar + Regen All Regenerar todo + Region Región + Region/Mass Properties Propiedades físicas/de región + Relative Relativas + Remove Leader Eliminar directriz + Remove the viewport override Eliminar modificación de la ventana gráfica + Rename Dimension Style Renombrar estilo de cota + Rename Layer Renombrar capa + Rename Layer State Renombrar estado de capas + Rename Layout Renombrar presentación + Rename Text Style Renombrar estilo de texto + Rename... Renombrar... + Repeat {command} Repetir {command} + Requires a point (x,y, @dx,dy or @d Indica el segundo punto o + Specify second source point Indica el segundo punto de origen + Specify side to offset Indica el lado del desfase + Specify start angle Indica el ángulo inicial + Specify start point Indica el punto inicial + Specify start point of arc Indica el punto inicial del arco + Specify start point of polyline Indica el punto inicial de la polilínea + Specify start point of text Indica el punto inicial del texto + Specify starting width Indica la anchura inicial + Specify starting width for next segment Indica la anchura inicial del siguiente segmento + Specify tangent direction for the start point of arc Indica la dirección tangente en el punto inicial del arco + Specify the elevation for rectangles Indica la elevación de los rectángulos + Specify thickness for rectangles Indica el espesor de los rectángulos + Specify third point on circle Indica el tercer punto del círculo + Specify third point on circle: _tan to Indica el tercer punto del círculo: _tan a + Specify third source point or Indica el tercer punto de origen o + Specify through point Indica el punto a atravesar + Specify top diameter Indica el diámetro superior + Specify top radius or Indica el radio superior o + Specify total angle Indica el ángulo total + Specify total length or Indica la longitud total o + Specify width for rectangles Indica la anchura de los rectángulos + Sphere Esfera + Spline Spline + Stack (type 1/2 then select) Apilar (escribe 1/2 y selecciona) + Standard Estándar + Start Inicio + Start Width Anchura inicial + Start X X inicial + Start Y Y inicial + Start angle Ángulo inicial + Start, Center, Angle Inicio, centro, ángulo + Start, Center, End Inicio, centro, fin + Start, Center, Length Inicio, centro, longitud + Start, End, Angle Inicio, fin, ángulo + Start, End, Direction Inicio, fin, dirección + Start, End, Radius Inicio, fin, radio + Status Estado + Status Bar Barra de estado + Stretch Estirar + Style: Standard Estilo: Standard + Subtract Sustracción + Sweep Barrido + Switch Drawing Cambiar dibujo + Switch Layout Cambiar presentación + Switch between model space in a viewport and paper space Alternar entre el espacio modelo de una ventana gráfica y el espacio papel + Symmetric Simétrica + Synchronize Attributes Sincronizar atributos + Toggle PICKADD (off: each pick replaces the selection) Alternar PICKADD (desactivado: cada clic reemplaza la selección) + Toggle PICKADD (on: picks add to the selection) Alternar PICKADD (activado: los clics añaden objetos a la selección) + TOP SUP. + Table Tabla + Table Style... Estilo de tabla... + Table style Estilo de tabla + Table... Tabla... + Tan, Tan, Radius Tangente, tangente, radio + Tan, Tan, Tan Tangente, tangente, tangente + Tangent Tangente + Text Texto + Text Editor Editor de texto + Text Height Altura del texto + Text Style... Estilo de texto... + Text height Altura del texto + Text override Texto alternativo + Text style Estilo de texto + Thaw All Layers Reutilizar todas las capas + There is nothing here yet. Todavía no hay dibujos aquí. + Thickness Espesor + Time Tiempo + To get started, create or open a drawing. Para empezar, crea o abre un dibujo. + Tool Bar Barra de herramientas + Tool Sets Herramientas de dibujo + Tools Herramientas + Torus Toroide + Trace Trazo + Transparency Transparencia + Trim Recortar + True Color Color verdadero + Turn All Layers On Activar todas las capas + Turn Off Layer Desactivar capa + Turn Quick Properties off (QPMODE) Desactivar propiedades rápidas (QPMODE) + Type Tipo + Type a command Escribe un comando + Type text; Enter starts a new paragraph Escribe el texto; Intro inicia un párrafo nuevo + UCS Icon Icono del SCP + Undo Deshacer + Undo (⌘Z) Deshacer (⌘Z) + Ungroup Desagrupar + Union Unión + Unisolate Layer Deshacer aislamiento de capas + Units... Unidades... + Unlock Layer Desbloquear capa + Unmerge Cells Separar celdas + Unsaved Layer State Estado de capas sin guardar + Up Arriba + Update Actualizar + Use System Setting Usar configuración del sistema + User Usuario + User Parameters Parámetros de usuario + Username Nombre de usuario + VP Color Color en ventana + VP Freeze Inutilizar en ventana + Value Valor + Value: Valor: + Version Versión + Version {version} Versión {version} + Vertical Vertical + VerticalDistance Distancia vertical + View Vista + ViewCube Cubo de vistas + Viewport Ventana gráfica + Viewport Layer Freeze Inutilizar capas en ventana gráfica + Viewport Properties Propiedades de ventana gráfica + Viewport {id} Ventana gráfica {id} + Viewports Ventanas gráficas + W O + WCS ⌄ SCU ⌄ + White Blanco + Width factor Factor de anchura + Window Ventana + Wipeout Cobertura + Workspace Switching Cambiar espacio de trabajo + Write Block Escribir bloque + Xline Línea auxiliar + Yellow Amarillo + Yes Sí + Zoom Zoom + Zoom All Zoom a todo + Zoom Extents Zoom a extensión + Zoom In Acercar + Zoom Object Zoom a objeto + Zoom Out Alejar + Zoom Previous Zoom anterior + Zoom Window Zoom por ventana + error error + {contributors} · {commits} {contributors} · {commits} + {kind} (constraint {id}) {kind} (restricción {id}) + {kind} constraint {name} = {expression} (double-click to edit) Restricción {kind} {name} = {expression} (doble clic para editar) + {name}: {distance} < {angle}° {name}: {distance} < {angle}° + ƒx New User Parameter ƒx Nuevo parámetro de usuario + ΔLOC ΔLíneas + −Bin −Bin + −LOC −Líneas + ⌘↩ to finish ⌘↩ para terminar +@plural {n} commit {n} commit|{n} commits +@plural {n} contributor {n} colaborador|{n} colaboradores + Drawing as bytes Dibujo como bytes + Services Servicios + Hide CADCraft Ocultar CADCraft + Hide Others Ocultar otros + Accessibility Accesibilidad + Show System Cursor Mostrar cursor del sistema diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index 79aea273..c9dca564 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -21,10 +21,12 @@ pub enum Preference { BrazilianPortuguese, #[serde(rename = "de")] German, + #[serde(rename = "es")] + Spanish, } impl Preference { - pub const ALL: [Self; 5] = [Self::Auto, Self::English, Self::Ukrainian, Self::BrazilianPortuguese, Self::German]; + pub const ALL: [Self; 6] = [Self::Auto, Self::English, Self::Ukrainian, Self::BrazilianPortuguese, Self::German, Self::Spanish]; /// The codes a preference can be given as, for messages ("auto, en or uk"). pub fn codes() -> String { @@ -42,6 +44,7 @@ impl Preference { Self::Ukrainian => "uk", Self::BrazilianPortuguese => "pt-BR", Self::German => "de", + Self::Spanish => "es", } } @@ -52,6 +55,7 @@ impl Preference { Self::Ukrainian => "Українська", Self::BrazilianPortuguese => "Português (Brasil)", Self::German => "Deutsch", + Self::Spanish => "Español", } } @@ -70,6 +74,7 @@ impl Preference { Self::Ukrainian => "uk", Self::BrazilianPortuguese => "pt-BR", Self::German => "de", + Self::Spanish => "es", Self::Auto => locales.iter().find_map(|s| locale_language(s)).unwrap_or("en"), } } @@ -86,7 +91,7 @@ pub struct Language { catalog: OnceLock>, } -pub static LANGUAGES: [Language; 4] = [ +pub static LANGUAGES: [Language; 5] = [ 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() @@ -101,6 +106,8 @@ pub static LANGUAGES: [Language; 4] = [ }, // German plurals follow the English rule: one (1), other. Language { code: "de", name: "Deutsch", source: include_str!("de.tsv"), plural: plural_en, plural_forms: 2, catalog: OnceLock::new() }, + // 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() }, ]; /// 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 f0a728ea..e34836dd 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"]; +const REPORTED: &[&str] = &["pt-BR", "de", "es"]; fn check(language: &str, what: &str, missing: Vec) { if REQUIRED.contains(&language) { @@ -152,7 +152,12 @@ fn locale_and_saved_preference_resolution() { assert_eq!(locale_language(tag), Some("pt-BR"), "{tag}"); } assert_eq!(locale_language("ptolemy"), None); - assert_eq!(Preference::Auto.resolve(&["es-ES".into(), "pt-BR".into()]), "pt-BR"); + assert_eq!(Preference::Auto.resolve(&["fr-FR".into(), "pt-BR".into()]), "pt-BR"); + for tag in ["es", "es-ES", "es_MX.UTF-8", "ES-ar"] { + assert_eq!(locale_language(tag), Some("es"), "{tag}"); + } + assert_eq!(Preference::Auto.resolve(&["es-ES".into(), "pt-BR".into()]), "es"); + assert_eq!(Preference::parse("es"), Some(Preference::Spanish)); assert_eq!(Preference::BrazilianPortuguese.resolve(&["uk-UA".into()]), "pt-BR"); assert_eq!(Preference::parse("pt-BR"), Some(Preference::BrazilianPortuguese)); let locales = vec!["pl-PL".into(), "uk-UA".into(), "en-US".into()]; diff --git a/crates/ui-egui/src/viewcube.rs b/crates/ui-egui/src/viewcube.rs index 0cefd0a4..6f3ec0a3 100644 --- a/crates/ui-egui/src/viewcube.rs +++ b/crates/ui-egui/src/viewcube.rs @@ -90,14 +90,14 @@ pub fn show(app: &mut CadApp, ui: &mut egui::Ui, l: &Layout) { let lc = Color32::from_rgb(0xc8, 0xcc, 0xd2); let c = l.center; let ring = l.ring; - p.text(c + vec2(0.0, -ring - 1.0), egui::Align2::CENTER_CENTER, "N", f.clone(), lc); - p.text(c + vec2(0.0, ring + 1.0), egui::Align2::CENTER_CENTER, "S", f.clone(), lc); - p.text(c + vec2(ring + 1.0, 0.0), egui::Align2::CENTER_CENTER, "E", f.clone(), lc); - p.text(c + vec2(-ring - 1.0, 0.0), egui::Align2::CENTER_CENTER, "W", f, lc); + p.text(c + vec2(0.0, -ring - 1.0), egui::Align2::CENTER_CENTER, crate::tl!("N"), f.clone(), lc); + p.text(c + vec2(0.0, ring + 1.0), egui::Align2::CENTER_CENTER, crate::tl!("S"), f.clone(), lc); + p.text(c + vec2(ring + 1.0, 0.0), egui::Align2::CENTER_CENTER, crate::tl!("E"), f.clone(), lc); + p.text(c + vec2(-ring - 1.0, 0.0), egui::Align2::CENTER_CENTER, crate::tl!("W"), f, lc); let face_col = if part == Some(Part::Face) { Color32::from_rgb(0xb8, 0xbc, 0xc2) } else { Color32::from_rgb(0x9a, 0x9e, 0xa4) }; p.rect_filled(l.face, 2.0, face_col); p.rect_stroke(l.face, 2.0, Stroke::new(1.0, Color32::from_rgb(0x6c, 0x70, 0x76)), egui::StrokeKind::Inside); - p.text(c, egui::Align2::CENTER_CENTER, "TOP", egui::FontId::proportional(13.0), Color32::from_rgb(0x50, 0x54, 0x5a)); + p.text(c, egui::Align2::CENTER_CENTER, crate::tl!("TOP"), egui::FontId::proportional(13.0), Color32::from_rgb(0x50, 0x54, 0x5a)); paint_home(&p, l.home, part == Some(Part::Home)); let resp = match part {