Compare commits

...

95 Commits

Author SHA1 Message Date
jyviko 01c86d9cb1 solidcore: affine maps from an application's numbers, and ops::affine (#15239)
The kernel builds the maps (math.rs, not upstream), in Transform's
row-vector convention (rows 0-2 the images of the axes, row 3 the
translation):
- Transform::rotation(point, axis, angle): Rodrigues' formula about the
  line through point along axis (made unit), transposed for rows;
- Transform::uniform_scaling(centre, factor), keeping its centre;
- Transform::reflection(origin, normal): I - 2 n n^T and 2 (origin.n) n,
  every entry exact for an axis normal, so twice is the identity exactly.
Each refuses numbers not finite, an axis or normal of no length, and a
zero factor (InvalidInput, "math::Transform").

solidcore-ops::affine forwards them as the matrices Body::transform and
curve::transform take: translation, rotation, scaling (a positive factor;
a mirror is reflection), reflection and then (first, then second, through
Transform::concat; a result not finite is refused), each Argument for what
it refuses. The ban list keeps the new constructors and concat for ops:
the kernel computes, ops calls (ban_list.py, clippy.toml).

Tests: kernel, a quarter turn about z takes x to y and a turn keeps its
line and lengths, a scale keeps its centre, an axis mirror maps exactly
and twice is the identity, a slanted mirror keeps its plane, refusals.
Ops, the mirror in y = 0 is the y-mirror matrix, axis mirrors twice are
the identity exactly, x to y under a quarter turn, a slanted turn keeps
its line, a scale keeps its centre, two moves stack to their sum exactly,
every result regular at REGULAR_RATIO, refusals and an overflowing stack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
2026-11-11 21:43:36 -05:00
jyviko e64c6af4d4 solidcore: a line skew to the revolve axis sweeps its hyperboloid, not a cone (#15209)
* solidcore: a line skew to the axis revolves onto its hyperboloid, not a cone

sm_CreateAnalyticRotationalSweep (the whole turn's one-curve special
case) made a line neither parallel nor square to the axis the cone
through its end circles: their radii and axial positions, without
asking whether the line and the axis lie in one plane. A skew line
sweeps a hyperboloid of one sheet, whose radius is the root of a
quadratic in the axial coordinate; the cone meets it only at the ends.
The line [600,0,0]-[700,0,200] about [500,-50,0] along [40,80,300]
came out 3.85 mm inside it, 44% along (WR-776).

New primitive_creation::p1::coplanar_with_axis(axis_base, axis, start,
end, tol): parallel lines, or a common perpendicular no longer than tol.
The cone branch returns SM_ERR before any edit for a line it fails at the
B-rep's tolerance, so the whole turn's per-curve rule gives the line its
SurfOfRevolution (with revolve_analytic_profile_faces, analytic_revolution
first, which already refuses a curve outside one half-plane through the
axis). The result changes only for skew lines; no flag.

Test: a_line_skew_to_the_axis_revolves_onto_its_hyperboloid, fix off
and on: at 25 x 25 parameters of every face, the point's distance from
the axis equals the profile point's at the same axial coordinate within
1e-6, both measured from the profile's and axis's numbers. Upstream
record WR-776, with the related perpendicular-line ring left open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: drop the unused coplanar_with_axis re-export

It is used only inside primitives.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* solidcore: a skew line's refusal in the one-curve revolve is a described failure

The cone branch of analytic_rotational_sweep refused a line skew to the
axis with a bare SM_ERR, which the primitive routines no longer build
(error::primitive::tests::the_primitive_routines_build_no_bare_statuses).
It is now SolidError::primitive_failed with what is wrong, as the branch's
neighbours (a line on the axis, a planar face not built) describe theirs.
The caller ignores it the same way and gives the line its surface of
revolution; the status it stands for is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:43:16 -05:00
jyviko 295a5e1410 solidcraft-control: the control client, shared; the MCP bridge on top of it (#15125)
client::Connection is the app-independent half of the MCP bridge's
Remote: a connection to an app's loopback control port with the app's
token (auth::App::client_token) on every request, one write and one
bounded read (MAX_REPLY) per request, a fresh connection after a lost
one (a request sent once more, or never twice for Request::once), and
the wait for a request the app says is still running, through
control.pending, with the waits as parameters. CallError tells an app
that is not running (with how to start it, from the App's name and the
port) from one lost during the call, a request still running, the app's
refusal and a bad reply.

Remote keeps only what is the MCP bridge's: the agent's folders on every
request, the engine's names and effects for requests, the param-check
handshake and engine.batch sent once. Its messages are unchanged, except
the "did not answer" one, which lost a run of spaces in the middle.

Tests against a server::Hub on an ephemeral port: a round trip with the
token, a wrong or missing token refused, not running, lost mid-call and
reached again once back, a connection closed without a reply, and a
request still running waited for through control.pending.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
2026-11-11 21:42:52 -05:00
jyviko 81afe5b90d solidcore: n-sided boundary patches and soft CV moves on sheets (#15106)
* solidcore: loft_rails' skin-and-certificate loop as one crate function

The loop that places stations at span middles, skins the wires, bounds
each rail against the skin on every span (certificate::span_bound),
refines unproved spans at their middles and refuses past the wire cap
moves, unchanged, into loft_rails::skin_and_certify, which loft_rails
calls with its own station placement. Plain, Wire and StationAt become
crate-visible for it. No behaviour change; a two-rail sweep will place
its stations through the same loop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a certified n-sided fill of a loop of curves

nurbs::n_sided runs the kernel's fill (N four-sided patches round a centre) and
certifies it: each half of each boundary curve against the patch side it is
(certified_distance plus split and extraction rounding, in the loop's own
frame), and every inner join between two patches (G0). Tangency across the
inner curves is the fill's aim within its angle tolerance and is stated as
not certified. Rational curves refused; equal weights taken as polynomial
(gordon's helpers now shared within the crate). Tests: a regular pentagon of
lines fills flat within 1e-9; a rational side is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: boundary patches of five or more curves, the certified n-sided fill

surface::n_sided(curves) -> (Brep, bound): the loop's curves turned end to end
as boundary takes them, the kernel's certified n-sided fill (nurbs::n_sided),
its N faces stitched into one sheet; refused for a rational curve
(Unsupported) or a boundary or inner join past the zone tolerance
(PastTolerance). surface::boundary now takes five or more curves through it.
Tests: a regular pentagon of lines fills flat with five faces joined along five
inner edges; five cubics on a saddle bound their patch within the bound; five
arcs on a sphere are refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* Move a sheet's CV rows, columns or points, with a soft-select falloff

solidcore_ops::surface_cvs::move_net moves picked rows (u indices),
columns (v indices) or control points by a delta. With a Falloff (a
radius in index steps and a Linear or Smooth shape) the points around
the picks move too, each by its weight: 1 at a pick, falling with its
index distance (along u for rows, along v for columns, the square ring
for points), 0 past the radius. net_weights gives the table, for a
preview; an index distance and a weight are no geometric quantity.

The move itself is the kernel's: srf_basic::Surface::displace_cpts
moves each listed point by its fraction of the delta (a rational
point's weighted coordinates by w t delta, its weight kept), all or
nothing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the soft-move falloff weight is the kernel's

solidcore-ops denies float arithmetic outside tests, and falloff_weight
computed s = d / (radius + 1) and the linear and smoothstep weights itself.
The weight is now nurbs::srf_basic::falloff_weight with FalloffShape, beside
displace_cpts, which takes it; ops maps its Shape and calls it. Same formula,
same values.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the proven loft drain is in skin_and_certify now

The full-range drain of the pending stations moved from loft_rails into
skin_and_certify with the loop; its panic-sites row follows it, same proof.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:42:31 -05:00
MarkusRe 937722290a solidcore-ops: every kernel offset refusal has a named reason, no text catch-all (#15035) (#15160)
* claim: #15035

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore-ops: test that every kernel offset refusal arrives named, not as text (#15035)

The kernel's offset routines fail with a phrase of their own (`OffsetFailure::Failed`,
`Missing`, `InvalidValue`, `Inconsistent`). Ops has no variant for them, so they reach the
app as `OffsetRefusal::Other { message }`, the kernel's text. The table of
`every_other_offset_refusal_says_why_and_where` now expects a named variant for each,
keeping the kernel's phrase. On main it does not build: `OffsetRefusal` has no such
variants.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore-ops: name every kernel offset refusal, delete the text catch-all (#15035)

`OffsetRefusal::Other { message }` carried any kernel offset reason ops did not list as
the kernel's text, and a match arm `other => unnamed(&other)` sent it there. The reasons
that took it were the offset routines' own failures: `Failed`, `Missing`, `InvalidValue`
and `Inconsistent`, each a fixed phrase.

- `OffsetRefusal` gets a variant for each of the four, keeping the kernel's phrase, and
  says it as the kernel does. `Other` and `unnamed` are gone.
- `offset_refused` names every `OffsetFailure`, with no wildcard arm. `Folds`, `WallsTouch`
  and `EdgeVanishes` go to `Error::WallFolds`, `Error::WallsTouch` and
  `Error::Unsupported` there, as before; `status` sends any offset reason to it and maps
  only reasonless errors by kind, so the mapping lives in one place.
- The kernel's `OffsetFailure` is no longer `#[non_exhaustive]`: across crates that
  attribute forces a wildcard arm, so a new kernel reason would still compile.
- The test that read `unnamed` is replaced by a check in the table test that the four
  phrases are said in the kernel's words, as they were as text.
- docs/offset-and-shell.md said `Collapses` reached the caller as a bare status; it has
  had its own refusal since #14783.

No result changes: every refusal keeps its error, and the four keep their text.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore-ops: an offset refusal names the failure's face, and a draft's too (#15035)

- `status` takes the face from the failure (`Failure::entity`), not only from the reason:
  the two agree unless the kernel set the face itself (`Failure::at`), as a draft does for
  a face without a surface, whose reason names none.
- The surface a draft gives a face: a kernel failure there goes through `status` as the
  local operation's does, so an offset reason reaches the caller named with its face
  instead of as the kernel's status.
- docs/offset-and-shell.md: the sheet offset and the symmetric thicken do not reach the
  mapping yet, since `offset_brep` wraps its executive's failure in one of its own.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: test that an offset failure keeps its class, and a phrase arrives as one (#15035)

Review on #15160: `OffsetFailure` stays `#[non_exhaustive]`, so ops has to match it with a
wildcard. What keeps a new reason from reaching ops as text alone is then the kernel's own
classification. `every_offset_failure_keeps_its_class` pins every reason's class and whether it
is a phrase (a routine's failure without a cause of its own yet) or a defect of the kernel
(`Inconsistent`); its exhaustive `row` does not compile without a row for a new reason.

In ops, the phrase causes arrive as one transitional `OffsetRefusal::Phrase` that carries the
class, the defect flag and the kernel's words, instead of four named refusals, and only a
phrase arrives as one. The wildcard helper `unnamed` keeps its test, now expecting the class.

Neither builds at the previous head: `OffsetFailure` has no `is_phrase`/`is_defect` and
`OffsetRefusal` no `Phrase`.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore-ops: a kernel phrase arrives as one transitional refusal with its class (#15035)

Review on #15160 (bherbruck), lining offset up with the blend failure record (#15090):

- `OffsetFailure` keeps `#[non_exhaustive]`: solidcore is a general kernel, and a new reason
  must not break downstream crates. Completeness comes from inside the crate instead: the
  exhaustive `is_phrase()` and `is_defect()` next to `kind()`, pinned by
  `every_offset_failure_keeps_its_class`.
- The four phrase causes are not frozen as named public refusals. They arrive, with any reason
  ops does not name yet, as `OffsetRefusal::Phrase { class, defect, phrase }` (transitional),
  through the wildcard arm (`unnamed`). `Inconsistent` is a defect, not a refusal.
- The face is read through `SolidError::entity()`, not the `Failure.entity` field, which #15090
  makes crate-private.
- `OffsetRefusal` is `#[non_exhaustive]`, so ops can name more reasons without breaking callers.

The doc paragraph says so, and now also that `DistanceUnresolved` and the merge check's
`Unsound` reach ops with their reasons in the sheet offset and the symmetric thicken; only the
executive's own failures are wrapped by `collapse_offset_status`.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore-ops: a reason ops does not name keeps the error its class has (#15035)

The wildcard arm of `offset_refused` sent every unnamed reason to `OffsetRefusal::Phrase`.
On main, `status` looked at the error's kind first, so a new reason of the walls-touch, fold or
vanishing-edge kind (such as the `SectionOrderLost` that #14683 and #11776 add, of kind
`OffsetWallsTouch`) became `Error::WallsTouch`, `WallFolds` or `Unsupported`. `by_kind` now holds
that mapping, and both `status` and the wildcard arm use it, so such a reason keeps its error
until ops names it. The unnamed-reason test checks the mapping.

The kernel test's doc says what forces a new reason to be classed (the exhaustive `kind`,
`is_phrase` and `is_defect`), `is_defect` says it is per cause until offset has classes of its
own, `draft` lists `Error::OffsetRefused`, and §4.2 of the doc follows.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-12 02:04:34 +00:00
Sam fdc13eaef5 Split Face: a loops option splits a face along a sketch's closed shapes (#15225)
With loops: true, the sketch's curves are joined end to end before the
split, so a closed shape of several curves (a triangle, a slot) splits
the face along itself instead of each side being extended across the
face. Off by default; open curves are extended as before.
2026-11-12 02:03:15 +00:00
bherbruck fa3d016da8 solidcore: offset reach: a meeting's distance takes the trace's |u| (#14830) (#15201)
The trace's direction u is unit only to rounding (d / sqrt(|d|^2)), and a
point x0 + tau u is |tau| |u| from the foot, not |tau|. planned's bounds
(Roots, Touch, Cover) now take foot^2 + tau^2 (u . u), u . u enclosed with
its rate, so an upper bound cannot sit an ulp below the distance. The
kept straight edge's meeting with a plane (now line_meets_plane) encloses
|x0 + tau u - p| directly, since its x0 is the foot only for |u| = 1, and
its curve-deviation slack takes the sine |u.nu| / (|u| |nu|).


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:48:18 +00:00
bherbruck 185667c004 geom: the global solver adds a solution without copying the ones it holds (#15200)
GlobalSolve::add_sorted_solution compared against the stored solutions by copying each one,
and its pass that combines overlapping solutions copied both of every pair and wrote both back
(about a million pairs on a two-cylinder cut). SolutionArray::at borrows what get_at copies and
pair_mut hands out two distinct solutions (i < j, bounds-checked), so both work in place.
combine_min_max changes the pair only on its split path, after its only fallible call, so the
result on success and the untouched pair on error are as with the copies. Order and logic are
unchanged. brep-bench boolean/tube-flush-ends (callgrind): instructions 3,966,547,083 ->
3,440,780,489; memcpy calls from add_sorted_solution 7,106,860 -> 996,945; STL byte-identical.
Part of #14830.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:48:10 +00:00
bherbruck b935118729 Release builds run on Blacksmith runners (#15227)
Linux, Flatpak, Arch, snap, FreeBSD, macOS, web and the release job move to Blacksmith, as CI
did. The version and Windows jobs stay on GitHub's runners: SignPath Foundation only signs a
request when every job leading up to it ran on a GitHub-hosted runner.

The icons job is gone: make_icons has only copied the committed icon files since #833, so its
15-minute CLI build held up the Windows jobs for nothing. package.ps1 already falls back to the
same committed solidcraft.ico.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:47:04 +00:00
MarkusRe 5cd9b8ffc6 solidcore: six fillet solver fixes become the only path (#14246 batch B27) (#15045)
* claim: #14246 batch B27 (six fillet solver flags)

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: B27 tests run on the default kernel (test first)

The tests of six fillet solver flags (WR-301 fillet_rail_rim_on_face,
WR-422 fillet_torus_center_on_axis, WR-568 fillet_torus_span_from_start_section,
WR-592 fillet_torus_rail_on_axis, WR-603 fillet_trace_from_tangent_point_toward_next;
WR-595 fillet_tangent_point_one_sided_step is shown by the goldens) now
assert the fixed result on Kernel::default() and drop their off halves.
On main's code they fail; the next commit makes the fixed paths the
only ones.

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: six fillet solver fixes become the default (retire their flags, B27)

The fixed paths of six UpstreamFixes flags of the fillet solver are now
the only ones, and the fields, the off paths and every preset line go:

- fillet_rail_rim_on_face (WR-301): the rollover joins a rail's
  neighbouring intervals on its face before it runs (p5.rs).
- fillet_torus_center_on_axis (WR-422), fillet_torus_rail_on_axis
  (WR-592), fillet_torus_span_from_start_section (WR-568): the torus
  round's section on the arc's axis, its rail point on the axis and its
  span from the start section (p2.rs).
- fillet_trace_from_tangent_point_toward_next (WR-603) and
  fillet_tangent_point_one_sided_step (WR-595): a trace from a tangent
  point starts toward the next point and takes its tangent from the
  forward step (p4.rs).

Fixtures 1080 and 4055 no longer opt in; each WR record gets an
addendum.

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* goldens: bless the 25 rows the six fillet solver fixes move (B27)

blend.fillet_executive_p3 (14 rows) and blend.fillet_solver_p4 (11 rows)
move; no other unit does. Two rounds along a boolean's arc are now built
(WR-568) and match the same box turned 90 degrees, which already built;
five rows move by roundoff with a rail point on the axis (WR-422,
WR-592); seven stub rounds traced from a tangent point move by at most
1.4e-7 of their volume (WR-595, WR-603); eleven generated tangent points
take the forward step (WR-595). Every row, with the flag that moves it:
plan/findings/blend.fillet_solver--b27-six-flags-retired-2026-11-11.md.

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: B27 tests and notes after review

no_room_refusals_are_named took the holed cube's round of 5 on the
default kernel as its refusal under another code; with WR-301 the default
that round builds, so the test now takes a chamfer of 25 on the cube of
20 (SM_FILERR_BAD_INT). The WR-603 peg test pins its face count and the
added volume again. Module and doc comments name what is opt-in and what
is the default now; c3_trace_start drops a length check the pattern
already makes; the findings file's numbers are recomputed from the rows.

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: WR-512 arc round test allows the default torus span (B27)

the_flag_builds_the_arc_round compares the default kernel with WR-512 to
the pinned C++ with the fork's WR-512 line at 1e-9. With WR-568 the
default, the arc round's torus span comes from its start section, which
the pinned C++ does not do: 9531.3100487 against 9531.3100143, 3.6e-9
relative (with upstream's span they agree to 1e-12; none of the other
five B27 fixes moves it). The test now allows 1e-8, as its neighbour
with every fix does.

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* plan: B27 findings name every moved golden row with its values

Part of #14246 (batch B27).

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: no_room_refusals_are_named keeps the chamfer of 5, now built (B27 review)

The holed cube's chamfer of 5 was the test's refusal under another code;
with WR-301 the default it builds, to the closed form 4000 - 12.5 * 20.
The test now asserts that, and keeps the chamfer of 25 on the cube as the
refusal that names no NoRoom reason.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: WR-512 arc round test pins the C++ volume with WR-568's span (B27 review)

Instead of widening the_flag_builds_the_arc_round to 1e-8, compare at the
old 1e-9 with a new reference: the pinned C++ with the fork's WR-512 line
and WR-568's span line (smlib 985faae) both linked ahead, 9531.3100486849.
The default kernel gives 9531.3100486743, 1.1e-12 relative.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-12 01:43:06 +00:00
Daniel 02afa23329 Preferences: the Placement handles row is "Placed features", and its tip is true for the primitives (#14766)
* Preferences: the Placement handles row is "Placed features", and its tip is true for the primitives

Box, Cylinder, Cone, Sphere, Torus and Coil have the placement marker
too, but the Preferences row was labelled "Rest, Boss, Snap Fit", and 22
translations of the tooltip still named those three features only. The
tooltip also promised a ring to turn the feature, which the primitives
do not have.

The label reads "Placed features" and the tooltip "A marker to drag the
feature across the model and, where the feature can turn, a ring to turn
it." in English and in every catalog that has the message. The setting
and its default are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Preferences search finds the Placed features row by each feature with the marker

With the row labelled "Placed features", searching Preferences for Rest,
Boss or Snap Fit no longer found Placement handles, as the old label did.
The row now gives the search the names of every feature that has the
marker (Rest, Boss, Snap Fit, Box, Cylinder, Cone, Sphere, Torus, Coil),
from their existing name keys, so it is found by any of them in the
current language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:30:46 +00:00
MarkusRe db742b4a8f Native body files: re-record the box-and-round wire record fixture, whose topology is only renumbered (#15057)
* claim: box-and-round native wire record fixture

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Native body files: re-bless the box-and-round wire record fixture

The rounded box's record numbers its vertices, edges and faces in a new
order since the solidcore update to 8ddce9016. Renumbered by geometry,
the old fixture matches the new record in every value within the test's
own tolerance (1e-10 relative): surfaces, domains, loops and pcurves,
curves, intervals, tolerances, uses, shells and history. The plain box's
record is unchanged byte for byte. Re-blessed with NATIVE_BREP_BLESS=1;
the test leaves tests/KNOWN_FAILING_TESTS.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-12 01:30:11 +00:00
N3MI-DG 0371e7d2d1 STL and 3MF export: Optionally export file on print face (backend) (#15204) (#15205)
* claim: #15204

* STL and 3MF export: a script can write each body turned onto its print face, without a slicer (#15204)

file.export, file.export_stl, file.export_3mf and file.save_mesh take
lay_on_print_faces: true. Each body with a print face is written laid on
it, as Send to Slicer lays it: the face down at Z = 0, the centre of mass
over the origin. The design does not move and nothing is added to undo.
The reply names the laid bodies in print_faces, with a warning for each
print face that can't be used. The default is false, so existing exports
are unchanged; formats other than STL and 3MF refuse true.

The slicer path's laying code is now one function every mesh export
shares, built for the web too. file.export_stl gets its own input
contract, since it shared one with file.export_obj.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:16:59 +00:00
infield 270573eb0b Opening older designs: inserted STEP parts keep their place and shape (#13382) (#14211)
* claim: #13382

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Opening older designs: inserted STEP parts keep their place and shape (#13382)

An Import feature keeps its body names and skipped bodies by the body
numbers of the STEP reader that inserted the file. The 0.40 reader numbers
some files' bodies otherwise (it reads bodies 0.30.1 left out), so on
opening each body took the next one's name, and the name put it in another
part's component: parts moved and took other parts' shapes.

When a design is evaluated on opening, match each body through the stored
component tree (same product, same position among its bodies) and move the
stored names and skip entries to today's numbering. A body only today's
reader has gets the reader's name and is skipped when a fresh insert would
skip it. Trees that disagree about their products are left as they are.
Designs that open from their saved model cache are not read again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:07:12 +00:00
ancient_astronaut_theorist 1155cdd918 Booleans: a join that fills a hollow completely gives a solid instead of an export error (#14414) (#14733)
* claim: #14414

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gr84VuQWHKtTwJ7cC3CP3W

* solidcore: a join that fills a void exactly gives a solid body (#14414)

A join whose tool exactly fills a body's internal void deleted the
void's faces correctly, but the joined region kept the void's flag:
merge data is recorded only when a face of the other body is copied in,
and when the tool's faces all lie on the void's faces nothing is
copied. The result was a box with an empty inside, which the export
refused ("a face between two material regions or two empty ones").

A face that a regularized operation deletes has the same class on both
sides: material for a union, empty for an intersection or a difference.
A region joined across a deleted face, where neither region has merge
data, now takes that class (deleted_face_sides, joined_without_data in
merge/p4.rs). Regression tests in solidcore-ops/tests/boolean.rs cover
cube and sphere voids filled exactly and by larger tools, a partial
fill, and the difference and intersection of a cube on the void.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gr84VuQWHKtTwJ7cC3CP3W

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 01:06:55 +00:00
ancient_astronaut_theorist 21c7836995 Hole tests: a hole across the part that touches none of its sides keeps the rest silently (#15119)
* claim: hole test off a tangency

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gr84VuQWHKtTwJ7cC3CP3W

* Hole test: the hole that crosses the plate no longer sits on a tangency

a_hole_wider_than_the_part_says_it_removes_all_of_it drilled its 40 mm
hole at (10, 10) in a 40 x 30 plate, so the hole's edge touched the side
y = 30 along the line x = 10. The corner it leaves at (0, 30) meets the
rest only along that line, and the kernel rightly parts it into 2 bodies
(4031.96 mm3 in all; exact 4031.95), where the test wanted 1.

The test is about what the hole says, so the hole moves to (10, 15): it
still crosses the plate's whole width but touches no side, and one body
remains (3623.44 mm3; exact 3623.43). The test leaves the known-failing
list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gr84VuQWHKtTwJ7cC3CP3W

* Hole tests: keep the touching case listed; a hole clear of the sides is its own test

The hole wider than the part goes back to touching the plate's side along a
line, with its known-failing line, as the record of that bug. The same hole
moved clear of the sides is a new test beside it: it keeps the rest in one
piece and silently, and says so once a parameter widens it past the part.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gr84VuQWHKtTwJ7cC3CP3W

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:58:52 +00:00
bherbruck b4e1178bdd solidcore: offset local reach bounds each edge once (#14830) (#15182)
local_extension_reach meets every edge from both its faces, and each
asks edge_interval_maximum for the same quantity on the same curve,
interval and tolerance, so the same bits. The offset executive keeps the
bounds one local operation has found (EdgeBounds, by edge and quantity:
a moved face's shift or a plane-quadric meeting), and the second face
takes the first's where everything the bound is a function of has the
same bits: the curve, interval, tolerance and the surfaces' exact
classes. They are cleared when the local surfaces are set and when the
relations are cleared, never kept across operations.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:48:19 +00:00
bherbruck 9a84ab0102 Cargo.lock: solidcraft-format at 0.40.1, the workspace version (#15221)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:18:49 -05:00
bherbruck 1ecfb4ef30 Release 0.40.1 (#15213)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:11:25 -05:00
jyviko d063e81eff Format machinery and design container in a shared crate: solidcraft-format (#14997)
* Format machinery in a shared crate: solidcraft-format, designs and drawings registered with it

What every versioned file format needs moves out of crates/doc into the new shared crate
`solidcraft-format` (crates/format, serde_json only): a family's format tag and its legacy tag,
the version registry (the hand-written steps, then one `v<N>/` folder per format with a file per
change, then the pending changes that make the next number), reading a file's format and its
`format_pending`, telling a file a newer build wrote, the upgrade that runs each step once, and,
for a build script, the generated lists of the change files (`build::lists`). Steps are
JSON-level and return the app's own error; the crate's refusals are `FormatError`, which
`DocError` takes as `Invalid` with the same text.

crates/doc keeps everything that is SolidCraft's: its 22 hand-written steps and their history,
every v*/ and pending/ change file unchanged, the DESIGN and DRAWING families (now values of the
shared type, with the app's name for messages), the one alias a format-29 design may carry for
the engineering material cards (now data on the family instead of a rule in the machinery),
`read`, `decode` and every check, and newer_file. `format::Family`, `Newer`, `FORMAT`,
`format_string`, `version_of` and `pending_names` keep their names, so no caller changes; the
number range check of a family's file is doc's own (`CheckNumbers`). build.rs lists the change
files through the shared crate and keeps its FAMILIES for the release script.

Nothing about reading or writing a file changes: the same steps run in the same order, with the
same messages and the same generated lists. The format tests that built a `Formats` and called
its upgrade now build the family around it (`Family { formats, ..DESIGN }`) and call the
family's, with the same expectations. The crate has its own tests of the registry and the
upgrade, and a README; xtask's layer table lists it as shared.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* Shared format crate: newer-file keeping and the ZIP container, SolidCraft's design on them

Two more pieces of the file machinery move into `solidcraft-format`, each with what is SolidCraft's
left in its app crates:

- `newer`: opening a file a newer build saved without losing what this build can't read.
  `NewerFile` (its notice, warnings and report, worded with the app's name), the comparison of
  the file with what was read of it and the putting back on saving (`compare`, `restore_into`),
  the sections and list elements left out and kept (`keep_section`, `keep_element`,
  `leave_out_unreadable`, `read_around`). crates/doc keeps what is a design's: a feature it can't
  read stays on the timeline as a placeholder, a parameter is left out, the sections a design
  can't open without, the fields a container adds; `newer_file::NewerFile` is the shared type
  and `newer_file::newer_file(&newer)` makes one for SolidCraft.
- `container`: the ZIP package (`Writer`, `Reader`): parts never extracted to paths, the
  directory checked on opening, content-addressed blobs `blobs/<sha256>.<ext>` hash-checked when
  read, every size within the app's `Limits`, room for optional caches, `Compression`, and the
  `Thumbnail` keyed to its file. crates/io keeps its budgets (the preference-driven limits, the
  STEP and mesh rules), the payload encodings (meshes, point clouds), the HDR and texture
  manifests, the model cache, the preview's meshes and its container tag; `DesignCompression` is
  the shared `Compression`, and the shared crate's refusals read as a design container's.

Files are read and written as before, byte for byte: the same parts, names, levels and keys, the
same checks in the same order, the same messages. The io and doc tests are unchanged. The shared
crate has its own tests of the container (parts, blobs, budgets, the thumbnail's key) and of
newer-file keeping.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* io: the model cache key covers the shared format crate

The saved model is read through solidcraft-format now, so a change there must invalidate
cached models as a change in doc does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* Cargo.lock: solidcraft-format at the workspace's 0.40.0

The merge with main kept the new crate's lock entry at 0.40.0-rc.4 while
main's release moved the workspace to 0.40.0, so every --locked cargo call
refused to update the lock.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:39:47 +00:00
thocsmith 86e93510f0 Show Dimensions: a dimension is sized from whichever sketch direction reaches the screen (#14826) (#15197)
A view where the sketch's y direction did not project skipped the
dimension, though its x direction (all the code before #14881 used)
did. mm_per_pixel now takes the longer of the directions that project
and gives no size only when neither does.

Co-authored-by: thocsmith <193096300+thocsmith@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:31:33 +00:00
CaRLymx f9bb74f155 Catalan (ca): translate 190 messages (#15194)
Catch-up with `en.json` at `c37dc53d3`.

Co-authored-by: carlymx <24634598+carlymx@users.noreply.github.com>
2026-11-12 00:19:10 +00:00
CaRLymx 06f8f6a358 Spanish (es-ES): translate 170 messages (#15192)
Catch-up with `en.json` at `c37dc53d3`.

Co-authored-by: carlymx <24634598+carlymx@users.noreply.github.com>
2026-11-12 00:17:04 +00:00
dudedagger42 7371a086b4 Loft rails take sections whose curves differ in kind (#12512) (#13909)
* Loft rails: tests for sections whose curves differ in kind (#12512)

A half-disc (arc and line) lofted to itself along a straight rail, the
half-disc to a rectangle along a bulging rail, and a quarter pie to a
third-of-a-turn pie: all refused on main ("curves differ in kind").

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Loft rails: take sections whose curves differ in kind (#12512)

loft_rails::railed required every section's k-th curve to have the same
degree, knots and weights, so a line against an arc (or two arcs of
different turns) was refused. The sections' columns are now brought to
one form first (unified: each curve on [0, 1], raised to the column's
highest degree Bezier piece by piece, then given the union of the knots
by Boehm insertion; every curve unchanged, checked by a unit test), and
a station between sections takes its control points straight between
the sections' and its weights between theirs, so the weights need not
agree either.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-12 00:15:17 +00:00
Edigorin 82155898d9 Shell: build a shell on a cone with an apex instead of failing with status 1001 (#11774) (#14981)
* claim: #11774

* Cone: an offset truncated at its apex keeps the surviving end's parameters

The offset of a cone whose radius passes zero is the cone truncated at its
new apex, reparameterised to the matching part of its NURB domain. The
matching part sat at the domain's minimum end whatever end the radius
collapsed at, so a cone whose apex end collapses (a revolved cone, whose bot
radius is 0) got the part at the wrong end. Corresponding points did not
keep their (u, v), the rim's UV moved, and a shell could not pair the rim
edge use with its offset copy: the rim kept its raw normal-offset curve
instead of the mitre circle, and the loop-gap closure refused the step it
left behind (reported as status 1001, tangency-labs/solidcraft#11774).

Anchor the matching part at the end that survives: the top's end when the
bot radius passes zero, the bot's end when the top radius does. The
geometry is unchanged; only the parameters move. The regression test pins
both branches.

The kernel corpus gains the issue's recipe as a case, with its render, and
the finding is recorded in plan/findings.

Fixes tangency-labs/solidcraft#11774

Co-Authored-By: MiMo-V2.6-Pro <noreply@xiaomi.com>

* Cone: the truncated offset's box is anchored with the inside-out reversal

Review of the previous change (CodeRabbit on #14981) found two things: an
inside-out cone's NURB runs the generator backwards
(`cone_convert_uv_from_nurbs_to_step` maps the STEP minimum from the NURB
maximum), so the surviving end of an inside-out cone sits at the box's other
end and the anchor is the collapsed end XOR the inside-out flag; and the
regression test derived its expectations from the returned cone's height,
which would accept a wrong slope.

The anchor now carries the inside-out reversal. The test derives its
expectations from the input's radius law instead, and covers both collapse
ends and both inside-out values against the S + d n contract. Extending it
to truncated input cones surfaced a second, pre-existing defect in the same
branch (the kept height flattens a truncated input cone's slope); per this
repository's rules that is filed as an issue with its closed-form analysis
and the golden moves it causes, not folded in here.

Fixes tangency-labs/solidcraft#11774

Co-Authored-By: MiMo-V2.6-Pro <noreply@xiaomi.com>

---------

Co-authored-by: MiMo-V2.6-Pro <noreply@xiaomi.com>
2026-11-12 00:14:59 +00:00
bherbruck 34cbfbc668 Loft through parallel sections no longer dips behind its first section, so a carved top joins onto its slab again (#15176)
* Loft: sections on parallel planes are skinned at their planes' distances, so the loft stays between its end planes

A loft through three or more sections on parallel planes took chord-length parameters
across the sections, from the whole motion of their control points. Where the sections
move far sideways for a small step up (a carved top's first steps: 10 to 24 mm sideways
for 0.6 mm up), the cubic interpolant of the height overshot: the side dipped below the
first section's plane and crossed its own start cap. Joining such a loft onto the body
whose face it starts on then failed ("the mapped B-rep does not validate: outer loop is
not an edge loop", or "the union would delete face ..."), or came out wrong.

The skin now takes each section's parameter as its plane's distance from the first over
the last's. Every section's height is then one linear function of the parameter, which
the interpolation reproduces exactly: the side faces' control points lie between the end
planes, so by the convex hull the loft does too. Sections that are not all parallel, or
not in order along the normal, keep the chord-length parameters.

Results that change: lofts through three or more parallel sections whose spacing differs
from their chord lengths take a slightly different shape between the sections (the same
sections, interpolated at different parameters). One golden moves:
boolean.api_brep issue1036_coincident_skins_intersection_measured, two degree-1 skins
whose ruled surfaces are the same point set under any parameters; its volume moves
26136.268243625735 -> 26136.26817288386 (2.7e-9 relative, the integrator's 1e-6
accuracy) and one face area 3788.658561467813 -> 3788.6586869951957 (3.3e-8, against
1e-4).

Tests: solidcore tests/skin_parallel_sections.rs (control points within the slab; union
with a slab under the first section adds the volumes; both fail without the change, the
first at a control point 0.24 below the first plane, the second with a negative union
volume) and the app regression examples/regressions/loft_join_carved_top_on_slab.json
(the join's volume is the slab's plus the loft's built as its own body; 0.40.0 fails it
with the error above).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Loft: plane-distance parameters only where the chord-length skin leaves its end planes

Review of the previous commit: plane-distance parameters by default reshape lofts that
build correctly today (a waist r 20/10/20 at z 0/5/40 pinches through its axis; another
four-section loft grows 29%), and the parallel test is a hard cutoff.

The skin now takes upstream's chord-length parameters as before, and checks that skin's
control points against the slab between the first and last section planes (within the
B-rep's tolerance; by the convex hull the skin is in the slab when they are). Only when
one lies outside, on parallel sections in order, is every layer skinned again at the
planes' distances, where the height is linear in the parameter and the skin stays in the
slab exactly. Every loft whose chord-length skin stays between its end planes rebuilds bit
for bit; the carved top, whose control points fall 0.24 below its first plane, is still
fixed.

The boolean.api_brep golden moved by the previous commit is back to main's (no golden
changes: 283 units unchanged). New test: the waist and the four-section loft keep the
volumes measured with main's skin (16791.357595192487 and 272283.3927004977).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:12:19 +00:00
Jeff Jenner 7938171505 Groove: cut the bottom rim of a rounded shell without a gap (#14866)
Join each rim-band profile segment at the preceding arc's evaluated endpoint. Add a regression using the reported rounded shell dimensions and check the cutter, result, and removed volume.

Co-authored-by: bherbruck <brennen.herbruck@gmail.com>
2026-11-12 00:06:34 +00:00
dudedagger42 e3c27f0ba2 Sweep: say the profile reaches past a bend's centre, not SMLib status 1025 (#12126) (#13893)
* Sweep: say the profile reaches past a bend's centre instead of SMLib status 1025 (#12126)

SMLib sweeps each path arc as a turn about the arc's axis and refuses a
profile that crosses that axis with SM_ERR_AXIS_INSIDE_FACE (1025). The
kernel passed the bare status on; it now names the tightest bend's radius.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Sweep: the 1025 message asks the profile to clear every bend it turns towards, the tightest given as context (#12126)

Review on #13893: the tightest bend is not always the one the profile crosses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:06:17 +00:00
bherbruck 7c4b6c31fc ops: a controlled sweep through the kernel's stations, its walls named by the skin's trace (#13664) (#15098)
`sweep::controlled::sweep_controlled(profile, profile_normal, path, laws)` sweeps closed profile loops along a path of lines, arcs and helices by laws (orientation perpendicular, parallel or by a direction; twist; end scale; up to two guide rails, fitted by scale or stretch), capped at both ends, and returns which faces are the start and end caps and which profile curve each wall was swept from.

Every number is the kernel's: where the stations go (`sweep::stations::fractions`, SolidCraft's fit convention), each station's frame and map (`sweep::stations::stations`), and the skin through them. The walls are named by the kernel's trace of its own skin (`create_skin_primitive_with_sources`, #15062), not by the skin's face order, which is not the profile's (a square's wall 0 held its fourth side): each wall must hold one curve of each section, the same profile curve throughout, or the sweep is refused by name. A curve with a kink of its own sweeps a wall on each side of it.

SolidCraft's limits on the laws (four turns of twist, end scale 0.01 to 100, the least crossing angle and sine) live here and reach the kernel as its laws' limits; the kernel refuses only what has no sweep.

Refused, by name: a path with corners and a closed path (each its own construction: #13639, #13638). The cubic skin's distance from the law surface between stations is not certified (exact where the sections vary linearly along a straight path, as an end scale does; #13637).


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:05:44 +00:00
bherbruck 8273865c91 blend: plane_section without cancellation, so a tilted boss's round is its definition; drop the sampled bare-net fallback (#15037) (#15123)
plane_section took the principal axes of the section's quadratic form from
sqrt(tr^2/4 - det) and (a12, lambda - a11). Both cancel as the section nears a
circle, and the conic misses the offset cylinder by about eps / a^2. The #14000
case is a 1 mm round at the foot of an r5 boss on a 40 x 40 x 10 block, its
axis tilted a few degrees. There the spine's Bernstein coefficient was 1.06e-11
against a bound of 8.0e-13 at 1 deg, and 4.4e-11 against 8.0e-13 at 0.25 deg.
check_exact_net was right to refuse it.

The eigenvalues are now m +- hypot(h, a12) with h = (a11 - a22) / 2. Each axis
is written in the form whose terms add, and it is the same axis, sign included,
that upstream's form gives in exact arithmetic. Across tilts 0.25 to 5 deg, the
largest spine coefficient is 4.3e-14 and the largest coefficient/bound ratio is
0.067. Every round certifies with its exact definition.

With that fixed, keep_round_if_proved's fallback goes. It kept a round whose
certificate failed as a bare net with no definition and no bound, whenever 17 x
17 samples (net_miss) found the net within tolerance, which breaks §7.1, §7.4
and §7.6. A round now keeps its definition only once recertify proves it, and a
refusal refuses the fillet. Removed: keep_round_if_proved, ExactRound::miss,
net_miss, MISS_SAMPLES and Implicit::distance, which only net_miss used.

Test: wr669_exact_conic_rounds::a_round_on_a_boss_tilted_a_few_degrees_is_its_definition
covers the boss at 0.25 to 5 deg. Each tilt builds, both root rounds are Conic exact
definitions (bound 0, recertified, record round trip bit for bit), and the
volume added matches the divergence theorem over the closed-form canal surface
within 1e-3 (measured: 6e-10). Before the fix, 0 of 2 rounds kept their
definition at every tilt up to 2.5 deg, and 1 of 2 at 3 and 4 deg.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 00:05:36 +00:00
FinnDaCaptain 08ad6f10c2 GPU path tracer: shaders compile in seconds, not up to 21.6 minutes and 61 GB of memory (#14105) (#14834)
* GPU path tracer: one inlined candidate test per BVH walk

Native compilers inline every call, so each call site of the compensated
candidate arithmetic is another full copy in the driver's input (#14105).
Reach the expensive helpers from fewer sites while computing the same values:

- trace_precise_within runs its three candidate policies (ordinary origin,
  far candidate from the rounded origin, exact anchored deltas) through one
  test in a small policy loop; the exact policy forms its two bound deltas and
  three vertex deltas at one precise_point_delta call site.
- edge_weights evaluates the three edge functions at one difference_products
  call site; the ordered walk, origin_on_boundary, origin_boundary and the
  ordering reference use it. origin_boundary's six homogeneous coordinates
  share one call site too.
- trace_precise no longer dispatches an origin without a low part to
  trace_ordered_within: trace_precise_within then takes exactly the ordered
  walk's origin, pad, error bound and candidate test, so main inlines one
  walk fewer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer: soft-float and split helpers reach each callee once

Every precise delta and every compensated product difference inlines its
integer arithmetic, so the helpers' own call sites multiply into every
caller (#14105). Restructure them to reach each expensive callee from one
call site, computing the same values in the same order:

- fp_sub_barrier_bits takes its exact cases from fp_sub_exact and falls back
  to fp_sub_bits at one call site instead of two.
- anchored_delta_bits runs offset, anchor and their sum as three steps that
  share one fp_add_bits; the final integer addition stays the reassociation
  barrier.
- precise_point_delta evaluates its three components at one
  anchored_delta_component call site.
- split_difference_products runs its five possible sums as steps sharing one
  split_add and one split_rescale; split_two_sum is folded in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer: fewer precise call sites around the walks

The integrator and origin query still reached the inlined precise arithmetic
from neighbouring call sites that compute related values (#14105). Share one
call site for each pair, computing the same values:

- direct_light evaluated volume_transmittance_precise for the shadow ray and,
  for a punctual light, again along the physical segment, keeping the second;
  it now evaluates only the one it keeps.
- volume_transmittance_precise forms both box-bound deltas at one call site.
- At an emitter hit, the physical and scatter segments share one
  ray_segment_precise; at a surface hit, the travelled and absorbing segments
  share one precise_point_delta (the second only inside a medium, as before).
- origin_boundary's six homogeneous coordinates and three edge weights share
  one difference_products.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer: denoise guides inline two BVH walks and compile one at a time; identical scene programs compile once (#14105)

Native Vulkan compilers inline every call site, and their time and memory grow faster
than the inlined size. Host-side and denoise changes, with unchanged results:

- denoise_guides traces the camera ray as event 0 of its existing event loop, so the
  camera ray and its optical continuations share one trace_precise_within call, one
  emitter test and one surface look. The camera ray has no low origin, so the walk
  takes its ordinary candidate branch, the arithmetic of trace(), as it does for any
  ray without a low origin. The guide entry inlines 2 BVH walks instead of 3, and
  7,906 statements instead of 11,703 (naga statements, each call site counting its
  callee again). The new test guides_inline_two_bvh_walks asserts exactly 2, so a
  renamed walk function fails it instead of passing on zero.
- The guide pipeline compiles under one_compile_at_a_time like the path programs, so
  it no longer runs beside another compile. It and prepare_scene_pipeline take the
  job's CancelToken: a job cancelled while it waited for another compile returns
  before compiling.
- Scene programs are cached by what is compiled. Nested media are a uniform and an
  opaque scene with maps runs the full mapped program, so neither compiles a second
  copy of a program the device already has (2 + 3 slots instead of 5 + 6). The test
  host_readiness_includes_unmapped_non_nested_glass is renamed
  host_readiness_includes_unmapped_glass, as it now also checks that a nested-media
  job runs the ready unmapped program.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer: a size budget for what the heavy entry points inline (#14105)

main_inlines_few_bvh_walks counts the BVH walks main inlines, not their size, so
#14105's growth got through: the walks' candidate tests grew while their number stayed
the same, and a native Vulkan driver then took up to 17 minutes and 61 GB to compile the
path programs.

heavy_entry_points_inline_few_statements parses each heavy program with naga and counts
the statements a native compiler inlines into its entry point: every statement, nested
blocks included, and at every call site the callee's body again. Each budget is about
1.5 times the count with the fix and far below the count before it:

  entry point            before    fixed    budget
  path main             196,450   28,414    45,000
  path optical_resolve   54,888    7,777    12,000
  denoise_guides         70,517    7,906    12,000
  caustic main          211,786   33,386    50,000
  caustic photon_emit   107,085   14,782    22,000

The walk count now uses the same visitor of inlined statements. denoise::GUIDES is
visible to the path tests, so the guard reads the guide program's own source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* Docs: captured scene options select at most three GPU path programs (#14105)

Nested media are a uniform and an opaque scene with maps runs the mapped program, so
the scene options select one of three cached programs now, not six.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer tests: the shared-walk reference keeps a frozen ordered walker (#14105)

shared_bvh_node_walk_preserves_original_ordinary_and_compensated_hit_bits
compares trace_precise_within with a frozen copy of the old policy. For an
origin without a low part that copy called the shader's trace_ordered_within,
which now forms its edge weights at one edge_weights call site. Those cases
compared the new walk with new code, while the comment still called the
reference the byte-identical old walker.

The reference now carries the old ordered walker as legacy_ordered_within:
trace_ordered_within as it was before these commits, apart from its name,
with three direct difference_products calls per candidate. The comment says
what is frozen. The entry still inlines three walks: 10,109 naga statements
with each call site counting its callee again, against 9,070 when it called
the shader's ordered walk and 60,315 before these commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

* GPU path tracer: a denoised job that waited for the guide compile uses its pipelines (#14105)

Pipelines::new took the process-wide compile lock for the guide program but
released it before the warm-ups, and Pipelines::shared published the
pipelines only after them. A second denoised job on the same executor that
found nothing published waited for the lock and then compiled the guide
program again: after the first compile instead of beside it, so its setup
took both compiles in a row.

Pipelines::shared now takes the lock, checks again for published pipelines
and holds the lock until it publishes, as prepare_scene_pipeline does for the
scene programs. A job that waited uses the pipelines the first job built, and
a job cancelled while it waited still returns before compiling. A driver
that compiles at the first dispatch, the case SETUP_TIMEOUT allows for, now
does that under the lock too. Pipelines::new is main's again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTLw4zU71LyMwTq6zdP73b

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 23:51:05 +00:00
bherbruck 83ba62f22f query::tangent_edge: the #13575 review fixes, a tight pcurve box and a centred net normal (tangency-labs/solidcraft#14611) (#15005)
Follow-up to #13575 (the proved smooth-edge test, solidcore#3141): jyviko's review of #3175,
item by item, and the cost of deciding a procedural round's edges.

Review fixes:
- Piece boundaries are no longer found as rounded roots. A piece is one polynomial only where
  the pcurve's enclosed (u, v) box meets no interior knot line; otherwise it is bounded over its
  box (the hull over the cells it meets) and halved, to MAX_CELL_DEPTH.
- The face's evaluator clamps a point past its net's domain (b_spline_surface_n_lib's
  evaluate_simple, the cone's evaluate_step, ProceduralBlend::evaluate), so the certificate is
  about the clamped surface: the box is clamped as the evaluator clamps it, a box straddling an
  end is not one cell, and at a point a clamp moving the face's point more than the edge's
  tolerance from the net's is refused by name (a periodic face's pcurve a period off). A
  pcurve 1e-16 past its net's end (a fillet's round) is taken. Planes are exempt.
- nurbs::math::gamma/UNIT throughout, each factor's operation count at its comment;
  definitions-and-certificates.md 4.4 has the row.
- MAX_POINTS per piece; a piece past it is Undecided, not an error. Undecided names its place
  (at).
- edge_turn::leaving_derivative is the one "direction an edge leaves its vertex in" (mixed.rs's
  corner calls it, bit for bit); edge_turn::leaving read the span below a knot at an edge's start,
  now from inside the edge. convex_at takes the caller's smooth angle and says None where the
  faces are not proved to part by more (tangent faces have no convexity).
- ops: blend::tangent_chain(body, order, edges, passed_over, angle) -> Chain is the one public
  edge walk (tangent_chain_ordered is gone); the cheap questions (turn, convexity) run before
  the certified one; candidates in record order; passed_over validated.
- least_angle_along is dropped: no consumer, not a bound.
- mixed.rs's corner reads its leaving direction from edge_turn's one evaluation (leaving_tangent,
  which names each case), keeping all three of main's typed refusals (the edge off the vertex, its
  curve missing, the evaluation without its first derivative).
- The decision polls the kernel's cancel token every 64 points (POLL_POINTS, the mass
  enclosure's stride; the first point polls too), the definitions-and-certificates.md
  bounded-work rule, so a long tangent_all_along, and ops' tangent_chain over it, can be
  cancelled (CodeRabbit). Tests: a box's square edge, NotTangent, then Cancelled once the token
  is (between planes nothing else polls, so this is the loop's own poll); the procedural round's
  root edges at kernel level with the token already cancelled: Cancelled on each.
- A face whose B-spline net is in power-basis form (BSplineSurfaceForm::Polynomial: coefficients,
  not control points) is refused by name rather than read as a control net (CodeRabbit). Test:
  a box face's net set to that form.

Cost (circle_root: a pipe sunk in a plate, its root rounded r 2 as a procedural blend; the two
root edges at half a degree):
- A blend's margin is Bounded, Loose (halved) or NotEnclosed (the definition's enclosure fails:
  halved at most MAX_UNENCLOSED_SPLITS = 4 times, then Undecided; never Tangent without a
  bounded margin).
- The margin is the smaller of acos(cos_lo) and, where acute and both lengths are proved
  positive, asin(sin_hi): an enclosure of width w costs about sqrt(2 w) in the angle by the
  cosine, about w by the sine.
- The pcurve's box over a piece is the hull of its Bezier control points cut to the piece by de
  Casteljau in intervals (#14611), as p + l (q - p), the spans' rounding (Boehm's knot insertion,
  gamma_(12 r + 1) per coordinate) added after the cut; intersected with the evaluation and the
  active control points' hull (exact for weight 1).
- The net's N_w over a box of one cell is also enclosed by the mean value theorem on the cell's
  polynomial, N_w(m) + N_w,u(box)(u - m_u) + N_w,v(box)(v - m_v), intersected with the direct
  enclosure; each cell's points are moved by -c w first (N_w is invariant under the move:
  (A - c w)_u w - (A - c w) w_u = A_u w - A w_u), the moved points enclosed.

Counts (60 s cap per edge; decided parts, parts left undecided as too loose):

| | before | after |
|---|---|---|
| edge 35: parts / nodes | 1,070,867 / 52.5 M (300 s cap) | 15,350 / 0.73 M in 30 s |
| edge 35: undecided as too loose | 254,486 | 0 |
| edge 46: parts / nodes | 3,116,262 / 3.1 M (300 s cap) | 19,563 / 0.36 M in 24 s |
| edge 46: undecided as too loose | 286,720 | 0 |
| edge 46 margin at s = 30.094, half width 1e-6 | 1.3e-3 | 3.3e-8 |

Not covered:
- Both root edges stay Undecided at s = 87.04: there the pipe's foot crosses its net's C1 quarter
  knot (u = 15.708, multiplicity 2) and definition_partials_over_box refuses the box
  (FEET_BOX_CONTINUITY). a_procedural_round_is_smooth and
  a_procedural_round_s_edges_carry_its_margin assert that verdict exactly (Undecided (pi, pi) at
  87.04, 3 parts not enclosed on each edge), so they fail loudly when the knot's box is enclosed
  (a follow-up).
- On main itself (a65ecb00, run cmp2-13575-followup, each side its own target; edge 35 / 46),
  main's loop: 20,409 / 52,632 parts, 0 / 0 decided, 10,202 / 26,314 left too loose, and both
  edges end on the point budget with "an edge too costly to decide" (13.1 s / 31.0 s). With this
  change: 15,350 / 19,563 parts, 7,681 / 9,787 decided, 0 too loose, 3 / 3 not enclosed (all at the
  knot), 732,739 / 363,962 points, and a named verdict, Undecided at 87.04 (21.7 s / 19.0 s).
  The tight box removes every too-loose part; the edges are not yet Tangent all along, as #14611
  asks, so this is part of it: the knot's box is what is left.
- ops' tangent_chain is now the walk in crate::tangent, not blend_refusal::tangent_chain. On
  a_cancelled_long_fillet_stops_promptly's 20-turn coil the chain of its helical edge is 40 edges
  along the helix (the kernel's walk gave the seed alone); the test still returns Cancelled (3.2 ms
  after Cancel, run print-13575-followup).
- The margin's centred form for the definition's normal: not needed on these edges (its
  enclosure is tight), so not built.

Tests: the cell rule and the clamp (unit); a pcurve 1e-15 past / before / on a knot line of a
hand-made two-span face (Tangent / NotTangent / not Tangent), 1e-12 past the domain taken, 0.5
past refused; a cylinder's pcurve a period off refused; the Markov term, the Q floor and the
bound's upper end (unit); walls 0.3 degrees apart at 0.5 / 0.2 / 0.3 degrees (Tangent /
NotTangent / Undecided at a place on the edge); the sine form linear against the cosine's root
(unit); a line pcurve's box is its piece (containment both ways, with the code's own bounds);
convex_at None at a round's tangent ends; ops: undecided walls listed, a chain stopping where
the boss's base turns convex, a sheet's one-face edges not joining.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 23:51:02 +00:00
jyviko 7081f99b1c UI kit: the view toast is a kit component; the history bar's reorder can be turned off (#15003)
* UI kit: the view toast is a kit component, the viewport draws it from there

The bottom toast for hints, results, refusals and work in progress (its card, the dot or
spinner before its text, its wrapping kit buttons, the × with its countdown ring) moves from
the app's viewport into `solidcraft_ui_kit::toast`, unchanged: `show(ui, free, place, text,
lead, actions, extras)` draws it from plain data and Tokens and returns what was clicked and
where it drew; `Place` (bottom centre or the corner column, `WIDTH` wide), `Action`, `Lead`,
`Extras`, `Shown`, the button layouts and the countdown come with it. The × publishes its
handle through the widget registry, as before.

The viewport keeps what is its own (the Notices preference `ToastPlace`, the corner column's
free rect) and calls the kit's toast through `paint_toast*`, the kit's names re-exported under
the old ones, so every call site and test is as it was and the drawing is the same.

Tests: the kit's button layouts, countdown and the card's place in the free part.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* History bar: Bar::reorder, off for a history whose steps cannot move

With reorder false a step senses clicks only: no drag, no drop bar, no
Action::Reorder; the marker still drags. SolidCraft's timeline passes true,
as before. Test: with reorder off a dragged step returns nothing and a click
still selects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* UI kit toast: its padding and spinner from Tokens, rustfmt

The toast moved from the viewport into ui_kit/, where the form-metric guard
also checks vec2 literals: its 28/8 text inset, 40/16 padding and 12-point
spinner now come from space_14, space_8 and space_12 (same values). The
viewport's spinner allowance covered the toast's spinner, which left with it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:05:54 -05:00
jyviko 61f8aa0854 solidcore: transform a curve; the curve seen in two views (#15178)
* solidcore: a free curve under an affine map

curve::transform(curve, matrix) -> curve: the spline or rational spline
with every control point carried by the kernel's N_CrvTransform, its
degree, knots and weights as they were, so the image is exact up to the
rounding of each carried point (none for 0 and ±1 entries on a spline).
The matrix is Body::transform's (rows 0-2 the images of the axes, row 3
the translation, p' = p·A + t), its entries moved to the kernel's column
places; a matrix Transform::is_regular does not prove regular at
REGULAR_RATIO (singular, projective, not finite) is an Argument before
the curve is read. Reflections, non-uniform scales and shears are maps
like any other; a closed periodic curve stays closed, so the record's
spline is taken on any knots (curve_knots::net_of; nurb_of adds the
clamped check on it).

Tests: a cubic reflected about y = 0 has its CVs mirrored exactly and its
knots unchanged, twice is the curve again; a rational arc keeps its
weights and knots; a quarter turn and a move follow Body::transform's
convention exactly; a closed curve keeps its repeated points; singular,
projective and NaN matrices and a line are refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the curve seen in two views

intersect::views::curves_from_views(k, a, a_dir, b, b_dir): the 3D
curves seen as a along a_dir and as b along b_dir, where the two curves'
extrusions meet. Each curve is moved back along its unit direction and
swept forward (create_extrude) from -reach to +reach, and the two sheets
are intersected (intersect_surfaces); the meeting curves come back as
B-splines (from_parameters::b_spline_part, now crate-visible). The reach
is a bound, not a search: a point seen on both, p + s a = q + t b, has
|s| sin(theta) <= |q - p| <= D, D the diagonal of the box around both
control polygons (the convex hull of a positive-weight NURBS curve), so
each sheet reaches REACH_MARGIN (2) times D / sin(theta) on either side
and the meeting curves end on the curves' own ends. Directions not
finite, of no length or within EFF_ZERO_RAD of parallel are
InvalidInput; views that do not meet are an intersect failure with the
phrase NO_MEETING (views_do_not_meet reads it), never an empty Ok.
intersect_surfaces' own phrase is NO_SURFACE_INTERSECTION.

solidcore-ops: curve::two_view(a, a_dir, b, b_dir) -> Vec<Curve>
converts the record splines (curve_knots::net_of) and the meeting curves
(from_parameters::record_of), Argument for bad or parallel directions
and Empty when the views do not meet.

Tests (kernel and ops): a side view z = f(x) along y and a plan view
y = g(x) along z, their control points evenly spaced in x so the
parameter of each sampled x is closed form: every sampled point of the
result lies on both extrusions within the default approximation
tolerance (the gap along the view's axis allowed 1 + slope times it),
and the result spans the side view's whole run; parallel, zero and NaN
directions are refused; plan and side runs apart in x do not meet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the curve from two views is traced to the kernel's tolerance

curves_from_views intersected its two sheets through intersect_surfaces,
which leaves the tolerance to the intersector's default: a thousandth of
the size of the surfaces' domains (SurfaceIntersector's constructor).
The sheets reach 2 D / sin(theta) past the curves, so at model scale
(curves about 170 mm across) that default is near a millimetre and the
span test accepted a five-point Hermite curve 5.75e-3 off both views,
against the 5e-6 its docs state. At the 10 mm scale of the first test
the angle test alone held it close, so nothing showed.

New intersect_surfaces_within(k, s1, s2, approx_tol_3d): intersect_surfaces
with the tolerance passed on to GlobalSurfaceIntersect (intersect_surfaces
calls it with None, unchanged). curves_from_views passes the kernel's
default approximation tolerance, approx_tol3d(k, USE_DEFAULT), half its
zone tolerance; the docs say the spans are checked at interior samples
(docs/ssi.md 4.3), not certified.

Tests (kernel and ops): the reported side and plan views, quadratic
Beziers about 170 mm across. The result is evaluated by de Boor's
algorithm on its own knots and control points, and the views by
Bernstein's form with the parameter at each x found by bisection, none of
the kernel's evaluators: at 513 parameters per curve each point is within
2 x 5e-6 x (1 + slope) of both views along their other axis, and the
curve runs from the plan view's start to the side view's end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
2026-11-11 19:05:36 -05:00
ChrisNo 94242dcf1d Projected nearest point on a curve: return the end of the interval when the answer is there (#13658) (#14964)
* claim: #13658

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

* Projected nearest point on a curve: return the end of the interval when the answer is there (#13658)

A projected nearest-point (or farthest-point) query on a curve looked only
for parameters where the projected distance is stationary. An end of the
query interval where the distance is still falling (rising) is no such
point, so a point whose answer is that end got an empty success, or a
farther (nearer) stationary point when the curve had one.

The span solve now adds an end of the solver's interval as a solution when
the projected distance grows (shrinks) from it into the interval. An end
that is not the constrained minimum (maximum) is not added, however wide
the tolerance.

`find_side_of_curve` keeps its failure for a point beyond the end of the
curve: the nearest point there is the end, the line to the point is not
square to the curve, and such a point is on neither side. Trim results do
not change.

Evidence: a temporary dense-sampling check (4001 samples per query, not
part of this commit) on all 283 golden units. On main a5a698c96, of 7109
projected point/curve solves, 335 without a target distance returned
nothing and 22 returned a point the samples beat. With this change: 47
(36 of them the 1e-12 knot span fixtures of #13679) and 0. No returned
answer was a non-extremum in either run.

Goldens re-blessed (old and new values of every case are in the pull
request):
- curve.curve_p1, 30 cases: 17 go from no answer to the end of the
  interval; 12 replace a stationary point by an end that is nearer
  (farther); 1 keeps its minimum and adds an end within the tolerance.
- intersect.topology_solver_p1, 22 cases: 19 go from no answer to one; 3
  replace an answer by a nearer one.
- intersect.topology_solver_p2: the 4 static_operation_matrix_1_15 cases
  gain their one answer; the 8 subdivided_1_14_1 cases leave
  known_failing.json with one answer per vertex (12 and 40).
- blend.hcr gen0392: a silhouette vertex that projects onto the end of a
  curve within tolerance is now found.

The C++ defect is recorded as WR-775.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

* Projected nearest point on a curve: the #13677 curve is tested at the issue's own tolerance (#13658)

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

* Projected nearest point on a curve: inside tangent at an interval's ends, and a closed curve has no end (#13658)

Two points from review.

The test that decides whether an end of the interval is the nearest
(farthest) point used the tangent the span solve already had. At a knot
where the curve turns, that tangent belongs to the span that starts at the
knot, so for an interval that ends at a corner it was the tangent outside
the interval. The test now evaluates the tangent on the interval's side of
each end.

`find_side_of_curve` treated an answer at an end of the curve as a point
beyond the end. A closed curve has no such end. The side of a point nearest
a corner of a closed curve depended on where its seam was: found when the
corner was inside the curve, a failure when it was the seam. Closed curves
are now exempt, and both give the same side.

No golden record changes: all 283 units pass as blessed in the first commit.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

* Projected nearest point on a curve: a schematic of the interval-end case in WR-775 (#13658)

Adds a two-panel figure to the WR-775 note: the nearest point inside the
interval, which the search for feet finds, and the nearest point at the
interval end, which it missed. Drawn in VectorCraft; the SVG keeps live
text and its editable source sits next to it.

No code or golden changes.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-11 23:24:11 +00:00
Jackson Oursland 9ebf0e996e Operations panel: each operation says how it ended; an agent's Stop stops it (#9501)
An operation that ended faded out of the panel with a full bar however
it ended: a failure looked like a success, and only the status toast
said otherwise. Each now reports its outcome where it ends (a file
operation landing, opening behind or refused; a feature dialog's OK
applied, refused or cancelled; a history command, a delete's check or
a feature's editor; a save; an agent's command; an opened design's
meshing). Its row fades out done (a full bar), failed (red, staying
2.5 s, the error on hover) or cancelled (where its bar stopped); one
that ends without saying fades as it was. ui.operations lists those
that ended in the last minute with their outcome and error, so an agent
needn't poll its own request to learn it. One never seen under way
(done within the app's wait) isn't listed.

An agent's command computing off the window thread now evaluates under
a watched progress: its row shows the features evaluated for a single
command, and Stop (the panel's X, the chip, ui.operations) cancels the
evaluation at its next feature instead of leaving it to compute unseen.
Its reply is passed on to the agent as before, seen on the way for its
outcome.

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 23:06:07 +00:00
bherbruck c37dc53d3b Kernel rig: the plan job's checkout fetches history without file contents, so it stops timing out (#15171)
Select the rig areas cloned the full history of every file (fetch-depth 0) on a 2-vCPU runner with a
5-minute timeout; on merge groups the checkout alone ran past it and the job was cancelled (run
43107650521: checkout 21:58:10-22:03:07, cancelled), leaving the queue's rig red. The diff only needs
commits and trees, so pull requests and merge groups now check out with filter blob:none; the
timeout is 10 minutes as a margin.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 22:52:39 +00:00
jyviko 865497c702 theme: an isoparm colour, lighter than a body's edges (#15143)
Tokens::isoparm colours the isoparm lines drawn on a surface: lighter
than its edges, so they read as the surface's flow, not its boundary.
Light and Dark set it halfway from body_edge to body (about half the
edges' contrast on a face); with_viewport carries it with the other view
colours. Theme files take an `isoparm` key; a file that sets body or
body_edge without it gets the same halfway colour from its own, and a
file setting no colours keeps its base's exactly. Every built-in theme
sets it: halfway between its edge and body colours, and its edge colour
in the themes limited to their own palettes (1-bit, 1-bit dark, CGA).
Tests: on both bases the isoparm colour is below the edges' contrast on
the body and at least 1.5 against the view's background; a theme file's
fallback, its own value, and a file with no colours. The colour-vision
coverage list names it with the edges, told apart by width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
2026-11-11 22:35:52 +00:00
Andrzej Błasik 4ee4ccc2d5 Polish translation: the 300 texts that were missing, and CAD terms as Polish engineers name them (#15156)
The Polish catalog lacked 300 of the English catalog's texts, so the app showed
them in English: the operations panel, preferences, rendering, command names and
others. All of them now have a Polish text.

Existing entries that used two Polish words for one term, or a word that means
something else, now use one established term: Intersect is no longer the word
for Trim, Canvas and construction line have one name each, Stock is the blank
and not the machining allowance, Interference is the word the command already
uses, Weldments and the As-Built joint match their commands, Combine is a
boolean operation, and the flat-point set screw has its trade name.
2026-11-11 22:29:05 +00:00
Ahmad Khan 88e2c88e34 3D printing: the print-face tint shows only while Send to Slicer is open, and is no longer saved in the design (#11512) (#11559)
* claim: #11512

* Tests: the print-face tint shows only while Send to Slicer is open, and print faces are saved only when kept (#11512)

Failing tests first. They expect the view to tint print faces only while the
Send to Slicer window is open, a save to leave print faces out of the design,
and a design saved with a print face to open without it. The new Keep print
faces preference (keep_print_faces, off) keeps the old behaviour. The fields
are added without behaviour so the tests build.

* Send to Slicer: tint print faces only while its window is open, and save them only when kept (#11512)

The brown print-face tint stayed on the model after Send to Slicer closed, and
the print face was saved in the design, so the tint came back every time the
design was opened. Users took it for geometry or a selection.

Now the view tints print faces only while the Send to Slicer window is open.
A save leaves print faces out of the file, and a design saved with one opens
without it; the rest of the design opens as saved, with no unsaved change and
no undo step. The design on screen keeps its print faces for the session.

The new preference Keep print faces (keep_print_faces, Preferences > General >
Slicer, off) brings back the old behaviour: the tint shows at all times and
print faces are saved and opened with the design. Scripts, the command line
and MCP keep print faces as before: Session::keep_print_faces is on unless the
app turns it off.

* The print-face test names Vec3 from solidcore_record, where main now keeps it

* A design a host imports comes without its print faces unless they are kept, like one opened from a file

* The Ctrl+B print face scenario turns on Keep print faces, so its save still holds the print face

---------

Co-authored-by: Ahmad Khan <ahmad.khan@shiritai.co>
2026-11-11 22:20:08 +00:00
bherbruck 242ae73389 Cuts through a body's edge no longer fail the seam check when the sketch sits a hair off the edge (#13295) (#14849)
* Seam check: a seam edge ending within its vertex's tolerance across the seam is no near miss (#13295)

A circle sketched on a plane through a bar's edge, a few micrometres off it,
and cut into the bar leaves the cut wall's seam edge ending on the bar's edge
that far across the seam. The vertex's 1e-5 tolerance covers it, and the
loop closes there. HasNearMisses counted the gap against a fixed 1e-9, so the
check refused the cut (face test 36, "Face Near missing Seam").

A vertex that ends one of the seam's own coincident edges is now a near miss
only past its own tolerance, unless another edge at that vertex runs beside
the seam (its middle within the tolerance of the seam). That pair would bound
a sliver, which test 36 is for. A coincident edge beside the seam, and any
vertex end not on the seam's own edge, count as before.

- New ops test: the bar cut with the circle's centre 1e-9 to 1e-4 off the
  edge gives one valid solid at every offset, with the volume bounded. At
  1e-6 the cut is no solid, before this change too (#14840).
- New action_matrix case: the issue's recipe, cutting across a hole.
- issue_2538: its face test 36 named a corner (the seam edge ending 8.5e-6
  across, tolerance 1.7e-5, no edge beside), not its sliver. The sliver is
  still refused, through edge test 9. Re-pinned.
- wr579: the flag-off controls' face test 36 was the same corner pattern at
  the tube ends. Re-pinned with no test 36.
- All 283 goldens units pass unchanged, and the kernel rig passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Tests: the #13295 action_matrix case as rustfmt lays it out

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 22:12:03 +00:00
Andrzej Błasik fc403974be Agent commands: the window no longer freezes when you edit the design while the agent pointer is showing a batch (#15155)
With the agent cursor shown, the batch was computed on a copy of the design while the pointer moved. If you edited the design meanwhile, that result no longer matched, and the batch was computed again on the window thread when the pointer arrived, so the window stopped answering for as long as the batch takes to compute.

Now the cursor path does what a command without the cursor already did: a result computed for an older design is computed again off the window thread, and the batch lands after your edit once that is in.
2026-11-11 22:06:18 +00:00
bherbruck 6cc9d44fa5 PR checks: flag a kernel fix that also edits the existing tests or goldens it is judged by (#15148)
* PR checks: a kernel change that edits existing test or golden lines must say why

A new "Test change check" job in pr-checks.yml fails a pull request that changes kernel source
(Rust under solidcore/ or crates/smlib/, not tests or goldens) and also changes or deletes
existing lines of a test file or golden expectation, unless the description has a line
`Test change: <reason>`. Added tests pass, as do imports, comments, blank lines and lines that
were only moved or re-indented, and the shrink-only known-failing and quarantine ledgers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test change check: count re-added lines one for one, skip block comments, treat *.test.js as tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 22:00:23 +00:00
Homero Thompson 3cd75d5b52 UI: the 3D mouse picture follows the Source assignment and the driver mapping (#14337) (#14890)
* UI: the 3D mouse picture reads the device the way the view reads it

The drawn cap in the corner of the 3D view showed the device's raw
readings: the picture ignored the per-axis Invert choices and the axis
assignment the user configured, so a device whose tilt arrives reversed
showed its cap leaning the wrong way, the opposite of what the view did.

The picture now goes through the same two steps the view does: the row
takes the motion it reads, and the user's own inversion is applied to it.

Task: https://github.com/tangency-labs/solidcraft/issues/14337

* UI: the 3D mouse picture follows the driver's axis mapping too (#14337)

The corner picture read the device as the calibration, the axis assignment and the
user's own inversions had it, but not the driver's physical-to-logical mapping, so it
disagreed with the view wherever that mapping sends an axis somewhere else: 3DxWare's
object mode, which every device without a profile gets, swaps the tilt and the twist,
so the tilt the view rolls on read as a twist in the picture.

The picture now takes the mapping navigation really used (app.space_mouse.mapping,
the driver's profile when there is one) and shows each motion on the axis the view
drives it with.

As the maintainer asks in #14337, the user's own inversions stay with the view: they
are a matter of taste, and the picture shows the device, not the view.

https://github.com/tangency-labs/solidcraft/issues/14337

---------

Co-authored-by: vdirienzo <noreply@github.com>
Co-authored-by: vdirienzo <vdirienzo@users.noreply.github.com>
2026-11-11 21:51:01 +00:00
bherbruck 91695f7488 Layers check: cap each crate's paths into solidcore internals so the count only falls (#15147)
* layers check: count each crate's paths into solidcore internals, and let the count only fall

The seam list allows `crates/smlib -> solidcore` and `crates/geom -> solidcore` at the crate
level, so any number of paths into solidcore's internals passed (#15031). `cargo xtask layers`
now also counts, per crate, every path into a solidcore crate that is not public (each leaf of a
use tree, macro bodies included; comments and strings excluded) and compares it with
xtask/solidcore-paths.txt: a count that goes up fails, and one that goes down must be lowered in
the same pull request. `cargo xtask layers --paths [crate]` lists the counted paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* layers path count: count `use ::solidcore::...`, fail on unreadable directory entries, reject zero baseline lines

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:50:06 +00:00
Brett Lawson b7efc29dbc Sweep along a path with corners: join the runs' pieces in a balanced union, roughly halving dense polyline sweeps (#14451) (#15097)
* Sweep: claim the product side of #14451 (dense polyline paths)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* Sweep along a path with corners: join the runs' pieces in a balanced union (#14451)

A sweep along a path with corners unioned each run's piece onto the body
built so far, so every union took in the growing body: along a densely
sampled polyline (181 points, 180 runs) that is 16,289 pieces' worth of
union operands, growing with the square of the points. The pieces are now
joined neighbours first in a balanced tree of the same union (1,380 for
180 runs). The solid is the same point set; each union is still
Brep::boolean with its tolerance growth.

Tests: a 33-point rail-along-polyline sweep counts the union operands
(160, against 527 joined one by one) and checks the analytic volume; a
unit test checks union_tree joins only neighbours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* Sweep corner union: keep union_tree private to smlib_sweeps.rs, with its unit test in the file (#14451)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:41:13 +00:00
Homero Thompson d231a38b92 Sketch: test that a line starts on the projected edges of a picked extruded face (#14796) (#15056)
The Line tool's first click must start a line on the edges a sketch projects
from the face it sits on. On a face picked in the viewport, the projected
edges are linked geometry and the click's snap has no sketch point id until
the command materializes it.

Adds the case the existing line-start tests leave out: a rectangle drawn in a
sketch and extruded, a new sketch picked on the extruded face, and a line
started on each of the four edges that face projects.

Co-authored-by: vdirienzo <vdirienzo@users.noreply.github.com>
2026-11-11 21:33:45 +00:00
leValdemar19 722b3bf40e Assistant: the sign-in box scrolls above the message box in a short docked panel (#15088)
* claim: #15087

* Assistant: the sign-in box scrolls above the message box in a short docked panel (#15087)

With the default panel layout, the "Sign in to the agent" box was drawn below
the agent list's scroll area instead of inside it. When an agent offers two
ways to sign in, the box was taller than a small window's docked Assistant: it
pushed the message box off the bottom, cut off "I've signed in: connect
again", and the new-chat tip was drawn over the message box.

The box now scrolls inside that area in both layouts, and while sign-in is
needed the area may use everything above the message box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:31:23 +00:00
bherbruck 074ab8fc1c Copy works again on the desktop: eframe's clipboard feature is back on (#13349) (#15144)
eframe 0.37 builds egui-winit without its clipboard unless asked, and the
workspace turns eframe's defaults off, so every copy on the desktop (the error
text, Copy diagnostic information, Ctrl+C in a field) reached the platform and
went nowhere. Pasting broke the same way. 0.36 asked for the feature itself.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:29:57 +00:00
bherbruck 058b9dd9ca solidcore: retire fillet_cleanup_removes_input_slits (#14246, batch A3) (#15117)
With WR-459's keep, the fillet clean-up now always checks a kept edge with one
face on both sides (a slit) and needs two faces for the kept-faces test
(WR-602, tangency-labs/smlib@cac11ea). The flag, its preset line, fixes.json
entry, goldens enable_fix arm and test settings go; the off half of the
fork_cac11ea test is deleted. issue_423's keep test is re-pinned: its kept
edge is a slit that WR-602 removes (1 one-face edge with and without the keep);
the lost two-face coverage is #15059. No goldens change (283/283).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:18:44 +00:00
bherbruck b29d39cd1b solidcore: derive the extension's iso limit and the meridian allowance from counted roundings (#15039) (#15122)
certify_iso (surface/extend/analytic.rs) held an extended analytic's iso to
8 gamma_32 (mag + |height| |w|), a factor described as tuned. The limit is now
the count of the test's roundings, at the size of each iso point's stencil
(the net points its de Boor levels read): gamma_(12L+6) A_j for the point and
its test, plus the plane's own (a parallel's height read off the first point,
gamma_(12L+7); a meridian's normal unit(axis x far), gamma_(12L+8) + gamma_12),
rounded outward by (1 + gamma_16). The count is in the doc comment and in the
section 4.4 table.

meridian_rounding (surface/sphere.rs) took the fitted centre's error equal to
a point's, 4 gamma_K |P| / r. IsArc's end angle moves 6.02 delta / r for a
uniformly sampled half turn (5.98 for two rational quarter turns) when its
four points move delta along the gradient, so that allowance did not bound its
case. The allowance is now S 1.75 (gamma_K + gamma_33) |P| + 3.5 gamma_4 |P| +
gamma_31 pi r, with S the end angle's first-order conditioning read off the
fit (end_angle_conditioning, from the circumcircle's M^-1), so a fit whose
samples close in is not assumed well conditioned.

Tests: the iso limit's test perturbs a parallel's point by 0.8 and 1.2 of the
counted limit; the_meridian_allowance_bounds_its_fit reproduces the 6.02 and
5.98 sensitivities, shows them past the old 4, and checks S against them.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 21:01:52 +00:00
leValdemar19 eb02f190c0 Box: changing the size of a box placed by its centre keeps it centred (#14487) (#14603)
* claim: #14487

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Box: a box placed by its centre stays centred when its size changes (#14487)

solid.box with center saved only the corner it computed, so a later length,
width or height grew the box from that corner. The Box feature now saves
centred: true with the centre as its point, and building it takes half of
each size off that centre. The Box dialog reopens such a box with Center
chosen, and redefining it passes center again. Saving the flag is a new
design-format change (format/pending/box-centred.rs).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:53:55 +00:00
Brett Lawson 95293cf846 solidcore: blend failures carry a typed reason (part 10: standard solver p2) (#15011)
* solidcore: claim blend typed errors part 10 (standard solver p2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: standard solver p2 failures carry a typed blend reason (part 10)

The 28 bare statuses in blend/fillet_standard_solver/p2.rs become
BlendFailure Failed/Missing, each keeping its operation, status and
kind; as_sm_err maps to "a stage the solver calls failed" as p1's does,
still passing Unported/Cancelled/InvalidInput/PortInvariant through. The
file's tests pin the typed reasons (parallel offset normals, the missing
pseudo-B-rep, the missing reference curve) and read the status. The
file leaves the WAITING ratchet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:33:55 +00:00
bherbruck d9853de778 solidcore: the body check checks a face whose loops have no UV trims (#15040) (#15121)
check_face returned Ok for a face whose edge uses had no UV trim curves, so the
body check passed it without any test, and the same body failed Loop
Orientation once an operation had made the trims: a check's answer depended on
whether a cache was filled (definitions-and-certificates.md §7.2).

check_face now makes the missing trims and checks the loops like any other
face; a face whose trims cannot be made fails the UVTrimCurve test (report 1)
instead of passing. The body check (validate_pointers) does this on a copy
standing for the body (clone_standing_for_self, made once, at the first such
face), so checking does not change the body it checks and no operation's
result moves.

Golden: boolean.api_brep issue2177_crescent_on_top_of_rim_checked reports one
more failure, Loop Orientation (TrimmingTools #3) on a face that was not
checked before. That body is upstream's broken union (an edge 38.16 off its
face, #59/#82 already reported), and its record is unchanged.

Test: issue_1419_brep_check::a_face_without_uv_trims_is_checked_like_one_with_them
(a planar sheet with its outer loop reversed fails the same lines without
trims as with them; a sound one passes either way). It fails on main.

Known failing: issue_2972's quarter shell at r 1e4, t 1e-3 is not an outward
solid once its faces are checked: two loops come out zero area in
compute_loop_orientation. Main fails it the same way once the trims are made.
Split out as the_far_thin_shell_is_an_outward_solid, tracked in #15107.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:33:53 +00:00
Brett Lawson 75c8acac5b solidcore: blend failures carry a typed reason (part 8: the rest of fillet_geom) (#14972)
* solidcore: claim typed blend failures for the rest of fillet_geom

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: the rest of fillet_geom's failures carry a typed blend reason (part 8)

Converts the 89 bare statuses of blend/fillet_geom/p3.rs (27), p6.rs (53),
surface_plane_curve.rs (3) and tangent_end_rib.rs (6) to BlendFailure:
Missing for null dereferences (NER) and Failed for SE(SM_ERR), each with its
own phrase. The local nul/fail closures take the phrase. Each site keeps its
operation, status, kind and entity, so every decision that reads a status
behaves as before. The four files leave the WAITING ratchet.

Pin tests in each file's own test module check the exact typed failures and
their statuses (tangent_end_rib gains a test module for its one). The
fillet_solver p5 test that matched a bare Upstream from re_calc_fillet_geom
reads the typed failure, and the blend.fillet_geom_p6 goldens runner reads
the status through blend_status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:24:37 +00:00
bherbruck d415d2b496 docs(rfc): RFC 0002 plugins, record decisions and phase 1 review gate (#15110)
* docs(rfc): record plugin decisions in RFC 0002

Records the owner's decisions (one MCP command surface, WebAssembly as the
only runtime, no network at first, host-drawn UI through #15100), reserves
the net permission for signed official plugins, maps phases to PRs, and adds
a design-review gate on the phase 1 PR.

Refs #1221.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(rfc): note #4980 closed in RFC 0002

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(rfc): add agent-first section to RFC 0002

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(rfc): add agent-first to the RFC 0002 decisions list

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(rfc): add shared-across-Craft-apps section to RFC 0002

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:01:29 +00:00
bherbruck f6d044089c solidcore: the pipe's bend check is refusal-only; restore the cases' own inputs and bounds (#15038) (#15104)
path_bends_within decided at 16 samples per knot span whether a pipe folds, and
its false let the pipe through. It is now bend_found_within, returning the
parameter of the bend it found: a found bend refuses the pipe, none found proves
nothing and the pipe is built unchecked as upstream builds it (§7.6). The
refusals it makes are unchanged. A certified lower bound on the radius of
curvature per span is noted as open work.

#14640 changed general_path_sweep's ledger case to pass: the balance wire's
spline fitted open instead of closed, the pipe 0.5 instead of 0.75. The case is
restored as written, in its own test marked known failing: the closed fit bends
with radius 0.041, so the 0.75 pipe is refused. The ledger test keeps every
other case and leaves path-spline to that test.

issue_3093's volumes were compared by an overlap of enclosures of any width
after #13680, where the case had compared numbers to 1e-9 relative. Each volume
is now enclosed to a quarter of 1e-9 of itself and every point of one enclosure
must be within 1e-9 of every point of the other. Done that way, the enclosure
proves the cap case's pinned 757.499499825162 (the estimator's answer at
accuracy 1e-6) 3.0e-9 too large, so the case pins the certified volume,
757.499497557, with its provenance.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:57:01 +00:00
bherbruck 9e805b7bdc blend certificate: a cone's continued part is checked off the axis back to its end, so a box wholly past the apex is refused (#14284) (#15092)
The apex guard proved the continued part's own points off the cone's axis. A feet's box lying wholly past the net's end gives a part that does not touch the end; past the apex such a part lies on the other nappe, off the axis itself, and was accepted (CodeRabbit on #14986). The check now runs over the part taken back to the end it lies past (each direction's range hulled with that domain end): that set is connected and holds points of the end, which are the face's, so proved off the axis it lies on the face's nappe, and a part wholly past the apex is refused, since the way back crosses the axis. One more order-0 enclosure, only for a cone's part past an end.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:30:50 +00:00
Nathan Dane b6aeff5c17 Move Render panels to the shared host (#11312) (#14800)
* claim: #11312

* Move Render panels to the shared host (#11312)

* Exercise the short Render Assistant viewport
2026-11-11 19:13:33 +00:00
Brett Lawson a2e7947eac solidcore: three routines return their warning with the result instead of as an error (#15020) (#15023)
* solidcore: claim #15020, three routines return their warning with the result

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: three routines return their warning with the result instead of as an error

Plane::intersect_with_plane returns its near-singular warning
(PlaneIntersectWarning, upstream SM_ERR_WARNING) as a third value;
CurvePropertyGs::local_solve_branch_with_note returns the corner-on-axis note
(CurvePropertyNote, upstream return TRUE); orient_sheet_surfaces returns
Option<OrientSheetNote> (upstream final TRUE). Callers that stopped on the old
status stop on the note through into_error/stop_on_warning/stop_on_note, which
keep the status, kind and operation, so results and refusals are unchanged.
The surface ratchet allows nothing, brep/p9.rs holds 0, curve/curve/p3.rs one
fewer.

Fixes #15020

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 19:03:03 +00:00
bherbruck 47c57ecee6 CI: the web offline test no longer blocks while #14591 is open, and prints how the leaked request was served (#15074)
The check 'the open v3 page was given another build's file after the update' still fails a queue batch now and then, on main that has the takeover fix, with the page record naming v3's own copy. The step reports a failure as a warning instead of failing the job until #14591 is fixed, and the failure message now says whether the request went through the worker (resource timing workerStart) and what the registration and controller were, to show the path the file took.

Changes a default: no

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:56:44 +00:00
Brett Lawson 96c894966b solidcore: blend failures carry a typed reason (part 9: the solvers) (#14973)
* solidcore: claim blend typed errors part 6 (fillet_geom p4, p5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet_geom p4 and p5 failures carry a typed blend reason (part 6)

Converts the 176 bare statuses of blend/fillet_geom/p4.rs (63) and p5.rs
(113) to BlendFailure: Missing for null dereferences (NER) and Failed for
SE(SM_ERR), each with its own phrase. The local nul/null closures take the
phrase. Each site keeps its operation, status, kind and entity, so every
decision that reads a status behaves as before. Both files leave the
WAITING ratchet. The pin tests in p4's and p5's test modules check the
exact typed failures and their statuses; the tests in fillet_geom/p3,
fillet_solver/p4 and fillet_solver/p5 that matched a bare Upstream from
these routines read the typed failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet_solver p4 test reads calc_cross_section's typed failure

The self-intersection test's CalcCrossSection case matched a bare
SM_ERR_NULL_POINTER Upstream; it now checks the typed blend failure (the
edge has no original face) and the status it keeps. The p4 and p5 pin
tests drop an unneeded path qualification clippy rejects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: claim blend typed errors part 9 (the solvers)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet solver failures carry a typed blend reason (part 9)

The bare statuses in blend/fillet_solver/, blend/fillet_custom_solver.rs
and blend/fillet_standard_solver/{p1,surface_surface,touch_circle}.rs
become BlendFailure Failed/Missing, each keeping its operation, status
and kind. Local nul/none/missing closures take a phrase per call. Tests
and the fillet_solver p2/p3/p5 goldens runners read the status
(upstream_status / blend_status) in place of matching Upstream; pin
tests check the typed reasons. The fifteen files leave the WAITING
ratchet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: trim_rail builds its missing-curve failures lazily

clippy's or_fun_call: the two uv trim curve checks use ok_or_else.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:54:07 +00:00
Brett Lawson 3a6fcb7aa3 solidcore: blend failures carry a typed reason (part 6: fillet_geom p4, p5) (#14952)
* solidcore: claim blend typed errors part 6 (fillet_geom p4, p5)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet_geom p4 and p5 failures carry a typed blend reason (part 6)

Converts the 176 bare statuses of blend/fillet_geom/p4.rs (63) and p5.rs
(113) to BlendFailure: Missing for null dereferences (NER) and Failed for
SE(SM_ERR), each with its own phrase. The local nul/null closures take the
phrase. Each site keeps its operation, status, kind and entity, so every
decision that reads a status behaves as before. Both files leave the
WAITING ratchet. The pin tests in p4's and p5's test modules check the
exact typed failures and their statuses; the tests in fillet_geom/p3,
fillet_solver/p4 and fillet_solver/p5 that matched a bare Upstream from
these routines read the typed failure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet_solver p4 test reads calc_cross_section's typed failure

The self-intersection test's CalcCrossSection case matched a bare
SM_ERR_NULL_POINTER Upstream; it now checks the typed blend failure (the
edge has no original face) and the status it keeps. The p4 and p5 pin
tests drop an unneeded path qualification clippy rejects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:54:04 +00:00
ChrisNo 491a71759a Trim by a projected curve: stop with an error when a face's side of the curve cannot be found, instead of keeping the wrong face (#13679) (#14701)
* claim: #13679

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

* Trim by a projected curve: stop with an error when a face's side of the curve cannot be found (#13679)

ProjectAndTrim votes each face's side of the projected curve with
sm_FindSideOfCurve at its vertices and edge midpoints, then at a ray witness.
Every failure of that call was read as a point on the curve. On a cutter with
a 1.5e-12 knot span the projected minimum returns no solution for points
whose nearest curve point is on that span, so a face whose every vote failed
was taken to lie opposite the reference point: the trim returned success with
the wrong face kept or deleted.

p1::side_of_curve now tells the cases apart. A point on the curve, and a
point with no solution where the curve may be nearest at an end (a point
beyond a finite cutter), stay undecided votes. No solution where the curve
measures nearer at a knot or at one of 64 steps of its interval than at both
ends, by more than the vote tolerance, is a missed nearest point: the trim is
refused before any face is removed. find_side_of_curve keeps its one status.

Goldens: topology.brep_p10, 8 records re-blessed, nothing else moves in the
283 units.
- raw_vote_midpoint_gap{1.5e-12,1.9e-12}_trim0: face_counts [1,0] -> [1,1].
  The lens is on the reference side (its edges are Beziers ending on the
  cutter's middle piece with the inner control point below it), so deleting
  it under KeepPoint was wrong; the trim now refuses and leaves it.
- raw_vote_midpoint_gap{1.5e-12,1.9e-12}_trim1: [1,1] with success (wrong,
  the face should go under DeletePoint) -> [1,1] refused.
- raw_vote_vertex_gap{1.5e-12,1.9e-12}_trim0/trim1: [1,1] and [1,0] with
  success -> [1,1] refused. These were right on one vote of eight; the other
  seven projections had no solution.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-11 18:44:46 +00:00
Ehuntabi 2336beb6c4 Export Current View as DXF: write round holes and arcs as circles and arcs, not many short lines (#14916) (#14935)
* claim: #14916

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Export Current View as DXF: write round holes and arcs as circles and arcs, not many short lines (#14916)

The view drawing is built from short straight lines, so a round hole reached
the DXF as a ring of LINE entities and a milling program could not pick it as
a circle. The command takes a new option, `curves`: with "arcs", each ring of
visible lines that lies on one circle is written as a CIRCLE and each run as
an ARC. A polygon with few sides stays as lines. The default, "lines", writes
the same file as before.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-11 18:26:22 +00:00
P'tite Tête 513e44a5f5 test: Kernel cases for a revolved dome 1e-8 off joined flush (#3011) and a cut 1e-4 apart (#3012) (#14077)
* test: Kernel cases for a revolved dome 1e-8 off joined flush (#3011) and a cut 1e-4 apart (#3012)

- booleans/3011-revolved-dome-1e-8-off-joined-flush-to-a-cylinder, -joined-to-its-mirror: expected 6806.784 and 4188.790 mm3, one body; not operation-expressible while the join is refused in SolidCraft (#3011 open)
- booleans/3012-filleted-boxes-1e-4-apart-cut, -reversed: expected 0.03 mm3, one body each; pass since solidcore#3074, kept as regression guards
- known_failing.json unchanged; manifest booleans 125 -> 129 cases

* test: Kernel cases: the two 3011 domes replay and pass since #14348, with renders

- 3011 entries switched to replayed (operation_expressible and expressible true, result the last boolean's output); rig, outcome and traced_ops dropped as for the 3012 entries
- what: the check refused the result until #13713 was fixed (#14348)
- manifest.json: booleans expressible 114, not_expressible 12, operation_expressible 117, chain 9 -> 3 and 12 -> 1, the two 3011 reasons removed
- renders of the four cases' results drawn with solidcore-diag from KERNEL_CASES_SMB

---------

Co-authored-by: P'tite Tête <asso@ptitetete.com>
2026-11-11 18:25:52 +00:00
bherbruck 0e7913f9f7 skin: say which profile curves each side face was swept from, traced through the construction (tangency-labs/solidcore#3139) (#15062)
`create_skin_primitive_with_sources` builds the skin `create_skin_primitive` builds, bit for bit, and returns, for each side face, the indices of the curves it was swept from.

The trace runs through the construction:
1. Each curve's edge in its planar profile face.
2. That edge's segment of the loop's joined B-spline (`create_by_joining_with_breaks`).
3. The segment's span of knots.
4. The knots each face spans across the sections after the G1 split.

These are compared exactly, with no tolerance and no geometry. The answer holds where every section's joined curve has the same degree and knots: the skin's compatibility step is then the identity, which the trace checks against the surface's own knots. Otherwise it returns `SkinSources::NotTraced { why }`: open profiles, sections that are not knot-identical, or knots the skin moved. A controlled sweep's sections are affine images of one profile, so it is always traced. The default paths are unchanged, and no golden moves.

Written by w2949 in the swarm's batch tree (e271549a87), carried onto main by w2695: two hunks re-placed on main's typed errors (the b_spline_curve p2 module doc, the skin's layer-count check). Review fixes (w2878): a failed read or a construction that stopped before the side faces now has its own reason (JoinedCurveUnreadable, SurfaceKnotsUnreadable, FaceDomainUnreadable, SideFacesNotReached) instead of borrowing another's; the planar faces' edge-to-curve zip is count-checked (a mismatch records no edge: EdgeUntraced, never a wrong wall); the duplicate api_surfaces table row is dropped; every test body is compared bit for bit plain against traced; SkinMovedKnots and EdgeUntraced are unit-tested.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:20:18 +00:00
ABDULLAH 5d0b21b7e0 Arabic: vertical term in the text alignment row, real first letters in the dialog-button help, clearer file-wait note, Select term in Construct (#15081) 2026-11-11 18:17:26 +00:00
bherbruck e808acf31d Quarantine render_workspace native_preparation_disconnected_retirement_... (#15077) (#15078)
It failed two queue batches whose PRs do not touch it, 'disconnected cleanup keeps real credit owned' (left 0, right 267473), and did not fail locally in 200 runs.

Changes a default: no

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 18:06:03 +00:00
Nathan Dane c39966aae0 Move Bill of Materials to the shared panel host (#11315) (#14806)
* claim: #11315

* Move Bill of Materials to the shared panel host (#11315)
2026-11-11 17:57:14 +00:00
bherbruck bef6cc1918 blend certificate: a cone's net continues past its end along its generator, off its apex (#14284) (#14986)
#14284 continued a support's net past its end where its kind is a line in that direction (a plane, a cylinder, an extrusion) and refused a cone. A cone is a line in v for each u too: P(u, v_e) + (v - v_e) P_v(u, v_e) is the cone's own generator through its edge point, so the end span's polynomial continued is the cone there, as it is the cylinder's line.

EndContinuation::of now continues a cone along its generator (the same swap_uv rule as the cylinder) and carries its axis (ConeAxis, the canonical frame's origin and z axis, from the cone's own data) when the cone is not a cylinder. The generator continued past the apex is the other nappe, which is not the face: a part of a box past an end is enclosed only where its points are proved off the axis (some coordinate of their radial vector P - O - ((P - O).Z) Z bounded away from 0 over the part). The part is connected and holds the end's points, so it then lies on the face's nappe. Otherwise it is refused as FootPastDomainEnd, as any end the kind does not continue.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:45:40 +00:00
Brett Lawson 4d47ac033f solidcore: blend ease and rational-section failures say what failed (#15024)
The setback ease (`session/ease.rs`) and the rational fillet section
(`fillet_exact/rational.rs`) sent every failure through one local helper
with one fixed phrase. The helpers now take the phrase, and each of the
67 calls names what was missing or what failed. Variants, statuses and
`upstream_status()` are unchanged.

Part of #15019.


Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:26:10 +00:00
Brett Lawson 9b5db6c002 solidcore: blend failures carry a typed reason (part 5: blend corners and setbacks) (#14947)
* solidcore: claim blend typed errors part 5 (blend corners and setbacks)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: blend corner and setback failures carry a typed reason (part 5)

The 101 bare statuses in blend/blend_corner.rs, blend/blend_corner/* and
blend/blend_setback.rs become BlendFailure Failed/Missing with a phrase, keeping
each site's operation and status. A setback Refusal's SM_ERR now carries its
reason as the failure's phrase. The nine files leave the ratchet's WAITING list.
Pin tests in each file's own test module.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:26:08 +00:00
0rdnungsamt 08be6d6743 Schemas: Insert STEP describes its exact parameters and reply (#14918) (#14951)
file.insert_step gets a typed input contract (InsertStepParams) and an output
schema (StepInserted) in a new schema/insert_step.rs. Each key is read where
the handler reads it and fails with the handler's message; `up` and `names` are
the shared types doc.open publishes and `matrix` and `tolerance` those of
occurrence.move, so the three commands describe one shape. add_step now builds
its reply from the reply type, as add_mesh does, so the reply type is the one
place the reply's shape is written; Placed::report, which no import uses now,
is gone. The command's line leaves schema/unconverted.txt.

Nothing changes for a call that works today: a call with a `name` that is not
text, which the handler reads as if it were left out, is now reported in warn
and refused in strict, as the Insert Mesh conversion (#13341) already does.
2026-11-11 17:16:13 +00:00
jyviko a4b94a84a0 solidcore: free curves fitted and refined, bounded patches, isoparms (#14913)
* solidcore: modules for fitted curves, knots and degree, bounded patches and isoparms

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: modules for a curve set's plane, the two-rail sweep and record curves as sweep curves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a free curve's knot inserted or removed, its degree raised

curve_knots::insert_knot(curve, t), remove_knot(curve, t, tol) and
set_degree(curve, degree) on a record spline or rational spline, through
the kernel's knot insertion, knot removal with its error bound and degree
elevation (The NURBS Book, A5.1, A5.8, A5.9). A removal past tol is
refused with NoEffect; a lower degree is refused as Unsupported until the
kernel bounds how far a reduction moves the curve.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a free curve through its edit points

curve_fit::ep_curve(points, degree): the kernel's global interpolation
at chord-length parameters, a clamped B-spline on [0, 1] through every
point, refusing repeated, non-finite or too few points and a bad degree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a typed refusal for patch boundary curves that do not meet, with the gap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: patches bounded by curves, a Coons or n-sided boundary patch and a ruled surface

surface::boundary turns record curves meeting end to end round a loop into a
bilinear Coons patch (four) or the kernel's n-sided fill (three, five and more:
N four-sided faces stitched round a centre); surface::ruled joins two curves.
Each curve is taken over its natural range and turned to run on from the one
before; joins are proved by the kernel's distance within the zone tolerance,
else Error::BoundaryGap names the join and the gap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the uniform knots of a closed curve made from control points

knots::periodic_uniform(count, degree): count + 2 degree + 1 knots
(i - degree) / count, unclamped, so a polygon that repeats its first
degree points after its last makes a curve on [0, 1] joining itself with
continuity degree - 1 (The NURBS Book, 12.2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a certified bound of how far apart two B-spline curves are

crv_deviation::certified_distance(a, b): both cut into Bezier pieces over
the union of their breakpoints and raised to one degree; on each common
span the difference lies in the hull of the control points' differences
(Farouki and Rajan 1987), so the largest of them bounds |a(t) - b(t)| at
every t, with the rounding of the insertions, the elevation and the norms
carried as Higham's gamma. Non-rational 3D curves on one clamped domain.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a knot removed or a degree lowered within a certified tolerance

curve_knots::remove_knot and set_degree(curve, degree, tol) now make the
change and keep it only when the kernel's certified distance from the
curve as it was (crv_deviation::certified_distance) is within tol;
otherwise they refuse with the new Error::PastTolerance { bound }. A
lower degree runs the kernel's reduction once per degree. Rational
splines are refused for both until the bound takes them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: closed free curves, and a curve rebuilt with a certified bound

curve_fit::closed_cv_curve(points, degree): the periodic B-spline on the
points, its polygon repeating its first degree points after its last, on
the kernel's unclamped uniform knots on [0, 1], smooth across its seam;
curve::move_cv moves a repeated point with its copy.

curve_fit::rebuild(curve, degree, spans) -> (curve, bound): the curve
sampled at even steps of its parameter on [0, 1], fitted by least squares
at those parameters on uniform clamped knots through its ends, with the
kernel's certified bound of the distance between the two at every
parameter. Rational and closed periodic curves are refused for now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a sheet's interior isoparms for display, clipped to each face's boundary

isoparms(sheet, u_count, v_count, tolerance) draws u_count lines of constant u
and v_count of constant v, evenly inside each face's parameter box, cut where
they cross the face's boundary (even-odd over its loops) and sampled by the
chord rules curve_points uses. The surfaces and the (u, v) boundaries are the
mesher's own: plan_at's steps up to the face boundaries are now
mesher::prepare, which plan_at calls, so the lines follow what is drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a certified bound of how far an interpolant misses its points

crv_deviation::interpolation_bound(curve, params, points): the largest
computed distance between the curve at each parameter and its point,
rounded up, plus the evaluation's rounding (gamma_(12 p + 4) of the net's
largest coordinate, the count eval::collapse gives de Boor's levels).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: free-curve fits refuse a degree past their points and report their bounds

From the review of the curve operations:
- ep_curve and closed_cv_curve refuse a degree not below the number of
  points instead of lowering it; ep_curve returns its certified
  interpolation bound (crv_deviation::interpolation_bound) with the curve,
  tested through its points to 1e-12.
- remove_knot returns the certified distance from the curve as it was;
  set_degree returns its bound (None for a raised rational spline, which
  the bound does not take yet).
- Tests: an inserted knot within the gamma bound at 201 samples, a repeated
  knot removed one copy at a time, every derivative below p meeting across
  a closed curve's seam for degrees 1 to 5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: boundary patches of four curves (three: one side at a corner), sides reproduced exactly

Per review: opposite sides are made compatible (the kernel's
make_curves_compatible: one degree, range and knot vector, exactly) before the
bilinear Coons patch, so its sides are the curves themselves; three curves are
the degenerate case with the fourth side collapsed to the corner where the
third meets the first; five or more are refused (Unsupported, no n-sided patch
yet). ruled states its parametrisation, takes a reversed flag, and makes both
curves compatible first. The join tolerance is documented: the kernel's zone
tolerance, against its certified distance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparms are display points, not geometry, as their docs now say

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the plane a set of curves lies in, within a tolerance, certified

curve::plane_of::plane_of(curves, tol) -> Option<PlaneOf { origin,
normal, deviation }>: every curve lies in the hull of points its record
gives (a segment's ends, control points, Euclidean points of a rational
spline, the parallelogram round a conic), so the curves are within tol of
the plane when those points are, each distance bounded with its rounding
(gamma). The plane is plane_of_net's construction: through the first
point, square to the two chords that span the most. None when not planar
within tol or when the points span no plane (one point or one line).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the plane of a set of free curves at the zone tolerance

curve_plane::plane_of(curves) -> Option<CurvePlane { origin, normal }>:
the kernel's certified curve::plane_of::plane_of at the model's zone
tolerance, for an extrusion along a profile's normal or a section's
plane; None when not proved planar or when the curves span no plane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a closed curve's display points close and sag within tolerance across its seam

A test of curve_points on a closed periodic B-spline (unclamped uniform
knots, its polygon wrapped, as curve_fit::closed_cv_curve makes it) of
degrees 2, 3 and 5, at a chord and a display tolerance: the polyline's
ends are one point; it is the mesher's own closed-edge sampling (bisect
from four segments) point for point, uncapped; every chord, the seam's
among them, within tolerance at the points the sampling checks; and the
curve on either side of the seam near the chords that meet there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a record circle over an interval as an arc's definition

curve::arc_of::arc_of_circle(frame, radius, interval) gives the ArcDefinition
of the record's circle: centre the origin, reference x, axis x × y, the same
angles; the frame proved unit and square, at most a full turn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: record curves as sweep curves, exactly

sweep::Curve::from_record(curve, interval): a line as its points at the
interval's ends, a polyline as a line per segment cut to the interval, a
circle as an Arc (arc_of_circle), an ellipse or a spline as its B-spline
trimmed to the interval; traced intersection curves refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the patch tests may use the closed forms they check against

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparms clip to the boundary as the planner reads it, poles and seams included

The planner's loop fixes (a loop opened at a pole, a winding face cut into one
period, a whole sphere's pole-to-pole loop opened, holes moved beside the outer
loop, and the free parameter split at a pole) are now one function,
mesher::polygons, which plan_face calls unchanged and isoparms clips its lines
to. So lines on spheres, sphere caps and faces through a pole run whole and
stop at the face. Tests on a whole sphere, a half sphere and a pocketed sphere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparm runs pair their crossings with as_chunks

Clippy 1.98 (chunks_exact_to_as_chunks) asks for the array chunks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: plane_of's tests borrow one curve as a slice (clippy)

std::slice::from_ref(&x) in place of &[x.clone()] (CI #14913).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: periodic knots are not clamped, and are read with the general basis

CI #14913: two tests took the clamped-only routines to a periodic curve.
- knots::periodic_uniform's test validated its vector with
  KnotVector::validate, upstream's clamped check (both end knots of
  multiplicity p + 1), which refuses any unclamped vector by definition.
  The test now asserts that refusal, and the doc says periodic knots are
  not for the clamped-only routines.
- curve_fit's closed-curve test read the start with the NLib eval, whose
  N_BasisEval special-cases u == U[p] as a clamped end (N = 1, 0, ...) and
  so answered P0 = (0, 0). The true start of the uniform cubic on the
  square's CVs is (P0 + 4 P1 + P2) / 6 = (50/6, 10/6): the expectation
  stands, read now through derivs (the general basis, the one the seam
  continuity test already passes with).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a polyline's interval past its range is refused, not cut short

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a circle's frame is the arc's only within the arc's own frame error

A frame square to 1e-9 is not the record's circle at a large radius once the
arc's placement makes it orthonormal; the frame is now proved unit and square to
frame_error, a relative bound, so the arc is the record's circle at any radius.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the basis at an unclamped end of a domain is the general one

N_BasisEval sets the first (last) basis function to 1 at u == U[p]
(U[m - p]) whatever the knots: right at a clamped end only. On a periodic
curve's domain end it answered the end control point, so the NLib eval of
a closed curve neither started where it does nor closed (review of
#14913). KnotVector::basis_eval takes the shortcut only at a clamped end
(U[0] == U[p], U[m - p] == U[m]), the same bits as upstream there, and
evaluates an unclamped end by the general recurrence. Tests: the uniform
periodic cubic's basis 1/6, 4/6, 1/6 at both ends (it was 1, 0, 0, 0),
the clamped shortcut kept, and the closed square's eval at 0 and 1 at its
true start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparms take the body's size, so their tolerance and boundary are the plan's

plan raises the chord tolerance to a millionth of the body; isoparms read it at
size 0, so their edge chords could differ from the drawn ones. isoparms now
take the size plan takes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: periodic knots are allocated within the budget, fallibly

periodic_uniform collected count + 2 degree + 1 knots from an iterator,
which reserves from its size hint and aborts on a count too large for
memory (review of #14913). The count is now checked against
limits::MAX_ALLOC_BYTES (InvalidInput past it) and reserved with
try_reserve (NurbsFailure::Memory on failure). Test: usize::MAX / 2
points is refused rather than aborting.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a face whose poles cannot be told gets no isoparms, as it gets no mesh

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: an isoparm its sampling bound stops is refused, not handed over past tolerance

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a moved CV takes its copy along only on periodic knots

move_cv coupled a repeated control point with its copy whenever the knots
were unclamped at the start and the last degree points repeated the
first: repeated points on unclamped knots that are not periodic (a
quadratic on [-2, -1, 0, 1, 2, 4, 5, 6] with points A B C A B, which the
record accepts) moved point 3 when point 0 was edited (review of
#14913). New kernel check knots::is_periodic(knots, degree): unclamped,
and every knot n places on one period past it (U[i + n] - U[i] = T for
i = 0..=2 degree, within the rounding of computed knots), the relation
under which the wrapped polygon closes; move_cv requires it. Tests: the
contract on periodic_uniform knots (also shifted and scaled) and its
refusals, and the open unclamped polygon editing point 0 alone. The
periodic_uniform test checks this contract rather than the clamped
validator.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: plane_of refuses a bound it cannot form instead of dropping it

With finite points whose chords' cross product overflows (a polyline
through 0, 1e200 x and 1e200 y), the normal came out NaN, every distance
bound NaN, and f64::max dropped them, so a plane with a NaN normal and
deviation 0 was returned (review of #14913). The chord, the normal and
each bound are now checked finite before the bound is taken: a query
failure otherwise, never a plane. Test with those points.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the curve bounds refuse numbers not finite

interpolation_bound took a NaN data point or parameter into a NaN
distance that f64::max dropped, returning a finite bound for invalid data;
certified_distance likewise for a NaN control point (review of #14913).
Both check every control point, knot, parameter and data point first
(InvalidInput). Tests for each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the curve bounds check the degree before any arithmetic on it

crv_basic::Curve::new takes any degree, and certified_distance computed
p + 1 from it before refusing anything: a degree of usize::MAX overflowed
(review of #14913). Both bounds now refuse a degree outside 1..=MAX_DEGREE,
or knots that do not number the points plus the degree plus one, first
(InvalidInput). Test with usize::MAX.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the curve bounds take distances as scaled norms

A difference of 1e-200 squared underflows to 0, so a line of that length
and a point 1e-200 off it got a bound of rounding only, below the gap;
the control-point distances of certified_distance likewise (review of
#14913). Both now bound each distance by a scaled norm (the components
divided by the largest before squaring, gamma_8 in all, plus the
subnormals a subnormal product can lose), and refuse a difference that
overflows rather than letting f64::max drop it. Tests at 1e-200 for both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: certified_distance counts its rounding in the curves' own frame

The rounding of the refinement, extraction and elevation was counted on
the nets' largest coordinate, translation included, so a unit-sized curve
near x = 1e9 compared with itself got a bound above 1e-5, enough for
curve_knots to refuse an exact change at 1e-6 (review of #14913). Both
curves are now moved by minus the first's first control point before
any of that arithmetic runs there (the difference is the same in either
frame; each moved coordinate's rounding, gamma_2 of the size, is added),
so the bound follows their size. Test: the wave at 1e9 against itself
within 1e-9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a certified bound of how far apart two B-spline surfaces are

srf_deviation::certified_distance(a, b), the surface form of
crv_deviation's: both moved into their own frame, cut into Bezier patches
over the union of their breakpoints in u and v and raised to one pair of
degrees; on each common patch the difference lies in the hull of the
control points' differences, so the largest (a scaled norm) bounds
|a(u, v) - b(u, v)| everywhere, with the rounding of the move, the
insertions and the elevations as Higham's gamma. Non-rational 3D
surfaces on one clamped domain; numbers not finite, bad degrees and other
domains refused. Tests: itself and its refinements within rounding, a
moved CV bounded by its move and holding every sampled gap, the bound
independent of placement at 1e9, refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a sheet's control net

surface_cvs::control_net(sheet) -> Net { rows, cols, points }: the net
of a record of one untrimmed face on a non-rational B-spline surface.
Untrimmed is proved from the record alone: the face's domain is the
surface's natural box, one loop, every pcurve a spline whose control
points all lie on one side of the box (so, by their hull, the pcurve
does); anything else is refused as a trimmed face (Error::Unsupported),
another record as Error::Argument.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: the Gordon surface of a compatible curve network, certified

nurbs::gordon (Gordon 1969; The NURBS Book §10.5): S = L1 + L2 - T, the
u-curves skinned in v, the v-curves in u, less the tensor interpolant of the
crossings, at the network's common crossing parameters (cross degree
min(3, count - 1), averaged knots). Crossings come from the kernel's curve
intersector and are proved within the tolerance at the common parameters, else
the network is refused naming the pair; each input curve is certified against
the surface's iso-curve (certified_distance plus the extraction's rounding) and
the largest bound returned. Rational curves and networks out of order refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: typed refusals for a curve network's crossings, naming the pair

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: network::gordon, the Gordon surface through record curves with its certified bound

ops checks the family sizes, converts the record curves as surface::boundary
does (its helpers now shared within the crate), hands the kernel the zone
tolerance and names its refusals (NoCrossing, NetworkGap, PastTolerance,
Unsupported for rational curves, Argument for a family out of order).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a sheet's control points moved, and a sheet rebuilt with a certified bound

surface_cvs::move_cvs(sheet, moves): the untrimmed sheet's net with the
points named moved, knots and degrees kept, as a new one-face sheet
(surface::sheet). surface_cvs::rebuild(sheet, deg_u, deg_v, spans_u,
spans_v, tol) -> (sheet, bound): the surface on [0, 1]^2 sampled at even
steps, four per control point each way, fitted by least squares through
its boundary on uniform clamped knots, column by column along u then row
by row along v (approx_knots, The NURBS Book 9.4.3), and kept only when
the kernel's certified distance from the surface
(srf_deviation::certified_distance) is within tol, else PastTolerance.
Tests: a moved CV changes the sheet only over its own span, a bicubic
rebuilt into its own space is itself within rounding, past-tolerance and
bad arguments refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: Gordon certificates in the network's own frame, checked on a patch and a closed grid

The crossing gaps and the curve-to-iso-curve bounds were counted on the
coordinates, so a network far from the origin got a bound of its distance
from it; they are now counted in the network's frame (minus its first control
point, each move's rounding included), as certified_distance is.
Tests: a cubic patch with interior knots in u, Bezier in v, is given back by
its iso-curves to 1e-9 on a grid (four u-curves skinned by cubics reproduce
its v, and L2 = T); a closed 3 x 3 grid whose outer curves meet at their ends
builds with one crossing per pair; the bilinear network 2e5 out keeps a bound
of its own size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: KnotVector::basis_eval answers as N_BasisEval again (reverts 00bfb3fe19)

The goldens are the SMLib reference: nlib.funcs_basic changed in 37 of
3130 cases (edge_unclamped, edge_mult_above_degree, gen0020, gen0035, ...)
once basis_eval stopped taking its end shortcut at an unclamped end. A
shared NLib routine keeps upstream's answers; its end shortcut is back,
its doc and periodic_uniform's saying that it reads a domain's ends as
clamped ones, so a periodic curve is evaluated through the general basis
(derivs, eval::CurveEval). The closed-curve test reads the start and the
end of the periodic cubic, (P0 + 4 P1 + P2) / 6, through derivs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: interpolation_bound reads a curve through the general basis

interpolation_bound evaluated through the NLib eval, whose basis keeps
upstream's clamped reading of a domain's ends (N_BasisEval), so a
periodic curve's bound at its ends measured from the end control points
(review of #14913, curve_fit.rs:69). It now evaluates through derivs at
order 0 (A2.3, right for any knots; the rounding count unchanged). Test:
the periodic cubic on a square, bound within rounding of its true start
(P0 + 4 P1 + P2) / 6 at both 0 and 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a sheet on unclamped knots is not sampled for a rebuild

surface_cvs::rebuild sampled the surface through the kernel's surface
evaluation, whose basis keeps upstream's clamped reading of a domain's
ends (N_BasisEval), and the reparametrisation then clamped the knots by
overwriting them, so a periodic sheet would have been rebuilt from wrong
samples under a bound that held for another surface (review of #14913,
curve_fit.rs:69). Knots not clamped are now refused (Error::Argument)
before anything is evaluated. Test: the bicubic sheet with unclamped u
knots on the same domain reads as untrimmed and is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparms drawn on the display triangles, never behind them

Isoparms were sampled on the true surface, which lies behind the shaded chords
where the surface is concave toward the viewer (a revolve's neck), so the
viewport's face bias buried them in stretches. Each line is now cut by the
face's planned triangles in (u, v) and each piece mapped linearly onto its
triangle, with the node points the mesh evaluates (TessPlan::nodes, factored
out of evaluate, which calls it unchanged). Every point lies on a triangle of
the mesh. The clipping and sampling of their own are gone, with the prepare
accessors only they used. Test: a torus's inner neck, every point on a
triangle of the evaluated mesh within 1e-9.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: Gordon's tolerance checks refuse NaN without a negated comparison

Clippy 1.98 (neg_cmp_op_on_partial_ord, cast_lossless): the checks now say
what they mean through a small within() that takes a NaN as not within, and
the patch test converts its integers with f64::from.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: a Gordon network takes record splines: equal weights are polynomial

A record spline's kernel curve carries a weight of 1 on every point, which the
NURB marks rational, so every network holding a spline was refused as
rational (sc-b, through SurfaceCraft). A curve whose weights are all one value
is now taken in its polynomial form (exact); only unequal weights are
rational. Tests: curves weighted 1 throughout build, unequal weights are still
refused; in ops, a network of clamped cubic splines and lines builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: surface_cvs's span test asserts with assert_ne (clippy)

clippy::manual_assert_eq on #14913: assert!(a != b) becomes assert_ne!.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparm pieces join by the mesh's shared sides and nodes, and run into poles

CI (#14913): a sphere's meridians stopped short of its poles, and pieces were
joined by a distance along the line. Each piece now records the side or node
of the triangulation each end crosses, and pieces join only where one ends on
the very side or node the next starts on. A polyline ending on a side at a node
where the surface collapses along the line (a pole it runs into, by the
planner's classifier within the plan's chord tolerance) is carried along that
side to the node, so meridians reach the poles. The test's needless crate::
qualification is dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: isoparm walk in clippy's forms (field name, while let, if let)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

* solidcore: Gordon's working arrays are reserved fallibly, their counts checked

The panic-site inventory flagged eight Vec::with_capacity(x + 1): the + 1 can
overflow and the allocation abort. They now go through room(), checked_add
and the kernel's try_reserve_total (the allocation bound), refused as
InvalidInput.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DtL5M2MmcDrkcWhQeHS2K8

---------

Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:15:03 +00:00
Brett Lawson a3d747c88d solidcore: blend failures carry a typed reason (part 2: fillet_geom p1, p2) (#14933)
* solidcore: claim blend typed errors part 2 (fillet_geom p1, p2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: fillet_geom p1 and p2 failures carry a typed blend reason (part 2)

Converts the 168 bare statuses of blend/fillet_geom/p1.rs (62) and p2.rs
(106) to BlendFailure: Missing for null dereferences, Failed for SE(SM_ERR),
BadIntersections for sm_TwoPntsIntersection's empty start-point drop and
NotConverged for FindParameterAtArcLength under SER. Each keeps its operation,
status, kind and entity. Both files leave the WAITING ratchet; the tests that
matched Upstream read the typed failure and upstream_status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: tests and the fillet_geom_p3 runner read p1/p2 failures by status

Tests in fillet_geom p3/p4/p5, fillet_solver p3 and p5 and wr682 that matched
a bare Upstream from a p1/p2 routine now read upstream_status; the
blend.fillet_geom_p3 goldens runner reads goldens::output::blend_status, so
its rows stay the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:02:20 +00:00
bherbruck 30b7a56a94 Web: inserting a file from the browser's file panel uses the staged loader (#15042)
Opening a file from the panel already used it; inserting ran the import on the window thread, so a large STEP insert stopped the page from drawing until it was done. From #2322.

Co-authored-by: InfraInnovator <168700057+InfraInnovator@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:52:42 +00:00
bherbruck aa309e727a STEP import: keep a face's pcurves inside its domain when its NURBS form ends on a quarter line (#15029)
Port of #14262 to solidcore-step. Where a face's extent ends within the file's tolerance of a quarter line, form::surface_within ends the form on that line, but the face's pcurves were not moved to match: a pcurve the kernel projected (SmlibTrims) could start up to that tolerance before the form, outside the face's domain, and SMLib's check refused it ("Edge endpoints within face domain", tests 70 and 71). onto_form moves a pcurve control point past the form's end by at most the form parameter of the tolerance onto the end; the pcurve then lies on the form, and raise_edges measures it against its edge. A point further out is left for the record check.

Co-authored-by: Nachumi Eliyahu <nachumi@a2zoperations.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:52:39 +00:00
Andrzej Błasik a0578030d3 solidcore: the body check skips coincidence queries that certified span boxes rule out (#14250) (#14910)
The coincident-topology search of the body check makes one geometric query
for every vertex/face and edge/face pair whose bounding boxes meet. A
free-form face has one box for the whole face, so on a body with many
B-spline faces nearly every pair is queried.

Before a query on a face whose surface is a stored B-spline, the search now
asks the face's certified boxes: the control-point boxes of its knot spans,
each split 3 times as a Bezier patch. An edge on a stored B-spline curve gets
the same boxes; any other curve uses its own box. A query is skipped only
when the boxes are farther apart than 2 * tol plus the rounding allowance of
the splits, so no pair can come from it: pairs, reports and their order are
unchanged. Faces on closed-form surfaces are not pruned.

Edge/face queries on rows of B-spline panels: 8 panels 112 -> 108, 32 panels
1,984 -> 684. The bicycle grip of #14250 regenerates in 23.5-25.4 s instead
of 44.1-46.4 s with identical output.
2026-11-11 16:43:41 +00:00
bherbruck 73bad21e10 ops: a boolean's operands keep their solid proof, and the next boolean uses it (#14830 fix B) (#14996)
A body a boolean proved to be a solid keeps that proof (Outward, from is_valid_and_outward, with
the kernel settings it was made under), and the next boolean that takes the body unchanged as an
operand uses it instead of deciding the volume's sign again. Any mutable access through the
body's lock drops the proof, and a proof made under other settings is not taken; the manifold
test always runs. volume_sign gets a profile scope so the test counts decisions: brep-bench's
drilled plate (9 cuts) goes from 27 volume-sign decisions to 19. Goldens unchanged.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:18:49 +00:00
MarkusRe 49928ebffd reach: a plane beside a bare B-spline net has a certified reach (#13722) (#15009)
* test: planes moved beside bare B-spline nets build sound bodies (#2978)

The goldens cases gen0000, gen0021, gen0041 and gen0048 of
topology.brep_local_operation on Solids/extrusion.smb, two of whose walls
are extrusions with no analytic label (of a cubic B-spline, and of a
rational curve of lines and an arc): walls given their tangent planes, and
the top tilted, build prisms of the volume their caps give (ten times the
bottom cap's area; the cap's area times the tilted plane's height over its
centroid). And gen0076 on Solids/pyramid.smb, the base moved up beside
sides stored as bare nets: the similar pyramid above it, the volume times
((h - d) / h)^3. On local-operations they are refused as ReachUncertified.

And the five cases of #3042 on Solids/nurb_fillet.smb (face0_same,
face4_same, their attributed twins, fc0004): a sound manifold solid, or
refused with the input as it came in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* reach: a plane beside a bare B-spline net has a certified reach (#2978)

local_extension_reach bounded a plane against a labelled plane, cylinder,
cone or sphere, and against a kept B-spline face only along its
isocurves (SplineFace), so a local operation beside an extrusion with no
label, a moved net, or a corner of a plane with a quadric and a net or
with two nets was refused as ReachUncertified: on Solids/extrusion.smb
(main before the local operation built gen0000, gen0021, gen0041, gen0048
of topology.brep_local_operation) and on Solids/pyramid.smb, whose four
sides are bare B-spline nets.

- A B-spline surface or extrusion with no label and no definition is a
  bare net (reach/net.rs), a plane stored as a NURBS among them.
- A plane beside a net: in each normal section of the edge the plane's
  trace x0 + tau u meets the net at a (u, v, tau) proved by Krawczyk's
  operator for every section of a piece of the edge's parameters; the
  reach is sqrt(|x0 - p|^2 + tau^2), and the pieces are halved as for a
  quadric. Past a side the net is the extension the executive builds
  (Ruled: H + s' H_v homogeneous, one reparameterisation for every row;
  past a corner H + s' H_u + t' H_v + s' t' H_uv where both sides' rows end
  in one weight ratio). A closed direction runs on round its seam.
- Corners: two planes' line meets a net; where a boundary row of the net
  lies on one of the planes, the row meets the other plane (1 x 1); a
  plane, a quadric and a net (2 x 2); a plane and two nets (4 x 4). A
  moved net's move is bounded by the meetings on it.
- Where no meeting is proved (a plane moved off a round kept as its net)
  the reach is still ReachUncertified; so is a net past a side whose rows
  end in different weight ratios (past the rows' reach the extension takes
  the product form or is left short), and a net with unclamped ends or an
  inner knot of full multiplicity. A row within the B-rep's tolerance of a
  plane is taken as on it, as two planes within it are one.
- The isocurve bound (SplineFace, spline_face(_of), spline_reach(_along),
  spline_corner, SPLINE_STRIPS, SPLINE_REACH_TRIES, Exact::Spline) is
  replaced by the net's, as jyviko decided on #2978: one construction for
  every net, kept or moved, at edges and corners.

Tests: the round kept as its net is reached sqrt(2 r d) = 1 as on its
cylinder (was: refused, now the case for a plane moved off it), and its
tangent edge alone is bounded by sqrt(0.1^2 + 0.99) = 1; the tilted end
face beside the round's net reaches 0.45 at the round, also at the corner
where the side holds the net's boundary row (the bound now within the
B-rep's tolerance), and the net alone along its rulings 0.45 (the
isocurve test, on the net); the Ruled extension model in reach/net.rs is
checked against the extension extended_sides_keeping_parameters builds,
past each side and corner; the creased roof on the defective cube now
reaches the gate, which refuses it as Unsound with the input kept;
closed-form unit tests of the net's meetings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* goldens: bless topology.brep_local_operation, seven cases built beside nets (#2978)

Seven cases that the reach refused (ReachUncertified, status 1001, the
input put back as it came in) are built now, each a manifold solid that
passed the local operation's gate; nothing else moves in any unit.

  case     file                 was        now (volume)
  gen0000  Solids/extrusion.smb refused    647.1111714853831
  gen0021  Solids/extrusion.smb refused    687.0724147222363
  gen0031  Solids/extrusion.smb refused    500.08548890558274
  gen0041  Solids/extrusion.smb refused    580.9394352608608
  gen0048  Solids/extrusion.smb refused    623.0293856814408
  gen0059  Solids/extrusion.smb refused    462.59544953870954
  gen0076  Solids/pyramid.smb   refused    945813.736759979

Why they are right: gen0000, gen0021 and gen0048 (walls given planes) are
the prisms of their caps, ten times the bottom cap's area; gen0041 (the top
tilted) is the cap's area times the plane's height over its centroid;
gen0076 (the base moved up 1.31) is the similar pyramid above it,
V0 ((h - d)/h)^3: all within 1e-5 (tests/issue_2978_local_reach_beside_nets.rs).
gen0031 and gen0059 tilt a wall out of the vertical, so no prism formula
holds; they are manifold, pass the gate's check against the input, and are
drawn in the pull request.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* findings: the local operation's reach beside bare B-spline nets (#2978)

The cause, the bound and its Ruled extension model, the sketch of a
normal section (VectorCraft source beside it), and the seven cases of
topology.brep_local_operation that build now, each before (refused, the
input kept) and after, drawn by solidcore-diag from the same view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the volume check builds on main through brep_volume_default (#2978)

`validation::volume` never landed on main, so the test did not build.
A local `volume` helper integrates the solid with
`mass::integrator::properties::brep_volume_default` at the test's
accuracy.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* test: Newton settles far from the origin, guards take only refusals (#2978)

CodeRabbit on #3071:
- a quarter cylinder of radius 0.002 at (1000, 1000) is met by a line
  through its axis (Newton's stop test was relative to |y|, which the
  rounding of points that far out never meets);
- the #3042 guards accept only an offset refusal, not any error rolled
  back.
The third point (a boundary row is the corner's only where it passes the
vertex) is tested with its fix, which adds the query the test calls.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* reach: a corner's row passes its vertex; Newton settles anywhere; past a side, the tangent lines (#2978)

- A boundary row of a net is the corner's curve only where it lies on the
  plane and passes the vertex (Net::rows_through: a point of the row,
  enclosed, within the B-rep's tolerance of it); a row on the plane that
  runs elsewhere no longer bounds the corner.
- Newton's start for Krawczyk's box stops where its step no longer
  shrinks and returns its last iterate, with no stop relative to the
  parameters, which a part far from the origin never meets; the box alone
  decides what is proved.
- Past a side the net runs on the lines G + d G_v along the side's
  tangents: the extension the executive builds where the rows end in one
  weight ratio, and the same lines on other parameters where they do not.
  The homogeneous form H + s' H_v had a pole behind the side for rows of
  different ratios, and Krawczyk's boxes there did not contract
  (solidcore-ops issue_2878_spline_round_draft).

Its test: a saddle net whose row v = 0 lies on z = 0, which also holds
its line x = 5; at a vertex on that line the row is not taken, at a
vertex on the row it is.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* test: a line through a net's corner past two sides of uneven end weights is met (#2978)

A biquadratic bump whose rows end in different weight ratios across
every side, as a variable round's do: the line along its normal through
the corner (1, 0) meets it there. Krawczyk's box about that meeting runs
past both sides, so the extension past the corner must be enclosed. It
is not yet (a corner is enclosed only where both sides' rows end in one
ratio), and the test fails. solidcore-ops issue_2878_spline_round_draft
is refused the same way, at the end of the round's x = 0 section.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* reach: a net's corner past two sides is enclosed, either extension past its u side (#2978)

solidcore-ops issue_2878_spline_round_draft (a box with a variable round
drafted at its ends) was refused as ReachUncertified at the edge where
the round ends at x = 0: its end vertex, where the round runs tangent
into the front face, is the corner (u1, v0) of the round's net, so the
meeting there needs Krawczyk's box past both sides. A corner was enclosed
only where both sides' rows end in one weight ratio, and a variable
round's never do.

The executive extends the u sides first and the v sides on what they
left (`extended_sides`), each Ruled. Past a u side it builds either the
homogeneous lines `H + s (H_u + mu H)` or, past their reach, the product
form `S + s S_u`; projected these are `G + sigma G_u`, `sigma = s / (1 + s
kappa)` with `kappa = (p / h) C / W >= 0` along the side (`C = sum N_j (rho
w_n - w_(n-1))`), and `kappa = 0`. Past a v side either form is the lines
`E + t E_v` on other parameters. So a corner is `E + t E_v` with `E_v =
G_v + sigma G_uv + sigma_v G_u`, which carries the u side's parameters:
the two forms give two corners. Which one is built depends on the
distance asked, which the reach does not know, so kappa is taken over its
hull with 0: Krawczyk's operator over enclosures holding both forms holds
each form's own, and a box it proves holds a root of whichever is built.
Where the rows end in one ratio kappa is 0, and the model is the one
before. The test of the model against the built extension now also runs
on a net whose rows end in different ratios, past its sides and corners.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* test: a net is taken only where it ends on its surface's side (#2978)

From CodeRabbit on #14066, measured: a quadratic strip given the u knots
0, 0, 0, 1 - 1e-13, 1, 1, 1 is stored with 0, 0, 0, a, a, a, a: the
knot within the scaled zero (1e-12) becomes a repeat, and the end knot
stands four times for degree 2. The surface ends on its last row (z = 1
at u = a), the net's enclosure at that side on the row before it (z =
0): `clamped_and_continuous` asks the last p + 1 knots to be equal, not
the end knot's multiplicity to be p + 1. The test asks what the net
encloses at the side to hold the surface's point there, or the net not
to be taken.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* reach: a net is taken only where each end knot stands exactly p + 1 times (#2978)

`clamped_and_continuous` asked the first and last p + 1 knots to be
equal, not the end knot's multiplicity to be p + 1. A longer run (a span
narrower than the knots' scaled zero, stored as a repeat) ends the
surface on its last control row alone, at the end knot, while the net,
whose sides are its end rows, ends on the row before: what it enclosed
at that side was not the surface's. Such a net is no longer taken, so
the reach beside it is refused (ReachUncertified), as for any other
unclamped net. From CodeRabbit on #14066; the guard it proposed (the
domain against the knots' ends) holds here, as the stored surface's
knots are the net's.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* goldens: bless topology.brep_local_operation, eight cases built beside nets (#2978)

Eight cases that main's reach refuses (ReachUncertified, status 1001, the
input put back as it came in) are built now, each a manifold solid that
passed the local operation's gate:

  case     file                 main      now (volume)
  gen0000  Solids/extrusion.smb refused   647.1111714853831
  gen0021  Solids/extrusion.smb refused   687.0724147222363
  gen0031  Solids/extrusion.smb refused   500.08548890558274
  gen0041  Solids/extrusion.smb refused   580.9394342209
  gen0048  Solids/extrusion.smb refused   623.0293856814408
  gen0059  Solids/extrusion.smb refused   462.59544953870954
  gen0070  Solids/extrusion.smb refused   661.6156461503
  gen0076  Solids/pyramid.smb   refused   945813.736759979

Why they are right: gen0000, gen0021 and gen0048 (walls given planes) are
the prisms of their caps, ten times the bottom cap's area; gen0041 (the top
tilted) is the cap's area times the plane's height over its centroid;
gen0076 (the base moved up 1.31) is the similar pyramid above it,
V0 ((h - d)/h)^3: all within 1e-5 (tests/issue_2978_local_reach_beside_nets.rs).
gen0031, gen0059 and gen0070 tilt a wall out of the vertical, so no prism
formula holds; they are manifold, pass the gate's check against the input,
and are drawn in the finding.
The volumes were measured before the rebase onto main; since then the
bodies' sampled geometry moved by at most 7e-16 relative (rounding), the
graphs and records not at all.

One case is refused on both sides and only names another reason:
gen0015 (Solids/extrusion.smb) is refused by main's reach (ReachUncertified
on face 0, status 1001); with the reach certified it reaches the corner
split, which main now always runs, and is refused there
(offset_executive::step_gaps, EdgeVanishes on edge 2, status 1043). The
input is put back either way; only the record's status moves.

Every other case of the unit is unchanged within the goldens' 1e-9.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* reach: the docs name the nets and vertex triples left without a bound (#2978)

`exact_class` takes a bare net only where `Net::of` does, and
`local_extension_reach` lists what it refuses at a vertex: any three
faces but the kinds it bounds, even three that all stay, and a net
`Net::of` turns away.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:18:01 +00:00
MarkusRe a00b1a73af solidcore: lines where two parallel cylinders cross are clipped to both faces by default (retire two flags, B24) (#14954)
* claim: #14246 (B24: cone_parallel_line_midpoint, cone_parallel_line_domains)

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: parallel-cylinder lines are clipped to both faces on the default kernel (test first)

The issue 711 tests and the parallel-cylinder tests in surface/cone/p3.rs
now run on Kernel::default(), without setting cone_parallel_line_midpoint
or cone_parallel_line_domains. On main they fail: the default kernel
builds each line over the first cylinder's full height, tests it at its
bottom end, and so drops lines in faces trimmed above that end or keeps
lines that run past a face's top.

The test that pinned the second hole's failure on the default kernel
goes: it asserted the defect.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: retire cone_parallel_line_midpoint and cone_parallel_line_domains (WR-259)

Two parallel cylinders cross in lines along their axis. Cone::
intersect_with_cone now always clips each line to both requested face
domains (converted to STEP) and tests it at its middle. The old path built
each line over the first cylinder's full axial extent and tested its
bottom end: a face trimmed above that end lost the line, and a face
shorter than the cylinder got a line running past it.

- delete both UpstreamFixes fields, SolidCraft's preset lines, their
  fixes.json entries, the goldens case flag arm and every test setting
  of them;
- fixtures/solidcraft/3665-column-in-channel.json: the four cases no
  longer ask for the retired flag;
- WR-259 addendum naming the retirement.

SolidCraft and the kernel rig already ran with both flags on.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: bless surface.cone_p3 for parallel-cylinder lines clipped to both faces

151 rows of surface.cone_p3 move; no other unit does (all 283 units at
the fix: 282 pass, surface.cone_p3 changed=151, added, removed and broken 0).

- 140 rows: main tested each line at its bottom end, below a face whose
  domain starts higher, and returned no lines; now 1 or 2 lines spanning
  the overlap of both faces' axial ranges (checked by evaluating each
  surface at its domain corners).
- 3 rows (fuzz_axis_overflow_zero_y*): the second cone's y axis unitizes
  to zero (WR-159), so its surface lies at y = 1.6, 1.6 or more from the
  first cylinder's axis (radius 1, tolerance 0.1). The faces share no
  point; main's two lines are gone.
- 8 rows (rejected_*, no polar converter): still refused, status_1007
  to status_1006, from the domain conversion that now runs first.

Every row with its old and new curves:
plan/findings/surface.cone_p3--parallel-cylinder-lines-clipped-by-default-2026-11-11.md

Co-Authored-By: Claude Code <noreply@anthropic.com>

* solidcore: parallel-cylinder tests check both ends on both cylinders, coaxial faces and the refusal

- assert_axial_lines checks both ends of every line on both cylinders,
  and the trimmed-domain tests assert the curve types;
- coaxial cylinders: faces apart along the axis share nothing; faces
  that overlap still get boundary curves on the common wall;
- a cone with a zero y axis (no polar converter) refuses the
  intersection when its face domain is converted;
- the issue 711 cut bodies pass the Level 2 check;
- the comments say what the clipped line's middle guarantees.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-11 16:17:58 +00:00
MarkusRe fbfdb21cf1 Agents and scripts: Render Image and Check Render Request describe their replies (#13311) (#14963)
* Render Image and Check Render Request: a test that both describe their replies (#13311)

Fails until the two commands publish an output schema.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Agents and scripts: Render Image and Check Render Request describe their replies (#13311)

Render Image (render.start) replies with the queued job's status, the same JobState that
Render Progress gives for a job, plus ignored_controls for a raster or CPU request. Check
Render Request (render.preflight) replies in the form of its request: RuntimeChecked for
raster and CPU ray tracing, GpuChecked for progressive: true, with the sections both share
in Checked. The handler builds both replies from these types instead of json! literals, and
so does the window's own preparation of the two commands (render_preparation), which had its
own copy of Render Image's reply. The CPU and GPU denoising texts are one function.

The render crate has no JsonSchema, so its sections (the request, resolved, admission,
options, the CPU limits) are published as objects, as schema/render_jobs.rs does. The JSON
of both replies is unchanged. Both commands leave schema/unconverted.txt.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Render Image and Check Render Request: a queued job's reply never fails, and the tests pin each form's keys (#13311)

Once Render Image has queued its job, building the typed reply falls back to the status as
the render crate gives it rather than returning an error, so a caller never retries a job
that runs. The reply tests now check each form's exact keys, as the handler gave them
before its reply had a type, and the CPU-only and GPU denoising fields. The environment,
CPU profile and transport descriptions say what a raster request and a sky get. Found in
review.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-11 16:14:56 +00:00
Brett Lawson 018cdc012b solidcore: one bare-status scanner for every typed-errors ratchet (#14991)
Every typed-errors ratchet had its own copy of the bare-status scanner,
and each cut a file at its first test module, so library code after it
was not counted: blend/fillet_solver/p4.rs holds 38 bare sites, but the
ratchet saw 6.

The new test-only error/bare_scan.rs blanks comments and literals, then
removes every #[cfg(test)] item wherever it sits (and skips the files of
test-only out-of-line modules) before counting. Every ratchet now uses
it, the per-area copies are gone, topology, heal and mass walk their
whole area instead of fixed file lists, and sweep counts nl_ser too.
Counts are unchanged except blend's p4.rs, from 6 to 38.


Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 16:08:37 +00:00
bherbruck 682068f7c0 Release 0.40.0 (#15015)
* Release 0.40.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Update rustix to 1.1.6 for RUSTSEC-2026-0486

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:59:46 -05:00
github-actions[bot] 2a802b228b Regenerate generated files and fold pending files [skip ci] 2026-11-11 16:38:58 +00:00
bherbruck ed462d273e mass: skip constant-u trim pieces in the volume enclosure (#14830 fix A) (#14984)
Every cell's flux integrand carries the factor u'(t), so a trim piece on which the pcurve's u is
constant (a seam's trim, a closing segment along v) contributes exactly zero; its cells only
added work and rounding width. constant_u decides it exactly (bit-identical weight and u*w on
the piece's control points, no tolerance), and Work::add_piece skips such pieces. brep-bench
enclosure cells: pipe-on-planar-cubic 68,113 -> 4,357, pipe-on-twisted-cubic 63,663 -> 5,341,
helical-pipe 11,127 -> 4,967. Results and goldens unchanged.


Claude-Session: https://claude.ai/code/session_01K14jA4GZsg6UpbBehxSypM

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 15:32:54 +00:00
bherbruck c6817d49bc ops: section_frames reads a body's edge chain as a loft_blend section (tangency-labs/solidcore#3140) (#14980)
* sweep: a body's edge chain read as a blend's frames, in closed form from the surface's derivatives (tangency-labs/solidcore#3140)

section_frames(k, brep, chain, leave, &FrameOptions) gives the frames of a cross-section that is
an edge chain of a body, for section_blend: at each station the chain's point and the support
face's shape along leave there. SolidCraft's rules are the caller's FrameOptions: the support
face is the face bounding the whole chain whose tangent plane keeps most of leave (refused below
min_in_plane, SolidCraft's 0.2), and the stations lie at even arc length.

Each frame is in closed form: the station's foot on the face, the surface's own derivatives to
third order, and the parameter line's c', c'', c''' along (du, dv) exactly, bend and bend_change
from them. SolidCraft reads them by five-point differences of step a thousandth of the chain;
these are those derivatives without the stencils' truncation. Where a station sits on a
knot, the second and third derivatives are taken on the spans the line runs into, as
SolidCraft's samples read them (a rational circle's quarter knot otherwise turns the bend's
part along the surface round).

Measured on the cylinder rim left along (1, 0, -3), 17 stations, SolidCraft's step (a
thousandth of the chain) and its choice of central or one-sided samples at each: SolidCraft's
bend differs from the closed form by at most 1.36e-9 (the one-sided stencil's O(h^3)).

Tests: a cylinder rim left down its wall (bend 0); left askew, the bend's normal part is the
wall's normal curvature -sin^2(a)/R at every station; a box edge left into its top (0);
SolidCraft's stencils copied, at every station it samples (within 1e-8); the refusals.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ops: section_frames reads a body's edge chain as a loft_blend section (tangency-labs/solidcore#3140)

sweep::railed::section_frames(body, edges, leave, stations, min_in_plane) gives the kernel's
section frames (sweep::section_blend::section_frames) as BlendFrames for loft_blend: edge
indices into the body's list, in order; SolidCraft's 0.2 is the caller's min_in_plane. Ops maps
the indices and the refusals; it computes nothing.

Tests: two coaxial cylinders' rims read as frames along their walls and blended at G1 make one
face within 1e-3 of the wall's area between them; an edge index off the body is refused.

On #14645 (ops loft_rails and loft_blend), now on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 15:32:37 +00:00
bherbruck 34ff474493 Section Analysis: remove the Distance slider (reverts #14013) (#15001)
The Section Analysis dialog goes back to its Distance field and the
viewport arrow for moving the cut. Dragging a number field's label
scrubs it everywhere, so a per-dialog slider isn't needed.

This reverts commit fa2c8cfa45.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 15:23:56 +00:00
bherbruck ed8c42b117 CI: quarantine for flaky tests, reported but never failing a batch (#14994)
A flaky test goes on tests/QUARANTINED_TESTS with its issue and the date added. It still runs; cargo xtask known-failing reports each quarantined test in the log and the job summary and does not fail the job on it. cargo xtask lists fails an entry with no issue or older than 14 days. Seeded with the 512-hole pattern timing test (#14587); the other flaky tests of the last three days are already fixed on main.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 15:14:05 +00:00
MarkusRe 4a46afb867 Patterns and mirrors: copies of several features in a component find its bodies (#14305) (#14558)
* claim: #14305

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Patterns: test that copies of features in a component cut its body (#14305)

In a component: a circular pattern and a mirror of two through cuts on
a plate, a mirror of a slot that splits the plate and a hole, and a
circular pattern of a hole, its chamfer and a second hole on a disc.
On main the copies of the later cut find no body ("there is no body to
cut or intersect") or miss their piece; at the design's root they work.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Patterns and mirrors: a body a feature changes stays in its component (#14305)

A body that a step of a feature replaced (a cut, a join, a blend) was
rebuilt with component 0 until the feature ended. A pattern or mirror of
two cuts in a component applies the second cut's copies in the same
feature, to the bodies of its component, and so found none: "there is
no body to cut or intersect". ModelBody::remade keeps the name, the
feature and the component of the body it replaces.

Co-Authored-By: Claude Code <noreply@anthropic.com>

* Patterns and mirrors: the pieces of a body a copied cut splits stay in its component (#14305)

A cut that splits a body rebuilt each piece in component 0 until the
feature ended. In a pattern or mirror in a component, a later source's
copies then missed the piece they fall on. Each piece now keeps the
component of the body it was cut from.

Co-Authored-By: Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Code <noreply@anthropic.com>
2026-11-11 15:03:28 +00:00
thocsmith d98d06fd01 Show Dimensions: a sketch seen edge-on keeps its dimension lines near it, not across the window (#14826) (#14881)
* claim: #14826

* Show Dimensions: a sketch seen edge-on keeps its dimension lines near it (#14826)

A dimension sized its text, gaps and overshoots from how long the sketch's
x direction looks on screen. Seen with that direction at the eye, it looks
a pixel long or less, so the lines ran far across the window and over the
panels. dim_view::mm_per_pixel now takes the longer-looking of the
sketch's x and y directions, for the sketch being edited and for Show
Dimensions on a finished sketch. Face-on nothing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: thocsmith <193096300+thocsmith@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 14:55:11 +00:00
Brett Lawson ac0b0b56c3 solidcore: blend failures carry a typed reason (part 4: overflow and sections) (#14932)
* solidcore: claim blend typed errors part 4 (overflow and sections)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

* solidcore: overflow and section failures carry a typed blend reason (part 4)

fillet_cliff_overflow (56 sites), fillet_overflow (31) and the
fillet_section files other than recertify (85) build BlendFailure in place
of bare statuses, each with the status, operation and entity of the
Upstream it replaces. Pin tests in the converted files' own test modules;
their WAITING lines are removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 14:45:34 +00:00
Brett Lawson 10882b74af solidcore: the fillet session's failures carry a typed blend reason (part 3) (#14931)
Every bare status the live fillet session builds (session.rs and every file
under session/, 209 of 211 sites) is now a BlendFailure with the operation,
status and entity of the bare status it replaces, so every decision on a
status (refusals, finish, retries, the non-manifold refusal) is unchanged.
finish::without_entity keeps its two Upstream arms: it strips the entity of
any status error, not only the session's.

Tests that matched Upstream { code: 1001 } (or its message) for a session
failure read the status. The goldens runners read blend_status: the
blend_fillet_corner_p1 status, and the SolidCraft-case runner, which words a
blend failure as the Upstream it replaced so the cases' refusal texts match.

Part of #13790.


Claude-Session: https://claude.ai/code/session_01SdcgEtwSrdwZxqTQp5MfnU

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 14:45:32 +00:00
bherbruck 81221ef97e ops: chamfers choose their corner, the mitre or the kernel's facet (#14244) (#14975)
blend_ordered takes BlendOptions { turn, chamfer_corner } in place of its Turn. ChamferCorner
is Mitre (the default, what ops always built, so a design saved without a corner type keeps
its corners) or Facet: the session is set to the kernel's blend corner Facet
(blend_corner::chamfer, WR-716), the plane through the chamfers' rail crossings. The Facet is
refused as an argument error on a blend other than a chamfer, and as Unsupported without the
kernel's fillet_chamfer_corner fix; ops computes nothing.

Tests, in closed form: a box corner's three chamfers of 2 remove 174 as the mitre (9 faces) and
174 + 2/3 as the facet (10 faces); a square pyramid's four apex chamfers of 2 sqrt(2/3) leave
3776/3 as the facet, their mitre refused; the refusals. The six blend_ordered call sites in
the ops tests move to BlendOptions.

Part of #14244 (the kernel half; the dialog option is SolidCraft's).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 14:31:08 +00:00
617 changed files with 51155 additions and 12040 deletions
+6
View File
@@ -9,3 +9,9 @@ self-hosted-runner:
- blacksmith-16vcpu-ubuntu-2404
- blacksmith-32vcpu-ubuntu-2404
- blacksmith-8vcpu-windows-2025
# Release builds (workflows/release.yml).
- blacksmith-16vcpu-ubuntu-2204
- blacksmith-16vcpu-ubuntu-2204-arm
- blacksmith-4vcpu-ubuntu-2404-arm
- blacksmith-6vcpu-macos-15
- blacksmith-12vcpu-macos-15
+3
View File
@@ -10,6 +10,9 @@ Changes a default: no
Changes a default: yes — <what>, old behaviour kept behind preference <name>
Docs-only and bot PRs are exempt. -->
<!-- A kernel change (solidcore/, crates/smlib/) that changes or deletes lines of an existing test or golden expectation needs a line saying why the old test was wrong (adding tests needs nothing):
Test change: <reason> -->
## Validation
What did you run, and what were the results? Include expected and measured values for geometry changes.
+5 -1
View File
@@ -446,7 +446,11 @@ jobs:
- name: Design format pending changes
run: bash scripts/test-format-pending.sh
- name: Web app offline use and updates (headless Chrome)
run: cargo xtask web-offline-test
# Not blocking while #14591 is open: the check "the open v3 page was given another build's
# file after the update" fails in about one queue batch in a few, with no PR to blame. A
# failure is reported as a warning (and still printed in this step's log), not as a failure.
run: |
cargo xtask web-offline-test || echo "::warning title=Web app offline test failed (non-blocking, #14591)::cargo xtask web-offline-test failed; see this step's log. Tracked in #14591."
- name: Affected-package selection self-test
run: python3 -I scripts/ci/test_affected.py
- name: Merge-of-main detection self-test
+6 -2
View File
@@ -84,7 +84,8 @@ jobs:
# Draft pull requests run no CI, as in ci.yml.
if: github.event_name != 'pull_request' || !github.event.pull_request.draft
runs-on: blacksmith-2vcpu-ubuntu-2404
timeout-minutes: 5
# The checkout fetches history without file contents (below), so this takes well under a minute.
timeout-minutes: 10
outputs:
# The shard matrix (JSON list of areas and the ladder; [] when nothing is selected).
shards: ${{ steps.plan.outputs.shards }}
@@ -93,8 +94,11 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# A pull request's diff needs its base's history.
# A pull request's diff needs its base's history: the commits and trees, not every file
# version. A full clone of every blob took over the 5-minute timeout on a 2-vCPU runner and
# cancelled the merge queue's rig selection (Select the rig areas) again and again.
fetch-depth: ${{ (github.event_name == 'pull_request' || github.event_name == 'merge_group') && '0' || '1' }}
filter: ${{ (github.event_name == 'pull_request' || github.event_name == 'merge_group') && 'blob:none' || '' }}
- name: Selection self-test
run: python3 -I scripts/ci/test_kernel_rig_plan.py
- id: plan
+19 -3
View File
@@ -1,6 +1,7 @@
# Three quick checks on every pull request (CONTRIBUTING.md, "Sending a change"): no second open PR
# for an issue a lower-numbered one already closes, the "Changes a default:" line is filled in, and
# a PR adding to the showcase shows a picture. None is a required status check. The logic is in scripts/pr-checks/pr-checks.js (tested in ci.yml).
# Four quick checks on every pull request (CONTRIBUTING.md, "Sending a change"): no second open PR
# for an issue a lower-numbered one already closes, the "Changes a default:" line is filled in, a PR
# adding to the showcase shows a picture, and a kernel fix that changes or deletes existing test or
# golden lines says why on a "Test change:" line. None is a required status check. The logic is in scripts/pr-checks/pr-checks.js (tested in ci.yml).
name: PR checks
on:
@@ -63,6 +64,21 @@ jobs:
const r = await checks.checkPicture({ github, context, core });
core.info(JSON.stringify(r));
test-change:
name: Test change check
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
sparse-checkout: scripts/pr-checks
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const checks = require('./scripts/pr-checks/pr-checks.js');
const r = await checks.checkTestChange({ github, context, core });
core.info(JSON.stringify(r));
# Labelling needs write access, which a fork PR's token never has, so it is its own job and best
# effort: a fork PR just doesn't get the `changes-default` label from here.
label:
+27 -54
View File
@@ -8,6 +8,9 @@
# The macOS app is signed and notarized when the APPLE_* secrets exist. The Windows binaries and
# MSI are Authenticode-signed through SignPath Foundation when the SIGNPATH_API_TOKEN secret exists
# (see the windows job). Nothing else is signed yet.
# Runners: Blacksmith (blacksmith-<N>vcpu-<os>), as CI uses, except the `version` and `windows`
# jobs, which stay GitHub-hosted: SignPath Foundation only signs a request when every job leading
# up to it ran on a GitHub-hosted runner.
#
# Linux x86_64, aarch64 AppImage (+ .zsync), .deb, .rpm, .flatpak, .snap, .tar.gz packaging/linux
# Arch Linux x86_64, aarch64 .pkg.tar.zst, repackaged from the .tar.gz the arch job
@@ -114,40 +117,18 @@ jobs:
{ echo "version=$VERSION"; echo "date=$(date -u +%Y-%m-%d)"; echo "prerelease=$pre"; } >>"$GITHUB_OUTPUT"
echo "### SolidCraft v$VERSION (\`${GITHUB_SHA::9}\`)" >>"$GITHUB_STEP_SUMMARY"
# The app icon in every size, drawn by solidcraft-cli (no image files are committed), for the
# Windows jobs: the ARM64 build is cross-compiled and can't run there to draw its own.
icons:
needs: version
if: needs.version.outputs.build == 'true'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dtolnay/rust-toolchain@1.98.0
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
key: release-icons
- run: cargo build --release --locked -p solidcraft-cli
- run: |
. packaging/env.sh
make_icons target/release/solidcraft-cli icons
- uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: icons
path: icons
if-no-files-found: error
linux:
name: Linux ${{ matrix.arch }}
needs: version
if: needs.version.outputs.build == 'true'
# The oldest GitHub-hosted image, so the binaries only need glibc >= 2.35.
# Ubuntu 22.04, the oldest image, so the binaries only need glibc >= 2.35.
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- { arch: x86_64, runner: ubuntu-22.04, deb: amd64 }
- { arch: aarch64, runner: ubuntu-22.04-arm, deb: arm64 }
- { arch: x86_64, runner: blacksmith-16vcpu-ubuntu-2204, deb: amd64 }
- { arch: aarch64, runner: blacksmith-16vcpu-ubuntu-2204-arm, deb: arm64 }
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
SOLIDCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }}
@@ -203,8 +184,8 @@ jobs:
fail-fast: false
matrix:
include:
- { arch: x86_64, runner: ubuntu-24.04 }
- { arch: aarch64, runner: ubuntu-24.04-arm }
- { arch: x86_64, runner: blacksmith-4vcpu-ubuntu-2404 }
- { arch: aarch64, runner: blacksmith-4vcpu-ubuntu-2404-arm }
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
SOLIDCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }}
@@ -233,7 +214,7 @@ jobs:
needs: [version, linux]
if: needs.version.outputs.build == 'true'
# makepkg only repackages the tarball's prebuilt binaries, so both architectures build here.
runs-on: ubuntu-24.04
runs-on: blacksmith-2vcpu-ubuntu-2404
# A pre-release or nightly without an Arch package is still worth having; a stable release isn't.
continue-on-error: ${{ contains(needs.version.outputs.version, '-') }}
strategy:
@@ -303,8 +284,8 @@ jobs:
fail-fast: false
matrix:
include:
- { arch: x86_64, runner: ubuntu-24.04 }
- { arch: aarch64, runner: ubuntu-24.04-arm }
- { arch: x86_64, runner: blacksmith-4vcpu-ubuntu-2404 }
- { arch: aarch64, runner: blacksmith-4vcpu-ubuntu-2404-arm }
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
SOLIDCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }}
@@ -349,8 +330,8 @@ jobs:
name: FreeBSD x86_64
needs: version
if: needs.version.outputs.build == 'true'
# GitHub has no FreeBSD runners: build in a FreeBSD 14.3 VM.
runs-on: ubuntu-latest
# There are no FreeBSD runners: build in a FreeBSD 14.3 VM (Blacksmith's x64 runners have KVM).
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 180
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
@@ -363,8 +344,8 @@ jobs:
with:
release: "14.3"
usesh: true
cpu: 4
mem: 12288
cpu: 14
mem: 40960
# Passed into the VM by name; never templated into the script below.
envs: "SOLIDCRAFT_VERSION SOLIDCRAFT_BUILD_DATE"
prepare: |
@@ -374,9 +355,9 @@ jobs:
set -e
. "$HOME/.cargo/env"
git config --global --add safe.directory "$PWD"
# Build outside the checkout so only dist/ is copied back out of the VM. 4 jobs: more
# runs the VM out of memory.
export CARGO_TARGET_DIR=/var/tmp/solidcraft-target CARGO_BUILD_JOBS=4
# Build outside the checkout so only dist/ is copied back out of the VM. About 3 GB of
# VM memory per job: 4 jobs in 12 GB was the most that fit before.
export CARGO_TARGET_DIR=/var/tmp/solidcraft-target CARGO_BUILD_JOBS=12
bash packaging/freebsd/package.sh
tar -tzf dist/release/solidcraft-*-freebsd-x86_64.tar.gz \
| grep -E '/bin/solidcraft$|/bin/solidcraft-cli$|/share/applications/io\.tangencylabs\.solidcraft\.desktop$|/share/doc/solidcraft/THIRD-PARTY-LICENSES\.txt$'
@@ -388,11 +369,12 @@ jobs:
# The two halves of the universal binary build in parallel on their own runners (each alone
# took about half of the old single job's 45 minutes); `macos` below joins and packages them.
# Blacksmith's macOS runners are Apple silicon: the x86_64 half is cross-compiled.
macos-build:
name: macOS build ${{ matrix.arch }}
needs: version
if: needs.version.outputs.build == 'true'
runs-on: macos-15
runs-on: blacksmith-12vcpu-macos-15
strategy:
fail-fast: false
matrix:
@@ -426,7 +408,7 @@ jobs:
name: macOS universal
needs: [version, macos-build]
if: needs.version.outputs.build == 'true'
runs-on: macos-15
runs-on: blacksmith-6vcpu-macos-15
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
SOLIDCRAFT_BUILD_DATE: ${{ needs.version.outputs.date }}
@@ -466,10 +448,11 @@ jobs:
windows:
name: Windows ${{ matrix.arch }}
needs: [version, icons]
needs: version
if: needs.version.outputs.build == 'true'
# Must stay a GitHub-hosted runner, like every job before it: SignPath's open-source policy
# only signs builds whose jobs all ran on GitHub-hosted runners.
# Must stay a GitHub-hosted runner, like the `version` job before it: SignPath's open-source
# policy only signs requests whose jobs leading up to them all ran on GitHub-hosted runners.
# The installer icon is the committed assets/icons/app/windows/exports/solidcraft.ico.
runs-on: windows-latest
# actions: read lets the SignPath action read this job's details and fetch the uploaded
# artifact with GITHUB_TOKEN (the workflow default above grants contents: read only).
@@ -498,10 +481,6 @@ jobs:
SIGNPATH_PROJECT_SLUG: solidcraft
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
with:
name: icons
path: icons
- uses: dtolnay/rust-toolchain@1.98.0
with:
targets: ${{ matrix.target }}
@@ -516,8 +495,6 @@ jobs:
- name: Build and package (msi, portable zip)
if: env.SIGN_WINDOWS != 'true'
shell: pwsh
env:
SOLIDCRAFT_ICONS: ${{ github.workspace }}/icons
run: ./packaging/windows/package.ps1 -Arch ${{ matrix.arch }}
# ---- signed path ---------------------------------------------------------------------------
@@ -531,8 +508,6 @@ jobs:
- name: Build and stage the binaries for signing
if: env.SIGN_WINDOWS == 'true'
shell: pwsh
env:
SOLIDCRAFT_ICONS: ${{ github.workspace }}/icons
run: ./packaging/windows/package.ps1 -Arch ${{ matrix.arch }} -Phase stage
- name: Upload the unsigned binaries
id: unsigned-exes
@@ -576,8 +551,6 @@ jobs:
- name: Package the signed binaries (msi, portable zip)
if: env.SIGN_WINDOWS == 'true'
shell: pwsh
env:
SOLIDCRAFT_ICONS: ${{ github.workspace }}/icons
run: ./packaging/windows/package.ps1 -Arch ${{ matrix.arch }} -Phase package
- name: Upload the unsigned MSI
id: unsigned-msi
@@ -627,7 +600,7 @@ jobs:
name: Web (wasm)
needs: version
if: needs.version.outputs.build == 'true'
runs-on: ubuntu-latest
runs-on: blacksmith-8vcpu-ubuntu-2404
env:
SOLIDCRAFT_VERSION: ${{ needs.version.outputs.version }}
TRUNK_VERSION: 0.21.14
@@ -656,7 +629,7 @@ jobs:
needs: [version, linux, flatpak, arch, snap, freebsd, macos, windows, web]
# Not for the release gate (packages_only): it builds and checks the packages, nothing more.
if: needs.version.outputs.build == 'true' && !inputs.packages_only
runs-on: ubuntu-latest
runs-on: blacksmith-2vcpu-ubuntu-2404
permissions:
contents: write
env:
+12
View File
@@ -845,6 +845,18 @@ Original SolidCraft drawings, Open for owner review; no runtime assignments.
| `assets/locales/pending/hole-group-folder.json` | SolidCraft contributors | Original Hole grouping preference labels and translations | MIT OR Apache-2.0 |
| assets/locales/pending/press-pull-dialog-title.json | SolidCraft contributors | Original Press Pull dialog title translations for SolidCraft's English catalog; no external text used | MIT OR Apache-2.0 |
| docs/layers/layers.svg | SolidCraft contributors | original diagram of SolidCraft's crate layers for docs/layers.md, written as SVG in solidcore's docs/layers diagram style | MIT OR Apache-2.0 |
| assets/locales/pending/agent-chat-select-all.json | SolidCraft contributors | Original assistant chat select-all strings and translations | MIT OR Apache-2.0 |
| docs/book/src/media/ui-tour/window.light.png | SolidCraft contributors | screenshot of SolidCraft 0.29.0 itself (`solidcraft --sample`, light theme, software renderer, 1280x800) with original numbered callouts (digits set in DejaVu Sans Bold), captured with examples/demo/doc_shots.py --light | MIT OR Apache-2.0 |
| docs/book/src/media/sketching/parts.light.png | SolidCraft contributors | screenshot of SolidCraft 0.29.0 itself (light theme, software renderer, 1280x800) showing a fully constrained sketch, with original numbered callouts (digits set in DejaVu Sans Bold), captured with examples/demo/doc_shots.py --light | MIT OR Apache-2.0 |
| docs/book/src/media/parameters/dialog.light.png | SolidCraft contributors | screenshot of SolidCraft 0.29.0 itself (light theme, software renderer) showing the Parameters dialog, with original numbered callouts (digits set in DejaVu Sans Bold), captured with examples/demo/doc_shots.py --light | MIT OR Apache-2.0 |
| docs/book/src/media/getting-started/start.light.png | SolidCraft contributors | screenshot of SolidCraft 0.29.0 itself (light theme, software renderer, 1280x800) showing the start page with its built-in sample thumbnails, with original numbered callouts (digits set in DejaVu Sans Bold), captured with examples/demo/doc_shots.py --light | MIT OR Apache-2.0 |
| docs/book/src/media/files/menu.light.png | SolidCraft contributors | screenshot of SolidCraft 0.29.0 itself (`--sample`, light theme, software renderer) showing the File menu, with original numbered callouts (digits set in DejaVu Sans Bold), captured with examples/demo/doc_shots.py --light | MIT OR Apache-2.0 |
| assets/locales/pending/constraint-glyph-size.json | SolidCraft contributors | Original constraint glyph size preference label and help text | MIT OR Apache-2.0 |
| crates/look/icons/design/svg/model/plane_auto.svg | SolidCraft contributors | original construction icon master (64 grid) | SolidCraft Brand and Interface Licence (LICENSE-BRAND) |
| crates/look/icons/design/svg/model/end_cap.svg | SolidCraft contributors | original icon master (64 grid) | SolidCraft Brand and Interface Licence (LICENSE-BRAND) |
| crates/look/icons/design/svg/model/end_cap_inward.svg | SolidCraft contributors | original icon master (64 grid) | SolidCraft Brand and Interface Licence (LICENSE-BRAND) |
| crates/look/icons/design/svg/model/end_cap_outward.svg | SolidCraft contributors | original icon master (64 grid) | SolidCraft Brand and Interface Licence (LICENSE-BRAND) |
| assets/locales/lv.json | SolidCraft contributors | Original Latvian translation of SolidCraft's English catalog; no commercial CAD text used | MIT OR Apache-2.0 |
## Code adapted from sibling projects
+10
View File
@@ -288,6 +288,16 @@ CI job runs `cargo xtask oracle` during full validation, and on pull requests th
fails because of a known bug names its issue in `expected.json` (`"known_failure": "#123"`);
never change an expected value to match SolidCraft's output.
### Quarantining a flaky test
A test that fails at random can fail a merge-queue batch, and every batch behind it starts over.
Open an issue for it, then add one line to [`tests/QUARANTINED_TESTS`](tests/QUARANTINED_TESTS):
`<test> #<issue> <YYYY-MM-DD> [why]`, with the test named as in `tests/KNOWN_FAILING_TESTS`.
A quarantined test still runs. If it fails, the job summary says `quarantined, failed: <test>; see #<issue>`
and the job stays green; if it passes, the summary says that too, so you can tell when it is safe to
release. A quarantined line may be at most 14 days old: `cargo xtask lists` fails after that, so fix the
test and delete the line. A test that fails every time belongs on `KNOWN_FAILING_TESTS` instead.
## Changing the design file format
A design file says which format it is in (`"format": "solidcraft/N"`). If your change saves
Generated
+154 -53
View File
@@ -319,7 +319,7 @@ dependencies = [
"futures-lite",
"parking",
"polling",
"rustix 1.1.5",
"rustix 1.1.6",
"slab",
"windows-sys 0.61.2",
]
@@ -350,7 +350,7 @@ dependencies = [
"cfg-if",
"event-listener",
"futures-lite",
"rustix 1.1.5",
"rustix 1.1.6",
]
[[package]]
@@ -376,7 +376,7 @@ dependencies = [
"cfg-if",
"futures-core",
"futures-io",
"rustix 1.1.5",
"rustix 1.1.6",
"signal-hook-registry",
"slab",
"windows-sys 0.61.2",
@@ -730,18 +730,42 @@ dependencies = [
"thiserror 1.0.69",
]
[[package]]
name = "calloop"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43b32313e937c8721c9d17ee9bf60699a6402b4b7c2cb6ac1bee0ffcaa4b4e5e"
dependencies = [
"bitflags 2.13.2",
"polling",
"rustix 1.1.6",
"tracing",
]
[[package]]
name = "calloop-wayland-source"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
dependencies = [
"calloop",
"calloop 0.13.0",
"rustix 0.38.44",
"wayland-backend",
"wayland-client",
]
[[package]]
name = "calloop-wayland-source"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"
dependencies = [
"calloop 0.14.5",
"rustix 1.1.6",
"wayland-backend",
"wayland-client",
]
[[package]]
name = "cbc"
version = "0.1.2"
@@ -1282,6 +1306,7 @@ dependencies = [
"profiling",
"raw-window-handle",
"serde",
"smithay-clipboard",
"web-time",
"webbrowser",
"windows-sys 0.61.2",
@@ -1656,7 +1681,7 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
dependencies = [
"rustix 1.1.5",
"rustix 1.1.6",
"windows-link",
]
@@ -3293,7 +3318,7 @@ dependencies = [
"concurrent-queue",
"hermit-abi",
"pin-project-lite",
"rustix 1.1.5",
"rustix 1.1.6",
"windows-sys 0.61.2",
]
@@ -3721,9 +3746,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "1.1.5"
version = "1.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d"
checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa"
dependencies = [
"bitflags 2.13.2",
"errno",
@@ -4173,8 +4198,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
dependencies = [
"bitflags 2.13.2",
"calloop",
"calloop-wayland-source",
"calloop 0.13.0",
"calloop-wayland-source 0.3.0",
"cursor-icon",
"libc",
"log",
@@ -4191,6 +4216,44 @@ dependencies = [
"xkeysym",
]
[[package]]
name = "smithay-client-toolkit"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
dependencies = [
"bitflags 2.13.2",
"calloop 0.14.5",
"calloop-wayland-source 0.4.1",
"cursor-icon",
"libc",
"log",
"memmap2",
"rustix 1.1.6",
"thiserror 2.0.21",
"wayland-backend",
"wayland-client",
"wayland-csd-frame",
"wayland-cursor",
"wayland-protocols",
"wayland-protocols-experimental",
"wayland-protocols-misc",
"wayland-protocols-wlr",
"wayland-scanner",
"xkeysym",
]
[[package]]
name = "smithay-clipboard"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226"
dependencies = [
"libc",
"smithay-client-toolkit 0.20.0",
"wayland-backend",
]
[[package]]
name = "smol_str"
version = "0.2.2"
@@ -4259,7 +4322,7 @@ dependencies = [
[[package]]
name = "solidcraft"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"block2 0.6.2",
"eframe",
@@ -4302,11 +4365,11 @@ dependencies = [
[[package]]
name = "solidcraft-3dx-client"
version = "0.40.0-rc.4"
version = "0.40.1"
[[package]]
name = "solidcraft-cli"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"image",
"log",
@@ -4322,11 +4385,11 @@ dependencies = [
[[package]]
name = "solidcraft-color"
version = "0.40.0-rc.4"
version = "0.40.1"
[[package]]
name = "solidcraft-control"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"getrandom 0.3.4",
"serde",
@@ -4335,7 +4398,7 @@ dependencies = [
[[package]]
name = "solidcraft-control-egui"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"egui",
"image",
@@ -4345,7 +4408,7 @@ dependencies = [
[[package]]
name = "solidcraft-derive"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"proc-macro2",
"quote",
@@ -4354,7 +4417,7 @@ dependencies = [
[[package]]
name = "solidcraft-doc"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"log",
"serde",
@@ -4364,6 +4427,7 @@ dependencies = [
"solidcore-tess",
"solidcraft-color",
"solidcraft-derive",
"solidcraft-format",
"solidcraft-geom",
"solidcraft-kernel",
"solidcraft-profile",
@@ -4376,7 +4440,7 @@ dependencies = [
[[package]]
name = "solidcraft-dynamics"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"serde",
"serde_json",
@@ -4387,7 +4451,7 @@ dependencies = [
[[package]]
name = "solidcraft-engine"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"image",
"log",
@@ -4411,9 +4475,18 @@ dependencies = [
"web-time",
]
[[package]]
name = "solidcraft-format"
version = "0.40.1"
dependencies = [
"serde_json",
"sha2 0.10.9",
"zip",
]
[[package]]
name = "solidcraft-geom"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"serde",
"serde_json",
@@ -4426,7 +4499,7 @@ dependencies = [
[[package]]
name = "solidcraft-gpu"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"image",
"log",
@@ -4451,7 +4524,7 @@ dependencies = [
[[package]]
name = "solidcraft-io"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"cadmpeg-core",
"cadmpeg-ir",
@@ -4462,13 +4535,14 @@ dependencies = [
"gltf",
"log",
"quick-xml",
"rustix 1.1.5",
"rustix 1.1.6",
"serde",
"serde_json",
"sha2 0.10.9",
"solidcore-record",
"solidcraft-color",
"solidcraft-doc",
"solidcraft-format",
"solidcraft-geom",
"solidcraft-kernel",
"solidcraft-profile",
@@ -4479,7 +4553,7 @@ dependencies = [
[[package]]
name = "solidcraft-kernel"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"log",
"proptest",
@@ -4500,7 +4574,7 @@ dependencies = [
[[package]]
name = "solidcraft-look"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"egui",
"log",
@@ -4512,7 +4586,7 @@ dependencies = [
[[package]]
name = "solidcraft-mcp"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"image",
"serde_json",
@@ -4526,14 +4600,14 @@ dependencies = [
[[package]]
name = "solidcraft-mcp-server"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"serde_json",
]
[[package]]
name = "solidcraft-profile"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"serde_json",
"web-time",
@@ -4541,7 +4615,7 @@ dependencies = [
[[package]]
name = "solidcraft-render"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"flate2",
"image",
@@ -4564,7 +4638,7 @@ dependencies = [
[[package]]
name = "solidcraft-sketch"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"harfrust",
"serde",
@@ -4578,7 +4652,7 @@ dependencies = [
[[package]]
name = "solidcraft-smlib"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"flate2",
"log",
@@ -4592,18 +4666,18 @@ dependencies = [
[[package]]
name = "solidcraft-space-mouse"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"serde",
]
[[package]]
name = "solidcraft-testkit"
version = "0.40.0-rc.4"
version = "0.40.1"
[[package]]
name = "solidcraft-theme"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"egui",
"serde",
@@ -4613,7 +4687,7 @@ dependencies = [
[[package]]
name = "solidcraft-ui-egui"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"arboard",
"egui",
@@ -4655,7 +4729,7 @@ dependencies = [
[[package]]
name = "solidcraft-ui-kit"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"arboard",
"egui",
@@ -4678,14 +4752,14 @@ dependencies = [
[[package]]
name = "solidcraft-ui-registry"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"egui",
]
[[package]]
name = "solidcraft-ui-text"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"log",
"serde_json",
@@ -4695,7 +4769,7 @@ dependencies = [
[[package]]
name = "solidcraft-viewport"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"image",
"serde",
@@ -4707,7 +4781,7 @@ dependencies = [
[[package]]
name = "solidcraft-viewport-egui"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"egui",
"egui-wgpu",
@@ -4718,7 +4792,7 @@ dependencies = [
[[package]]
name = "solidcraft-viewport-gpu"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"log",
"naga",
@@ -4734,7 +4808,7 @@ dependencies = [
[[package]]
name = "solidcraft-web"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"eframe",
"egui",
@@ -4877,7 +4951,7 @@ dependencies = [
"fastrand",
"getrandom 0.4.3",
"once_cell",
"rustix 1.1.5",
"rustix 1.1.6",
"windows-sys 0.61.2",
]
@@ -5052,6 +5126,7 @@ version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
dependencies = [
"log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -5400,7 +5475,7 @@ checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078"
dependencies = [
"cc",
"downcast-rs",
"rustix 1.1.5",
"rustix 1.1.6",
"scoped-tls",
"smallvec",
"wayland-sys",
@@ -5413,7 +5488,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073"
dependencies = [
"bitflags 2.13.2",
"rustix 1.1.5",
"rustix 1.1.6",
"wayland-backend",
"wayland-scanner",
]
@@ -5435,7 +5510,7 @@ version = "0.31.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d"
dependencies = [
"rustix 1.1.5",
"rustix 1.1.6",
"wayland-client",
"xcursor",
]
@@ -5452,6 +5527,32 @@ dependencies = [
"wayland-scanner",
]
[[package]]
name = "wayland-protocols-experimental"
version = "20250721.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"
dependencies = [
"bitflags 2.13.2",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols-misc"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8"
dependencies = [
"bitflags 2.13.2",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-scanner",
]
[[package]]
name = "wayland-protocols-plasma"
version = "0.3.12"
@@ -6057,7 +6158,7 @@ dependencies = [
"bitflags 2.13.2",
"block2 0.5.1",
"bytemuck",
"calloop",
"calloop 0.13.0",
"cfg_aliases",
"concurrent-queue",
"core-foundation 0.9.4",
@@ -6078,7 +6179,7 @@ dependencies = [
"raw-window-handle",
"redox_syscall 0.4.1",
"rustix 0.38.44",
"smithay-client-toolkit",
"smithay-client-toolkit 0.19.2",
"smol_str",
"tracing",
"unicode-segmentation",
@@ -6130,7 +6231,7 @@ dependencies = [
"libc",
"log",
"os_pipe",
"rustix 1.1.5",
"rustix 1.1.6",
"thiserror 2.0.21",
"tree_magic_mini",
"wayland-backend",
@@ -6167,7 +6268,7 @@ dependencies = [
"libc",
"libloading",
"once_cell",
"rustix 1.1.5",
"rustix 1.1.6",
"x11rb-protocol",
]
@@ -6220,7 +6321,7 @@ checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
[[package]]
name = "xtask"
version = "0.40.0-rc.4"
version = "0.40.1"
dependencies = [
"flate2",
"proc-macro2",
@@ -6316,7 +6417,7 @@ dependencies = [
"hex",
"libc",
"ordered-stream",
"rustix 1.1.5",
"rustix 1.1.6",
"serde",
"serde_repr",
"tracing",
+3 -1
View File
@@ -6,7 +6,7 @@ members = ["crates/*", "apps/*", "xtask"]
exclude = ["solidcore", "vendor"]
[workspace.package]
version = "0.40.0-rc.4"
version = "0.40.1"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.95"
@@ -25,6 +25,8 @@ solidcraft-render = { path = "crates/render" }
solidcraft-dynamics = { path = "crates/dynamics" }
solidcraft-gpu = { path = "crates/gpu" }
solidcraft-doc = { path = "crates/doc" }
# Versioned file formats: the format tag, the version registry and its upgrade, a newer file told
solidcraft-format = { path = "crates/format" }
solidcraft-io = { path = "crates/io" }
solidcraft-engine = { path = "crates/engine" }
solidcraft-ui-egui = { path = "crates/ui-egui" }
+10 -4
View File
@@ -1,8 +1,10 @@
Third-party software in SolidCraft
SolidCraft (the desktop app, solidcraft-cli and the web app) is built from the 567 crates below.
SolidCraft (the desktop app, solidcraft-cli and the web app) is built from the 569 crates below.
Generated by `cargo xtask licences` from Cargo.lock and the crates' own licence files.
SolidCraft's own licence is in LICENSE-MIT and LICENSE-APACHE, and NOTICE.
SolidCraft's own licence is in LICENSE-MIT and LICENSE-APACHE, and NOTICE. Its brand and interface (the UI kit,
the look, the theme, the name, logo and app icon) are under LICENSE-BRAND: using them outside SolidCraft needs
the maintainers' written permission.
accesskit 0.25.2 (MIT OR Apache-2.0)
accesskit_atspi_common 0.21.1 (MIT OR Apache-2.0)
@@ -399,7 +401,9 @@ smithay-client-toolkit 0.19.2 (MIT)
smol_str 0.2.2 (MIT OR Apache-2.0)
solidcore 1.0.1 (Apache-2.0)
solidcore-convert 0.1.0 (Apache-2.0)
solidcore-ops 0.1.0 (Apache-2.0)
solidcore-record 0.1.0 (Apache-2.0)
solidcore-step 0.1.0 (Apache-2.0)
solidcore-tess 0.1.0 (Apache-2.0)
spade 2.15.1 (MIT OR Apache-2.0)
spirv 0.4.0+sdk-1.4.341.0 (Apache-2.0)
@@ -16733,7 +16737,9 @@ r-efi 5.3.0: MIT OR Apache-2.0 OR LGPL-2.1-or-later (https://github.com/r-efi/r-
r-efi 6.0.0: MIT OR Apache-2.0 OR LGPL-2.1-or-later (https://github.com/r-efi/r-efi)
rustls-platform-verifier-android 0.2.0: MIT OR Apache-2.0 (https://github.com/rustls/rustls-platform-verifier)
solidcore-convert 0.1.0: Apache-2.0 (https://github.com/tangency-labs/solidcore)
solidcore-ops 0.1.0: Apache-2.0 (https://github.com/tangency-labs/solidcore)
solidcore-record 0.1.0: Apache-2.0 (https://github.com/tangency-labs/solidcore)
solidcore-step 0.1.0: Apache-2.0
solidcore-tess 0.1.0: Apache-2.0 (https://github.com/tangency-labs/solidcore)
spirv 0.4.0+sdk-1.4.341.0: Apache-2.0 (https://github.com/gfx-rs/rspirv)
winapi-i686-pc-windows-gnu 0.4.0: MIT/Apache-2.0 (https://github.com/retep998/winapi-rs)
@@ -16759,11 +16765,11 @@ Bundled fonts (SIL Open Font License, Version 1.1)
Copyright 2014-2021 Adobe / Google Inc. (Noto Sans TC subset for SolidCraft web zh-TW)
Source: https://github.com/notofonts/noto-cjk (Sans SubsetOTF/TC)
- IBMPlexSans-Variable.ttf (assets/fonts/ibm-plex-sans/IBMPlexSans-Variable.ttf)
- IBMPlexSans-Variable.ttf (crates/look/fonts/ibm-plex-sans/IBMPlexSans-Variable.ttf)
Copyright 2017 IBM Corp. with Reserved Font Name "Plex"
Source: https://github.com/IBM/plex
- IBMPlexMono-Regular.ttf (assets/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf)
- IBMPlexMono-Regular.ttf (crates/look/fonts/ibm-plex-mono/IBMPlexMono-Regular.ttf)
Copyright 2017 IBM Corp. with Reserved Font Name "Plex"
Source: https://github.com/IBM/plex
@@ -1750,3 +1750,31 @@ fn the_ribbed_lid_builds_the_same_body_every_time() {
assert_eq!(fingerprint(), first);
}
}
// #13295: a circle sketched on the plane at 45 degrees through a bar's step edge, 7.9e-6 off
// that edge (as the reporter's sketch had it), cut through all across a hole. The cut wall's
// seam edge ends on the bar's edge a few micrometres across the seam, inside its vertex's
// tolerance, and the check refused the result ("Face Near missing Seam").
#[test]
fn a_circle_cut_from_a_slanted_plane_through_a_step_edge_beside_a_hole() {
let mut s = Session::default();
let (y0, z1, yc, z2) = (16.423877938511588, 13.06859205815335, 12.527075811882755, 19.566787029154483);
let p = [[0.0, 0.0], [y0, 0.0], [y0, z1], [yc, z1], [yc, z2], [0.0, z2]];
s.execute("sketch.create", &json!({"plane": "YZ"})).unwrap();
for i in 0..6 {
s.execute("sketch.line", &json!({"points": [p[i], p[(i + 1) % 6]]})).unwrap();
}
s.execute("sketch.finish", &json!({})).unwrap();
s.execute("solid.extrude", &json!({"distance": 100, "operation": "new"})).unwrap();
let start = s.doc.features.len();
let hole = json!({"base": [20.421614627576027, y0 + 5.0, 6.534296029076675], "axis": [0, -1, 0], "radius": 3.5355339059327378, "height": y0 + 10.0, "operation": "cut", "targets": ["Body1"]});
s.execute("solid.cylinder", &hole).unwrap();
let r = std::f64::consts::FRAC_1_SQRT_2;
let plane = json!({"origin": [0, yc - yc * r, z2 + yc * r], "x_dir": [1, 0, 0], "y_dir": [0, r, -r]});
s.execute("sketch.create", &json!({"plane": plane, "name": "Slant"})).unwrap();
s.execute("sketch.circle.center", &json!({"center": [20.4216146277246, 12.527083680740917], "radius": 4.716990566008734})).unwrap();
s.execute("sketch.finish", &json!({})).unwrap();
s.execute("solid.extrude", &json!({"sketch": "Slant", "through_all": true, "direction": "negative", "operation": "cut", "targets": ["Body1"]}))
.unwrap();
check(&s, start, &BTreeMap::new()).unwrap_or_else(|(kind, e)| panic!("{kind}: {e}"));
}
+3 -3
View File
@@ -904,9 +904,9 @@ mod web {
self.files.panel.set(false);
}
"insert" => {
if !solidcraft_ui_egui::mesh_units::ask(&mut self.app, &path, true) {
self.app.insert_path(&path);
}
// The staged loader, as Open uses: a large STEP insert keeps the page drawing
// (it asks an STL's or OBJ's units first, as the synchronous insert did).
self.app.insert_path_async(&path);
self.files.panel.set(false);
}
"download" => match vfs::read(&path, solidcraft_engine::io::MAX_DESIGN_BYTES) {
+3 -1
View File
@@ -42,7 +42,9 @@ solidcraft-look = { workspace = true }
solidcraft-ui-text = { workspace = true }
solidcraft-theme = { workspace = true }
solidcraft-space-mouse = { workspace = true }
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit", "wayland", "x11", "links"] }
# "clipboard" is not a default here: eframe 0.37 builds egui-winit without it, and then every
# Copy and Paste on the desktop silently does nothing (see src/clipboard_tests.rs).
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit", "wayland", "x11", "links", "clipboard"] }
egui = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
+13
View File
@@ -0,0 +1,13 @@
//! The desktop build keeps the system clipboard.
//!
//! eframe 0.37 builds egui-winit without its clipboard unless asked, and the workspace turns
//! eframe's defaults off: every Copy (the error text, Copy diagnostic information, Ctrl+C in a
//! field) then reaches the platform as a command that nothing carries out. The UI tests see the
//! copied text in egui's output and still pass, so this is checked where the build is described.
#[test]
fn the_desktop_build_enables_eframes_clipboard() {
let manifest = include_str!("../Cargo.toml");
let eframe = manifest.lines().find(|line| line.trim_start().starts_with("eframe =")).expect("the eframe dependency");
assert!(eframe.contains("\"clipboard\""), "eframe without its clipboard feature drops every copy on the desktop: {eframe}");
}
+2
View File
@@ -20,6 +20,8 @@
#[cfg(not(target_os = "macos"))]
#[path = "../../../assets/icons/app/shared/source/app_icon.rs"]
mod app_icon;
#[cfg(test)]
mod clipboard_tests;
mod come_forward;
mod control_server;
#[cfg(target_os = "linux")]
+189 -2
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "اسحب لتحريك الثقب؛ انقر لإزالته",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "اسحب لتحريك المسند على النموذج. يلتقط نقاط الرسم على الوجه.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "اسحب لتحريك وصلة الكبس على النموذج. تلتقط نقاط الرسم على الوجه.",
"Drag to place it on another face.": "اسحب لوضعه على وجه آخر.",
"Drag to point the catch in another direction.": "اسحب لتوجيه لسان الكبس في اتجاه آخر.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "اسحب لتدوير المسند بخطوات 5°. اضغط Alt أو Ctrl لتدويره بحرية.",
"Drive Joint": "تحريك المفصل",
@@ -513,6 +514,7 @@
"Offset Y": "الإزاحة Y",
"Offset Z": "الإزاحة Z",
"On your computer": "على جهازك",
"One more stretch of the picked edge, each with its own angle, height and turns": "مقطع آخر من الحافة المختارة، لكل منها زاويتها وارتفاعها ولفّاتها",
"Opacity": "العتامة",
"Open GitHub": "فتح GitHub",
"Open GitHub draft": "فتح مسودة GitHub",
@@ -634,6 +636,7 @@
"Remove the track": "إزالة المسار",
"Remove this bend": "إزالة هذا الثني",
"Remove this point": "إزالة هذه النقطة",
"Remove this segment": "إزالة هذا المقطع",
"Rename Feature": "إعادة تسمية الميزة",
"Rename Folder": "إعادة تسمية المجلد",
"Render Stage": "مرحلة التصيير",
@@ -723,6 +726,7 @@
"Section position": "موضع المقطع",
"Sections": "المقاطع",
"Sections (one sketch each)": "المقاطع (رسم واحد لكل منها)",
"Segments": "المقاطع",
"Select Features": "تحديد الميزات",
"Select Other": "تحديد آخر",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "تحديد آخر: أبقِ الزر الأيسر ثابتًا على النموذج (أو انقر بالزر الأيمن › تحديد آخر…) لعرض كل ما تحت المؤشر؛ وانقر مرة أخرى في الموضع نفسه لتحديد العنصر التالي هناك. انقر نقرًا مزدوجًا بالزر الأوسط للانتقال إلى العرض الرئيسي (التفضيلات › التنقل).",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "يجب أن يكون التباعد عددًا غير صفري",
"Specialise": "تخصيص",
"Speed": "السرعة",
"Split Edge": "تقسيم الحافة",
"Splitting tool": "أداة التقسيم",
"Square": "مربع",
"Stainless Steel": "فولاذ مقاوم للصدأ",
@@ -885,6 +890,7 @@
"Variable Radius": "نصف قطر متغير",
"Variable radius": "نصف قطر متغير",
"Velocity": "السرعة المتجهة",
"Vertical": "رأسي",
"Vertices": "الرؤوس",
"View": "عرض",
"View navigator": "متصفح العرض",
@@ -938,6 +944,13 @@
"ai.prefs.connect_apps_note": "إيقافه يزيل الإدخالات مجددًا.\n\nعند بدء تشغيل SolidCraft، يُضاف كخادم MCP إلى تطبيقات الذكاء الاصطناعي الموجودة على هذا الحاسوب (OpenCode وClaude Desktop وClaude Code وCursor وCodex وGemini CLI وCopilot CLI وWindsurf وZed وVS Code)، ليتمكن الوكيل من استخدامه دون أي إعداد. لا يُضاف إلا مُدخل solidcraft أو يُحدَّث مساره؛ ويُترك المُدخل الذي غيّرته كما هو، ويُنسخ الملف احتياطيًا أولًا. عند الإيقاف تُزال المُدخلات التي أضافها. الأمر «المساعدة > ربط مساعدي الذكاء الاصطناعي…» يفعل ذلك يدويًا.",
"ai.prefs.connect_at_start": "توصيل آخر وكيل عند البدء",
"ai.prefs.connect_at_start_note": "يبدأ في الخلفية الوكيل الذي اتصلت به آخر مرة (أو الوكيل الافتراضي) في كل مرة يبدأ فيها SolidCraft، ليكون جاهزًا للمحادثة. لا يحدث ذلك عند بدء SolidCraft مع --control. إذا تعذّر الاتصال، يعرض المساعد «فشل الاتصال» وزر «إعادة المحاولة».",
"ai.prefs.control_failed": "تعذّر بدء قناة التحكم: {error}",
"ai.prefs.control_from_launch": "بدأ هذا التشغيل باستخدام --control على المنفذ {port}. تسري التغييرات هنا عند تشغيل SolidCraft في المرة القادمة دون --control.",
"ai.prefs.control_listening": "يستمع على 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "لا يستمع",
"ai.prefs.control_port": "المنفذ",
"ai.prefs.control_port_note": "المنفذ الذي يتصل عبره وكلاء الذكاء الاصطناعي على هذا الحاسوب (127.0.0.1). الافتراضي هو 27878: إذا كان مستخدمًا يُستخدم المنفذ الحر التالي. أي منفذ آخر يُستخدم كما هو. وجّه عميل MCP إلى المنفذ نفسه، مثل solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "المنفذ {port} يستخدمه برنامج آخر (أو نافذة SolidCraft أخرى). اختر منفذًا آخر.",
"ai.prefs.follow_camera": "تتبّع الكاميرا",
"ai.prefs.follow_camera_off": "تتبّع الكاميرا التلقائي متوقف.",
"ai.prefs.follow_camera_on": "تتجه الكاميرا نحو الرسومات التي ينشئها الوكيل.",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "ليست على وجه جزء",
"browser.sketches_to_parts_part_missing": "جزؤها لم يعد موجودًا",
"browser.sketches_to_parts_result": "نُقلت {moved} رسومات إلى الجزء الذي رُسمت عليه؛ وبقيت {stayed}: {why}",
"browser.straighten_angle": "اتجاه الحافة",
"browser.straighten_choose": "اختر ما تصبح عليه الحافة، أفقية أو رأسية أو بزاوية، ثم اضغط «تقويم».",
"browser.straighten_click_a": "انقر الصورة عند أحد طرفي حافة يجب أن تكون مستقيمة، أو اكتب إحداثياتها.",
"browser.straighten_click_b": "انقر الطرف الآخر للحافة، أو اكتب إحداثياته.",
"browser.straighten_horizontal": "أفقي",
"browser.straighten_title": "تقويم: {name}",
"browser.straighten_vertical": "رأسي",
"browser.units": "الوحدات: {units}",
"cam.flat": "وجه مسطح",
"cam.follower": "التابع",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "التقاط المظهر",
"cmd.appearance_replace": "استبدال المظهر",
"cmd.assembly_bom": "قائمة المواد",
"cmd.assembly_constraint_create": "تقييد",
"cmd.assembly_constraint_edit": "تحرير التقييد",
"cmd.assembly_mass_properties": "خصائص الكتلة",
"cmd.body.print_face": "وجه الطباعة",
"cmd.body_rename": "إعادة تسمية الجسم",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "حذف اللوحة",
"cmd.canvas_edit": "تعديل اللوحة",
"cmd.canvas_insert": "لوحة مرجعية",
"cmd.canvas_straighten": "تقويم اللوحة",
"cmd.canvas_to_sketch": "تحويل اللوحة إلى رسم",
"cmd.component_activate": "تنشيط المكوّن",
"cmd.component_break_link": "فك الارتباط",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "قاعدة التكوين",
"cmd.config_rules": "قواعد التكوين",
"cmd.config_table": "عرض جدول التكوينات",
"cmd.construct.axis": "محور",
"cmd.construct.plane": "مستوى",
"cmd.construct.plane.axis_point": "مستوى عبر محور ونقطة",
"cmd.construct.point": "نقطة",
"cmd.construct_axis_edge": "محور عبر حافة",
"cmd.construct_axis_normal_to_face": "محور عمودي على وجه",
"cmd.construct_axis_through_cylinder": "محور عبر أسطوانة/مخروط/طارة",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "حفظ كشبكة",
"cmd.file_send_to_slicer": "إرسال إلى برنامج التقطيع",
"cmd.file_slicers": "برامج التقطيع المثبتة",
"cmd.frame_end_cap": "غطاء طرفي",
"cmd.frame_member": "عنصر هيكلي",
"cmd.frame_profile_insert": "إدراج مقطع",
"cmd.frame_profile_list": "مكتبة المقاطع",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "تحليل خطوط المعامِل",
"cmd.inspect_minimum_radius": "تحليل أصغر نصف قطر",
"cmd.inspect_parameter_sweep": "مسح المعاملات",
"cmd.inspect_parameter_variants": "مقارنة بدائل المعلمات",
"cmd.inspect_silhouette": "الخط المحيطي",
"cmd.inspect_zebra": "تحليل الخطوط المتعرجة (زيبرا)",
"cmd.joint_as_built": "مفصل حسب الوضع الحالي",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "أثر الحركة",
"cmd.motion_trace_edit": "تحرير أثر الحركة",
"cmd.motion_trace_keep": "الإبقاء على أثر الحركة",
"cmd.note_add": "إضافة ملاحظة",
"cmd.note_delete": "حذف ملاحظة",
"cmd.note_list": "عرض الملاحظات",
"cmd.note_update": "تحرير الملاحظة",
"cmd.occurrence_align": "محاذاة النسخة",
"cmd.occurrence_copy": "لصق (نسخة مرتبطة)",
"cmd.occurrence_drag": "سحب النسخة",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "تصيير صورة",
"cmd.render_status": "تقدّم التصيير",
"cmd.select_clear": "مسح التحديد",
"cmd.selection_get": "الحصول على التحديد",
"cmd.settings_profile_apply": "تطبيق ملف تعريف الإعدادات",
"cmd.settings_profile_delete": "حذف ملف تعريف الإعدادات",
"cmd.settings_profile_export": "تصدير ملف تعريف الإعدادات",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "تعطيل الميزة",
"cmd.ui.assistant": "إظهار المساعد أو إخفاؤه",
"cmd.ui.palette": "البحث في الأوامر",
"cmd.ui.toggle_visibility": "إظهار/إخفاء التحديد",
"cmd.view.navigator": "متصفح العرض المخصص",
"cmd.view.render_browser": "مستعرض التصيير",
"cmd.view.render_dock": "نقل لوحة التصيير",
@@ -1567,6 +1601,7 @@
"color.step_down": "إنقاص خطوة",
"color.step_up": "زيادة خطوة",
"color.value": "القيمة، أي السطوع (بالمئة)",
"component.error.ambiguous_name": "توجد عدة مكونات بالاسم `{name}`. استخدم معرّف مكوّن رقميًا: {ids}.",
"config.column_filter_empty": "لا توجد أعمدة مطابقة",
"config.rule_parameter_columns": "لا تظهر هنا إلا المعاملات التي لها عمود في الجدول. أضف عمودًا عبر «إضافة عمود» (+) لاستخدام المعامل هنا.",
"config.rule_suppression_columns": "لا تظهر هنا إلا الميزات التي لها عمود «تعطيل» في الجدول. أضف عمودًا عبر «إضافة عمود» (+) للتحكم بالميزة هنا.",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: المرجع `{reference}` لم يعد موجودًا كما اختير؛ أعد اختياره",
"dialog.bodies_count": "{count} أجسام",
"dialog.clearance_invalid": "يجب أن يكون الخلوص طولًا قيمته 0 أو أكثر",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "احسب",
"dialog.compute_again": "احسب مرة أخرى",
"dialog.computing": "جارٍ الحساب… {seconds} ث",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "يتغير الرقم فقط بالخطوات؛ يبقى التعبير كما كُتب",
"dialog.dimension_step_up": "زيادة بمقدار {step}",
"dialog.edit_title": "تعديل {title}",
"dialog.hole_held_off_its_line": "الحافة المرجعية تُبقي هذا الثقب على خط يغادر الوجه قبل النقطة المختارة. اختر حيث يعبر الخط الوجه، أو أزل الحافة لتحريك الثقب بحرية.",
"dialog.no_shown_body": "لا يوجد جسم ظاهر لتغييره: أظهر جسمًا، أو اختر «جسم جديد»",
"dialog.pattern_sketch_not_object": "اختر أجسامًا أو ميزات: الرسم ليس أيًّا منهما. كرّر منحنياته بأداة النمط أو المرآة داخل الرسم، أو ابثقه أولًا.",
"dialog.primitive_point_tip": "نقطة تملأ X وY وZ: انقر هنا ثم على رأس أو حافة أو وجه من النموذج، أو على نقطة من رسم، أو على نقطة الأصل.",
"dialog.reference_edge_tip": "حافة مستقيمة من الوجه المختار تُقاس منها المسافة أدناه: انقر هنا ثم على الحافة.",
"dialog.right_click_pick": "حدد {input} أولًا",
"dialog.select": "↖ تحديد",
"dialog.selected_count": "↖ {count} محدد",
"dialog.selection_constraint": "قيد {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "تغيّر {name} على القرص",
"document.changed_on_disk_detail": "غيّر برنامج أو حاسوب آخر {name} منذ أن فتحته أو حفظته آخر مرة. الكتابة فوقه تستبدل تلك التغييرات بتغييراتك؛ وحفظ نسخة يحتفظ بالاثنين.",
"document.copy_name": "نسخة من {name}",
"document.discard_row": "تجاهل",
"document.finish_save_prompt": "أكمل الرد على نافذة الحفظ قبل فتح تصميم آخر.",
"document.newer_file": "تم الحفظ بإصدار أحدث من SolidCraft (صيغة الملف {format}، وهذا الإصدار يقرأ حتى {reads}). إذا كان هناك شيء مفقود، فحدّث البرنامج.",
"document.newer_file_change": "تم الحفظ بإصدار أحدث من SolidCraft (صيغة الملف {format} مع `{change}`، وهو ما لا يعرفه هذا الإصدار). إذا كان هناك شيء مفقود، فحدّث البرنامج.",
"document.newer_file_not_read": "لم يُقرأ: {what}. يبقى في الملف عند الحفظ.",
"document.not_saved_yet": "لم يُحفظ بعد",
"document.open_anyway": "افتح على أي حال",
"document.open_elsewhere": "{name} مفتوح بالفعل",
"document.open_elsewhere_detail": "{name} مفتوح في SolidCraft {app} على {who}، فُتح {when}. إذا حفظتما كلاكما، فسيخسر أحدكما عمله. افتحه للقراءة فقط لتطّلع عليه دون الحفظ فوقه.",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "فُتح هذا التصميم للقراءة فقط: احفظه كملف جديد",
"document.save_changes": "حفظ التغييرات على {name}؟",
"document.save_copy": "حفظ نسخة…",
"document.save_many": "حفظ التغييرات في {n} من التصاميم؟",
"document.save_row": "حفظ",
"document.save_selected": "حفظ المحدد",
"document.tab_unsaved_changes": "تغييرات غير محفوظة",
"document.unsaved_changes": "في {name} تغييرات غير محفوظة. إن لم تحفظها فستضيع.",
"drive.rigid": "{joint} مفصل صلب: يثبّت أجزاءه في مكانها، لذا لا يوجد ما يمكن تحريكه. لتتحرك الأجزاء، غيّر نوعه في «تعديل المفصل»: «دوراني» للدوران، «منزلق» للانزلاق، «أسطواني» لكليهما.",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "تفاوت المنحنى",
"dxf.tolerance_help": "الأجسام الظاهرة فقط. المنحنيات تُمثَّل بقطع مستقيمة. التفاوت الأصغر يعطي منحنيات أنعم ويستهلك وقتًا وذاكرة أكثر.",
"each rail's curves must be in one sketch": "يجب أن تكون منحنيات كل دليل في رسم واحد",
"error.end_cap_faces": "اختر وجهًا طرفيًا مفتوحًا واحدًا على الأقل لعضو إطار",
"error.end_cap_unresolved": "الطرف {ends} لهذا الغطاء لم يعد موجودًا في النموذج. اختر الأوجه الطرفية مرة أخرى",
"feature computation ended without a result": "انتهى حساب الميزة دون نتيجة",
"file.open.drawing_filter": "التصاميم وملفات CAD والشبكات والرسومات",
"file.open.portal_fallback.no_portal_service": "منتقي الملفات الذي فُتح ليس تابعًا لسطح المكتب: خدمة منتقي الملفات في سطح المكتب غير متاحة.",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "إدراج الهندسة",
"file_load.link_item": "{name} ({done} من {total})",
"file_load.opened": "تم فتح {name}",
"file_load.opened_behind": "فُتح {name} في علامة تبويب جديدة",
"file_load.opened_in_tab": "تم فتح {name} في علامة تبويب جديدة",
"file_load.opening": "فتح التصميم",
"file_load.preparing_thumbnail": "تجهيز الصورة المصغّرة...",
@@ -1725,11 +1772,13 @@
"help.config.table": "يعرض جدول التكوينات: صف لكل نسخة وعمود لكل معامل أو ميزة، ويبيّن هل ما زال التصميم مطابقًا للصف النشط. استخدمه لمراجعة نسخ التصميم.",
"help.connect_note": "أعد تشغيل كل مساعد لتحميل خادم SolidCraft. نُسخ كل ملف احتياطيًا بامتداد .bak قبل تغييره.",
"help.connect_title": "ربط مساعدي الذكاء الاصطناعي",
"help.construct.axis": "ينشئ محورًا إنشائيًا بالطريقة التي تناسب ما تختاره: على امتداد حافة أو خط، أو عبر ثقب أو وجه دائري، أو عند تقاطع مستويين، أو عبر نقطتين، أو عموديًا على وجه عبر نقطة. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"help.construct.axis.edge": "ينشئ محورًا إنشائيًا على امتداد حافة مستقيمة أو خط رسم. استخدمه كمحور لعملية دوران أو لنمط دائري أو لمفصل.",
"help.construct.axis.normal_to_face": "ينشئ محورًا إنشائيًا يمر بنقطة ويكون عموديًا على وجه. استخدمه كمحور يبرز مستقيمًا من السطح.",
"help.construct.axis.through_cylinder": "ينشئ محورًا إنشائيًا عبر مركز وجه أسطوانة أو مخروط أو طارة، أو حافة دائرية. استخدمه لتدوير الميزات أو تكرارها حول قطعة مستديرة.",
"help.construct.axis.two_planes": "ينشئ محورًا إنشائيًا عند التقاء مستويين أو وجهين مسطحين. استخدمه حين يكون المحور المطلوب هو الخط بين وجهين.",
"help.construct.axis.two_points": "ينشئ محورًا إنشائيًا يمر بنقطتين أو رأسين أو نقطتي رسم. استخدمه لمحور يمتد بين موضعين معروفين.",
"help.construct.plane": "ينشئ مستوى إنشائيًا بالطريقة التي تناسب ما تختاره: إزاحة عن مستوى، أو عبر نقطة، أو بين مستويين، أو عبر خطوط أو نقاط، أو مماسًا لوجه منحنٍ، أو عموديًا على مسار. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"help.construct.plane.along_path": "ينشئ مستوى إنشائيًا عموديًا على حافة أو منحنى عند موضع على امتداده. استخدمه لرسم مقطع من أجل كنس أو لمقطع عرضي للمسار.",
"help.construct.plane.at_angle": "ينشئ مستوى إنشائيًا مائلًا بزاوية عن مستوى أو وجه، حول محور أو حافة. استخدمه للرسوم المائلة، مثل حامل مائل.",
"help.construct.plane.axis_point": "ينشئ مستوى إنشاء يحتوي على محور ونقطة خارجه. اختر محور الأصل أو محور إنشاء أو حافة مستقيمة أو خط رسم، ثم رأسًا أو نقطة رسم أو نقطة إنشاء. النقطة الواقعة على المحور لا تحدد مستوى وحيدًا.",
@@ -1739,6 +1788,7 @@
"help.construct.plane.tangent": "ينشئ مستوى إنشائيًا يمس أسطوانة أو مخروطًا أو كرة أو طارة عند نقطة. استخدمه للرسم على جانب قطعة مستديرة.",
"help.construct.plane.three_points": "ينشئ مستوى إنشائيًا يمر بثلاث نقاط. استخدمه لمستوى تحدده مواضع على النموذج، مثل ثلاث زوايا.",
"help.construct.plane.two_edges": "ينشئ مستوى إنشائيًا يمر بحافتين مستقيمتين أو خطين يقعان في مستوى واحد. استخدمه لمستوى يقطع القطعة، مثل مستوى يمر بحافتين متقابلتين.",
"help.construct.point": "ينشئ نقطة إنشائية بالطريقة التي تناسب ما تختاره: عند رأس، أو في مركز دائرة أو كرة، أو على امتداد حافة، أو عند تقاطع خطين أو ثلاثة مستويات، أو حيث يقطع خط مستوى. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"help.construct.point.along_path": "ينشئ نقطة إنشائية عند موضع على امتداد حافة أو منحنى. استخدمها كمرجع في موضع بين طرفي المسار.",
"help.construct.point.center": "ينشئ نقطة إنشائية في مركز حافة دائرية أو دائرة رسم أو قوس أو كرة أو طارة. استخدمها كمرجع للثقوب والمحاور والمفاصل.",
"help.construct.point.edge_plane": "ينشئ نقطة إنشائية حيث تخترق حافة أو خط مستوى أو وجهًا مسطحًا. استخدمها لتحديد موضع عبور المسار للمستوى.",
@@ -1764,6 +1814,7 @@
"help.file.send_to_slicer": "يحفظ الأجسام المحددة في ملف 3MF ويفتحه في برنامج التقطيع الذي تختاره. استخدمه للانتقال من النموذج إلى الطباعة بخطوة واحدة.",
"help.font_details": "تستخدم الواجهة خطوط egui المدمجة (Ubuntu Light وHack، بموجب رخصة Ubuntu Font ورخصة MIT/Bitstream Vera، وNoto Emoji وخط أيقونات الرموز التعبيرية بموجب OFL وMIT). يستخدم نص الرسم خط Liberation Sans (SIL OFL 1.1). حزمة الخطوط الاختيارية craft-fonts لتطبيقات Crafting (BIZ UDPGothic وShippori Mincho وBIZ UDMincho وNoto Sans CJK SC وNoto Sans Arabic، بموجب SIL OFL 1.1) غير مضمّنة في إصدارات SolidCraft.",
"help.fonts": "الخطوط",
"help.frame.end_cap": "يغلق الأطراف المفتوحة لأعضاء الإطار بألواح على شكل محيط المقطع. استخدمه لسد الأنابيب والزوايا والعوارض، فوق الطرف أو مغروسًا فيه.",
"help.frame.member": "يضع مقطعًا، مثل أنبوب أو قطاع ألومنيوم مبثوق، على امتداد خطوط رسم هيكل، بعنصر واحد لكل خط. استخدمه لبناء الهياكل والرفوف والمنشآت الملحومة.",
"help.inspect.accessibility": "يلوّن الأوجه التي تستطيع أداة الوصول إليها من اتجاه واحد، وتلك التي لا تستطيع. استخدمه لفحص قطعة للتشغيل الآلي أو القولبة من ذلك الجانب.",
"help.inspect.center_of_mass": "يعرض مركز كتلة الأجسام، كلٍّ على حدة ومجتمعةً، بكثافة منتظمة. استخدمه لفحص التوازن ومعرفة أين ستميل القطعة.",
@@ -2240,6 +2291,9 @@
"measure.at": "عند",
"measure.item": "العنصر {number}",
"measure.line_to_centre": "من الخط إلى المركز",
"measure.perimeter": "المحيط",
"measure.perimeter_inner": "المحيط الداخلي",
"measure.perimeter_outer": "المحيط الخارجي",
"measure.quick_copied": "تم نسخ القياس",
"measure.quick_copy": "انقر لنسخ القياس",
"measure.quick_edges": "{count} حواف",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt مع السحب بالزر الأيسر يُزيح العرض، وShift+Alt مع الأيسر يكبّره، وCtrl مع السحب بالأيسر من مساحة فارغة يدوّره",
"nav.inventor.help": "السحب بالزر الأوسط يُزيح العرض، وShift مع الأوسط يدوّره، وCtrl مع الأوسط يكبّره، والسحب بالأيمن يدوّره",
"nav.maya.help": "Alt مع السحب بالزر الأيسر يدوّر العرض، وAlt مع الأوسط يُزيحه، وAlt مع الأيمن يكبّره؛ والسحب بالزر الأوسط يُزيح أيضًا",
"nav.maya_horizontal_zoom.help": "اسحب مع Alt وزر الفأرة الأيمن: إلى اليمين للتكبير وإلى اليسار للتصغير. عطّل هذا الخيار لاستعادة التكبير بالسحب العمودي.",
"nav.maya_horizontal_zoom.label": "Maya: التكبير بالسحب الأفقي",
"nav.nx.help": "السحب بالزر الأوسط يدوّر العرض، وShift مع الأوسط يُزيحه (في NX: الأوسط مع الأيمن)، وCtrl مع الأوسط يكبّره (في NX: الأوسط مع الأيسر)؛ والسحب بالأيمن لا يحرك الكاميرا",
"nav.openscad.help": "السحب بالزر الأيسر على مساحة فارغة يدوّر العرض، وShift مع السحب بالأيسر يحدد بمربع، وسحب هندسة الرسم يعدّلها؛ والسحب بالأيمن أو الأوسط يُزيح، وShift مع السحب بالأيمن أو الأوسط يكبّر",
"nav.orbit_cursor_wrap.help": "عندما يصل سحب التدوير إلى حافة العرض، ينتقل المؤشر إلى الحافة المقابلة ويستمر التدوير. عند الإيقاف: يتوقف السحب عند حافة الشاشة. لا تأثير له على Wayland أو داخل المتصفح.",
@@ -2411,6 +2467,16 @@
"not a move": "ليس تحريكًا",
"not a number": "ليس عددًا",
"open a sketch first": "افتح رسمًا أولًا",
"operations.cancel": "إلغاء {name}",
"operations.cancelled": "تم إلغاء {name}",
"operations.cancelling": "جارٍ الإلغاء…",
"operations.cannot_cancel": "لا يمكن إلغاء {name}",
"operations.feature": "ميزة",
"operations.feature_edit": "تحرير الميزة",
"operations.meshing": "جارٍ تحميل الأجزاء",
"operations.queued": "في الانتظار",
"operations.stopped": "أُلغي",
"operations.waiting": "جاهز",
"parameters.apply_live": "تطبيق كل تغيير عند مغادرة حقله",
"parameters.apply_live_tip": "عند الإيقاف: تنتظر التغييرات حتى «تطبيق» أو «موافق»، ثم يُعاد بناء التصميم مرة واحدة لها جميعًا. «إلغاء» أو Escape يلغيها.",
"parameters.held": "{count} تغييرات بانتظار «تطبيق»",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "ألوان العرض ثلاثي الأبعاد",
"prefs.appearance.viewport_logo": "منطقة العرض والشعار",
"prefs.applies_on_restart": "يُطبَّق عند إعادة التشغيل",
"prefs.assemblies": "التجميعات",
"prefs.assistant": "المساعد",
"prefs.assistant_connecting": "الاتصال",
"prefs.assistant_follow_help": "النظر إلى الرسومات يحرّك العرض مع المؤشر.",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "اختيار ملف خط…",
"prefs.click": "نقر",
"prefs.command_dialog_values": "مربعات حوار الأوامر",
"prefs.constraint_glyph_size": "حجم رموز القيود",
"prefs.constraint_glyph_size_note": "حجم رسم رموز القيود وحروفها أو أيقوناتها في الرسم. 100% هو الحجم المعتاد؛ وتحتفظ الرموز بهذا الحجم على الشاشة عند أي مستوى تكبير.",
"prefs.construct_menu_groups": "تجميع أدوات الإنشاء حسب نوع العنصر",
"prefs.construct_menu_groups_help": "إظهار عناوين المستويات والمحاور والنقاط. يحافظ التعطيل على ترتيب القائمة الأصلي.",
"prefs.contact_shading": "تظليل التلامس الناعم",
"prefs.contact_shading_note": "تظليل ناعم حيث تقترب القطع من بعضها.",
"prefs.context_menu": "القائمة السياقية",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "الملفات المستوردة",
"prefs.design_tools.note": "ملاحظة",
"prefs.design_tools.off": "إيقاف",
"prefs.design_tools.placement_group": "مسند، نتوء، تعشيق مرن",
"prefs.design_tools.placement_group": "الميزات الموضوعة",
"prefs.design_tools.rows": "صفوف",
"prefs.devices": "الفأرة ثلاثية الأبعاد",
"prefs.dialog_buttons": "أزرار مربعات الحوار",
"prefs.dialog_first_letter_buttons": "أزرار نوافذ الحوار تستجيب لحرفها الأول",
"prefs.dialog_first_letter_buttons_help": "عند فتح نافذة حوار، تضغط كتابةُ الحرف الأول من تسمية الزر ذلك الزر: «م» لزر «موافق» و«إ» لزر «إلغاء». الحرف الذي يناسب زرَّين لا يفعل شيئًا، وحقل النص النشط يحتفظ بضغطة المفتاح. عند الإيقاف: الكتابة لا تؤثر في الأزرار، كما كان سابقًا.",
"prefs.dialogs": "الحوارات",
"prefs.dialogs_edge": "عند حافة العرض",
"prefs.dialogs_left_column": "في العمود الأيسر",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "في نافذة",
"prefs.display": "العرض",
"prefs.edges": "الحواف والتظليل",
"prefs.export": "التصدير",
"prefs.export_name": "اسم ملف التصدير",
"prefs.export_name.body": "اسم الجسم المُصدَّر (الأول إن تعددت الأجسام)",
"prefs.export_name.design": "اسم التصميم",
"prefs.export_name_hint": "مثلًا {design}-{body}",
"prefs.export_name_sample": "تصدير هذا التصميم يقترح: {name}",
"prefs.export_name_tip": "اسم الملف الذي يقترحه «ملف › تصدير» و«حفظ كشبكة». تُستبدل هذه العناصر النائبة:\n{placeholders}\nتُحذف خاصية التصميم غير المعيّنة. اترك الحقل فارغًا لاقتراح اسم التصميم، أو اسم الجسم للشبكة.",
"prefs.extend": "توسيع",
"prefs.extra_navigation": "Ctrl مع السحب بالزر الأيسر في مساحة فارغة يدوّر العرض، واضغط مطولًا على Space للإزاحة.",
"prefs.extrude_arrow_face_stops": "يتوقف سهم البثق عند الأوجه",
"prefs.extrude_arrow_face_stops_note": "عند سحب سهم مسافة البثق يتوقف عند الأوجه المستوية الموازية للمقطع، مثل الجانب البعيد من كتلة يجري قطعها، ويحدد الوجه. عند الإيقاف: يتحرك السهم بخطوات مستديرة فقط.",
"prefs.extrude_view_isometric": "التحويل إلى العرض المتساوي القياس عند فتح البثق",
"prefs.extrude_view_return": "العودة إلى العرض السابق عند إغلاق البثق",
"prefs.file_operations_wait": "انتظار فتح الملفات",
"prefs.file_operations_wait_note": "أثناء فتح ملف أو إدراجه أو إعادة قراءة الروابط، ينتظر التصميم خلف بطاقة تعرض تقدّم الملف وزر «إلغاء». عند الإيقاف: يظهر الملف في لوحة العمليات ويمكنك متابعة العمل؛ يُطبَّق الإدراج بعد أن تنتهي مما تفعله، والملف الذي تفتحه في هذه الأثناء يُفتح في علامة تبويب جديدة.",
"prefs.fillet_legacy_radius": "استخدام نصف القطر الافتراضي السابق للتقويس المصمت",
"prefs.fillet_legacy_radius.help": "معطّل افتراضيًا. عند التفعيل، يفتح التقويس المصمت الجديد على الرقم 2 مقروءًا بوحدات التصميم («2 بوصة» في تصميم بالبوصة)، كما كان سابقًا؛ وعند الإيقاف، يفتح على نصف القطر الافتراضي للأداة، 2 مم، معروضًا بوحدات التصميم («0.07874 بوصة» في تصميم بالبوصة).",
"prefs.follows_os": "يتبع النظام",
"prefs.font": "الخط",
"prefs.font_fallback": "الرموز التي يفتقدها الخط المختار تُرسم بالخط المدمج، فلا تظهر أي تسمية كمربع فارغ.",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "إزاحة العرض",
"prefs.gesture_zoom": "تكبير",
"prefs.graphics": "الرسوميات",
"prefs.graphics_api": "واجهة برمجة تطبيقات الرسوميات",
"prefs.graphics_api_auto": "تلقائي",
"prefs.graphics_api_help": "اختر واجهة الرسوميات المستخدمة لفتح SolidCraft. إذا تعذّر فتح النافذة عند التشغيل التالي، فستُستعاد السابقة.",
"prefs.graphics_api_override": "يتحكم إعداد عند التشغيل في واجهة الرسوميات. سيُطبّق الاختيار المحفوظ عند فتح SolidCraft بالطريقة العادية.",
"prefs.graphics_api_restart_note": "يُطبّق بعد إعادة التشغيل. تُعالَج التصاميم غير المحفوظة قبل الإغلاق.",
"prefs.graphics_api_restart_unavailable": "أعد تشغيل SolidCraft لتطبيق واجهة الرسوميات المحفوظة.",
"prefs.graphics_api_running": "الحالية: {current}. المختارة للتشغيل التالي: {selected}.",
"prefs.graphics_api_save_failed": "تعذّر حفظ اختيار واجهة الرسوميات: {error}",
"prefs.graphics_api_start_failed": "تعذّر تجهيز واجهة الرسوميات المختارة: {error}",
"prefs.graphics_api_start_reverted": "لم يفتح التشغيل السابق باستخدام {requested} النافذة. استعاد SolidCraft الاختيار {previous}.",
"prefs.graphics_api_unavailable": "اختيار واجهة الرسوميات متاح في تطبيق سطح المكتب.",
"prefs.graphics_card": "بطاقة الرسوميات",
"prefs.graphics_card_auto": "تلقائي",
"prefs.graphics_card_missing": "بطاقة الرسوميات المحفوظة غير متاحة؛ يُستخدم الخيار «تلقائي».",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "بالترتيب",
"prefs.history_sketches_note": "عند ضبط الرسومات على «تحت ميزتها»، يعرض السجل على اليسار كل رسم بمستوى واحد للداخل، تحت أول ميزة بُنيت منه، متى كان عريضًا بما يكفي لإظهار الأسماء. أما الخط الزمني في الأسفل فيحتفظ دائمًا بترتيب الإنشاء.",
"prefs.history_sketches_under_feature": "تحت ميزتها",
"prefs.history_steps_component": "خطوات السجل حسب المكوّن",
"prefs.history_steps_component_note": "عندما يكون مكوّن نشطًا أو محددًا، تتنقل عناصر تحكم السجل بين ميزات ذلك المكوّن كما يعرضها السجل في الأسفل. عند إيقافه تتنقل بين كل ميزات التصميم. السجل على اليسار أو تحت المستعرض يتنقل دائمًا بين كل الميزات.",
"prefs.hold_stop_snapping": "اضغط مطولًا لإيقاف الالتقاط",
"prefs.home_fit_size": "حجم العرض الرئيسي والملاءمة",
"prefs.home_fit_size_note": "مقدار ما يملؤه النموذج من العرض عندما يُظهره العرض الرئيسي أو الملاءمة أو تصميم مفتوح أو تغيير العرض من متصفح العرض، سواء كان الإعداد أدناه مفعّلًا أم لا. 100 %: يملأ العرض بين اللوحات والبوصلة وشريط التنقل.",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "سهما التدوير المنحنيان عند زاوية المكعب يدوران العرض داخل مستوى الشاشة. عند التشغيل: سهم التدوير مع عقارب الساعة يدور عكسها، وسهم العكس يدور معها. عند الإيقاف: يدور كل سهم بالعرض حسب انحنائه.",
"prefs.invert_navigator_arrows": "عكس أسهم تدوير مكعب العرض",
"prefs.invert_navigator_arrows_note": "تدوّر الأسهم المحيطة بالمكعب الكاميرا في الاتجاه الذي تشير إليه، كما في Fusion وInventor: السهم الموجود على اليسار يشير إلى اليمين ويدوّر الكاميرا إلى اليمين. عند الإيقاف: يدوّر السهم المكعب نحو الجهة التي يقع فيها، فيدوّر السهم الأيسر الكاميرا إلى اليسار. لا يتأثر سهما الدوران المنحنيان.",
"prefs.joint_drag_trackball": "تدوير الأجزاء على مفصل كروي مثل كرة التتبع عند سحبها",
"prefs.joint_drag_trackball_help": "سحب جزء يثبّته مفصل كروي يدوّره بأصغر دوران حول المفصل، كأنك تدحرج كرة بحجم الجزء. عند الإيقاف: تتبع النقطة التي أمسكتها المؤشر تمامًا، وقد يدور الجزء أيضًا حولها.",
"prefs.keep_unsaved_also_asks": "السؤال أيضًا عند إغلاق علامة التبويب",
"prefs.keep_unsaved_also_asks_tip": "عند إيقاف هذا الخيار، تُغلق علامة التبويب دون مربع حوار المتصفح بعد تحديث نسخة كل تصميم غير محفوظ.",
"prefs.keep_unsaved_in_browser": "الاحتفاظ بالعمل غير المحفوظ في هذا المتصفح",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "غير متاح على هذا المعالج الرسومي",
"prefs.on": "تشغيل",
"prefs.opaque": "معتم",
"prefs.operations_panel": "إظهار العمليات في العرض",
"prefs.operations_panel_note": "تظهر العمليات الطويلة (فتح ملف، حساب ميزة، أمر من وكيل) في الزاوية السفلية اليمنى من العرض مع تقدّمها وزر لإلغائها. عند الإيقاف: إشعار «جارٍ الحساب» كما كان من قبل.",
"prefs.orbit_snap": "اضغط Shift أثناء التدوير للالتقاط على محور.",
"prefs.orientation": "الاتجاه",
"prefs.origin_plane_names": "أسماء مستويات الأصل",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "إظهار علامات تبويب الشريط فقط",
"prefs.ribbon_tabs_only_note": "يُطوى الشريط إلى صف علامات التبويب. يؤدي النقر على علامة تبويب إلى إظهار لوحاتها فوق منطقة العرض حتى يبدأ أمر أو يغادرها المؤشر. يبدّل الأمر «علامات تبويب الشريط فقط» في تبويب العرض، أو اختصاره، هذا الخيار.",
"prefs.right_click": "نقر أيمن",
"prefs.save_prompt_one_at_a_time": "السؤال عن كل تصميم غير محفوظ على حدة عند إغلاق عدة تصاميم",
"prefs.save_prompt_one_at_a_time_help": "عرض نافذة حفظ لكل تصميم غير محفوظ بدلًا من قائمة مجمّعة.",
"prefs.saving": "البدء والحفظ",
"prefs.scale_note": "أو Ctrl + / Ctrl − في النافذة. الأزرار 28 px عند 100%.",
"prefs.scale_text": "الحجم والنص",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "القوس بنقطة مركز يتبع المؤشر",
"prefs.sketch.click_selects": "النقر يحدد",
"prefs.sketch.conflict_colour": "لون التعارض",
"prefs.sketch.cursor_coordinates": "إظهار إحداثيات المؤشر في الرسم",
"prefs.sketch.cursor_coordinates_note": "بجانب المؤشر، قيمتا X وY من أصل الرسم، حتى دون تشغيل أي أداة. عند الإيقاف: فقط عندما تضع أداةٌ نقطة.",
"prefs.sketch.drawing": "الرسم",
"prefs.sketch.ellipse_axes": "رسم القطوع الناقصة مع محاورها",
"prefs.sketch.ellipse_axes_note": "المحوران الأكبر والأصغر كخطوط مساعدة، لتحديد أبعاد أنصاف المحاور والمحاور. عند الإيقاف: القطع الناقص وحده، ويعطي D عليه نصف قطره الأصغر أينما سُحبت القيمة، مرسومًا ومُعلَّمًا بـ R كما في السابق.",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "الأوجه والحواف",
"prefs.sketch.hide_glyphs": "إخفاء الرموز عند التصغير",
"prefs.sketch.marks": "العلامات في الرسم",
"prefs.sketch.max_points": "أكبر حجم للرسم",
"prefs.sketch.max_points_note": "أكبر عدد من النقاط أو المنحنيات في رسم واحد: 20000 افتراضيًا، و200000 كحد أقصى. يرفض «إدراج SVG» و«إدراج DXF» رسمًا أكبر. الرسم الكبير يُحل ويُعرض بشكل أبطأ.",
"prefs.sketch.max_points_unit": "نقطة",
"prefs.sketch.note": "الرسم والالتقاط والتحديد.",
"prefs.sketch.opening_closing": "الفتح والإغلاق",
"prefs.sketch.prefer_free_points": "تفضيل النقاط القابلة للتحريك عند تداخلها",
"prefs.sketch.project_options": "السؤال عن خيارات الإسقاط أولًا",
"prefs.sketch.recent_snap": "الالتقاط عند تقاطع دليلين",
"prefs.sketch.select_3d_curve_points": "تحديد نقاط منحنيات الرسم ثلاثي الأبعاد",
"prefs.sketch.select_3d_curve_points_help": "إظهار نقاط منحنيات الرسم ثلاثي الأبعاد المرسومة وتحديدها كمراجع للإنشاء.",
"prefs.sketch.select_other_hidden": "تحديد آخر يشمل الهندسة المخفية",
"prefs.sketch.shortcut_cycles_modes": "الاختصار مجددًا يبدّل الوضع",
"prefs.sketch.shortcut_cycles_modes_tip": "عند الإيقاف: تبدأ الأداة مجددًا.",
"prefs.sketch.snap_to_visible_grid": "الالتقاط عند تقاطع الشبكة المرئي",
"prefs.sketch.snapping_guides": "الالتقاط والأدلة",
"prefs.sketch.state_icons": "أيقونات الحالة",
"prefs.sketch.tracking_guides": "أدلة المراكز ونقاط المنتصف",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "الرسم والتحديد",
"prefs.sketch_selection_heading": "الرسم والتحديد",
"prefs.sketch_selection_note": "كيف تلتقط الرسومات وكيف تحدد النقرات.",
"prefs.sketch_snap_to_visible_grid_note": "تلتصق النقطة في الرسم عند تقاطع الخطوط التي ترسمها الشبكة عندما يشير المؤشر إلى أحدها، وإلا تلتصق بالشبكة الأدق بينها. عند الإيقاف: تلتصق النقطة بالشبكة الأدق فقط، كما كان.",
"prefs.sketch_state_icons": "أيقونات الرسومات بلون حالتها",
"prefs.sketch_state_icons_note": "في السجل والمستعرض، تأخذ أيقونة الرسم لون حالته (قيود ناقصة، مقيّد بالكامل أو متعارض) ويذكر تلميحه الحالة. عند الإيقاف: لكل الرسومات الأيقونة نفسها.",
"prefs.sketch_tab_always": "إبقاء تبويب الرسم ظاهرًا",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "PBR المعتم يتطلب عتامة 1",
"render.error_physical_glass": "الوصفة المحددة ليست زجاجًا فيزيائيًا",
"render.error_preview_device": "معاينة المنتج تتطلب جهازًا مثبّتًا بمخزن عمق",
"render.error_product_placement": "موضع منتج غير صالح",
"render.error_product_triangle": "مثلث منتج غير صالح",
"render.error_provisional_identity": "هوية تصيير مؤقتة أو عدد عينات غير صالح",
"render.error_quality_bounds": "إسقاط الجودة يتجاوز الحدود الأصلية",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "حاول مرة أخرى",
"render.gpu_seed": "البذرة العشوائية",
"render.gpu_unavailable": "تتبع المسارات على GPU غير جاهز على هذا الجهاز.",
"render.graphics_api_restart_vulkan": "إعادة التشغيل باستخدام Vulkan",
"render.graphics_api_restart_warning": "يؤدي تغيير واجهة الرسوميات إلى إعادة تشغيل SolidCraft ويطلب منك حفظ التصاميم غير المحفوظة. إذا تعذّر فتح النافذة بالواجهة الجديدة، فسيُستعاد الاختيار السابق عند التشغيل التالي.",
"render.graphics_api_settings": "إعدادات الرسوميات",
"render.graphics_api_vulkan_required": "يتطلب تتبّع المسارات بمعالج الرسوميات Vulkan في هذه الجلسة. أعد التشغيل باستخدام Vulkan، أو واصل استخدام طريقة صور بمعالج CPU.",
"render.ground_apply": "ملاءمة الأرضية وحفظها",
"render.ground_gap": "فجوة خلوص صريحة",
"render.ground_linear_rgb": "الانعكاسية المنتشرة · RGB خطي",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "منحنى شريحي ثلاثي الأبعاد: انقر نقاط الملاءمة في الفضاء ثلاثي الأبعاد؛ انقر بالزر الأيمن أو اضغط Esc للإنهاء",
"sketch.hint.trim": "قص: انقر على الجزء المراد إزالته من المنحنى، أو اسحب عبر الأجزاء المراد إزالتها",
"sketch.make_selection": "تحويل التحديد إلى {linetype}",
"sketch.move_released": "تم النقل: أُزيلت {count} قيود كانت تربطه بما بقي ({names}).",
"sketch.move_released_one": "تم النقل: أُزيل {count} قيد كان يربطه بما بقي ({names}).",
"sketch.open_ends": "مفتوحة {count}",
"sketch.status_conflict": "تعارض القيود",
"sketch.status_fully_constrained": "مقيّد بالكامل",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "فصل النص عن منحناه",
"sketch_text.path_hint": "منحنى من الرسم يتبعه النص: انقر هنا ثم على المنحنى",
"sketch_text.use_font_file": "استخدام ملف الخط {path}",
"sketch_text.valign_baseline": "خط الأساس",
"sketch_text.valign_bottom": "أسفل",
"sketch_text.valign_middle": "وسط",
"sketch_text.valign_top": "أعلى",
"solid": "مصمت",
"status.editing": "تحرير {name}",
"status.navigation": "تعيين أزرار الفأرة: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "السماح مرة واحدة",
"ui.agent_chat_allowed": "مسموح",
"ui.agent_chat_answered": "الإجابة: {option}",
"ui.agent_chat_answered_in": "أُجيب خلال {time}",
"ui.agent_chat_approval": "السماح للوكيل بفعل هذا؟",
"ui.agent_chat_attach_selection": "إرفاق التحديد",
"ui.agent_chat_attach_selection_tip": "إرسال ما هو محدد في النموذج (أوجه وحواف وميزات وأجسام) مع الرسالة، ليعرف الوكيل ما تقصده",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "الأجسام",
"ui.agent_chat_ctx_elements": "العناصر",
"ui.agent_chat_ctx_features": "الميزات",
"ui.agent_chat_ctx_gone": "لم يعد في التصميم: تم تغييره أو حذفه.",
"ui.agent_chat_ctx_more": "+{n} أخرى",
"ui.agent_chat_ctx_other": "أخرى",
"ui.agent_chat_custom_heading": "نموذج مخصص",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "التثبيت على اليمين",
"ui.agent_chat_drop_hint": "أفلت لإرفاقه برسالتك التالية",
"ui.agent_chat_edit": "تعديل",
"ui.agent_chat_ended_after": "انتهى بعد {time}",
"ui.agent_chat_exited": "توقف الوكيل.",
"ui.agent_chat_failed_start": "تعذّر بدء الوكيل: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: ملف CAD يُستورد إلى التصميم ولا يُقرأ",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "لا يستطيع {model} استخدام أدوات SolidCraft، لذا يمكنه المحادثة فقط. اختر نموذجًا يدعم الأدوات.",
"ui.agent_chat_model_rejected": "لم يقبل الوكيل {model}: {error}",
"ui.agent_chat_model_search": "البحث عن النماذج…",
"ui.agent_chat_model_search_or_id": "ابحث، أو اكتب أي معرّف نموذج…",
"ui.agent_chat_model_tip": "النموذج الذي يستخدمه الوكيل. يُحفظ اختيارك لهذا الوكيل.",
"ui.agent_chat_models_failed": "تعذّر جلب قائمة النماذج: {error}",
"ui.agent_chat_models_heading": "النماذج المتاحة",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "الصورة التالية",
"ui.agent_chat_no_cli": "لم يُعثر على solidcraft-cli بجوار التطبيق، لذا لا يستطيع الوكيل الوصول إلى التصميم.",
"ui.agent_chat_no_control": "لم تبدأ نقطة نهاية محادثة الوكيل، لذا لا يستطيع الوكيل الوصول إلى التصميم.",
"ui.agent_chat_no_design_hint": "يعمل الوكيل دون أدوات SolidCraft، لذا لا يستطيع قراءة التصميم أو تغييره: لم يُعثر على solidcraft-cli بجانب التطبيق. ثبّت SolidCraft مع solidcraft-cli بجانبه (في Windows: حزمة MSI أو ملف zip المحمول)، أو اضبط SOLIDCRAFT_CLI على مساره، ثم اتصل مرة أخرى.",
"ui.agent_chat_no_images": "هذا الوكيل لا يقبل الصور",
"ui.agent_chat_no_picture": "لا توجد صورة في الحافظة",
"ui.agent_chat_no_tool_call": "لم يستخدم النموذج أدوات SolidCraft، لذا لم يتغيّر التصميم. اختر نموذجًا يدعم استدعاء الأدوات؛ راجع «النماذج المحلية» في دليل محادثة الوكيل.",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "إعداد مساعد",
"ui.agent_chat_side": "تثبيت المحادثة",
"ui.agent_chat_signed_in": "سجّل الدخول",
"ui.agent_chat_snap_none_found": "لم يُعثر على وكيل برمجي. تعمل حزمة Snap في بيئة معزولة، لذا لا يمكنها رؤية الوكلاء البرمجيين المثبّتين على هذا الحاسوب ولا تشغيلهم. لاستخدامهم، ثبّت SolidCraft من حزمة AppImage أو .deb أو .rpm بدلًا من ذلك. يعمل الوكيل الذي يستخدم واجهة برمجية متوافقة مع OpenAI في حزمة Snap أيضًا: أعدّه من «إضافة وكيل».",
"ui.agent_chat_span_h": "{h} ساعة {min} دقيقة",
"ui.agent_chat_span_min": "{n} دقيقة",
"ui.agent_chat_span_s": "{n} ث",
"ui.agent_chat_state_auth": "يلزم تسجيل الدخول",
"ui.agent_chat_state_busy": "جارٍ العمل…",
"ui.agent_chat_state_exited": "توقف الوكيل",
"ui.agent_chat_state_failed": "فشل الاتصال",
"ui.agent_chat_state_no_design": "لا وصول إلى التصميم",
"ui.agent_chat_state_off": "غير متصل",
"ui.agent_chat_state_ready": "جاهز",
"ui.agent_chat_state_starting": "جارٍ البدء…",
"ui.agent_chat_stop": "إيقاف",
"ui.agent_chat_stop_tip": "إيقاف الوكيل وكل ما بدأه",
"ui.agent_chat_stop_turn_tip": "إيقاف الوكيل (Esc). تبقى الرسائل المنتظرة في قائمة الانتظار.",
"ui.agent_chat_thinking_for": "يفكر منذ {time}",
"ui.agent_chat_tool_running_for": "قيد التشغيل منذ {time}",
"ui.agent_chat_tools_not_started": "يعمل الوكيل دون أدوات SolidCraft، لذا لا يستطيع قراءة التصميم أو تغييره: عُثر على solidcraft-cli، لكن أدواته لم تبدأ (رسالة الخطأ في المحادثة توضح السبب). اتصل مرة أخرى، وإذا تكرر ذلك فأعد تثبيت SolidCraft.",
"ui.agent_chat_transcript_assistant": "المساعد:",
"ui.agent_chat_transcript_user": "المستخدم:",
"ui.agent_chat_turn_limit": "التغييرات لكل رسالة",
"ui.agent_chat_turn_unlimited": "بلا حد",
"ui.agent_chat_undo_changes": "التراجع عن هذه التغييرات",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "{count} جسم",
"ui.browser_bodies_other": "{count} أجسام",
"ui.browser_collapse": "طي المستعرض",
"ui.browser_collapse_below": "طي ما بالأسفل",
"ui.browser_expand": "توسيع المستعرض",
"ui.browser_expand_below": "توسيع ما بالأسفل",
"ui.browser_title": "المستعرض",
"ui.calibrate": "معايرة",
"ui.cancel": "إلغاء",
@@ -5269,6 +5409,7 @@
"ui.collapse": "طي",
"ui.collinear": "على خط واحد",
"ui.colour_vision": "رؤية الألوان",
"ui.colour_vision_bends": "الثنيات",
"ui.colour_vision_deutan": "ضعف الأخضر",
"ui.colour_vision_deutan_tip": "لضعف أو غياب الإحساس باللون الأخضر",
"ui.colour_vision_failed": "فشل",
@@ -5298,14 +5439,24 @@
"ui.conic_curve": "منحنى مخروطي",
"ui.constant": "ثابت",
"ui.constraints_conflict": "تعارض في القيود",
"ui.construct_auto.chosen": "اختيرت الطريقة من اختياراتك. اختر مرجعًا آخر أو أزل مرجعًا لتغيير الطريقة.",
"ui.construct_auto.no_fit": "اختر مراجع أخرى: لا توجد طريقة تبني من هذه المراجع.",
"ui.construct_auto.pick": "اختر ما تبني منه: الطريقة تتبع اختياراتك.",
"ui.construct_auto.refs": "المراجع",
"ui.construct_auto.select": "حدد أولًا المراجع التي ستبني منها",
"ui.construct_axes": "المحاور",
"ui.construct_planes": "المستويات",
"ui.construct_points": "النقاط",
"ui.construction": "مساعد",
"ui.construction.angle_hint": "خط إنشائي: انقر نقطة ثم أدخل زاوية أو اختر اتجاهًا",
"ui.construction.axis_hint": "خط إنشائي: انقر نقطة، أو أدخل بعدها عن محور الرسم",
"ui.construction.bisector_hint": "منصف زاوية: اختر خطين مستقيمين متقاطعين ثم الحل المطلوب",
"ui.construction.common_hint": "مماس مشترك: اختر دائرتين/قوسين ثم الحل المطلوب",
"ui.construction.contact_hint": "مماس: اختر دائرة/قوسًا أو منحنى شريحيًا/قطعًا مخروطيًا مفتوحًا ثم نقطة التماس (للمنحنيات الحرة: النهايات فقط)",
"ui.construction.external_hint": "مماس: اختر دائرة أو قوسًا ثم نقطة خارجية ثم الحل المطلوب",
"ui.construction.free_hint": "خط إنشائي: انقر نقطتين؛ انقر بزر الفأرة الأيمن للبدء من جديد",
"ui.construction.normal_needs_length": "الخط اللانهائي إنشائي دائمًا: اكتب طولًا لرسم خط عادي",
"ui.construction.parallel_hint": "خط إنشائي: اختر خطًا مستقيمًا ثم انقر أو أدخل الإزاحة؛ انقر بزر الفأرة الأيمن لتغيير المرجع",
"ui.construction.point_hint": "خط إنشائي: انقر نقطة المرور",
"ui.construction.reference_hint": "خط إنشائي: اختر خطًا مستقيمًا ثم نقطة؛ انقر بزر الفأرة الأيمن لتغيير المرجع",
"ui.construction.ribbon_label": "خطوط مساعدة",
@@ -5448,6 +5599,17 @@
"ui.ellipse": "قطع ناقص",
"ui.emboss_wrap_note": "تلتف ملامح الخطوط المتعامدة المماسة لأسطوانة مدعومة تلقائيًا. اختر جدارًا لتحديد الهدف.",
"ui.end": "النهاية",
"ui.end_cap.chamfer": "شطف الزوايا",
"ui.end_cap.direction": "الاتجاه",
"ui.end_cap.faces": "الوجوه الطرفية",
"ui.end_cap.inset": "الإزاحة للداخل",
"ui.end_cap.inset_kind": "الإزاحة حسب",
"ui.end_cap.inset_ratio": "نسبة الإزاحة",
"ui.end_cap.inward": "للداخل",
"ui.end_cap.length": "الطول",
"ui.end_cap.outward": "للخارج",
"ui.end_cap.ratio": "نسبة من السماكة",
"ui.end_cap_title": "غطاء طرفي",
"ui.end_radius": "نصف قطر النهاية",
"ui.end_scale": "مقياس النهاية",
"ui.ends": "الطرفان",
@@ -5468,7 +5630,10 @@
"ui.explode_needs_two_components": "يُبعد العرض المفكك المكوّنات بعضها عن بعض، لذا يحتاج التصميم إلى مكوّنين أو أكثر (مكوّن جديد، أو إدراج تصميم، أو إنشاء مكوّنات من الأجسام)",
"ui.exportDxf": "تصدير DXF…",
"ui.export_ellipsis_keymap": "تصدير…",
"ui.export_glb": "تصدير GLB",
"ui.export_keymap_tip": "المفاتيح ومفضلات مربع S وشريط الأدوات، كملف",
"ui.export_selects_only_body": "تحديد الجسم الوحيد عند تصدير شبكة",
"ui.export_selects_only_body_tip": "تبدأ أوامر تصدير STL وتصدير 3MF والإرسال إلى برنامج التقطيع بتحديد جسم التصميم عندما لا يحتوي إلا على جسم واحد.",
"ui.extend": "تمديد",
"ui.extent": "الامتداد",
"ui.extent_type": "نوع الامتداد",
@@ -5528,6 +5693,8 @@
"ui.finest": "الأدق",
"ui.finish_sketch": "إنهاء الرسم",
"ui.first_dimension_scales": "البُعد الأول يغيّر مقياس الرسم",
"ui.first_dimension_scales_about_origin": "تغيير المقياس حول أصل الرسم",
"ui.first_dimension_scales_about_origin_tip": "عند التفعيل: يكبر المرسوم أو يصغر دائمًا حول أصل الرسم، فإذا كان الشكل مرسومًا بعيدًا عن الأصل تحرّك. عند الإيقاف: المرسوم غير المرتبط بالأصل يتغير مقياسه حول منتصفه ويبقى حيث رُسم.",
"ui.first_dimension_scales_tip": "تشغيل: أول بُعد طولي في الرسم يغيّر مقياس الشكل الذي يقيسه، فيبقى شكله كما هو. إيقاف: يغيّر البُعد حجم ما يقيسه فقط.",
"ui.fit": "ملاءمة",
"ui.fix_unfix": "تثبيت/فك التثبيت",
@@ -5903,7 +6070,7 @@
"ui.pitch": "الخطوة",
"ui.placement": "الموضع",
"ui.placement_handles": "مقابض الموضع",
"ui.placement_handles_tip": "علامة لسحب الميزة عبر النموذج وحلقة لتدويرها.",
"ui.placement_handles_tip": "علامة لسحب الميزة عبر النموذج، وحلقة لتدويرها حيث يمكن تدوير الميزة.",
"ui.plane": "المستوى",
"ui.plane_at_angle": "مستوى بزاوية",
"ui.plugins": "الإضافات",
@@ -5950,6 +6117,7 @@
"ui.project_references_construction_note": "تصبح الهندسة التي تنشئها أوامر «إسقاط» و«تقاطع» و«تضمين هندسة ثلاثية الأبعاد»، وحواف الوجه في رسم جديد على وجه، هندسةً مساعدة: مراجع للرسم عليها لا تدخل في المقاطع. وتبقى مرتبطة بالنموذج.",
"ui.properties": "الخصائص",
"ui.properties.copy_matrix": "نسخ المصفوفة",
"ui.properties.copy_value": "انقر للنسخ",
"ui.properties.first_moments": "العزوم الأولى",
"ui.properties.inertia": "عزم القصور الذاتي",
"ui.properties.inertia_note": "حول مركز الكتلة، بمحاور العالم (g·{unit}²)",
@@ -5962,6 +6130,7 @@
"ui.properties.measuring_failed": "توقف القياس قبل أن يكتمل.",
"ui.properties.principal_axis": "المحور الرئيسي {number}",
"ui.properties.principal_moments": "العزوم الرئيسية",
"ui.properties.value_copied": "تم نسخ القيمة",
"ui.pull_direction": "اتجاه السحب",
"ui.quality": "الجودة",
"ui.quantity": "الكمية",
@@ -5982,11 +6151,14 @@
"ui.relink_design_changed": "تغيّر التجميع أثناء اختيار المصدر. ابدأ «إعادة ربط المصدر» من جديد.",
"ui.relink_done": "أُعيد ربط المصدر لكل النسخ.",
"ui.relink_not_linked": "هذا المكوّن غير مرتبط بتصميم مصدر.",
"ui.relink_one_done": "أُعيد ربط المصدر لهذه النسخة.",
"ui.relink_select_one": "حدد مكوّنًا مرتبطًا واحدًا أو إحدى نسخه أولًا.",
"ui.relink_source_all": "إعادة ربط المصدر (كل النسخ)…",
"ui.relink_source_one": "إعادة ربط المصدر…",
"ui.removeFromQuickAccess": "إزالة من الوصول السريع",
"ui.removeFromToolbar": "إزالة من شريط الأدوات",
"ui.removeSection": "إزالة المقطع",
"ui.renameSelectedBodies": "إعادة تسمية الأجسام المحددة",
"ui.render": "التصيير",
"ui.renderer": "محرك التصيير",
"ui.repeat": "تكرار",
@@ -6017,6 +6189,8 @@
"ui.ribbon_pin_footer": "الأوامر المثبتة تظهر في الشريط. مرّر المؤشر على صف لتثبيته أو إلغاء تثبيته.",
"ui.ribbon_workspace": "مساحة العمل",
"ui.right": "يمين",
"ui.right_click_confirms": "النقر بزر الفأرة الأيمن يؤكد مدخلات مربع الحوار",
"ui.right_click_confirms_tip": "عندما يكون مربع حوار مفتوحًا، ينتقل النقر بزر الفأرة الأيمن في العرض إلى المدخل الفارغ التالي، وعند المدخل الأخير ينفّذ «موافق»",
"ui.save": "حفظ",
"ui.save_as": "حفظ باسم",
"ui.save_mesh_no_slicer_open": "لم يُعثر على برنامج تقطيع: اختر «مخصص…» وحدد برنامج التقطيع الخاص بك",
@@ -6076,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "مرشح التحديد",
"ui.sketch_keys_only": "إبقاء مفاتيح النموذج خارج الرسومات",
"ui.sketch_keys_only_tip": "أثناء تحرير رسم، تعمل مفاتيح الرسم والمفاتيح التي تعمل في كل مكان فقط؛ ولا يفعل مفتاح نموذج مثل E أو F شيئًا، فلا يمكن لمفتاح مضغوط بالخطأ أن يغلق رسمًا ثقيلًا.",
"ui.sketch_links_added_curve": "أضاف {command} منحنى واحدًا إلى الرسم.",
"ui.sketch_links_added_curves": "أضاف {command} منحنيات إلى الرسم (العدد: {count}).",
"ui.sketch_links_added_curves_and_points": "أضاف {command} إلى الرسم {curves} و{points}.",
"ui.sketch_links_added_point": "أضاف {command} نقطة واحدة إلى الرسم.",
"ui.sketch_links_added_points": "أضاف {command} نقاطًا إلى الرسم (العدد: {count}).",
"ui.sketch_links_curve_count": "منحنيات (العدد: {count})",
"ui.sketch_links_curve_count_one": "منحنى واحدًا",
"ui.sketch_links_hidden": "النتيجة مخفية لأن خيار {option} مُعطَّل في خيارات الرسم.",
"ui.sketch_links_point_count": "نقاطًا (العدد: {count})",
"ui.sketch_links_point_count_one": "نقطة واحدة",
"ui.sketch_modifiers": "مُعدِّلات الرسم",
"ui.sketch_project_geometry": "الهندسة",
"ui.sketch_report.all_constrained": "كل شيء مقيد بالكامل.",
@@ -6115,6 +6299,7 @@
"ui.step_values": "تغيير القيم بالأسهم والعجلة",
"ui.step_values_tip": "يغيّر السهمان لأعلى ولأسفل والعجلة فوق حقل قيمة الرقم فيه.",
"ui.stitch_tolerance_hint": "دقيقة",
"ui.straighten": "تقويم",
"ui.stretch": "مطّ",
"ui.supersampling": "التنعيم الفائق (SSAA)",
"ui.supersampling_adaptive": "فقط عندما يكون العرض ساكنًا",
@@ -6188,6 +6373,8 @@
"ui.view_angles_yaw": "الانعراج",
"ui.view_angles_zero": "تعيين {axis} إلى 0°",
"ui.view_centre": "مركز العرض",
"ui.view_compass_tip": "العرض من {axis}. انقر مرة أخرى للعكس. اسحب لتدوير العرض.",
"ui.view_compass_tip_snap": "العرض من {axis}. انقر مرة أخرى للعكس. اسحب لتدوير العرض؛ اضغط مطولًا على Shift للالتقاط.",
"ui.viewport_status_clear": "إيقاف {name}",
"ui.viewport_status_clear_hint": "إيقاف {name} · Esc",
"ui.viewport_status_edges": "{count} حواف",
+6 -1
View File
@@ -602,6 +602,7 @@
"Value": "Value",
"Variable Radius": "Variable Radius",
"Velocity": "Velocity",
"Vertical": "Вертикално",
"Vertices": "Vertices",
"View navigator": "View navigator",
"Volume": "Обем",
@@ -2574,6 +2575,10 @@
"sketch_text.path_clear": "Take the text off its curve",
"sketch_text.path_hint": "A curve of the sketch the text follows: click here, then the curve",
"sketch_text.use_font_file": "Use the font file {path}",
"sketch_text.valign_baseline": "Базова линия",
"sketch_text.valign_bottom": "Долу",
"sketch_text.valign_middle": "Среда",
"sketch_text.valign_top": "Горе",
"solid": "solid",
"the parts library is not available": "the parts library is not available",
"thread.automatic_size": "Automatic size",
@@ -3379,7 +3384,7 @@
"ui.pitch": "Pitch",
"ui.placement": "Placement",
"ui.placement_handles": "Placement handles",
"ui.placement_handles_tip": "Handles on the preview of a Rest, Boss or Snap Fit: drag the marker to move it across the model, turn it by its ring",
"ui.placement_handles_tip": "Маркер за влачене на елемента по модела и, където елементът може да се завърта, пръстен за завъртането му.",
"ui.plane": "Plane",
"ui.plane_at_angle": "Plane at Angle",
"ui.plugins": "Plugins",
+6 -1
View File
@@ -698,6 +698,7 @@
"Value": "Vrijednost",
"Variable Radius": "Promjenljivi poluprečnik",
"Velocity": "Brzina",
"Vertical": "Vertikalno",
"Vertices": "Vrhovi",
"View navigator": "Navigator prikaza",
"Volume": "Zapremina",
@@ -3929,6 +3930,10 @@
"sketch_text.path_clear": "Skini tekst s njegove krive",
"sketch_text.path_hint": "Kriva skice koju tekst prati: kliknite ovdje, a zatim krivu",
"sketch_text.use_font_file": "Koristi datoteku fonta {path}",
"sketch_text.valign_baseline": "Osnovna linija",
"sketch_text.valign_bottom": "Dno",
"sketch_text.valign_middle": "Sredina",
"sketch_text.valign_top": "Vrh",
"solid": "puno",
"status.editing": "Uređivanje: {name}",
"status.navigation": "Mapiranje miša: {mapping}",
@@ -4902,7 +4907,7 @@
"ui.pitch": "Korak",
"ui.placement": "Postavljanje",
"ui.placement_handles": "Ručice za postavljanje",
"ui.placement_handles_tip": "Ručice na pregledu oslonca, ispusta ili škljocajućeg spoja: povucite oznaku da je pomjerite po modelu, okrenite je njenim prstenom",
"ui.placement_handles_tip": "Oznaka za povlačenje operacije po modelu i, gdje se operacija može okretati, prsten za njeno okretanje.",
"ui.plane": "Ravan",
"ui.plane_at_angle": "Ravan pod uglom",
"ui.plugins": "Proširenja",
+197 -10
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "Arrossegueu per moure el forat; feu clic per treure'l",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "Arrossegueu per moure el recolzament pel model. S'ajusta als punts del bocet de la cara.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "Arrossegueu per moure l'encaix a pressió pel model. S'ajusta als punts del bocet de la cara.",
"Drag to place it on another face.": "Arrossegueu-lo per col·locar-lo en una altra cara.",
"Drag to point the catch in another direction.": "Arrossegueu per orientar el retén en una altra direcció.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "Arrossegueu per girar el recolzament de 5° en 5°. Manteniu Alt o Ctrl per girar-lo lliurement.",
"Drive Joint": "Accionar la unió",
@@ -513,6 +514,7 @@
"Offset Y": "Desplaçament Y",
"Offset Z": "Desplaçament Z",
"On your computer": "Al vostre equip",
"One more stretch of the picked edge, each with its own angle, height and turns": "Un tram més de l'aresta triada, cadascun amb el seu angle, altura i girs",
"Opacity": "Opacitat",
"Open GitHub": "Obrir GitHub",
"Open GitHub draft": "Obrir l'esborrany de GitHub",
@@ -634,6 +636,7 @@
"Remove the track": "Eliminar la pista",
"Remove this bend": "Treure aquest plegat",
"Remove this point": "Eliminar aquest punt",
"Remove this segment": "Eliminar aquest segment",
"Rename Feature": "Canviar el nom de l'operació",
"Rename Folder": "Canviar el nom de la carpeta",
"Render Stage": "Escenari de renderitzat",
@@ -723,6 +726,7 @@
"Section position": "Posició de la secció",
"Sections": "Seccions",
"Sections (one sketch each)": "Seccions (un bocet cadascuna)",
"Segments": "Segments",
"Select Features": "Seleccionar les operacions",
"Select Other": "Seleccionar-ne un altre",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Seleccionar-ne un altre: manteniu el botó esquerre quiet sobre el model (o feu clic amb el botó dret › Seleccionar-ne un altre…) per llistar tot el que hi ha sota el punter; torneu a fer clic al mateix lloc per seleccionar el següent element. Feu doble clic amb el botó central per tornar a Inici (Preferències › Navegació).",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "L'espaiat ha de ser un nombre diferent de zero",
"Specialise": "Especialitzar",
"Speed": "Velocitat",
"Split Edge": "Dividir aresta",
"Splitting tool": "Eina de divisió",
"Square": "Quadrat",
"Stainless Steel": "Acer inoxidable",
@@ -885,6 +890,7 @@
"Variable Radius": "Radi variable",
"Variable radius": "Radi variable",
"Velocity": "Velocitat",
"Vertical": "Vertical",
"Vertices": "Vèrtexs",
"View": "Vista",
"View navigator": "Navegador de vistes",
@@ -931,13 +937,20 @@
"ai.http.confirm": "Permetre per a aquest servei",
"ai.http.warning": "La clau de l'API i la conversa s'enviaran sense xifrar. Qualsevol persona amb accés a la xarxa les pot llegir o canviar. Feu-ho servir només en una xarxa de confiança.",
"ai.prefs.allow_control": "Permetre que es connectin agents d'IA",
"ai.prefs.allow_control_note": "Un canal local (MCP). No surt res d'aquest ordinador.\n\nObre un canal de control només en aquest equip (127.0.0.1, port 27878 o el següent lliure). El programa que es connecti també ha de presentar un token secret que només pot llegir el vostre compte d'usuari, generat de nou a cada arrencada. S'aplica la propera vegada que s'iniciï SolidCraft. Desactivat: no s'escolta res tret que inicieu SolidCraft amb --control.",
"ai.prefs.allow_control_note": "Un canal local (MCP). No surt res d'aquest ordinador.\n\nObre un canal de control només en aquest equip (127.0.0.1, al port de sota; 27878 pren el següent lliure quan està en ús). El programa que es connecti també ha de presentar un token secret que només pot llegir el vostre compte d'usuari, generat de nou a cada arrencada. S'aplica a l'instant. Desactivat: no s'escolta res tret que inicieu SolidCraft amb --control.",
"ai.prefs.availability": "Disponibilitat",
"ai.prefs.background_commands": "Executar les ordres de l'agent en segon pla",
"ai.prefs.connect_apps": "Posar SolidCraft a disposició de les aplicacions d'IA d'aquest equip",
"ai.prefs.connect_apps_note": "Desactivat: treu les entrades que havia afegit.\n\nEn iniciar SolidCraft, l'afegeix com a servidor MCP a les aplicacions d'IA que trobi en aquest equip (OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code), perquè un agent el pugui fer servir sense configurar res. Només s'afegeix l'entrada solidcraft o se n'actualitza el camí; una entrada que hàgiu canviat es deixa intacta, i el fitxer es copia abans. Desactivat: s'eliminen les entrades que havia afegit. Ajuda › Connectar assistents d'IA… ho fa a mà.",
"ai.prefs.connect_at_start": "Connectar el darrer agent en iniciar",
"ai.prefs.connect_at_start_note": "Inicia en segon pla l'agent que vau connectar per última vegada (o el predeterminat) cada vegada que s'inicia SolidCraft, perquè estigui a punt per xatejar. No quan SolidCraft s'inicia amb --control. Si no es pot connectar, l'Assistent mostra Connexió fallida i un botó Reintentar.",
"ai.prefs.control_failed": "No s'ha pogut iniciar el canal de control: {error}",
"ai.prefs.control_from_launch": "Iniciat amb --control al port {port} per a aquesta execució. Els canvis d'aquí s'apliquen la propera vegada que SolidCraft s'iniciï sense --control.",
"ai.prefs.control_listening": "Escoltant a 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "No està escoltant",
"ai.prefs.control_port": "Port",
"ai.prefs.control_port_note": "El port al qual es connecten els agents d'IA en aquest equip (127.0.0.1). 27878 és el predeterminat: quan està en ús, es pren el següent lliure. Qualsevol altre port s'usa exactament. Apunteu el vostre client MCP al mateix port, per exemple solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "El port {port} està en ús per un altre programa (o una altra finestra de SolidCraft). Trieu un altre port.",
"ai.prefs.follow_camera": "Girar la càmera cap als bocets",
"ai.prefs.follow_camera_off": "El seguiment automàtic de la càmera està desactivat.",
"ai.prefs.follow_camera_on": "La càmera gira cap als bocets que crea l'agent.",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "no en una cara de peça",
"browser.sketches_to_parts_part_missing": "la seva peça ha desaparegut",
"browser.sketches_to_parts_result": "S'han mogut {moved} bocets a la peça on són; {stayed} s'han quedat: {why}",
"browser.straighten_angle": "Direcció de l'aresta",
"browser.straighten_choose": "Trieu Horitzontal, Vertical o Angle per a l'aresta i premeu Redreçar.",
"browser.straighten_click_a": "Feu clic a la imatge en un extrem d'una aresta que hagi de quedar recta, o escriviu-ne les coordenades.",
"browser.straighten_click_b": "Feu clic a l'altre extrem de l'aresta, o escriviu-ne les coordenades.",
"browser.straighten_horizontal": "Horitzontal",
"browser.straighten_title": "Redreçar: {name}",
"browser.straighten_vertical": "Vertical",
"browser.units": "Unitats: {units}",
"cam.flat": "Cara plana",
"cam.follower": "Seguidor",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "Agafar l'aparença",
"cmd.appearance_replace": "Substituir l'aparença",
"cmd.assembly_bom": "Llista de materials",
"cmd.assembly_constraint_create": "Restringir",
"cmd.assembly_constraint_edit": "Editar la restricció",
"cmd.assembly_mass_properties": "Propietats de massa de l'ensamblatge",
"cmd.body.print_face": "Cara d'impressió",
"cmd.body_rename": "Canviar el nom del cos",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "Eliminar el llenç",
"cmd.canvas_edit": "Editar el llenç",
"cmd.canvas_insert": "Llenç",
"cmd.canvas_straighten": "Redreçar el llenç",
"cmd.canvas_to_sketch": "Llenç a bocet",
"cmd.component_activate": "Activar el component",
"cmd.component_break_link": "Trencar el vincle",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "Regla de configuració",
"cmd.config_rules": "Regles de configuració",
"cmd.config_table": "Mostrar la taula de configuracions",
"cmd.construct.axis": "Eix",
"cmd.construct.plane": "Pla",
"cmd.construct.plane.axis_point": "Pla per eix i punt",
"cmd.construct.point": "Punt",
"cmd.construct_axis_edge": "Eix per una aresta",
"cmd.construct_axis_normal_to_face": "Eix perpendicular a una cara",
"cmd.construct_axis_through_cylinder": "Eix per un cilindre, con o tor",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "Desar com a malla",
"cmd.file_send_to_slicer": "Enviar al laminador",
"cmd.file_slicers": "Laminadors instal·lats",
"cmd.frame_end_cap": "Tapa d'extrem",
"cmd.frame_member": "Element estructural",
"cmd.frame_profile_insert": "Inserir un perfil",
"cmd.frame_profile_list": "Biblioteca de perfils",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "Anàlisi d'isocorbes",
"cmd.inspect_minimum_radius": "Anàlisi de radi mínim",
"cmd.inspect_parameter_sweep": "Escombrat de paràmetres",
"cmd.inspect_parameter_variants": "Comparar variants de paràmetres",
"cmd.inspect_silhouette": "Silueta",
"cmd.inspect_zebra": "Anàlisi de franges de zebra",
"cmd.joint_as_built": "Unió segons la posició actual",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "Traça del moviment",
"cmd.motion_trace_edit": "Editar la traça del moviment",
"cmd.motion_trace_keep": "Conservar la traça del moviment",
"cmd.note_add": "Afegir una nota",
"cmd.note_delete": "Eliminar la nota",
"cmd.note_list": "Llistar les notes",
"cmd.note_update": "Editar la nota",
"cmd.occurrence_align": "Alinear la instància",
"cmd.occurrence_copy": "Enganxar (instància)",
"cmd.occurrence_drag": "Arrossegar la instància",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "Renderitzar la imatge",
"cmd.render_status": "Progrés del renderitzat",
"cmd.select_clear": "Esborrar la selecció",
"cmd.selection_get": "Obtenir la selecció",
"cmd.settings_profile_apply": "Aplicar el perfil d'ajustos",
"cmd.settings_profile_delete": "Eliminar el perfil d'ajustos",
"cmd.settings_profile_export": "Exportar el perfil d'ajustos",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "Suprimir l'operació",
"cmd.ui.assistant": "Alternar l'Assistent",
"cmd.ui.palette": "Cercar ordres",
"cmd.ui.toggle_visibility": "Mostrar/amagar la selecció",
"cmd.view.navigator": "Navegador de vistes personalitzat",
"cmd.view.render_browser": "Explorador de render",
"cmd.view.render_dock": "Moure l'acoblament del render",
@@ -1567,6 +1601,7 @@
"color.step_down": "Baixar un pas",
"color.step_up": "Pujar un pas",
"color.value": "Valor, la brillantor (percentatge)",
"component.error.ambiguous_name": "Diversos components es diuen `{name}`. Feu servir un ID numèric de component: {ids}.",
"config.column_filter_empty": "No hi ha columnes coincidents",
"config.rule_parameter_columns": "Només es llisten els paràmetres amb una columna a la taula. Afegiu-ne una amb Afegir una columna (+) per fer-la servir aquí.",
"config.rule_suppression_columns": "Només es llisten les operacions amb una columna Suprimir a la taula. Afegiu-ne una amb Afegir una columna (+) per controlar-la aquí.",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: la referència `{reference}` ja no existeix tal com es va triar; torneu-la a seleccionar",
"dialog.bodies_count": "{count} cossos",
"dialog.clearance_invalid": "la folgança ha de ser una longitud de 0 o més",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "Calcular",
"dialog.compute_again": "Calcular de nou",
"dialog.computing": "Calculant… {seconds} s",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "Només s'avança amb un nombre; una expressió es queda tal com s'escriu",
"dialog.dimension_step_up": "Pujar {step}",
"dialog.edit_title": "EDITAR {title}",
"dialog.hole_held_off_its_line": "L'aresta de referència manté aquest forat sobre una línia que surt de la cara abans del punt triat. Trieu on la línia travessa la cara, o traieu l'aresta per moure el forat lliurement.",
"dialog.no_shown_body": "No hi ha cap cos mostrat per canviar: mostreu-ne un o trieu Cos nou",
"dialog.pattern_sketch_not_object": "Trieu cossos o operacions: un bocet no és cap de les dues coses. Repetiu les seves corbes amb el Patró o la Simetria del propi bocet, o extruïu-lo primer.",
"dialog.primitive_point_tip": "Un punt que omple X, Y i Z: feu clic aquí i després feu clic en un vèrtex, una aresta o una cara del model, un punt d'un bocet o l'origen.",
"dialog.reference_edge_tip": "Una aresta recta de la cara triada per mesurar-hi la distància de sota: feu clic aquí i després feu clic a l'aresta.",
"dialog.right_click_pick": "Seleccioneu {input} primer",
"dialog.select": "↖ Seleccionar",
"dialog.selected_count": "↖ {count} seleccionats",
"dialog.selection_constraint": "Restricció {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "{name} ha canviat al disc",
"document.changed_on_disk_detail": "Un altre programa o un altre equip ha modificat {name} des que el vau obrir o desar per última vegada. Sobreescriure substitueix aquests canvis pels vostres; Desar una còpia conserva tots dos.",
"document.copy_name": "Còpia de {name}",
"document.discard_row": "Descartar",
"document.finish_save_prompt": "Acabeu de respondre l'avís de desar abans d'obrir un altre disseny.",
"document.newer_file": "Desat amb una versió més recent de SolidCraft (format {format}; aquesta versió llegeix fins a {reads}). Si falta alguna cosa, actualitzeu.",
"document.newer_file_change": "Desat amb una versió més recent de SolidCraft (format {format} amb `{change}`, que aquesta versió no coneix). Si falta alguna cosa, actualitzeu.",
"document.newer_file_not_read": "No llegit: {what}. En desar es conserva.",
"document.not_saved_yet": "Encara sense desar",
"document.open_anyway": "Obrir de tota manera",
"document.open_elsewhere": "{name} ja està obert",
"document.open_elsewhere_detail": "{name} està obert a SolidCraft {app} a {who}, obert {when}. Si deseu tots dos, un de vosaltres perdrà la feina. Obriu-lo en només lectura per veure'l sense sobreescriure'l.",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "Aquest disseny s'ha obert en només lectura: deseu-lo com a fitxer nou",
"document.save_changes": "Voleu desar els canvis de {name}?",
"document.save_copy": "Desar una còpia…",
"document.save_many": "Voleu desar els canvis de {n} dissenys?",
"document.save_row": "Desar",
"document.save_selected": "Desar els seleccionats",
"document.tab_unsaved_changes": "Canvis sense desar",
"document.unsaved_changes": "{name} té canvis sense desar. Si no els deseu, es perdran.",
"drive.rigid": "{joint} és una unió rígida: manté les seves peces quietes, així que no té res a accionar. Per deixar-les moure, canvieu-ne el tipus a Editar la unió: Revolució per girar, Lliscador per lliscar, Cilíndrica per totes dues.",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "Tolerància de corba",
"dxf.tolerance_help": "Només cossos visibles i bocets mostrats. Les corbes fan servir segments rectes. Una tolerància més petita dóna corbes més fines i consumeix més temps i memòria.",
"each rail's curves must be in one sketch": "les corbes de cada guia han de ser en un sol bocet",
"error.end_cap_faces": "Trieu almenys una cara d'extrem oberta d'un element estructural",
"error.end_cap_unresolved": "L'extrem {ends} d'aquesta tapa ja no és al model. Torneu a triar les cares d'extrem",
"feature computation ended without a result": "el càlcul de l'operació s'ha acabat sense resultat",
"file.open.drawing_filter": "Dissenys, fitxers CAD, malles i dibuixos",
"file.open.portal_fallback.no_portal_service": "El selector de fitxers que s'ha obert no és el propi de l'escriptori: el servei del portal de l'escriptori no està disponible.",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "Inserint la geometria",
"file_load.link_item": "{name} ({done} de {total})",
"file_load.opened": "S'ha obert {name}",
"file_load.opened_behind": "{name} s'ha obert en una pestanya nova",
"file_load.opened_in_tab": "S'ha obert {name} en una pestanya nova",
"file_load.opening": "Obrint el disseny",
"file_load.preparing_thumbnail": "Preparant la miniatura…",
@@ -1725,11 +1772,13 @@
"help.config.table": "Mostra la taula de configuració: una fila per variant, una columna per paràmetre o operació, i si el disseny encara coincideix amb la fila activa. Feu-ho servir per revisar les variants d'un disseny.",
"help.connect_note": "Reinicieu cada assistent perquè carregui el servidor de SolidCraft. Cada fitxer s'ha desat com a .bak abans de modificar-lo.",
"help.connect_title": "Connectar assistents d'IA",
"help.construct.axis": "Crea un eix de construcció amb el mètode que demanin les vostres seleccions: al llarg d'una aresta o línia, per un forat o una cara rodona, on es troben dos plans, per dos punts, o perpendicular a una cara per un punt. Feu-lo servir quan conegueu les referències i no el mètode.",
"help.construct.axis.edge": "Crea un eix de construcció al llarg d'una aresta recta o una línia de bocet. Feu-lo servir com a eix per a una revolució, un patró circular o una unió.",
"help.construct.axis.normal_to_face": "Crea un eix de construcció per un punt, perpendicular a una cara. Feu-lo servir com a eix que surt recte d'una superfície.",
"help.construct.axis.through_cylinder": "Crea un eix de construcció pel centre d'una cara de cilindre, con o tor, o una aresta circular. Feu-lo servir per girar o fer un patró d'operacions al voltant d'una peça rodona.",
"help.construct.axis.two_planes": "Crea un eix de construcció on es troben dos plans o cares planes. Feu-lo servir quan l'eix que necessiteu és la línia entre dues cares.",
"help.construct.axis.two_points": "Crea un eix de construcció per dos punts, vèrtexs o punts de bocet. Feu-lo servir per a un eix que va entre dues posicions conegudes.",
"help.construct.plane": "Crea un pla de construcció amb el mètode que demanin les vostres seleccions: desplaçat respecte d'un pla, per un punt, entre dos plans, per línies o punts, tangent a una cara corba, o perpendicular a una trajectòria. Feu-lo servir quan conegueu les referències i no el mètode.",
"help.construct.plane.along_path": "Crea un pla de construcció perpendicular a una aresta o corba, en una posició al llarg seu. Feu-lo servir per bocetar un perfil per a un escombrat o una secció d'una trajectòria.",
"help.construct.plane.at_angle": "Crea un pla de construcció girat un angle des d'un pla o cara, al voltant d'un eix o aresta. Activeu «Fer servir només la direcció de l'eix» per projectar l'eix sobre la base i pivotar al voltant d'un punt d'aquest pla (l'origen de la base quan no se'n tria cap). Feu-lo servir per a bocets inclinats, com un suport angular.",
"help.construct.plane.axis_point": "Crea un pla de construcció que conté un eix i un punt fora d'aquest eix. Trieu un origen o eix de construcció, una aresta recta o línia de bocet, i després un vèrtex, punt de bocet o punt de construcció. Un punt a l'eix no pot definir un pla únic.",
@@ -1739,6 +1788,7 @@
"help.construct.plane.tangent": "Crea un pla de construcció que toca un cilindre, con, esfera o tor en un punt. Feu-lo servir per bocetar al costat d'una peça rodona.",
"help.construct.plane.three_points": "Crea un pla de construcció per tres punts. Feu-lo servir per a un pla definit per posicions del model, com tres cantonades.",
"help.construct.plane.two_edges": "Crea un pla de construcció per dues arestes rectes o línies que són en un mateix pla. Feu-lo servir per a un pla a través d'una peça, com per dues arestes oposades.",
"help.construct.point": "Crea un punt de construcció amb el mètode que demanin les vostres seleccions: en un vèrtex, al centre d'un cercle o una esfera, al llarg d'una aresta, on es troben dues línies o tres plans, o on una línia travessa un pla. Feu-lo servir quan conegueu les referències i no el mètode.",
"help.construct.point.along_path": "Crea un punt de construcció en una posició al llarg d'una aresta o corba. Feu-lo servir com a referència a mig camí d'una trajectòria.",
"help.construct.point.center": "Crea un punt de construcció al centre d'una aresta circular, cercle o arc de bocet, esfera o tor. Feu-lo servir com a referència per a forats, eixos i unions.",
"help.construct.point.edge_plane": "Crea un punt de construcció on una aresta o línia travessa un pla o cara plana. Feu-lo servir per marcar on una trajectòria creua un pla.",
@@ -1764,6 +1814,7 @@
"help.file.send_to_slicer": "Desa els cossos seleccionats com a fitxer 3MF i obre'l al laminador que trieu. Feu-ho servir per passar del model a la impressió en un sol pas.",
"help.font_details": "La interfície fa servir les fonts integrades d'egui (Ubuntu Light i Hack, sota la Ubuntu Font Licence i la llicència MIT/Bitstream Vera; Noto Emoji i la font d'icones emoji, sota l'OFL i MIT). El text dels bocets fa servir Liberation Sans (SIL OFL 1.1). El paquet opcional de fonts de The Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), no s'inclou a les compilacions de SolidCraft.",
"help.fonts": "Fonts",
"help.frame.end_cap": "Tanca els extrems oberts dels elements estructurals amb plaques amb la forma del contorn del perfil. Feu-lo servir per segellar tubs, angulars i bigues, a sobre de l'extrem o encastat-hi.",
"help.frame.member": "Col·loca un perfil, com un tub o una extrusió d'alumini, al llarg de les línies d'un bocet d'estructura, un element per línia. Feu-ho servir per construir bastiments, prestatges i estructures soldades.",
"help.inspect.accessibility": "Coloreja les cares que una eina pot assolir des d'una direcció i les que no. Feu-ho servir per comprovar una peça per a mecanitzat o motlle des d'aquell costat.",
"help.inspect.center_of_mass": "Mostra el centre de masses dels cossos, cadascun per separat i tots junts, amb densitat uniforme. Feu-ho servir per comprovar l'equilibri i on bolcarà una peça.",
@@ -1890,13 +1941,13 @@
"help.sketch.construction_line": "Crea una línia de construcció infinita que passa per dos punts. Feu-la servir per estructurar un bocet sense partir perfils.",
"help.sketch.construction_line.angle": "Crea una línia de construcció infinita amb un angle respecte de l'eix X del bocet. Trieu el punt i escriviu l'angle, o trieu-ne la direcció.",
"help.sketch.construction_line.bisector": "Trieu dues línies rectes del bocet que es tallin i després una de les dues bisectrius de l'angle. El resultat segueix les seves línies d'origen.",
"help.sketch.construction_line.horizontal": "Crea una línia de construcció horitzontal infinita que passa per un punt. La seva restricció horitzontal segueix les edicions posteriors.",
"help.sketch.construction_line.parallel": "Trieu una línia recta del bocet i col·loqueu una línia de construcció paral·lela infinita. Feu clic amb el botó dret per triar una altra referència.",
"help.sketch.construction_line.horizontal": "Crea una línia de construcció horitzontal infinita que passi per un punt, o escriviu-ne la distància a l'eix X del bocet. Una distància escrita es converteix en una cota controladora. La seva restricció horitzontal segueix les edicions posteriors.",
"help.sketch.construction_line.parallel": "Trieu una línia recta de bocet i després col·loqueu una línia de construcció paral·lela infinita o escriviu-ne el desplaçament. Un desplaçament escrit es converteix en una distància controladora. Feu clic amb el botó dret per triar una altra referència.",
"help.sketch.construction_line.perpendicular": "Trieu una línia recta del bocet i col·loqueu una línia de construcció perpendicular infinita. Feu clic amb el botó dret per triar una altra referència.",
"help.sketch.construction_line.tangent_at": "Crea una tangent en un punt d'un cercle o arc circular, o en un extrem d'una spline o cònica oberta. Trieu la corba i després el punt de contacte.",
"help.sketch.construction_line.tangent_external": "Trieu un cercle o arc circular, després un punt exterior i una solució de tangent. Les previsualitzacions només mostren contactes a l'arc dibuixat.",
"help.sketch.construction_line.tangent_two": "Trieu dos cercles o arcs circulars i després una tangent comuna a la previsualització. Els contactes han de ser a les corbes dibuixades.",
"help.sketch.construction_line.vertical": "Crea una línia de construcció vertical infinita que passa per un punt. La seva restricció vertical segueix les edicions posteriors.",
"help.sketch.construction_line.vertical": "Crea una línia de construcció vertical infinita que passi per un punt, o escriviu-ne la distància a l'eix Y del bocet. Una distància escrita es converteix en una cota controladora. La seva restricció vertical segueix les edicions posteriors.",
"help.sketch.copy": "Copia les corbes i punts de bocet seleccionats, juntament amb les restriccions i cotes que hi ha entre ells. Enganxeu-los en aquest bocet o en un altre.",
"help.sketch.create": "Inicia un bocet 2D nou en un pla o en una cara plana del model. Cada extrusió, revolució i escombrat comença amb un bocet.",
"help.sketch.cut": "Copia la geometria de bocet seleccionada i l'esborra del bocet, en un sol pas de desfer. Enganxeu-la en un altre lloc d'aquest bocet o en un altre.",
@@ -2240,6 +2291,9 @@
"measure.at": "A",
"measure.item": "Element {number}",
"measure.line_to_centre": "Línia al centre",
"measure.perimeter": "Perímetre",
"measure.perimeter_inner": "Perímetre interior",
"measure.perimeter_outer": "Perímetre exterior",
"measure.quick_copied": "Mesura copiada",
"measure.quick_copy": "Feu clic per copiar la mesura",
"measure.quick_edges": "{count} arestes",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt+arrossegar esquerre desplaça, Majúscules+Alt+arrossegar esquerre fa zoom, Ctrl+arrossegar esquerre en un espai buit orbita",
"nav.inventor.help": "Arrossegar amb el botó central desplaça, Majúscules+central orbita, Ctrl+central fa zoom i arrossegar amb el dret orbita",
"nav.maya.help": "Alt+arrossegar esquerre orbita, Alt+arrossegar central desplaça, Alt+arrossegar dret fa zoom; arrossegar central també desplaça",
"nav.maya_horizontal_zoom.help": "Alt+arrossegar amb el botó dret: cap a la dreta apropa, cap a l'esquerra allunya. Desactiveu-ho per tornar al zoom arrossegant en vertical.",
"nav.maya_horizontal_zoom.label": "Maya: zoom arrossegant en horitzontal",
"nav.nx.help": "Arrossegar amb el botó central orbita, Majúscules+central desplaça (central+dret de NX), Ctrl+central fa zoom (central+esquerre de NX); arrossegar amb el dret deixa la càmera quieta",
"nav.openscad.help": "Arrossegar amb el botó esquerre en un espai buit orbita, Majúscules+esquerre selecciona amb un rectangle i arrossegar geometria del bocet l'edita; arrossegar amb el dret o el central desplaça, i Majúscules+dret o Majúscules+central fa zoom",
"nav.orbit_cursor_wrap.help": "Un arrossegament d'òrbita que arriba a la vora de la vista mou el cursor a la vora oposada i continua girant. Desactivat: l'arrossegament s'atura a la vora de la pantalla. No té efecte a Wayland ni al navegador.",
@@ -2411,6 +2467,16 @@
"not a move": "no és un moviment",
"not a number": "no és un nombre",
"open a sketch first": "obriu primer un bocet",
"operations.cancel": "Cancel·lar {name}",
"operations.cancelled": "{name} cancel·lat",
"operations.cancelling": "Cancel·lant…",
"operations.cannot_cancel": "{name} no es pot cancel·lar",
"operations.feature": "Operació",
"operations.feature_edit": "Editar l'operació",
"operations.meshing": "Carregant les peces",
"operations.queued": "A la cua",
"operations.stopped": "Cancel·lat",
"operations.waiting": "A punt",
"parameters.apply_live": "Aplicar cada canvi en sortir del camp",
"parameters.apply_live_tip": "Desactivat: els canvis esperen fins que premeu Aplicar o D'acord, i llavors el disseny es reconstrueix una sola vegada per a tots. Cancel·lar o Escape els descarta.",
"parameters.held": "{count} canvis esperant Aplicar",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "Colors de la vista 3D",
"prefs.appearance.viewport_logo": "Visor i logotip",
"prefs.applies_on_restart": "S'aplica en reiniciar",
"prefs.assemblies": "Ensamblatges",
"prefs.assistant": "Assistent",
"prefs.assistant_connecting": "Connectant",
"prefs.assistant_follow_help": "Els bocets Mirar cap a mouen la vista amb el punter.",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "Triar un fitxer de tipus de lletra…",
"prefs.click": "Clic",
"prefs.command_dialog_values": "Diàlegs d'ordres",
"prefs.constraint_glyph_size": "Mida dels glifs de restricció",
"prefs.constraint_glyph_size_note": "Com de grans es dibuixen els glifs de restricció i les seves lletres o icones en un bocet. El 100 % és la mida habitual; els glifs conserven aquesta mida en pantalla amb qualsevol zoom.",
"prefs.construct_menu_groups": "Agrupar les eines de Construir per tipus d'entitat",
"prefs.construct_menu_groups_help": "Mostra els encapçalaments Plans, Eixos i Punts. Desactivat, es manté l'ordre original del menú.",
"prefs.contact_shading": "Ombrejat de contacte suau",
"prefs.contact_shading_note": "Ombrejat suau on les peces s'acosten.",
"prefs.context_menu": "Menú contextual",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "Fitxers importats",
"prefs.design_tools.note": "Nota",
"prefs.design_tools.off": "Desactivat",
"prefs.design_tools.placement_group": "Repòs, Resalt, Encaix",
"prefs.design_tools.placement_group": "Operacions col·locades",
"prefs.design_tools.rows": "Files",
"prefs.devices": "Ratolí 3D",
"prefs.dialog_buttons": "Botons de diàleg",
"prefs.dialog_first_letter_buttons": "Els botons de diàleg responen a la seva primera lletra",
"prefs.dialog_first_letter_buttons_help": "Amb un diàleg obert, escriure la primera lletra de l'etiqueta d'un botó el prem: O per a OK, C per a Cancel·la. Una lletra que encaixa en dos botons no fa res, i un camp de text amb el focus conserva la pulsació. Desactivat: escriure no afecta els botons, com abans.",
"prefs.dialogs": "Diàlegs",
"prefs.dialogs_edge": "A la vora de la vista",
"prefs.dialogs_left_column": "A la columna esquerra",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "En una finestra",
"prefs.display": "Pantalla",
"prefs.edges": "Arestes i ombrejat",
"prefs.export": "Exportar",
"prefs.export_name": "Nom del fitxer d'exportació",
"prefs.export_name.body": "Nom del cos exportat (el primer quan n'hi ha diversos)",
"prefs.export_name.design": "Nom del disseny",
"prefs.export_name_hint": "p. ex., {design}-{body}",
"prefs.export_name_sample": "En exportar aquest disseny s'ofereix: {name}",
"prefs.export_name_tip": "El nom de fitxer que ofereixen Fitxer › Exportar i Desar com a malla. Se substitueixen aquests marcadors:\n{placeholders}\nUna propietat del disseny que no estigui definida s'omet. Deixeu el camp buit per oferir el nom del disseny o, en una malla, el del cos.",
"prefs.extend": "Extensions",
"prefs.extra_navigation": "Ctrl + arrossegar amb el botó esquerre sobre un espai buit orbita; manteniu l'Espai per desplaçar.",
"prefs.extrude_arrow_face_stops": "La fletxa d'extrusió s'atura a les cares",
"prefs.extrude_arrow_face_stops_note": "En arrossegar la fletxa de distància d'Extruir, s'atura a les cares planes paral·leles al perfil, com el costat oposat d'un bloc que s'està tallant, i ressegueix la cara. Desactivat: la fletxa només es mou a passos rodons.",
"prefs.extrude_view_isometric": "Girar la vista a isomètrica en obrir Extruir",
"prefs.extrude_view_return": "Tornar a la vista anterior en tancar Extruir",
"prefs.file_operations_wait": "Esperar que s'obrin els fitxers",
"prefs.file_operations_wait_note": "Mentre s'obre o s'insereix un fitxer, o es tornen a llegir els vincles, el disseny espera darrere una targeta amb el progrés del fitxer i Cancel·la. Desactivat: el fitxer apareix al panell d'operacions i podeu seguir treballant; una inserció s'aplica quan acabeu el que esteu fent, i un fitxer obert mentrestant va a una pestanya nova.",
"prefs.fillet_legacy_radius": "Usar el radi predeterminat anterior d'Arrodoniment de sòlid",
"prefs.fillet_legacy_radius.help": "Desactivat de manera predeterminada. Activat, un nou Arrodoniment de sòlid s'obre amb el número 2 llegit en les unitats del disseny («2 in» en un disseny en polzades), com abans; desactivat, s'obre amb el radi que porta l'eina, 2 mm, mostrat en les unitats del disseny («0.07874 in» en un disseny en polzades).",
"prefs.follows_os": "Segueix el sistema operatiu",
"prefs.font": "Tipus de lletra",
"prefs.font_fallback": "Els glifs que no té el tipus de lletra triat es prenen del tipus integrat, així cap etiqueta no mostra un requadre buit.",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "Desplaçar",
"prefs.gesture_zoom": "Zoom",
"prefs.graphics": "Gràfics",
"prefs.graphics_api": "API gràfica",
"prefs.graphics_api_auto": "Automàtica",
"prefs.graphics_api_help": "Trieu l'API gràfica que s'usa per obrir SolidCraft. Si el proper inici no pot obrir la finestra, es restaura la tria anterior.",
"prefs.graphics_api_override": "Una opció d'inici controla l'API gràfica. La tria desada s'aplicarà quan SolidCraft s'obri normalment.",
"prefs.graphics_api_restart_note": "S'aplica després de reiniciar. Els dissenys sense desar es gestionen abans de tancar.",
"prefs.graphics_api_restart_unavailable": "Reinicieu SolidCraft per aplicar l'API gràfica desada.",
"prefs.graphics_api_running": "Actual: {current}. Triada per al proper inici: {selected}.",
"prefs.graphics_api_save_failed": "No s'ha pogut desar la tria d'API gràfica: {error}",
"prefs.graphics_api_start_failed": "No s'ha pogut preparar l'API gràfica triada: {error}",
"prefs.graphics_api_start_reverted": "L'inici anterior amb {requested} no va obrir la finestra. SolidCraft ha restaurat {previous}.",
"prefs.graphics_api_unavailable": "La selecció de l'API gràfica està disponible a l'aplicació d'escriptori.",
"prefs.graphics_card": "Targeta gràfica",
"prefs.graphics_card_auto": "Automàtica",
"prefs.graphics_card_missing": "La targeta gràfica desada no està disponible; s'usa Automàtica.",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "En ordre",
"prefs.history_sketches_note": "Amb Bocets a Sota la seva operació, l'historial de l'esquerra llista cada bocet un nivell endins, sota la primera operació construïda a partir d'ell, sempre que hi hagi prou amplada per als noms. La línia de temps de baix manté sempre l'ordre de creació.",
"prefs.history_sketches_under_feature": "Sota la seva operació",
"prefs.history_steps_component": "Passos de l'historial per component",
"prefs.history_steps_component_note": "Amb un component actiu o seleccionat, els controls de l'Historial recorren les operacions d'aquest component, tal com les mostra l'Historial de baix. Desactivat: recorren totes les operacions del disseny. L'Historial de l'esquerra o sota el navegador sempre recorre totes les operacions.",
"prefs.hold_stop_snapping": "Mantenir premut per aturar l'ajust",
"prefs.home_fit_size": "Mida d'Inici i Ajustar",
"prefs.home_fit_size_note": "Quant de la vista omple el model quan Inici, Ajustar, un disseny obert o un canvi de vista del navegador l'enquadren, tant si l'ajust de sota està activat com si no. 100 %: omple la vista entre els panells, la brúixola i la barra de navegació.",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "Les dues fletxes corbes a la cantonada del cub giren la vista dins del pla de la pantalla. Activades: la fletxa horària gira en sentit antihorari i l'antihorària gira en sentit horari. Desactivades: cada fletxa gira la vista cap on es corba.",
"prefs.invert_navigator_arrows": "Invertir les fletxes de rotació del cub de vista",
"prefs.invert_navigator_arrows_note": "Les fletxes al voltant del cub orbiten la càmera cap on apunten, com a Fusion i Inventor: la fletxa de l'esquerra apunta a la dreta i gira la càmera a la dreta. Desactivades: una fletxa gira el cub cap al costat on és, així la fletxa de l'esquerra gira la càmera a l'esquerra. Les fletxes de gir corbes no en queden afectades.",
"prefs.joint_drag_trackball": "Girar les peces d'una unió de ròtula com un trackball en arrossegar-les",
"prefs.joint_drag_trackball_help": "Arrossegar una peça que subjecta una unió de ròtula la gira amb el gir més petit possible al voltant de la unió, com si rodés una bola de la mida de la peça. Desactivat: el punt que heu agafat segueix exactament el punter, i la peça també pot girar sobre ell.",
"prefs.keep_unsaved_also_asks": "Continuar preguntant quan es tanca la pestanya",
"prefs.keep_unsaved_also_asks_tip": "Amb això desactivat, la pestanya es tanca sense la finestra del navegador un cop la còpia de cada disseny sense desar està al dia.",
"prefs.keep_unsaved_in_browser": "Conservar la feina sense desar en aquest navegador",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "no en aquesta GPU",
"prefs.on": "Activat",
"prefs.opaque": "Opac",
"prefs.operations_panel": "Mostrar les operacions a la vista",
"prefs.operations_panel_note": "Les operacions llargues (obrir un fitxer, calcular una operació, una ordre de l'agent) es mostren a la cantonada inferior dreta de la vista amb el seu progrés i un botó per cancel·lar-les. Desactivat: un avís de «Calculant», com abans.",
"prefs.orbit_snap": "Manteniu el Majúscules mentre orbiteu per ajustar a un eix.",
"prefs.orientation": "Orientació",
"prefs.origin_plane_names": "Noms dels plans d'origen",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "Mostrar només les pestanyes de la cinta",
"prefs.ribbon_tabs_only_note": "La cinta es plega fins a la seva fila de pestanyes. En fer clic en una pestanya es mostren els seus panells sobre la vista fins que comença una ordre o el punter en surt. «Només les pestanyes de la cinta», a la pestanya Vista o amb la seva drecera, ho commuta.",
"prefs.right_click": "Clic dret",
"prefs.save_prompt_one_at_a_time": "Preguntar per cada disseny sense desar per separat en tancar-ne diversos",
"prefs.save_prompt_one_at_a_time_help": "Mostrar un avís de desar per cada disseny sense desar en lloc d'una llista combinada.",
"prefs.saving": "Inici i desament",
"prefs.scale_note": "També Ctrl + / Ctrl − a la finestra. Els botons fan 28 px al 100 %.",
"prefs.scale_text": "Escala i text",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "L'arc pel centre segueix el cursor",
"prefs.sketch.click_selects": "El clic selecciona",
"prefs.sketch.conflict_colour": "Color de conflicte",
"prefs.sketch.cursor_coordinates": "Mostrar les coordenades del cursor en un bocet",
"prefs.sketch.cursor_coordinates_note": "Al costat del punter, la seva X i Y des de l'origen del bocet, també sense cap eina en marxa. Desactivat: només mentre una eina col·loca un punt.",
"prefs.sketch.drawing": "Dibuix",
"prefs.sketch.ellipse_axes": "Dibuixar les el·lipses amb els seus eixos",
"prefs.sketch.ellipse_axes_note": "Els eixos major i menor com a línies de construcció, per poder acotar els semieixos i els eixos. Desactivat: només l'el·lipse, i D a sobre seu dóna el radi menor allà on es tiri el valor, dibuixat i etiquetat R com abans.",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "Cares i arestes",
"prefs.sketch.hide_glyphs": "Amagar els glifs en allunyar-se",
"prefs.sketch.marks": "Marques al bocet",
"prefs.sketch.max_points": "Bocet més gran",
"prefs.sketch.max_points_note": "El màxim de punts o corbes que admet un bocet: 20000 de manera predeterminada, com a molt 200000. Inserir SVG i Inserir DXF refusen un dibuix més gran. Un bocet gran es resol i es dibuixa més lentament.",
"prefs.sketch.max_points_unit": "punts",
"prefs.sketch.note": "Dibuix, ajust i selecció.",
"prefs.sketch.opening_closing": "Obertura i tancament",
"prefs.sketch.prefer_free_points": "Preferir punts mòbils quan se superposen",
"prefs.sketch.project_options": "Demanar primer les opcions de Projectar",
"prefs.sketch.recent_snap": "Ajustar on es creuen dues guies",
"prefs.sketch.select_3d_curve_points": "Seleccionar punts de corbes de bocet 3D",
"prefs.sketch.select_3d_curve_points_help": "Mostra i permet seleccionar punts de les corbes de bocet 3D dibuixades com a referències de construcció.",
"prefs.sketch.select_other_hidden": "Seleccionar-ne un altre arriba a la geometria oculta",
"prefs.sketch.shortcut_cycles_modes": "La drecera canvia de mode en tornar-la a prémer",
"prefs.sketch.shortcut_cycles_modes_tip": "Desactivat: torna a iniciar l'eina.",
"prefs.sketch.snap_to_visible_grid": "Ajustar als encreuaments visibles de la quadrícula",
"prefs.sketch.snapping_guides": "Ajust i guies",
"prefs.sketch.state_icons": "Icones d'estat",
"prefs.sketch.tracking_guides": "Guies de centre i punt mitjà",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "Bocet i selecció",
"prefs.sketch_selection_heading": "Bocet i selecció",
"prefs.sketch_selection_note": "Com s'ajusten els bocets i com seleccionen els clics.",
"prefs.sketch_snap_to_visible_grid_note": "Un punt d'un bocet s'ajusta als encreuaments de les línies que dibuixa la quadrícula quan el punter n'apunta un, i si no, a la retícula més fina entre ells. Desactivat: el punt s'ajusta només a la retícula més fina, com abans.",
"prefs.sketch_state_icons": "Icones dels bocets amb el color del seu estat",
"prefs.sketch_state_icons_note": "A l'historial i a l'explorador, la icona d'un bocet pren el color del seu estat (insuficientment restringit, completament restringit o en conflicte) i la seva informació en diu l'estat. Desactivat: tots els bocets tenen la mateixa icona.",
"prefs.sketch_tab_always": "Mantenir visible la pestanya Bocet",
@@ -3444,12 +3556,12 @@
"render.cpu_subsurface_denoise_reason": "La dispersió subsuperficial de CPU necessita la reducció de soroll desactivada. Es conserven els vostres ajustos.",
"render.cpu_subsurface_help": "La dispersió redirigeix la llum dins del vidre tancat. Les taxes positives necessiten il·luminació indirecta amb la reducció de soroll desactivada. La taxa és de col·lisions per mm; 0 no afegeix dispersió. Un biaix de fase positiu afavoreix les direccions cap endavant; un de negatiu, les cap enrere.",
"render.cpu_summary": "Ray tracing de CPU · reflexos · HDR · llums direccionals i puntuals",
"render.cpu_threads": "Processos de CPU",
"render.cpu_threads": "Workers de CPU",
"render.cpu_threads_auto": "Automàtic",
"render.cpu_threads_custom": "Personalitzat",
"render.cpu_threads_help": "Automàtic fa servir els processos de CPU disponibles. Un procés s'executa en sèrie. Més processos poden necessitar més memòria.",
"render.cpu_threads_help": "Automàtic fa servir els workers de CPU disponibles. Un worker s'executa en sèrie. Més workers poden necessitar més memòria.",
"render.cpu_threads_single": "Un",
"render.cpu_threads_web": "El renderitzat al navegador fa servir un procés cooperatiu. Es conserva l'elecció de processos desada per a l'escriptori.",
"render.cpu_threads_web": "El renderitzat al navegador fa servir un worker cooperatiu. Es conserva la tria de workers desada per a l'escriptori.",
"render.cpu_transparent_help": "El PNG transparent treu el fons i conserva la cobertura de les vores. L'opacitat del cos i de la cara ha de mantenir-se al 100 %.",
"render.cpu_volume_enable_path": "Activar la il·luminació indirecta",
"render.cpu_volume_enable_path_plan": "Ray tracing de CPU · profunditat {depth} · {spp} mostres/píxel · llavor {seed} · ombres traçades. Conserva l'atmosfera definida i el pressupost d'imatge.",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "el PBR opac requereix opacitat 1",
"render.error_physical_glass": "la recepta triada no és vidre físic",
"render.error_preview_device": "la vista prèvia del producte requereix un dispositiu instal·lat amb búfer de profunditat",
"render.error_product_placement": "col·locació de producte no vàlida",
"render.error_product_triangle": "triangle de producte no vàlid",
"render.error_provisional_identity": "identitat provisional de renderitzat o nombre de mostres no vàlida",
"render.error_quality_bounds": "la projecció de qualitat supera els límits natius",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "Torna-ho a provar",
"render.gpu_seed": "Llavor aleatòria",
"render.gpu_unavailable": "El path tracing de GPU encara no està a punt en aquest dispositiu.",
"render.graphics_api_restart_vulkan": "Reiniciar amb Vulkan",
"render.graphics_api_restart_warning": "Canviar l'API gràfica reinicia SolidCraft i us demana de desar els dissenys sense desar. Si la nova API no pot obrir la finestra, es restaura la tria anterior al proper inici.",
"render.graphics_api_settings": "Configuració gràfica",
"render.graphics_api_vulkan_required": "El path tracing a la GPU necessita Vulkan en aquesta sessió. Reinicieu amb Vulkan o seguiu amb un mètode d'imatge per CPU.",
"render.ground_apply": "Ajustar i desar el terra",
"render.ground_gap": "Espai lliure explícit",
"render.ground_linear_rgb": "Reflectància difusa · RGB lineal",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "Spline 3D: feu clic als punts d'ajust en 3D; clic dret o Esc per acabar",
"sketch.hint.trim": "Retallar: feu clic al tros de corba que voleu treure, o arrossegueu pels trossos que voleu treure",
"sketch.make_selection": "Convertir la selecció en {linetype}",
"sketch.move_released": "Mogut: s'han deixat anar {count} restriccions que el lligaven al que es queda ({names}).",
"sketch.move_released_one": "Mogut: s'ha deixat anar {count} restricció que el lligava al que es queda ({names}).",
"sketch.open_ends": "Oberts {count}",
"sketch.status_conflict": "restriccions en conflicte",
"sketch.status_fully_constrained": "totalment restringit",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "Treure el text de la seva corba",
"sketch_text.path_hint": "Corba del bocet que seguirà el text: feu clic aquí i després a la corba",
"sketch_text.use_font_file": "Fer servir el fitxer de font {path}",
"sketch_text.valign_baseline": "Línia base",
"sketch_text.valign_bottom": "Baix",
"sketch_text.valign_middle": "Mig",
"sketch_text.valign_top": "Dalt",
"solid": "sòlid",
"status.editing": "Editant {name}",
"status.navigation": "Assignació del ratolí: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "Permetre una vegada",
"ui.agent_chat_allowed": "Permès",
"ui.agent_chat_answered": "Resposta: {option}",
"ui.agent_chat_answered_in": "Respost en {time}",
"ui.agent_chat_approval": "Permetre que l'agent faci això?",
"ui.agent_chat_attach_selection": "Adjuntar la selecció",
"ui.agent_chat_attach_selection_tip": "Envia amb el missatge el que estigui seleccionat al model (cares, arestes, operacions, cossos) perquè l'agent sàpiga a què us referiu",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "Cossos",
"ui.agent_chat_ctx_elements": "Elements",
"ui.agent_chat_ctx_features": "Operacions",
"ui.agent_chat_ctx_gone": "Ja no és al disseny: s'ha canviat o eliminat.",
"ui.agent_chat_ctx_more": "+{n} més",
"ui.agent_chat_ctx_other": "Altres",
"ui.agent_chat_custom_heading": "Model personalitzat",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "Acoblar a la dreta",
"ui.agent_chat_drop_hint": "Deixeu anar per adjuntar-ho al proper missatge",
"ui.agent_chat_edit": "Editar",
"ui.agent_chat_ended_after": "Acabat després de {time}",
"ui.agent_chat_exited": "L'agent s'ha aturat.",
"ui.agent_chat_failed_start": "No s'ha pogut iniciar l'agent: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: un fitxer CAD s'importa al disseny, no es llegeix",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "{model} no pot usar les eines de SolidCraft, així que només pot xatejar. Trieu un model amb suport d'eines.",
"ui.agent_chat_model_rejected": "L'agent no ha acceptat {model}: {error}",
"ui.agent_chat_model_search": "Cercar models…",
"ui.agent_chat_model_search_or_id": "Cerqueu o escriviu qualsevol ID de model…",
"ui.agent_chat_model_tip": "El model que usa l'agent. La vostra tria es recorda per a aquest agent.",
"ui.agent_chat_models_failed": "No s'han pogut llistar els models: {error}",
"ui.agent_chat_models_heading": "Models disponibles",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "Imatge següent",
"ui.agent_chat_no_cli": "No s'ha trobat solidcraft-cli al costat de l'aplicació, així que l'agent no pot accedir al disseny.",
"ui.agent_chat_no_control": "El punt de connexió del xat de l'agent no s'ha iniciat, així que l'agent no pot accedir al disseny.",
"ui.agent_chat_no_design_hint": "L'agent s'executa sense les eines de SolidCraft, així que no pot llegir ni canviar el disseny: no s'ha trobat solidcraft-cli al costat de l'aplicació. Instal·leu SolidCraft amb solidcraft-cli al costat (a Windows, el MSI o el zip portàtil) o definiu SOLIDCRAFT_CLI amb la seva ruta, i torneu a connectar.",
"ui.agent_chat_no_images": "Aquest agent no admet imatges",
"ui.agent_chat_no_picture": "No hi ha cap imatge al porta-retalls",
"ui.agent_chat_no_tool_call": "El model no ha fet servir les eines de SolidCraft, així que el disseny no ha canviat. Trieu un model que admeti crides a eines; vegeu Models locals a la guia del xat de l'agent.",
@@ -5041,7 +5169,7 @@
"ui.agent_chat_permission": "L'agent demana executar: {title}",
"ui.agent_chat_pick": "Agent",
"ui.agent_chat_pick_context": "Triar context",
"ui.agent_chat_pick_context_tip": "Trieu cares, arestes, operacions i cossos del model perquè l'agent els miri i premeu D'acord",
"ui.agent_chat_pick_context_tip": "Trieu cares, arestes, operacions i cossos del model i premeu OK: s'afegeixen al missatge com una fitxa on és el cursor (escriure @ fa el mateix)",
"ui.agent_chat_placeholder": "Demaneu a l'agent que modifiqui el disseny…",
"ui.agent_chat_placeholder_busy": "Posa un missatge a la cua per quan l'agent acabi (Ctrl+Retorn: enviar ara)",
"ui.agent_chat_pop_out": "Obrir en una finestra pròpia, que podeu moure a una altra pantalla",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "Configurar un assistent",
"ui.agent_chat_side": "Costat del xat de l'agent",
"ui.agent_chat_signed_in": "sessió iniciada",
"ui.agent_chat_snap_none_found": "No s'ha trobat cap agent de codi. El paquet Snap està confinat, així que no pot veure ni iniciar els agents de codi instal·lats en aquest equip. Per usar-los, instal·leu SolidCraft des de l'AppImage o el paquet .deb o .rpm. Un agent que usa una API compatible amb OpenAI també funciona al paquet Snap: configureu-ne un amb Afegir agent.",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_state_auth": "Cal iniciar sessió",
"ui.agent_chat_state_busy": "Treballant…",
"ui.agent_chat_state_exited": "Agent aturat",
"ui.agent_chat_state_failed": "Connexió fallida",
"ui.agent_chat_state_no_design": "Sense accés al disseny",
"ui.agent_chat_state_off": "Sense connexió",
"ui.agent_chat_state_ready": "A punt",
"ui.agent_chat_state_starting": "Iniciant…",
"ui.agent_chat_stop": "Aturar",
"ui.agent_chat_stop_tip": "Aturar l'agent i tot el que hagi iniciat",
"ui.agent_chat_stop_turn_tip": "Atura l'agent (Esc). Els missatges a la cua es queden a la cua.",
"ui.agent_chat_thinking_for": "Pensant durant {time}",
"ui.agent_chat_tool_running_for": "en execució durant {time}",
"ui.agent_chat_tools_not_started": "L'agent s'executa sense les eines de SolidCraft, així que no pot llegir ni canviar el disseny: s'ha trobat solidcraft-cli, però les seves eines no s'han iniciat (l'error del xat explica per què). Torneu a connectar; si continua passant, reinstal·leu SolidCraft.",
"ui.agent_chat_transcript_assistant": "Assistent:",
"ui.agent_chat_transcript_user": "Usuari:",
"ui.agent_chat_turn_limit": "Canvis per missatge",
"ui.agent_chat_turn_unlimited": "Sense límit",
"ui.agent_chat_undo_changes": "Desfer aquests canvis",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "{count} cos",
"ui.browser_bodies_other": "{count} cossos",
"ui.browser_collapse": "Contraure l'explorador",
"ui.browser_collapse_below": "Contraure a sota",
"ui.browser_expand": "Expandir l'explorador",
"ui.browser_expand_below": "Expandir a sota",
"ui.browser_title": "Explorador",
"ui.calibrate": "Calibrar",
"ui.cancel": "Cancel·la",
@@ -5269,6 +5409,7 @@
"ui.collapse": "Contraure",
"ui.collinear": "Colineal",
"ui.colour_vision": "Visió del color",
"ui.colour_vision_bends": "Plecs",
"ui.colour_vision_deutan": "Deuteranòpsia",
"ui.colour_vision_deutan_tip": "Per a una percepció del verd feble o absent",
"ui.colour_vision_failed": "Fallit",
@@ -5298,14 +5439,24 @@
"ui.conic_curve": "Corba cònica",
"ui.constant": "Constant",
"ui.constraints_conflict": "Conflicte de restriccions",
"ui.construct_auto.chosen": "Triat a partir de les vostres seleccions. Trieu una altra referència, o traieu-ne una, per canviar el mètode.",
"ui.construct_auto.no_fit": "Trieu altres referències: cap mètode es pot construir amb aquestes.",
"ui.construct_auto.pick": "Trieu amb què construir-lo: el mètode es dedueix de les vostres seleccions.",
"ui.construct_auto.refs": "Referències",
"ui.construct_auto.select": "Seleccioneu primer les referències amb què construir",
"ui.construct_axes": "Eixos",
"ui.construct_planes": "Plans",
"ui.construct_points": "Punts",
"ui.construction": "Construcció",
"ui.construction.angle_hint": "Línia de construcció: feu clic en un punt i escriviu un angle o trieu una direcció",
"ui.construction.axis_hint": "Línia de construcció: feu clic en un punt o escriviu la seva distància a l'eix del bocet",
"ui.construction.bisector_hint": "Bisectriu: trieu dues línies rectes que es tallin i després la solució volguda",
"ui.construction.common_hint": "Tangent comuna: trieu dos cercles o arcs i després la solució volguda",
"ui.construction.contact_hint": "Tangent: trieu un cercle, arc o spline o cònica oberta i després el punt de contacte (corbes lliures: extrems)",
"ui.construction.external_hint": "Tangent: trieu un cercle o arc, un punt exterior i després la solució volguda",
"ui.construction.free_hint": "Línia de construcció: feu clic en dos punts; feu clic amb el botó dret per reiniciar",
"ui.construction.normal_needs_length": "Una línia infinita és sempre de construcció: escriviu una longitud per dibuixar una línia normal",
"ui.construction.parallel_hint": "Línia de construcció: trieu una línia recta i després feu clic o escriviu el desplaçament; feu clic amb el botó dret per canviar la referència",
"ui.construction.point_hint": "Línia de construcció: feu clic en el punt per on ha de passar",
"ui.construction.reference_hint": "Línia de construcció: trieu una línia recta i després un punt; feu clic amb el botó dret per canviar la referència",
"ui.construction.ribbon_label": "Línies X",
@@ -5448,6 +5599,17 @@
"ui.ellipse": "El·lipse",
"ui.emboss_wrap_note": "Els perfils de línies ortogonals tangents a un cilindre compatible s'embolcallen automàticament. Trieu una paret per triar un destí.",
"ui.end": "Fi",
"ui.end_cap.chamfer": "Xamfrà de cantonada",
"ui.end_cap.direction": "Direcció",
"ui.end_cap.faces": "Cares d'extrem",
"ui.end_cap.inset": "Reducció",
"ui.end_cap.inset_kind": "Reduir per",
"ui.end_cap.inset_ratio": "Proporció de reducció",
"ui.end_cap.inward": "Cap endins",
"ui.end_cap.length": "Longitud",
"ui.end_cap.outward": "Cap enfora",
"ui.end_cap.ratio": "Proporció de gruix",
"ui.end_cap_title": "TAPA D'EXTREM",
"ui.end_radius": "Radi final",
"ui.end_scale": "Escala final",
"ui.ends": "Extrems",
@@ -5468,7 +5630,10 @@
"ui.explode_needs_two_components": "La vista explosionada separa components, així que el disseny en necessita dos o més (Component nou, Inserir un disseny o Crear components a partir de cossos)",
"ui.exportDxf": "Exportar DXF…",
"ui.export_ellipsis_keymap": "Exportar…",
"ui.export_glb": "Exportar GLB",
"ui.export_keymap_tip": "Les tecles, els favorits de la cerca S i la barra d'eines, com a fitxer",
"ui.export_selects_only_body": "Seleccionar l'únic cos en exportar una malla",
"ui.export_selects_only_body_tip": "Exportar STL, Exportar 3MF i Enviar al laminador comencen amb el cos del disseny seleccionat quan només n'hi ha un.",
"ui.extend": "Estendre",
"ui.extent": "Extensió",
"ui.extent_type": "Tipus d'extensió",
@@ -5528,6 +5693,8 @@
"ui.finest": "Molt fina",
"ui.finish_sketch": "Acabar el bocet",
"ui.first_dimension_scales": "La primera cota escala el dibuix",
"ui.first_dimension_scales_about_origin": "Escalar respecte de l'origen del bocet",
"ui.first_dimension_scales_about_origin_tip": "Activat: el dibuix sempre creix o s'encongeix respecte de l'origen del bocet, així que una forma dibuixada lluny de l'origen es mou. Desactivat: un dibuix que res no lliga a l'origen s'escala respecte del seu propi centre i es queda on es va dibuixar.",
"ui.first_dimension_scales_tip": "Activat: la primera cota de longitud d'un bocet escala el dibuix que mesura, de manera que la seva forma no canvia. Desactivat: la cota només acota allò que mesura.",
"ui.fit": "Ajustar",
"ui.fix_unfix": "Fixar/alliberar",
@@ -5903,7 +6070,7 @@
"ui.pitch": "Inclinació",
"ui.placement": "Col·locació",
"ui.placement_handles": "Tiradors de col·locació",
"ui.placement_handles_tip": "Un marcador per arrossegar l'operació pel model i un anell per girar-la.",
"ui.placement_handles_tip": "Un marcador per arrossegar l'operació pel model i, on l'operació es pot girar, un anell per girar-la.",
"ui.plane": "Pla",
"ui.plane_at_angle": "Pla amb angle",
"ui.plugins": "Complements",
@@ -5950,6 +6117,7 @@
"ui.project_references_construction_note": "Projectar, Intersecar, Incloure geometria 3D i les arestes de cara d'un bocet nou sobre una cara creen geometria de construcció: referències sobre les quals dibuixar, excloses dels perfils. Continuen vinculades al model.",
"ui.properties": "Propietats",
"ui.properties.copy_matrix": "Copiar la matriu",
"ui.properties.copy_value": "Feu clic per copiar",
"ui.properties.first_moments": "Primers moments",
"ui.properties.inertia": "Moment d'inèrcia",
"ui.properties.inertia_note": "Respecte al centre de masses, en eixos globals (g·{unit}²)",
@@ -5962,6 +6130,7 @@
"ui.properties.measuring_failed": "El mesurament s'ha aturat abans d'acabar.",
"ui.properties.principal_axis": "Eix principal {number}",
"ui.properties.principal_moments": "Moments principals",
"ui.properties.value_copied": "Valor copiat",
"ui.pull_direction": "Direcció d'estirada",
"ui.quality": "Qualitat",
"ui.quantity": "Quantitat",
@@ -5982,11 +6151,14 @@
"ui.relink_design_changed": "L'ensamblatge ha canviat mentre trieu un origen. Torneu a iniciar Revincular l'origen.",
"ui.relink_done": "Origen revinculat a totes les instàncies.",
"ui.relink_not_linked": "Aquest component no està vinculat a cap disseny d'origen.",
"ui.relink_one_done": "Origen revinculat en aquesta instància.",
"ui.relink_select_one": "Seleccioneu primer un component vinculat o una de les seves instàncies.",
"ui.relink_source_all": "Revincular l'origen (totes les instàncies)…",
"ui.relink_source_one": "Revincular l'origen…",
"ui.removeFromQuickAccess": "Treure de l'accés ràpid",
"ui.removeFromToolbar": "Treure de la barra d'eines",
"ui.removeSection": "Treure la secció",
"ui.renameSelectedBodies": "Canviar el nom dels cossos seleccionats",
"ui.render": "Renderitzar",
"ui.renderer": "Motor de renderitzat",
"ui.repeat": "Repetir",
@@ -6017,6 +6189,8 @@
"ui.ribbon_pin_footer": "Les ordres fixades es mostren a la cinta. Passeu el punter per una fila per fixar-la o deixar-la de fixar.",
"ui.ribbon_workspace": "Espai de treball",
"ui.right": "Dreta",
"ui.right_click_confirms": "El botó dret confirma les entrades dels diàlegs",
"ui.right_click_confirms_tip": "Amb un diàleg obert, un clic amb el botó dret a la vista passa a la seva propera entrada buida, i a l'última executa OK",
"ui.save": "Desar",
"ui.save_as": "Desar com a",
"ui.save_mesh_no_slicer_open": "No s'ha trobat cap laminador: trieu Personalitzat… i trieu el vostre programa de laminatge.",
@@ -6076,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "Filtre de selecció",
"ui.sketch_keys_only": "Mantenir les tecles del model fora dels bocets",
"ui.sketch_keys_only_tip": "Mentre editeu un bocet, només s'executen les tecles de bocet i les que funcionen a tot arreu; una tecla de model com E o F no fa res, així una tecla perduda no pot tancar un bocet pesat.",
"ui.sketch_links_added_curve": "{command} ha afegit 1 corba al bocet.",
"ui.sketch_links_added_curves": "{command} ha afegit {count} corbes al bocet.",
"ui.sketch_links_added_curves_and_points": "{command} ha afegit {curves} i {points} al bocet.",
"ui.sketch_links_added_point": "{command} ha afegit 1 punt al bocet.",
"ui.sketch_links_added_points": "{command} ha afegit {count} punts al bocet.",
"ui.sketch_links_curve_count": "{count} corbes",
"ui.sketch_links_curve_count_one": "1 corba",
"ui.sketch_links_hidden": "El resultat s'amaga perquè {option} està desactivat a la paleta del bocet.",
"ui.sketch_links_point_count": "{count} punts",
"ui.sketch_links_point_count_one": "1 punt",
"ui.sketch_modifiers": "Modificadors del bocet",
"ui.sketch_project_geometry": "Geometria",
"ui.sketch_report.all_constrained": "Tot està totalment restringit.",
@@ -6115,6 +6299,7 @@
"ui.step_values": "Incrementar valors amb les fletxes i la roda",
"ui.step_values_tip": "En un camp de valor on esteu escrivint, Amunt/Avall canvien un nombre simple d'1 en 1 (Majúscules: 10, Alt: 0,1), i la roda del ratolí sobre el camp fa el mateix. Les expressions es deixen tal com s'escriuen.",
"ui.stitch_tolerance_hint": "estricta",
"ui.straighten": "Redreçar",
"ui.stretch": "Estirar",
"ui.supersampling": "Supermostreig (SSAA)",
"ui.supersampling_adaptive": "Només quan la vista està quieta",
@@ -6188,6 +6373,8 @@
"ui.view_angles_yaw": "Rumb",
"ui.view_angles_zero": "Posa {axis} a 0°",
"ui.view_centre": "Centre de la vista",
"ui.view_compass_tip": "Vista des de {axis}. Torneu-hi a fer clic per invertir-la. Arrossegueu per orbitar.",
"ui.view_compass_tip_snap": "Vista des de {axis}. Torneu-hi a fer clic per invertir-la. Arrossegueu per orbitar; manteniu Majúscules per ajustar.",
"ui.viewport_status_clear": "Desactivar {name}",
"ui.viewport_status_clear_hint": "Desactivar {name} · Esc",
"ui.viewport_status_edges": "{count} arestes",
+12 -2
View File
@@ -884,6 +884,7 @@
"Variable Radius": "Proměnný poloměr",
"Variable radius": "Proměnný poloměr",
"Velocity": "Rychlost",
"Vertical": "Svisle",
"Vertices": "Vrcholy",
"View": "Zobrazit",
"View navigator": "Navigátor pohledu",
@@ -1609,6 +1610,7 @@
"dialog.pattern_sketch_not_object": "Vyberte tělesa nebo prvky: náčrt není ani jedno. Opakujte jeho křivky vlastním nástrojem Pole nebo Zrcadlit v náčrtu, nebo jej nejprve vysuňte.",
"dialog.primitive_point_tip": "Bod, který vyplní X, Y a Z: klikněte sem a pak na vrchol, hranu nebo plochu modelu, bod náčrtu nebo počátek.",
"dialog.reference_edge_tip": "Přímá hrana vybrané plochy, od které se měří vzdálenost níže: klikněte sem a pak na hranu.",
"dialog.right_click_pick": "Nejprve vyberte {input}",
"dialog.select": "↖ Vybrat",
"dialog.selected_count": "↖ Vybráno: {count}",
"dialog.selection_constraint": "Vazba {id}",
@@ -2560,7 +2562,7 @@
"prefs.design_tools.imported_files": "Importované soubory",
"prefs.design_tools.note": "Poznámka",
"prefs.design_tools.off": "Vypnuto",
"prefs.design_tools.placement_group": "Opěra, Nálitek, Západka",
"prefs.design_tools.placement_group": "Umisťované prvky",
"prefs.design_tools.rows": "Řádky",
"prefs.devices": "3D myš",
"prefs.dialog_buttons": "Tlačítka dialogu",
@@ -4654,6 +4656,10 @@
"sketch_text.path_clear": "Odpojit text od křivky",
"sketch_text.path_hint": "Křivka náčrtu, kterou text sleduje: klikněte sem a poté na křivku",
"sketch_text.use_font_file": "Použít soubor písma {path}",
"sketch_text.valign_baseline": "Účaří",
"sketch_text.valign_bottom": "Dole",
"sketch_text.valign_middle": "Uprostřed",
"sketch_text.valign_top": "Nahoře",
"solid": "těleso",
"status.editing": "Upravuje se {name}",
"status.navigation": "Přiřazení myši: {mapping}",
@@ -4989,6 +4995,7 @@
"ui.agent_chat_setup_title": "Nastavit asistenta",
"ui.agent_chat_side": "Strana chatu s agentem",
"ui.agent_chat_signed_in": "přihlášen",
"ui.agent_chat_snap_none_found": "Nebyl nalezen žádný kódovací agent. Balíček Snap běží v izolovaném prostředí, takže nevidí kódovací agenty nainstalované v tomto počítači a nemůže je spustit. Chcete-li je používat, nainstalujte SolidCraft z balíčku AppImage, .deb nebo .rpm. Agent, který používá API kompatibilní s OpenAI, v balíčku Snap funguje: nastavte ho přes Přidat agenta.",
"ui.agent_chat_state_auth": "Vyžadováno přihlášení",
"ui.agent_chat_state_busy": "Pracuje…",
"ui.agent_chat_state_exited": "Agent zastaven",
@@ -5185,6 +5192,7 @@
"ui.collapse": "Sbalit",
"ui.collinear": "Kolineární",
"ui.colour_vision": "Barevné vidění",
"ui.colour_vision_bends": "Ohyby",
"ui.colour_vision_deutan": "Deuteranopie",
"ui.colour_vision_deutan_tip": "Pro oslabené nebo chybějící vnímání zelené",
"ui.colour_vision_failed": "Selhalo",
@@ -5816,7 +5824,7 @@
"ui.pitch": "Stoupání",
"ui.placement": "Umístění",
"ui.placement_handles": "Úchyty umístění",
"ui.placement_handles_tip": "Úchyty na náhledu opěry, nálitku nebo západky: tažením značky ji přesunete po modelu, prstencem ji otočíte",
"ui.placement_handles_tip": "Značka pro přetažení prvku po modelu a tam, kde se prvek může otáčet, kroužek pro jeho otočení.",
"ui.plane": "Rovina",
"ui.plane_at_angle": "Rovina pod úhlem",
"ui.plugins": "Moduly plug-in",
@@ -5926,6 +5934,8 @@
"ui.ribbon_pin_footer": "Připnuté příkazy se zobrazují na pásu karet. Najetím na řádek jej připnete nebo odepnete.",
"ui.ribbon_workspace": "Pracovní prostředí",
"ui.right": "Zprava",
"ui.right_click_confirms": "Pravé kliknutí potvrzuje vstupy dialogu",
"ui.right_click_confirms_tip": "Při otevřeném dialogu přejde pravé kliknutí v zobrazení na další prázdný vstup a u posledního provede OK",
"ui.save": "Uložit",
"ui.save_as": "Uložit jako",
"ui.save_mesh_no_slicer_open": "Nenalezen žádný slicer: zvolte Vlastní… a vyberte program svého sliceru",
+10 -1
View File
@@ -698,6 +698,7 @@
"Value": "Værdi",
"Variable Radius": "Variabel radius",
"Velocity": "Hastighed",
"Vertical": "Lodret",
"Vertices": "Hjørnepunkter",
"View navigator": "Visningsnavigator",
"Volume": "Volumen",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "REDIGÉR {title}",
"dialog.no_shown_body": "Intet vist emne at ændre: Vis et, eller vælg Nyt emne",
"dialog.pattern_sketch_not_object": "Vælg emner eller features: En skitse er ingen af delene. Gentag dens kurver med skitsens eget Mønster eller Spejling, eller ekstruder den først.",
"dialog.right_click_pick": "Vælg først {input}",
"dialog.select": "↖ Vælg",
"dialog.selected_count": "↖ Valgte: {count}",
"dialog.selection_constraint": "Binding {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Frigør teksten fra dens kurve",
"sketch_text.path_hint": "En kurve i skitsen, som teksten følger: Klik her og derefter på kurven",
"sketch_text.use_font_file": "Brug skrifttypefilen {path}",
"sketch_text.valign_baseline": "Grundlinje",
"sketch_text.valign_bottom": "Bund",
"sketch_text.valign_middle": "Midte",
"sketch_text.valign_top": "Top",
"solid": "massivt emne",
"status.editing": "Redigerer {name}",
"status.navigation": "Musetildeling: {mapping}",
@@ -4445,6 +4451,7 @@
"ui.collapse": "Fold sammen",
"ui.collinear": "Kollineær",
"ui.colour_vision": "Farvesyn",
"ui.colour_vision_bends": "Bukninger",
"ui.colour_vision_deutan": "Deutan",
"ui.colour_vision_deutan_tip": "Ved svækket eller manglende følsomhed for grønt",
"ui.colour_vision_failed": "Mislykkedes",
@@ -4909,7 +4916,7 @@
"ui.pitch": "Stigning",
"ui.placement": "Placering",
"ui.placement_handles": "Placeringshåndtag",
"ui.placement_handles_tip": "Håndtag på forhåndsvisningen af en Understøtning, Skruebøsning eller Snapforbindelse: Træk i markøren for at flytte den hen over modellen, og drej den ved dens ring",
"ui.placement_handles_tip": "En markør til at trække featuren hen over modellen og, hvor featuren kan drejes, en ring til at dreje den.",
"ui.plane": "Plan",
"ui.plane_at_angle": "Plan i vinkel",
"ui.plugins": "Plugins",
@@ -5013,6 +5020,8 @@
"ui.ribbon_pin_footer": "Fastgjorte kommandoer vises på båndet. Hold musen over en række for at fastgøre eller frigøre den.",
"ui.ribbon_workspace": "Arbejdsområde",
"ui.right": "Fra højre",
"ui.right_click_confirms": "Højreklik bekræfter dialogens input",
"ui.right_click_confirms_tip": "Med en dialog åben går et højreklik i visningen videre til næste tomme input, og ved det sidste udføres OK",
"ui.save": "Gem",
"ui.save_as": "Gem som",
"ui.save_mesh_no_slicer_open": "Ingen slicer fundet: Vælg Brugerdefineret… og vælg dit slicerprogram",
+151 -2
View File
@@ -197,6 +197,7 @@
"Drag to move the hole; click to remove it": "Ziehen, um die Bohrung zu verschieben; anklicken, um sie zu entfernen",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "Ziehen, um die Auflage über das Modell zu verschieben. Sie rastet an Skizzenpunkten auf der Fläche ein.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "Ziehen, um die Rastverbindung über das Modell zu verschieben. Sie rastet an Skizzenpunkten auf der Fläche ein.",
"Drag to place it on another face.": "Ziehen, um es auf eine andere Fläche zu setzen.",
"Drag to point the catch in another direction.": "Ziehen, um den Rasthaken anders auszurichten.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "Ziehen, um die Auflage in 5°-Schritten zu drehen. Alt oder Strg gedrückt halten, um sie stufenlos zu drehen.",
"Drive Joint": "Gelenk antreiben",
@@ -706,6 +707,7 @@
"Value": "Value",
"Variable Radius": "Variabler Radius",
"Velocity": "Geschwindigkeit",
"Vertical": "Vertikal",
"Vertices": "Scheitelpunkte",
"View navigator": "Ansichtsnavigator",
"Volume": "Volumen",
@@ -757,6 +759,13 @@
"ai.prefs.connect_apps_note": "Aus entfernt die Einträge wieder.\n\nTrägt SolidCraft beim Start als MCP-Server in die auf diesem Computer gefundenen KI-Apps ein (OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code), damit ein Agent es ohne Einrichtung nutzen kann. Nur der Eintrag „solidcraft“ wird hinzugefügt oder sein Pfad aktualisiert; ein von Ihnen geänderter Eintrag bleibt unberührt, und die Datei wird vorher gesichert. Aus: Die hinzugefügten Einträge werden entfernt. Hilfe > KI-Assistenten verbinden… erledigt das von Hand.",
"ai.prefs.connect_at_start": "Letzten Agenten beim Start verbinden",
"ai.prefs.connect_at_start_note": "Verbindet beim Start von SolidCraft automatisch den zuletzt verwendeten Agenten (oder den Standardagenten) im Hintergrund, damit er für den Chat bereitsteht. Diese Funktion ist deaktiviert, wenn SolidCraft mit --control gestartet wird. Kann keine Verbindung hergestellt werden, zeigt der Assistent „Verbindung fehlgeschlagen“ und eine Schaltfläche zum erneuten Verbindungsversuch an.",
"ai.prefs.control_failed": "Der Steuerkanal konnte nicht starten: {error}",
"ai.prefs.control_from_launch": "Für diese Sitzung mit --control auf Port {port} gestartet. Änderungen hier gelten beim nächsten Start von SolidCraft ohne --control.",
"ai.prefs.control_listening": "Wartet auf 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Nicht aktiv",
"ai.prefs.control_port": "Port",
"ai.prefs.control_port_note": "Der Port, über den sich KI-Agenten auf diesem Computer verbinden (127.0.0.1). Standard ist 27878: Ist er belegt, wird der nächste freie Port genommen. Jeder andere Port wird genau so verwendet. Richte deinen MCP-Client auf denselben Port, zum Beispiel solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "Port {port} wird von einem anderen Programm (oder einem anderen SolidCraft-Fenster) verwendet. Wähle einen anderen Port.",
"ai.prefs.follow_camera": "Der Kamera folgen",
"ai.prefs.follow_camera_off": "Die automatische Kameraführung ist aus.",
"ai.prefs.follow_camera_on": "Die Kamera dreht sich zu Skizzen, die der Agent erstellt.",
@@ -815,6 +824,13 @@
"browser.sketches_to_parts_not_on_face": "nicht auf der Fläche eines Teils",
"browser.sketches_to_parts_part_missing": "ihr Teil gibt es nicht mehr",
"browser.sketches_to_parts_result": "{moved} Skizzen in das Teil verschoben, auf dem sie liegen; {stayed} geblieben: {why}",
"browser.straighten_angle": "Richtung der Kante",
"browser.straighten_choose": "Wählen Sie, wie die Kante liegen soll (Horizontal, Vertikal oder ein Winkel), und klicken Sie dann auf Ausrichten.",
"browser.straighten_click_a": "Klicken Sie im Bild auf ein Ende einer Kante, die gerade sein soll, oder geben Sie die Koordinaten ein.",
"browser.straighten_click_b": "Klicken Sie auf das andere Ende der Kante, oder geben Sie die Koordinaten ein.",
"browser.straighten_horizontal": "Horizontal",
"browser.straighten_title": "Ausrichten: {name}",
"browser.straighten_vertical": "Vertikal",
"browser.units": "Einheiten: {units}",
"cam.flat": "Flachstößel",
"cam.follower": "Stößel",
@@ -844,6 +860,8 @@
"cmd.appearance_pick_up": "Aussehen aufnehmen",
"cmd.appearance_replace": "Erscheinungsbild ersetzen",
"cmd.assembly_bom": "Stückliste",
"cmd.assembly_constraint_create": "Abhängigkeit",
"cmd.assembly_constraint_edit": "Abhängigkeit bearbeiten",
"cmd.assembly_mass_properties": "Masseeigenschaften",
"cmd.body.print_face": "Auflagefläche",
"cmd.body_rename": "Körper umbenennen",
@@ -862,6 +880,7 @@
"cmd.canvas_delete": "Zeichenfläche löschen",
"cmd.canvas_edit": "Zeichenfläche bearbeiten",
"cmd.canvas_insert": "Zeichenfläche",
"cmd.canvas_straighten": "Zeichenfläche ausrichten",
"cmd.canvas_to_sketch": "Skizze aus Zeichenfläche",
"cmd.component_activate": "Komponente aktivieren",
"cmd.component_break_link": "Verknüpfung trennen",
@@ -964,6 +983,7 @@
"cmd.file_save_mesh": "Als Netz speichern",
"cmd.file_send_to_slicer": "An Slicer senden",
"cmd.file_slicers": "Installierte Slicer",
"cmd.frame_end_cap": "Endkappe",
"cmd.frame_member": "Rahmenelement",
"cmd.frame_profile_insert": "Profil einfügen",
"cmd.frame_profile_list": "Profilbibliothek",
@@ -981,6 +1001,7 @@
"cmd.inspect_isocurve": "Isokurvenanalyse",
"cmd.inspect_minimum_radius": "Mindestradiusanalyse",
"cmd.inspect_parameter_sweep": "Parametervariation",
"cmd.inspect_parameter_variants": "Parametervarianten vergleichen",
"cmd.inspect_silhouette": "Silhouette",
"cmd.inspect_zebra": "Zebra-Analyse",
"cmd.joint_as_built": "Fertigungsgelenk",
@@ -1320,6 +1341,7 @@
"cmd.timeline_suppress": "Merkmal unterdrücken",
"cmd.ui.assistant": "Assistenten ein-/ausblenden",
"cmd.ui.palette": "Befehle suchen",
"cmd.ui.toggle_visibility": "Auswahl ein-/ausblenden",
"cmd.view.navigator": "Eigener Ansichtsnavigator",
"cmd.view.render_browser": "Render-Browser",
"cmd.view.render_dock": "Render-Panel verschieben",
@@ -1376,6 +1398,7 @@
"color.step_down": "Schritt nach unten",
"color.step_up": "Schritt nach oben",
"color.value": "Hellwert (Prozent)",
"component.error.ambiguous_name": "Mehrere Komponenten heißen `{name}`. Verwende eine numerische Komponenten-ID: {ids}.",
"config.column_filter_empty": "Keine passenden Spalten",
"config.rule_parameter_columns": "Hier stehen nur Parameter mit einer Spalte in der Tabelle. Fügen Sie eine mit „Spalte hinzufügen“ (+) hinzu, um den Parameter hier zu verwenden.",
"config.rule_suppression_columns": "Hier stehen nur Funktionen mit einer Spalte „Unterdrücken“ in der Tabelle. Fügen Sie eine mit „Spalte hinzufügen“ (+) hinzu, um die Funktion hier zu steuern.",
@@ -1416,6 +1439,7 @@
"diagnostic.reselect_reference": "{feature}: Die Referenz `{reference}` existiert nicht mehr so, wie sie ausgewählt wurde; wählen Sie sie erneut aus",
"dialog.bodies_count": "{count} Körper",
"dialog.clearance_invalid": "der Abstand muss eine Länge von 0 oder mehr sein",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "Berechnen",
"dialog.compute_again": "Erneut berechnen",
"dialog.computing": "Wird berechnet… {seconds} s",
@@ -1432,6 +1456,7 @@
"dialog.pattern_sketch_not_object": "Körper oder Funktionen wählen: Eine Skizze ist keines von beiden. Ihre Kurven mit Muster oder Spiegeln in der Skizze wiederholen oder sie zuerst extrudieren.",
"dialog.primitive_point_tip": "Ein Punkt, der X, Y und Z füllt: hier klicken, dann einen Eckpunkt, eine Kante oder Fläche des Modells, einen Punkt einer Skizze oder den Ursprung anklicken.",
"dialog.reference_edge_tip": "Eine gerade Kante der gewählten Fläche, von der aus der Abstand darunter gemessen wird: hier klicken, dann die Kante anklicken.",
"dialog.right_click_pick": "Zuerst {input} auswählen",
"dialog.select": "↖ Auswählen",
"dialog.selected_count": "↖ {count} ausgewählt",
"dialog.selection_constraint": "Bedingung {id}",
@@ -1444,6 +1469,9 @@
"document.changed_on_disk": "{name} wurde auf dem Datenträger geändert",
"document.changed_on_disk_detail": "{name} wurde seit dem Öffnen oder letzten Speichern von einem anderen Programm oder Computer geändert. „Überschreiben“ ersetzt diese Änderungen durch Ihre; „Kopie speichern“ behält beide.",
"document.copy_name": "{name} - Kopie",
"document.discard_row": "Verwerfen",
"document.finish_save_prompt": "Beantworten Sie die Speicherabfrage, bevor Sie einen weiteren Entwurf öffnen.",
"document.not_saved_yet": "Noch nicht gespeichert",
"document.open_anyway": "Trotzdem öffnen",
"document.open_elsewhere": "{name} ist bereits geöffnet",
"document.open_elsewhere_detail": "{name} ist in SolidCraft {app} auf {who} geöffnet, seit {when}. Wenn Sie beide speichern, verliert einer von Ihnen Arbeit. Öffnen Sie die Datei schreibgeschützt, um sie anzusehen, ohne sie zu überschreiben.",
@@ -1453,6 +1481,9 @@
"document.read_only_save": "Dieses Design wurde schreibgeschützt geöffnet: Speichern Sie es als neue Datei",
"document.save_changes": "Änderungen in {name} speichern?",
"document.save_copy": "Kopie speichern…",
"document.save_many": "Änderungen an {n} Entwürfen speichern?",
"document.save_row": "Speichern",
"document.save_selected": "Auswahl speichern",
"document.tab_unsaved_changes": "Ungespeicherte Änderungen",
"document.unsaved_changes": "{name} enthält ungespeicherte Änderungen. Wenn Sie nicht speichern, gehen sie verloren.",
"drive.rigid": "{joint} ist ein starres Gelenk. Es hält die verbundenen Teile fest zusammen und ermöglicht daher keine Bewegung. Um die Teile beweglich zu machen, ändern Sie den Gelenktyp unter „Gelenk bearbeiten“: Drehgelenk für Drehbewegungen, Schubgelenk für lineare Bewegungen oder Zylindergelenk für beides.",
@@ -1472,6 +1503,8 @@
"dxf.tolerance": "Kurventoleranz",
"dxf.tolerance_help": "Nur sichtbare Körper und angezeigte Skizzen. Kurven werden durch gerade Segmente angenähert. Eine kleinere Toleranz liefert feinere Kurven und benötigt mehr Zeit und Speicher.",
"each rail's curves must be in one sketch": "die Kurven jeder Führungskurve müssen in derselben Skizze liegen",
"error.end_cap_faces": "Mindestens eine offene Stirnfläche eines Rahmenelements auswählen",
"error.end_cap_unresolved": "Ende {ends} dieser Abdeckung ist nicht mehr im Modell. Stirnflächen erneut auswählen",
"feature computation ended without a result": "die Berechnung des Merkmals wurde ohne Ergebnis beendet",
"file.open.drawing_filter": "Designs, CAD-Dateien, Netze und Zeichnungen",
"file.open.portal_fallback.no_portal_service": "Die geöffnete Dateiauswahl ist nicht die des Desktops: Der Dateiauswahl-Dienst des Desktops ist nicht verfügbar.",
@@ -1483,6 +1516,7 @@
"file_load.inserting": "Geometrie wird eingefügt",
"file_load.link_item": "{name} ({done} von {total})",
"file_load.opened": "{name} geöffnet",
"file_load.opened_behind": "{name} in einem neuen Tab geöffnet",
"file_load.opened_in_tab": "{name} in neuem Tab geöffnet",
"file_load.opening": "Design wird geöffnet",
"file_load.preparing_thumbnail": "Vorschaubild wird vorbereitet...",
@@ -1569,6 +1603,7 @@
"help.file.send_to_slicer": "Speichert die gewählten Körper als 3MF-Datei und öffnet sie im gewählten Slicer. Damit kommen Sie in einem Schritt vom Modell zum Druck.",
"help.font_details": "Die Oberfläche verwendet die integrierten Schriftarten von egui (Ubuntu Light und Hack unter der Ubuntu Font Licence und der MIT/Bitstream-Vera-Lizenz; Noto Emoji und die Emoji-Symbolschrift unter OFL und MIT). Skizzentext verwendet Liberation Sans (SIL OFL 1.1). Das optionale Schriftpaket craft-fonts von The Crafting Apps (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1) ist nicht in SolidCraft-Builds enthalten.",
"help.fonts": "Schriftarten",
"help.frame.end_cap": "Schließt offene Enden von Rahmenelementen mit Platten in der Form des Profilumrisses. Damit verschließen Sie Rohre, Winkel und Träger, auf dem Ende oder darin eingelassen.",
"help.frame.member": "Setzt ein Profil, etwa ein Rohr oder ein Aluprofil, entlang der Linien einer Rahmenskizze, ein Stab je Linie. Für Rahmen, Gestelle und Schweißkonstruktionen.",
"help.inspect.accessibility": "Färbt die Flächen, die ein Werkzeug aus einer Richtung erreicht, und die, die es nicht erreicht. Damit prüfen Sie ein Teil auf Fräsen oder Formen von dieser Seite.",
"help.inspect.center_of_mass": "Zeigt den Schwerpunkt von Körpern, einzeln und zusammen, bei gleichmäßiger Dichte. Damit prüfen Sie die Balance und wohin ein Teil kippt.",
@@ -2032,6 +2067,9 @@
"measure.at": "Bei",
"measure.item": "Element {number}",
"measure.line_to_centre": "Linie zum Mittelpunkt",
"measure.perimeter": "Umfang",
"measure.perimeter_inner": "Innenumfang",
"measure.perimeter_outer": "Außenumfang",
"measure.quick_copied": "Messwert kopiert",
"measure.quick_copy": "Klicken, um den Messwert zu kopieren",
"measure.quick_edges": "{count} Kanten",
@@ -2073,6 +2111,8 @@
"nav.hfss.help": "Alt+Linksziehen verschiebt, Umschalt+Alt+Linksziehen zoomt, Strg+Linksziehen auf leerer Fläche dreht",
"nav.inventor.help": "Mittlere Maustaste verschiebt, Umschalt+Mitte dreht, Strg+Mitte zoomt, rechte Maustaste dreht",
"nav.maya.help": "Alt+Linksziehen dreht, Alt+Mitte verschiebt, Alt+Rechtsziehen zoomt; mittleres Ziehen verschiebt ebenfalls",
"nav.maya_horizontal_zoom.help": "Alt+Rechtsziehen: nach rechts vergrößern, nach links verkleinern. Ausschalten, um wieder vertikal zu zoomen.",
"nav.maya_horizontal_zoom.label": "Maya: horizontal ziehen zum Zoomen",
"nav.nx.help": "Mittlere Maustaste dreht, Umschalt+Mitte verschiebt (in NX Mitte + rechts), Strg+Mitte zoomt (in NX Mitte + links); rechtes Ziehen lässt die Kamera unverändert",
"nav.openscad.help": "Linksziehen auf leerem Hintergrund dreht, Umschalt+Linksziehen zieht ein Auswahlrechteck auf, Skizzengeometrie wird durch Ziehen bearbeitet; rechtes oder mittleres Ziehen verschiebt, Umschalt+rechtes oder Umschalt+mittleres Ziehen zoomt",
"nav.perspective.sketch": "Beim Bearbeiten einer Skizze wird die orthografische Ansicht verwendet. Beenden Sie die Skizze, um die Perspektive umzuschalten.",
@@ -2201,6 +2241,16 @@
"not a move": "keine Verschiebung",
"not a number": "keine Zahl",
"open a sketch first": "zuerst eine Skizze öffnen",
"operations.cancel": "{name} abbrechen",
"operations.cancelled": "{name} abgebrochen",
"operations.cancelling": "Wird abgebrochen…",
"operations.cannot_cancel": "{name} kann nicht abgebrochen werden",
"operations.feature": "Feature",
"operations.feature_edit": "Feature bearbeiten",
"operations.meshing": "Teile werden geladen",
"operations.queued": "Wartet",
"operations.stopped": "Abgebrochen",
"operations.waiting": "Bereit",
"parameters.apply_live": "Jede Änderung beim Verlassen des Feldes übernehmen",
"parameters.apply_live_tip": "Aus: Änderungen warten auf Übernehmen oder OK, dann wird das Modell einmal für alle neu aufgebaut. Abbrechen oder Esc verwirft sie.",
"parameters.held": "{count} Änderungen warten auf Übernehmen",
@@ -2289,6 +2339,7 @@
"prefs.appearance.viewport_colours": "Farben der 3D-Ansicht",
"prefs.appearance.viewport_logo": "Ansichtsfenster und Logo",
"prefs.applies_on_restart": "Wird nach einem Neustart übernommen",
"prefs.assemblies": "Baugruppen",
"prefs.assistant": "Assistent",
"prefs.assistant_connecting": "Verbindung",
"prefs.assistant_follow_help": "Look At bei Skizzen bewegt die Ansicht mit dem Zeiger.",
@@ -2338,6 +2389,10 @@
"prefs.choose_font": "Schriftdatei auswählen…",
"prefs.click": "Klicken",
"prefs.command_dialog_values": "Befehlsdialoge",
"prefs.constraint_glyph_size": "Größe der Bindungssymbole",
"prefs.constraint_glyph_size_note": "Wie groß Bindungssymbole samt Buchstaben oder Icons in einer Skizze gezeichnet werden. 100 % ist die übliche Größe; die Symbole behalten diese Bildschirmgröße bei jedem Zoom.",
"prefs.construct_menu_groups": "Konstruktionswerkzeuge nach Elementtyp gruppieren",
"prefs.construct_menu_groups_help": "Zeigt Überschriften für Ebenen, Achsen und Punkte. Aus behält die ursprüngliche Menüreihenfolge bei.",
"prefs.contact_shading": "Weiche Kontaktschattierung",
"prefs.contact_shading_note": "Erzeugt weiche Schatten an Stellen, an denen sich Bauteile nahekommen.",
"prefs.context_menu": "Kontextmenü",
@@ -2369,10 +2424,12 @@
"prefs.design_tools.imported_files": "Importierte Dateien",
"prefs.design_tools.note": "Hinweis",
"prefs.design_tools.off": "Aus",
"prefs.design_tools.placement_group": "Auflage, Zapfen, Schnappverbindung",
"prefs.design_tools.placement_group": "Platzierte Funktionen",
"prefs.design_tools.rows": "Zeilen",
"prefs.devices": "3D-Maus",
"prefs.dialog_buttons": "Dialogschaltflächen",
"prefs.dialog_first_letter_buttons": "Dialogschaltflächen reagieren auf ihren Anfangsbuchstaben",
"prefs.dialog_first_letter_buttons_help": "Ist ein Dialog geöffnet, drückt der Anfangsbuchstabe einer Beschriftung die zugehörige Schaltfläche: O für OK, A für Abbrechen. Ein Buchstabe, der zu zwei Schaltflächen passt, tut nichts, und ein fokussiertes Textfeld behält die Tasteneingabe. Aus: Eingaben drücken keine Schaltfläche, wie bisher.",
"prefs.dialogs": "Dialoge",
"prefs.dialogs_edge": "Am Rand der Ansicht",
"prefs.dialogs_left_column": "In der linken Spalte",
@@ -2386,12 +2443,23 @@
"prefs.dimension_values_window": "In einem Fenster",
"prefs.display": "Anzeige",
"prefs.edges": "Kanten und Schattierung",
"prefs.export": "Export",
"prefs.export_name": "Dateiname beim Export",
"prefs.export_name.body": "Name des exportierten Körpers (des ersten, wenn es mehrere sind)",
"prefs.export_name.design": "Name des Designs",
"prefs.export_name_hint": "z. B. {design}-{body}",
"prefs.export_name_sample": "Beim Export dieses Designs vorgeschlagen: {name}",
"prefs.export_name_tip": "Der Dateiname, den Datei › Exportieren und Als Netz speichern vorschlagen. Diese Platzhalter werden ersetzt:\n{placeholders}\nEine nicht gesetzte Konstruktionseigenschaft entfällt. Leer lassen, um den Namen des Designs vorzuschlagen, bei einem Netz den des Körpers.",
"prefs.extend": "Erweitern",
"prefs.extra_navigation": "Mit Strg und gedrückter linker Maustaste auf einer freien Fläche drehen. Leertaste gedrückt halten, um die Ansicht zu verschieben.",
"prefs.extrude_arrow_face_stops": "Extrusionspfeil hält an Flächen",
"prefs.extrude_arrow_face_stops_note": "Beim Ziehen des Abstandspfeils von Extrusion hält er an ebenen Flächen parallel zum Profil, etwa an der Rückseite eines Blocks, in den geschnitten wird, und hebt die Fläche hervor. Aus: Der Pfeil bewegt sich nur in runden Schritten.",
"prefs.extrude_view_isometric": "Beim Öffnen von Extrudieren isometrisch ausrichten",
"prefs.extrude_view_return": "Beim Schließen von Extrudieren zur vorigen Ansicht zurück",
"prefs.file_operations_wait": "Auf das Öffnen von Dateien warten",
"prefs.file_operations_wait_note": "Während eine Datei geöffnet oder eingefügt wird oder Verknüpfungen neu gelesen werden, wartet die Konstruktion hinter einer Karte mit dem Fortschritt und Abbrechen. Aus: Die Datei erscheint im Vorgangsbereich und Sie können weiterarbeiten; ein Einfügen wird übernommen, sobald Sie fertig sind, und eine inzwischen geöffnete Datei kommt in einen neuen Tab.",
"prefs.fillet_legacy_radius": "Den vorherigen Standardradius für Solid-Fillet verwenden",
"prefs.fillet_legacy_radius.help": "Standardmäßig aus. Ein: Ein neuer Solid-Fillet öffnet mit der in den Einheiten des Designs gelesenen Zahl 2 (\"2 in\" in einem Design in Zoll), wie zuvor; aus: Er öffnet mit dem Radius, mit dem das Werkzeug ausgeliefert wird, 2 mm, in den Einheiten des Designs angezeigt (\"0.07874 in\" in einem Design in Zoll).",
"prefs.follows_os": "Wie im Betriebssystem",
"prefs.font": "Schrift",
"prefs.font_fallback": "Zeichen, die in der ausgewählten Schrift fehlen, werden mit der integrierten Ersatzschrift dargestellt. So werden keine Beschriftungen als leere Kästchen angezeigt.",
@@ -2415,6 +2483,17 @@
"prefs.gesture_pan": "Ansicht verschieben",
"prefs.gesture_zoom": "Ansicht zoomen",
"prefs.graphics": "Grafik",
"prefs.graphics_api": "Grafik-API",
"prefs.graphics_api_auto": "Automatisch",
"prefs.graphics_api_help": "Wählen Sie die Grafik-API zum Starten von SolidCraft. Wenn sich beim nächsten Start kein Fenster öffnen lässt, wird die vorherige Auswahl wiederhergestellt.",
"prefs.graphics_api_override": "Eine Startvorgabe bestimmt die Grafik-API. Die gespeicherte Auswahl gilt, wenn SolidCraft normal geöffnet wird.",
"prefs.graphics_api_restart_note": "Gilt nach einem Neustart. Ungespeicherte Entwürfe werden vor dem Schließen berücksichtigt.",
"prefs.graphics_api_restart_unavailable": "Starten Sie SolidCraft neu, um die gespeicherte Grafik-API anzuwenden.",
"prefs.graphics_api_running": "Aktuell: {current}. Für den nächsten Start ausgewählt: {selected}.",
"prefs.graphics_api_save_failed": "Die Auswahl der Grafik-API konnte nicht gespeichert werden: {error}",
"prefs.graphics_api_start_failed": "Die ausgewählte Grafik-API konnte nicht vorbereitet werden: {error}",
"prefs.graphics_api_start_reverted": "Der vorherige Start mit {requested} konnte kein Fenster öffnen. SolidCraft hat {previous} wiederhergestellt.",
"prefs.graphics_api_unavailable": "Die Grafik-API kann in der Desktop-App ausgewählt werden.",
"prefs.graphics_card": "Grafikkarte",
"prefs.graphics_card_auto": "Automatisch",
"prefs.graphics_card_missing": "Die gespeicherte Grafikkarte ist nicht verfügbar. Stattdessen wird „Automatisch“ verwendet.",
@@ -2458,6 +2537,8 @@
"prefs.history_sketches_in_order": "In Erstellungsreihenfolge",
"prefs.history_sketches_note": "Wenn „Skizzen“ auf „Unter dem zugehörigen Feature“ eingestellt ist, wird jede Skizze im linken Verlauf eine Ebene unter dem ersten daraus erstellten Feature angezeigt, sofern der Bereich breit genug für die Namen ist. Die Timeline unten zeigt weiterhin die Reihenfolge, in der die Elemente erstellt wurden.",
"prefs.history_sketches_under_feature": "Unter dem zugehörigen Feature",
"prefs.history_steps_component": "Verlaufsschritte je Komponente",
"prefs.history_steps_component_note": "Ist eine Komponente aktiv oder ausgewählt, gehen die Verlaufssteuerelemente durch deren Features, so wie der Verlauf unten sie zeigt. Aus: Sie gehen durch alle Features des Designs. Der Verlauf links oder unter dem Browser geht immer durch alle Features.",
"prefs.hold_stop_snapping": "Gedrückt halten, um das Einrasten zu deaktivieren",
"prefs.home_fit_size": "Größe bei Home und Einpassen",
"prefs.home_fit_size_note": "Wie viel der Ansicht das Modell füllt, wenn Home, Einpassen, ein geöffnetes Design oder ein Ansichtswechsel am Navigator es einrahmt, unabhängig von der Einstellung darunter. 100 %: füllt die Ansicht zwischen den Leisten, dem Kompass und der Navigationsleiste.",
@@ -2471,6 +2552,8 @@
"prefs.interval_minutes": "{n} min",
"prefs.invert_navigator_arrows": "Drehpfeile des Ansichtswürfels umkehren",
"prefs.invert_navigator_arrows_note": "Die Pfeile um den Würfel drehen die Kamera in die Richtung, in die sie zeigen, wie in Fusion und Inventor: Der linke Pfeil zeigt nach rechts und schwenkt die Kamera nach rechts. Aus: Ein Pfeil dreht den Würfel zu der Seite hin, an der er sitzt, sodass der linke Pfeil die Kamera nach links schwenkt. Die gebogenen Rollpfeile sind davon nicht betroffen.",
"prefs.joint_drag_trackball": "Teile an einem Kugelgelenk beim Ziehen wie einen Trackball drehen",
"prefs.joint_drag_trackball_help": "Wenn Sie ein Teil ziehen, das ein Kugelgelenk hält, dreht es sich um die kleinste Drehung um das Gelenk, als rollten Sie eine Kugel von der Größe des Teils. Aus: Der gegriffene Punkt folgt genau dem Zeiger, und das Teil kann sich zusätzlich um ihn drehen.",
"prefs.keep_work_on_tab_switch": "Dialoge und Werkzeuge beim Wechsel zwischen Konstruktionen offen lassen",
"prefs.keep_work_on_tab_switch_note": "Jeder Konstruktions-Tab behält seinen offenen Dialog oder sein Werkzeug mit allem, was darin ausgewählt und eingegeben wurde, sowie seinen Werkzeugleisten-Tab. Beim Zurückkehren zur Konstruktion ist alles wieder da. Aus: Ein Wechsel bricht sie ab und zeigt den Tab Modell.",
"prefs.labels": "Beschriftungen",
@@ -2542,6 +2625,8 @@
"prefs.not_on_gpu": "Auf dieser GPU nicht verfügbar",
"prefs.on": "An",
"prefs.opaque": "Undurchsichtig",
"prefs.operations_panel": "Vorgänge in der Ansicht zeigen",
"prefs.operations_panel_note": "Lange Vorgänge (eine Datei öffnen, ein Feature berechnen, der Befehl eines Agenten) erscheinen unten rechts in der Ansicht mit ihrem Fortschritt und einer Schaltfläche zum Abbrechen. Aus: wie bisher ein Hinweis „Berechnung“.",
"prefs.orbit_snap": "Halten Sie beim Drehen die Umschalttaste gedrückt, um die Ansicht an einer Achse einrasten zu lassen.",
"prefs.orientation": "Ausrichtung",
"prefs.origin_plane_names": "Namen der Ursprungsebenen",
@@ -2604,6 +2689,8 @@
"prefs.ribbon_reveal": "Suchergebnisse im Menüband zeigen",
"prefs.ribbon_reveal_note": "Steht der Zeiger über einem Ergebnis in Befehle suchen, zeigt das Menüband, wo der Befehl liegt: seine Registerkarte, seine Schaltfläche oder seine Zeile im Aufklappmenü eines Panels. Ein aus der Suche gestarteter Befehl blinkt dort, und ein laufender Befehl aus einem Aufklappmenü markiert sein Panel.",
"prefs.right_click": "Rechtsklick",
"prefs.save_prompt_one_at_a_time": "Beim Schließen mehrerer Entwürfe für jeden ungespeicherten Entwurf einzeln fragen",
"prefs.save_prompt_one_at_a_time_help": "Für jeden ungespeicherten Entwurf eine eigene Speicherabfrage statt einer gemeinsamen Liste anzeigen.",
"prefs.saving": "Starten und Speichern",
"prefs.scale_note": "Die Skalierung lässt sich auch mit Strg + / Strg − im Fenster ändern. Bei 100 % sind die Schaltflächen 28 px groß.",
"prefs.scale_text": "Skalierung und Text",
@@ -2637,6 +2724,8 @@
"prefs.sketch.center_arc": "Mittelpunktbogen folgt dem Zeiger",
"prefs.sketch.click_selects": "Klick wählt",
"prefs.sketch.conflict_colour": "Konfliktfarbe",
"prefs.sketch.cursor_coordinates": "Cursorkoordinaten in der Skizze anzeigen",
"prefs.sketch.cursor_coordinates_note": "Neben dem Zeiger seine X- und Y-Werte vom Skizzenursprung, auch ohne aktives Werkzeug. Aus: nur während ein Werkzeug einen Punkt setzt.",
"prefs.sketch.drawing": "Zeichnen",
"prefs.sketch.ellipse_axes": "Ellipsen mit ihren Achsen zeichnen",
"prefs.sketch.ellipse_axes_note": "Haupt- und Nebenachse als Konstruktionslinien, damit Halbachsen und Achsen bemaßt werden können. Aus: nur die Ellipse, und D darauf ergibt ihren Nebenradius, wohin der Wert auch gezogen wird, gezeichnet und mit R beschriftet wie bisher.",
@@ -2648,14 +2737,20 @@
"prefs.sketch.faces_edges": "Flächen und Kanten",
"prefs.sketch.hide_glyphs": "Symbole beim Herauszoomen ausblenden",
"prefs.sketch.marks": "Markierungen in der Skizze",
"prefs.sketch.max_points": "Größte Skizze",
"prefs.sketch.max_points_note": "Die meisten Punkte oder Kurven, die eine Skizze aufnimmt: standardmäßig 20000, höchstens 200000. SVG einfügen und DXF einfügen lehnen eine größere Zeichnung ab. Eine große Skizze wird langsamer gelöst und gezeichnet.",
"prefs.sketch.max_points_unit": "Punkte",
"prefs.sketch.note": "Zeichnen, Fangen und Auswählen.",
"prefs.sketch.opening_closing": "Öffnen und Schließen",
"prefs.sketch.prefer_free_points": "Bei Überlappung bewegliche Punkte bevorzugen",
"prefs.sketch.project_options": "Zuerst Projektionsoptionen abfragen",
"prefs.sketch.recent_snap": "Am Schnittpunkt zweier Hilfslinien fangen",
"prefs.sketch.select_3d_curve_points": "Punkte von 3D-Skizzenkurven auswählen",
"prefs.sketch.select_3d_curve_points_help": "Punkte auf gezeichneten 3D-Skizzenkurven als Referenzen für Konstruktionselemente anzeigen und auswählen.",
"prefs.sketch.select_other_hidden": "Andere auswählen erfasst verdeckte Geometrie",
"prefs.sketch.shortcut_cycles_modes": "Erneuter Kurzbefehl wechselt den Modus",
"prefs.sketch.shortcut_cycles_modes_tip": "Aus: Das Werkzeug startet erneut.",
"prefs.sketch.snap_to_visible_grid": "Am sichtbaren Schnittpunkt des Rasters fangen",
"prefs.sketch.snapping_guides": "Fangen und Hilfslinien",
"prefs.sketch.state_icons": "Statussymbole",
"prefs.sketch.tracking_guides": "Hilfslinien für Mittelpunkte und Kantenmitten",
@@ -2683,6 +2778,7 @@
"prefs.sketch_selection": "Skizzen und Auswahl",
"prefs.sketch_selection_heading": "Skizzen und Auswahl",
"prefs.sketch_selection_note": "Legt fest, wie Skizzenelemente einrasten und wie Klicks Elemente auswählen.",
"prefs.sketch_snap_to_visible_grid_note": "Ein Punkt in einer Skizze rastet am Schnittpunkt der vom Raster gezeichneten Linien ein, wenn der Zeiger auf einen davon zeigt, sonst am feineren Gitter zwischen ihnen. Aus: Der Punkt rastet nur am feineren Gitter ein, wie zuvor.",
"prefs.sketch_state_icons": "Skizzensymbole in der Farbe ihres Zustands",
"prefs.sketch_state_icons_note": "Im Verlauf und im Browser nimmt das Symbol einer Skizze die Farbe ihres Zustands an (unterbestimmt, vollständig bestimmt oder im Konflikt), und ihr Tooltip nennt den Zustand. Aus: Alle Skizzen haben dasselbe Symbol.",
"prefs.sketch_tab_always": "Registerkarte Skizze immer zeigen",
@@ -3461,6 +3557,10 @@
"render.gpu_path_retry": "Erneut versuchen",
"render.gpu_seed": "Zufallsstartwert",
"render.gpu_unavailable": "GPU-Pathtracing ist auf diesem Gerät nicht bereit.",
"render.graphics_api_restart_vulkan": "Mit Vulkan neu starten",
"render.graphics_api_restart_warning": "Ein Wechsel der Grafik-API startet SolidCraft neu und fragt nach dem Speichern ungespeicherter Entwürfe. Wenn die neue API kein Fenster öffnen kann, wird beim nächsten Start die vorherige Auswahl wiederhergestellt.",
"render.graphics_api_settings": "Grafikeinstellungen",
"render.graphics_api_vulkan_required": "GPU-Pathtracing benötigt Vulkan in dieser Sitzung. Starten Sie mit Vulkan neu oder verwenden Sie weiterhin ein CPU-Bildverfahren.",
"render.ground_apply": "Boden anpassen und speichern",
"render.ground_gap": "Definierter Abstand",
"render.ground_linear_rgb": "Diffuser Reflexionsgrad · lineares RGB",
@@ -4436,6 +4536,8 @@
"sketch.dof_left_one": "{count} Freiheitsgrad übrig",
"sketch.draw_curves": "Als {linetype} zeichnen",
"sketch.make_selection": "Auswahl als {linetype} markieren",
"sketch.move_released": "Verschoben: {count} Abhängigkeiten zum Rest wurden gelöst ({names}).",
"sketch.move_released_one": "Verschoben: {count} Abhängigkeit zum Rest wurde gelöst ({names}).",
"sketch.open_ends": "Offen {count}",
"sketch.status_conflict": "Bedingungen widersprechen sich",
"sketch.status_fully_constrained": "vollständig bestimmt",
@@ -4466,6 +4568,10 @@
"sketch_text.path_clear": "Text von der Kurve lösen",
"sketch_text.path_hint": "Eine Skizzenkurve, der der Text folgt: hier klicken, dann die Kurve",
"sketch_text.use_font_file": "Schriftdatei {path} verwenden",
"sketch_text.valign_baseline": "Grundlinie",
"sketch_text.valign_bottom": "Unten",
"sketch_text.valign_middle": "Mitte",
"sketch_text.valign_top": "Oben",
"solid": "Volumenkörper",
"status.editing": "{name} wird bearbeitet",
"status.navigation": "Mausbelegung: {mapping}",
@@ -4664,6 +4770,7 @@
"ui.agent_chat_allow_once": "Einmal erlauben",
"ui.agent_chat_allowed": "Erlaubt",
"ui.agent_chat_answered": "Antwort: {option}",
"ui.agent_chat_answered_in": "Beantwortet in {time}",
"ui.agent_chat_approval": "Darf der Agent das tun?",
"ui.agent_chat_attach_selection": "Auswahl anhängen",
"ui.agent_chat_attach_selection_tip": "Das im Modell Ausgewählte (Flächen, Kanten, Merkmale, Körper) mit der Nachricht senden, damit der Agent weiß, was Sie meinen",
@@ -4705,6 +4812,7 @@
"ui.agent_chat_dock_right": "Rechts andocken",
"ui.agent_chat_drop_hint": "Ablegen, um an die nächste Nachricht anzuhängen",
"ui.agent_chat_edit": "Bearbeiten",
"ui.agent_chat_ended_after": "Beendet nach {time}",
"ui.agent_chat_exited": "Der Agent wurde beendet.",
"ui.agent_chat_failed_start": "Der Agent konnte nicht starten: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: Eine CAD-Datei wird in das Design importiert, nicht gelesen",
@@ -4742,6 +4850,7 @@
"ui.agent_chat_model_no_tools": "{model} kann die Werkzeuge von SolidCraft nicht verwenden und daher nur chatten. Wählen Sie ein Modell mit Werkzeugunterstützung.",
"ui.agent_chat_model_rejected": "Der Agent hat {model} nicht akzeptiert: {error}",
"ui.agent_chat_model_search": "Modelle suchen…",
"ui.agent_chat_model_search_or_id": "Suchen oder eine beliebige Modell-ID eingeben…",
"ui.agent_chat_model_tip": "Das vom Agenten verwendete Modell. Ihre Auswahl wird für diesen Agenten gespeichert.",
"ui.agent_chat_models_failed": "Modelle konnten nicht abgerufen werden: {error}",
"ui.agent_chat_models_heading": "Verfügbare Modelle",
@@ -4799,6 +4908,10 @@
"ui.agent_chat_setup_title": "Assistenten einrichten",
"ui.agent_chat_side": "Chat andocken",
"ui.agent_chat_signed_in": "angemeldet",
"ui.agent_chat_snap_none_found": "Kein Coding-Agent gefunden. Das Snap-Paket ist abgeschottet und kann die auf diesem Computer installierten Coding-Agenten weder sehen noch starten. Um sie zu nutzen, installieren Sie SolidCraft stattdessen aus dem AppImage-, .deb- oder .rpm-Paket. Ein Agent, der eine OpenAI-kompatible API nutzt, funktioniert auch im Snap-Paket: Richten Sie ihn mit Agent hinzufügen ein.",
"ui.agent_chat_span_h": "{h} Std. {min} Min.",
"ui.agent_chat_span_min": "{n} Min.",
"ui.agent_chat_span_s": "{n} Sek.",
"ui.agent_chat_state_auth": "Anmeldung nötig",
"ui.agent_chat_state_busy": "Arbeitet…",
"ui.agent_chat_state_exited": "Agent beendet",
@@ -4809,6 +4922,10 @@
"ui.agent_chat_stop": "Beenden",
"ui.agent_chat_stop_tip": "Den Agenten und alles, was er gestartet hat, beenden",
"ui.agent_chat_stop_turn_tip": "Agenten stoppen (Esc). Eingereihte Nachrichten bleiben eingereiht.",
"ui.agent_chat_thinking_for": "Denkt seit {time} nach",
"ui.agent_chat_tool_running_for": "läuft seit {time}",
"ui.agent_chat_transcript_assistant": "Assistent:",
"ui.agent_chat_transcript_user": "Benutzer:",
"ui.agent_chat_turn_limit": "Änderungen pro Nachricht",
"ui.agent_chat_turn_unlimited": "Unbegrenzt",
"ui.agent_chat_undo_changes": "Diese Änderungen rückgängig machen",
@@ -4965,7 +5082,9 @@
"ui.browser_bodies_one": "{count} Körper",
"ui.browser_bodies_other": "{count} Körper",
"ui.browser_collapse": "Browser einklappen",
"ui.browser_collapse_below": "Darunter einklappen",
"ui.browser_expand": "Browser ausklappen",
"ui.browser_expand_below": "Darunter ausklappen",
"ui.browser_title": "Browser",
"ui.calibrate": "Kalibrieren",
"ui.cancel": "Abbrechen",
@@ -4993,6 +5112,7 @@
"ui.collapse": "Einklappen",
"ui.collinear": "Kollinear",
"ui.colour_vision": "Farbsehen",
"ui.colour_vision_bends": "Biegungen",
"ui.colour_vision_deutan": "Deutan",
"ui.colour_vision_deutan_tip": "Bei schwachem oder fehlendem Grünsinn",
"ui.colour_vision_failed": "Fehler",
@@ -5022,6 +5142,9 @@
"ui.conic_curve": "Kegelschnitt",
"ui.constant": "Konstant",
"ui.constraints_conflict": "Bedingungen konfliktreich",
"ui.construct_axes": "Achsen",
"ui.construct_planes": "Ebenen",
"ui.construct_points": "Punkte",
"ui.construction": "Konstruktionslinie",
"ui.construction.angle_hint": "Konstruktionslinie: Punkt anklicken, dann Winkel eingeben oder Richtung wählen",
"ui.construction.bisector_hint": "Winkelhalbierende: zwei sich schneidende Geraden wählen, dann gewünschte Lösung",
@@ -5172,6 +5295,17 @@
"ui.ellipse": "Ellipse",
"ui.emboss_wrap_note": "Senkrechte Linienprofile, die einen unterstützten Zylinder berühren, werden automatisch aufgewickelt. Eine Wand auswählen, um ein Ziel festzulegen.",
"ui.end": "Ende",
"ui.end_cap.chamfer": "Eckfase",
"ui.end_cap.direction": "Richtung",
"ui.end_cap.faces": "Stirnflächen",
"ui.end_cap.inset": "Einzug",
"ui.end_cap.inset_kind": "Einzug als",
"ui.end_cap.inset_ratio": "Einzugsverhältnis",
"ui.end_cap.inward": "Nach innen",
"ui.end_cap.length": "Länge",
"ui.end_cap.outward": "Nach außen",
"ui.end_cap.ratio": "Anteil der Dicke",
"ui.end_cap_title": "ENDKAPPE",
"ui.end_radius": "Endradius",
"ui.end_scale": "Endskalierung",
"ui.entities": "Elemente",
@@ -5191,7 +5325,10 @@
"ui.explode_needs_two_components": "Die Explosionsdarstellung zieht Komponenten auseinander, daher braucht die Konstruktion mindestens zwei davon (Neue Komponente, Konstruktion einfügen oder Komponenten aus Körpern erstellen)",
"ui.exportDxf": "Als DXF exportieren…",
"ui.export_ellipsis_keymap": "Exportieren…",
"ui.export_glb": "Als GLB exportieren",
"ui.export_keymap_tip": "Tasten, S-Box-Favoriten und die Symbolleiste als Datei",
"ui.export_selects_only_body": "Einzigen Körper beim Mesh-Export auswählen",
"ui.export_selects_only_body_tip": "Als STL exportieren, Als 3MF exportieren und An Slicer senden starten mit dem Körper des Designs ausgewählt, wenn es nur einen hat.",
"ui.extend": "Verlängern",
"ui.extent_type": "Ausdehnungstyp",
"ui.extract_component": "In Datei extrahieren…",
@@ -5249,6 +5386,8 @@
"ui.fine": "Fein",
"ui.finest": "Sehr fein",
"ui.finish_sketch": "Skizze beenden",
"ui.first_dimension_scales_about_origin": "Um den Skizzenursprung skalieren",
"ui.first_dimension_scales_about_origin_tip": "Ein: Die Zeichnung wird immer um den Skizzenursprung vergrößert oder verkleinert, eine vom Ursprung entfernt gezeichnete Form verschiebt sich also. Aus: Eine Zeichnung, die nichts an den Ursprung bindet, wird um ihre eigene Mitte skaliert und bleibt an ihrem Platz.",
"ui.fit": "Einpassen",
"ui.fix_unfix": "Fixieren/Lösen",
"ui.flat": "Flach",
@@ -5619,7 +5758,7 @@
"ui.pitch": "Steigung",
"ui.placement": "Platzierung",
"ui.placement_handles": "Platzierungsgriffe",
"ui.placement_handles_tip": "Eine Markierung zum Verschieben des Features über das Modell und ein Ring zum Drehen.",
"ui.placement_handles_tip": "Eine Markierung zum Verschieben des Features über das Modell und, wo sich das Feature drehen lässt, ein Ring zum Drehen.",
"ui.plane": "Ebene",
"ui.plane_at_angle": "Ebene im Winkel",
"ui.plugins": "Plugins",
@@ -5666,6 +5805,7 @@
"ui.project_references_construction_note": "Projizieren, Schneiden, 3D-Geometrie einbeziehen und die Flächenkanten einer neuen Skizze auf einer Fläche erzeugen Konstruktionsgeometrie: Bezüge zum Zeichnen, die nicht zu Profilen gehören. Sie bleiben mit dem Modell verknüpft.",
"ui.properties": "Eigenschaften",
"ui.properties.copy_matrix": "Matrix kopieren",
"ui.properties.copy_value": "Klicken, um den Wert zu kopieren",
"ui.properties.first_moments": "Statische Momente",
"ui.properties.inertia": "Trägheitsmoment",
"ui.properties.inertia_note": "Um den Massenschwerpunkt, in Weltachsen (g·{unit}²)",
@@ -5678,6 +5818,7 @@
"ui.properties.measuring_failed": "Die Messung wurde vor dem Ende abgebrochen.",
"ui.properties.principal_axis": "Hauptachse {number}",
"ui.properties.principal_moments": "Hauptträgheitsmomente",
"ui.properties.value_copied": "Wert kopiert",
"ui.pull_direction": "Entformungsrichtung",
"ui.quality": "Qualität",
"ui.quantity": "Anzahl",
@@ -5697,10 +5838,13 @@
"ui.relink_design_changed": "Die Baugruppe hat sich beim Wählen einer Quelle geändert. Starten Sie Quelle neu verknüpfen erneut.",
"ui.relink_done": "Quelle für alle Instanzen neu verknüpft.",
"ui.relink_not_linked": "Diese Komponente ist nicht mit einem Quelldesign verknüpft.",
"ui.relink_one_done": "Quelle für diese Instanz neu verknüpft.",
"ui.relink_select_one": "Wählen Sie zuerst eine verknüpfte Komponente oder eine ihrer Instanzen aus.",
"ui.relink_source_all": "Quelle neu verknüpfen (alle Instanzen)…",
"ui.relink_source_one": "Quelle neu verknüpfen…",
"ui.removeFromToolbar": "Aus der Symbolleiste entfernen",
"ui.removeSection": "Schnitt entfernen",
"ui.renameSelectedBodies": "Ausgewählte Körper umbenennen",
"ui.render": "Rendern",
"ui.renderer": "Renderer",
"ui.repeat": "Wiederholen",
@@ -5731,6 +5875,8 @@
"ui.ribbon_pin_footer": "Angeheftete Befehle erscheinen im Menüband. Fahren Sie über eine Zeile, um sie anzuheften oder zu lösen.",
"ui.ribbon_workspace": "Arbeitsbereich",
"ui.right": "Rechts",
"ui.right_click_confirms": "Rechtsklick bestätigt Dialogeingaben",
"ui.right_click_confirms_tip": "Bei offenem Dialog springt ein Rechtsklick in der Ansicht zur nächsten leeren Eingabe und führt bei der letzten OK aus",
"ui.save": "Speichern",
"ui.save_as": "Speichern unter",
"ui.save_mesh_no_slicer_open": "Kein Slicer gefunden: Wählen Sie „Benutzerdefiniert…“ und wählen Sie Ihr Slicer-Programm",
@@ -5826,6 +5972,7 @@
"ui.step_values": "Werte mit Pfeilen und Mausrad ändern",
"ui.step_values_tip": "Pfeil auf/ab und das Mausrad über einem Wertefeld ändern dessen Zahl.",
"ui.stitch_tolerance_hint": "eng",
"ui.straighten": "Ausrichten",
"ui.stretch": "Strecken",
"ui.supersampling": "Supersampling (SSAA)",
"ui.supersampling_adaptive": "Nur bei ruhender Ansicht",
@@ -5899,6 +6046,8 @@
"ui.view_angles_yaw": "Gieren",
"ui.view_angles_zero": "{axis} auf 0° setzen",
"ui.view_centre": "Ansichtszentrum",
"ui.view_compass_tip": "Ansicht von {axis}. Erneut klicken zum Umkehren. Ziehen zum Drehen.",
"ui.view_compass_tip_snap": "Ansicht von {axis}. Erneut klicken zum Umkehren. Ziehen zum Drehen; Umschalttaste halten zum Einrasten.",
"ui.viewport_status_clear": "{name} ausschalten",
"ui.viewport_status_clear_hint": "{name} ausschalten · Esc",
"ui.viewport_status_edges": "{count} Kanten",
+187 -2
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "Drag to move the hole; click to remove it",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "Drag to move the rest across the model. It snaps to sketch points on the face.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "Drag to move the snap fit across the model. It snaps to sketch points on the face.",
"Drag to place it on another face.": "Drag to place it on another face.",
"Drag to point the catch in another direction.": "Drag to point the catch in another direction.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.",
"Drive Joint": "Drive Joint",
@@ -513,6 +514,7 @@
"Offset Y": "Offset Y",
"Offset Z": "Offset Z",
"On your computer": "On your computer",
"One more stretch of the picked edge, each with its own angle, height and turns": "One more stretch of the picked edge, each with its own angle, height and turns",
"Opacity": "Opacity",
"Open GitHub": "Open GitHub",
"Open GitHub draft": "Open GitHub draft",
@@ -634,6 +636,7 @@
"Remove the track": "Remove the track",
"Remove this bend": "Remove this bend",
"Remove this point": "Remove this point",
"Remove this segment": "Remove this segment",
"Rename Feature": "Rename Feature",
"Rename Folder": "Rename Folder",
"Render Stage": "Render Stage",
@@ -723,6 +726,7 @@
"Section position": "Section position",
"Sections": "Sections",
"Sections (one sketch each)": "Sections (one sketch each)",
"Segments": "Segments",
"Select Features": "Select Features",
"Select Other": "Select Other",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "Spacing must be a non-zero number",
"Specialise": "Specialize",
"Speed": "Speed",
"Split Edge": "Split Edge",
"Splitting tool": "Splitting tool",
"Square": "Square",
"Stainless Steel": "Stainless Steel",
@@ -885,6 +890,7 @@
"Variable Radius": "Variable Radius",
"Variable radius": "Variable radius",
"Velocity": "Velocity",
"Vertical": "Vertical",
"Vertices": "Vertices",
"View": "View",
"View navigator": "View navigator",
@@ -938,6 +944,13 @@
"ai.prefs.connect_apps_note": "Off takes the entries out again.\n\nWhen SolidCraft starts, adds it as an MCP server to the AI apps found on this computer (OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code), so an agent can use it without any setup. Only the solidcraft entry is added or its path refreshed; an entry you changed is left alone, and the file is backed up first. Off: the entries it added are removed. Help > Connect AI assistants… does this by hand.",
"ai.prefs.connect_at_start": "Connect the last agent at start",
"ai.prefs.connect_at_start_note": "Starts the agent you connected last (or the default one) in the background each time SolidCraft starts, so it is ready for chatting. Not when SolidCraft is started with --control. If it cannot connect, the Assistant shows Connection failed and a Retry button.",
"ai.prefs.control_failed": "The control channel could not start: {error}",
"ai.prefs.control_from_launch": "Started with --control on port {port} for this run. Changes here take effect the next time SolidCraft starts without --control.",
"ai.prefs.control_listening": "Listening on 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Not listening",
"ai.prefs.control_port": "Port",
"ai.prefs.control_port_note": "The port AI agents connect to on this computer (127.0.0.1). 27878 is the default: when it is in use, the next free port is taken. Any other port is used exactly. Point your MCP client at the same port, for example solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "Port {port} is in use by another program (or another SolidCraft window). Choose another port.",
"ai.prefs.follow_camera": "Follow the camera",
"ai.prefs.follow_camera_off": "Automatic camera following is off.",
"ai.prefs.follow_camera_on": "The camera turns to face sketches the agent creates.",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "not on a part's face",
"browser.sketches_to_parts_part_missing": "their part is gone",
"browser.sketches_to_parts_result": "Moved {moved} sketches to the part they're on; {stayed} stayed: {why}",
"browser.straighten_angle": "Edge direction",
"browser.straighten_choose": "Choose Horizontal, Vertical or Angle for the edge, then press Straighten.",
"browser.straighten_click_a": "Click the image at one end of an edge that should be straight, or type its coordinates.",
"browser.straighten_click_b": "Click the other end of the edge, or type its coordinates.",
"browser.straighten_horizontal": "Horizontal",
"browser.straighten_title": "Straighten: {name}",
"browser.straighten_vertical": "Vertical",
"browser.units": "Units: {units}",
"cam.flat": "Flat face",
"cam.follower": "Follower",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "Pick Up Appearance",
"cmd.appearance_replace": "Replace Appearance",
"cmd.assembly_bom": "Bill of Materials",
"cmd.assembly_constraint_create": "Constrain",
"cmd.assembly_constraint_edit": "Edit Constraint",
"cmd.assembly_mass_properties": "Mass Properties",
"cmd.body.print_face": "Print Face",
"cmd.body_rename": "Rename Body",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "Delete Canvas",
"cmd.canvas_edit": "Edit Canvas",
"cmd.canvas_insert": "Canvas",
"cmd.canvas_straighten": "Straighten Canvas",
"cmd.canvas_to_sketch": "Canvas to Sketch",
"cmd.component_activate": "Activate Component",
"cmd.component_break_link": "Break Link",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "Configuration Rule",
"cmd.config_rules": "Configuration Rules",
"cmd.config_table": "Display Configuration Table",
"cmd.construct.axis": "Axis",
"cmd.construct.plane": "Plane",
"cmd.construct.plane.axis_point": "Plane Through Axis And Point",
"cmd.construct.point": "Point",
"cmd.construct_axis_edge": "Axis Through Edge",
"cmd.construct_axis_normal_to_face": "Axis Perpendicular To Face",
"cmd.construct_axis_through_cylinder": "Axis Through Cylinder/Cone/Torus",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "Save As Mesh",
"cmd.file_send_to_slicer": "Send to Slicer",
"cmd.file_slicers": "Installed Slicers",
"cmd.frame_end_cap": "End Cap",
"cmd.frame_member": "Frame Member",
"cmd.frame_profile_insert": "Insert Profile",
"cmd.frame_profile_list": "Profile Library",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "Isocurve Analysis",
"cmd.inspect_minimum_radius": "Minimum Radius Analysis",
"cmd.inspect_parameter_sweep": "Parameter Sweep",
"cmd.inspect_parameter_variants": "Compare Parameter Variants",
"cmd.inspect_silhouette": "Silhouette",
"cmd.inspect_zebra": "Zebra Analysis",
"cmd.joint_as_built": "As-Built Joint",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "Motion Trace",
"cmd.motion_trace_edit": "Edit Motion Trace",
"cmd.motion_trace_keep": "Keep Motion Trace",
"cmd.note_add": "Add Note",
"cmd.note_delete": "Delete Note",
"cmd.note_list": "List Notes",
"cmd.note_update": "Edit Note",
"cmd.occurrence_align": "Align Occurrence",
"cmd.occurrence_copy": "Paste (Instance)",
"cmd.occurrence_drag": "Drag Occurrence",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "Render Image",
"cmd.render_status": "Render Progress",
"cmd.select_clear": "Clear Selection",
"cmd.selection_get": "Get Selection",
"cmd.settings_profile_apply": "Apply Settings Profile",
"cmd.settings_profile_delete": "Delete Settings Profile",
"cmd.settings_profile_export": "Export Settings Profile",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "Suppress Feature",
"cmd.ui.assistant": "Toggle Assistant",
"cmd.ui.palette": "Search Commands",
"cmd.ui.toggle_visibility": "Show/Hide Selection",
"cmd.view.navigator": "Custom View Navigator",
"cmd.view.render_browser": "Render Browser",
"cmd.view.render_dock": "Move Render Dock",
@@ -1567,6 +1601,7 @@
"color.step_down": "Step down",
"color.step_up": "Step up",
"color.value": "Value, the brightness (percent)",
"component.error.ambiguous_name": "Several components are named `{name}`. Use a numeric component ID: {ids}.",
"config.column_filter_empty": "No matching columns",
"config.rule_parameter_columns": "Only parameters with a column in the table are listed. Add one with Add Column (+) to use it here.",
"config.rule_suppression_columns": "Only features with a Suppress column in the table are listed. Add one with Add Column (+) to drive it here.",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: the reference `{reference}` no longer exists as it was picked; reselect it",
"dialog.bodies_count": "{count} bodies",
"dialog.clearance_invalid": "the clearance must be a length of 0 or more",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "Compute",
"dialog.compute_again": "Compute again",
"dialog.computing": "Computing… {seconds} s",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "Only a number steps; an expression stays as typed",
"dialog.dimension_step_up": "Up by {step}",
"dialog.edit_title": "EDIT {title}",
"dialog.hole_held_off_its_line": "The reference edge holds this hole on a line that leaves the face before the picked point. Pick where the line crosses the face, or take the edge out to move the hole freely.",
"dialog.no_shown_body": "No shown body to change: show one, or choose New Body",
"dialog.pattern_sketch_not_object": "Pick bodies or features: a sketch is neither. Repeat its curves with the sketch's own Pattern or Mirror, or extrude it first.",
"dialog.primitive_point_tip": "A point that fills X, Y and Z: click here, then click a vertex, edge or face of the model, a point of a sketch, or the origin.",
"dialog.reference_edge_tip": "A straight edge of the picked face to measure the distance below from: click here, then click the edge.",
"dialog.right_click_pick": "Select {input} first",
"dialog.select": "↖ Select",
"dialog.selected_count": "↖ {count} selected",
"dialog.selection_constraint": "Constraint {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "{name} changed on disk",
"document.changed_on_disk_detail": "{name} was changed by another program or computer since you opened or last saved it. Overwrite replaces those changes with yours; Save a Copy keeps both.",
"document.copy_name": "{name} copy",
"document.discard_row": "Discard",
"document.finish_save_prompt": "Finish answering the save prompt before opening another design.",
"document.newer_file": "Saved by a newer SolidCraft (format {format}, this version reads up to {reads}). If something's missing, update.",
"document.newer_file_change": "Saved by a newer SolidCraft (format {format} with `{change}`, which this version doesn't know). If something's missing, update.",
"document.newer_file_not_read": "Not read: {what}. Saving keeps it.",
"document.not_saved_yet": "Not saved yet",
"document.open_anyway": "Open Anyway",
"document.open_elsewhere": "{name} is already open",
"document.open_elsewhere_detail": "{name} is open in SolidCraft {app} on {who}, opened {when}. If you both save, one of you loses work. Open it read-only to look at it without saving over it.",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "This design was opened read-only: save it as a new file",
"document.save_changes": "Save changes to {name}?",
"document.save_copy": "Save a Copy…",
"document.save_many": "Save changes to {n} designs?",
"document.save_row": "Save",
"document.save_selected": "Save Selected",
"document.tab_unsaved_changes": "Unsaved changes",
"document.unsaved_changes": "{name} has unsaved changes. If you don't save, they are lost.",
"drive.rigid": "{joint} is a rigid joint: it holds its parts still, so it has nothing to drive. To let them move, change its type in Edit Joint: Revolute to rotate, Slider to slide, Cylindrical for both.",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "Curve tolerance",
"dxf.tolerance_help": "Visible bodies and shown sketches only. Curves use straight segments. Smaller tolerance gives finer curves and uses more time and memory.",
"each rail's curves must be in one sketch": "each rail's curves must be in one sketch",
"error.end_cap_faces": "Pick at least one open end face of a frame member",
"error.end_cap_unresolved": "End {ends} of this cap is no longer on the model. Pick the end faces again",
"feature computation ended without a result": "feature computation ended without a result",
"file.open.drawing_filter": "Designs, CAD files, meshes and drawings",
"file.open.portal_fallback.no_portal_service": "The file chooser that opened is not the desktop's own: the desktop portal service is not available.",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "Inserting geometry",
"file_load.link_item": "{name} ({done} of {total})",
"file_load.opened": "Opened {name}",
"file_load.opened_behind": "{name} opened in a new tab",
"file_load.opened_in_tab": "Opened {name} in a new tab",
"file_load.opening": "Opening design",
"file_load.preparing_thumbnail": "Preparing the thumbnail...",
@@ -1725,11 +1772,13 @@
"help.config.table": "Shows the configuration table: one row per variant, one column per parameter or feature, and whether the design still matches the active row. Use it to review the variants of a design.",
"help.connect_note": "Restart each assistant to load the SolidCraft server. Each file was backed up as .bak before it changed.",
"help.connect_title": "Connect AI assistants",
"help.construct.axis": "Creates a construction axis with the method your picks call for: along an edge or line, through a hole or round face, where two planes meet, through two points, or square to a face through a point. Use it when you know the references and not the method.",
"help.construct.axis.edge": "Creates a construction axis along a straight edge or sketch line. Use it as the axis for a revolve, a circular pattern or a joint.",
"help.construct.axis.normal_to_face": "Creates a construction axis through a point, square to a face. Use it as an axis that stands straight out of a surface.",
"help.construct.axis.through_cylinder": "Creates a construction axis through the centre of a cylinder, cone or torus face, or a circular edge. Use it to turn or pattern features around a round part.",
"help.construct.axis.two_planes": "Creates a construction axis where two planes or flat faces meet. Use it when the axis you need is the line between two faces.",
"help.construct.axis.two_points": "Creates a construction axis through two points, vertices or sketch points. Use it for an axis that runs between two known positions.",
"help.construct.plane": "Creates a construction plane with the method your picks call for: offset from a plane, through a point, between two planes, through lines or points, tangent to a curved face, or square to a path. Use it when you know the references and not the method.",
"help.construct.plane.along_path": "Creates a construction plane square to an edge or curve, at a position along it. Use it to sketch a profile for a sweep or a section of a path.",
"help.construct.plane.at_angle": "Creates a construction plane turned by an angle from a plane or face, about an axis or edge. Turn on Use axis direction only to project the axis onto the base and pivot about a point on that plane (the base origin when none is picked). Use it for sloped sketches, such as an angled bracket.",
"help.construct.plane.axis_point": "Creates a construction plane containing an axis and a point off that axis. Pick an origin or construction axis, a straight edge or sketch line, then a vertex, sketch point or construction point. A point on the axis cannot define a unique plane.",
@@ -1739,6 +1788,7 @@
"help.construct.plane.tangent": "Creates a construction plane that touches a cylinder, cone, sphere or torus at a point. Use it to sketch on the side of a round part.",
"help.construct.plane.three_points": "Creates a construction plane through three points. Use it for a plane set by positions on the model, such as three corners.",
"help.construct.plane.two_edges": "Creates a construction plane through two straight edges or lines that lie in one plane. Use it for a plane across a part, such as through two opposite edges.",
"help.construct.point": "Creates a construction point with the method your picks call for: at a vertex, at the centre of a circle or sphere, along an edge, where two lines or three planes meet, or where a line crosses a plane. Use it when you know the references and not the method.",
"help.construct.point.along_path": "Creates a construction point at a position along an edge or curve. Use it as a reference partway along a path.",
"help.construct.point.center": "Creates a construction point at the centre of a circular edge, sketch circle or arc, sphere or torus. Use it as a reference for holes, axes and joints.",
"help.construct.point.edge_plane": "Creates a construction point where an edge or line passes through a plane or flat face. Use it to mark where a path crosses a plane.",
@@ -1764,6 +1814,7 @@
"help.file.send_to_slicer": "Saves the selected bodies as a 3MF file and opens it in the slicer you choose. Use it to go from the model to printing in one step.",
"help.font_details": "The interface uses egui's built-in fonts (Ubuntu Light and Hack, under the Ubuntu Font Licence and the MIT/Bitstream Vera license; Noto Emoji and the emoji icon font, under the OFL and MIT). Sketch text uses Liberation Sans (SIL OFL 1.1). The Crafting Apps' optional font pack, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), is not bundled in SolidCraft builds.",
"help.fonts": "Fonts",
"help.frame.end_cap": "Closes the open ends of frame members with plates shaped like the profile's outline. Use it to seal tubes, angles and beams, on top of the end or set into it.",
"help.frame.member": "Places a profile, such as a tube or an aluminium extrusion, along the lines of a frame sketch, one member per line. Use it to build frames, racks and welded structures.",
"help.inspect.accessibility": "Colours the faces a tool can reach from one direction, and those it cannot. Use it to check a part for machining or moulding from that side.",
"help.inspect.center_of_mass": "Shows the centre of mass of bodies, each on its own and all together, at uniform density. Use it to check balance and where a part will tip.",
@@ -2240,6 +2291,9 @@
"measure.at": "At",
"measure.item": "Item {number}",
"measure.line_to_centre": "Line to center",
"measure.perimeter": "Perimeter",
"measure.perimeter_inner": "Inner perimeter",
"measure.perimeter_outer": "Outer perimeter",
"measure.quick_copied": "Measurement copied",
"measure.quick_copy": "Click to copy the measurement",
"measure.quick_edges": "{count} edges",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt+left drag pans, Shift+Alt+left zooms, Ctrl+left drag on empty space orbits",
"nav.inventor.help": "Middle drag pans, Shift+middle orbits, Ctrl+middle zooms, right drag orbits",
"nav.maya.help": "Alt+left drag orbits, Alt+middle pans, Alt+right zooms; middle drag also pans",
"nav.maya_horizontal_zoom.help": "Alt+right drag: right zooms in, left zooms out. Turn off to restore vertical drag zoom.",
"nav.maya_horizontal_zoom.label": "Maya: horizontal drag zoom",
"nav.nx.help": "Middle drag orbits, Shift+middle pans (NX's middle + right), Ctrl+middle zooms (NX's middle + left); right drag leaves the camera",
"nav.openscad.help": "Left drag on empty space orbits, Shift+left drag box-selects, sketch geometry drags edit; right or middle drag pans, Shift+right or Shift+middle drag zooms",
"nav.orbit_cursor_wrap.help": "An orbit drag that reaches the edge of the view moves the cursor to the opposite edge and keeps turning. Off: the drag stops at the edge of the screen. Has no effect on Wayland or in the browser.",
@@ -2411,6 +2467,16 @@
"not a move": "not a move",
"not a number": "not a number",
"open a sketch first": "open a sketch first",
"operations.cancel": "Cancel {name}",
"operations.cancelled": "{name} cancelled",
"operations.cancelling": "Cancelling…",
"operations.cannot_cancel": "{name} can't be cancelled",
"operations.feature": "Feature",
"operations.feature_edit": "Edit feature",
"operations.meshing": "Loading parts",
"operations.queued": "Queued",
"operations.stopped": "Cancelled",
"operations.waiting": "Ready",
"parameters.apply_live": "Apply each change as you leave its field",
"parameters.apply_live_tip": "Off: changes wait until Apply or OK, then the design rebuilds once for all of them. Cancel or Escape drops them.",
"parameters.held": "{count} changes waiting for Apply",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "3D view colors",
"prefs.appearance.viewport_logo": "Viewport and logo",
"prefs.applies_on_restart": "Applies on restart",
"prefs.assemblies": "Assemblies",
"prefs.assistant": "Assistant",
"prefs.assistant_connecting": "Connecting",
"prefs.assistant_follow_help": "Look At sketches move the view with the pointer.",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "Choose font file…",
"prefs.click": "Click",
"prefs.command_dialog_values": "Command dialogs",
"prefs.constraint_glyph_size": "Constraint glyph size",
"prefs.constraint_glyph_size_note": "How large constraint glyphs and their letters or icons are drawn in a sketch. 100% is the usual size; glyphs keep this screen size at every zoom.",
"prefs.construct_menu_groups": "Group Construct tools by entity type",
"prefs.construct_menu_groups_help": "Show Planes, Axes and Points headings. Off keeps the original menu order.",
"prefs.contact_shading": "Soft contact shading",
"prefs.contact_shading_note": "Soft shading where parts come close.",
"prefs.context_menu": "Context menu",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "Imported files",
"prefs.design_tools.note": "Note",
"prefs.design_tools.off": "Off",
"prefs.design_tools.placement_group": "Rest, Boss, Snap Fit",
"prefs.design_tools.placement_group": "Placed features",
"prefs.design_tools.rows": "Rows",
"prefs.devices": "3D mouse",
"prefs.dialog_buttons": "Dialog buttons",
"prefs.dialog_first_letter_buttons": "Dialog buttons answer their first letter",
"prefs.dialog_first_letter_buttons_help": "With a dialog open, typing the first letter of a button's label presses it: O for OK, C for Cancel. A letter that fits two buttons does nothing, and a focused text field keeps the keystroke. Off: typing does nothing to the buttons, as before.",
"prefs.dialogs": "Dialogs",
"prefs.dialogs_edge": "At the view's edge",
"prefs.dialogs_left_column": "In the left column",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "In a window",
"prefs.display": "Display",
"prefs.edges": "Edges and shading",
"prefs.export": "Export",
"prefs.export_name": "Export file name",
"prefs.export_name.body": "Exported body's name (the first one when there are several)",
"prefs.export_name.design": "Design name",
"prefs.export_name_hint": "e.g. {design}-{body}",
"prefs.export_name_sample": "Exporting this design offers: {name}",
"prefs.export_name_tip": "The file name File › Export and Save As Mesh offer. These placeholders are replaced:\n{placeholders}\nA design property that is not set is left out. Leave the field empty to offer the design's name, or the body's for a mesh.",
"prefs.extend": "Extend",
"prefs.extra_navigation": "Ctrl+left drag on empty space orbits; hold Space to pan.",
"prefs.extrude_arrow_face_stops": "Extrude arrow stops at faces",
"prefs.extrude_arrow_face_stops_note": "Dragging Extrude's distance arrow stops at flat faces parallel to the profile, such as the far side of a block being cut, and outlines the face. Off: the arrow moves in round steps only.",
"prefs.extrude_view_isometric": "Turn the view to isometric when Extrude opens",
"prefs.extrude_view_return": "Go back to the earlier view when Extrude closes",
"prefs.file_operations_wait": "Wait for files to open",
"prefs.file_operations_wait_note": "While a file opens or is inserted, or links are read again, the design waits behind a card with the file's progress and Cancel. Off: the file shows in the operations panel and you can keep working; an insert lands once you finish what you are doing, and a file opened meanwhile goes in a new tab.",
"prefs.fillet_legacy_radius": "Use the previous Solid Fillet radius default",
"prefs.fillet_legacy_radius.help": "Off by default. When on, a new Solid Fillet opens at the number 2 read in the design's units (\"2 in\" in an inch design), as before; when off, it opens at the radius the tool ships with, 2 mm, shown in the design's units (\"0.07874 in\" in an inch design).",
"prefs.follows_os": "Follows the OS",
"prefs.font": "Font",
"prefs.font_fallback": "Glyphs the chosen font lacks fall back to the built-in font, so no label shows an empty box.",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "Pan",
"prefs.gesture_zoom": "Zoom",
"prefs.graphics": "Graphics",
"prefs.graphics_api": "Graphics API",
"prefs.graphics_api_auto": "Automatic",
"prefs.graphics_api_help": "Choose the graphics API used to open SolidCraft. If the next start cannot open the window, the previous choice is restored.",
"prefs.graphics_api_override": "A launch override is controlling the graphics API. The saved choice will apply when SolidCraft is opened normally.",
"prefs.graphics_api_restart_note": "Applies after a restart. Unsaved designs are handled before closing.",
"prefs.graphics_api_restart_unavailable": "Restart SolidCraft to apply the saved graphics API.",
"prefs.graphics_api_running": "Current: {current}. Selected for next start: {selected}.",
"prefs.graphics_api_save_failed": "The graphics API choice could not be saved: {error}",
"prefs.graphics_api_start_failed": "The selected graphics API could not be prepared: {error}",
"prefs.graphics_api_start_reverted": "The previous start with {requested} did not open the window. SolidCraft restored {previous}.",
"prefs.graphics_api_unavailable": "Graphics API selection is available in the desktop app.",
"prefs.graphics_card": "Graphics card",
"prefs.graphics_card_auto": "Automatic",
"prefs.graphics_card_missing": "The saved graphics card is unavailable; Automatic is used.",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "In order",
"prefs.history_sketches_note": "With Sketches set to Under their feature, the History at the left lists each sketch one level in, under the first feature built from it, whenever it is wide enough for names. The timeline at the bottom always keeps the creation order.",
"prefs.history_sketches_under_feature": "Under their feature",
"prefs.history_steps_component": "History steps by component",
"prefs.history_steps_component_note": "With a component active or picked, the History controls step through that component's features, as the History at the bottom shows them. Off: they step through every feature of the design. The History on the left or under the browser always steps through every feature.",
"prefs.hold_stop_snapping": "Hold to stop snapping",
"prefs.home_fit_size": "Home and Fit size",
"prefs.home_fit_size_note": "How much of the view the model fills when Home, Fit, an opened design or a navigator view change frames it, whether or not the setting below is on. 100 %: fills the view between the panels, the compass and the navigation bar.",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "The two curved arrows at the cube's corner roll the view within the screen plane. On: the clockwise arrow rolls counterclockwise and the counterclockwise arrow rolls clockwise. Off: each arrow rolls the view the way it curls.",
"prefs.invert_navigator_arrows": "Invert the view cube rotation arrows",
"prefs.invert_navigator_arrows_note": "The arrows around the cube orbit the camera the way they point, as in Fusion and Inventor: the arrow on the left points right and swings the camera right. Off: an arrow rotates the cube toward the side it sits on, so the left arrow swings the camera left. The curved roll arrows are not affected.",
"prefs.joint_drag_trackball": "Turn parts on a ball joint like a trackball when dragged",
"prefs.joint_drag_trackball_help": "Dragging a part that a ball joint holds turns it by the smallest turn about the joint, as if rolling a ball the size of the part. Off: the point you grabbed follows the pointer exactly, and the part may also spin about it.",
"prefs.keep_unsaved_also_asks": "Still ask when the tab closes",
"prefs.keep_unsaved_also_asks_tip": "With this off, the tab closes without the browser's box once every unsaved design's copy is current.",
"prefs.keep_unsaved_in_browser": "Keep unsaved work in this browser",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "not on this GPU",
"prefs.on": "On",
"prefs.opaque": "Opaque",
"prefs.operations_panel": "Show operations in the view",
"prefs.operations_panel_note": "Long operations (opening a file, computing a feature, an agent's command) show in the view's bottom-right corner with their progress and a button that cancels them. Off: a Computing notice, as before.",
"prefs.orbit_snap": "Hold Shift during orbit to snap to an axis.",
"prefs.orientation": "Orientation",
"prefs.origin_plane_names": "Origin plane names",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "Show only the ribbon's tabs",
"prefs.ribbon_tabs_only_note": "The ribbon folds to its tab row. Clicking a tab shows its panels over the view until a command starts or the pointer leaves them. Ribbon Tabs Only in the View tab, or its shortcut, switches this.",
"prefs.right_click": "Right click",
"prefs.save_prompt_one_at_a_time": "Ask about each unsaved design separately when closing several",
"prefs.save_prompt_one_at_a_time_help": "Show one save prompt per unsaved design instead of a combined list.",
"prefs.saving": "Start and save",
"prefs.scale_note": "Also Ctrl + / Ctrl − in the window. Buttons are 28 px at 100%.",
"prefs.scale_text": "Scale and text",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "Center-point arc follows the cursor",
"prefs.sketch.click_selects": "Click selects",
"prefs.sketch.conflict_colour": "Conflict color",
"prefs.sketch.cursor_coordinates": "Show the cursor's coordinates in a sketch",
"prefs.sketch.cursor_coordinates_note": "Beside the pointer, its X and Y from the sketch origin, also with no tool running. Off: only while a tool places a point.",
"prefs.sketch.drawing": "Drawing",
"prefs.sketch.ellipse_axes": "Draw ellipses with their axes",
"prefs.sketch.ellipse_axes_note": "The major and minor axes as construction lines, so the half-axes and axes can be dimensioned. Off: the ellipse alone, and D on it gives its minor radius wherever the value is pulled, drawn and labelled R as before.",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "Faces and edges",
"prefs.sketch.hide_glyphs": "Hide glyphs zoomed out",
"prefs.sketch.marks": "Marks in the sketch",
"prefs.sketch.max_points": "Largest sketch",
"prefs.sketch.max_points_note": "The most points or curves one sketch holds: 20000 by default, at most 200000. Insert SVG and Insert DXF refuse a larger drawing. A large sketch solves and draws more slowly.",
"prefs.sketch.max_points_unit": "points",
"prefs.sketch.note": "Drawing, snapping and selecting.",
"prefs.sketch.opening_closing": "Opening and closing",
"prefs.sketch.prefer_free_points": "Prefer movable points where they overlap",
"prefs.sketch.project_options": "Ask for Project options first",
"prefs.sketch.recent_snap": "Snap to where two guides cross",
"prefs.sketch.select_3d_curve_points": "Select 3D sketch curve points",
"prefs.sketch.select_3d_curve_points_help": "Show and select points on drawn 3D sketch curves for construction references.",
"prefs.sketch.select_other_hidden": "Select Other reaches hidden geometry",
"prefs.sketch.shortcut_cycles_modes": "Shortcut again switches mode",
"prefs.sketch.shortcut_cycles_modes_tip": "Off: it starts the tool again.",
"prefs.sketch.snap_to_visible_grid": "Snap to the grid's visible crossings",
"prefs.sketch.snapping_guides": "Snapping and guides",
"prefs.sketch.state_icons": "State icons",
"prefs.sketch.tracking_guides": "Center and midpoint guides",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "Sketch & selection",
"prefs.sketch_selection_heading": "Sketch and selection",
"prefs.sketch_selection_note": "How sketches snap and how clicks select.",
"prefs.sketch_snap_to_visible_grid_note": "A point in a sketch snaps to the crossings of the lines the grid draws when the pointer means one, and to the finer lattice between them otherwise. Off: the point snaps to the finer lattice only, as before.",
"prefs.sketch_state_icons": "Sketch icons in the color of their state",
"prefs.sketch_state_icons_note": "In History and the browser, a sketch's icon takes the color of its state (under constrained, fully constrained or conflicting) and its tooltip names the state. Off: every sketch has the same icon.",
"prefs.sketch_tab_always": "Keep the Sketch tab shown",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "opaque PBR requires opacity 1",
"render.error_physical_glass": "the selected recipe is not physical glass",
"render.error_preview_device": "product preview requires an installed device with a depth buffer",
"render.error_product_placement": "invalid product placement",
"render.error_product_triangle": "invalid product triangle",
"render.error_provisional_identity": "invalid provisional render identity or sample count",
"render.error_quality_bounds": "quality projection exceeds native bounds",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "Try again",
"render.gpu_seed": "Random seed",
"render.gpu_unavailable": "GPU path tracing is not ready on this device.",
"render.graphics_api_restart_vulkan": "Restart with Vulkan",
"render.graphics_api_restart_warning": "Changing graphics API restarts SolidCraft and asks you to save unsaved designs. If the new API cannot open the window, the previous choice is restored on the next start.",
"render.graphics_api_settings": "Graphics settings",
"render.graphics_api_vulkan_required": "GPU path tracing needs Vulkan in this session. Restart with Vulkan, or keep using a CPU image method.",
"render.ground_apply": "Fit and save ground",
"render.ground_gap": "Explicit clearance gap",
"render.ground_linear_rgb": "Diffuse reflectance · linear RGB",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "3D Spline: click fit points in 3D; right-click or Esc to finish",
"sketch.hint.trim": "Trim: click the piece of a curve to remove, or drag across the pieces to remove",
"sketch.make_selection": "Convert the selection to {linetype}",
"sketch.move_released": "Moved: {count} constraints tying it to what stays were let go ({names}).",
"sketch.move_released_one": "Moved: {count} constraint tying it to what stays was let go ({names}).",
"sketch.open_ends": "Open {count}",
"sketch.status_conflict": "constraints conflict",
"sketch.status_fully_constrained": "fully constrained",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "Take the text off its curve",
"sketch_text.path_hint": "A curve of the sketch the text follows: click here, then the curve",
"sketch_text.use_font_file": "Use the font file {path}",
"sketch_text.valign_baseline": "Baseline",
"sketch_text.valign_bottom": "Bottom",
"sketch_text.valign_middle": "Middle",
"sketch_text.valign_top": "Top",
"solid": "solid",
"status.editing": "Editing {name}",
"status.navigation": "Mouse mapping: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "Allow once",
"ui.agent_chat_allowed": "Allowed",
"ui.agent_chat_answered": "Answer: {option}",
"ui.agent_chat_answered_in": "Answered in {time}",
"ui.agent_chat_approval": "Allow the agent to do this?",
"ui.agent_chat_attach_selection": "Attach selection",
"ui.agent_chat_attach_selection_tip": "Send what is selected in the model (faces, edges, features, bodies) with the message, so the agent knows what you mean",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "Bodies",
"ui.agent_chat_ctx_elements": "Elements",
"ui.agent_chat_ctx_features": "Features",
"ui.agent_chat_ctx_gone": "No longer in the design: it was changed or deleted.",
"ui.agent_chat_ctx_more": "+{n} more",
"ui.agent_chat_ctx_other": "Other",
"ui.agent_chat_custom_heading": "Custom model",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "Dock on the right",
"ui.agent_chat_drop_hint": "Drop to attach to your next message",
"ui.agent_chat_edit": "Edit",
"ui.agent_chat_ended_after": "Ended after {time}",
"ui.agent_chat_exited": "The agent stopped.",
"ui.agent_chat_failed_start": "The agent could not start: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: a CAD file is imported into the design, not read",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "{model} can't use SolidCraft's tools, so it can only chat. Pick a model with tool support.",
"ui.agent_chat_model_rejected": "The agent did not accept {model}: {error}",
"ui.agent_chat_model_search": "Search models…",
"ui.agent_chat_model_search_or_id": "Search, or type any model id…",
"ui.agent_chat_model_tip": "The model the agent uses. Your choice is remembered for this agent.",
"ui.agent_chat_models_failed": "Couldn't list models: {error}",
"ui.agent_chat_models_heading": "Available models",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "Next picture",
"ui.agent_chat_no_cli": "solidcraft-cli was not found next to the app, so the agent can't reach the design.",
"ui.agent_chat_no_control": "The agent chat's endpoint did not start, so the agent can't reach the design.",
"ui.agent_chat_no_design_hint": "The agent runs without SolidCraft's tools, so it can't read or change the design: solidcraft-cli was not found next to the app. Install SolidCraft with solidcraft-cli beside it (on Windows, the MSI or the portable zip), or set SOLIDCRAFT_CLI to its path, then connect again.",
"ui.agent_chat_no_images": "This agent doesn't take pictures",
"ui.agent_chat_no_picture": "There is no picture on the clipboard",
"ui.agent_chat_no_tool_call": "The model didn't use SolidCraft's tools, so the design wasn't changed. Choose a model that supports tool calling; see Local models in the agent chat guide.",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "Set up an assistant",
"ui.agent_chat_side": "Dock the chat",
"ui.agent_chat_signed_in": "signed in",
"ui.agent_chat_snap_none_found": "No coding agent found. The Snap package is confined, so it cannot see or start the coding agents installed on this computer. To use them, install SolidCraft from the AppImage, .deb or .rpm package instead. An agent that uses an OpenAI-compatible API works in the Snap package too: set one up with Add agent.",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_state_auth": "Sign-in needed",
"ui.agent_chat_state_busy": "Working…",
"ui.agent_chat_state_exited": "Agent stopped",
"ui.agent_chat_state_failed": "Connection failed",
"ui.agent_chat_state_no_design": "No design access",
"ui.agent_chat_state_off": "Not connected",
"ui.agent_chat_state_ready": "Ready",
"ui.agent_chat_state_starting": "Starting…",
"ui.agent_chat_stop": "Stop",
"ui.agent_chat_stop_tip": "Stop the agent and everything it started",
"ui.agent_chat_stop_turn_tip": "Stop the agent (Esc). Queued messages stay queued.",
"ui.agent_chat_thinking_for": "Thinking for {time}",
"ui.agent_chat_tool_running_for": "running for {time}",
"ui.agent_chat_tools_not_started": "The agent runs without SolidCraft's tools, so it can't read or change the design: solidcraft-cli was found, but its tools did not start (the error in the chat says why). Connect again; if it keeps happening, reinstall SolidCraft.",
"ui.agent_chat_transcript_assistant": "Assistant:",
"ui.agent_chat_transcript_user": "User:",
"ui.agent_chat_turn_limit": "Changes per message",
"ui.agent_chat_turn_unlimited": "Unlimited",
"ui.agent_chat_undo_changes": "Undo these changes",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "{count} body",
"ui.browser_bodies_other": "{count} bodies",
"ui.browser_collapse": "Collapse the browser",
"ui.browser_collapse_below": "Collapse Below",
"ui.browser_expand": "Expand the browser",
"ui.browser_expand_below": "Expand Below",
"ui.browser_title": "Browser",
"ui.calibrate": "Calibrate",
"ui.cancel": "Cancel",
@@ -5269,6 +5409,7 @@
"ui.collapse": "Collapse",
"ui.collinear": "Collinear",
"ui.colour_vision": "Color vision",
"ui.colour_vision_bends": "Bends",
"ui.colour_vision_deutan": "Deutan",
"ui.colour_vision_deutan_tip": "For a weak or missing green sense",
"ui.colour_vision_failed": "Failed",
@@ -5298,6 +5439,14 @@
"ui.conic_curve": "Conic Curve",
"ui.constant": "Constant",
"ui.constraints_conflict": "Constraints conflict",
"ui.construct_auto.chosen": "Chosen from your picks. Pick another reference, or take one out, to change the method.",
"ui.construct_auto.no_fit": "Pick other references: no method builds from these.",
"ui.construct_auto.pick": "Pick what to build from: the method follows from your picks.",
"ui.construct_auto.refs": "References",
"ui.construct_auto.select": "Select references to build from first",
"ui.construct_axes": "Axes",
"ui.construct_planes": "Planes",
"ui.construct_points": "Points",
"ui.construction": "Construction",
"ui.construction.angle_hint": "Construction line: click a point, then type an angle or pick a direction",
"ui.construction.axis_hint": "Construction line: click a point, or type its distance from the sketch axis",
@@ -5450,6 +5599,17 @@
"ui.ellipse": "Ellipse",
"ui.emboss_wrap_note": "Orthogonal line profiles tangent to one supported cylinder wrap automatically. Pick a wall to choose a target.",
"ui.end": "End",
"ui.end_cap.chamfer": "Corner Chamfer",
"ui.end_cap.direction": "Direction",
"ui.end_cap.faces": "End Faces",
"ui.end_cap.inset": "Inset",
"ui.end_cap.inset_kind": "Inset By",
"ui.end_cap.inset_ratio": "Inset Ratio",
"ui.end_cap.inward": "Inward",
"ui.end_cap.length": "Length",
"ui.end_cap.outward": "Outward",
"ui.end_cap.ratio": "Ratio of thickness",
"ui.end_cap_title": "END CAP",
"ui.end_radius": "End Radius",
"ui.end_scale": "End Scale",
"ui.ends": "Ends",
@@ -5470,7 +5630,10 @@
"ui.explode_needs_two_components": "Exploded View pulls components apart, so the design needs two or more of them (New Component, Insert Design or Create Components from Bodies)",
"ui.exportDxf": "Export DXF…",
"ui.export_ellipsis_keymap": "Export…",
"ui.export_glb": "Export GLB",
"ui.export_keymap_tip": "Keys, S box favorites and the toolbar, as a file",
"ui.export_selects_only_body": "Select the only body when exporting a mesh",
"ui.export_selects_only_body_tip": "Export STL, Export 3MF and Send to Slicer start with the design's body selected when it has just one.",
"ui.extend": "Extend",
"ui.extent": "Extent",
"ui.extent_type": "Extent Type",
@@ -5530,6 +5693,8 @@
"ui.finest": "Finest",
"ui.finish_sketch": "Finish Sketch",
"ui.first_dimension_scales": "The first dimension scales the drawing",
"ui.first_dimension_scales_about_origin": "Scale about the sketch origin",
"ui.first_dimension_scales_about_origin_tip": "On: the drawing always grows or shrinks about the sketch origin, so a shape drawn away from the origin moves. Off: a drawing that nothing ties to the origin scales about its own middle and stays where it was drawn.",
"ui.first_dimension_scales_tip": "On: a sketch's first length dimension scales the drawing it measures, so its shape stays the same. Off: the dimension sizes only what it measures.",
"ui.fit": "Fit",
"ui.fix_unfix": "Fix/Unfix",
@@ -5905,7 +6070,7 @@
"ui.pitch": "Pitch",
"ui.placement": "Placement",
"ui.placement_handles": "Placement handles",
"ui.placement_handles_tip": "A marker to drag the feature across the model and a ring to turn it.",
"ui.placement_handles_tip": "A marker to drag the feature across the model and, where the feature can turn, a ring to turn it.",
"ui.plane": "Plane",
"ui.plane_at_angle": "Plane at Angle",
"ui.plugins": "Plugins",
@@ -5952,6 +6117,7 @@
"ui.project_references_construction_note": "Project, Intersect, Include 3D Geometry and the face edges of a new sketch on a face make construction geometry: references to draw against, left out of profiles. They stay linked to the model.",
"ui.properties": "Properties",
"ui.properties.copy_matrix": "Copy matrix",
"ui.properties.copy_value": "Click to copy",
"ui.properties.first_moments": "First moments",
"ui.properties.inertia": "Moment of inertia",
"ui.properties.inertia_note": "About the center of mass, in world axes (g·{unit}²)",
@@ -5964,6 +6130,7 @@
"ui.properties.measuring_failed": "Measuring stopped before it finished.",
"ui.properties.principal_axis": "Principal axis {number}",
"ui.properties.principal_moments": "Principal moments",
"ui.properties.value_copied": "Value copied",
"ui.pull_direction": "Pull direction",
"ui.quality": "Quality",
"ui.quantity": "Quantity",
@@ -5984,11 +6151,14 @@
"ui.relink_design_changed": "The assembly changed while choosing a source. Start Relink Source again.",
"ui.relink_done": "Source relinked for all instances.",
"ui.relink_not_linked": "This component is not linked to a source design.",
"ui.relink_one_done": "Source relinked for this instance.",
"ui.relink_select_one": "Select one linked component or one of its instances first.",
"ui.relink_source_all": "Relink Source (All Instances)…",
"ui.relink_source_one": "Relink Source…",
"ui.removeFromQuickAccess": "Remove from Quick Access",
"ui.removeFromToolbar": "Remove from Toolbar",
"ui.removeSection": "Remove Section",
"ui.renameSelectedBodies": "Rename Selected Bodies",
"ui.render": "Render",
"ui.renderer": "Renderer",
"ui.repeat": "Repeat",
@@ -6019,6 +6189,8 @@
"ui.ribbon_pin_footer": "Pinned commands show on the ribbon. Hover a row to pin or unpin it.",
"ui.ribbon_workspace": "Workspace",
"ui.right": "Right",
"ui.right_click_confirms": "Right-click confirms dialog inputs",
"ui.right_click_confirms_tip": "With a dialog open, a right-click in the view goes on to its next empty input, and on the last one runs OK",
"ui.save": "Save",
"ui.save_as": "Save As",
"ui.save_mesh_no_slicer_open": "No slicer found: choose Custom… and pick your slicer program",
@@ -6078,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "Selection Filter",
"ui.sketch_keys_only": "Keep model keys out of sketches",
"ui.sketch_keys_only_tip": "While editing a sketch, only sketch keys and keys that work everywhere run; a model key such as E or F does nothing, so a stray key can't close a heavy sketch.",
"ui.sketch_links_added_curve": "{command} added 1 curve to the sketch.",
"ui.sketch_links_added_curves": "{command} added {count} curves to the sketch.",
"ui.sketch_links_added_curves_and_points": "{command} added {curves} and {points} to the sketch.",
"ui.sketch_links_added_point": "{command} added 1 point to the sketch.",
"ui.sketch_links_added_points": "{command} added {count} points to the sketch.",
"ui.sketch_links_curve_count": "{count} curves",
"ui.sketch_links_curve_count_one": "1 curve",
"ui.sketch_links_hidden": "The result is hidden because {option} is off in the sketch palette.",
"ui.sketch_links_point_count": "{count} points",
"ui.sketch_links_point_count_one": "1 point",
"ui.sketch_modifiers": "Sketch modifiers",
"ui.sketch_project_geometry": "Geometry",
"ui.sketch_report.all_constrained": "Everything is fully constrained.",
@@ -6117,6 +6299,7 @@
"ui.step_values": "Step values with arrows and wheel",
"ui.step_values_tip": "Up/Down and the wheel over a value field change its number.",
"ui.stitch_tolerance_hint": "tight",
"ui.straighten": "Straighten",
"ui.stretch": "Stretch",
"ui.supersampling": "Supersampling (SSAA)",
"ui.supersampling_adaptive": "Only when the view is still",
@@ -6190,6 +6373,8 @@
"ui.view_angles_yaw": "Yaw",
"ui.view_angles_zero": "Set {axis} to 0°",
"ui.view_centre": "View center",
"ui.view_compass_tip": "View from {axis}. Click again to reverse. Drag to orbit.",
"ui.view_compass_tip_snap": "View from {axis}. Click again to reverse. Drag to orbit; hold Shift to snap.",
"ui.viewport_status_clear": "Turn off {name}",
"ui.viewport_status_clear_hint": "Turn off {name} · Esc",
"ui.viewport_status_edges": "{count} edges",
+217 -30
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "Arrastra para mover el agujero; haz clic para quitarlo",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "Arrastra para mover el refuerzo por el modelo. Se ajusta a los puntos del boceto en la cara.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "Arrastra para mover el encaje a presión por el modelo. Se ajusta a los puntos del boceto en la cara.",
"Drag to place it on another face.": "Arrastra para colocarlo en otra cara.",
"Drag to point the catch in another direction.": "Arrastra para orientar el retén en otra dirección.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "Arrastra para girar el refuerzo en pasos de 5°. Mantén Alt o Ctrl para girarlo libremente.",
"Drive Joint": "Accionar unión",
@@ -260,8 +261,8 @@
"EMBOSS": "REALCE",
"EXPLODED VIEW": "VISTA EXPLOSIONADA",
"EXTEND": "EXTENDER",
"Each new shape is also dimensioned from the sketch origin until nothing of it is left free. A shape already attached to the origin or to placed geometry gets none.": "Cada forma nueva también se acota desde el origen del croquis hasta que no quede nada libre. Una forma ya unida al origen o a geometría situada no recibe ninguna.",
"Each shape you draw gets all its dimensions, at the sizes you drew (typed values win). A size the sketch already sets is left out.": "Cada forma que dibujas recibe todas sus cotas con los tamaños dibujados (los valores escritos tienen prioridad). Se omite un tamaño que el croquis ya fija.",
"Each new shape is also dimensioned from the sketch origin until nothing of it is left free. A shape already attached to the origin or to placed geometry gets none.": "Cada forma nueva también se acota desde el origen del boceto hasta que no quede nada libre. Una forma ya unida al origen o a geometría situada no recibe ninguna.",
"Each shape you draw gets all its dimensions, at the sizes you drew (typed values win). A size the sketch already sets is left out.": "Cada forma que dibujas recibe todas sus cotas con los tamaños dibujados (los valores escritos tienen prioridad). Se omite un tamaño que el boceto ya fija.",
"Edge": "Arista",
"Edges": "Aristas",
"Edit": "Editar",
@@ -513,6 +514,7 @@
"Offset Y": "Desfase Y",
"Offset Z": "Desfase Z",
"On your computer": "En tu equipo",
"One more stretch of the picked edge, each with its own angle, height and turns": "Otro tramo más de la arista seleccionada, cada uno con su propio ángulo, altura y giros",
"Opacity": "Opacidad",
"Open GitHub": "Abrir GitHub",
"Open GitHub draft": "Abrir borrador de GitHub",
@@ -634,6 +636,7 @@
"Remove the track": "Eliminar la pista",
"Remove this bend": "Quitar este pliegue",
"Remove this point": "Eliminar este punto",
"Remove this segment": "Quitar este segmento",
"Rename Feature": "Cambiar nombre de la operación",
"Rename Folder": "Cambiar nombre de la carpeta",
"Render Stage": "Escenario de renderizado",
@@ -723,6 +726,7 @@
"Section position": "Posición de la sección",
"Sections": "Secciones",
"Sections (one sketch each)": "Secciones (un boceto cada una)",
"Segments": "Segmentos",
"Select Features": "Seleccionar operaciones",
"Select Other": "Seleccionar otro",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "Seleccionar otro: mantén pulsado el botón izquierdo sobre el modelo (o haz clic derecho › Seleccionar otro…) para ver todo lo que hay bajo el cursor; vuelve a pulsar en el mismo lugar para seleccionar el siguiente elemento. Haz doble clic con el botón central para volver a Inicio (Preferencias › Navegación).",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "El espaciado debe ser un número distinto de cero",
"Specialise": "Especializar",
"Speed": "Velocidad",
"Split Edge": "Dividir arista",
"Splitting tool": "Herramienta de división",
"Square": "Cuadrado",
"Stainless Steel": "Acero inoxidable",
@@ -885,6 +890,7 @@
"Variable Radius": "Radio variable",
"Variable radius": "Radio variable",
"Velocity": "Velocidad",
"Vertical": "Vertical",
"Vertices": "Vértices",
"View": "Vista",
"View navigator": "Navegador de vistas",
@@ -931,13 +937,20 @@
"ai.http.confirm": "Permitir para este servicio",
"ai.http.warning": "La clave de API y la conversación se enviarán sin cifrar. Cualquiera con acceso a la red podría leerlas o modificarlas. Úsalo solo en una red de confianza.",
"ai.prefs.allow_control": "Permitir que se conecten agentes de IA (canal de control / MCP)",
"ai.prefs.allow_control_note": "Abre un canal de control solo en este equipo (127.0.0.1, puerto 27878 o el siguiente libre). El programa que se conecte también debe presentar un token secreto que solo puede leer tu cuenta de usuario, generado de nuevo en cada arranque. Se aplica la próxima vez que se inicie SolidCraft. Desactivado: no se escucha nada salvo que inicies SolidCraft con --control.",
"ai.prefs.allow_control_note": "Un canal local (MCP). Nada sale de este equipo.\n\nAbre un canal de control solo en este equipo (127.0.0.1, en el puerto de abajo; 27878 toma el siguiente libre cuando está en uso). El programa que se conecte también debe presentar un token secreto que solo puede leer tu cuenta de usuario, generado de nuevo en cada arranque. Se aplica al momento. Desactivado: no se escucha nada salvo que inicies SolidCraft con --control.",
"ai.prefs.availability": "Controles del Asistente",
"ai.prefs.background_commands": "Ejecutar los comandos del agente en segundo plano",
"ai.prefs.connect_apps": "Poner SolidCraft a disposición de las aplicaciones de IA de este equipo",
"ai.prefs.connect_apps_note": "Al iniciar SolidCraft, lo añade como servidor MCP a las aplicaciones de IA que encuentre en este equipo (OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code), para que un agente pueda usarlo sin configurar nada. Solo se añade la entrada solidcraft o se actualiza su ruta; una entrada que hayas cambiado se deja intacta y el archivo se copia antes. Desactivado: se eliminan las entradas que añadió. Ayuda › Conectar asistentes de IA… lo hace a mano.",
"ai.prefs.connect_at_start": "Conectar el último agente usado al iniciar SolidCraft",
"ai.prefs.connect_at_start_note": "Inicia el agente que conectaste por última vez (o el predeterminado) en segundo plano cada vez que se abre SolidCraft",
"ai.prefs.control_failed": "No se ha podido iniciar el canal de control: {error}",
"ai.prefs.control_from_launch": "Iniciado con --control en el puerto {port} para esta ejecución. Los cambios de aquí se aplican la próxima vez que SolidCraft se inicie sin --control.",
"ai.prefs.control_listening": "Escuchando en 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "No está escuchando",
"ai.prefs.control_port": "Puerto",
"ai.prefs.control_port_note": "El puerto al que se conectan los agentes de IA en este equipo (127.0.0.1). 27878 es el predeterminado: cuando está en uso, se toma el siguiente libre. Cualquier otro puerto se usa exactamente. Apunta tu cliente MCP al mismo puerto, por ejemplo solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "El puerto {port} está en uso por otro programa (u otra ventana de SolidCraft). Elige otro puerto.",
"ai.prefs.follow_camera": "Girar la cámara hacia los bocetos",
"ai.prefs.follow_camera_off": "El seguimiento automático de la cámara está desactivado.",
"ai.prefs.follow_camera_on": "La cámara gira hacia los bocetos que crea el agente.",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "no en la cara de una pieza",
"browser.sketches_to_parts_part_missing": "falta su pieza",
"browser.sketches_to_parts_result": "Se movieron {moved} bocetos a la pieza en la que están; {stayed} se quedaron: {why}",
"browser.straighten_angle": "Dirección de la arista",
"browser.straighten_choose": "Elige Horizontal, Vertical o Ángulo para la arista y pulsa Enderezar.",
"browser.straighten_click_a": "Haz clic en la imagen en un extremo de una arista que deba quedar recta, o escribe sus coordenadas.",
"browser.straighten_click_b": "Haz clic en el otro extremo de la arista, o escribe sus coordenadas.",
"browser.straighten_horizontal": "Horizontal",
"browser.straighten_title": "Enderezar: {name}",
"browser.straighten_vertical": "Vertical",
"browser.units": "Unidades: {units}",
"cam.flat": "Cara plana",
"cam.follower": "Seguidor",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "Tomar apariencia",
"cmd.appearance_replace": "Reemplazar apariencia",
"cmd.assembly_bom": "Lista de materiales",
"cmd.assembly_constraint_create": "Restringir",
"cmd.assembly_constraint_edit": "Editar restricción",
"cmd.assembly_mass_properties": "Propiedades de masa",
"cmd.body.print_face": "Cara de impresión",
"cmd.body_rename": "Cambiar nombre del cuerpo",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "Eliminar lienzo",
"cmd.canvas_edit": "Editar lienzo",
"cmd.canvas_insert": "Lienzo",
"cmd.canvas_straighten": "Enderezar lienzo",
"cmd.canvas_to_sketch": "Lienzo a boceto",
"cmd.component_activate": "Activar componente",
"cmd.component_break_link": "Romper vínculo",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "Regla de configuración",
"cmd.config_rules": "Reglas de configuración",
"cmd.config_table": "Mostrar tabla de configuraciones",
"cmd.construct.axis": "Eje",
"cmd.construct.plane": "Plano",
"cmd.construct.plane.axis_point": "Plano por eje y punto",
"cmd.construct.point": "Punto",
"cmd.construct_axis_edge": "Eje por arista",
"cmd.construct_axis_normal_to_face": "Eje perpendicular a cara",
"cmd.construct_axis_through_cylinder": "Eje por cilindro/cono/toro",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "Guardar como malla",
"cmd.file_send_to_slicer": "Enviar al laminador",
"cmd.file_slicers": "Laminadores instalados",
"cmd.frame_end_cap": "Tapa de extremo",
"cmd.frame_member": "Miembro estructural",
"cmd.frame_profile_insert": "Insertar perfil",
"cmd.frame_profile_list": "Biblioteca de perfiles",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "Análisis de isocurvas",
"cmd.inspect_minimum_radius": "Análisis de radio mínimo",
"cmd.inspect_parameter_sweep": "Barrido de parámetros",
"cmd.inspect_parameter_variants": "Comparar variantes de parámetros",
"cmd.inspect_silhouette": "Silueta",
"cmd.inspect_zebra": "Análisis de franjas cebra",
"cmd.joint_as_built": "Unión según posición actual",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "Trayectoria de movimiento",
"cmd.motion_trace_edit": "Editar traza de movimiento",
"cmd.motion_trace_keep": "Conservar trayectoria de movimiento",
"cmd.note_add": "Añadir nota",
"cmd.note_delete": "Eliminar nota",
"cmd.note_list": "Listar notas",
"cmd.note_update": "Editar nota",
"cmd.occurrence_align": "Alinear instancia",
"cmd.occurrence_copy": "Pegar (instancia)",
"cmd.occurrence_drag": "Arrastrar instancia",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "Renderizar imagen",
"cmd.render_status": "Progreso del renderizado",
"cmd.select_clear": "Borrar selección",
"cmd.selection_get": "Obtener selección",
"cmd.settings_profile_apply": "Aplicar perfil de ajustes",
"cmd.settings_profile_delete": "Eliminar perfil de ajustes",
"cmd.settings_profile_export": "Exportar perfil de ajustes",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "Suprimir operación",
"cmd.ui.assistant": "Alternar Asistente",
"cmd.ui.palette": "Buscar comandos",
"cmd.ui.toggle_visibility": "Mostrar/ocultar selección",
"cmd.view.navigator": "Navegador de vistas personalizado",
"cmd.view.render_browser": "Explorador de render",
"cmd.view.render_dock": "Mover acople de render",
@@ -1567,6 +1601,7 @@
"color.step_down": "Bajar un paso",
"color.step_up": "Subir un paso",
"color.value": "Valor, el brillo (porcentaje)",
"component.error.ambiguous_name": "Varios componentes se llaman `{name}`. Usa un ID numérico de componente: {ids}.",
"config.column_filter_empty": "Sin columnas coincidentes",
"config.rule_parameter_columns": "Solo se listan los parámetros con una columna en la tabla. Añade una con Añadir columna (+) para usarla aquí.",
"config.rule_suppression_columns": "Solo se listan las operaciones con una columna Suprimir en la tabla. Añade una con Añadir columna (+) para controlarla aquí.",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: la referencia `{reference}` ya no existe como se seleccionó; vuélvela a seleccionar",
"dialog.bodies_count": "{count} cuerpos",
"dialog.clearance_invalid": "la holgura debe ser una longitud de 0 o más",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "Calcular",
"dialog.compute_again": "Calcular de nuevo",
"dialog.computing": "Calculando… {seconds} s",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "Solo se puede avanzar con un número; una expresión se queda como se escribe",
"dialog.dimension_step_up": "Subir {step}",
"dialog.edit_title": "EDITAR {title}",
"dialog.hole_held_off_its_line": "La arista de referencia mantiene este agujero sobre una línea que sale de la cara antes del punto seleccionado. Elige dónde cruza la línea la cara, o quita la arista para mover el agujero libremente.",
"dialog.no_shown_body": "No hay cuerpo mostrado para cambiar: muestra uno, o elige Nuevo cuerpo",
"dialog.pattern_sketch_not_object": "Selecciona cuerpos o operaciones: un boceto no es ninguno. Repite sus curvas con el Patrón o Espejo del propio boceto, o extrúdelas primero.",
"dialog.primitive_point_tip": "Un punto que rellena X, Y y Z: haz clic aquí y después en un vértice, una arista o una cara del modelo, en un punto de un boceto o en el origen.",
"dialog.reference_edge_tip": "Una arista recta de la cara elegida desde la que se mide la distancia de abajo: haz clic aquí y después en la arista.",
"dialog.right_click_pick": "Selecciona primero {input}",
"dialog.select": "↖ Seleccionar",
"dialog.selected_count": "↖ {count} seleccionados",
"dialog.selection_constraint": "Restricción {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "{name} ha cambiado en el disco",
"document.changed_on_disk_detail": "Otro programa u otro equipo ha modificado {name} desde que lo abriste o lo guardaste por última vez. Sobrescribir sustituye esos cambios por los tuyos; Guardar una copia conserva ambos.",
"document.copy_name": "Copia de {name}",
"document.discard_row": "Descartar",
"document.finish_save_prompt": "Termina de responder al aviso de guardado antes de abrir otro diseño.",
"document.newer_file": "Guardado con una versión más reciente de SolidCraft (formato {format}; esta versión lee hasta {reads}). Si falta algo, actualiza.",
"document.newer_file_change": "Guardado con una versión más reciente de SolidCraft (formato {format} con `{change}`, que esta versión no conoce). Si falta algo, actualiza.",
"document.newer_file_not_read": "No leído: {what}. Al guardar se conserva.",
"document.not_saved_yet": "Aún sin guardar",
"document.open_anyway": "Abrir de todos modos",
"document.open_elsewhere": "{name} ya está abierto",
"document.open_elsewhere_detail": "{name} está abierto en SolidCraft {app} en {who}, abierto {when}. Si guardáis los dos, uno de vosotros perderá su trabajo. Ábrelo en solo lectura para verlo sin sobrescribirlo.",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "Este diseño se abrió en solo lectura: guárdalo como un archivo nuevo",
"document.save_changes": "¿Guardar los cambios de {name}?",
"document.save_copy": "Guardar una copia…",
"document.save_many": "¿Guardar los cambios de {n} diseños?",
"document.save_row": "Guardar",
"document.save_selected": "Guardar seleccionados",
"document.tab_unsaved_changes": "Cambios sin guardar",
"document.unsaved_changes": "{name} tiene cambios sin guardar. Si no los guardas, se perderán.",
"drive.rigid": "{joint} es una junta rígida: mantiene sus partes quietas, así que no tiene nada que impulsar.",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "Tolerancia de curva",
"dxf.tolerance_help": "Solo cuerpos visibles y bocetos mostrados. Las curvas usan segmentos rectos. Una tolerancia menor da curvas más finas y consume más tiempo y memoria.",
"each rail's curves must be in one sketch": "las curvas de cada guía deben estar en un solo boceto",
"error.end_cap_faces": "Selecciona al menos una cara de extremo abierta de un miembro",
"error.end_cap_unresolved": "El extremo {ends} de esta tapa ya no está en el modelo. Vuelve a seleccionar las caras de extremo",
"feature computation ended without a result": "el cálculo de la operación terminó sin resultado",
"file.open.drawing_filter": "Diseños, archivos CAD, mallas y dibujos",
"file.open.portal_fallback.no_portal_service": "El selector de archivos que se ha abierto no es el del escritorio: el servicio de portal del escritorio no está disponible.",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "Insertando geometría",
"file_load.link_item": "{name} ({done} de {total})",
"file_load.opened": "Se ha abierto {name}",
"file_load.opened_behind": "{name} se ha abierto en una pestaña nueva",
"file_load.opened_in_tab": "Se ha abierto {name} en una pestaña nueva",
"file_load.opening": "Abriendo diseño",
"file_load.preparing_thumbnail": "Preparando la miniatura...",
@@ -1725,25 +1772,28 @@
"help.config.table": "Muestra la tabla de configuración: una fila por variante, una columna por parámetro u operación, y si el diseño sigue coincidiendo con la fila activa. Úsalo para revisar las variantes de un diseño.",
"help.connect_note": "Reinicia cada asistente para que cargue el servidor de SolidCraft. Cada archivo se guardó como .bak antes de modificarlo.",
"help.connect_title": "Conectar asistentes de IA",
"help.construct.axis": "Crea un eje de construcción con el método que pidan tus selecciones: a lo largo de una arista o línea, por un agujero o una cara redonda, donde se encuentran dos planos, por dos puntos, o perpendicular a una cara por un punto. Úsalo cuando conozcas las referencias y no el método.",
"help.construct.axis.edge": "Crea un eje de construcción a lo largo de una arista recta o de una línea de boceto. Úsalo como eje de una revolución, un patrón circular o una unión.",
"help.construct.axis.normal_to_face": "Crea un eje de construcción que pasa por un punto, perpendicular a una cara. Úsalo como un eje que sale recto de una superficie.",
"help.construct.axis.normal_to_face": "Crea un eje de construcción que pasa por un punto, perpendicular a una cara. Úsalo como eje que sale recto de una cara.",
"help.construct.axis.through_cylinder": "Crea un eje de construcción por el centro de una cara cilíndrica, cónica o toroidal, o de una arista circular. Úsalo para girar o repetir operaciones alrededor de una pieza redonda.",
"help.construct.axis.two_planes": "Crea un eje de construcción donde se cortan dos planos o caras planas. Úsalo cuando el eje que necesitas sea la línea entre dos caras.",
"help.construct.axis.two_points": "Crea un eje de construcción por dos puntos, vértices o puntos de boceto. Úsalo para un eje que va entre dos posiciones conocidas.",
"help.construct.plane": "Crea un plano de construcción con el método que pidan tus selecciones: con desfase respecto a un plano, por un punto, entre dos planos, por líneas o puntos, tangente a una cara curva, o perpendicular a una trayectoria. Úsalo cuando conozcas las referencias y no el método.",
"help.construct.plane.along_path": "Crea un plano de construcción perpendicular a una arista o curva, en una posición a lo largo de ella. Úsalo para dibujar el perfil de un barrido o una sección de una trayectoria.",
"help.construct.plane.at_angle": "Crea un plano de construcción girado un ángulo respecto a un plano o cara, alrededor de un eje o arista. Activa «Usar solo la dirección del eje» para proyectar el eje sobre la base y pivotar alrededor de un punto de ese plano (el origen de la base cuando no se elige ninguno). Úsalo para bocetos inclinados, como un soporte angular.",
"help.construct.plane.axis_point": "Crea un plano de construcción que contiene un eje y un punto fuera de ese eje. Elige un origen o un eje de construcción, una arista recta o una línea de boceto, y después un vértice, un punto de boceto o un punto de construcción. Un punto del eje no define un plano único.",
"help.construct.plane.midplane": "Crea un plano de construcción a medio camino entre dos planos o caras planas, o que los biseca donde se encuentran en ángulo. Úsalo como plano de simetría para un espejo.",
"help.construct.plane.midplane": "Crea un plano de construcción a medio camino entre dos planos o caras planas, o que los biseca donde se encuentran en ángulo. Úsalo como plano de simetría al reflejar.",
"help.construct.plane.offset": "Crea un plano de construcción paralelo a un plano o una cara plana, a una distancia o por un punto. Úsalo para dibujar a una altura fija sobre una cara.",
"help.construct.plane.perpendicular": "Crea un plano de construcción que contiene una línea o arista y es perpendicular a un plano o una cara. Úsalo para dibujar en vertical sobre un modelo a lo largo de una arista.",
"help.construct.plane.tangent": "Crea un plano de construcción que toca un cilindro, cono, esfera o toro en un punto. Úsalo para dibujar en el lado de una pieza redonda.",
"help.construct.plane.three_points": "Crea un plano de construcción por tres puntos. Úsalo para un plano definido por posiciones del modelo, como tres esquinas.",
"help.construct.plane.two_edges": "Crea un plano de construcción por dos aristas rectas o líneas que están en un mismo plano. Úsalo para un plano que cruza una pieza, por ejemplo por dos aristas opuestas.",
"help.construct.point": "Crea un punto de construcción con el método que pidan tus selecciones: en un vértice, en el centro de un círculo o una esfera, a lo largo de una arista, donde se encuentran dos líneas o tres planos, o donde una línea cruza un plano. Úsalo cuando conozcas las referencias y no el método.",
"help.construct.point.along_path": "Crea un punto de construcción en una posición a lo largo de una arista o curva. Úsalo como referencia a mitad de una trayectoria.",
"help.construct.point.center": "Crea un punto de construcción en el centro de una arista circular, un círculo o arco de boceto, una esfera o un toro. Úsalo como referencia para agujeros, ejes y uniones.",
"help.construct.point.edge_plane": "Crea un punto de construcción donde una arista o línea atraviesa un plano o una cara plana. Úsalo para marcar dónde una trayectoria cruza un plano.",
"help.construct.point.three_planes": "Crea un punto de construcción donde se encuentran tres planos o caras planas. Úsalo como referencia de esquina, incluso donde el modelo no tiene vértice.",
"help.construct.point.two_edges": "Crea un punto de construcción donde se cortan dos aristas o líneas, o donde están más cerca. Úsalo como referencia en una esquina virtual.",
"help.construct.point.two_edges": "Crea un punto de construcción donde se cortan dos aristas o líneas, o donde más se acercan. Úsalo como referencia en una esquina virtual.",
"help.construct.point.vertex": "Crea un punto de construcción sobre un vértice o un punto de boceto. Úsalo como referencia que permanece cuando se oculta el boceto o el cuerpo que lo rodea.",
"help.contact.check": "Lista los pares de piezas de los conjuntos de contacto que se atraviesan en su posición actual. Úsalo para encontrar colisiones antes de accionar uniones o ejecutar un estudio de movimiento.",
"help.contact.create": "Agrupa dos o más piezas en un conjunto de contacto, cuyos cuerpos no pueden atravesarse mientras las uniones se mueven. Úsalo para piezas que deben detenerse al tocarse, como una palanca contra su tope.",
@@ -1764,7 +1814,8 @@
"help.file.send_to_slicer": "Guarda los cuerpos seleccionados como un archivo 3MF y lo abre en el laminador que elijas. Úsalo para pasar del modelo a la impresión en un solo paso.",
"help.font_details": "La interfaz utiliza las fuentes integradas de egui (Ubuntu Light y Hack, bajo las licencias Ubuntu Font Licence y MIT/Bitstream Vera; Noto Emoji y la fuente de iconos emoji, bajo OFL y MIT). El texto de los bocetos utiliza Liberation Sans (SIL OFL 1.1). El paquete opcional de fuentes de The Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), no se incluye en las compilaciones de SolidCraft.",
"help.fonts": "Fuentes",
"help.frame.member": "Coloca un perfil, como un tubo o un perfil de aluminio extruido, a lo largo de las líneas de un boceto de estructura, un miembro por línea. Úsalo para construir bastidores, estanterías y estructuras soldadas.",
"help.frame.end_cap": "Cierra los extremos abiertos de los miembros de una estructura con placas con la forma del contorno del perfil. Úsalo para tapar tubos, angulares y vigas, sobre el extremo o embutidas en él.",
"help.frame.member": "Coloca un perfil, como un tubo o una extrusión de aluminio, a lo largo de las líneas de un boceto de estructura, un miembro por línea. Úsalo para construir bastidores, estanterías y estructuras soldadas.",
"help.inspect.accessibility": "Colorea las caras a las que una herramienta puede llegar desde una dirección y las que no. Úsalo para comprobar una pieza para mecanizado o moldeo desde ese lado.",
"help.inspect.center_of_mass": "Muestra el centro de masa de los cuerpos, cada uno por separado y todos juntos, con densidad uniforme. Úsalo para comprobar el equilibrio y dónde volcará una pieza.",
"help.inspect.colored_components": "Da a cada componente su propio color temporal, sin cambiar los aspectos. Úsalo para distinguir de un vistazo las piezas de un ensamblaje.",
@@ -1835,11 +1886,11 @@
"help.parts.library": "Abre las piezas estándar: tornillos, pernos, tuercas, arandelas, tornillos sin cabeza, pasadores cilíndricos y rodamientos en tamaños estándar. Úsalo para añadir una pieza estándar en lugar de modelarla tú.",
"help.parts.resize": "Cambia el tamaño o la longitud de una pieza estándar insertada y la reconstruye; sus uniones la mantienen asentada. Úsalo cuando un tornillo resulta demasiado largo o un agujero necesita otro tamaño.",
"help.plastic.assign_rule": "Asigna una regla de plástico a cuerpos, de modo que sus operaciones de plástico toman su desmoldeo y holgura como valores por defecto. Úsalo para configurar una pieza moldeada una sola vez para todas sus operaciones.",
"help.plastic.boss": "Añade una torreta para tornillo en una cara: un poste con agujero opcional, desmoldeo, redondeo en la base y nervios de apoyo. Úsalo para los puntos de tornillo en carcasas moldeadas o impresas.",
"help.plastic.boss": "Añade un saliente para tornillo en una cara: un poste con agujero opcional, desmoldeo, redondeo en la base y nervios de apoyo. Úsalo para los puntos de tornillo en carcasas moldeadas o impresas.",
"help.plastic.lip": "Adds a lip or a matching groove along the rim of a shelled body. Use it so that two housing halves locate on each other and close tightly.",
"help.plastic.manage_rules": "Crea y edita reglas de plástico: material, espesor de pared, radios, holgura y desmoldeo. Úsalas para mantener coherentes las operaciones de una pieza moldeada.",
"help.plastic.rest": "Añade un apoyo en una cara: un taco redondo o rectangular, macizo o hueco, con desmoldeo. Úsalo como soporte o separador en una carcasa moldeada.",
"help.plastic.snap_fit": "Añade un gancho de encaje a presión en una cara, con su longitud, espesor y resalte. Úsalo para unir piezas sin tornillos.",
"help.plastic.snap_fit": "Añade un gancho de encaje a presión en una cara, con su longitud, espesor y retención. Úsalo para unir piezas sin tornillos.",
"help.pointcloud.insert": "Inserta un escaneo PLY, XYZ o PTS como nube de puntos junto al modelo. Úsala como",
"help.sheet.convert": "Convierte una placa o un cuerpo vaciado de espesor uniforme en un cuerpo de chapa metálica, con pliegues en las aristas que elijas. Úsalo para hacer desplegable una pieza existente.",
"help.sheet.export_bend_table": "Guarda la tabla de plegado de un cuerpo de chapa metálica como CSV o JSON: ángulos, radios y posiciones de los pliegues en el desarrollo. Úsalo para la plegadora o el taller.",
@@ -1850,22 +1901,22 @@
"help.sheet.hem": "Dobla el borde de una chapa sobre sí mismo. Úsalo para bordes seguros y rígidos, sin rebabas cortantes.",
"help.sheet.manage_rules": "Crea y edita reglas de chapa metálica: espesor, radio de plegado, factor K, alivios y holguras. Úsalas para ajustarte al material y a las herramientas de tu taller.",
"help.sheet.path_flange": "Añade una cadena de pestañas a lo largo del borde de una chapa, siguiendo una cadena abierta de líneas de boceto. Úsalo para perfiles como una U o una Z en un solo paso.",
"help.sheet.perforate": "Añade un campo de agujeros sobre toda la chapa plana, en patrón al tresbolillo o cuadrado. Úsalo para rejillas, ventilaciones y paneles más ligeros.",
"help.sheet.perforate": "Añade un campo de agujeros sobre toda la chapa plana, en patrón al tresbolillo o en cuadrícula. Úsalo para rejillas, ventilaciones y paneles más ligeros.",
"help.sheet.refold": "Vuelve a plegar un cuerpo de chapa metálica desplegado. Úsalo tras añadir operaciones a la chapa plana.",
"help.sheet.unfold": "Despliega todos los pliegues de un cuerpo de chapa metálica. Úsalo para añadir agujeros o cortes que deban cruzar un pliegue, y luego vuelve a plegar.",
"help.sketch.arc.center_point": "Dibuja un arco circular alrededor de un punto central, de un punto inicial a un punto final. Úsalo cuando se conoce el centro del arco, como un radio alrededor de un agujero o de un pivote.",
"help.sketch.arc.tangent": "Dibuja un arco que empieza en el extremo de una línea o arco y continúa tangente a él. Úsalo para seguir una cadena con una curva suave en lugar de una esquina.",
"help.sketch.arc.three_point": "Dibuja un arco de un punto inicial a un punto final pasando por un tercer punto. Úsalo cuando el arco deba pasar por puntos dados y no alrededor de un centro conocido.",
"help.sketch.arc3d": "Dibuja un arco circular exacto en el espacio por tres puntos, con el Boceto 3D activado. Úsalo para curvas en trayectorias y guías que salen del plano del boceto.",
"help.sketch.auto_constrain": "Añade las restricciones que el boceto ya casi cumple, como horizontal, paralela o coincidente, y luego lo acota hasta definirlo por completo. Úsalo para fijar de un paso un boceto dibujado a mano alzada.",
"help.sketch.auto_constrain_from_datum": "Funciona como Restricción automática, pero mide las posiciones desde un punto de referencia que eliges en lugar del origen. Úsalo cuando la pieza se organiza a partir de un punto de referencia, como una esquina o un agujero.",
"help.sketch.auto_constrain": "Añade las restricciones que el boceto ya casi cumple, como horizontal, paralela o coincidente, y luego lo acota hasta definirlo por completo. Úsalo para fijar en un solo paso un boceto dibujado a mano alzada.",
"help.sketch.auto_constrain_from_datum": "Funciona como Restringir automáticamente, pero mide las posiciones desde un punto de referencia que eliges en lugar del origen. Úsalo cuando la pieza se organiza a partir de un punto de referencia, como una esquina o un agujero.",
"help.sketch.blend_curve": "Une los extremos de dos curvas con una spline suave tangente a ambas, o también de curvatura continua si lo eliges. Úsalo para salvar un hueco entre curvas sin quiebros.",
"help.sketch.break": "Divide una curva en trozos donde otras curvas la cruzan, o en puntos que colocas sobre ella. Úsalo cuando una parte de una curva necesite su propia restricción o deba borrarse por separado.",
"help.sketch.cancel": "Sale del boceto y descarta todo lo cambiado desde que se creó o se abrió para editarlo. Deshacer recupera los cambios.",
"help.sketch.centerline": "Cambia las líneas entre líneas normales y líneas de eje, ejes que los perfiles dejan fuera. Usa una línea de eje como eje de una revolución, un espejo o una restricción de simetría.",
"help.sketch.chamfer.distance_angle": "Bisela la esquina entre dos líneas, definido por una distancia a lo largo de la primera línea y un ángulo. Úsalo cuando un plano da el chaflán como una longitud y un ángulo, como 2 mm × 30°.",
"help.sketch.centerline": "Cambia las líneas entre líneas normales y líneas de eje, ejes que los perfiles dejan fuera. Usa una línea de eje como eje de una revolución, una simetría o una restricción de simetría.",
"help.sketch.chamfer.distance_angle": "Bisela la esquina entre dos líneas, definida por una distancia a lo largo de la primera línea y un ángulo. Úsalo cuando un plano da el chaflán como una longitud y un ángulo, como 2 mm × 30°.",
"help.sketch.chamfer.equal_distance": "Bisela la esquina entre dos líneas la misma distancia hacia atrás en ambas. Úsalo para el chaflán habitual de 45° en un contorno.",
"help.sketch.chamfer.two_distance": "Bisela la esquina entre dos líneas, definido por una distancia distinta a lo largo de cada línea. Úsalo para chaflanes que no son de 45°, dados como dos longitudes.",
"help.sketch.chamfer.two_distance": "Bisela la esquina entre dos líneas, definida por una distancia distinta a lo largo de cada línea. Úsalo para chaflanes que no son de 45°, dados como dos longitudes.",
"help.sketch.circle.center": "Dibuja un círculo a partir de su centro y su diámetro. Úsalo para agujeros, salientes y otras formas redondas cuyo centro se conoce.",
"help.sketch.circle.three_point": "Dibuja un círculo por tres puntos. Úsalo cuando el círculo deba pasar por puntos dados, por ejemplo de geometría existente.",
"help.sketch.circle.three_tangent": "Dibuja un círculo que toca tres líneas, círculos o arcos. Úsalo para ajustar un círculo en el espacio entre tres curvas, como el círculo inscrito de un triángulo.",
@@ -1890,13 +1941,13 @@
"help.sketch.construction_line": "Crea una línea de construcción infinita a través de dos puntos. Úsala para organizar un boceto.",
"help.sketch.construction_line.angle": "Crea una línea de construcción infinita en un ángulo desde el eje X del boceto. Elige el punto a",
"help.sketch.construction_line.bisector": "Elige dos líneas rectas de boceto que se intersecten, luego elige una de las dos bisectrices del ángulo.",
"help.sketch.construction_line.horizontal": "Crea una línea de construcción horizontal infinita a través de un punto. Su dirección horizontal",
"help.sketch.construction_line.parallel": "Elige una línea recta de boceto, luego coloca una línea de construcción paralela infinita. R",
"help.sketch.construction_line.horizontal": "Crea una línea de construcción horizontal infinita que pase por un punto, o escribe su distancia al eje X del boceto. Una distancia escrita se convierte en una cota controladora. Su restricción horizontal sigue las ediciones posteriores.",
"help.sketch.construction_line.parallel": "Elige una línea recta de boceto y luego coloca una línea de construcción paralela infinita o escribe su desfase. Un desfase escrito se convierte en una distancia controladora. Haz clic con el botón derecho para elegir otra referencia.",
"help.sketch.construction_line.perpendicular": "Elige una línea recta de boceto, luego coloca una línea de construcción perpendicular infinita.",
"help.sketch.construction_line.tangent_at": "Crea una tangente en un punto de un círculo o arco circular, o en un extremo de una curva abierta.",
"help.sketch.construction_line.tangent_external": "Elige un círculo o arco circular, luego un punto externo y una solución de tangente. Th",
"help.sketch.construction_line.tangent_two": "Elige dos círculos o arcos circulares, luego elige una tangente común en la previsualización.",
"help.sketch.construction_line.vertical": "Crea una línea de construcción vertical infinita a través de un punto. Su dirección vertical",
"help.sketch.construction_line.vertical": "Crea una línea de construcción vertical infinita que pase por un punto, o escribe su distancia al eje Y del boceto. Una distancia escrita se convierte en una cota controladora. Su restricción vertical sigue las ediciones posteriores.",
"help.sketch.copy": "Copia las curvas y puntos de boceto seleccionados, junto con las restricciones y cotas entre ellos. Pégalos en este boceto o en otro.",
"help.sketch.create": "Empieza un nuevo boceto 2D en un plano o en una cara plana del modelo. Toda extrusión, revolución y barrido empieza con un boceto.",
"help.sketch.cut": "Copia la geometría de boceto seleccionada y la borra del boceto, en un solo paso de deshacer. Pégala en otro lugar de este boceto o en otro.",
@@ -1907,10 +1958,10 @@
"help.sketch.extend": "Alarga una línea o un arco hasta la curva más cercana que encuentre, o hace crecer dos curvas hasta que se encuentran. Úsalo para cerrar huecos de un perfil tras recortar o editar.",
"help.sketch.fillet": "Redondea la esquina donde se encuentran dos líneas o arcos con un arco de un radio dado. Varias esquinas redondeadas a la vez comparten un radio.",
"help.sketch.finish": "Sale del boceto y vuelve al modelo. Sus perfiles cerrados quedan listos para Extrusión, Revolución y otras operaciones.",
"help.sketch.finish_auto_constrain": "Ejecuta Restricción automática en el boceto y luego lo finaliza. Úsalo para dejar un boceto totalmente definido de un paso.",
"help.sketch.finish_auto_constrain": "Ejecuta Restringir automáticamente en el boceto y luego lo finaliza. Úsalo para dejar un boceto totalmente definido en un solo paso.",
"help.sketch.fit_curves_to_section": "Corta un cuerpo de malla o sólido con el plano del boceto y ajusta líneas y arcos a la sección. Úsalo para reconstruir como boceto editable una pieza escaneada o importada.",
"help.sketch.include_3d": "Trae aristas del modelo, vértices y curvas de otros bocetos a este boceto como referencias vinculadas, aplanando sobre él las que no están en su plano. Úsalo para construir sobre geometría que no está en el plano del boceto.",
"help.sketch.infinite": "Cambia las líneas entre líneas normales y líneas de construcción infinitas que cruzan toda la vista. Úsalas como referencias de disposición que nunca se quedan cortas.",
"help.sketch.infinite": "Cambia las líneas entre líneas normales y líneas de construcción infinitas que cruzan todo el visor. Úsalas como referencias de disposición que nunca se quedan cortas.",
"help.sketch.insert_dxf": "Lee las curvas de un dibujo DXF en un boceto, escaladas, giradas y colocadas donde indiques. Úsalo para construir sobre un dibujo 2D de otro programa, como un contorno para corte láser.",
"help.sketch.insert_svg": "Lee los trazados de un dibujo SVG en un boceto, escalados, girados y colocados donde indiques. Úsalo para convertir un logotipo o un contorno vectorial en curvas que puedas extruir.",
"help.sketch.inspect": "Abre un informe sobre el boceto abierto: cuántos grados de libertad quedan y qué",
@@ -2015,12 +2066,12 @@
"help.view.apply": "Gira la vista a una dirección estándar como frontal, superior o isométrica, o a una vista con nombre guardada. Úsalo para mirar el modelo desde un ángulo fijo.",
"help.view.delete": "Borra una vista con nombre guardada. El modelo no cambia.",
"help.view.fit": "Acerca y desplaza para que todo el modelo, o la selección, llene la vista. Úsalo cuando el modelo se ha salido de la vista.",
"help.view.grid": "Muestra u oculta la cuadrícula en la vista. Úsala como guía de tamaño y orientación al modelar.",
"help.view.grid": "Muestra u oculta la cuadrícula en el visor. Úsala como guía de tamaño y orientación al modelar.",
"help.view.ground_shadow": "Muestra u oculta la sombra del modelo en el suelo. Úsalo para juzgar con más facilidad la altura y la posición.",
"help.view.home": "Devuelve la vista a la dirección de inicio y encuadra el modelo. Úsalo para volver rápido a una vista conocida.",
"help.view.list": "Lista las vistas con nombre guardadas en el diseño. Úsalo para encontrar una vista que guardaste antes.",
"help.view.navigate": "Gira, desplaza o acerca la vista por pasos, como un cuarto de vuelta a la izquierda. Úsalo para mover la cámara con precisión en lugar de arrastrar.",
"help.view.navigation_bar": "Muestra u oculta la barra de navegación en la parte inferior de la vista. Ocúltala para tener más espacio, muéstrala para llegar a las herramientas de vista con el ratón.",
"help.view.navigation_bar": "Muestra u oculta la barra de navegación en la parte inferior del visor. Ocúltala para tener más espacio, muéstrala para llegar a las herramientas de vista con el ratón.",
"help.view.rename": "Da un nombre nuevo a una vista con nombre guardada. La vista en sí no cambia.",
"help.view.ribbon_tabs_only": "Pliega la cinta hasta su fila de pestañas para que la vista recupere el espacio de los paneles. Haz clic en una pestaña para mostrar sus paneles sobre la vista; vuelve a elegir esta opción para mantener toda la cinta visible.",
"help.view.save": "Guarda la posición actual de la cámara como una vista con nombre en el diseño. Úsalo para volver al mismo ángulo más tarde, por ejemplo para capturas de pantalla.",
@@ -2240,6 +2291,9 @@
"measure.at": "En",
"measure.item": "Elemento {number}",
"measure.line_to_centre": "Línea al centro",
"measure.perimeter": "Perímetro",
"measure.perimeter_inner": "Perímetro interior",
"measure.perimeter_outer": "Perímetro exterior",
"measure.quick_copied": "Medición copiada",
"measure.quick_copy": "Haz clic para copiar la medición",
"measure.quick_edges": "{count} aristas",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt+arrastre izq. desplaza, Mayús+Alt+arrastre izq. hace zoom, Ctrl+arrastre izq. en espacio vacío orbita",
"nav.inventor.help": "Arrastrar con el botón central desplaza, Mayús+central orbita, Ctrl+central hace zoom y arrastrar con el derecho orbita",
"nav.maya.help": "Alt+arrastre izq. orbita, Alt+arrastre central desplaza, Alt+arrastre der. hace zoom; arrastre central también desplaza",
"nav.maya_horizontal_zoom.help": "Alt+arrastrar con el botón derecho: hacia la derecha acerca, hacia la izquierda aleja. Desactívalo para volver al zoom arrastrando en vertical.",
"nav.maya_horizontal_zoom.label": "Maya: zoom arrastrando en horizontal",
"nav.nx.help": "Arrastrar con botón central orbita, Shift+central desplaza (central + derecho de NX), Ctrl+central hace zoom (central + izquierdo de NX); arrastrar con derecho deja la cámara",
"nav.openscad.help": "Arrastrar con el botón izquierdo sobre un espacio vacío orbita, Mayús+izquierdo selecciona con un recuadro y arrastrar geometría del boceto la edita; arrastrar con el derecho o el central desplaza, y Mayús+derecho o Mayús+central hace zoom",
"nav.orbit_cursor_wrap.help": "Un arrastre de órbita que llega al borde de la vista mueve el cursor al borde opuesto y sigue girando. Desactivado: el arrastre se detiene en el borde de la pantalla. No tiene efecto en Wayland ni en el navegador.",
@@ -2411,6 +2467,16 @@
"not a move": "no es un movimiento",
"not a number": "no es un número",
"open a sketch first": "abre primero un boceto",
"operations.cancel": "Cancelar {name}",
"operations.cancelled": "{name} cancelado",
"operations.cancelling": "Cancelando…",
"operations.cannot_cancel": "{name} no se puede cancelar",
"operations.feature": "Operación",
"operations.feature_edit": "Editar operación",
"operations.meshing": "Cargando piezas",
"operations.queued": "En cola",
"operations.stopped": "Cancelado",
"operations.waiting": "Listo",
"parameters.apply_live": "Aplicar en vivo",
"parameters.apply_live_tip": "Aplica los cambios de parámetros mientras los editas",
"parameters.held": "Mantenidos ({count})",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "Colores de vista 3D",
"prefs.appearance.viewport_logo": "Visor y logo",
"prefs.applies_on_restart": "Se aplica al reiniciar",
"prefs.assemblies": "Ensamblajes",
"prefs.assistant": "Asistente",
"prefs.assistant_connecting": "Conectando",
"prefs.assistant_follow_help": "Los bocetos Mirar mueven la vista con el puntero.",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "Elegir archivo de fuente…",
"prefs.click": "Clic",
"prefs.command_dialog_values": "Diálogos de comando",
"prefs.constraint_glyph_size": "Tamaño de los glifos de restricción",
"prefs.constraint_glyph_size_note": "Cómo de grandes se dibujan los glifos de restricción y sus letras o iconos en un boceto. El 100 % es el tamaño habitual; los glifos conservan este tamaño en pantalla con cualquier zoom.",
"prefs.construct_menu_groups": "Agrupar las herramientas de Construir por tipo de entidad",
"prefs.construct_menu_groups_help": "Muestra los encabezados Planos, Ejes y Puntos. Desactivado, se mantiene el orden original del menú.",
"prefs.contact_shading": "Sombreado de contacto suave",
"prefs.contact_shading_note": "Sombreado suave donde las piezas se acercan.",
"prefs.context_menu": "Menú contextual",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "Archivos importados",
"prefs.design_tools.note": "Nota",
"prefs.design_tools.off": "Desactivado",
"prefs.design_tools.placement_group": "Apoyo, Resalte, Encaje",
"prefs.design_tools.placement_group": "Operaciones colocadas",
"prefs.design_tools.rows": "Filas",
"prefs.devices": "Ratón 3D",
"prefs.dialog_buttons": "Botones de diálogo",
"prefs.dialog_first_letter_buttons": "Los botones de diálogo responden a su primera letra",
"prefs.dialog_first_letter_buttons_help": "Con un diálogo abierto, escribir la primera letra de la etiqueta de un botón lo pulsa: O para OK, C para Cancelar. Una letra que encaja en dos botones no hace nada, y un campo de texto con el foco conserva la pulsación. Desactivado: escribir no afecta a los botones, como antes.",
"prefs.dialogs": "Diálogos",
"prefs.dialogs_edge": "En el borde de la vista",
"prefs.dialogs_left_column": "En la columna izquierda",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "En una ventana",
"prefs.display": "Pantalla",
"prefs.edges": "Aristas y sombreado",
"prefs.export": "Exportar",
"prefs.export_name": "Nombre del archivo de exportación",
"prefs.export_name.body": "Nombre del cuerpo exportado (el primero cuando hay varios)",
"prefs.export_name.design": "Nombre del diseño",
"prefs.export_name_hint": "p. ej., {design}-{body}",
"prefs.export_name_sample": "Al exportar este diseño se ofrece: {name}",
"prefs.export_name_tip": "El nombre de archivo que ofrecen Archivo › Exportar y Guardar como malla. Se sustituyen estos marcadores:\n{placeholders}\nUna propiedad del diseño que no esté definida se omite. Deja el campo vacío para ofrecer el nombre del diseño o, en una malla, el del cuerpo.",
"prefs.extend": "Extensiones",
"prefs.extra_navigation": "Ctrl + arrastrar con el botón izquierdo sobre un espacio vacío orbita; mantén Espacio para desplazar.",
"prefs.extrude_arrow_face_stops": "La flecha de Extruir se detiene en las caras",
"prefs.extrude_arrow_face_stops_note": "Al arrastrar la flecha de distancia de Extruir, se detiene en las caras planas paralelas al perfil, como el lado opuesto de un bloque que se corta, y resalta la cara. Desactivado: la flecha solo avanza en pasos redondos.",
"prefs.extrude_view_isometric": "Girar la vista a isométrica al abrir Extrusión",
"prefs.extrude_view_return": "Volver a la vista anterior al cerrar Extrusión",
"prefs.file_operations_wait": "Esperar a que se abran los archivos",
"prefs.file_operations_wait_note": "Mientras se abre o se inserta un archivo, o se vuelven a leer los vínculos, el diseño espera tras una tarjeta con el progreso del archivo y Cancelar. Desactivado: el archivo aparece en el panel de operaciones y puedes seguir trabajando; una inserción se aplica cuando termines lo que estás haciendo, y un archivo abierto mientras tanto va a una pestaña nueva.",
"prefs.fillet_legacy_radius": "Usar el radio predeterminado anterior de Redondeo de sólido",
"prefs.fillet_legacy_radius.help": "Desactivado de forma predeterminada. Activado, un nuevo Redondeo de sólido se abre con el número 2 leído en las unidades del diseño («2 in» en un diseño en pulgadas), como antes; desactivado, se abre con el radio que trae la herramienta, 2 mm, mostrado en las unidades del diseño («0.07874 in» en un diseño en pulgadas).",
"prefs.follows_os": "Sigue al sistema operativo",
"prefs.font": "Fuente",
"prefs.font_fallback": "Los glifos que faltan en la fuente elegida se toman de la fuente integrada, así que ninguna etiqueta muestra un recuadro vacío.",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "Desplazar",
"prefs.gesture_zoom": "Zoom",
"prefs.graphics": "Gráficos",
"prefs.graphics_api": "API gráfica",
"prefs.graphics_api_auto": "Automático",
"prefs.graphics_api_help": "Elige la API gráfica usada para abrir SolidCraft. Si el próximo inicio no puede abrir la ventana, se restaurará la selección anterior.",
"prefs.graphics_api_override": "Una configuración de arranque está imponiendo la API gráfica. La selección guardada se aplicará al abrir SolidCraft de forma normal.",
"prefs.graphics_api_restart_note": "Se aplica después de reiniciar. Antes de cerrar se revisan los diseños sin guardar.",
"prefs.graphics_api_restart_unavailable": "Reinicia SolidCraft para aplicar la API gráfica guardada.",
"prefs.graphics_api_running": "Actual: {current}. Seleccionada para el próximo inicio: {selected}.",
"prefs.graphics_api_save_failed": "No se pudo guardar la selección de API gráfica: {error}",
"prefs.graphics_api_start_failed": "No se pudo preparar la API gráfica seleccionada: {error}",
"prefs.graphics_api_start_reverted": "El inicio anterior con {requested} no abrió la ventana. SolidCraft ha restaurado {previous}.",
"prefs.graphics_api_unavailable": "La selección de API gráfica está disponible en la aplicación de escritorio.",
"prefs.graphics_card": "Tarjeta gráfica",
"prefs.graphics_card_auto": "Automática",
"prefs.graphics_card_missing": "La tarjeta gráfica guardada no está disponible; se usa Automática.",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "En orden",
"prefs.history_sketches_note": "Con Bocetos en Debajo de su operación, el Historial de la izquierda lista cada boceto un nivel dentro, bajo la primera operación construida a partir de él, siempre que haya ancho para nombres. La línea de tiempo en la parte inferior mantiene siempre el orden de creación.",
"prefs.history_sketches_under_feature": "Debajo de su operación",
"prefs.history_steps_component": "Pasos del historial por componente",
"prefs.history_steps_component_note": "Con un componente activo o seleccionado, los controles del Historial recorren las operaciones de ese componente, tal como las muestra el Historial de abajo. Desactivado: recorren todas las operaciones del diseño. El Historial de la izquierda o bajo el navegador siempre recorre todas las operaciones.",
"prefs.hold_stop_snapping": "Mantén pulsado para desactivar el ajuste",
"prefs.home_fit_size": "Tamaño de Inicio y Ajustar",
"prefs.home_fit_size_note": "Cuánto de la vista ocupa el modelo al usar Inicio, Ajustar, un diseño abierto o un cambio de vista del navegador, independientemente de la configuración siguiente. 100 %: llena la vista entre los paneles, la brújula y la barra de navegación.",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "Las dos flechas curvas en la esquina del cubo giran la vista en el plano de la pantalla. Activado: la flecha horaria gira antihoraria y la antihoraria gira horaria. Desactivado: cada flecha gira la vista hacia donde se curva.",
"prefs.invert_navigator_arrows": "Invertir las flechas de rotación del cubo de vista",
"prefs.invert_navigator_arrows_note": "Las flechas alrededor del cubo orbitan la cámara hacia donde apuntan, como en Fusion e Inventor: la flecha de la izquierda apunta a la derecha y gira la cámara a la derecha. Desactivado: una flecha rota el cubo hacia el lado en que está, así la flecha izquierda gira la cámara a la izquierda. Las flechas de giro curvo no se ven afectadas.",
"prefs.joint_drag_trackball": "Girar las piezas de una unión de rótula como un trackball al arrastrarlas",
"prefs.joint_drag_trackball_help": "Arrastrar una pieza que sujeta una unión de rótula la gira con el menor giro posible alrededor de la unión, como si rodara una bola del tamaño de la pieza. Desactivado: el punto que agarraste sigue exactamente al puntero, y la pieza también puede girar sobre él.",
"prefs.keep_unsaved_also_asks": "Preguntar igualmente al cerrar la pestaña",
"prefs.keep_unsaved_also_asks_tip": "Con esto desactivado, la pestaña se cierra sin el cuadro del navegador en cuanto la copia de cada diseño sin guardar está al día.",
"prefs.keep_unsaved_in_browser": "Conservar el trabajo sin guardar en este navegador",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "no en esta GPU",
"prefs.on": "Activado",
"prefs.opaque": "Opaco",
"prefs.operations_panel": "Mostrar las operaciones en la vista",
"prefs.operations_panel_note": "Las operaciones largas (abrir un archivo, calcular una operación, un comando del agente) se muestran en la esquina inferior derecha de la vista con su progreso y un botón para cancelarlas. Desactivado: un aviso de «Calculando», como antes.",
"prefs.orbit_snap": "Mantén Mayús mientras orbitas para ajustar a un eje.",
"prefs.orientation": "Orientación",
"prefs.origin_plane_names": "Nombres de los planos de origen",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "Mostrar solo las pestañas de la cinta",
"prefs.ribbon_tabs_only_note": "La cinta se pliega hasta su fila de pestañas. Al hacer clic en una pestaña se muestran sus paneles sobre la vista hasta que empieza un comando o el puntero sale de ellos. «Solo pestañas de la cinta», en la pestaña Vista o con su atajo, alterna esta opción.",
"prefs.right_click": "Clic derecho",
"prefs.save_prompt_one_at_a_time": "Preguntar por cada diseño sin guardar por separado al cerrar varios",
"prefs.save_prompt_one_at_a_time_help": "Mostrar un aviso de guardado por cada diseño sin guardar en lugar de una lista combinada.",
"prefs.saving": "Guardado automático y recuperación",
"prefs.scale_note": "También Ctrl + / Ctrl − en la ventana. Los botones miden 28 px al 100%.",
"prefs.scale_text": "Escala y texto",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "El arco por centro sigue al cursor",
"prefs.sketch.click_selects": "El clic selecciona",
"prefs.sketch.conflict_colour": "Color de conflicto",
"prefs.sketch.cursor_coordinates": "Mostrar las coordenadas del cursor en un boceto",
"prefs.sketch.cursor_coordinates_note": "Junto al puntero, su X e Y desde el origen del boceto, también sin ninguna herramienta activa. Desactivado: solo mientras una herramienta coloca un punto.",
"prefs.sketch.drawing": "Dibujo",
"prefs.sketch.ellipse_axes": "Dibujar elipses con sus ejes",
"prefs.sketch.ellipse_axes_note": "Los ejes mayor y menor como líneas de construcción, para poder acotar los semiejes y los ejes. Desactivado: solo la elipse, y al pulsar D sobre ella se da su radio menor allí donde se arrastre el valor, dibujado y etiquetado como R, como antes.",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "Caras y aristas",
"prefs.sketch.hide_glyphs": "Ocultar glifos al alejar",
"prefs.sketch.marks": "Marcas en el boceto",
"prefs.sketch.max_points": "Boceto más grande",
"prefs.sketch.max_points_note": "El máximo de puntos o curvas que admite un boceto: 20000 de forma predeterminada, como mucho 200000. Insertar SVG e Insertar DXF rechazan un dibujo mayor. Un boceto grande se resuelve y se dibuja más despacio.",
"prefs.sketch.max_points_unit": "puntos",
"prefs.sketch.note": "Dibujo, ajuste y selección.",
"prefs.sketch.opening_closing": "Apertura y cierre",
"prefs.sketch.prefer_free_points": "Preferir puntos móviles donde se solapen",
"prefs.sketch.project_options": "Preguntar primero las opciones de Proyectar",
"prefs.sketch.recent_snap": "Ajustar a donde se cruzan dos guías",
"prefs.sketch.select_3d_curve_points": "Seleccionar puntos de curvas de boceto 3D",
"prefs.sketch.select_3d_curve_points_help": "Muestra y permite seleccionar puntos de las curvas de boceto 3D dibujadas como referencias de construcción.",
"prefs.sketch.select_other_hidden": "Seleccionar otro llega a la geometría oculta",
"prefs.sketch.shortcut_cycles_modes": "El atajo cambia de modo al pulsarlo otra vez",
"prefs.sketch.shortcut_cycles_modes_tip": "Desactivado: vuelve a iniciar la herramienta.",
"prefs.sketch.snap_to_visible_grid": "Ajustar a los cruces visibles de la cuadrícula",
"prefs.sketch.snapping_guides": "Ajuste y guías",
"prefs.sketch.state_icons": "Iconos de estado",
"prefs.sketch.tracking_guides": "Guías de centro y punto medio",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "Boceto y selección",
"prefs.sketch_selection_heading": "Boceto y selección",
"prefs.sketch_selection_note": "Cómo se ajustan los bocetos y cómo seleccionan los clics.",
"prefs.sketch_snap_to_visible_grid_note": "Un punto de un boceto se ajusta a los cruces de las líneas que dibuja la cuadrícula cuando el puntero apunta a uno, y si no, a la retícula más fina entre ellos. Desactivado: el punto se ajusta solo a la retícula más fina, como antes.",
"prefs.sketch_state_icons": "Iconos de boceto en el color de su estado",
"prefs.sketch_state_icons_note": "En Historial y el explorador, el icono de un boceto toma el color de su estado (bajo restricción, totalmente restringido o en conflicto) y su info muestra el estado. Desactivado: todos los bocetos tienen el mismo icono.",
"prefs.sketch_tab_always": "Mantener la pestaña Boceto visible",
@@ -3444,12 +3556,12 @@
"render.cpu_subsurface_denoise_reason": "La dispersión subsuperficial por CPU necesita la reducción de ruido desactivada. Se conservan tus ajustes.",
"render.cpu_subsurface_help": "La dispersión redirige la luz dentro del vidrio cerrado. Las tasas positivas necesitan iluminación indirecta con la reducción de ruido desactivada. La tasa es de colisiones por mm; 0 no añade dispersión. Un sesgo de fase positivo favorece las direcciones hacia delante; uno negativo, las hacia atrás.",
"render.cpu_summary": "Trazado CPU · reflejos · HDR · luces direccionales y puntuales",
"render.cpu_threads": "Procesos de CPU",
"render.cpu_threads": "Workers de CPU",
"render.cpu_threads_auto": "Automático",
"render.cpu_threads_custom": "Personalizado",
"render.cpu_threads_help": "Automático usa los procesos de CPU disponibles. Un proceso se ejecuta en serie. Más procesos pueden necesitar más memoria.",
"render.cpu_threads_help": "Automático usa los workers de CPU disponibles. Un worker se ejecuta en serie. Más workers pueden necesitar más memoria.",
"render.cpu_threads_single": "Uno",
"render.cpu_threads_web": "El renderizado en el navegador usa un proceso cooperativo. Se conserva la elección de procesos guardada para el escritorio.",
"render.cpu_threads_web": "El renderizado en el navegador usa un worker cooperativo. Se conserva la elección de workers guardada para el escritorio.",
"render.cpu_transparent_help": "El PNG transparente quita el fondo y conserva la cobertura de los bordes. La opacidad del cuerpo y de la cara debe mantenerse al 100 %.",
"render.cpu_volume_enable_path": "Activar iluminación indirecta",
"render.cpu_volume_enable_path_plan": "Ray tracing en CPU · profundidad {depth} · {spp} muestras/píxel · semilla {seed} · sombras trazadas. Conserva la atmósfera definida y el presupuesto de imagen.",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "PBR opaco requiere opacidad 1",
"render.error_physical_glass": "la receta seleccionada no es vidrio físico",
"render.error_preview_device": "la previsualización de producto requiere un dispositivo instalado con búfer de profundidad",
"render.error_product_placement": "colocación de producto no válida",
"render.error_product_triangle": "triángulo de producto no válido",
"render.error_provisional_identity": "identidad provisional de render o cuenta de muestras no válida",
"render.error_quality_bounds": "la proyección de calidad supera los límites nativos",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "Intentar de nuevo",
"render.gpu_seed": "Semilla aleatoria",
"render.gpu_unavailable": "El trazado GPU aún no está disponible en este dispositivo.",
"render.graphics_api_restart_vulkan": "Reiniciar con Vulkan",
"render.graphics_api_restart_warning": "Cambiar la API gráfica reinicia SolidCraft y te pide guardar los diseños sin guardar. Si la nueva API no puede abrir la ventana, se restaurará la selección anterior en el próximo inicio.",
"render.graphics_api_settings": "Ajustes gráficos",
"render.graphics_api_vulkan_required": "El trazado de trayectorias por GPU necesita Vulkan en esta sesión. Reinicia con Vulkan o sigue usando un método de imagen por CPU.",
"render.ground_apply": "Ajustar y guardar suelo",
"render.ground_gap": "Separación geométrica explícita",
"render.ground_linear_rgb": "Reflectancia difusa · RGB lineal",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "Spline 3D: pulsa puntos de ajuste en 3D; clic derecho o Esc para terminar",
"sketch.hint.trim": "Recortar: pulsa el trozo de curva que quieres quitar, o arrastra sobre los trozos que quieres quitar",
"sketch.make_selection": "Convertir la selección a {linetype}",
"sketch.move_released": "Movido: se soltaron {count} restricciones que lo unían a lo que queda ({names}).",
"sketch.move_released_one": "Movido: se soltó {count} restricción que lo unía a lo que queda ({names}).",
"sketch.open_ends": "Abiertos {count}",
"sketch.status_conflict": "restricciones en conflicto",
"sketch.status_fully_constrained": "totalmente restringido",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "Separar el texto de su curva",
"sketch_text.path_hint": "Curva del boceto que seguirá el texto: haz clic aquí y después en la curva",
"sketch_text.use_font_file": "Usar el archivo de fuente {path}",
"sketch_text.valign_baseline": "Línea base",
"sketch_text.valign_bottom": "Abajo",
"sketch_text.valign_middle": "Centro",
"sketch_text.valign_top": "Arriba",
"solid": "sólido",
"status.editing": "Editando {name}",
"status.navigation": "Asignación del ratón: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "Permitir una vez",
"ui.agent_chat_allowed": "Permitido",
"ui.agent_chat_answered": "Respuesta: {option}",
"ui.agent_chat_answered_in": "Respondido en {time}",
"ui.agent_chat_approval": "¿Permitir que el agente haga esto?",
"ui.agent_chat_attach_selection": "Adjuntar selección",
"ui.agent_chat_attach_selection_tip": "Envía con el mensaje lo que esté seleccionado en el modelo (caras, aristas, operaciones, cuerpos) para que el agente sepa a qué te refieres",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "Cuerpos",
"ui.agent_chat_ctx_elements": "Elementos",
"ui.agent_chat_ctx_features": "Operaciones",
"ui.agent_chat_ctx_gone": "Ya no está en el diseño: se ha cambiado o eliminado.",
"ui.agent_chat_ctx_more": "+{n} más",
"ui.agent_chat_ctx_other": "Otros",
"ui.agent_chat_custom_heading": "Modelo personalizado",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "Acoplar a la derecha",
"ui.agent_chat_drop_hint": "Suelta para adjuntar a tu próximo mensaje",
"ui.agent_chat_edit": "Editar",
"ui.agent_chat_ended_after": "Finalizado tras {time}",
"ui.agent_chat_exited": "El agente se ha detenido.",
"ui.agent_chat_failed_start": "No se ha podido iniciar el agente: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: un archivo CAD se importa al diseño, no se lee",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "{model} no puede usar las herramientas de SolidCraft, así que solo puede chatear. Elige un modelo con soporte de herramientas.",
"ui.agent_chat_model_rejected": "El agente no aceptó {model}: {error}",
"ui.agent_chat_model_search": "Buscar modelos…",
"ui.agent_chat_model_search_or_id": "Busca o escribe cualquier ID de modelo…",
"ui.agent_chat_model_tip": "Modelo que utiliza el agente. Se recuerda tu elección para este agente.",
"ui.agent_chat_models_failed": "No se pudieron listar modelos: {error}",
"ui.agent_chat_models_heading": "Modelos disponibles",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "Imagen siguiente",
"ui.agent_chat_no_cli": "No se ha encontrado solidcraft-cli junto a la aplicación, por lo que el agente no puede acceder al diseño.",
"ui.agent_chat_no_control": "No se ha iniciado el punto de conexión del chat del agente, por lo que no puede acceder al diseño.",
"ui.agent_chat_no_design_hint": "El agente se ejecuta sin las herramientas de SolidCraft, así que no puede leer ni cambiar el diseño: no se ha encontrado solidcraft-cli junto a la aplicación. Instala SolidCraft con solidcraft-cli al lado (en Windows, el MSI o el zip portátil) o define SOLIDCRAFT_CLI con su ruta, y vuelve a conectar.",
"ui.agent_chat_no_images": "Este agente no admite imágenes",
"ui.agent_chat_no_picture": "No hay ninguna imagen en el portapapeles",
"ui.agent_chat_no_tool_call": "El modelo no usó las herramientas de SolidCraft, así que el diseño no cambió. Elige un modelo que soporte llamada a herramientas; véase Modelos locales en la guía del chat del agente.",
@@ -5041,7 +5169,7 @@
"ui.agent_chat_permission": "El agente solicita ejecutar: {title}",
"ui.agent_chat_pick": "Agente",
"ui.agent_chat_pick_context": "Elegir contexto",
"ui.agent_chat_pick_context_tip": "Elige caras, aristas, operaciones y cuerpos del modelo para que el agente los examine y pulsa Aceptar",
"ui.agent_chat_pick_context_tip": "Elige caras, aristas, operaciones y cuerpos del modelo y pulsa OK: se añaden al mensaje como una ficha donde está el cursor (escribir @ hace lo mismo)",
"ui.agent_chat_placeholder": "Pide al agente que modifique el diseño…",
"ui.agent_chat_placeholder_busy": "Pon un mensaje en cola para cuando termine el agente (Ctrl+Intro: enviar ahora)",
"ui.agent_chat_pop_out": "Abrir en su propia ventana, que puedes mover a otra pantalla",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "Configurar un asistente",
"ui.agent_chat_side": "Lado del chat del agente",
"ui.agent_chat_signed_in": "sesión iniciada",
"ui.agent_chat_snap_none_found": "No se ha encontrado ningún agente de programación. El paquete Snap está confinado, así que no puede ver ni iniciar los agentes de programación instalados en este equipo. Para usarlos, instala SolidCraft desde el paquete AppImage, .deb o .rpm. Un agente que use una API compatible con OpenAI también funciona en el paquete Snap: configúralo con Añadir agente.",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_state_auth": "Se requiere iniciar sesión",
"ui.agent_chat_state_busy": "Trabajando…",
"ui.agent_chat_state_exited": "Agente detenido",
"ui.agent_chat_state_failed": "Conexión fallida",
"ui.agent_chat_state_no_design": "Sin acceso al diseño",
"ui.agent_chat_state_off": "Sin conexión",
"ui.agent_chat_state_ready": "Listo",
"ui.agent_chat_state_starting": "Iniciando…",
"ui.agent_chat_stop": "Detener",
"ui.agent_chat_stop_tip": "Detener el agente y todo lo que haya iniciado",
"ui.agent_chat_stop_turn_tip": "Detener el agente (Esc). Los mensajes en cola permanecen en cola.",
"ui.agent_chat_thinking_for": "Pensando durante {time}",
"ui.agent_chat_tool_running_for": "en ejecución durante {time}",
"ui.agent_chat_tools_not_started": "El agente se ejecuta sin las herramientas de SolidCraft, así que no puede leer ni cambiar el diseño: se ha encontrado solidcraft-cli, pero sus herramientas no se han iniciado (el error del chat explica por qué). Vuelve a conectar; si sigue pasando, reinstala SolidCraft.",
"ui.agent_chat_transcript_assistant": "Asistente:",
"ui.agent_chat_transcript_user": "Usuario:",
"ui.agent_chat_turn_limit": "Cambios por mensaje",
"ui.agent_chat_turn_unlimited": "Sin límite",
"ui.agent_chat_undo_changes": "Deshacer estos cambios",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "{count} cuerpo",
"ui.browser_bodies_other": "{count} cuerpos",
"ui.browser_collapse": "Contraer el navegador",
"ui.browser_collapse_below": "Contraer debajo",
"ui.browser_expand": "Expandir el navegador",
"ui.browser_expand_below": "Expandir debajo",
"ui.browser_title": "Navegador",
"ui.calibrate": "Calibrar",
"ui.cancel": "Cancelar",
@@ -5269,6 +5409,7 @@
"ui.collapse": "Contraer",
"ui.collinear": "Colineal",
"ui.colour_vision": "Visión del color",
"ui.colour_vision_bends": "Pliegues",
"ui.colour_vision_deutan": "Deuteranopía",
"ui.colour_vision_deutan_tip": "Para personas con sensibilidad reducida o ausente al verde",
"ui.colour_vision_failed": "Fallido",
@@ -5298,14 +5439,24 @@
"ui.conic_curve": "Curva cónica",
"ui.constant": "Constante",
"ui.constraints_conflict": "Conflicto entre restricciones",
"ui.construct_auto.chosen": "Elegido a partir de tus selecciones. Elige otra referencia, o quita una, para cambiar el método.",
"ui.construct_auto.no_fit": "Elige otras referencias: ningún método se puede construir con estas.",
"ui.construct_auto.pick": "Elige con qué construirlo: el método se deduce de tus selecciones.",
"ui.construct_auto.refs": "Referencias",
"ui.construct_auto.select": "Selecciona primero las referencias con las que construir",
"ui.construct_axes": "Ejes",
"ui.construct_planes": "Planos",
"ui.construct_points": "Puntos",
"ui.construction": "Construcción",
"ui.construction.angle_hint": "Línea de construcción: haz clic en un punto, luego escribe un ángulo o elige una dirección",
"ui.construction.axis_hint": "Línea de construcción: haz clic en un punto o escribe su distancia al eje del boceto",
"ui.construction.bisector_hint": "Bisectriz: elige dos líneas rectas que se intersecten, luego la solución deseada",
"ui.construction.common_hint": "Tangente común: elige dos círculos/arcos, luego la solución deseada",
"ui.construction.contact_hint": "Tangente: elige un círculo/arco o spline/cónica abierta, luego el punto de contacto (libre)",
"ui.construction.external_hint": "Tangente: elige un círculo o arco, un punto externo, luego la solución deseada",
"ui.construction.free_hint": "Línea de construcción: haz clic en dos puntos; clic derecho para reiniciar",
"ui.construction.normal_needs_length": "Una línea infinita es siempre de construcción: escribe una longitud para dibujar una línea normal",
"ui.construction.parallel_hint": "Línea de construcción: elige una línea recta y luego haz clic o escribe el desfase; haz clic con el botón derecho para cambiar la referencia",
"ui.construction.point_hint": "Línea de construcción: haz clic en el punto por el que debe pasar",
"ui.construction.reference_hint": "Línea de construcción: elige una línea recta, luego un punto; clic derecho para cambiar la",
"ui.construction.ribbon_label": "X-Líneas",
@@ -5448,6 +5599,17 @@
"ui.ellipse": "Elipse",
"ui.emboss_wrap_note": "Los perfiles de líneas ortogonales tangentes a un cilindro compatible se envuelven automáticamente. Elegir una pared para definir el destino.",
"ui.end": "Fin",
"ui.end_cap.chamfer": "Chaflán de esquina",
"ui.end_cap.direction": "Dirección",
"ui.end_cap.faces": "Caras de extremo",
"ui.end_cap.inset": "Retranqueo",
"ui.end_cap.inset_kind": "Retranqueo por",
"ui.end_cap.inset_ratio": "Proporción de retranqueo",
"ui.end_cap.inward": "Hacia dentro",
"ui.end_cap.length": "Longitud",
"ui.end_cap.outward": "Hacia fuera",
"ui.end_cap.ratio": "Proporción del espesor",
"ui.end_cap_title": "TAPA DE EXTREMO",
"ui.end_radius": "Radio final",
"ui.end_scale": "Escala final",
"ui.ends": "Extremos",
@@ -5468,7 +5630,10 @@
"ui.explode_needs_two_components": "Vista explosada separa los componentes, así el diseño necesita dos o más (Nuevo componente, Insertar diseño o Crear componentes desde cuerpos)",
"ui.exportDxf": "Exportar DXF…",
"ui.export_ellipsis_keymap": "Exportar…",
"ui.export_glb": "Exportar GLB",
"ui.export_keymap_tip": "Exportar las teclas, los favoritos de la búsqueda S y la barra de herramientas como archivo",
"ui.export_selects_only_body": "Seleccionar el único cuerpo al exportar una malla",
"ui.export_selects_only_body_tip": "Exportar STL, Exportar 3MF y Enviar al laminador empiezan con el cuerpo del diseño seleccionado cuando solo hay uno.",
"ui.extend": "Extender",
"ui.extent": "Extensión",
"ui.extent_type": "Tipo de extensión",
@@ -5528,6 +5693,8 @@
"ui.finest": "Muy fina",
"ui.finish_sketch": "Finalizar boceto",
"ui.first_dimension_scales": "La primera cota escala el dibujo",
"ui.first_dimension_scales_about_origin": "Escalar respecto al origen del boceto",
"ui.first_dimension_scales_about_origin_tip": "Activado: el dibujo siempre crece o se encoge respecto al origen del boceto, así que una forma dibujada lejos del origen se mueve. Desactivado: un dibujo que nada ata al origen se escala respecto a su propio centro y se queda donde se dibujó.",
"ui.first_dimension_scales_tip": "Activado: la primera cota de longitud de un boceto escala el dibujo que mide, de modo que su forma no cambia. Desactivado: la cota solo dimensiona lo que mide.",
"ui.fit": "Ajustar",
"ui.fix_unfix": "Fijar/liberar",
@@ -5783,7 +5950,7 @@
"ui.origin": "Origen",
"ui.palette_construction_mode": "Modo de construcción (X)",
"ui.palette_more": "Más",
"ui.palette_sketch_options": "Opciones de croquis",
"ui.palette_sketch_options": "Opciones de boceto",
"ui.pan": "Desplazar",
"ui.pan_zoom_orbit": "Desplazar, zoom y orbitar",
"ui.panel_fixture.apply": "Aplicar",
@@ -5903,7 +6070,7 @@
"ui.pitch": "Inclinación",
"ui.placement": "Colocación",
"ui.placement_handles": "Tiradores de colocación",
"ui.placement_handles_tip": "Tiradores en la vista previa de un Refuerzo, Saliente o Encaje a presión: arrastra el marcador para moverlo por el modelo, gíralo por su anillo.",
"ui.placement_handles_tip": "Un marcador para arrastrar la operación por el modelo y, donde la operación puede girar, un anillo para girarla.",
"ui.plane": "Plano",
"ui.plane_at_angle": "Plano en ángulo",
"ui.plugins": "Complementos",
@@ -5940,7 +6107,7 @@
"ui.print_face_cleared": "{body}: cara de impresión limpiada",
"ui.print_face_input": "Cara de impresión",
"ui.print_face_pick": "Selecciona una cara plana de un cuerpo sólido para hacerla la cara de impresión",
"ui.print_face_set": "{body}: cara de impresión establecida; Enviar a Laminador coloca el cuerpo sobre ella",
"ui.print_face_set": "{body}: cara de impresión establecida; Enviar al laminador coloca el cuerpo sobre ella",
"ui.profile": "Perfil",
"ui.profile_plane": "Plano de perfil",
"ui.profiles": "Perfiles",
@@ -5950,6 +6117,7 @@
"ui.project_references_construction_note": "Proyectar, Intersecar, Incluir geometría 3D y las aristas de cara de un boceto nuevo sobre una cara crean geometría de construcción: referencias sobre las que dibujar, excluidas de los perfiles. Siguen vinculadas al modelo.",
"ui.properties": "Propiedades",
"ui.properties.copy_matrix": "Copiar matriz",
"ui.properties.copy_value": "Haz clic para copiar",
"ui.properties.first_moments": "Primeros momentos",
"ui.properties.inertia": "Momento de inercia",
"ui.properties.inertia_note": "Respecto al centro de masas, en ejes mundiales (g·{unit}²)",
@@ -5962,6 +6130,7 @@
"ui.properties.measuring_failed": "La medición se detuvo antes de terminar.",
"ui.properties.principal_axis": "Eje principal {number}",
"ui.properties.principal_moments": "Momentos principales",
"ui.properties.value_copied": "Valor copiado",
"ui.pull_direction": "Dirección de tracción",
"ui.quality": "Calidad",
"ui.quantity": "Cantidad",
@@ -5982,11 +6151,14 @@
"ui.relink_design_changed": "El ensamblaje cambió mientras se elegía un origen. Inicia Revincular origen de nuevo.",
"ui.relink_done": "Origen revinculado en todas las instancias.",
"ui.relink_not_linked": "Este componente no está vinculado a un diseño de origen.",
"ui.relink_one_done": "Origen revinculado en esta instancia.",
"ui.relink_select_one": "Selecciona primero un componente vinculado o una de sus instancias.",
"ui.relink_source_all": "Revincular origen (todas las instancias)…",
"ui.relink_source_one": "Revincular origen…",
"ui.removeFromQuickAccess": "Quitar de Acceso rápido",
"ui.removeFromToolbar": "Quitar de la barra de herramientas",
"ui.removeSection": "Quitar sección",
"ui.renameSelectedBodies": "Cambiar nombre de los cuerpos seleccionados",
"ui.render": "Renderizar",
"ui.renderer": "Motor de renderizado",
"ui.repeat": "Repetir",
@@ -6017,6 +6189,8 @@
"ui.ribbon_pin_footer": "Los comandos anclados se muestran en la cinta. Pasa el ratón sobre una fila para anclarla o desanclarla.",
"ui.ribbon_workspace": "Espacio de trabajo",
"ui.right": "Derecha",
"ui.right_click_confirms": "El clic derecho confirma las entradas del diálogo",
"ui.right_click_confirms_tip": "Con un diálogo abierto, un clic derecho en la vista pasa a la siguiente entrada vacía y, en la última, ejecuta OK",
"ui.save": "Guardar",
"ui.save_as": "Guardar como",
"ui.save_mesh_no_slicer_open": "No se ha encontrado laminador: elige Personalizado… y elige tu programa de laminado.",
@@ -6076,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "Filtro de selección",
"ui.sketch_keys_only": "Mantener las teclas del modelo fuera de los bocetos",
"ui.sketch_keys_only_tip": "Mientras editas un boceto, solo se ejecutan las teclas de boceto y las que funcionan en todas partes; una tecla de modelo como E o F no hace nada, así que una tecla perdida no puede cerrar un boceto pesado.",
"ui.sketch_links_added_curve": "{command} ha añadido 1 curva al boceto.",
"ui.sketch_links_added_curves": "{command} ha añadido {count} curvas al boceto.",
"ui.sketch_links_added_curves_and_points": "{command} ha añadido {curves} y {points} al boceto.",
"ui.sketch_links_added_point": "{command} ha añadido 1 punto al boceto.",
"ui.sketch_links_added_points": "{command} ha añadido {count} puntos al boceto.",
"ui.sketch_links_curve_count": "{count} curvas",
"ui.sketch_links_curve_count_one": "1 curva",
"ui.sketch_links_hidden": "El resultado está oculto porque {option} está desactivado en la paleta del boceto.",
"ui.sketch_links_point_count": "{count} puntos",
"ui.sketch_links_point_count_one": "1 punto",
"ui.sketch_modifiers": "Modificadores del boceto",
"ui.sketch_project_geometry": "Geometría",
"ui.sketch_report.all_constrained": "Todo está totalmente restringido.",
@@ -6115,6 +6299,7 @@
"ui.step_values": "Incrementar valores con las flechas y la rueda",
"ui.step_values_tip": "En un campo de valor en el que estés escribiendo, Arriba/Abajo cambian un número simple de 1 en 1 (Mayús: 10, Alt: 0,1), y la rueda del ratón sobre el campo hace lo mismo. Las expresiones se dejan tal como se escriben.",
"ui.stitch_tolerance_hint": "estricta",
"ui.straighten": "Enderezar",
"ui.stretch": "Estirar",
"ui.supersampling": "Supermuestreo (SSAA)",
"ui.supersampling_adaptive": "Solo cuando la vista está inmóvil",
@@ -6188,6 +6373,8 @@
"ui.view_angles_yaw": "Rumbo",
"ui.view_angles_zero": "Poner {axis} a 0°",
"ui.view_centre": "Centro de la vista",
"ui.view_compass_tip": "Vista desde {axis}. Haz clic otra vez para invertir. Arrastra para orbitar.",
"ui.view_compass_tip_snap": "Vista desde {axis}. Haz clic otra vez para invertir. Arrastra para orbitar; mantén Mayús para ajustar.",
"ui.viewport_status_clear": "Desactivar {name}",
"ui.viewport_status_clear_hint": "Desactivar {name} · Esc",
"ui.viewport_status_edges": "{count} aristas",
+7 -2
View File
@@ -885,6 +885,7 @@
"Variable Radius": "Muuttuva säde",
"Variable radius": "Muuttuva säde",
"Velocity": "Nopeus",
"Vertical": "Pystysuunta",
"Vertices": "Kärkipisteet",
"View": "Näkymä",
"View navigator": "Näkymänavigaattori",
@@ -2580,7 +2581,7 @@
"prefs.design_tools.imported_files": "Tuodut tiedostot",
"prefs.design_tools.note": "Huomautus",
"prefs.design_tools.off": "Pois",
"prefs.design_tools.placement_group": "Tuki, Tappi, Napsautusliitos",
"prefs.design_tools.placement_group": "Sijoitettavat piirteet",
"prefs.design_tools.rows": "Rivit",
"prefs.devices": "3D-hiiri",
"prefs.dialog_buttons": "Valintaikkunan painikkeet",
@@ -4680,6 +4681,10 @@
"sketch_text.path_clear": "Irrota teksti käyrältään",
"sketch_text.path_hint": "Luonnoksen käyrä, jota teksti seuraa: napsauta tätä ja sitten käyrää",
"sketch_text.use_font_file": "Käytä fonttitiedostoa {path}",
"sketch_text.valign_baseline": "Perusviiva",
"sketch_text.valign_bottom": "Ala",
"sketch_text.valign_middle": "Keski",
"sketch_text.valign_top": "Ylä",
"solid": "yhtenäinen",
"status.editing": "Muokataan: {name}",
"status.navigation": "Hiiren toiminnot: {mapping}",
@@ -5845,7 +5850,7 @@
"ui.pitch": "Nousu",
"ui.placement": "Sijoitus",
"ui.placement_handles": "Sijoituskahvat",
"ui.placement_handles_tip": "Kahvat tuen, tapin tai napsautusliitoksen esikatselussa: siirrä merkkiä mallin pinnalla vetämällä ja käännä sitä renkaasta",
"ui.placement_handles_tip": "Merkki piirteen vetämiseen mallin yli ja, jos piirrettä voi kääntää, rengas sen kääntämiseen.",
"ui.plane": "Taso",
"ui.plane_at_angle": "Taso kulmassa",
"ui.plugins": "Laajennukset",
+46 -2
View File
@@ -705,6 +705,7 @@
"Value": "Valeur",
"Variable Radius": "Rayon variable",
"Velocity": "Vitesse",
"Vertical": "Vertical",
"Vertices": "Sommets",
"View navigator": "Repère de navigation",
"Volume": "Volume",
@@ -961,6 +962,7 @@
"cmd.file_save_mesh": "Enregistrer comme maillage",
"cmd.file_send_to_slicer": "Envoyer au slicer",
"cmd.file_slicers": "Slicers installés",
"cmd.frame_end_cap": "Bouchon d'extrémité",
"cmd.frame_member": "Élément de structure",
"cmd.frame_profile_insert": "Insérer un profilé",
"cmd.frame_profile_list": "Bibliothèque de profilés",
@@ -1410,6 +1412,7 @@
"dialog.pattern_sketch_not_object": "Choisissez des corps ou des fonctions : une esquisse n'est ni l'un ni l'autre. Répétez ses courbes avec la Répétition ou la Symétrie de l'esquisse, ou extrudez-la d'abord.",
"dialog.primitive_point_tip": "Un point qui remplit X, Y et Z : cliquer ici, puis sur un sommet, une arête ou une face du modèle, sur un point d'une esquisse ou sur l'origine.",
"dialog.reference_edge_tip": "Une arête droite de la face choisie, depuis laquelle la distance ci-dessous est mesurée : cliquer ici, puis sur l'arête.",
"dialog.right_click_pick": "Sélectionner d’abord {input}",
"dialog.select": "↖ Sélectionner",
"dialog.selected_count": "↖ {count} sélectionné(s)",
"dialog.selection_constraint": "Contrainte {id}",
@@ -1450,6 +1453,8 @@
"dxf.tolerance": "Tolérance des courbes",
"dxf.tolerance_help": "Corps visibles et esquisses affichées uniquement. Les courbes sont approchées par des segments de droite. Une tolérance plus faible donne des courbes plus fines, au prix de plus de temps et de mémoire.",
"each rail's curves must be in one sketch": "les courbes de chaque rail de guidage doivent être dans une seule esquisse",
"error.end_cap_faces": "Sélectionnez au moins une face d'extrémité ouverte d'un élément de structure",
"error.end_cap_unresolved": "L'extrémité {ends} de ce bouchon n'est plus sur le modèle. Sélectionnez à nouveau les faces d'extrémité",
"feature computation ended without a result": "le calcul de la fonction s'est terminé sans résultat",
"file.open.drawing_filter": "Conceptions, fichiers CAO, maillages et dessins",
"file_load.built": "Construit jusqu’ici : {built} entités sur {total}.",
@@ -1541,6 +1546,7 @@
"help.file.send_to_slicer": "Enregistre les corps sélectionnés en fichier 3MF et l'ouvre dans le slicer de votre choix. À utiliser pour passer du modèle à l'impression en une seule étape.",
"help.font_details": "L’interface utilise les polices intégrées d’egui (Ubuntu Light et Hack, sous les licences Ubuntu Font Licence et MIT/Bitstream Vera ; Noto Emoji et la police d’icônes emoji, sous OFL et MIT). Le texte des esquisses utilise Liberation Sans (SIL OFL 1.1). Le pack de polices facultatif de The Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic ; SIL OFL 1.1), n’est pas inclus dans les versions de SolidCraft.",
"help.fonts": "Polices",
"help.frame.end_cap": "Ferme les extrémités ouvertes des éléments de structure avec des plaques à la forme du contour du profil. Utilisez-le pour boucher tubes, cornières et poutres, sur l'extrémité ou encastrées.",
"help.frame.member": "Place un profilé, tel qu'un tube ou un profilé d'aluminium, le long des lignes d'une esquisse de structure, un élément par ligne. À utiliser pour construire des châssis, des racks et des structures soudées.",
"help.inspect.accessibility": "Colore les faces qu'un outil peut atteindre depuis une direction, et celles qu'il ne peut pas atteindre. À utiliser pour vérifier l'usinabilité ou le moulage d'une pièce depuis ce côté.",
"help.inspect.center_of_mass": "Affiche le centre de gravité des corps, de chacun séparément et de l'ensemble, à densité uniforme. À utiliser pour vérifier l'équilibre et l'endroit où une pièce basculera.",
@@ -2014,6 +2020,9 @@
"material.selection.mixed": "Matériaux différents",
"measure.at": "À",
"measure.item": "Élément {number}",
"measure.perimeter": "Périmètre",
"measure.perimeter_inner": "Périmètre intérieur",
"measure.perimeter_outer": "Périmètre extérieur",
"measure.quick_copied": "Mesure copiée",
"measure.quick_copy": "Cliquer pour copier la mesure",
"measure.quick_edges": "{count} arêtes",
@@ -2305,6 +2314,8 @@
"prefs.carousel_previous": "Précédent",
"prefs.choose_font": "Choisir un fichier de police…",
"prefs.click": "Clic",
"prefs.constraint_glyph_size": "Taille des symboles de contraintes",
"prefs.constraint_glyph_size_note": "Taille à laquelle les symboles de contraintes, avec leurs lettres ou icônes, sont dessinés dans une esquisse. 100 % est la taille habituelle ; les symboles gardent cette taille à l'écran quel que soit le zoom.",
"prefs.contact_shading": "Ombrage de contact doux",
"prefs.contact_shading_note": "Ombrage doux là où les pièces se rapprochent.",
"prefs.context_menu": "Menu contextuel",
@@ -2332,7 +2343,7 @@
"prefs.design_tools.imported_files": "Fichiers importés",
"prefs.design_tools.note": "Remarque",
"prefs.design_tools.off": "Désactivé",
"prefs.design_tools.placement_group": "Appui, Bossage, Clip",
"prefs.design_tools.placement_group": "Fonctions placées",
"prefs.design_tools.rows": "Lignes",
"prefs.devices": "Souris 3D",
"prefs.dialog_buttons": "Boutons OK",
@@ -2577,6 +2588,8 @@
"prefs.sketch.center_arc": "L'arc par centre suit le curseur",
"prefs.sketch.click_selects": "Le clic sélectionne",
"prefs.sketch.conflict_colour": "Couleur de conflit",
"prefs.sketch.cursor_coordinates": "Afficher les coordonnées du curseur dans une esquisse",
"prefs.sketch.cursor_coordinates_note": "À côté du pointeur, ses X et Y depuis l'origine de l'esquisse, même sans outil actif. Désactivé : seulement pendant qu'un outil place un point.",
"prefs.sketch.drawing": "Dessin",
"prefs.sketch.escape_twice_finishes": "Un double Échap termine l'esquisse",
"prefs.sketch.escape_twice_finishes_note": "Deux pressions rapides sur Échap terminent l'esquisse. Désactivé : Échap annule seulement l'outil ou la sélection, et Terminer l'esquisse ferme l'esquisse.",
@@ -4173,6 +4186,8 @@
"sketch.dof_left_one": "{count} degré de liberté restant",
"sketch.draw_curves": "Dessiner en {linetype}",
"sketch.make_selection": "Convertir la sélection en {linetype}",
"sketch.move_released": "Déplacé : {count} contraintes qui le liaient au reste ont été relâchées ({names}).",
"sketch.move_released_one": "Déplacé : {count} contrainte qui le liait au reste a été relâchée ({names}).",
"sketch.open_ends": "{count} ouvertes",
"sketch.status_conflict": "contraintes en conflit",
"sketch.status_fully_constrained": "entièrement contrainte",
@@ -4203,6 +4218,10 @@
"sketch_text.path_clear": "Détacher le texte de sa courbe",
"sketch_text.path_hint": "Une courbe de l'esquisse que le texte suit : cliquer ici, puis sur la courbe",
"sketch_text.use_font_file": "Utiliser le fichier de police {path}",
"sketch_text.valign_baseline": "Ligne de base",
"sketch_text.valign_bottom": "Bas",
"sketch_text.valign_middle": "Milieu",
"sketch_text.valign_top": "Haut",
"solid": "plein (sans paroi)",
"status.editing": "Modification de {name}",
"status.navigation": "Affectation des boutons de la souris : {mapping}",
@@ -4402,6 +4421,7 @@
"ui.agent_chat_allow_once": "Autoriser une fois",
"ui.agent_chat_allowed": "Autorisé",
"ui.agent_chat_answered": "Réponse : {option}",
"ui.agent_chat_answered_in": "Répondu en {time}",
"ui.agent_chat_approval": "Autoriser l'agent à effectuer cette action ?",
"ui.agent_chat_attach_selection": "Joindre la sélection",
"ui.agent_chat_attach_selection_tip": "Envoyer ce qui est sélectionné dans le modèle (faces, arêtes, fonctions, corps) avec le message, pour que l'agent sache de quoi vous parlez",
@@ -4443,6 +4463,7 @@
"ui.agent_chat_dock_right": "Ancrer à droite",
"ui.agent_chat_drop_hint": "Déposer pour joindre à votre prochain message",
"ui.agent_chat_edit": "Modifier",
"ui.agent_chat_ended_after": "Arrêté après {time}",
"ui.agent_chat_exited": "L'agent s'est arrêté.",
"ui.agent_chat_failed_start": "L'agent n'a pas pu démarrer : {error}",
"ui.agent_chat_file_cad_not_read": "{name} : un fichier de CAO est importé dans la conception, pas lu",
@@ -4537,6 +4558,10 @@
"ui.agent_chat_setup_title": "Configurer un assistant",
"ui.agent_chat_side": "Côté du chat de l'agent",
"ui.agent_chat_signed_in": "authentifié",
"ui.agent_chat_snap_none_found": "Aucun agent de programmation trouvé. Le paquet Snap est confiné, il ne peut donc ni voir ni lancer les agents de programmation installés sur cet ordinateur. Pour les utiliser, installer plutôt SolidCraft depuis le paquet AppImage, .deb ou .rpm. Un agent qui utilise une API compatible OpenAI fonctionne aussi dans le paquet Snap. Le configurer avec Ajouter un agent.",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_state_auth": "Authentification requise",
"ui.agent_chat_state_busy": "Travail en cours…",
"ui.agent_chat_state_exited": "Agent arrêté",
@@ -4547,6 +4572,8 @@
"ui.agent_chat_stop": "Arrêter",
"ui.agent_chat_stop_tip": "Arrêter l'agent et tout ce qu'il a lancé",
"ui.agent_chat_stop_turn_tip": "Arrêter l'agent (Esc). Les messages en file d'attente y restent.",
"ui.agent_chat_thinking_for": "Réfléchit depuis {time}",
"ui.agent_chat_tool_running_for": "en cours depuis {time}",
"ui.agent_chat_turn_limit": "Modifications par message",
"ui.agent_chat_turn_unlimited": "Illimité",
"ui.agent_chat_undo_changes": "Annuler ces modifications",
@@ -4703,7 +4730,9 @@
"ui.browser_bodies_one": "{count} corps",
"ui.browser_bodies_other": "{count} corps",
"ui.browser_collapse": "Réduire le navigateur",
"ui.browser_collapse_below": "Réduire en dessous",
"ui.browser_expand": "Développer le navigateur",
"ui.browser_expand_below": "Développer en dessous",
"ui.browser_title": "Navigateur",
"ui.calibrate": "Étalonner",
"ui.cancel": "Annuler",
@@ -4911,6 +4940,17 @@
"ui.ellipse": "Ellipse",
"ui.emboss_wrap_note": "Les profils de lignes orthogonales tangents à un cylindre pris en charge s'enroulent automatiquement. Choisir une paroi pour définir une cible.",
"ui.end": "Fin",
"ui.end_cap.chamfer": "Chanfrein d'angle",
"ui.end_cap.direction": "Direction",
"ui.end_cap.faces": "Faces d'extrémité",
"ui.end_cap.inset": "Retrait",
"ui.end_cap.inset_kind": "Retrait en",
"ui.end_cap.inset_ratio": "Rapport de retrait",
"ui.end_cap.inward": "Vers l'intérieur",
"ui.end_cap.length": "Longueur",
"ui.end_cap.outward": "Vers l'extérieur",
"ui.end_cap.ratio": "Rapport de l'épaisseur",
"ui.end_cap_title": "BOUCHON D'EXTRÉMITÉ",
"ui.end_radius": "Rayon final",
"ui.end_scale": "Échelle finale",
"ui.ends": "Extrémités",
@@ -5247,7 +5287,7 @@
"ui.pitch": "Pas",
"ui.placement": "Placement",
"ui.placement_handles": "Poignées de placement",
"ui.placement_handles_tip": "Poignées sur l'aperçu d'un appui, d'un bossage ou d'un clip : faire glisser le repère pour le déplacer sur le modèle, le tourner par son anneau",
"ui.placement_handles_tip": "Un repère pour faire glisser la fonction sur le modèle et, là où la fonction peut pivoter, un anneau pour la faire pivoter.",
"ui.plane": "Plan",
"ui.plane_at_angle": "Plan incliné",
"ui.plugins": "Modules externes",
@@ -5292,6 +5332,7 @@
"ui.project_face_edges_sketch": "Projeter les arêtes de la face dans les nouvelles esquisses",
"ui.properties": "Propriétés",
"ui.properties.copy_matrix": "Copier la matrice",
"ui.properties.copy_value": "Cliquer pour copier",
"ui.properties.first_moments": "Moments statiques",
"ui.properties.inertia": "Moment d'inertie",
"ui.properties.inertia_note": "Par rapport au centre de gravité, dans les axes du monde (g·{unit}²)",
@@ -5304,6 +5345,7 @@
"ui.properties.measuring_failed": "La mesure s'est arrêtée avant la fin.",
"ui.properties.principal_axis": "Axe principal {number}",
"ui.properties.principal_moments": "Moments principaux",
"ui.properties.value_copied": "Valeur copiée",
"ui.pull_direction": "Direction de démoulage",
"ui.quality": "Qualité",
"ui.quantity": "Quantité",
@@ -5355,6 +5397,8 @@
"ui.ribbon_pin_footer": "Les commandes épinglées s’affichent dans le ruban. Survolez une ligne pour l’épingler ou la détacher.",
"ui.ribbon_workspace": "Espace de travail",
"ui.right": "Droite",
"ui.right_click_confirms": "Le clic droit valide les entrées du dialogue",
"ui.right_click_confirms_tip": "Avec un dialogue ouvert, un clic droit dans la vue passe à l’entrée vide suivante et, sur la dernière, exécute OK",
"ui.save": "Enregistrer",
"ui.save_as": "Enregistrer sous",
"ui.save_mesh_no_slicer_open": "Aucun slicer trouvé : choisir Personnalisé… et sélectionner votre programme de slicer",
+9 -1
View File
@@ -698,6 +698,7 @@
"Value": "Valor",
"Variable Radius": "Raio variable",
"Velocity": "Velocidade",
"Vertical": "Vertical",
"Vertices": "Vértices",
"View navigator": "Navegador de vistas",
"Volume": "Volume",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "EDITAR {title}",
"dialog.no_shown_body": "Non hai ningún corpo visible para modificar: mostra un ou escolle Corpo novo",
"dialog.pattern_sketch_not_object": "Escolle corpos ou operacións: un bosquexo non é ningunha das dúas cousas. Repite as súas curvas co Patrón ou a Simetría do propio bosquexo, ou extrúeo primeiro.",
"dialog.right_click_pick": "Selecciona primeiro {input}",
"dialog.select": "↖ Seleccionar",
"dialog.selected_count": "↖ {count} seleccionados",
"dialog.selection_constraint": "Restrición {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Separar o texto da súa curva",
"sketch_text.path_hint": "Unha curva do bosquexo que segue o texto: fai clic aquí e despois na curva",
"sketch_text.use_font_file": "Usar o ficheiro de tipo de letra {path}",
"sketch_text.valign_baseline": "Liña base",
"sketch_text.valign_bottom": "Abaixo",
"sketch_text.valign_middle": "Medio",
"sketch_text.valign_top": "Arriba",
"solid": "sólido",
"status.editing": "Editando {name}",
"status.navigation": "Asignación do rato: {mapping}",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Paso",
"ui.placement": "Colocación",
"ui.placement_handles": "Asas de colocación",
"ui.placement_handles_tip": "Asas na vista previa dun Apoio, un Saínte ou un Encaixe a presión: arrastra o marcador para movelo polo modelo, xírao polo seu anel",
"ui.placement_handles_tip": "Un marcador para arrastrar a operación polo modelo e, onde a operación pode xirar, un anel para xirala.",
"ui.plane": "Plano",
"ui.plane_at_angle": "Plano en ángulo",
"ui.plugins": "Complementos",
@@ -5013,6 +5019,8 @@
"ui.ribbon_pin_footer": "As ordes fixadas móstranse na cinta. Pasa o cursor sobre unha fila para fixala ou soltala.",
"ui.ribbon_workspace": "Espazo de traballo",
"ui.right": "Dereita",
"ui.right_click_confirms": "O clic dereito confirma as entradas do diálogo",
"ui.right_click_confirms_tip": "Cun diálogo aberto, un clic dereito na vista pasa á seguinte entrada baleira e, na última, executa OK",
"ui.save": "Gardar",
"ui.save_as": "Gardar como",
"ui.save_mesh_no_slicer_open": "Non se atopou ningún laminador: escolle Personalizado… e selecciona o programa do teu laminador",
+189 -2
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "יש לגרור כדי להזיז את החור; לחיצה מסירה אותו",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "יש לגרור כדי להזיז את המשען על פני המודל. הוא נצמד לנקודות סקיצה על הפאה.",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "יש לגרור כדי להזיז את חיבור ההצמדה על פני המודל. הוא נצמד לנקודות סקיצה על הפאה.",
"Drag to place it on another face.": "יש לגרור כדי להציב אותו על פאה אחרת.",
"Drag to point the catch in another direction.": "יש לגרור כדי לכוון את התפס לכיוון אחר.",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "יש לגרור כדי לסובב את המשען בצעדים של 5°. יש להחזיק Alt או Ctrl לסיבוב חופשי.",
"Drive Joint": "הנעת מפרק",
@@ -513,6 +514,7 @@
"Offset Y": "היסט Y",
"Offset Z": "היסט Z",
"On your computer": "במחשב שלך",
"One more stretch of the picked edge, each with its own angle, height and turns": "מקטע נוסף של המקצוע הנבחר, שלכל אחד זווית, גובה וכיפופים משלו",
"Opacity": "אטימות",
"Open GitHub": "פתיחת GitHub",
"Open GitHub draft": "פתיחת טיוטה ב־GitHub",
@@ -634,6 +636,7 @@
"Remove the track": "הסרת הרצועה",
"Remove this bend": "הסרת הכיפוף הזה",
"Remove this point": "הסרת נקודה זו",
"Remove this segment": "הסרת המקטע הזה",
"Rename Feature": "שינוי שם פיצ'ר",
"Rename Folder": "שינוי שם תיקייה",
"Render Stage": "שלב הרינדור",
@@ -723,6 +726,7 @@
"Section position": "מיקום החתך",
"Sections": "חתכים",
"Sections (one sketch each)": "חתכים (סקיצה אחת לכל אחד)",
"Segments": "מקטעים",
"Select Features": "בחירת פיצ'רים",
"Select Other": "בחירת אחר",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "בחירת אחר: החזקת הכפתור השמאלי ללא תזוזה על המודל (או לחיצה ימנית › בחירת אחר…) מציגה את כל מה שמתחת לסמן; לחיצה נוספת באותה נקודה בוחרת את הפריט הבא שם. לחיצה כפולה על הכפתור האמצעי חוזרת לתצוגת הבית (העדפות › ניווט).",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "המרווח חייב להיות מספר שונה מאפס",
"Specialise": "התמחות",
"Speed": "מהירות",
"Split Edge": "פיצול המקצוע",
"Splitting tool": "כלי פיצול",
"Square": "ריבוע",
"Stainless Steel": "פלדת אל-חלד",
@@ -885,6 +890,7 @@
"Variable Radius": "רדיוס משתנה",
"Variable radius": "רדיוס משתנה",
"Velocity": "מהירות",
"Vertical": "אנכי",
"Vertices": "קודקודים",
"View": "תצוגה",
"View navigator": "ניווט תצוגה",
@@ -938,6 +944,13 @@
"ai.prefs.connect_apps_note": "כיבוי מסיר שוב את הרשומות.\n\nבהפעלת SolidCraft הוא מתווסף כשרת MCP ליישומי הבינה המלאכותית שנמצאו במחשב זה (OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code), כך שסוכן יכול להשתמש בו בלי שום הגדרה. רק הרשומה solidcraft נוספת או שהנתיב שלה מתעדכן; רשומה ששינית נשארת כפי שהיא, ולפני כן נשמר גיבוי של הקובץ. כבוי: הרשומות שנוספו מוסרות. הפקודה עזרה > חיבור עוזרי בינה מלאכותית… עושה זאת ידנית.",
"ai.prefs.connect_at_start": "לחבר את הסוכן האחרון בהפעלה",
"ai.prefs.connect_at_start_note": "מפעיל ברקע את הסוכן שאליו התחברת לאחרונה (או את סוכן ברירת המחדל) בכל הפעלה של SolidCraft, כך שהוא מוכן לשיחה. לא כש-SolidCraft מופעל עם --control. אם ההתחברות נכשלת, העוזר מציג „ההתחברות נכשלה” ולחצן „ניסיון חוזר”.",
"ai.prefs.control_failed": "לא ניתן היה להפעיל את ערוץ הבקרה: {error}",
"ai.prefs.control_from_launch": "הפעלה זו התחילה עם --control בפורט {port}. שינויים כאן ייכנסו לתוקף בפעם הבאה ש-SolidCraft יופעל ללא --control.",
"ai.prefs.control_listening": "מאזין ב-127.0.0.1:{port}",
"ai.prefs.control_not_listening": "לא מאזין",
"ai.prefs.control_port": "פורט",
"ai.prefs.control_port_note": "הפורט שאליו סוכני AI מתחברים במחשב זה (127.0.0.1). ברירת המחדל היא 27878: אם הוא תפוס, נלקח הפורט הפנוי הבא. כל פורט אחר משמש בדיוק כפי שהוא. כוונו את לקוח ה-MCP לאותו פורט, למשל solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "פורט {port} בשימוש של תוכנה אחרת (או חלון SolidCraft אחר). בחרו פורט אחר.",
"ai.prefs.follow_camera": "לעקוב אחר המצלמה",
"ai.prefs.follow_camera_off": "מעקב המצלמה האוטומטי כבוי.",
"ai.prefs.follow_camera_on": "המצלמה פונה אל הסקיצות שהסוכן יוצר.",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "לא על פאה של חלק",
"browser.sketches_to_parts_part_missing": "החלק שלהם כבר לא קיים",
"browser.sketches_to_parts_result": "{moved} שרטוטים הועברו לחלק שעליו הם נמצאים; {stayed} נשארו: {why}",
"browser.straighten_angle": "כיוון הקצה",
"browser.straighten_choose": "בחר מה יהיה הקצה, אופקי, אנכי או בזווית, ואז לחץ על יישור.",
"browser.straighten_click_a": "לחץ על התמונה בקצה אחד של קצה שאמור להיות ישר, או הקלד את הקואורדינטות שלו.",
"browser.straighten_click_b": "לחץ על הקצה השני, או הקלד את הקואורדינטות שלו.",
"browser.straighten_horizontal": "אופקי",
"browser.straighten_title": "יישור: {name}",
"browser.straighten_vertical": "אנכי",
"browser.units": "יחידות: {units}",
"cam.flat": "פאה שטוחה",
"cam.follower": "עוקב",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "בחירת מראה",
"cmd.appearance_replace": "החלפת מראה",
"cmd.assembly_bom": "רשימת חלקים",
"cmd.assembly_constraint_create": "אילוץ",
"cmd.assembly_constraint_edit": "עריכת אילוץ",
"cmd.assembly_mass_properties": "תכונות מסה",
"cmd.body.print_face": "פאת הדפסה",
"cmd.body_rename": "שינוי שם גוף",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "מחיקת קנבס",
"cmd.canvas_edit": "עריכת קנבס",
"cmd.canvas_insert": "קנבס",
"cmd.canvas_straighten": "יישור קנבס",
"cmd.canvas_to_sketch": "קנבס לסקיצה",
"cmd.component_activate": "הפעלת רכיב",
"cmd.component_break_link": "ניתוק קישור",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "כלל תצורה",
"cmd.config_rules": "כללי תצורה",
"cmd.config_table": "הצגת טבלת תצורות",
"cmd.construct.axis": "ציר",
"cmd.construct.plane": "מישור",
"cmd.construct.plane.axis_point": "מישור דרך ציר ונקודה",
"cmd.construct.point": "נקודה",
"cmd.construct_axis_edge": "ציר דרך מקצוע",
"cmd.construct_axis_normal_to_face": "ציר ניצב לפאה",
"cmd.construct_axis_through_cylinder": "ציר דרך גליל/חרוט/טורוס",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "שמירה כרשת משולשים",
"cmd.file_send_to_slicer": "שליחה לסלייסר",
"cmd.file_slicers": "תוכנות סלייסר מותקנות",
"cmd.frame_end_cap": "מכסה קצה",
"cmd.frame_member": "איבר מסגרת",
"cmd.frame_profile_insert": "הוספת פרופיל",
"cmd.frame_profile_list": "ספריית פרופילים",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "ניתוח איזו־עקומות",
"cmd.inspect_minimum_radius": "ניתוח רדיוס מינימלי",
"cmd.inspect_parameter_sweep": "סריקת פרמטרים",
"cmd.inspect_parameter_variants": "השוואת חלופות פרמטרים",
"cmd.inspect_silhouette": "צללית",
"cmd.inspect_zebra": "ניתוח זברה",
"cmd.joint_as_built": "מפרק במצב הקיים",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "עקבת תנועה",
"cmd.motion_trace_edit": "עריכת עקבת תנועה",
"cmd.motion_trace_keep": "שמירת עקבת תנועה",
"cmd.note_add": "הוספת הערה",
"cmd.note_delete": "מחיקת הערה",
"cmd.note_list": "הצגת הערות",
"cmd.note_update": "עריכת הערה",
"cmd.occurrence_align": "יישור מופע",
"cmd.occurrence_copy": "הדבקה (מופע)",
"cmd.occurrence_drag": "גרירת מופע",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "יצירת תמונת הדמיה",
"cmd.render_status": "התקדמות ההדמיה",
"cmd.select_clear": "ניקוי הבחירה",
"cmd.selection_get": "קבלת הבחירה",
"cmd.settings_profile_apply": "החלת פרופיל הגדרות",
"cmd.settings_profile_delete": "מחיקת פרופיל הגדרות",
"cmd.settings_profile_export": "ייצוא פרופיל הגדרות",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "השבתת פיצ'ר",
"cmd.ui.assistant": "הצגה או הסתרה של העוזר",
"cmd.ui.palette": "חיפוש פקודות",
"cmd.ui.toggle_visibility": "הצגה/הסתרה של הבחירה",
"cmd.view.navigator": "ניווט תצוגה מותאם אישית",
"cmd.view.render_browser": "דפדפן רינדור",
"cmd.view.render_dock": "הזז את עגינת הרינדור",
@@ -1567,6 +1601,7 @@
"color.step_down": "צעד למטה",
"color.step_up": "צעד למעלה",
"color.value": "ערך, הבהירות (אחוזים)",
"component.error.ambiguous_name": "לכמה רכיבים יש השם `{name}`. יש להשתמש במזהה רכיב מספרי: {ids}.",
"config.column_filter_empty": "אין עמודות תואמות",
"config.rule_parameter_columns": "מוצגים כאן רק פרמטרים שיש להם עמודה בטבלה. הוסיפו עמודה דרך \"הוספת עמודה\" (+) כדי להשתמש בפרמטר כאן.",
"config.rule_suppression_columns": "מוצגים כאן רק פיצ'רים שיש להם עמודת \"השבתה\" בטבלה. הוסיפו עמודה דרך \"הוספת עמודה\" (+) כדי לשלוט בפיצ'ר כאן.",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: ההפניה `{reference}` כבר אינה קיימת כפי שנבחרה; יש לבחור אותה מחדש",
"dialog.bodies_count": "{count} גופים",
"dialog.clearance_invalid": "המרווח חייב להיות אורך של 0 ומעלה",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "חישוב",
"dialog.compute_again": "חישוב מחדש",
"dialog.computing": "מחשב… {seconds} שנ'",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "רק מספר משתנה בצעדים; ביטוי נשאר כפי שנכתב",
"dialog.dimension_step_up": "הוספה של {step}",
"dialog.edit_title": "עריכת {title}",
"dialog.hole_held_off_its_line": "קצה הייחוס מחזיק את החור על קו שיוצא מהפאה לפני הנקודה שנבחרה. יש לבחור במקום שבו הקו עובר על הפאה, או להסיר את הקצה כדי להזיז את החור בחופשיות.",
"dialog.no_shown_body": "אין גוף מוצג לשינוי: הציגו גוף, או בחרו „גוף חדש”",
"dialog.pattern_sketch_not_object": "בחרו גופים או פיצ'רים: סקיצה אינה אף אחד מהם. חזרו על העקומות שלה בעזרת המערך או השיקוף של הסקיצה עצמה, או בצעו לה שליפה קודם.",
"dialog.primitive_point_tip": "נקודה שממלאת את X, Y ו-Z: יש ללחוץ כאן ואז על קודקוד, מקצוע או פאה של המודל, על נקודה של סקיצה, או על הראשית.",
"dialog.reference_edge_tip": "מקצוע ישר של הפאה שנבחרה שממנו נמדד המרחק שלמטה: יש ללחוץ כאן ואז על המקצוע.",
"dialog.right_click_pick": "יש לבחור תחילה {input}",
"dialog.select": "↖ בחירה",
"dialog.selected_count": "↖ {count} נבחרו",
"dialog.selection_constraint": "אילוץ {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "{name} השתנה בדיסק",
"document.changed_on_disk_detail": "{name} שונה על ידי תוכנה או מחשב אחרים מאז שנפתח או נשמר לאחרונה. דריסה מחליפה את השינויים האלה בשינויים שלך; שמירת עותק שומרת את שניהם.",
"document.copy_name": "עותק של {name}",
"document.discard_row": "ביטול שינויים",
"document.finish_save_prompt": "יש לסיים לענות על חלון השמירה לפני פתיחת תכן אחר.",
"document.newer_file": "נשמר בגרסה חדשה יותר של SolidCraft (פורמט {format}, גרסה זו קוראת עד {reads}). אם משהו חסר, יש לעדכן.",
"document.newer_file_change": "נשמר בגרסה חדשה יותר של SolidCraft (פורמט {format} עם `{change}`, שגרסה זו אינה מכירה). אם משהו חסר, יש לעדכן.",
"document.newer_file_not_read": "לא נקרא: {what}. השמירה משאירה אותו בקובץ.",
"document.not_saved_yet": "עדיין לא נשמר",
"document.open_anyway": "פתיחה בכל זאת",
"document.open_elsewhere": "{name} כבר פתוח",
"document.open_elsewhere_detail": "{name} פתוח ב־SolidCraft {app} אצל {who}, נפתח {when}. אם שניכם תשמרו, אחד מכם יאבד עבודה. יש לפתוח אותו לקריאה בלבד כדי לעיין בו בלי לדרוס אותו.",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "התכן הזה נפתח לקריאה בלבד: יש לשמור אותו כקובץ חדש",
"document.save_changes": "לשמור את השינויים ב־{name}?",
"document.save_copy": "שמירת עותק…",
"document.save_many": "לשמור שינויים ב־{n} תכנים?",
"document.save_row": "שמירה",
"document.save_selected": "שמירת הנבחרים",
"document.tab_unsaved_changes": "שינויים שלא נשמרו",
"document.unsaved_changes": "ב־{name} יש שינויים שלא נשמרו. ללא שמירה, הם יאבדו.",
"drive.rigid": "{joint} הוא מפרק קשיח: הוא מחזיק את החלקים שלו במקומם, ולכן אין מה להניע. כדי שהחלקים יזוזו, שנו את הסוג שלו ב״עריכת מפרק״: Revolute לסיבוב, Slider להחלקה, Cylindrical לשניהם.",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "סבולת עקומה",
"dxf.tolerance_help": "גופים גלויים בלבד. עקומות מורכבות מקטעים ישרים. סבולת קטנה יותר יוצרת עקומות עדינות יותר ודורשת יותר זמן וזיכרון.",
"each rail's curves must be in one sketch": "עקומות כל מסילה חייבות להיות בסקיצה אחת",
"error.end_cap_faces": "בחר לפחות פאת קצה פתוחה אחת של איבר מסגרת",
"error.end_cap_unresolved": "קצה {ends} של מכסה זה כבר אינו במודל. בחר שוב את פאות הקצה",
"feature computation ended without a result": "חישוב הפיצ'ר הסתיים ללא תוצאה",
"file.open.drawing_filter": "תכנים, קובצי CAD, רשתות משולשים ושרטוטים",
"file.open.portal_fallback.no_portal_service": "בורר הקבצים שנפתח אינו של שולחן העבודה: שירות בחירת הקבצים של שולחן העבודה אינו זמין.",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "הוספת גאומטריה",
"file_load.link_item": "{name} ({done} מתוך {total})",
"file_load.opened": "{name} נפתח",
"file_load.opened_behind": "{name} נפתח בכרטיסייה חדשה",
"file_load.opened_in_tab": "{name} נפתח בלשונית חדשה",
"file_load.opening": "פותח את התכן",
"file_load.preparing_thumbnail": "מכין את התמונה הממוזערת...",
@@ -1725,11 +1772,13 @@
"help.config.table": "הצגת טבלת התצורות: שורה לכל גרסה, עמודה לכל פרמטר או פיצ'ר, ואם התכן עדיין תואם לשורה הפעילה. מתאים לסקירת הגרסאות של התכן.",
"help.connect_note": "יש להפעיל מחדש כל עוזר כדי לטעון את שרת SolidCraft. לכל קובץ נשמר גיבוי בסיומת .bak לפני השינוי.",
"help.connect_title": "חיבור עוזרי בינה מלאכותית",
"help.construct.axis": "יוצר ציר עזר בשיטה שמתאימה למה שבחרת: לאורך קצה או קו, דרך חור או פאה עגולה, במפגש של שני מישורים, דרך שתי נקודות, או ניצב לפאה דרך נקודה. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"help.construct.axis.edge": "יצירת ציר עזר לאורך מקצוע ישר או קו של סקיצה. משמש כציר לסיבוב, לשכפול מעגלי או למפרק.",
"help.construct.axis.normal_to_face": "יצירת ציר עזר דרך נקודה, ניצב לפאה. משמש כציר שיוצא ישר מתוך משטח.",
"help.construct.axis.through_cylinder": "יצירת ציר עזר דרך מרכז פאה של גליל, חרוט או טורוס, או מקצוע עגול. מתאים לסיבוב או לשכפול פיצ'רים סביב חלק עגול.",
"help.construct.axis.two_planes": "יצירת ציר עזר במפגש של שני מישורים או שתי פאות שטוחות. מתאים כשהציר הדרוש הוא הקו שבין שתי פאות.",
"help.construct.axis.two_points": "יצירת ציר עזר דרך שתי נקודות, קודקודים או נקודות סקיצה. מתאים לציר שעובר בין שני מיקומים ידועים.",
"help.construct.plane": "יוצר מישור עזר בשיטה שמתאימה למה שבחרת: בהיסט ממישור, דרך נקודה, בין שני מישורים, דרך קווים או נקודות, משיק לפאה מעוקלת, או ניצב למסלול. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"help.construct.plane.along_path": "יצירת מישור עזר ניצב למקצוע או לעקומה, במיקום לאורכם. משמש לשרטוט פרופיל לסחיפה או חתך של מסלול.",
"help.construct.plane.at_angle": "יצירת מישור עזר מוטה בזווית ממישור או מפאה, סביב ציר או מקצוע. מתאים לסקיצות משופעות, כמו תמוכה בזווית.",
"help.construct.plane.axis_point": "יוצר מישור עזר המכיל ציר ונקודה שאינה עליו. יש לבחור ציר ראשי או ציר עזר, קצה ישר או קו סקיצה, ואז קודקוד, נקודת סקיצה או נקודת עזר. נקודה על הציר אינה מגדירה מישור יחיד.",
@@ -1739,6 +1788,7 @@
"help.construct.plane.tangent": "יצירת מישור עזר שמשיק לגליל, לחרוט, לכדור או לטורוס בנקודה. מתאים לשרטוט על צידו של חלק עגול.",
"help.construct.plane.three_points": "יצירת מישור עזר דרך שלוש נקודות. מתאים למישור שנקבע לפי מיקומים על המודל, כמו שלוש פינות.",
"help.construct.plane.two_edges": "יצירת מישור עזר דרך שני מקצועות ישרים או קווים הנמצאים באותו מישור. מתאים למישור שחותך חלק, למשל דרך שני מקצועות מנוגדים.",
"help.construct.point": "יוצר נקודת עזר בשיטה שמתאימה למה שבחרת: בקודקוד, במרכז של מעגל או כדור, לאורך קצה, במפגש של שני קווים או שלושה מישורים, או במקום שבו קו חוצה מישור. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"help.construct.point.along_path": "יצירת נקודת עזר במיקום לאורך מקצוע או עקומה. משמשת כנקודת ייחוס בחלק כלשהו של המסלול.",
"help.construct.point.center": "יצירת נקודת עזר במרכז של מקצוע עגול, מעגל או קשת בסקיצה, כדור או טורוס. משמשת כנקודת ייחוס לחורים, לצירים ולמפרקים.",
"help.construct.point.edge_plane": "יצירת נקודת עזר במקום שבו מקצוע או קו חוצים מישור או פאה שטוחה. משמשת לסימון המקום שבו מסלול חוצה מישור.",
@@ -1764,6 +1814,7 @@
"help.file.send_to_slicer": "שמירת הגופים שנבחרו כקובץ 3MF ופתיחתו בסלייסר שנבחר. כך עוברים מהמודל להדפסה בצעד אחד.",
"help.font_details": "הממשק משתמש בגופנים המובנים של egui (Ubuntu Light ו־Hack, תחת Ubuntu Font Licence ותחת רישיון MIT/Bitstream Vera; Noto Emoji וגופן סמלי האימוג'י, תחת OFL ו־MIT). טקסט בסקיצות משתמש ב־Liberation Sans (SIL OFL 1.1). חבילת הגופנים האופציונלית של Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), אינה כלולה בגרסאות של SolidCraft.",
"help.fonts": "גופנים",
"help.frame.end_cap": "סוגר קצוות פתוחים של איברי מסגרת בלוחות בצורת קו המתאר של הפרופיל. השתמש בו כדי לאטום צינורות, זוויתנים וקורות, מעל הקצה או שקוע בו.",
"help.frame.member": "הצבת פרופיל, כמו צינור או פרופיל אלומיניום שחול, לאורך קווי סקיצה של מסגרת, איבר אחד לכל קו. מתאים לבניית מסגרות, מדפים ומבנים מולחמים.",
"help.inspect.accessibility": "צביעת הפאות שכלי יכול להגיע אליהן מכיוון אחד, ואלה שאינו יכול. מתאים לבדיקת חלק לעיבוד שבבי או להזרקה מאותו צד.",
"help.inspect.center_of_mass": "הצגת מרכז המסה של גופים, כל אחד לחוד וכולם יחד, בצפיפות אחידה. מתאים לבדיקת איזון ולזיהוי המקום שבו חלק יתהפך.",
@@ -2240,6 +2291,9 @@
"measure.at": "מיקום",
"measure.item": "פריט {number}",
"measure.line_to_centre": "מהקו למרכז",
"measure.perimeter": "היקף",
"measure.perimeter_inner": "היקף פנימי",
"measure.perimeter_outer": "היקף חיצוני",
"measure.quick_copied": "המדידה הועתקה",
"measure.quick_copy": "לחיצה מעתיקה את המדידה",
"measure.quick_edges": "{count} מקצועות",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt וגרירה שמאלית מזיזים, Shift+Alt וגרירה שמאלית מבצעים זום, Ctrl וגרירה שמאלית משטח ריק מסובבים",
"nav.inventor.help": "גרירה אמצעית מזיזה, Shift וגרירה אמצעית מסובבים, Ctrl וגרירה אמצעית מבצעים זום, גרירה ימנית מסובבת",
"nav.maya.help": "Alt וגרירה שמאלית מסובבים, Alt וגרירה אמצעית מזיזים, Alt וגרירה ימנית מבצעים זום; גם גרירה אמצעית מזיזה",
"nav.maya_horizontal_zoom.help": "Alt וגרירה עם לחצן העכבר הימני: ימינה לקירוב, שמאלה להרחקה. כבו כדי לחזור לזום בגרירה אנכית.",
"nav.maya_horizontal_zoom.label": "Maya: זום בגרירה אופקית",
"nav.nx.help": "גרירה בלחצן האמצעי מסובבת, Shift+האמצעי מזיז את התצוגה (ב-NX: אמצעי + ימני), Ctrl+האמצעי מקרב ומרחיק (ב-NX: אמצעי + שמאלי); גרירה בלחצן הימני לא מזיזה את המצלמה",
"nav.openscad.help": "גרירה שמאלית על שטח ריק מסובבת, Shift וגרירה שמאלית בוחרים במלבן, גרירת גאומטריית סקיצה עורכת אותה; גרירה ימנית או אמצעית מזיזה, Shift וגרירה ימנית או אמצעית מבצעים זום",
"nav.orbit_cursor_wrap.help": "גרירת סיבוב שמגיעה לקצה המבט מעבירה את הסמן לקצה הנגדי וממשיכה לסובב. כבוי: הגרירה נעצרת בקצה המסך. ללא השפעה ב־Wayland או בדפדפן.",
@@ -2411,6 +2467,16 @@
"not a move": "זו אינה הזזה",
"not a number": "לא מספר",
"open a sketch first": "יש לפתוח סקיצה תחילה",
"operations.cancel": "ביטול {name}",
"operations.cancelled": "{name} בוטל",
"operations.cancelling": "מבטל…",
"operations.cannot_cancel": "לא ניתן לבטל את {name}",
"operations.feature": "פיצ'ר",
"operations.feature_edit": "עריכת פיצ'ר",
"operations.meshing": "טוען חלקים",
"operations.queued": "ממתין",
"operations.stopped": "בוטל",
"operations.waiting": "מוכן",
"parameters.apply_live": "להחיל כל שינוי ביציאה מהשדה שלו",
"parameters.apply_live_tip": "כבוי: השינויים ממתינים עד ל„החל” או „אישור”, ואז התכן נבנה מחדש פעם אחת עבור כולם. „ביטול” או Escape משליכים אותם.",
"parameters.held": "{count} שינויים ממתינים ל„החל”",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "צבעי תצוגת תלת־ממד",
"prefs.appearance.viewport_logo": "חלון התצוגה והלוגו",
"prefs.applies_on_restart": "ייכנס לתוקף בהפעלה מחדש",
"prefs.assemblies": "מכלולים",
"prefs.assistant": "עוזר",
"prefs.assistant_connecting": "חיבור",
"prefs.assistant_follow_help": "פעולות Look At בסקיצות מזיזות את התצוגה עם המצביע.",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "בחירת קובץ גופן…",
"prefs.click": "לחיצה",
"prefs.command_dialog_values": "תיבות דו-שיח של פקודות",
"prefs.constraint_glyph_size": "גודל סמלי האילוצים",
"prefs.constraint_glyph_size_note": "הגודל שבו מצוירים סמלי האילוצים, עם האותיות או הסמלונים שלהם, בשרטוט. 100% הוא הגודל הרגיל; הסמלים שומרים על גודל המסך הזה בכל זום.",
"prefs.construct_menu_groups": "קיבוץ כלי הבנייה לפי סוג ישות",
"prefs.construct_menu_groups_help": "הצגת כותרות מישורים, צירים ונקודות. כיבוי שומר על סדר התפריט המקורי.",
"prefs.contact_shading": "הצללת מגע רכה",
"prefs.contact_shading_note": "הצללה רכה במקומות שבהם חלקים מתקרבים.",
"prefs.context_menu": "תפריט הקשר",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "קבצים מיובאים",
"prefs.design_tools.note": "הערה",
"prefs.design_tools.off": "כבוי",
"prefs.design_tools.placement_group": "משען, בליטה, חיבור נצמד",
"prefs.design_tools.placement_group": "פיצ'רים ממוקמים",
"prefs.design_tools.rows": "שורות",
"prefs.devices": "עכבר תלת־ממדי",
"prefs.dialog_buttons": "לחצני תיבות דו־שיח",
"prefs.dialog_first_letter_buttons": "כפתורי תיבות דו-שיח נענים לאות הראשונה שלהם",
"prefs.dialog_first_letter_buttons_help": "כשתיבת דו-שיח פתוחה, הקלדת האות הראשונה של שם הכפתור לוחצת עליו: האות «ב» לוחצת על «ביטול», למשל. אות שמתאימה לשני כפתורים אינה עושה דבר, ושדה טקסט שבו נמצא הסמן שומר את ההקלדה. כבוי: הקלדה אינה משפיעה על הכפתורים, כמו קודם.",
"prefs.dialogs": "תיבות דו־שיח",
"prefs.dialogs_edge": "בקצה התצוגה",
"prefs.dialogs_left_column": "בעמודה השמאלית",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "בחלון",
"prefs.display": "תצוגה",
"prefs.edges": "מקצועות והצללה",
"prefs.export": "ייצוא",
"prefs.export_name": "שם קובץ הייצוא",
"prefs.export_name.body": "שם הגוף המיוצא (הראשון כשיש כמה)",
"prefs.export_name.design": "שם התכן",
"prefs.export_name_hint": "לדוגמה {design}-{body}",
"prefs.export_name_sample": "ייצוא התכן הזה מציע: {name}",
"prefs.export_name_tip": "שם הקובץ שמציעים קובץ › ייצוא ושמירה כרשת משולשים. מצייני המיקום האלה מוחלפים:\n{placeholders}\nמאפיין תכן שלא הוגדר מושמט. השאירו את השדה ריק כדי להציע את שם התכן, או את שם הגוף לרשת.",
"prefs.extend": "הרחבה",
"prefs.extra_navigation": "Ctrl עם גרירה שמאלית במקום ריק מסובב את המבט; החזקת Space מזיזה אותו.",
"prefs.extrude_arrow_face_stops": "חץ השליפה נעצר בפאות",
"prefs.extrude_arrow_face_stops_note": "גרירת חץ המרחק של השליפה נעצרת בפאות שטוחות המקבילות לפרופיל, כמו הצד הרחוק של גוש שנחתך, ומדגישה את קו המתאר של הפאה. כבוי: החץ זז בצעדים עגולים בלבד.",
"prefs.extrude_view_isometric": "סיבוב התצוגה לאיזומטרית בפתיחת שליפה",
"prefs.extrude_view_return": "חזרה לתצוגה הקודמת בסגירת שליפה",
"prefs.file_operations_wait": "המתנה לפתיחת קבצים",
"prefs.file_operations_wait_note": "בזמן שקובץ נפתח או מוכנס, או שקישורים נקראים מחדש, התכנון ממתין מאחורי כרטיס עם ההתקדמות וביטול. כבוי: הקובץ מוצג בחלונית הפעולות ואפשר להמשיך לעבוד; הוספה נכנסת לאחר שתסיימו את מה שאתם עושים, וקובץ שנפתח בינתיים נפתח בכרטיסייה חדשה.",
"prefs.fillet_legacy_radius": "השתמש בברירת המחדש הקודמת לרדיוס Fillet מוצק",
"prefs.fillet_legacy_radius.help": "כבוי כברירת מחדש. כשהוא פעיל, Solid Fillet חדש נפתח במספר 2 שנקרא ביחידות התכנון (\"2 אינץ\" בתכנון באינצ'ים), כמו קודם; כשהוא כבוי, הוא נפתח ברדיוס שבו הכלי נמסר, 2 מ\"מ, מוצג ביחידות התכנון (\"0.07874 אינץ\" בתכנון באינצ'ים).",
"prefs.follows_os": "לפי מערכת ההפעלה",
"prefs.font": "גופן",
"prefs.font_fallback": "תווים שחסרים בגופן הנבחר מוצגים בגופן המובנה, כך שאף תווית לא מופיעה כריבוע ריק.",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "הזזת מבט",
"prefs.gesture_zoom": "זום",
"prefs.graphics": "גרפיקה",
"prefs.graphics_api": "ממשק גרפי",
"prefs.graphics_api_auto": "אוטומטי",
"prefs.graphics_api_help": "בחרו את הממשק הגרפי המשמש לפתיחת SolidCraft. אם ההפעלה הבאה לא תצליח לפתוח את החלון, הבחירה הקודמת תשוחזר.",
"prefs.graphics_api_override": "הגדרת הפעלה עוקפת קובעת את הממשק הגרפי. הבחירה השמורה תחול כאשר SolidCraft ייפתח כרגיל.",
"prefs.graphics_api_restart_note": "חל לאחר הפעלה מחדש. עיצובים שלא נשמרו יטופלו לפני הסגירה.",
"prefs.graphics_api_restart_unavailable": "הפעילו מחדש את SolidCraft כדי להחיל את הממשק הגרפי השמור.",
"prefs.graphics_api_running": "נוכחי: {current}. נבחר להפעלה הבאה: {selected}.",
"prefs.graphics_api_save_failed": "לא ניתן לשמור את בחירת הממשק הגרפי: {error}",
"prefs.graphics_api_start_failed": "לא ניתן להכין את הממשק הגרפי שנבחר: {error}",
"prefs.graphics_api_start_reverted": "ההפעלה הקודמת עם {requested} לא פתחה את החלון. SolidCraft שחזר את {previous}.",
"prefs.graphics_api_unavailable": "בחירת ממשק גרפי זמינה ביישום שולחן העבודה.",
"prefs.graphics_card": "כרטיס גרפי",
"prefs.graphics_card_auto": "אוטומטי",
"prefs.graphics_card_missing": "הכרטיס הגרפי השמור אינו זמין; נעשה שימוש באפשרות אוטומטי.",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "לפי הסדר",
"prefs.history_sketches_note": "כשהסקיצות מוגדרות ל„מתחת לפיצ'ר שלהן”, ציר הזמן משמאל מציג כל סקיצה רמה אחת פנימה, מתחת לפיצ'ר הראשון שנבנה ממנה, בכל פעם שהוא רחב מספיק להצגת שמות. ציר הזמן בתחתית שומר תמיד על סדר היצירה.",
"prefs.history_sketches_under_feature": "מתחת לפיצ'ר שלהן",
"prefs.history_steps_component": "צעדי ציר הזמן לפי רכיב",
"prefs.history_steps_component_note": "כשרכיב פעיל או נבחר, פקדי ציר הזמן עוברים בין הפיצ'רים של אותו רכיב, כפי שציר הזמן למטה מציג אותם. כבוי: הם עוברים בין כל הפיצ'רים של התכנון. ציר הזמן משמאל או מתחת לדפדפן עובר תמיד בין כל הפיצ'רים.",
"prefs.hold_stop_snapping": "החזקה לעצירת ההצמדה",
"prefs.home_fit_size": "גודל בתצוגת בית ובהתאמה",
"prefs.home_fit_size_note": "כמה מהתצוגה המודל ממלא כשתצוגת בית, התאמה, עיצוב שנפתח או שינוי תצוגה בניווט ממסגרים אותו, בין אם ההגדרה שלמטה פעילה ובין אם לא. 100 %: ממלא את התצוגה שבין הלוחות, המצפן וסרגל הניווט.",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "שני החצים המעוגלים בפינת הקובייה מסובבים את התצוגה במישור המסך. פועל: החץ עם כיוון השעון מסובב נגד כיוון השעון, והחץ נגד כיוון השעון מסובב עם כיוון השעון. כבוי: כל חץ מסובב את התצוגה לפי העקום שלו.",
"prefs.invert_navigator_arrows": "היפוך חצי סיבוב קוביית התצוגה",
"prefs.invert_navigator_arrows_note": "החצים סביב הקובייה מחוויים את המצלמה לכיוון שהחץ מצביע, כמו ב-Fusion ו-Inventor: החץ שמשמאל מצביע ימימה ומניע את המצלמה ימימה. כבוי: החץ מסובב את הקובייה אל הצד שבו הוא יושב, כך שחץ שמאל מניע את המצלמה שמאלה. חצי הגלילה המעוגלים אינם מושפעים.",
"prefs.joint_drag_trackball": "סיבוב חלקים על מפרק כדורי כמו כדור עקיבה בעת גרירה",
"prefs.joint_drag_trackball_help": "גרירת חלק שמפרק כדורי מחזיק מסובבת אותו בסיבוב הקטן ביותר סביב המפרק, כאילו מגלגלים כדור בגודל החלק. כבוי: הנקודה שתפסת עוקבת אחרי המצביע במדויק, והחלק עלול גם להסתובב סביבה.",
"prefs.keep_unsaved_also_asks": "לשאול גם כשהכרטיסייה נסגרת",
"prefs.keep_unsaved_also_asks_tip": "כשאפשרות זו כבויה, הכרטיסייה נסגרת ללא חלון הדפדפן לאחר שהעותק של כל תכן שלא נשמר עודכן.",
"prefs.keep_unsaved_in_browser": "לשמור עבודה שלא נשמרה בדפדפן זה",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "לא זמין במעבד הגרפי הזה",
"prefs.on": "פועל",
"prefs.opaque": "אטום",
"prefs.operations_panel": "הצגת פעולות בתצוגה",
"prefs.operations_panel_note": "פעולות ארוכות (פתיחת קובץ, חישוב פיצ'ר, פקודה של סוכן) מוצגות בפינה הימנית התחתונה של התצוגה עם ההתקדמות שלהן וכפתור לביטולן. כבוי: הודעת „מחשב” כמו קודם.",
"prefs.orbit_snap": "החזקת Shift בזמן סיבוב מצמידה לציר.",
"prefs.orientation": "כיוון",
"prefs.origin_plane_names": "שמות מישורי הראשית",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "הצגת לשוניות הסרט בלבד",
"prefs.ribbon_tabs_only_note": "הסרט מתקפל לשורת הלשוניות שלו. לחיצה על לשונית מציגה את הלוחות שלה מעל התצוגה עד שפקודה מתחילה או שהמצביע עוזב אותם. הפקודה ״רק לשוניות הסרט״ בלשונית תצוגה, או קיצור המקשים שלה, מחליפה הגדרה זו.",
"prefs.right_click": "לחיצה ימנית",
"prefs.save_prompt_one_at_a_time": "לשאול על כל תכן שלא נשמר בנפרד בעת סגירת כמה",
"prefs.save_prompt_one_at_a_time_help": "להציג חלון שמירה נפרד לכל תכן שלא נשמר במקום רשימה משותפת.",
"prefs.saving": "הפעלה ושמירה",
"prefs.scale_note": "גם Ctrl + / Ctrl − בחלון. הכפתורים בגודל 28 px ב־100%.",
"prefs.scale_text": "קנה מידה וטקסט",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "קשת מנקודת מרכז עוקבת אחר הסמן",
"prefs.sketch.click_selects": "לחיצה בוחרת",
"prefs.sketch.conflict_colour": "צבע התנגשות",
"prefs.sketch.cursor_coordinates": "הצגת קואורדינטות הסמן בסקיצה",
"prefs.sketch.cursor_coordinates_note": "ליד הסמן, ערכי X ו-Y שלו מראשית הסקיצה, גם כשאין כלי פעיל. כבוי: רק בזמן שכלי ממקם נקודה.",
"prefs.sketch.drawing": "שרטוט",
"prefs.sketch.ellipse_axes": "שרטוט אליפסות עם הצירים שלהן",
"prefs.sketch.ellipse_axes_note": "הציר הראשי והציר המשני כקווי עזר, כדי שאפשר יהיה לתת מידות לחצאי הצירים ולצירים. כבוי: האליפסה בלבד, ו-D עליה נותן את הרדיוס המשני שלה בכל מקום שאליו נגרר הערך, משורטט ומסומן R כמו קודם.",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "פאות וקצוות",
"prefs.sketch.hide_glyphs": "הסתרת סמלים בהתרחקות",
"prefs.sketch.marks": "סימונים בסקיצה",
"prefs.sketch.max_points": "הסקיצה הגדולה ביותר",
"prefs.sketch.max_points_note": "המספר המרבי של נקודות או עקומות בסקיצה אחת: 20000 כברירת מחדל, ועד 200000. הוספת SVG והוספת DXF דוחות שרטוט גדול יותר. סקיצה גדולה נפתרת ומוצגת לאט יותר.",
"prefs.sketch.max_points_unit": "נקודות",
"prefs.sketch.note": "שרטוט, הצמדה ובחירה.",
"prefs.sketch.opening_closing": "פתיחה וסגירה",
"prefs.sketch.prefer_free_points": "העדפת נקודות ניתנות להזזה כשהן חופפות",
"prefs.sketch.project_options": "בקשת אפשרויות ההיטל תחילה",
"prefs.sketch.recent_snap": "הצמדה למפגש שני קווי עזר",
"prefs.sketch.select_3d_curve_points": "בחירת נקודות על עקומות סקיצה תלת־ממדית",
"prefs.sketch.select_3d_curve_points_help": "הצגה ובחירה של נקודות על עקומות סקיצה תלת־ממדית שצוירו, לשימוש כהפניות בנייה.",
"prefs.sketch.select_other_hidden": "בחירת אחר כוללת גאומטריה מוסתרת",
"prefs.sketch.shortcut_cycles_modes": "לחיצה חוזרת על קיצור מחליפה מצב",
"prefs.sketch.shortcut_cycles_modes_tip": "כבוי: הכלי מתחיל מחדש.",
"prefs.sketch.snap_to_visible_grid": "הצמדה למפגשים הנראים של הרשת",
"prefs.sketch.snapping_guides": "הצמדה וקווי עזר",
"prefs.sketch.state_icons": "סמלי מצב",
"prefs.sketch.tracking_guides": "קווי עזר למרכזים ולנקודות אמצע",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "סקיצה ובחירה",
"prefs.sketch_selection_heading": "סקיצה ובחירה",
"prefs.sketch_selection_note": "איך סקיצות נצמדות ואיך לחיצות בוחרות.",
"prefs.sketch_snap_to_visible_grid_note": "נקודה בסקיצה נצמדת למפגש של הקווים שהרשת מציירת כשהמצביע מכוון לאחד מהם, ולרשת הדקה שביניהם אחרת. כבוי: הנקודה נצמדת לרשת הדקה בלבד, כמו קודם.",
"prefs.sketch_state_icons": "סמלי סקיצות בצבע המצב שלהן",
"prefs.sketch_state_icons_note": "בהיסטוריה ובדפדפן, סמל הסקיצה מקבל את צבע המצב שלה (אילוצים חסרים, מאולצת במלואה או סותרת) וחלונית העזרה מציינת את המצב. כבוי: לכל הסקיצות אותו סמל.",
"prefs.sketch_tab_always": "השארת לשונית הסקיצה מוצגת",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "PBR אטום דורש אטימות 1",
"render.error_physical_glass": "המתכון שנבחר אינו זכוכית פיזיקלית",
"render.error_preview_device": "תצוגה מקדימה של מוצר דורשת התקן מותקן עם מאגר עומק",
"render.error_product_placement": "מיקום מוצר לא תקין",
"render.error_product_triangle": "משולש מוצר לא תקין",
"render.error_provisional_identity": "זהות רינדור זמנית או מספר דגימות לא תקינים",
"render.error_quality_bounds": "הטלת האיכות חורגת מהגבולות המקוריים",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "לנסות שוב",
"render.gpu_seed": "זרע אקראי",
"render.gpu_unavailable": "מעקב מסלולים ב־GPU אינו מוכן במכשיר הזה.",
"render.graphics_api_restart_vulkan": "הפעלה מחדש עם Vulkan",
"render.graphics_api_restart_warning": "שינוי הממשק הגרפי מפעיל מחדש את SolidCraft ומבקש לשמור עיצובים שלא נשמרו. אם הממשק החדש לא יצליח לפתוח את החלון, הבחירה הקודמת תשוחזר בהפעלה הבאה.",
"render.graphics_api_settings": "הגדרות גרפיקה",
"render.graphics_api_vulkan_required": "מעקב נתיבים ב־GPU דורש Vulkan בהפעלה זו. הפעילו מחדש עם Vulkan, או המשיכו להשתמש בשיטת תמונה ב־CPU.",
"render.ground_apply": "התאמת הקרקע ושמירתה",
"render.ground_gap": "מרווח חופש מפורש",
"render.ground_linear_rgb": "החזרה מפוזרת · RGB ליניארי",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "3D Spline: click fit points in 3D; right-click or Esc to finish",
"sketch.hint.trim": "Trim: click the piece of a curve to remove, or drag across the pieces to remove",
"sketch.make_selection": "המרת הבחירה ל־{linetype}",
"sketch.move_released": "הוזז: {count} אילוצים שקשרו אותו למה שנשאר שוחררו ({names}).",
"sketch.move_released_one": "הוזז: {count} אילוץ שקשר אותו למה שנשאר שוחרר ({names}).",
"sketch.open_ends": "קצוות פתוחים: {count}",
"sketch.status_conflict": "אילוצים סותרים",
"sketch.status_fully_constrained": "מאולץ במלואו",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "הסרת הטקסט מהעקומה",
"sketch_text.path_hint": "עקומה בסקיצה שהטקסט עוקב אחריה: יש ללחוץ כאן ואז על העקומה",
"sketch_text.use_font_file": "שימוש בקובץ הגופן {path}",
"sketch_text.valign_baseline": "קו בסיס",
"sketch_text.valign_bottom": "למטה",
"sketch_text.valign_middle": "אמצע",
"sketch_text.valign_top": "למעלה",
"solid": "מוצק",
"status.editing": "עריכת {name}",
"status.navigation": "מיפוי העכבר: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "התרה פעם אחת",
"ui.agent_chat_allowed": "הותר",
"ui.agent_chat_answered": "תשובה: {option}",
"ui.agent_chat_answered_in": "נענה תוך {time}",
"ui.agent_chat_approval": "לאפשר לסוכן לעשות זאת?",
"ui.agent_chat_attach_selection": "צירוף הבחירה",
"ui.agent_chat_attach_selection_tip": "שליחת מה שנבחר במודל (פאות, מקצועות, פיצ'רים, גופים) עם ההודעה, כדי שהסוכן יבין למה הכוונה",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "גופים",
"ui.agent_chat_ctx_elements": "אלמנטים",
"ui.agent_chat_ctx_features": "פיצ'רים",
"ui.agent_chat_ctx_gone": "כבר לא בעיצוב: הוא שונה או נמחק.",
"ui.agent_chat_ctx_more": "+{n} נוספים",
"ui.agent_chat_ctx_other": "אחר",
"ui.agent_chat_custom_heading": "מודל מותאם אישית",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "עגינה מימין",
"ui.agent_chat_drop_hint": "יש לשחרר כדי לצרף להודעה הבאה",
"ui.agent_chat_edit": "עריכה",
"ui.agent_chat_ended_after": "הסתיים אחרי {time}",
"ui.agent_chat_exited": "הסוכן נעצר.",
"ui.agent_chat_failed_start": "לא ניתן להפעיל את הסוכן: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: קובץ CAD מיובא לתכן, ולא נקרא",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "{model} לא יכול להשתמש בכלים של SolidCraft, ולכן הוא יכול רק לשוחח. יש לבחור מודל שתומך בכלים.",
"ui.agent_chat_model_rejected": "הסוכן לא קיבל את {model}: {error}",
"ui.agent_chat_model_search": "חיפוש מודלים…",
"ui.agent_chat_model_search_or_id": "חיפוש, או הקלדת מזהה מודל כלשהו…",
"ui.agent_chat_model_tip": "המודל שבו הסוכן משתמש. הבחירה נשמרת עבור הסוכן הזה.",
"ui.agent_chat_models_failed": "לא ניתן היה לטעון את רשימת המודלים: {error}",
"ui.agent_chat_models_heading": "מודלים זמינים",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "התמונה הבאה",
"ui.agent_chat_no_cli": "solidcraft-cli לא נמצא לצד האפליקציה, ולכן הסוכן לא יכול לגשת לתכן.",
"ui.agent_chat_no_control": "נקודת הקצה של הצ'אט עם הסוכן לא הופעלה, ולכן הסוכן לא יכול לגשת לתכן.",
"ui.agent_chat_no_design_hint": "הסוכן פועל בלי הכלים של SolidCraft, ולכן אינו יכול לקרוא או לשנות את התכן: solidcraft-cli לא נמצא ליד היישום. התקינו את SolidCraft עם solidcraft-cli לצידו (ב-Windows: קובץ ה-MSI או ה-zip הנייד), או הגדירו את SOLIDCRAFT_CLI לנתיב שלו, ואז התחברו שוב.",
"ui.agent_chat_no_images": "הסוכן הזה לא מקבל תמונות",
"ui.agent_chat_no_picture": "אין תמונה בלוח",
"ui.agent_chat_no_tool_call": "המודל לא השתמש בכלים של SolidCraft, ולכן התכן לא השתנה. יש לבחור מודל שתומך בקריאה לכלים; ראו „מודלים מקומיים” במדריך צ'אט הסוכן.",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "הגדרת עוזר",
"ui.agent_chat_side": "לעגן את הצ'אט",
"ui.agent_chat_signed_in": "מחובר",
"ui.agent_chat_snap_none_found": "לא נמצא סוכן קוד. חבילת ה־Snap מבודדת, ולכן היא לא יכולה לראות או להפעיל את סוכני הקוד שמותקנים במחשב הזה. כדי להשתמש בהם, יש להתקין את SolidCraft מחבילת AppImage, .deb או .rpm במקום זאת. סוכן שמשתמש ב־API תואם OpenAI עובד גם בחבילת ה־Snap, ואפשר להגדיר אותו בעזרת הוספת סוכן.",
"ui.agent_chat_span_h": "{h} שע' {min} דק'",
"ui.agent_chat_span_min": "{n} דק'",
"ui.agent_chat_span_s": "{n} שנ'",
"ui.agent_chat_state_auth": "נדרשת התחברות",
"ui.agent_chat_state_busy": "עובד…",
"ui.agent_chat_state_exited": "הסוכן נעצר",
"ui.agent_chat_state_failed": "ההתחברות נכשלה",
"ui.agent_chat_state_no_design": "אין גישה לתכן",
"ui.agent_chat_state_off": "לא מחובר",
"ui.agent_chat_state_ready": "מוכן",
"ui.agent_chat_state_starting": "מופעל…",
"ui.agent_chat_stop": "עצירה",
"ui.agent_chat_stop_tip": "עצירת הסוכן וכל מה שהוא הפעיל",
"ui.agent_chat_stop_turn_tip": "עצירת הסוכן (Esc). הודעות בתור נשארות בתור.",
"ui.agent_chat_thinking_for": "חושב כבר {time}",
"ui.agent_chat_tool_running_for": "רץ כבר {time}",
"ui.agent_chat_tools_not_started": "הסוכן פועל בלי הכלים של SolidCraft, ולכן אינו יכול לקרוא או לשנות את התכן: solidcraft-cli נמצא, אבל הכלים שלו לא הופעלו (הודעת השגיאה בצ'אט מסבירה למה). התחברו שוב, ואם זה חוזר, התקינו מחדש את SolidCraft.",
"ui.agent_chat_transcript_assistant": "עוזר:",
"ui.agent_chat_transcript_user": "משתמש:",
"ui.agent_chat_turn_limit": "שינויים להודעה",
"ui.agent_chat_turn_unlimited": "ללא הגבלה",
"ui.agent_chat_undo_changes": "ביטול השינויים האלה",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "גוף {count}",
"ui.browser_bodies_other": "{count} גופים",
"ui.browser_collapse": "כיווץ עץ התכן",
"ui.browser_collapse_below": "כיווץ מה שמתחת",
"ui.browser_expand": "הרחבת עץ התכן",
"ui.browser_expand_below": "הרחבת מה שמתחת",
"ui.browser_title": "עץ התכן",
"ui.calibrate": "כיול",
"ui.cancel": "ביטול",
@@ -5269,6 +5409,7 @@
"ui.collapse": "כיווץ",
"ui.collinear": "על ישר אחד",
"ui.colour_vision": "ראיית צבעים",
"ui.colour_vision_bends": "כיפופים",
"ui.colour_vision_deutan": "דויטרן",
"ui.colour_vision_deutan_tip": "לתחושת ירוק חלשה או חסרה",
"ui.colour_vision_failed": "נכשל",
@@ -5298,14 +5439,24 @@
"ui.conic_curve": "עקום חרוטי",
"ui.constant": "קבוע",
"ui.constraints_conflict": "התנגשות בין אילוצים",
"ui.construct_auto.chosen": "השיטה נבחרה לפי הבחירות שלך. בחר הפניה נוספת, או הסר אחת, כדי לשנות את השיטה.",
"ui.construct_auto.no_fit": "בחר הפניות אחרות: אין שיטה שבונה מאלה.",
"ui.construct_auto.pick": "בחר ממה לבנות: השיטה נקבעת לפי הבחירות שלך.",
"ui.construct_auto.refs": "הפניות",
"ui.construct_auto.select": "בחר קודם את ההפניות לבנייה",
"ui.construct_axes": "צירים",
"ui.construct_planes": "מישורים",
"ui.construct_points": "נקודות",
"ui.construction": "עזר",
"ui.construction.angle_hint": "ישר עזר: בחירת נקודה ואז הקלדת זווית או בחירת כיוון",
"ui.construction.axis_hint": "ישר עזר: לחיצה על נקודה, או הקלדת המרחק מציר הסקיצה",
"ui.construction.bisector_hint": "חוצה זווית: בחירת שני ישרים נחתכים ואז הפתרון הרצוי",
"ui.construction.common_hint": "משיק משותף: בחירת שני מעגלים/קשתות ואז הפתרון הרצוי",
"ui.construction.contact_hint": "משיק: בחירת מעגל/קשת או ספליין/חתך חרוט פתוח ואז נקודת השקה (לעקומות חופשיות: קצוות בלבד)",
"ui.construction.external_hint": "משיק: בחירת מעגל או קשת, נקודה חיצונית ואז הפתרון הרצוי",
"ui.construction.free_hint": "ישר עזר: לחיצה על שתי נקודות; לחיצה ימנית להתחלה מחדש",
"ui.construction.normal_needs_length": "קו אינסופי הוא תמיד קו עזר: הקלדת אורך משרטטת קו רגיל",
"ui.construction.parallel_hint": "ישר עזר: בחירת ישר, ואז לחיצה או הקלדת ההיסט; לחיצה ימנית להחלפת הייחוס",
"ui.construction.point_hint": "ישר עזר: לחיצה על נקודת המעבר",
"ui.construction.reference_hint": "ישר עזר: בחירת ישר ואז נקודה; לחיצה ימנית להחלפת הייחוס",
"ui.construction.ribbon_label": "קווי עזר",
@@ -5448,6 +5599,17 @@
"ui.ellipse": "אליפסה",
"ui.emboss_wrap_note": "פרופילי קווים ניצבים המשיקים לגליל נתמך נכרכים אוטומטית. יש לבחור דופן כדי לקבוע יעד.",
"ui.end": "סוף",
"ui.end_cap.chamfer": "שיפוע פינות",
"ui.end_cap.direction": "כיוון",
"ui.end_cap.faces": "פאות קצה",
"ui.end_cap.inset": "היסט פנימה",
"ui.end_cap.inset_kind": "היסט לפי",
"ui.end_cap.inset_ratio": "יחס היסט",
"ui.end_cap.inward": "פנימה",
"ui.end_cap.length": "אורך",
"ui.end_cap.outward": "החוצה",
"ui.end_cap.ratio": "יחס מהעובי",
"ui.end_cap_title": "מכסה קצה",
"ui.end_radius": "רדיוס סיום",
"ui.end_scale": "קנה מידה בסיום",
"ui.ends": "קצוות",
@@ -5468,7 +5630,10 @@
"ui.explode_needs_two_components": "תצוגה מפוצצת מרחיקה רכיבים זה מזה, ולכן התכן צריך שניים או יותר מהם (רכיב חדש, הוספת תכן או יצירת רכיבים מגופים)",
"ui.exportDxf": "ייצוא DXF…",
"ui.export_ellipsis_keymap": "ייצוא…",
"ui.export_glb": "ייצוא GLB",
"ui.export_keymap_tip": "מקשים, מועדפי תיבת S וסרגל הכלים, כקובץ",
"ui.export_selects_only_body": "בחירת הגוף היחיד בייצוא רשת",
"ui.export_selects_only_body_tip": "ייצוא STL, ייצוא 3MF ושליחה לסלייסר מתחילים כשגוף התכנון כבר נבחר, כשיש בו גוף אחד בלבד.",
"ui.extend": "הארכה",
"ui.extent": "גבול",
"ui.extent_type": "סוג גבול",
@@ -5528,6 +5693,8 @@
"ui.finest": "העדינה ביותר",
"ui.finish_sketch": "סיום סקיצה",
"ui.first_dimension_scales": "המידה הראשונה משנה את קנה המידה של הציור",
"ui.first_dimension_scales_about_origin": "שינוי קנה מידה סביב ראשית הסקיצה",
"ui.first_dimension_scales_about_origin_tip": "מופעל: הציור תמיד גדל או קטן סביב ראשית הסקיצה, כך שצורה שצוירה הרחק מהראשית זזה. כבוי: ציור שדבר אינו קושר לראשית משנה קנה מידה סביב מרכזו ונשאר במקומו.",
"ui.first_dimension_scales_tip": "פועל: מידת האורך הראשונה בסקיצה משנה את קנה המידה של הציור שהיא מודדת, כך שצורתו נשמרת. כבוי: המידה משנה רק את גודל מה שהיא מודדת.",
"ui.fit": "התאמה לחלון",
"ui.fix_unfix": "קיבוע/שחרור",
@@ -5903,7 +6070,7 @@
"ui.pitch": "פסיעה",
"ui.placement": "מיקום",
"ui.placement_handles": "ידיות מיקום",
"ui.placement_handles_tip": "סמן לגרירת התכונה על המודל וטבעת לסיבובה.",
"ui.placement_handles_tip": "סמן לגרירת התכונה על המודל, וטבעת לסיבובה במקום שבו אפשר לסובב את התכונה.",
"ui.plane": "מישור",
"ui.plane_at_angle": "מישור בזווית",
"ui.plugins": "תוספים",
@@ -5950,6 +6117,7 @@
"ui.project_references_construction_note": "הטלה, חיתוך, הכללת גאומטריה תלת־ממדית ומקצועות הפאה של סקיצה חדשה על פאה יוצרים גאומטריית עזר: הפניות לשרטוט שאינן נכללות בפרופילים. הן נשארות מקושרות למודל.",
"ui.properties": "מאפיינים",
"ui.properties.copy_matrix": "העתקת המטריצה",
"ui.properties.copy_value": "לחיצה מעתיקה את הערך",
"ui.properties.first_moments": "מומנטים ראשונים",
"ui.properties.inertia": "מומנט התמד",
"ui.properties.inertia_note": "סביב מרכז מסה, בצירי העולם (g·{unit}²)",
@@ -5962,6 +6130,7 @@
"ui.properties.measuring_failed": "המדידה נעצרה לפני שהסתיימה.",
"ui.properties.principal_axis": "ציר ראשי {number}",
"ui.properties.principal_moments": "מומנטים ראשיים",
"ui.properties.value_copied": "הערך הועתק",
"ui.pull_direction": "כיוון משיכה",
"ui.quality": "איכות",
"ui.quantity": "כמות",
@@ -5982,11 +6151,14 @@
"ui.relink_design_changed": "ההרכבה השתנתה במהלך בחירת המקור. יש להפעיל שוב את 'קישור מחדש למקור'.",
"ui.relink_done": "המקור קושר מחדש לכל המופעים.",
"ui.relink_not_linked": "רכיב זה אינו מקושר לתכן מקור.",
"ui.relink_one_done": "המקור קושר מחדש למופע זה.",
"ui.relink_select_one": "יש לבחור תחילה רכיב מקושר אחד או אחד המופעים שלו.",
"ui.relink_source_all": "קישור מחדש למקור (כל המופעים)…",
"ui.relink_source_one": "קישור מחדש למקור…",
"ui.removeFromQuickAccess": "הסרה מהגישה המהירה",
"ui.removeFromToolbar": "הסרה מסרגל הכלים",
"ui.removeSection": "הסרת מקטע",
"ui.renameSelectedBodies": "שינוי שם הגופים הנבחרים",
"ui.render": "הדמיה",
"ui.renderer": "מנוע גרפי",
"ui.repeat": "חזרה",
@@ -6017,6 +6189,8 @@
"ui.ribbon_pin_footer": "פקודות מוצמדות מוצגות ברצועת הכלים. יש לרחף מעל שורה כדי להצמיד אותה או לבטל את הצמדתה.",
"ui.ribbon_workspace": "סביבת עבודה",
"ui.right": "ימין",
"ui.right_click_confirms": "לחיצה ימנית מאשרת קלטים בתיבת דו-שיח",
"ui.right_click_confirms_tip": "כאשר תיבת דו-שיח פתוחה, לחיצה ימנית בתצוגה עוברת לקלט הריק הבא, ובקלט האחרון מבצעת אישור",
"ui.save": "שמירה",
"ui.save_as": "שמירה בשם",
"ui.save_mesh_no_slicer_open": "לא נמצא סלייסר: יש לבחור „מותאם אישית…” ולבחור את תוכנת הסלייסר",
@@ -6076,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "מסנן בחירה",
"ui.sketch_keys_only": "להשאיר את מקשי המודל מחוץ לסקיצות",
"ui.sketch_keys_only_tip": "בזמן עריכת סקיצה פועלים רק מקשי סקיצה ומקשים שפועלים בכל מקום; מקש של המודל כמו E או F לא עושה דבר, כך שמקש שנלחץ בטעות לא יסגור סקיצה כבדה.",
"ui.sketch_links_added_curve": "{command} הוסיף עקומה אחת לסקיצה.",
"ui.sketch_links_added_curves": "{command} הוסיף {count} עקומות לסקיצה.",
"ui.sketch_links_added_curves_and_points": "{command} הוסיף לסקיצה {curves} ו־{points}.",
"ui.sketch_links_added_point": "{command} הוסיף נקודה אחת לסקיצה.",
"ui.sketch_links_added_points": "{command} הוסיף {count} נקודות לסקיצה.",
"ui.sketch_links_curve_count": "{count} עקומות",
"ui.sketch_links_curve_count_one": "עקומה אחת",
"ui.sketch_links_hidden": "התוצאה מוסתרת כי האפשרות {option} כבויה באפשרויות הסקיצה.",
"ui.sketch_links_point_count": "{count} נקודות",
"ui.sketch_links_point_count_one": "נקודה אחת",
"ui.sketch_modifiers": "מקשי שינוי בסקיצה",
"ui.sketch_project_geometry": "גאומטריה",
"ui.sketch_report.all_constrained": "הכול מאולץ במלואו.",
@@ -6115,6 +6299,7 @@
"ui.step_values": "שינוי ערכים בחצים ובגלגלת",
"ui.step_values_tip": "מקשי מעלה/מטה והגלגלת מעל שדה ערך משנים את המספר בו.",
"ui.stitch_tolerance_hint": "הדוקה",
"ui.straighten": "יישור",
"ui.stretch": "מתיחה",
"ui.supersampling": "דגימת־על (SSAA)",
"ui.supersampling_adaptive": "רק כשהמבט נייח",
@@ -6188,6 +6373,8 @@
"ui.view_angles_yaw": "סבסוב",
"ui.view_angles_zero": "הגדר את {axis} ל-0°",
"ui.view_centre": "מרכז המבט",
"ui.view_compass_tip": "מבט מ־{axis}. לחיצה נוספת הופכת את הכיוון. גרירה מסובבת את המבט.",
"ui.view_compass_tip_snap": "מבט מ־{axis}. לחיצה נוספת הופכת את הכיוון. גרירה מסובבת את המבט; יש להחזיק את Shift כדי להצמיד.",
"ui.viewport_status_clear": "כיבוי {name}",
"ui.viewport_status_clear_hint": "כיבוי {name} · Esc",
"ui.viewport_status_edges": "{count} קצוות",
+6 -1
View File
@@ -698,6 +698,7 @@
"Value": "Vrijednost",
"Variable Radius": "Promjenjivi polumjer",
"Velocity": "Brzina",
"Vertical": "Okomito",
"Vertices": "Vrhovi",
"View navigator": "Navigator prikaza",
"Volume": "Volumen",
@@ -3929,6 +3930,10 @@
"sketch_text.path_clear": "Skini tekst s njegove krivulje",
"sketch_text.path_hint": "Krivulja skice koju tekst prati: kliknite ovdje, a zatim krivulju",
"sketch_text.use_font_file": "Upotrijebi datoteku fonta {path}",
"sketch_text.valign_baseline": "Osnovna linija",
"sketch_text.valign_bottom": "Dno",
"sketch_text.valign_middle": "Sredina",
"sketch_text.valign_top": "Vrh",
"solid": "puno",
"status.editing": "Uređivanje: {name}",
"status.navigation": "Mapiranje miša: {mapping}",
@@ -4902,7 +4907,7 @@
"ui.pitch": "Korak",
"ui.placement": "Postavljanje",
"ui.placement_handles": "Ručice za postavljanje",
"ui.placement_handles_tip": "Ručice na pregledu oslonca, ispusta ili škljocajućeg spoja: povucite oznaku kako biste je pomaknuli po modelu, okrenite je njezinim prstenom",
"ui.placement_handles_tip": "Oznaka za povlačenje značajke po modelu i, gdje se značajka može okretati, prsten za njezino okretanje.",
"ui.plane": "Ravnina",
"ui.plane_at_angle": "Ravnina pod kutom",
"ui.plugins": "Proširenja",
+9 -1
View File
@@ -698,6 +698,7 @@
"Value": "Érték",
"Variable Radius": "Változó sugár",
"Velocity": "Sebesség",
"Vertical": "Függőleges",
"Vertices": "Csúcsok",
"View navigator": "Nézetnavigátor",
"Volume": "Térfogat",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "{title} SZERKESZTÉSE",
"dialog.no_shown_body": "Nincs módosítható megjelenített test: jelenítsen meg egyet, vagy válassza az Új test lehetőséget",
"dialog.pattern_sketch_not_object": "Válasszon testeket vagy elemeket: a vázlat egyik sem. Ismételje a görbéit a vázlat saját Minta vagy Tükrözés parancsával, vagy húzza ki előbb.",
"dialog.right_click_pick": "Előbb jelölje ki ezt: {input}",
"dialog.select": "↖ Kijelölés",
"dialog.selected_count": "↖ {count} kijelölve",
"dialog.selection_constraint": "Kényszer {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Szöveg levétele a görbéről",
"sketch_text.path_hint": "A vázlat egy görbéje, amelyet a szöveg követ: kattintson ide, majd a görbére",
"sketch_text.use_font_file": "A(z) {path} betűtípusfájl használata",
"sketch_text.valign_baseline": "Alapvonal",
"sketch_text.valign_bottom": "Lent",
"sketch_text.valign_middle": "Középen",
"sketch_text.valign_top": "Fent",
"solid": "szilárd test",
"status.editing": "Szerkesztés: {name}",
"status.navigation": "Egérkiosztás: {mapping}",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Emelkedés",
"ui.placement": "Elhelyezés",
"ui.placement_handles": "Elhelyezési fogantyúk",
"ui.placement_handles_tip": "Fogantyúk egy Támasz, Dudor vagy Pattintós illesztés előnézetén: húzza a jelölőt a modell fölött, a gyűrűjénél fogva forgassa el",
"ui.placement_handles_tip": "Egy jelölő az elem modellen való húzásához és, ahol az elem elforgatható, egy gyűrű az elforgatásához.",
"ui.plane": "Sík",
"ui.plane_at_angle": "Szögben álló sík",
"ui.plugins": "Bővítmények",
@@ -5013,6 +5019,8 @@
"ui.ribbon_pin_footer": "A rögzített parancsok megjelennek a menüszalagon. Egy sor fölé víve rögzíthető vagy feloldható.",
"ui.ribbon_workspace": "Munkaterület",
"ui.right": "Jobb",
"ui.right_click_confirms": "A jobb kattintás jóváhagyja a párbeszédablak bemeneteit",
"ui.right_click_confirms_tip": "Nyitott párbeszédablaknál a nézetben a jobb kattintás a következő üres bemenetre lép, az utolsónál pedig OK-t nyom",
"ui.save": "Mentés",
"ui.save_as": "Mentés másként",
"ui.save_mesh_no_slicer_open": "Nem található szeletelő: válassza az Egyéni… lehetőséget, és jelölje ki a szeletelő programját",
+9 -1
View File
@@ -698,6 +698,7 @@
"Value": "Nilai",
"Variable Radius": "Radius Variabel",
"Velocity": "Kecepatan",
"Vertical": "Vertikal",
"Vertices": "Titik sudut",
"View navigator": "Navigator tampilan",
"Volume": "Volume",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "EDIT {title}",
"dialog.no_shown_body": "Tidak ada bodi yang ditampilkan untuk diubah: tampilkan satu, atau pilih Bodi Baru",
"dialog.pattern_sketch_not_object": "Pilih bodi atau fitur: sketsa bukan keduanya. Ulangi kurvanya dengan Pola atau Cermin milik sketsa itu sendiri, atau ekstrusi dulu.",
"dialog.right_click_pick": "Pilih {input} terlebih dahulu",
"dialog.select": "↖ Pilih",
"dialog.selected_count": "↖ {count} terpilih",
"dialog.selection_constraint": "Batasan {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Lepaskan teks dari kurvanya",
"sketch_text.path_hint": "Kurva sketsa yang diikuti teks: klik di sini, lalu kurvanya",
"sketch_text.use_font_file": "Gunakan file font {path}",
"sketch_text.valign_baseline": "Garis dasar",
"sketch_text.valign_bottom": "Bawah",
"sketch_text.valign_middle": "Tengah",
"sketch_text.valign_top": "Atas",
"solid": "solid",
"status.editing": "Mengedit {name}",
"status.navigation": "Pemetaan mouse: {mapping}",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Pitch",
"ui.placement": "Penempatan",
"ui.placement_handles": "Handle penempatan",
"ui.placement_handles_tip": "Handle pada pratinjau Rest, Boss, atau Snap Fit: seret penanda untuk memindahkannya di model, putar lewat cincinnya",
"ui.placement_handles_tip": "Penanda untuk menyeret fitur di atas model dan, jika fitur dapat diputar, cincin untuk memutarnya.",
"ui.plane": "Bidang",
"ui.plane_at_angle": "Bidang Bersudut",
"ui.plugins": "Plugin",
@@ -5013,6 +5019,8 @@
"ui.ribbon_pin_footer": "Perintah yang disematkan tampil di ribbon. Arahkan kursor ke baris untuk menyematkan atau melepas sematan.",
"ui.ribbon_workspace": "Workspace",
"ui.right": "Kanan",
"ui.right_click_confirms": "Klik kanan mengonfirmasi input dialog",
"ui.right_click_confirms_tip": "Saat dialog terbuka, klik kanan di tampilan berpindah ke input kosong berikutnya, dan pada input terakhir menjalankan OK",
"ui.save": "Simpan",
"ui.save_as": "Simpan Sebagai",
"ui.save_mesh_no_slicer_open": "Slicer tidak ditemukan: pilih Kustom… dan pilih program slicer Anda",
+32 -2
View File
@@ -885,6 +885,7 @@
"Variable Radius": "Raggio variabile",
"Variable radius": "Raggio variabile",
"Velocity": "Velocità",
"Vertical": "Verticale",
"Vertices": "Vertici",
"View": "Vista",
"View navigator": "Navigatore della vista",
@@ -1149,6 +1150,7 @@
"cmd.file_save_mesh": "Salva come mesh",
"cmd.file_send_to_slicer": "Invia allo Slicer",
"cmd.file_slicers": "Slicer installati",
"cmd.frame_end_cap": "Tappo di estremità",
"cmd.frame_member": "Membro strutturale",
"cmd.frame_profile_insert": "Inserisci profilo",
"cmd.frame_profile_list": "Libreria profili",
@@ -1623,6 +1625,7 @@
"dialog.pattern_sketch_not_object": "Seleziona corpi o lavorazioni: uno schizzo non è nessuno dei due. Ripeti le sue curve con Ripetizione o Specchia dello schizzo stesso, oppure estrudilo prima.",
"dialog.primitive_point_tip": "Un punto che compila X, Y e Z: fai clic qui, poi su un vertice, uno spigolo o una faccia del modello, su un punto di uno schizzo oppure sull'origine.",
"dialog.reference_edge_tip": "Uno spigolo rettilineo della faccia scelta da cui si misura la distanza sotto: fai clic qui, poi sullo spigolo.",
"dialog.right_click_pick": "Seleziona prima {input}",
"dialog.select": "↖ Seleziona",
"dialog.selected_count": "↖ Selezionati: {count}",
"dialog.selection_constraint": "Vincolo {id}",
@@ -1667,6 +1670,8 @@
"dxf.tolerance": "Tolleranza delle curve",
"dxf.tolerance_help": "Solo corpi visibili e schizzi mostrati. Le curve usano segmenti rettilinei. Una tolleranza minore produce curve più precise e richiede più tempo e memoria.",
"each rail's curves must be in one sketch": "le curve di ogni guida devono stare in un solo schizzo",
"error.end_cap_faces": "Seleziona almeno una faccia di estremità aperta di un elemento",
"error.end_cap_unresolved": "L'estremità {ends} di questa chiusura non è più nel modello. Seleziona di nuovo le facce di estremità",
"feature computation ended without a result": "il calcolo dell'operazione si è concluso senza risultato",
"file.open.drawing_filter": "Progettazioni, file CAD, mesh e disegni",
"file.open.portal_fallback.no_portal_service": "La finestra di selezione file aperta non è quella del desktop: il servizio portale del desktop non è disponibile.",
@@ -1764,6 +1769,7 @@
"help.file.send_to_slicer": "Salva i corpi selezionati come file 3MF e lo apre nello slicer che scegli. Usalo per passare dal modello alla stampa in un solo passo.",
"help.font_details": "L’interfaccia usa i caratteri integrati di egui (Ubuntu Light e Hack, con licenze Ubuntu Font Licence e MIT/Bitstream Vera; Noto Emoji e il carattere per icone emoji, con licenze OFL e MIT). Il testo degli schizzi usa Liberation Sans (SIL OFL 1.1). Il pacchetto di caratteri facoltativo di The Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), non è incluso nelle build di SolidCraft.",
"help.fonts": "Caratteri",
"help.frame.end_cap": "Chiude le estremità aperte degli elementi con piastre sagomate sul contorno del profilo. Usalo per chiudere tubi, angolari e travi, sopra l'estremità o incassate.",
"help.frame.member": "Posiziona un profilo, come un tubo o un profilato di alluminio, lungo le linee di uno schizzo del telaio, un membro per linea. Usalo per costruire telai, scaffalature e strutture saldate.",
"help.inspect.accessibility": "Colora le facce che un utensile può raggiungere da una direzione e quelle che non può raggiungere. Usalo per verificare un pezzo per la lavorazione meccanica o lo stampaggio da quel lato.",
"help.inspect.center_of_mass": "Mostra il centro di massa dei corpi, ciascuno da solo e tutti insieme, a densità uniforme. Usalo per controllare il bilanciamento e dove un pezzo si ribalterà.",
@@ -2582,7 +2588,7 @@
"prefs.design_tools.imported_files": "File importati",
"prefs.design_tools.note": "Avvisa",
"prefs.design_tools.off": "Disattivato",
"prefs.design_tools.placement_group": "Appoggio, Risalto, Aggancio a scatto",
"prefs.design_tools.placement_group": "Lavorazioni posizionate",
"prefs.design_tools.rows": "Righe",
"prefs.devices": "Mouse 3D",
"prefs.dialog_buttons": "Pulsanti OK",
@@ -2875,6 +2881,8 @@
"prefs.sketch.center_arc": "L'arco per centro segue il cursore",
"prefs.sketch.click_selects": "Il clic seleziona",
"prefs.sketch.conflict_colour": "Colore di conflitto",
"prefs.sketch.cursor_coordinates": "Mostra le coordinate del cursore in uno schizzo",
"prefs.sketch.cursor_coordinates_note": "Accanto al puntatore, la sua X e Y dall'origine dello schizzo, anche senza strumenti attivi. Disattivato: solo mentre uno strumento posiziona un punto.",
"prefs.sketch.drawing": "Disegno",
"prefs.sketch.ellipse_axes": "Disegna le ellissi con i loro assi",
"prefs.sketch.ellipse_axes_note": "Gli assi maggiore e minore come rette di costruzione, così si possono quotare i semiassi e gli assi. Disattivato: solo l'ellisse, e D su di essa dà il raggio minore ovunque si trascini il valore, disegnato ed etichettato R come prima.",
@@ -4682,6 +4690,10 @@
"sketch_text.path_clear": "Scollega il testo dalla curva",
"sketch_text.path_hint": "Una curva dello schizzo seguita dal testo: fai clic qui, poi sulla curva",
"sketch_text.use_font_file": "Usa il file di carattere {path}",
"sketch_text.valign_baseline": "Linea di base",
"sketch_text.valign_bottom": "Basso",
"sketch_text.valign_middle": "Centro",
"sketch_text.valign_top": "Alto",
"solid": "solido",
"status.editing": "Modifica di {name}",
"status.navigation": "Assegnazione del mouse: {mapping}",
@@ -5017,6 +5029,7 @@
"ui.agent_chat_setup_title": "Configura un assistente",
"ui.agent_chat_side": "Lato della chat con l'agente",
"ui.agent_chat_signed_in": "accesso effettuato",
"ui.agent_chat_snap_none_found": "Nessun agente di programmazione trovato. Il pacchetto Snap è confinato, quindi non può vedere né avviare gli agenti di programmazione installati su questo computer. Per usarli, installa SolidCraft dal pacchetto AppImage, .deb o .rpm. Un agente che usa un’API compatibile con OpenAI funziona anche nel pacchetto Snap: configuralo con Aggiungi agente.",
"ui.agent_chat_state_auth": "Accesso richiesto",
"ui.agent_chat_state_busy": "Elaborazione…",
"ui.agent_chat_state_exited": "Agente arrestato",
@@ -5183,7 +5196,9 @@
"ui.browser_bodies_one": "{count} corpo",
"ui.browser_bodies_other": "{count} corpi",
"ui.browser_collapse": "Comprimi la struttura",
"ui.browser_collapse_below": "Comprimi sotto",
"ui.browser_expand": "Espandi la struttura",
"ui.browser_expand_below": "Espandi sotto",
"ui.browser_title": "Struttura",
"ui.calibrate": "Calibra",
"ui.cancel": "Annulla",
@@ -5392,6 +5407,17 @@
"ui.ellipse": "Ellisse",
"ui.emboss_wrap_note": "I profili di linee ortogonali tangenti a un cilindro supportato si avvolgono automaticamente. Scegliere una parete per definire la destinazione.",
"ui.end": "Fine",
"ui.end_cap.chamfer": "Smusso degli angoli",
"ui.end_cap.direction": "Direzione",
"ui.end_cap.faces": "Facce di estremità",
"ui.end_cap.inset": "Rientro",
"ui.end_cap.inset_kind": "Rientro come",
"ui.end_cap.inset_ratio": "Rapporto di rientro",
"ui.end_cap.inward": "Verso l'interno",
"ui.end_cap.length": "Lunghezza",
"ui.end_cap.outward": "Verso l'esterno",
"ui.end_cap.ratio": "Rapporto dello spessore",
"ui.end_cap_title": "TAPPO DI ESTREMITÀ",
"ui.end_radius": "Raggio finale",
"ui.end_scale": "Scala finale",
"ui.ends": "Estremità",
@@ -5847,7 +5873,7 @@
"ui.pitch": "Passo",
"ui.placement": "Posizionamento",
"ui.placement_handles": "Maniglie di posizionamento",
"ui.placement_handles_tip": "Maniglie sull'anteprima di un Appoggio, Risalto o Aggancio a scatto: trascina il marcatore per spostarlo sul modello, ruotalo dal suo anello",
"ui.placement_handles_tip": "Un indicatore per trascinare la lavorazione sul modello e, dove la lavorazione può ruotare, un anello per ruotarla.",
"ui.plane": "Piano",
"ui.plane_at_angle": "Piano inclinato",
"ui.plugins": "Plugin",
@@ -5894,6 +5920,7 @@
"ui.project_references_construction_note": "Proietta, Interseca, Includi geometria 3D e gli spigoli della faccia di un nuovo schizzo su una faccia creano geometria di costruzione: riferimenti su cui disegnare, esclusi dai profili. Restano collegati al modello.",
"ui.properties": "Proprietà",
"ui.properties.copy_matrix": "Copia matrice",
"ui.properties.copy_value": "Fai clic per copiare",
"ui.properties.first_moments": "Momenti del primo ordine",
"ui.properties.inertia": "Momento d'inerzia",
"ui.properties.inertia_note": "Rispetto al centro di massa, negli assi globali (g·{unit}²)",
@@ -5906,6 +5933,7 @@
"ui.properties.measuring_failed": "La misurazione si è interrotta prima del termine.",
"ui.properties.principal_axis": "Asse principale {number}",
"ui.properties.principal_moments": "Momenti principali",
"ui.properties.value_copied": "Valore copiato",
"ui.pull_direction": "Direzione di estrazione",
"ui.quality": "Qualità",
"ui.quantity": "Quantità",
@@ -5961,6 +5989,8 @@
"ui.ribbon_pin_footer": "I comandi fissati compaiono sulla barra multifunzione. Passa sopra una riga per fissarla o rimuoverla.",
"ui.ribbon_workspace": "Area di lavoro",
"ui.right": "Destra",
"ui.right_click_confirms": "Il clic destro conferma gli input della finestra di dialogo",
"ui.right_click_confirms_tip": "Con una finestra di dialogo aperta, un clic destro nella vista passa al successivo input vuoto e, sull’ultimo, esegue OK",
"ui.save": "Salva",
"ui.save_as": "Salva con nome",
"ui.save_mesh_no_slicer_open": "Nessuno slicer trovato: scegli Personalizzato… e seleziona il tuo programma slicer",
+189 -2
View File
@@ -247,6 +247,7 @@
"Drag to move the hole; click to remove it": "ドラッグで穴を移動、クリックで削除",
"Drag to move the rest across the model. It snaps to sketch points on the face.": "ドラッグしてレストをモデル上で移動します。面上のスケッチ点にスナップします。",
"Drag to move the snap fit across the model. It snaps to sketch points on the face.": "ドラッグしてスナップ フィットをモデル上で移動します。面上のスケッチ点にスナップします。",
"Drag to place it on another face.": "ドラッグして別の面に配置します。",
"Drag to point the catch in another direction.": "ドラッグしてキャッチの向きを変えます。",
"Drag to turn the rest in 5° steps. Hold Alt or Ctrl to turn it freely.": "ドラッグしてレストを 5° 刻みで回転します。Alt または Ctrl を押したままにすると自由に回転します。",
"Drive Joint": "ジョイントを駆動",
@@ -513,6 +514,7 @@
"Offset Y": "オフセット Y",
"Offset Z": "オフセット Z",
"On your computer": "このコンピューター上",
"One more stretch of the picked edge, each with its own angle, height and turns": "選択したエッジのもう一つの区間。それぞれに独自の角度、高さ、曲げ方向があります",
"Opacity": "不透明度",
"Open GitHub": "GitHubを開く",
"Open GitHub draft": "GitHubの下書きを開く",
@@ -634,6 +636,7 @@
"Remove the track": "トラックを削除",
"Remove this bend": "この曲げを削除",
"Remove this point": "この点を削除",
"Remove this segment": "このセグメントを削除",
"Rename Feature": "フィーチャーの名前を変更",
"Rename Folder": "フォルダーの名前を変更",
"Render Stage": "レンダリング段階",
@@ -723,6 +726,7 @@
"Section position": "断面の位置",
"Sections": "セクション",
"Sections (one sketch each)": "セクション (各1スケッチ)",
"Segments": "セグメント",
"Select Features": "フィーチャーを選択",
"Select Other": "その他を選択",
"Select Other: hold the left button still on the model (or right-click › Select Other…) to list everything under the cursor; click again on the same spot to select the next thing there. Double-click the middle button to go Home (Preferences › Navigation).": "その他を選択: モデル上で左ボタンを長押し(または右クリック › その他を選択…)するとカーソル下の要素が一覧表示されます。同じ場所を再度クリックすると次の要素が選択されます。中ボタンをダブルクリックするとホームビューに戻ります(環境設定 › ナビゲーション)。",
@@ -772,6 +776,7 @@
"Spacing must be a non-zero number": "間隔は0以外の数値にしてください",
"Specialise": "特殊操作",
"Speed": "速度",
"Split Edge": "エッジを分割",
"Splitting tool": "分割ツール",
"Square": "正方形",
"Stainless Steel": "ステンレス鋼",
@@ -885,6 +890,7 @@
"Variable Radius": "可変半径",
"Variable radius": "可変半径",
"Velocity": "速度",
"Vertical": "垂直",
"Vertices": "頂点",
"View": "表示",
"View navigator": "ビューナビゲーター",
@@ -938,6 +944,13 @@
"ai.prefs.connect_apps_note": "オフにすると追加した項目を削除します。\n\nSolidCraft の起動時に、このコンピューターで見つかった AI アプリ(OpenCode、Claude Desktop、Claude Code、Cursor、Codex、Gemini CLI、Copilot CLI、Windsurf、Zed、VS Code)へ MCP サーバーとして追加します。追加または更新するのは solidcraft のエントリのみで、変更済みのエントリには触れず、ファイルは先にバックアップされます。オフにすると追加したエントリを削除します。",
"ai.prefs.connect_at_start": "起動時に前回のエージェントに接続",
"ai.prefs.connect_at_start_note": "SolidCraft を起動するたびに、前回接続したエージェント (またはデフォルトのエージェント) をバックグラウンドで起動し、すぐにチャットできるようにします。--control を付けて起動した場合は行いません。接続できない場合、アシスタントに「接続に失敗しました」と「再試行」ボタンが表示されます。",
"ai.prefs.control_failed": "コントロールチャネルを開始できませんでした: {error}",
"ai.prefs.control_from_launch": "この実行は --control でポート {port} を使って開始されました。ここでの変更は、次に --control なしで SolidCraft を起動したときに反映されます。",
"ai.prefs.control_listening": "127.0.0.1:{port} で待機中",
"ai.prefs.control_not_listening": "待機していません",
"ai.prefs.control_port": "ポート",
"ai.prefs.control_port_note": "このコンピューター上で AI エージェントが接続するポート (127.0.0.1)。既定は 27878 で、使用中の場合は次の空いているポートを使います。それ以外のポートはそのまま使います。MCP クライアントも同じポートに向けてください (例: solidcraft-cli mcp --connect 127.0.0.1:7878)。",
"ai.prefs.control_port_taken": "ポート {port} は別のプログラム (または別の SolidCraft ウィンドウ) が使用しています。別のポートを選んでください。",
"ai.prefs.follow_camera": "カメラを追従",
"ai.prefs.follow_camera_off": "カメラの自動追従はオフです。",
"ai.prefs.follow_camera_on": "エージェントが作成するスケッチにカメラを向けます。",
@@ -998,6 +1011,13 @@
"browser.sketches_to_parts_not_on_face": "部品の面上にない",
"browser.sketches_to_parts_part_missing": "部品がもうない",
"browser.sketches_to_parts_result": "{moved} 個のスケッチを描かれている部品に移動しました。{stayed} 個はそのまま:{why}",
"browser.straighten_angle": "エッジの向き",
"browser.straighten_choose": "エッジの向き(水平、垂直、または角度)を選んでから、[傾き補正]を押してください。",
"browser.straighten_click_a": "まっすぐにしたいエッジの一端を画像上でクリックするか、座標を入力してください。",
"browser.straighten_click_b": "エッジのもう一端をクリックするか、座標を入力してください。",
"browser.straighten_horizontal": "水平",
"browser.straighten_title": "傾き補正: {name}",
"browser.straighten_vertical": "垂直",
"browser.units": "単位: {units}",
"cam.flat": "平面",
"cam.follower": "従動節",
@@ -1027,6 +1047,8 @@
"cmd.appearance_pick_up": "外観を取得",
"cmd.appearance_replace": "外観を置換",
"cmd.assembly_bom": "部品表",
"cmd.assembly_constraint_create": "拘束",
"cmd.assembly_constraint_edit": "拘束を編集",
"cmd.assembly_mass_properties": "質量特性",
"cmd.body.print_face": "造形面",
"cmd.body_rename": "ボディの名前を変更",
@@ -1045,6 +1067,7 @@
"cmd.canvas_delete": "キャンバスを削除",
"cmd.canvas_edit": "キャンバスを編集",
"cmd.canvas_insert": "キャンバス",
"cmd.canvas_straighten": "キャンバスの傾き補正",
"cmd.canvas_to_sketch": "キャンバスからスケッチ",
"cmd.component_activate": "コンポーネントをアクティブ化",
"cmd.component_break_link": "リンクを解除",
@@ -1086,7 +1109,10 @@
"cmd.config_rule": "構成ルール",
"cmd.config_rules": "構成ルール一覧",
"cmd.config_table": "構成テーブルを表示",
"cmd.construct.axis": "軸",
"cmd.construct.plane": "平面",
"cmd.construct.plane.axis_point": "軸と点を通る平面",
"cmd.construct.point": "点",
"cmd.construct_axis_edge": "エッジを通る軸",
"cmd.construct_axis_normal_to_face": "面に垂直な軸",
"cmd.construct_axis_through_cylinder": "円柱/円錐/トーラスを通る軸",
@@ -1149,6 +1175,7 @@
"cmd.file_save_mesh": "メッシュとして保存",
"cmd.file_send_to_slicer": "スライサーに送る",
"cmd.file_slicers": "インストール済みのスライサー",
"cmd.frame_end_cap": "エンドキャップ",
"cmd.frame_member": "フレーム部材",
"cmd.frame_profile_insert": "形材を挿入",
"cmd.frame_profile_list": "形材ライブラリ",
@@ -1169,6 +1196,7 @@
"cmd.inspect_isocurve": "アイソカーブ解析",
"cmd.inspect_minimum_radius": "最小半径解析",
"cmd.inspect_parameter_sweep": "パラメータスイープ",
"cmd.inspect_parameter_variants": "パラメーターの組み合わせを比較",
"cmd.inspect_silhouette": "シルエット",
"cmd.inspect_zebra": "ゼブラ解析",
"cmd.joint_as_built": "現位置ジョイント",
@@ -1222,6 +1250,10 @@
"cmd.motion_trace": "モーション トレース",
"cmd.motion_trace_edit": "モーション トレースを編集",
"cmd.motion_trace_keep": "モーション トレースを保持",
"cmd.note_add": "メモを追加",
"cmd.note_delete": "メモを削除",
"cmd.note_list": "メモを一覧表示",
"cmd.note_update": "メモを編集",
"cmd.occurrence_align": "オカレンスを整列",
"cmd.occurrence_copy": "貼り付け(インスタンス)",
"cmd.occurrence_drag": "オカレンスをドラッグ",
@@ -1347,6 +1379,7 @@
"cmd.render_start": "画像をレンダリング",
"cmd.render_status": "レンダリングの進行状況",
"cmd.select_clear": "選択をクリア",
"cmd.selection_get": "選択を取得",
"cmd.settings_profile_apply": "設定プロファイルを適用",
"cmd.settings_profile_delete": "設定プロファイルを削除",
"cmd.settings_profile_export": "設定プロファイルをエクスポート",
@@ -1510,6 +1543,7 @@
"cmd.timeline_suppress": "フィーチャーを抑制",
"cmd.ui.assistant": "アシスタントの表示切り替え",
"cmd.ui.palette": "コマンドを検索",
"cmd.ui.toggle_visibility": "選択項目の表示/非表示",
"cmd.view.navigator": "カスタム ビューナビゲーター",
"cmd.view.render_browser": "Renderブラウザー",
"cmd.view.render_dock": "レンダードックを移動",
@@ -1567,6 +1601,7 @@
"color.step_down": "1 ステップ下げる",
"color.step_up": "1 ステップ上げる",
"color.value": "明度(パーセント)",
"component.error.ambiguous_name": "複数のコンポーネントに `{name}` という名前が付いています。数値のコンポーネント ID を使用してください: {ids}。",
"config.column_filter_empty": "一致する列がありません",
"config.rule_parameter_columns": "表に列があるパラメータのみが表示されます。ここで使うには「列を追加」(+) で列を追加してください。",
"config.rule_suppression_columns": "表に「抑制」列があるフィーチャーのみが表示されます。ここで制御するには「列を追加」(+) で列を追加してください。",
@@ -1607,6 +1642,7 @@
"diagnostic.reselect_reference": "{feature}: 参照 `{reference}` は選択したときのままでは存在しません。選択し直してください",
"dialog.bodies_count": "{count} ボディ",
"dialog.clearance_invalid": "クリアランスは 0 以上の長さにしてください",
"dialog.component_origin": "{placement} · {item}",
"dialog.compute": "計算",
"dialog.compute_again": "再計算",
"dialog.computing": "計算中… {seconds} 秒",
@@ -1619,10 +1655,12 @@
"dialog.dimension_step_expression": "増減できるのは数値だけです。式はそのまま残ります",
"dialog.dimension_step_up": "{step} 増やす",
"dialog.edit_title": "{title}を編集",
"dialog.hole_held_off_its_line": "参照エッジがこの穴を直線上に固定していますが、その直線は選択した点より手前で面の外に出ます。直線が面の上を通る位置を選択するか、エッジを外すと穴を自由に移動できます。",
"dialog.no_shown_body": "変更できる表示中のボディがありません。ボディを表示するか、新規ボディを選択してください",
"dialog.pattern_sketch_not_object": "ボディかフィーチャーを選んでください。スケッチはどちらでもありません。曲線はスケッチ内のパターンかミラーで繰り返すか、先に押し出してください。",
"dialog.primitive_point_tip": "X、Y、Z を埋める点: ここをクリックしてから、モデルの頂点、エッジ、面、スケッチの点、または原点をクリック。",
"dialog.reference_edge_tip": "下の距離を測る基準となる、選んだ面の直線エッジ: ここをクリックしてからエッジをクリック。",
"dialog.right_click_pick": "先に {input} を選択",
"dialog.select": "↖ 選択",
"dialog.selected_count": "↖ {count} 個選択中",
"dialog.selection_constraint": "拘束 {id}",
@@ -1636,9 +1674,12 @@
"document.changed_on_disk": "{name} がディスク上で変更されました",
"document.changed_on_disk_detail": "{name} は、開いたとき(または最後に保存したとき)以降に別のプログラムまたはコンピューターによって変更されました。上書きするとその変更は失われます。コピーを保存すると両方が残ります。",
"document.copy_name": "{name} のコピー",
"document.discard_row": "破棄",
"document.finish_save_prompt": "別のデザインを開く前に、保存の確認に回答してください。",
"document.newer_file": "新しいバージョンの SolidCraft で保存されています(形式 {format}、このバージョンは {reads} まで読み取れます)。足りないものがあれば更新してください。",
"document.newer_file_change": "新しいバージョンの SolidCraft で保存されています(形式 {format}、このバージョンが認識しない `{change}` を含みます)。足りないものがあれば更新してください。",
"document.newer_file_not_read": "読み取れませんでした: {what}。保存しても失われません。",
"document.not_saved_yet": "未保存",
"document.open_anyway": "このまま開く",
"document.open_elsewhere": "{name} はすでに開かれています",
"document.open_elsewhere_detail": "{name} は {who} の SolidCraft {app} で開かれています({when}に開かれました)。両方で保存すると、どちらかの作業が失われます。上書きせずに確認するには読み取り専用で開いてください。",
@@ -1648,6 +1689,9 @@
"document.read_only_save": "このデザインは読み取り専用で開かれています:新しいファイルとして保存してください",
"document.save_changes": "{name} への変更を保存しますか?",
"document.save_copy": "コピーを保存…",
"document.save_many": "{n} 件のデザインの変更を保存しますか?",
"document.save_row": "保存",
"document.save_selected": "選択項目を保存",
"document.tab_unsaved_changes": "未保存の変更",
"document.unsaved_changes": "{name} には保存されていない変更があります。保存しない場合、変更内容は失われます。",
"drive.rigid": "{joint} は剛体ジョイントです。部品をその場に固定するため、駆動するものがありません。動かすには「ジョイントを編集」で種類を変更してください: 回転させるなら Revolute、スライドさせるなら Slider、両方なら Cylindrical。",
@@ -1667,6 +1711,8 @@
"dxf.tolerance": "曲線の許容誤差",
"dxf.tolerance_help": "表示中のボディとスケッチを出力し、曲線は線分で近似します。許容誤差を小さくすると曲線が滑らかになりますが、処理時間とメモリ使用量が増えます。",
"each rail's curves must be in one sketch": "各レールの曲線は1つのスケッチ内にある必要があります",
"error.end_cap_faces": "フレーム部材の開いた端面を1つ以上選択してください",
"error.end_cap_unresolved": "このエンドキャップの端 {ends} はモデル上にありません。端面を選択し直してください",
"feature computation ended without a result": "フィーチャーの計算が結果なしで終了しました",
"file.open.drawing_filter": "デザイン、CADファイル、メッシュ、図面",
"file.open.portal_fallback.no_portal_service": "開いたファイル選択はデスクトップのものではありません。デスクトップのファイル選択サービスが利用できません。",
@@ -1678,6 +1724,7 @@
"file_load.inserting": "ジオメトリを挿入中",
"file_load.link_item": "{name} ({done}/{total})",
"file_load.opened": "{name} を開きました",
"file_load.opened_behind": "{name} を新しいタブで開きました",
"file_load.opened_in_tab": "{name} を新しいタブで開きました",
"file_load.opening": "デザインを開いています",
"file_load.preparing_thumbnail": "サムネイルを準備中...",
@@ -1725,11 +1772,13 @@
"help.config.table": "構成テーブルを表示します。1行が1つのバリエーション、1列が1つのパラメータまたはフィーチャーで、デザインが有効な行と一致しているかも分かります。デザインのバリエーションを見直すときに使います。",
"help.connect_note": "各アシスタントを再起動すると SolidCraft サーバーが読み込まれます。変更したファイルは .bak としてバックアップされています。",
"help.connect_title": "AI アシスタントを接続",
"help.construct.axis": "選択に応じた方法で構築軸を作ります。エッジや線に沿って、穴や丸い面を通って、2つの平面の交線に、2点を通って、または点を通り面に垂直に作ります。参照は決まっているが方法を選びたくないときに使います。",
"help.construct.axis.edge": "直線のエッジまたはスケッチ線に沿って構築軸を作ります。回転、円形パターン、ジョイントの軸として使います。",
"help.construct.axis.normal_to_face": "指定した点を通り、面に垂直な構築軸を作ります。表面からまっすぐ立ち上がる軸として使います。",
"help.construct.axis.through_cylinder": "円柱、円錐、トーラスの面、または円形のエッジの中心を通る構築軸を作ります。丸い部品のまわりでフィーチャーを回転させたりパターン化したりするときに使います。",
"help.construct.axis.two_planes": "2つの平面または平らな面が交わる位置に構築軸を作ります。必要な軸が2つの面の間の線であるときに使います。",
"help.construct.axis.two_points": "2つの点、頂点、スケッチ点を通る構築軸を作ります。位置が分かっている2か所の間を通る軸に使います。",
"help.construct.plane": "選択に応じた方法で構築平面を作ります。平面からのオフセット、点を通る、2つの平面の中間、線や点を通る、曲面に接する、またはパスに垂直に作ります。参照は決まっているが方法を選びたくないときに使います。",
"help.construct.plane.along_path": "エッジまたは曲線に垂直な構築平面を、その上の指定位置に作ります。スイープ用のプロファイルや、パスの断面をスケッチするときに使います。",
"help.construct.plane.at_angle": "平面または面を、軸またはエッジを中心に指定した角度だけ傾けた構築平面を作ります。斜めのブラケットなど、傾いたスケッチに使います。",
"help.construct.plane.axis_point": "軸と、その軸上にない点を含む構築平面を作成します。原点軸、構築軸、直線エッジまたはスケッチの直線を選択し、次に頂点、スケッチ点または構築点を選択します。軸上の点では平面が一意に定まりません。",
@@ -1739,6 +1788,7 @@
"help.construct.plane.tangent": "円柱、円錐、球、トーラスに1点で接する構築平面を作ります。丸い部品の側面にスケッチするときに使います。",
"help.construct.plane.three_points": "3つの点を通る構築平面を作ります。3つの角など、モデル上の位置で決まる平面に使います。",
"help.construct.plane.two_edges": "同一平面上にある2本の直線エッジまたは線を通る構築平面を作ります。向かい合う2本のエッジを通る面など、部品を横切る平面に使います。",
"help.construct.point": "選択に応じた方法で構築点を作ります。頂点、円や球の中心、エッジ上、2本の線や3つの平面の交点、または線が平面と交わる位置に作ります。参照は決まっているが方法を選びたくないときに使います。",
"help.construct.point.along_path": "エッジまたは曲線上の指定位置に構築点を作ります。パスの途中の基準として使います。",
"help.construct.point.center": "円形のエッジ、スケッチの円や円弧、球、トーラスの中心に構築点を作ります。穴、軸、ジョイントの基準として使います。",
"help.construct.point.edge_plane": "エッジまたは線が平面や平らな面を通る位置に構築点を作ります。パスが平面と交わる位置を示すときに使います。",
@@ -1764,6 +1814,7 @@
"help.file.send_to_slicer": "選択したボディを 3MF ファイルとして保存し、選んだスライサーで開きます。モデルからプリントまでを1ステップで進めるときに使います。",
"help.font_details": "インターフェースにはegui組み込みのフォントを使用しています(Ubuntu Font LicenceおよびMIT/Bitstream VeraライセンスのUbuntu LightとHack、OFLおよびMITのNoto Emojiと絵文字アイコンフォント)。スケッチのテキストにはLiberation Sans(SIL OFL 1.1)を使用しています。The Crafting Appsのオプションフォントパックcraft-fonts(BIZ UDPGothic、Shippori Mincho、BIZ UDMincho、Noto Sans CJK SC、Noto Sans Arabic、SIL OFL 1.1)はSolidCraftのビルドに同梱されていません。",
"help.fonts": "フォント",
"help.frame.end_cap": "フレーム部材の開いた端を、プロファイルの外形に沿ったプレートで閉じます。パイプ、アングル、梁の端をふさぐときに、端の上に載せるか端に埋め込んで使います。",
"help.frame.member": "チューブやアルミ押し出し材などのプロファイルを、フレームスケッチの線に沿って1本につき1部材ずつ配置します。フレーム、ラック、溶接構造を作るときに使います。",
"help.inspect.accessibility": "ツールが一方向から届く面と届かない面を色分けします。その方向からの切削加工や成形が可能か、部品を確認するときに使います。",
"help.inspect.center_of_mass": "一様な密度を仮定して、各ボディと全体の重心を表示します。バランスや、部品が倒れる位置を確認するときに使います。",
@@ -2240,6 +2291,9 @@
"measure.at": "位置",
"measure.item": "項目 {number}",
"measure.line_to_centre": "線から中心まで",
"measure.perimeter": "周長",
"measure.perimeter_inner": "内周長",
"measure.perimeter_outer": "外周長",
"measure.quick_copied": "測定値をコピーしました",
"measure.quick_copy": "クリックで測定値をコピー",
"measure.quick_edges": "エッジ {count} 本",
@@ -2281,6 +2335,8 @@
"nav.hfss.help": "Alt+左ドラッグでパン、Shift+Alt+左ドラッグでズーム、何もない所からの Ctrl+左ドラッグで回転。",
"nav.inventor.help": "中ドラッグでパン、Shift+中ドラッグで回転、Ctrl+中ドラッグでズーム、右ドラッグで回転。",
"nav.maya.help": "Alt+左ドラッグで回転、Alt+中ドラッグでパン、Alt+右ドラッグでズーム。中ドラッグでもパン。",
"nav.maya_horizontal_zoom.help": "Alt+右ドラッグで右に動かすと拡大、左に動かすと縮小します。オフにすると従来の垂直ドラッグに戻ります。",
"nav.maya_horizontal_zoom.label": "Maya: 水平方向のドラッグでズーム",
"nav.nx.help": "中ボタンのドラッグで回転、Shift+中ボタンで平行移動(NXの中ボタン+右ボタン)、Ctrl+中ボタンでズーム(NXの中ボタン+左ボタン)。右ボタンのドラッグではカメラは動きません",
"nav.openscad.help": "空きスペースで左ドラッグすると回転、Shift+左ドラッグで矩形選択、スケッチ ジオメトリはドラッグで編集。右または中ドラッグでパン、Shift+右または Shift+中ドラッグでズーム。",
"nav.orbit_cursor_wrap.help": "回転のドラッグがビューの端に達すると、カーソルが反対側の端へ移り、そのまま回転を続けます。オフ:ドラッグは画面の端で止まります。Wayland とブラウザーでは効果がありません。",
@@ -2411,6 +2467,16 @@
"not a move": "移動ではありません",
"not a number": "数値ではありません",
"open a sketch first": "先にスケッチを開いてください",
"operations.cancel": "{name} をキャンセル",
"operations.cancelled": "{name} をキャンセルしました",
"operations.cancelling": "キャンセル中…",
"operations.cannot_cancel": "{name} はキャンセルできません",
"operations.feature": "フィーチャー",
"operations.feature_edit": "フィーチャーを編集",
"operations.meshing": "パーツを読み込み中",
"operations.queued": "待機中",
"operations.stopped": "キャンセル済み",
"operations.waiting": "準備完了",
"parameters.apply_live": "フィールドを離れるたびに変更を適用",
"parameters.apply_live_tip": "オフ: 変更は「適用」または「OK」まで保留され、その後すべてをまとめて一度だけ再構築します。「キャンセル」または Esc で破棄します。",
"parameters.held": "{count} 件の変更が適用待ちです",
@@ -2499,6 +2565,7 @@
"prefs.appearance.viewport_colours": "3D ビューの色",
"prefs.appearance.viewport_logo": "ビューポートとロゴ",
"prefs.applies_on_restart": "再起動後に適用",
"prefs.assemblies": "アセンブリ",
"prefs.assistant": "アシスタント",
"prefs.assistant_connecting": "接続",
"prefs.assistant_follow_help": "スケッチのLook At操作で、ポインターに合わせてビューが移動します。",
@@ -2551,6 +2618,10 @@
"prefs.choose_font": "フォントファイルを選択…",
"prefs.click": "クリック",
"prefs.command_dialog_values": "コマンドダイアログ",
"prefs.constraint_glyph_size": "拘束グリフのサイズ",
"prefs.constraint_glyph_size_note": "スケッチ内の拘束グリフとその文字やアイコンを描く大きさ。100% が通常のサイズです。グリフはどのズームでもこの画面サイズを保ちます。",
"prefs.construct_menu_groups": "構築ツールを要素の種類でグループ化",
"prefs.construct_menu_groups_help": "平面、軸、点の見出しを表示します。オフにすると元のメニュー順序を維持します。",
"prefs.contact_shading": "柔らかな接触陰影",
"prefs.contact_shading_note": "部品が近接する部分に柔らかな陰影を付けます。",
"prefs.context_menu": "コンテキストメニュー",
@@ -2582,10 +2653,12 @@
"prefs.design_tools.imported_files": "インポートしたファイル",
"prefs.design_tools.note": "通知",
"prefs.design_tools.off": "オフ",
"prefs.design_tools.placement_group": "レスト、ボス、スナップフィット",
"prefs.design_tools.placement_group": "配置するフィーチャー",
"prefs.design_tools.rows": "行数",
"prefs.devices": "3D マウス",
"prefs.dialog_buttons": "ダイアログのボタン",
"prefs.dialog_first_letter_buttons": "ダイアログのボタンはラベルの先頭文字で押せる",
"prefs.dialog_first_letter_buttons_help": "ダイアログが開いているとき、ボタンのラベルの先頭文字を入力するとそのボタンが押されます:「キ」で「キャンセル」など。2 つのボタンに当てはまる文字は何もしません。フォーカス中のテキストフィールドはそのまま入力を受け取ります。オフ:従来どおり、入力ではボタンは押されません。",
"prefs.dialogs": "ダイアログ",
"prefs.dialogs_edge": "ビューの端",
"prefs.dialogs_left_column": "左の列",
@@ -2599,12 +2672,23 @@
"prefs.dimension_values_window": "ウィンドウ",
"prefs.display": "表示",
"prefs.edges": "エッジと陰影",
"prefs.export": "エクスポート",
"prefs.export_name": "エクスポートのファイル名",
"prefs.export_name.body": "エクスポートするボディ名(複数ある場合は最初のボディ)",
"prefs.export_name.design": "デザイン名",
"prefs.export_name_hint": "例: {design}-{body}",
"prefs.export_name_sample": "このデザインのエクスポート時の名前: {name}",
"prefs.export_name_tip": "ファイル › エクスポートとメッシュとして保存が提案するファイル名です。次のプレースホルダーが置き換えられます:\n{placeholders}\n設定されていないデザインのプロパティは省かれます。空のままにすると、デザイン名(メッシュではボディ名)を提案します。",
"prefs.extend": "拡張",
"prefs.extra_navigation": "何もない場所でCtrl+左ドラッグすると回転し、Spaceを押しながらドラッグすると移動します。",
"prefs.extrude_arrow_face_stops": "押し出し矢印を面で止める",
"prefs.extrude_arrow_face_stops_note": "押し出しの距離矢印をドラッグすると、プロファイルに平行な平らな面(カットするブロックの反対側など)で止まり、その面の輪郭を表示します。オフ: 矢印はきりのよい刻みでのみ動きます。",
"prefs.extrude_view_isometric": "押し出しを開いたときに等角ビューにする",
"prefs.extrude_view_return": "押し出しを閉じたときに元のビューに戻す",
"prefs.file_operations_wait": "ファイルを開く間は待つ",
"prefs.file_operations_wait_note": "ファイルを開く・挿入する・リンクを読み直す間、デザインは進行状況とキャンセルを示すカードの後ろで待機します。オフ:ファイルは処理パネルに表示され、作業を続けられます。挿入は作業が終わってから反映され、その間に開いたファイルは新しいタブに入ります。",
"prefs.fillet_legacy_radius": "以前のフィレット半径の既定値を使う",
"prefs.fillet_legacy_radius.help": "既定ではオフです。オンのとき:新しい Solid Fillet は設計の単位として読み取った数値 2(「2 in」)で始まり、以前と同じです。オフのとき:そのツールが標準で持つ半径 2 mm を設計の単位に換算した値(「0.07874 in」)で始まります。",
"prefs.follows_os": "OS の設定に従う",
"prefs.font": "フォント",
"prefs.font_fallback": "選択したフォントにない文字は組み込みフォントで表示し、ラベルが空の四角になるのを防ぎます。",
@@ -2628,6 +2712,17 @@
"prefs.gesture_pan": "移動",
"prefs.gesture_zoom": "ズーム",
"prefs.graphics": "グラフィックス",
"prefs.graphics_api": "グラフィックスAPI",
"prefs.graphics_api_auto": "自動",
"prefs.graphics_api_help": "SolidCraftの起動に使用するグラフィックスAPIを選択します。次回起動時にウィンドウを開けなかった場合は、以前の選択に戻ります。",
"prefs.graphics_api_override": "起動時の上書き設定がグラフィックスAPIを指定しています。SolidCraftを通常どおり開くと、保存した選択が適用されます。",
"prefs.graphics_api_restart_note": "再起動後に適用されます。閉じる前に未保存のデザインを確認します。",
"prefs.graphics_api_restart_unavailable": "保存したグラフィックスAPIを適用するには、SolidCraftを再起動してください。",
"prefs.graphics_api_running": "現在: {current}。次回起動時の選択: {selected}。",
"prefs.graphics_api_save_failed": "グラフィックスAPIの選択を保存できませんでした: {error}",
"prefs.graphics_api_start_failed": "選択したグラフィックスAPIを準備できませんでした: {error}",
"prefs.graphics_api_start_reverted": "前回は{requested}でウィンドウを開けませんでした。SolidCraftは{previous}に戻しました。",
"prefs.graphics_api_unavailable": "グラフィックスAPIの選択はデスクトップアプリで利用できます。",
"prefs.graphics_card": "グラフィックスカード",
"prefs.graphics_card_auto": "自動",
"prefs.graphics_card_missing": "保存されたグラフィックスカードが利用できないため、自動選択を使用します。",
@@ -2671,6 +2766,8 @@
"prefs.history_sketches_in_order": "作成順",
"prefs.history_sketches_note": "スケッチ:「フィーチャーの下」では、左側の履歴に名前が表示される幅があるとき、スケッチをそれから作成した最初のフィーチャーの下に 1 段字下げして表示します。下部のタイムラインは常に作成順です。",
"prefs.history_sketches_under_feature": "フィーチャーの下",
"prefs.history_steps_component": "コンポーネント単位で履歴を移動",
"prefs.history_steps_component_note": "コンポーネントがアクティブまたは選択されているとき、履歴コントロールは下部の履歴に表示されるとおり、そのコンポーネントのフィーチャだけを移動します。オフにすると、デザインのすべてのフィーチャを移動します。左側またはブラウザー下の履歴は常にすべてのフィーチャを移動します。",
"prefs.hold_stop_snapping": "押している間スナップを解除",
"prefs.home_fit_size": "ホームと全体表示の大きさ",
"prefs.home_fit_size_note": "ホーム、全体表示、開いたデザイン、ナビゲーターでの視点変更がモデルを画面に収めるときに、モデルがビューに占める割合。下の設定のオン・オフにかかわらず適用されます。100 %: パネル、コンパス、ナビゲーションバーの間のビューをいっぱいに使います。",
@@ -2686,6 +2783,8 @@
"prefs.invert_curved_roll_arrows_note": "キューブの隅にある2つのカーブした矢印は、画面内でビューをロールします。オン: 時計回りの矢印が反時計回りに、反時計回りの矢印が時計回りにロールします。オフ: 各矢印は、そのカーブの向きにビューをロールします。",
"prefs.invert_navigator_arrows": "ビューキューブの回転矢印を反転",
"prefs.invert_navigator_arrows_note": "キューブの周りの矢印が、矢印の指す方向にカメラを回します(Fusion や Inventor と同じ動き):左の矢印は右を指し、カメラを右に振ります。オフ: 矢印は、そのある面の方へキューブを回すため、左の矢印はカメラを左に振ります。カーブしたロール矢印は影響を受けません。",
"prefs.joint_drag_trackball": "ボールジョイントの部品をドラッグするとトラックボールのように回転",
"prefs.joint_drag_trackball_help": "ボールジョイントで保持された部品をドラッグすると、部品の大きさのボールを転がすように、ジョイントを中心に最小の回転で回ります。オフ:つかんだ点がポインターに正確に追従し、部品がその点を軸にさらに回転することがあります。",
"prefs.keep_unsaved_also_asks": "タブを閉じるときにも確認する",
"prefs.keep_unsaved_also_asks_tip": "オフにすると、未保存の各デザインのコピーが最新であれば、ブラウザーの確認なしでタブが閉じます。",
"prefs.keep_unsaved_in_browser": "未保存の作業をこのブラウザーに保持する",
@@ -2761,6 +2860,8 @@
"prefs.not_on_gpu": "この GPU は非対応",
"prefs.on": "オン",
"prefs.opaque": "不透明",
"prefs.operations_panel": "ビューに処理を表示",
"prefs.operations_panel_note": "時間のかかる処理(ファイルを開く、フィーチャーの計算、エージェントのコマンド)が、進行状況とキャンセルボタンとともにビューの右下に表示されます。オフ:従来どおり「計算中」の通知を表示します。",
"prefs.orbit_snap": "回転中にShiftを押すと軸にスナップします。",
"prefs.orientation": "方向",
"prefs.origin_plane_names": "原点平面の名前",
@@ -2841,6 +2942,8 @@
"prefs.ribbon_tabs_only": "リボンのタブだけを表示",
"prefs.ribbon_tabs_only_note": "リボンをタブの行だけに折りたたみます。タブをクリックすると、コマンドが始まるかポインターが離れるまで、そのパネルがビューの上に表示されます。表示タブの「リボンのタブのみ」またはそのショートカットで切り替えます。",
"prefs.right_click": "右クリック",
"prefs.save_prompt_one_at_a_time": "複数を閉じるとき、未保存のデザインごとに確認する",
"prefs.save_prompt_one_at_a_time_help": "一覧でまとめて確認する代わりに、未保存のデザインごとに保存を確認します。",
"prefs.saving": "起動と保存",
"prefs.scale_note": "ウィンドウ内では Ctrl + / Ctrl − でも変更できます。100% のボタンは 28 px です。",
"prefs.scale_text": "拡大率と文字",
@@ -2877,6 +2980,8 @@
"prefs.sketch.center_arc": "中心点指定の円弧がカーソルに追従",
"prefs.sketch.click_selects": "クリックで選択",
"prefs.sketch.conflict_colour": "競合色",
"prefs.sketch.cursor_coordinates": "スケッチでカーソル座標を表示",
"prefs.sketch.cursor_coordinates_note": "ツールを実行していないときも、ポインターの横にスケッチ原点からの X と Y を表示します。オフ: ツールで点を配置している間だけ表示します。",
"prefs.sketch.drawing": "作図",
"prefs.sketch.ellipse_axes": "楕円を軸と一緒に描く",
"prefs.sketch.ellipse_axes_note": "長軸と短軸をコンストラクション線として描き、半軸と軸に寸法を付けられるようにします。オフ: 楕円のみを描き、D で短半径を寸法にします。値をどこへ引いても、これまでどおり R 付きで描かれます。",
@@ -2888,14 +2993,20 @@
"prefs.sketch.faces_edges": "面とエッジ",
"prefs.sketch.hide_glyphs": "ズームアウト時に記号を非表示",
"prefs.sketch.marks": "スケッチ内のマーク",
"prefs.sketch.max_points": "最大スケッチ",
"prefs.sketch.max_points_note": "1 つのスケッチに入る点または曲線の最大数です。既定は 20000、上限は 200000 です。SVG を挿入と DXF を挿入は、これより大きい図面を受け付けません。大きなスケッチは解決と描画が遅くなります。",
"prefs.sketch.max_points_unit": "点",
"prefs.sketch.note": "作図、スナップ、選択。",
"prefs.sketch.opening_closing": "開始と終了",
"prefs.sketch.prefer_free_points": "重なる場合は移動可能な点を優先",
"prefs.sketch.project_options": "投影オプションを先に確認",
"prefs.sketch.recent_snap": "2本のガイドの交点にスナップ",
"prefs.sketch.select_3d_curve_points": "3Dスケッチ曲線の点を選択",
"prefs.sketch.select_3d_curve_points_help": "描画した3Dスケッチ曲線の点を表示し、構築要素の参照として選択します。",
"prefs.sketch.select_other_hidden": "他を選択で非表示のジオメトリも対象に",
"prefs.sketch.shortcut_cycles_modes": "ショートカットの再入力でモード切替",
"prefs.sketch.shortcut_cycles_modes_tip": "オフの場合はツールを再起動します。",
"prefs.sketch.snap_to_visible_grid": "グリッドの交点にスナップ",
"prefs.sketch.snapping_guides": "スナップとガイド",
"prefs.sketch.state_icons": "状態アイコン",
"prefs.sketch.tracking_guides": "中心と中点のガイド",
@@ -2923,6 +3034,7 @@
"prefs.sketch_selection": "スケッチと選択",
"prefs.sketch_selection_heading": "スケッチと選択",
"prefs.sketch_selection_note": "スケッチのスナップとクリックによる選択。",
"prefs.sketch_snap_to_visible_grid_note": "スケッチ内の点は、グリッドが描画する線の交点にポインターが指しているときはその交点にスナップし、それ以外ではその間のより細かい格子の交点にスナップします。オフ: 前也是一样で、点はより細かい格子の交点にだけスナップします。",
"prefs.sketch_state_icons": "スケッチアイコンを状態の色で表示",
"prefs.sketch_state_icons_note": "履歴とブラウザーで、スケッチのアイコンがその状態(拘束不足、完全拘束、競合)の色になり、ツールチップに状態が表示されます。オフ: すべてのスケッチが同じアイコンになります。",
"prefs.sketch_tab_always": "スケッチ タブを常に表示",
@@ -3624,6 +3736,7 @@
"render.error_pbr_opacity": "不透明PBRには不透明度1が必要です",
"render.error_physical_glass": "選択したレシピは物理ガラスではありません",
"render.error_preview_device": "製品プレビューには深度バッファーを備えたデバイスが必要です",
"render.error_product_placement": "製品の配置が無効です",
"render.error_product_triangle": "製品の三角形が無効です",
"render.error_provisional_identity": "仮レンダリングの識別情報またはサンプル数が無効です",
"render.error_quality_bounds": "品質設定の反映がネイティブ上限を超えています",
@@ -3707,6 +3820,10 @@
"render.gpu_path_retry": "もう一度試す",
"render.gpu_seed": "乱数シード",
"render.gpu_unavailable": "このデバイスでは GPU パストレーシングの準備ができていません。",
"render.graphics_api_restart_vulkan": "Vulkanで再起動",
"render.graphics_api_restart_warning": "グラフィックスAPIを変更するとSolidCraftが再起動し、未保存のデザインの保存を確認します。新しいAPIでウィンドウを開けない場合は、次回起動時に以前の選択に戻ります。",
"render.graphics_api_settings": "グラフィックス設定",
"render.graphics_api_vulkan_required": "このセッションでGPUパストレーシングを使用するにはVulkanが必要です。Vulkanで再起動するか、CPUの画像方式を引き続き使用してください。",
"render.ground_apply": "床をフィットして保存",
"render.ground_gap": "明示的なクリアランス",
"render.ground_linear_rgb": "拡散反射率・線形RGB",
@@ -4708,6 +4825,8 @@
"sketch.hint.spline3d": "3D Spline: click fit points in 3D; right-click or Esc to finish",
"sketch.hint.trim": "Trim: click the piece of a curve to remove, or drag across the pieces to remove",
"sketch.make_selection": "選択を{linetype}にする",
"sketch.move_released": "移動しました: 残る要素とつないでいた拘束 {count} 個を解除しました ({names})。",
"sketch.move_released_one": "移動しました: 残る要素とつないでいた拘束 {count} 個を解除しました ({names})。",
"sketch.open_ends": "開放 {count}",
"sketch.status_conflict": "拘束が競合しています",
"sketch.status_fully_constrained": "完全拘束",
@@ -4738,6 +4857,10 @@
"sketch_text.path_clear": "文字を曲線から外す",
"sketch_text.path_hint": "文字が沿うスケッチの曲線: ここをクリックしてから曲線をクリック",
"sketch_text.use_font_file": "フォント ファイル {path} を使用",
"sketch_text.valign_baseline": "ベースライン",
"sketch_text.valign_bottom": "下",
"sketch_text.valign_middle": "中央",
"sketch_text.valign_top": "上",
"solid": "中実",
"status.editing": "編集中: {name}",
"status.navigation": "マウスの割り当て: {mapping}",
@@ -4938,6 +5061,7 @@
"ui.agent_chat_allow_once": "今回のみ許可",
"ui.agent_chat_allowed": "許可しました",
"ui.agent_chat_answered": "回答: {option}",
"ui.agent_chat_answered_in": "{time}で回答",
"ui.agent_chat_approval": "エージェントにこの操作を許可しますか?",
"ui.agent_chat_attach_selection": "選択を添付",
"ui.agent_chat_attach_selection_tip": "モデルで選択中のもの(面、エッジ、フィーチャ、ボディ)をメッセージと一緒に送り、何を指しているかをエージェントに伝えます",
@@ -4966,6 +5090,7 @@
"ui.agent_chat_ctx_bodies": "ボディ",
"ui.agent_chat_ctx_elements": "要素",
"ui.agent_chat_ctx_features": "フィーチャ",
"ui.agent_chat_ctx_gone": "デザインにはもうありません(変更または削除されました)。",
"ui.agent_chat_ctx_more": "ほか{n}件",
"ui.agent_chat_ctx_other": "その他",
"ui.agent_chat_custom_heading": "カスタムモデル",
@@ -4979,6 +5104,7 @@
"ui.agent_chat_dock_right": "右にドッキング",
"ui.agent_chat_drop_hint": "ドロップして次のメッセージに添付",
"ui.agent_chat_edit": "編集",
"ui.agent_chat_ended_after": "{time}後に終了",
"ui.agent_chat_exited": "エージェントが停止しました。",
"ui.agent_chat_failed_start": "エージェントを起動できませんでした: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: CAD ファイルは読み込まず、デザインにインポートします",
@@ -5016,6 +5142,7 @@
"ui.agent_chat_model_no_tools": "{model} は SolidCraft のツールを使えず、チャットのみ可能です。ツール対応のモデルを選んでください。",
"ui.agent_chat_model_rejected": "エージェントは {model} を受け付けませんでした: {error}",
"ui.agent_chat_model_search": "モデルを検索…",
"ui.agent_chat_model_search_or_id": "検索、または任意のモデル ID を入力…",
"ui.agent_chat_model_tip": "エージェントが使うモデル。選択はこのエージェントに対して記憶されます。",
"ui.agent_chat_models_failed": "モデルを一覧表示できませんでした: {error}",
"ui.agent_chat_models_heading": "利用可能なモデル",
@@ -5027,6 +5154,7 @@
"ui.agent_chat_next_picture": "次の画像",
"ui.agent_chat_no_cli": "アプリの隣に solidcraft-cli が見つからないため、エージェントはデザインにアクセスできません。",
"ui.agent_chat_no_control": "エージェントチャットのエンドポイントが起動しなかったため、エージェントはデザインにアクセスできません。",
"ui.agent_chat_no_design_hint": "エージェントは SolidCraft のツールなしで動作しているため、デザインを読み取ることも変更することもできません。アプリの隣に solidcraft-cli が見つかりませんでした。solidcraft-cli が同梱された SolidCraft をインストールするか(Windows では MSI またはポータブル zip)、SOLIDCRAFT_CLI にそのパスを設定してから、もう一度接続してください。",
"ui.agent_chat_no_images": "このエージェントは画像を受け付けません",
"ui.agent_chat_no_picture": "クリップボードに画像がありません",
"ui.agent_chat_no_tool_call": "モデルが SolidCraft のツールを使わなかったため、デザインは変更されませんでした。ツール呼び出しに対応したモデルを選んでください。エージェントチャットのガイドの「ローカルモデル」を参照してください。",
@@ -5073,16 +5201,26 @@
"ui.agent_chat_setup_title": "アシスタントを設定",
"ui.agent_chat_side": "チャットをドッキング",
"ui.agent_chat_signed_in": "サインイン済み",
"ui.agent_chat_snap_none_found": "コーディングエージェントが見つかりません。Snap パッケージは制限された環境で動作するため、このコンピューターにインストールされたコーディングエージェントを認識することも起動することもできません。それらを使うには、代わりに AppImage、.deb または .rpm パッケージから SolidCraft をインストールしてください。OpenAI 互換 API を使うエージェントは Snap パッケージでも動作します。「エージェントを追加」から設定してください。",
"ui.agent_chat_span_h": "{h} 時間 {min} 分",
"ui.agent_chat_span_min": "{n} 分",
"ui.agent_chat_span_s": "{n} 秒",
"ui.agent_chat_state_auth": "サインインが必要",
"ui.agent_chat_state_busy": "作業中…",
"ui.agent_chat_state_exited": "エージェント停止",
"ui.agent_chat_state_failed": "接続に失敗しました",
"ui.agent_chat_state_no_design": "デザインにアクセスできません",
"ui.agent_chat_state_off": "未接続",
"ui.agent_chat_state_ready": "準備完了",
"ui.agent_chat_state_starting": "起動中…",
"ui.agent_chat_stop": "停止",
"ui.agent_chat_stop_tip": "エージェントと、それが起動したものをすべて停止します",
"ui.agent_chat_stop_turn_tip": "エージェントを停止します(Esc)。待機中のメッセージは待機のままです。",
"ui.agent_chat_thinking_for": "{time}考え中",
"ui.agent_chat_tool_running_for": "実行中 ({time})",
"ui.agent_chat_tools_not_started": "エージェントは SolidCraft のツールなしで動作しているため、デザインを読み取ることも変更することもできません。solidcraft-cli は見つかりましたが、そのツールが起動しませんでした(理由はチャットのエラーに表示されています)。もう一度接続してください。繰り返し起きる場合は SolidCraft を再インストールしてください。",
"ui.agent_chat_transcript_assistant": "アシスタント:",
"ui.agent_chat_transcript_user": "ユーザー:",
"ui.agent_chat_turn_limit": "1メッセージあたりの変更数",
"ui.agent_chat_turn_unlimited": "無制限",
"ui.agent_chat_undo_changes": "これらの変更を元に戻す",
@@ -5239,7 +5377,9 @@
"ui.browser_bodies_one": "{count} ボディ",
"ui.browser_bodies_other": "{count} ボディ",
"ui.browser_collapse": "ブラウザを折りたたむ",
"ui.browser_collapse_below": "この下を折りたたむ",
"ui.browser_expand": "ブラウザを展開",
"ui.browser_expand_below": "この下を展開",
"ui.browser_title": "ブラウザ",
"ui.calibrate": "校正",
"ui.cancel": "キャンセル",
@@ -5269,6 +5409,7 @@
"ui.collapse": "折りたたむ",
"ui.collinear": "同一直線上",
"ui.colour_vision": "色覚",
"ui.colour_vision_bends": "曲げ",
"ui.colour_vision_deutan": "2型色覚(D型)",
"ui.colour_vision_deutan_tip": "緑を感じにくい、または感じない場合に",
"ui.colour_vision_failed": "エラー",
@@ -5298,14 +5439,24 @@
"ui.conic_curve": "円錐曲線",
"ui.constant": "一定",
"ui.constraints_conflict": "拘束が競合しています",
"ui.construct_auto.chosen": "選択から方法を選びました。参照を追加または削除すると方法が変わります。",
"ui.construct_auto.no_fit": "別の参照を選択してください。これらから作れる方法がありません。",
"ui.construct_auto.pick": "作成元を選択してください。方法は選択から決まります。",
"ui.construct_auto.refs": "参照",
"ui.construct_auto.select": "先に作成元の参照を選択してください",
"ui.construct_axes": "軸",
"ui.construct_planes": "平面",
"ui.construct_points": "点",
"ui.construction": "コンストラクション",
"ui.construction.angle_hint": "補助直線: 点をクリックし、角度を入力するか方向を選択",
"ui.construction.axis_hint": "補助直線: 点をクリックするか、スケッチ軸からの距離を入力",
"ui.construction.bisector_hint": "二等分線: 交差する2直線を選び、必要な解を選択",
"ui.construction.common_hint": "共通接線: 2つの円/円弧を選び、必要な解を選択",
"ui.construction.contact_hint": "接線: 円/円弧または開いたスプライン/円錐曲線を選び、接点を選択 (自由曲線は端点のみ)",
"ui.construction.external_hint": "接線: 円または円弧、外部点、必要な解の順に選択",
"ui.construction.free_hint": "補助直線: 2点をクリック。右クリックで最初から",
"ui.construction.normal_needs_length": "無限直線は常に補助線です。通常の線を描くには長さを入力",
"ui.construction.parallel_hint": "補助直線: 直線を選択し、クリックするかオフセットを入力。右クリックで参照を変更",
"ui.construction.point_hint": "補助直線: 通過点をクリック",
"ui.construction.reference_hint": "補助直線: 直線、点の順に選択。右クリックで参照を変更",
"ui.construction.ribbon_label": "補助線",
@@ -5448,6 +5599,17 @@
"ui.ellipse": "楕円",
"ui.emboss_wrap_note": "サポートされる円柱に接する直交線のプロファイルは自動的に巻き付けられます。対象を選ぶには壁を選択してください。",
"ui.end": "終端",
"ui.end_cap.chamfer": "角の面取り",
"ui.end_cap.direction": "方向",
"ui.end_cap.faces": "端面",
"ui.end_cap.inset": "内側オフセット",
"ui.end_cap.inset_kind": "オフセットの指定",
"ui.end_cap.inset_ratio": "オフセット比",
"ui.end_cap.inward": "内向き",
"ui.end_cap.length": "長さ",
"ui.end_cap.outward": "外向き",
"ui.end_cap.ratio": "厚さに対する比",
"ui.end_cap_title": "エンドキャップ",
"ui.end_radius": "終了半径",
"ui.end_scale": "終端スケール",
"ui.ends": "端部",
@@ -5468,7 +5630,10 @@
"ui.explode_needs_two_components": "分解図はコンポーネント同士を引き離すため、デザインに 2 つ以上のコンポーネントが必要です(新規コンポーネント、デザインを挿入、またはボディからコンポーネントを作成)",
"ui.exportDxf": "DXF をエクスポート…",
"ui.export_ellipsis_keymap": "エクスポート…",
"ui.export_glb": "GLB をエクスポート",
"ui.export_keymap_tip": "ショートカット、Sボックスのお気に入り、ツールバー設定をファイルに保存",
"ui.export_selects_only_body": "メッシュのエクスポート時に唯一のボディを選択する",
"ui.export_selects_only_body_tip": "デザインのボディが 1 つだけのとき、STL をエクスポート、3MF をエクスポート、スライサーに送るはそのボディを選択した状態で始まります。",
"ui.extend": "延長",
"ui.extent": "範囲",
"ui.extent_type": "範囲タイプ",
@@ -5528,6 +5693,8 @@
"ui.finest": "最も細かい",
"ui.finish_sketch": "スケッチを終了",
"ui.first_dimension_scales": "最初の寸法で図形全体をスケールする",
"ui.first_dimension_scales_about_origin": "スケッチ原点を中心にスケールする",
"ui.first_dimension_scales_about_origin_tip": "オン: 図形は常にスケッチ原点を中心に拡大・縮小されるため、原点から離れて描いた図形は移動します。オフ: 原点に拘束されていない図形は自身の中心を基準にスケールし、描いた位置に留まります。",
"ui.first_dimension_scales_tip": "オン: スケッチの最初の長さ寸法で、測定する図形全体をスケールし、形を保ちます。オフ: 寸法は測定する対象のサイズだけを変えます。",
"ui.fit": "フィット",
"ui.fix_unfix": "固定/固定解除",
@@ -5903,7 +6070,7 @@
"ui.pitch": "ピッチ",
"ui.placement": "配置",
"ui.placement_handles": "配置ハンドル",
"ui.placement_handles_tip": "モデル上でフィーチャーをドラッグするマーカーと、回転させるリング。",
"ui.placement_handles_tip": "モデル上でフィーチャーをドラッグするマーカーと、フィーチャーを回転できる場合は回転させるリング。",
"ui.plane": "平面",
"ui.plane_at_angle": "傾斜平面",
"ui.plugins": "プラグイン",
@@ -5950,6 +6117,7 @@
"ui.project_references_construction_note": "投影、交差、3D ジオメトリを含める、および面上の新規スケッチの面のエッジは、コンストラクションジオメトリになります。描画の参照用で、プロファイルには含まれません。モデルとのリンクは保たれます。",
"ui.properties": "プロパティ",
"ui.properties.copy_matrix": "行列をコピー",
"ui.properties.copy_value": "クリックでコピー",
"ui.properties.first_moments": "一次モーメント",
"ui.properties.inertia": "慣性モーメント",
"ui.properties.inertia_note": "重心まわり、ワールド軸 (g·{unit}²)",
@@ -5962,6 +6130,7 @@
"ui.properties.measuring_failed": "測定が完了する前に停止しました。",
"ui.properties.principal_axis": "主軸 {number}",
"ui.properties.principal_moments": "主慣性モーメント",
"ui.properties.value_copied": "値をコピーしました",
"ui.pull_direction": "抜き方向",
"ui.quality": "品質",
"ui.quantity": "数量",
@@ -5982,11 +6151,14 @@
"ui.relink_design_changed": "参照元の選択中にアセンブリが変更されました。再リンクをやり直してください。",
"ui.relink_done": "すべてのインスタンスの参照元を再リンクしました。",
"ui.relink_not_linked": "このコンポーネントは参照元の設計にリンクされていません。",
"ui.relink_one_done": "このインスタンスの参照元を再リンクしました。",
"ui.relink_select_one": "リンクされたコンポーネントまたはそのインスタンスを1つ選択してください。",
"ui.relink_source_all": "参照元を再リンク(すべてのインスタンス)…",
"ui.relink_source_one": "参照元を再リンク…",
"ui.removeFromQuickAccess": "クイックアクセスから削除",
"ui.removeFromToolbar": "ツールバーから削除",
"ui.removeSection": "セクションを解除",
"ui.renameSelectedBodies": "選択したボディの名前を変更",
"ui.render": "レンダリング",
"ui.renderer": "レンダラー",
"ui.repeat": "繰り返し",
@@ -6017,6 +6189,8 @@
"ui.ribbon_pin_footer": "ピン留めしたコマンドはリボンに表示されます。行にポインターを合わせて、ピン留めや解除ができます。",
"ui.ribbon_workspace": "ワークスペース",
"ui.right": "右側面",
"ui.right_click_confirms": "右クリックでダイアログの入力を確定",
"ui.right_click_confirms_tip": "ダイアログが開いているとき、ビューで右クリックすると次の空の入力へ進み、最後の入力では OK を実行します",
"ui.save": "保存",
"ui.save_as": "名前を付けて保存",
"ui.save_mesh_no_slicer_open": "スライサーが見つかりません。「カスタム…」でスライサーのプログラムを選んでください",
@@ -6076,6 +6250,16 @@
"ui.sketch_intersect_selection_filter": "選択フィルター",
"ui.sketch_keys_only": "スケッチ中はモデルのキーを使わない",
"ui.sketch_keys_only_tip": "スケッチの編集中は、スケッチのキーとどこでも使えるキーだけが働きます。E や F などのモデルのキーは何もしないので、うっかり押したキーで重いスケッチが閉じることはありません。",
"ui.sketch_links_added_curve": "{command} でスケッチに曲線を 1 本追加しました。",
"ui.sketch_links_added_curves": "{command} でスケッチに曲線を {count} 本追加しました。",
"ui.sketch_links_added_curves_and_points": "{command} でスケッチに{curves}と{points}を追加しました。",
"ui.sketch_links_added_point": "{command} でスケッチに点を 1 個追加しました。",
"ui.sketch_links_added_points": "{command} でスケッチに点を {count} 個追加しました。",
"ui.sketch_links_curve_count": "曲線 {count} 本",
"ui.sketch_links_curve_count_one": "曲線 1 本",
"ui.sketch_links_hidden": "スケッチオプションの {option} がオフのため、結果は表示されていません。",
"ui.sketch_links_point_count": "点 {count} 個",
"ui.sketch_links_point_count_one": "点 1 個",
"ui.sketch_modifiers": "スケッチ修飾キー",
"ui.sketch_project_geometry": "ジオメトリ",
"ui.sketch_report.all_constrained": "すべて完全に拘束されています。",
@@ -6115,6 +6299,7 @@
"ui.step_values": "矢印キーとホイールで値を変更",
"ui.step_values_tip": "値入力欄の上で上下矢印キーやホイールを使うと数値が変わります。",
"ui.stitch_tolerance_hint": "厳密",
"ui.straighten": "傾き補正",
"ui.stretch": "伸縮",
"ui.supersampling": "スーパーサンプリング (SSAA)",
"ui.supersampling_adaptive": "ビューが静止しているときのみ",
@@ -6188,6 +6373,8 @@
"ui.view_angles_yaw": "ヨー",
"ui.view_angles_zero": "{axis}を0°に設定",
"ui.view_centre": "ビュー中心",
"ui.view_compass_tip": "{axis}方向から表示します。もう一度クリックすると反転します。ドラッグでオービットします。",
"ui.view_compass_tip_snap": "{axis}方向から表示します。もう一度クリックすると反転します。ドラッグでオービットし、Shiftを押すとスナップします。",
"ui.viewport_status_clear": "{name}をオフにする",
"ui.viewport_status_clear_hint": "{name}をオフにする · Esc",
"ui.viewport_status_edges": "{count} エッジ",
+6 -1
View File
@@ -699,6 +699,7 @@
"Value": "მნიშვნელობა",
"Variable Radius": "ცვლადი რადიუსი",
"Velocity": "სიჩქარე",
"Vertical": "ვერტიკალური",
"Vertices": "წვეროები",
"View navigator": "ხედის ნავიგატორი",
"Volume": "მოცულობა",
@@ -4028,6 +4029,10 @@
"sketch_text.path_clear": "ტექსტის მოხსნა მრუდიდან",
"sketch_text.path_hint": "ესკიზის მრუდი, რომელსაც ტექსტი მიჰყვება: დაწკაპეთ აქ, შემდეგ მრუდზე",
"sketch_text.use_font_file": "შრიფტის ფაილის {path} გამოყენება",
"sketch_text.valign_baseline": "საბაზისო ხაზი",
"sketch_text.valign_bottom": "ქვემოთ",
"sketch_text.valign_middle": "შუა",
"sketch_text.valign_top": "ზემოთ",
"solid": "სხეული",
"status.editing": "რედაქტირდება {name}",
"status.navigation": "მაუსის მინიჭება: {mapping}",
@@ -5068,7 +5073,7 @@
"ui.pitch": "ბიჯი",
"ui.placement": "განთავსება",
"ui.placement_handles": "განთავსების სახელურები",
"ui.placement_handles_tip": "სახელურები საყრდენის, ბოსის ან ჩამკეტის გადახედვაზე: მარკერი გადაათრიეთ მოდელზე მის გადასაადგილებლად, ხოლო რგოლით შეაბრუნეთ",
"ui.placement_handles_tip": "მარკერი ოპერაციის მოდელზე გადასატანად და, სადაც ოპერაციის მობრუნება შეიძლება, რგოლი მის მოსაბრუნებლად.",
"ui.plane": "სიბრტყე",
"ui.plane_at_angle": "სიბრტყე კუთხით",
"ui.plugins": "პლაგინები",
+131 -2
View File
@@ -188,6 +188,7 @@
"Double-click to rename": "두 번 클릭하여 이름 변경",
"Double-clicking the middle button in the view: Home (the home view, framing what is shown), Fit (frame what is shown, keeping the orientation) or nothing": "뷰에서 가운데 버튼을 더블 클릭: 홈(홈 뷰, 표시된 항목에 맞춤), 맞춤(방향을 유지하며 표시된 항목에 맞춤) 또는 없음",
"Drag to move the hole; click to remove it": "드래그하면 구멍이 이동하고, 클릭하면 제거됩니다",
"Drag to place it on another face.": "드래그하여 다른 면에 배치합니다.",
"Drive Joint": "조인트 구동",
"Duration": "지속 시간",
"Each new shape is also dimensioned from the sketch origin until nothing of it is left free. A shape already attached to the origin or to placed geometry gets none.": "새 도형마다 자유로운 부분이 없어질 때까지 스케치 원점 기준 치수도 지정됩니다. 원점이나 배치된 형상에 이미 연결된 도형은 지정되지 않습니다.",
@@ -676,6 +677,7 @@
"Value": "값",
"Variable Radius": "가변 반지름",
"Velocity": "속도",
"Vertical": "수직",
"Vertices": "꼭짓점",
"View navigator": "뷰 탐색기",
"Volume": "체적",
@@ -726,6 +728,13 @@
"ai.prefs.connect_apps": "AI 앱에 SolidCraft 추가",
"ai.prefs.connect_apps_note": "끄면 추가한 항목이 다시 제거됩니다.\n\nSolidCraft 시작 시 이 컴퓨터에서 찾은 AI 앱(OpenCode, Claude Desktop, Claude Code, Cursor, Codex, Gemini CLI, Copilot CLI, Windsurf, Zed, VS Code)에 MCP 서버로 추가합니다. solidcraft 항목만 추가하거나 경로를 갱신하며, 사용자가 변경한 항목은 그대로 두고 파일을 먼저 백업합니다. 끄면 추가했던 항목을 제거합니다. 도움말 > AI 어시스턴트 연결…에서 수동으로 실행할 수도 있습니다.",
"ai.prefs.connect_at_start": "시작할 때 마지막 에이전트 연결",
"ai.prefs.control_failed": "제어 채널을 시작할 수 없습니다: {error}",
"ai.prefs.control_from_launch": "이번 실행은 --control로 포트 {port}에서 시작되었습니다. 여기서 바꾼 내용은 다음에 --control 없이 SolidCraft를 시작할 때 적용됩니다.",
"ai.prefs.control_listening": "127.0.0.1:{port}에서 대기 중",
"ai.prefs.control_not_listening": "대기하지 않음",
"ai.prefs.control_port": "포트",
"ai.prefs.control_port_note": "이 컴퓨터에서 AI 에이전트가 연결하는 포트(127.0.0.1)입니다. 기본값은 27878이며, 사용 중이면 다음 빈 포트를 사용합니다. 다른 포트는 그대로 사용합니다. MCP 클라이언트도 같은 포트를 가리키게 하세요(예: solidcraft-cli mcp --connect 127.0.0.1:7878).",
"ai.prefs.control_port_taken": "포트 {port}을(를) 다른 프로그램(또는 다른 SolidCraft 창)이 사용 중입니다. 다른 포트를 선택하세요.",
"ai.prefs.follow_camera": "카메라 따라가기",
"ai.prefs.follow_camera_off": "카메라 자동 따라가기가 꺼져 있습니다.",
"ai.prefs.follow_camera_on": "에이전트가 만드는 스케치를 향해 카메라가 회전합니다.",
@@ -774,6 +783,13 @@
"browser.sketch_attachment_lost": "{name} (부착 해제됨)",
"browser.sketch_editing": "{name} (편집 중)",
"browser.sketch_name": "스케치{number}",
"browser.straighten_angle": "모서리 방향",
"browser.straighten_choose": "모서리 방향(수평, 수직 또는 각도)을 고른 다음 수평 맞추기를 누르세요.",
"browser.straighten_click_a": "곧아야 하는 모서리의 한쪽 끝을 이미지에서 클릭하거나 좌표를 입력하세요.",
"browser.straighten_click_b": "모서리의 다른 쪽 끝을 클릭하거나 좌표를 입력하세요.",
"browser.straighten_horizontal": "수평",
"browser.straighten_title": "수평 맞추기: {name}",
"browser.straighten_vertical": "수직",
"browser.units": "단위: {units}",
"cam.flat": "평면",
"cam.follower": "종동절",
@@ -801,6 +817,8 @@
"cmd.appearance_pick_up": "모양 가져오기",
"cmd.appearance_replace": "모양 바꾸기",
"cmd.assembly_bom": "자재 명세서",
"cmd.assembly_constraint_create": "구속",
"cmd.assembly_constraint_edit": "구속 편집",
"cmd.assembly_mass_properties": "질량 특성",
"cmd.body.print_face": "출력 바닥면",
"cmd.body_rename": "바디 이름 변경",
@@ -819,6 +837,7 @@
"cmd.canvas_delete": "캔버스 삭제",
"cmd.canvas_edit": "캔버스 편집",
"cmd.canvas_insert": "캔버스",
"cmd.canvas_straighten": "캔버스 수평 맞추기",
"cmd.canvas_to_sketch": "캔버스에서 스케치",
"cmd.component_activate": "구성 요소 활성화",
"cmd.component_break_link": "링크 끊기",
@@ -929,6 +948,7 @@
"cmd.inspect_isocurve": "등가곡선 분석",
"cmd.inspect_minimum_radius": "최소 반경 분석",
"cmd.inspect_parameter_sweep": "매개변수 스윕",
"cmd.inspect_parameter_variants": "매개변수 조합 비교",
"cmd.inspect_silhouette": "실루엣",
"cmd.inspect_zebra": "얼룩말줄무늬 분석",
"cmd.joint_as_built": "조립 상태 관절",
@@ -1253,6 +1273,7 @@
"cmd.timeline_suppress": "특성 비활성화",
"cmd.ui.assistant": "도우미 표시 전환",
"cmd.ui.palette": "명령 검색",
"cmd.ui.toggle_visibility": "선택 항목 표시/숨기기",
"cmd.view.navigator": "사용자 지정 뷰 탐색기",
"cmd.view.render_browser": "렌더 브라우저",
"cmd.view.render_dock": "렌더 도크 이동",
@@ -1293,6 +1314,7 @@
"color.red": "빨강",
"color.saturation_value": "채도 및 명도",
"color.selected": "선택한 색상",
"component.error.ambiguous_name": "이름이 `{name}`인 구성요소가 여러 개입니다. 숫자 구성요소 ID를 사용하세요: {ids}.",
"config.column_filter_empty": "일치하는 열이 없습니다",
"contact.components_count": "구성요소 {count}개",
"contact.enabled_label": "활성화됨",
@@ -1346,6 +1368,7 @@
"dialog.pattern_sketch_not_object": "바디나 피처를 선택하세요. 스케치는 둘 다 아닙니다. 곡선은 스케치 안의 패턴이나 대칭 복사로 반복하거나, 먼저 돌출하세요.",
"dialog.primitive_point_tip": "X, Y, Z를 채우는 점: 여기를 클릭한 다음 모델의 꼭짓점, 모서리, 면, 스케치의 점 또는 원점을 클릭.",
"dialog.reference_edge_tip": "아래 거리를 재는 기준이 되는, 선택한 면의 직선 모서리: 여기를 클릭한 다음 모서리를 클릭.",
"dialog.right_click_pick": "먼저 {input} 선택",
"dialog.select": "↖ 선택",
"dialog.selected_count": "↖ {count}개 선택됨",
"dialog.selection_constraint": "구속 조건 {id}",
@@ -1358,6 +1381,9 @@
"document.changed_on_disk": "{name}이(가) 디스크에서 변경되었습니다",
"document.changed_on_disk_detail": "{name}을(를) 열거나 마지막으로 저장한 뒤 다른 프로그램이나 컴퓨터가 이 파일을 변경했습니다. 덮어쓰기는 그 변경 내용을 사용자의 변경 내용으로 대체하고, 복사본 저장은 둘 다 유지합니다.",
"document.copy_name": "{name} 복사본",
"document.discard_row": "버리기",
"document.finish_save_prompt": "다른 디자인을 열기 전에 저장 여부를 선택하세요.",
"document.not_saved_yet": "아직 저장하지 않음",
"document.open_anyway": "그래도 열기",
"document.open_elsewhere": "{name}이(가) 이미 열려 있습니다",
"document.open_elsewhere_detail": "{name}이(가) {who}의 SolidCraft {app}에서 열려 있습니다(열린 시점: {when}). 둘 다 저장하면 한쪽의 작업이 사라집니다. 덮어쓰지 않고 내용만 보려면 읽기 전용으로 여세요.",
@@ -1367,6 +1393,9 @@
"document.read_only_save": "이 디자인은 읽기 전용으로 열렸습니다: 새 파일로 저장하세요",
"document.save_changes": "{name}의 변경 사항을 저장하시겠습니까?",
"document.save_copy": "복사본 저장…",
"document.save_many": "디자인 {n}개의 변경 사항을 저장하시겠습니까?",
"document.save_row": "저장",
"document.save_selected": "선택 항목 저장",
"document.unsaved_changes": "{name}에 저장되지 않은 변경 사항이 있습니다. 저장하지 않으면 변경 사항이 사라집니다.",
"drive.stopped_by_contact": "{value}에서 멈춤: {a}이(가) {b}을(를) 통과하게 됩니다",
"drive.stopped_by_loop": "{value}에서 멈춤: {joint}을(를) 지나는 루프를 더 이상 닫을 수 없습니다",
@@ -1395,6 +1424,7 @@
"file_load.inserting": "기하 삽입 중",
"file_load.link_item": "{name} ({done}/{total})",
"file_load.opened": "{name}을(를) 열었습니다",
"file_load.opened_behind": "{name}을(를) 새 탭에서 열었습니다",
"file_load.opened_in_tab": "{name}을(를) 새 탭에서 열었습니다",
"file_load.opening": "디자인 여는 중",
"file_load.preparing_thumbnail": "미리보기 이미지 준비 중...",
@@ -1645,6 +1675,9 @@
"measure.at": "위치",
"measure.item": "항목 {number}",
"measure.line_to_centre": "선에서 중심까지",
"measure.perimeter": "둘레",
"measure.perimeter_inner": "내부 둘레",
"measure.perimeter_outer": "외부 둘레",
"messages.ago_h": "{n}시간 전",
"messages.ago_min": "{n}분 전",
"messages.ago_s": "{n}초 전",
@@ -1682,6 +1715,8 @@
"nav.hfss.help": "Alt+왼쪽 드래그는 이동, Shift+Alt+왼쪽 드래그는 확대/축소, 빈 공간에서 Ctrl+왼쪽 드래그는 회전입니다",
"nav.inventor.help": "가운데 드래그는 이동, Shift+가운데 드래그는 회전, Ctrl+가운데 드래그는 확대/축소, 오른쪽 드래그는 회전입니다",
"nav.maya.help": "Alt+왼쪽 드래그는 회전, Alt+가운데 드래그는 이동, Alt+오른쪽 드래그는 확대/축소입니다. 가운데 드래그로도 이동합니다",
"nav.maya_horizontal_zoom.help": "Alt+오른쪽 버튼 드래그: 오른쪽으로 움직이면 확대하고 왼쪽으로 움직이면 축소합니다. 끄면 세로 드래그 확대/축소로 돌아갑니다.",
"nav.maya_horizontal_zoom.label": "Maya: 가로 드래그로 확대/축소",
"nav.openscad.help": "빈 공간에서 왼쪽 드래그는 회전, Shift+왼쪽 드래그는 상자 선택, 스케치 형상 드래그는 편집입니다. 오른쪽 또는 가운데 드래그는 이동, Shift+오른쪽 또는 Shift+가운데 드래그는 확대/축소입니다",
"nav.perspective.sketch": "스케치 편집 중에는 직교 뷰를 사용합니다. 원근 뷰를 전환하려면 스케치를 마치세요.",
"nav.right_drag_orbits.help": "끄면 오른쪽 드래그는 카메라에 영향을 주지 않고 오른쪽 버튼은 컨텍스트 메뉴만 엽니다. SolidWorks 마우스 매핑을 선택하면 꺼집니다.",
@@ -1802,6 +1837,16 @@
"not a move": "이동이 아닙니다",
"not a number": "숫자가 아닙니다",
"open a sketch first": "먼저 스케치를 여세요",
"operations.cancel": "{name} 취소",
"operations.cancelled": "{name} 취소됨",
"operations.cancelling": "취소하는 중…",
"operations.cannot_cancel": "{name}은(는) 취소할 수 없습니다",
"operations.feature": "피처",
"operations.feature_edit": "피처 편집",
"operations.meshing": "파트 불러오는 중",
"operations.queued": "대기 중",
"operations.stopped": "취소됨",
"operations.waiting": "준비됨",
"parts.automatic_name": "자동",
"parts.dimension.across_flats": "대변 거리",
"parts.dimension.bore": "내경",
@@ -1874,6 +1919,7 @@
"prefs.appearance.viewport_colours": "3D 보기 색상",
"prefs.appearance.viewport_logo": "뷰포트 및 로고",
"prefs.applies_on_restart": "다시 시작하면 적용됩니다",
"prefs.assemblies": "어셈블리",
"prefs.assistant": "어시스턴트",
"prefs.assistant_connecting": "연결",
"prefs.assistant_follow_help": "스케치의 Look At 동작이 포인터와 함께 보기를 이동합니다.",
@@ -1917,6 +1963,10 @@
"prefs.choose_font": "글꼴 파일 선택…",
"prefs.click": "클릭",
"prefs.command_dialog_values": "명령 대화 상자",
"prefs.constraint_glyph_size": "구속 조건 기호 크기",
"prefs.constraint_glyph_size_note": "스케치에서 구속 조건 기호와 그 문자나 아이콘을 그리는 크기입니다. 100%가 기본 크기이며, 기호는 확대/축소와 관계없이 이 화면 크기를 유지합니다.",
"prefs.construct_menu_groups": "요소 유형별로 구성 도구 그룹화",
"prefs.construct_menu_groups_help": "평면, 축, 점 제목을 표시합니다. 끄면 원래 메뉴 순서를 유지합니다.",
"prefs.contact_shading": "부드러운 접촉 음영",
"prefs.contact_shading_note": "부품이 가까워지는 곳의 부드러운 음영.",
"prefs.context_menu": "컨텍스트 메뉴",
@@ -1946,10 +1996,12 @@
"prefs.design_tools.imported_files": "가져온 파일",
"prefs.design_tools.note": "알림",
"prefs.design_tools.off": "끄기",
"prefs.design_tools.placement_group": "레스트, 보스, 스냅 핏",
"prefs.design_tools.placement_group": "배치 피처",
"prefs.design_tools.rows": "행",
"prefs.devices": "3D 마우스",
"prefs.dialog_buttons": "대화 상자 버튼",
"prefs.dialog_first_letter_buttons": "다이얼로그 단추가 첫 글자에 반응",
"prefs.dialog_first_letter_buttons_help": "다이얼로그가 열려 있을 때 단추 레이블의 첫 글자를 입력하면 그 단추를 누릅니다: 예를 들어 「ㅊ」은 「취소」를 누릅니다. 두 단추에 모두 해당하는 글자는 아무 동작을 하지 않으며, 포커스된 텍스트 필드는 입력을 그대로 받습니다. 끔: 기존처럼 입력이 단추에 영향을 주지 않습니다.",
"prefs.dialogs": "대화 상자",
"prefs.dialogs_edge": "뷰 가장자리",
"prefs.dialogs_left_column": "왼쪽 열",
@@ -1963,8 +2015,19 @@
"prefs.dimension_values_window": "창에서",
"prefs.display": "표시",
"prefs.edges": "모서리 및 음영",
"prefs.export": "내보내기",
"prefs.export_name": "내보내기 파일 이름",
"prefs.export_name.body": "내보내는 바디 이름(여러 개면 첫 번째 바디)",
"prefs.export_name.design": "디자인 이름",
"prefs.export_name_hint": "예: {design}-{body}",
"prefs.export_name_sample": "이 디자인을 내보낼 때 제안되는 이름: {name}",
"prefs.export_name_tip": "파일 › 내보내기와 메쉬로 저장이 제안하는 파일 이름입니다. 다음 자리 표시자가 바뀝니다:\n{placeholders}\n설정되지 않은 설계 속성은 빠집니다. 비워 두면 디자인 이름(메쉬의 경우 바디 이름)을 제안합니다.",
"prefs.extend": "확장",
"prefs.extra_navigation": "Ctrl+왼쪽 드래그로 빈 공간에서 회전하고, Space를 누른 채 이동합니다.",
"prefs.file_operations_wait": "파일이 열릴 때까지 기다리기",
"prefs.file_operations_wait_note": "파일을 열거나 삽입하거나 링크를 다시 읽는 동안 디자인이 진행 상황과 취소가 있는 카드 뒤에서 기다립니다. 끄면: 파일이 작업 패널에 표시되고 계속 작업할 수 있습니다. 삽입은 하던 작업을 마친 뒤 반영되고, 그 사이에 연 파일은 새 탭에 열립니다.",
"prefs.fillet_legacy_radius": "이전 필렛 반지름 기본값 사용",
"prefs.fillet_legacy_radius.help": "기본적으로 꺼짐입니다. 켜면: 새 Solid Fillet은 설계 단위로 읽힌 숫자 2(\"2 in\")로 시작하며 이전과 같습니다. 끄면: 그 도구가 기본으로 제공하는 반지름 2 mm를 설계 단위로 표시한 값(\"0.07874 in\")으로 시작합니다.",
"prefs.follows_os": "운영 체제 설정을 따름",
"prefs.font": "글꼴",
"prefs.font_fallback": "선택한 글꼴에 없는 글리프는 기본 제공 글꼴로 대체되므로 빈 상자로 표시되는 레이블이 없습니다.",
@@ -1988,6 +2051,17 @@
"prefs.gesture_pan": "이동",
"prefs.gesture_zoom": "확대/축소",
"prefs.graphics": "그래픽",
"prefs.graphics_api": "그래픽 API",
"prefs.graphics_api_auto": "자동",
"prefs.graphics_api_help": "SolidCraft를 시작할 그래픽 API를 선택합니다. 다음 시작에서 창을 열지 못하면 이전 선택으로 복원됩니다.",
"prefs.graphics_api_override": "시작 시 재정의 설정이 그래픽 API를 제어하고 있습니다. SolidCraft를 일반적인 방법으로 열면 저장된 선택이 적용됩니다.",
"prefs.graphics_api_restart_note": "다시 시작한 후 적용됩니다. 닫기 전에 저장하지 않은 설계를 처리합니다.",
"prefs.graphics_api_restart_unavailable": "저장된 그래픽 API를 적용하려면 SolidCraft를 다시 시작하세요.",
"prefs.graphics_api_running": "현재: {current}. 다음 시작 시 선택: {selected}.",
"prefs.graphics_api_save_failed": "그래픽 API 선택을 저장할 수 없습니다: {error}",
"prefs.graphics_api_start_failed": "선택한 그래픽 API를 준비할 수 없습니다: {error}",
"prefs.graphics_api_start_reverted": "{requested}을(를) 사용한 이전 시작에서 창을 열지 못했습니다. SolidCraft가 {previous}(으)로 복원했습니다.",
"prefs.graphics_api_unavailable": "그래픽 API는 데스크톱 앱에서 선택할 수 있습니다.",
"prefs.graphics_card": "그래픽 카드",
"prefs.graphics_card_auto": "자동",
"prefs.graphics_card_missing": "저장된 그래픽 카드를 사용할 수 없어 자동을 사용합니다.",
@@ -2027,6 +2101,8 @@
"prefs.history_play_button": "기록 컨트롤에 기록 재생 버튼 표시",
"prefs.history_play_button_note": "기록 컨트롤의 한 단계 뒤로와 한 단계 앞으로 사이에 기록 재생을 추가합니다. 컨트롤을 마우스 오른쪽 버튼으로 클릭해 표시하거나 숨길 수도 있습니다.",
"prefs.history_sketches": "히스토리의 스케치",
"prefs.history_steps_component": "구성 요소별 히스토리 이동",
"prefs.history_steps_component_note": "구성 요소가 활성화되었거나 선택되어 있으면 기록 컨트롤이 아래쪽 히스토리에 보이는 대로 그 구성 요소의 피처만 이동합니다. 끄면 디자인의 모든 피처를 이동합니다. 왼쪽 또는 브라우저 아래의 히스토리는 항상 모든 피처를 이동합니다.",
"prefs.hold_stop_snapping": "누르고 있으면 스냅 중지",
"prefs.home_fit_size": "홈·맞춤 크기",
"prefs.home_fit_size_note": "홈, 맞춤, 연 디자인 또는 뷰 탐색기의 뷰 변경으로 모델을 화면에 맞출 때 모델이 뷰에서 차지하는 비율. 아래 설정과 관계없이 적용됩니다. 100 %: 패널, 나침반, 내비게이션 바 사이의 뷰를 가득 채웁니다.",
@@ -2037,6 +2113,8 @@
"prefs.interface_language": "인터페이스 언어",
"prefs.interface_note": "SolidCraft의 모양과 각 부분의 위치입니다.",
"prefs.interval_minutes": "{n}분",
"prefs.joint_drag_trackball": "볼 조인트의 부품을 끌 때 트랙볼처럼 회전",
"prefs.joint_drag_trackball_help": "볼 조인트가 잡고 있는 부품을 끌면 부품 크기의 공을 굴리듯 조인트를 중심으로 가장 작은 회전만큼 돌아갑니다. 끄면: 잡은 점이 포인터를 정확히 따라가고, 부품이 그 점을 축으로 더 돌 수도 있습니다.",
"prefs.labels": "레이블",
"prefs.language_system": "시스템",
"prefs.layout": "레이아웃",
@@ -2096,6 +2174,8 @@
"prefs.not_on_gpu": "이 GPU에서는 사용할 수 없음",
"prefs.on": "켜짐",
"prefs.opaque": "불투명",
"prefs.operations_panel": "뷰에 작업 표시",
"prefs.operations_panel_note": "오래 걸리는 작업(파일 열기, 피처 계산, 에이전트 명령)이 진행 상황과 취소 버튼과 함께 뷰의 오른쪽 아래에 표시됩니다. 끄면: 이전처럼 계산 중 알림이 표시됩니다.",
"prefs.orbit_snap": "회전하는 동안 Shift를 누르면 축에 맞춰집니다.",
"prefs.orientation": "방향",
"prefs.origin_plane_names": "원점 평면 이름",
@@ -2137,6 +2217,8 @@
"prefs.ribbon_click_ends_tool": "실행 중인 도구의 버튼을 클릭하면 도구 종료",
"prefs.ribbon_click_ends_tool_note": "사용 중인 스케치 도구의 강조된 리본 버튼을 클릭하면 도구가 종료되어 뷰에서 클릭하면 다시 선택됩니다. 끄기: 클릭하면 도구가 다시 시작됩니다.",
"prefs.right_click": "오른쪽 클릭",
"prefs.save_prompt_one_at_a_time": "여러 디자인을 닫을 때 저장하지 않은 디자인마다 따로 묻기",
"prefs.save_prompt_one_at_a_time_help": "통합 목록 대신 저장하지 않은 디자인마다 저장 여부를 묻습니다.",
"prefs.saving": "시작 및 저장",
"prefs.scale_note": "창에서 Ctrl + / Ctrl −로도 조절합니다. 버튼은 100%에서 28 px입니다.",
"prefs.scale_text": "배율 및 텍스트",
@@ -2170,6 +2252,8 @@
"prefs.sketch.center_arc": "중심점 호가 커서를 따라감",
"prefs.sketch.click_selects": "클릭으로 선택",
"prefs.sketch.conflict_colour": "충돌 색상",
"prefs.sketch.cursor_coordinates": "스케치에서 커서 좌표 표시",
"prefs.sketch.cursor_coordinates_note": "도구를 실행하지 않을 때도 포인터 옆에 스케치 원점 기준 X와 Y를 표시합니다. 끄기: 도구로 점을 배치하는 동안에만 표시합니다.",
"prefs.sketch.drawing": "그리기",
"prefs.sketch.ellipse_axes": "타원을 축과 함께 그리기",
"prefs.sketch.ellipse_axes_note": "장축과 단축을 구성선으로 그려 반축과 축에 치수를 지정할 수 있습니다. 끄면: 타원만 그리며, D는 값을 어디로 끌든 단반경을 주며, 이전처럼 R로 표시되어 그려집니다.",
@@ -2181,14 +2265,20 @@
"prefs.sketch.faces_edges": "면과 모서리",
"prefs.sketch.hide_glyphs": "축소 시 기호 숨기기",
"prefs.sketch.marks": "스케치의 표시",
"prefs.sketch.max_points": "최대 스케치",
"prefs.sketch.max_points_note": "스케치 하나에 들어가는 점 또는 곡선의 최대 개수입니다. 기본값은 20000, 최대 200000입니다. SVG 삽입과 DXF 삽입은 이보다 큰 도면을 거부합니다. 큰 스케치는 해석과 그리기가 느려집니다.",
"prefs.sketch.max_points_unit": "점",
"prefs.sketch.note": "그리기, 스냅 및 선택.",
"prefs.sketch.opening_closing": "열기 및 닫기",
"prefs.sketch.prefer_free_points": "겹치는 곳에서는 이동 가능한 점 우선",
"prefs.sketch.project_options": "투영 옵션을 먼저 묻기",
"prefs.sketch.recent_snap": "두 안내선의 교차점에 스냅",
"prefs.sketch.select_3d_curve_points": "3D 스케치 곡선의 점 선택",
"prefs.sketch.select_3d_curve_points_help": "그린 3D 스케치 곡선의 점을 표시하고 구성 요소의 참조로 선택합니다.",
"prefs.sketch.select_other_hidden": "다른 항목 선택에 숨겨진 형상 포함",
"prefs.sketch.shortcut_cycles_modes": "단축키를 다시 누르면 모드 전환",
"prefs.sketch.shortcut_cycles_modes_tip": "끄면 도구를 다시 시작합니다.",
"prefs.sketch.snap_to_visible_grid": "격자의 보이는 교차점에 스냅",
"prefs.sketch.snapping_guides": "스냅 및 안내선",
"prefs.sketch.state_icons": "상태 아이콘",
"prefs.sketch.tracking_guides": "중심 및 중점 안내선",
@@ -2209,6 +2299,7 @@
"prefs.sketch_selection": "스케치 및 선택",
"prefs.sketch_selection_heading": "스케치 및 선택",
"prefs.sketch_selection_note": "스케치가 스냅되는 방식과 클릭으로 선택하는 방식입니다.",
"prefs.sketch_snap_to_visible_grid_note": "스케치의 점은 포인터가 가리키는 경우 격자가 그리는 선들의 교차점에 스냅되고, 그렇지 않으면 그 사이의 더 촘촘한 격자에 스냅됩니다. 끄기: 이전과 같이 점은 촘촘한 격자에만 스냅됩니다.",
"prefs.sketch_state_icons": "스케치 아이콘을 상태 색상으로 표시",
"prefs.sketch_state_icons_note": "이력과 브라우저에서 스케치 아이콘이 상태(구속 부족, 완전 구속, 충돌)의 색상을 띠고 도구 설명에 상태가 표시됩니다. 끄기: 모든 스케치가 같은 아이콘을 사용합니다.",
"prefs.sketch_tab_always": "스케치 탭 항상 표시",
@@ -2975,6 +3066,10 @@
"render.gpu_path_preparing": "GPU 패스 트레이서: 셰이더 컴파일 중…",
"render.gpu_seed": "난수 시드",
"render.gpu_unavailable": "이 장치에서는 GPU 패스 트레이싱을 사용할 준비가 되지 않았습니다.",
"render.graphics_api_restart_vulkan": "Vulkan으로 다시 시작",
"render.graphics_api_restart_warning": "그래픽 API를 변경하면 SolidCraft가 다시 시작되고 저장하지 않은 설계를 저장할지 묻습니다. 새 API로 창을 열지 못하면 다음 시작에서 이전 선택으로 복원됩니다.",
"render.graphics_api_settings": "그래픽 설정",
"render.graphics_api_vulkan_required": "이 세션의 GPU 경로 추적에는 Vulkan이 필요합니다. Vulkan으로 다시 시작하거나 CPU 이미지 방식을 계속 사용하세요.",
"render.ground_apply": "지면 맞춤 및 저장",
"render.ground_gap": "명시적 여유 간격",
"render.ground_linear_rgb": "확산 반사율 · 선형 RGB",
@@ -3976,6 +4071,10 @@
"sketch_text.path_clear": "곡선에서 텍스트 떼기",
"sketch_text.path_hint": "텍스트가 따라갈 스케치 곡선: 여기를 클릭한 다음 곡선을 클릭",
"sketch_text.use_font_file": "글꼴 파일 {path} 사용",
"sketch_text.valign_baseline": "기준선",
"sketch_text.valign_bottom": "아래",
"sketch_text.valign_middle": "가운데",
"sketch_text.valign_top": "위",
"solid": "솔리드",
"status.editing": "{name} 편집 중",
"status.under_constrained": "구속 부족 (자유도 {count}개)",
@@ -4164,6 +4263,7 @@
"ui.agent_chat_allow_once": "한 번 허용",
"ui.agent_chat_allowed": "허용함",
"ui.agent_chat_answered": "응답: {option}",
"ui.agent_chat_answered_in": "{time} 만에 답변",
"ui.agent_chat_approval": "에이전트가 이 작업을 하도록 허용할까요?",
"ui.agent_chat_attach_selection": "선택 항목 첨부",
"ui.agent_chat_attach_selection_tip": "모델에서 선택한 항목(면, 모서리, 피처, 바디)을 메시지와 함께 보내 에이전트가 무엇을 말하는지 알 수 있게 합니다",
@@ -4204,6 +4304,7 @@
"ui.agent_chat_dock_right": "오른쪽에 고정",
"ui.agent_chat_drop_hint": "놓으면 다음 메시지에 첨부됩니다",
"ui.agent_chat_edit": "편집",
"ui.agent_chat_ended_after": "{time} 후 종료",
"ui.agent_chat_exited": "에이전트가 중지되었습니다.",
"ui.agent_chat_failed_start": "에이전트를 시작할 수 없습니다: {error}",
"ui.agent_chat_file_cad_not_read": "{name}: CAD 파일은 읽지 않고 디자인으로 가져옵니다",
@@ -4239,6 +4340,7 @@
"ui.agent_chat_model_no_tools": "{model}은(는) SolidCraft 도구를 사용할 수 없어 채팅만 할 수 있습니다. 도구를 지원하는 모델을 고르세요.",
"ui.agent_chat_model_rejected": "에이전트가 {model}을(를) 받아들이지 않았습니다: {error}",
"ui.agent_chat_model_search": "모델 검색…",
"ui.agent_chat_model_search_or_id": "검색하거나 모델 ID를 직접 입력…",
"ui.agent_chat_model_tip": "에이전트가 사용하는 모델입니다. 선택은 이 에이전트에 기억됩니다.",
"ui.agent_chat_models_failed": "모델 목록을 가져올 수 없습니다: {error}",
"ui.agent_chat_models_heading": "사용 가능한 모델",
@@ -4295,6 +4397,10 @@
"ui.agent_chat_setup_title": "어시스턴트 설정",
"ui.agent_chat_side": "채팅 도킹",
"ui.agent_chat_signed_in": "로그인됨",
"ui.agent_chat_snap_none_found": "코딩 에이전트를 찾지 못했습니다. Snap 패키지는 격리된 환경에서 실행되므로 이 컴퓨터에 설치된 코딩 에이전트를 보거나 시작할 수 없습니다. 이 에이전트를 사용하려면 대신 AppImage, .deb 또는 .rpm 패키지로 SolidCraft를 설치하세요. OpenAI 호환 API를 사용하는 에이전트는 Snap 패키지에서도 작동합니다. 에이전트 추가에서 설정하세요.",
"ui.agent_chat_span_h": "{h}시간 {min}분",
"ui.agent_chat_span_min": "{n}분",
"ui.agent_chat_span_s": "{n}초",
"ui.agent_chat_state_auth": "로그인 필요",
"ui.agent_chat_state_busy": "작업 중…",
"ui.agent_chat_state_exited": "에이전트 중지됨",
@@ -4304,6 +4410,10 @@
"ui.agent_chat_stop": "중지",
"ui.agent_chat_stop_tip": "에이전트와 에이전트가 시작한 모든 것을 중지",
"ui.agent_chat_stop_turn_tip": "에이전트 중지 (Esc). 대기 중인 메시지는 그대로 대기합니다.",
"ui.agent_chat_thinking_for": "{time}째 생각 중",
"ui.agent_chat_tool_running_for": "{time}째 실행 중",
"ui.agent_chat_transcript_assistant": "어시스턴트:",
"ui.agent_chat_transcript_user": "사용자:",
"ui.agent_chat_turn_limit": "메시지당 변경 수",
"ui.agent_chat_turn_unlimited": "무제한",
"ui.agent_chat_undo_changes": "이 변경 사항 실행 취소",
@@ -4436,7 +4546,9 @@
"ui.browser_bodies_one": "{count}개 바디",
"ui.browser_bodies_other": "{count}개 바디",
"ui.browser_collapse": "브라우저 접기",
"ui.browser_collapse_below": "하위 항목 접기",
"ui.browser_expand": "브라우저 펼치기",
"ui.browser_expand_below": "하위 항목 펼치기",
"ui.browser_title": "브라우저",
"ui.calibrate": "캘리브레이션",
"ui.cancel": "취소",
@@ -4462,6 +4574,7 @@
"ui.collapse": "접기",
"ui.collinear": "동일 선상",
"ui.colour_vision": "색각",
"ui.colour_vision_bends": "벤딩",
"ui.colour_vision_deutan": "녹색각이상 (Deutan)",
"ui.colour_vision_deutan_tip": "녹색 감각이 약하거나 없는 경우",
"ui.colour_vision_failed": "실패",
@@ -4491,6 +4604,9 @@
"ui.conic_curve": "원뿔 곡선",
"ui.constant": "상수",
"ui.constraints_conflict": "구속 조건 충돌",
"ui.construct_axes": "축",
"ui.construct_planes": "평면",
"ui.construct_points": "점",
"ui.construction": "구성선",
"ui.construction.angle_hint": "보조 직선: 점 클릭 후 각도 입력 또는 방향 선택",
"ui.construction.bisector_hint": "이등분선: 교차하는 두 직선 선택 후 원하는 해 선택",
@@ -4659,7 +4775,10 @@
"ui.explode_needs_two_components": "분해 보기는 구성 요소를 서로 떼어 놓으므로 설계에 구성 요소가 두 개 이상 있어야 합니다(새 구성 요소, 설계 삽입 또는 바디로 구성 요소 만들기)",
"ui.exportDxf": "DXF 내보내기…",
"ui.export_ellipsis_keymap": "내보내기…",
"ui.export_glb": "GLB 내보내기",
"ui.export_keymap_tip": "키, S 상자 즐겨찾기, 도구 모음을 파일로 내보내기",
"ui.export_selects_only_body": "메시 내보내기 시 유일한 바디 선택",
"ui.export_selects_only_body_tip": "디자인에 바디가 하나뿐이면 STL 내보내기, 3MF 내보내기, 슬라이서로 보내기가 그 바디를 선택한 상태로 시작합니다.",
"ui.extend": "연장",
"ui.extent_type": "범위 유형",
"ui.extract_component": "파일로 추출…",
@@ -4717,6 +4836,8 @@
"ui.fine": "세밀",
"ui.finest": "가장 세밀",
"ui.finish_sketch": "스케치 종료",
"ui.first_dimension_scales_about_origin": "스케치 원점을 기준으로 배율 조정",
"ui.first_dimension_scales_about_origin_tip": "켜기: 도면이 항상 스케치 원점을 기준으로 커지거나 작아지므로 원점에서 떨어져 그린 도형은 이동합니다. 끄기: 원점에 묶이지 않은 도면은 자신의 중심을 기준으로 배율이 바뀌고 그린 자리에 그대로 있습니다.",
"ui.fit": "맞춤",
"ui.fix_unfix": "고정/고정 해제",
"ui.flat": "플랫",
@@ -5074,7 +5195,7 @@
"ui.pipe": "파이프",
"ui.pitch": "피치",
"ui.placement": "배치",
"ui.placement_handles_tip": "모델 위로 피처를 드래그하는 마커와 회전하는 링입니다.",
"ui.placement_handles_tip": "모델 위로 피처를 드래그하는 마커와, 피처를 회전할 수 있는 경우 회전하는 링입니다.",
"ui.plane": "평면",
"ui.plane_at_angle": "각도 평면",
"ui.plugins": "플러그인",
@@ -5115,6 +5236,7 @@
"ui.project_references_construction_note": "투영, 교차, 3D 형상 포함과 면 위 새 스케치의 면 모서리가 구성선으로 만들어집니다. 프로파일에 포함되지 않는 그리기용 참조이며, 모델과의 연결은 유지됩니다.",
"ui.properties": "속성",
"ui.properties.copy_matrix": "행렬 복사",
"ui.properties.copy_value": "클릭하여 복사",
"ui.properties.first_moments": "1차 모멘트",
"ui.properties.inertia": "관성 모멘트",
"ui.properties.inertia_note": "질량 중심 기준, 월드 축 (g·{unit}²)",
@@ -5127,6 +5249,7 @@
"ui.properties.measuring_failed": "측정이 끝나기 전에 중단되었습니다.",
"ui.properties.principal_axis": "주축 {number}",
"ui.properties.principal_moments": "주관성 모멘트",
"ui.properties.value_copied": "값을 복사했습니다",
"ui.pull_direction": "빼기 방향",
"ui.quality": "품질",
"ui.quantity": "수량",
@@ -5150,6 +5273,7 @@
"ui.relink_source_all": "소스 다시 연결 (모든 인스턴스)…",
"ui.removeFromToolbar": "도구 모음에서 제거",
"ui.removeSection": "단면 제거",
"ui.renameSelectedBodies": "선택한 바디 이름 변경",
"ui.render": "렌더",
"ui.renderer": "렌더러",
"ui.repeat": "반복",
@@ -5177,6 +5301,8 @@
"ui.ribbon_pin_footer": "고정된 명령은 리본에 표시됩니다. 행 위에 마우스를 올려 고정하거나 해제하세요.",
"ui.ribbon_workspace": "작업 공간",
"ui.right": "우측면",
"ui.right_click_confirms": "오른쪽 클릭으로 대화 상자 입력 확인",
"ui.right_click_confirms_tip": "대화 상자가 열려 있을 때 뷰에서 오른쪽 클릭하면 다음 빈 입력으로 이동하고, 마지막 입력에서는 OK를 실행합니다",
"ui.save": "저장",
"ui.save_as": "다른 이름으로 저장",
"ui.save_mesh_pick_bodies": "저장할 바디를 선택하세요",
@@ -5256,6 +5382,7 @@
"ui.step_values": "화살표와 휠로 값 변경",
"ui.step_values_tip": "값 필드에서 위/아래 화살표와 휠로 숫자를 변경합니다.",
"ui.stitch_tolerance_hint": "엄격",
"ui.straighten": "수평 맞추기",
"ui.stretch": "늘이기",
"ui.supersampling": "슈퍼샘플링 (SSAA)",
"ui.supersampling_adaptive": "뷰가 멈춰 있을 때만",
@@ -5326,6 +5453,8 @@
"ui.view_angles_roll": "롤",
"ui.view_angles_yaw": "요",
"ui.view_centre": "뷰 중심",
"ui.view_compass_tip": "{axis} 방향에서 봅니다. 다시 클릭하면 반대 방향으로 바뀝니다. 드래그하여 회전합니다.",
"ui.view_compass_tip_snap": "{axis} 방향에서 봅니다. 다시 클릭하면 반대 방향으로 바뀝니다. 드래그하여 회전하고, Shift를 누르면 스냅됩니다.",
"ui.viewport_status_clear": "{name} 끄기",
"ui.viewport_status_clear_hint": "{name} 끄기 · Esc",
"ui.viewport_status_edges": "모서리 {count}개",
+2 -2
View File
@@ -2582,7 +2582,7 @@
"prefs.design_tools.imported_files": "Importētie faili",
"prefs.design_tools.note": "Piezīme",
"prefs.design_tools.off": "Izslēgts",
"prefs.design_tools.placement_group": "Atbalsts, izcilnis, aizspiedsavienojums",
"prefs.design_tools.placement_group": "Izvietojamās operācijas",
"prefs.design_tools.rows": "Rindas",
"prefs.devices": "3D pele",
"prefs.dialog_buttons": "Dialoglodziņu pogas",
@@ -5903,7 +5903,7 @@
"ui.pitch": "Solis",
"ui.placement": "Izvietojums",
"ui.placement_handles": "Izvietošanas turi",
"ui.placement_handles_tip": "Marķieris operācijas vilkšanai pa modeli un gredzens tās pagriešanai.",
"ui.placement_handles_tip": "Marķieris operācijas vilkšanai pa modeli un, kur operāciju var pagriezt, gredzens tās pagriešanai.",
"ui.plane": "Plakne",
"ui.plane_at_angle": "Plakne leņķī",
"ui.plugins": "Spraudņi",
+9 -1
View File
@@ -698,6 +698,7 @@
"Value": "Nilai",
"Variable Radius": "Jejari Berubah",
"Velocity": "Halaju",
"Vertical": "Menegak",
"Vertices": "Bucu",
"View navigator": "Kawalan pandangan",
"Volume": "Isi padu",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "SUNTING {title}",
"dialog.no_shown_body": "Tiada jasad dipaparkan untuk diubah: paparkan satu, atau pilih Jasad Baharu",
"dialog.pattern_sketch_not_object": "Pilih jasad atau ciri: lakaran bukan kedua-duanya. Ulang lengkungnya dengan Corak atau Cermin milik lakaran itu sendiri, atau semperit dahulu.",
"dialog.right_click_pick": "Pilih {input} dahulu",
"dialog.select": "↖ Pilih",
"dialog.selected_count": "↖ {count} dipilih",
"dialog.selection_constraint": "Kekangan {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Pisahkan teks daripada lengkung",
"sketch_text.path_hint": "Lengkung lakaran yang akan diikuti teks: klik di sini, kemudian klik lengkung",
"sketch_text.use_font_file": "Gunakan fail fon {path}",
"sketch_text.valign_baseline": "Garis dasar",
"sketch_text.valign_bottom": "Bawah",
"sketch_text.valign_middle": "Tengah",
"sketch_text.valign_top": "Atas",
"solid": "pepejal",
"status.editing": "Menyunting {name}",
"status.navigation": "Pemetaan tetikus: {mapping}",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Pic",
"ui.placement": "Penempatan",
"ui.placement_handles": "Pemegang penempatan",
"ui.placement_handles_tip": "Pemegang pada pratonton Penyokong, Bonggol atau Sambungan Sentap: seret penanda untuk menggerakkannya merentasi model, putarkannya melalui cincinnya",
"ui.placement_handles_tip": "Penanda untuk menyeret ciri merentasi model dan, jika ciri boleh dipusingkan, gelang untuk memusingkannya.",
"ui.plane": "Satah",
"ui.plane_at_angle": "Satah Bersudut",
"ui.plugins": "Pemalam",
@@ -5013,6 +5019,8 @@
"ui.ribbon_pin_footer": "Arahan tersemat dipaparkan pada reben. Lalukan tetikus pada baris untuk menyemat atau menyahsemat.",
"ui.ribbon_workspace": "Ruang kerja",
"ui.right": "Kanan",
"ui.right_click_confirms": "Klik kanan mengesahkan input dialog",
"ui.right_click_confirms_tip": "Apabila dialog dibuka, klik kanan dalam paparan beralih ke input kosong seterusnya, dan pada input terakhir menjalankan OK",
"ui.save": "Simpan",
"ui.save_as": "Simpan Sebagai",
"ui.save_mesh_no_slicer_open": "Tiada penghiris ditemui: pilih Tersuai… dan pilih program penghiris anda",
+7 -1
View File
@@ -698,6 +698,7 @@
"Value": "Verdi",
"Variable Radius": "Variabel radius",
"Velocity": "Hastighet",
"Vertical": "Loddrett",
"Vertices": "Hjørner",
"View navigator": "Visningsnavigator",
"Volume": "Volum",
@@ -3931,6 +3932,10 @@
"sketch_text.path_clear": "Ta teksten av kurven",
"sketch_text.path_hint": "Velg en kurve i skissen som teksten skal følge: klikk her og deretter på kurven",
"sketch_text.use_font_file": "Bruk skriftfilen {path}",
"sketch_text.valign_baseline": "Grunnlinje",
"sketch_text.valign_bottom": "Bunn",
"sketch_text.valign_middle": "Midt",
"sketch_text.valign_top": "Topp",
"solid": "volumkropp",
"status.editing": "Redigerer {name}",
"status.navigation": "Museoppsett: {mapping}",
@@ -4445,6 +4450,7 @@
"ui.collapse": "Skjul",
"ui.collinear": "Kollineær",
"ui.colour_vision": "Fargesyn",
"ui.colour_vision_bends": "Bøyninger",
"ui.colour_vision_deutan": "Deutan",
"ui.colour_vision_deutan_tip": "For svak eller manglende grønnsans",
"ui.colour_vision_failed": "Mislyktes",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Stigning",
"ui.placement": "Plassering",
"ui.placement_handles": "Plasseringshåndtak",
"ui.placement_handles_tip": "Håndtak på forhåndsvisningen av et anlegg, skruefeste eller snap-fit: dra markøren for å flytte den over modellen, drei den med ringen",
"ui.placement_handles_tip": "En markør for å dra funksjonen over modellen og, der funksjonen kan dreies, en ring for å dreie den.",
"ui.plane": "Plan",
"ui.plane_at_angle": "Plan i vinkel",
"ui.plugins": "Programtillegg",
+12 -1
View File
@@ -698,6 +698,7 @@
"Value": "Waarde",
"Variable Radius": "Variabele straal",
"Velocity": "Snelheid",
"Vertical": "Verticaal",
"Vertices": "Hoekpunten",
"View navigator": "Weergavenavigator",
"Volume": "Volume",
@@ -1372,6 +1373,7 @@
"dialog.edit_title": "{title} BEWERKEN",
"dialog.no_shown_body": "Geen zichtbaar lichaam om te wijzigen: toon er een of kies Nieuw lichaam",
"dialog.pattern_sketch_not_object": "Kies lichamen of kenmerken: een schets is geen van beide. Herhaal de curven ervan met het eigen Patroon of Spiegelen van de schets, of extrudeer de schets eerst.",
"dialog.right_click_pick": "Eerst {input} selecteren",
"dialog.select": "↖ Selecteren",
"dialog.selected_count": "↖ {count} geselecteerd",
"dialog.selection_constraint": "Beperking {id}",
@@ -3942,6 +3944,10 @@
"sketch_text.path_clear": "De tekst van zijn curve halen",
"sketch_text.path_hint": "Een curve van de schets die de tekst volgt: klik hier en daarna op de curve",
"sketch_text.use_font_file": "Lettertypebestand {path} gebruiken",
"sketch_text.valign_baseline": "Basislijn",
"sketch_text.valign_bottom": "Onder",
"sketch_text.valign_middle": "Midden",
"sketch_text.valign_top": "Boven",
"solid": "solid",
"status.editing": "{name} wordt bewerkt",
"status.navigation": "Muistoewijzing: {mapping}",
@@ -4263,6 +4269,7 @@
"ui.agent_chat_setup_title": "Een assistent instellen",
"ui.agent_chat_side": "Zijde van agentchat",
"ui.agent_chat_signed_in": "aangemeld",
"ui.agent_chat_snap_none_found": "Geen codeeragent gevonden. Het Snap-pakket is afgeschermd en kan de codeeragents die op deze computer zijn geïnstalleerd niet zien of starten. Installeer SolidCraft in plaats daarvan via het AppImage-, .deb- of .rpm-pakket om ze te gebruiken. Een agent die een OpenAI-compatibele API gebruikt, werkt ook in het Snap-pakket: stel er een in met Agent toevoegen.",
"ui.agent_chat_state_auth": "Aanmelden vereist",
"ui.agent_chat_state_busy": "Bezig…",
"ui.agent_chat_state_exited": "Agent gestopt",
@@ -4429,7 +4436,9 @@
"ui.browser_bodies_one": "{count} lichaam",
"ui.browser_bodies_other": "{count} lichamen",
"ui.browser_collapse": "De browser samenvouwen",
"ui.browser_collapse_below": "Onderliggende samenvouwen",
"ui.browser_expand": "De browser uitvouwen",
"ui.browser_expand_below": "Onderliggende uitvouwen",
"ui.browser_title": "Browser",
"ui.calibrate": "Kalibreren",
"ui.cancel": "Annuleren",
@@ -4920,7 +4929,7 @@
"ui.pitch": "Steek",
"ui.placement": "Plaatsing",
"ui.placement_handles": "Plaatsingsgrepen",
"ui.placement_handles_tip": "Grepen op het voorbeeld van een Rustvlak, Nok of Snapverbinding: sleep de markering om hem over het model te verplaatsen, draai hem aan de ring",
"ui.placement_handles_tip": "Een markering om het kenmerk over het model te slepen en, waar het kenmerk kan draaien, een ring om het te draaien.",
"ui.plane": "Vlak",
"ui.plane_at_angle": "Vlak onder hoek",
"ui.plugins": "Plug-ins",
@@ -5024,6 +5033,8 @@
"ui.ribbon_pin_footer": "Vastgepinde opdrachten verschijnen in het lint. Beweeg over een rij om vast te pinnen of los te maken.",
"ui.ribbon_workspace": "Werkruimte",
"ui.right": "Rechts",
"ui.right_click_confirms": "Rechtsklik bevestigt dialooginvoer",
"ui.right_click_confirms_tip": "Met een dialoog open gaat een rechtsklik in de weergave naar de volgende lege invoer, en bij de laatste voert hij OK uit",
"ui.save": "Opslaan",
"ui.save_as": "Opslaan als",
"ui.save_mesh_no_slicer_open": "Geen slicer gevonden: kies Aangepast… en selecteer je slicerprogramma",
@@ -1,34 +0,0 @@
{
"en": {
"prefs.sketch.select_3d_curve_points": "Select 3D sketch curve points",
"prefs.sketch.select_3d_curve_points_help": "Show and select points on drawn 3D sketch curves for construction references."
},
"de": {
"prefs.sketch.select_3d_curve_points": "Punkte von 3D-Skizzenkurven auswählen",
"prefs.sketch.select_3d_curve_points_help": "Punkte auf gezeichneten 3D-Skizzenkurven als Referenzen für Konstruktionselemente anzeigen und auswählen."
},
"ja": {
"prefs.sketch.select_3d_curve_points": "3Dスケッチ曲線の点を選択",
"prefs.sketch.select_3d_curve_points_help": "描画した3Dスケッチ曲線の点を表示し、構築要素の参照として選択します。"
},
"ko": {
"prefs.sketch.select_3d_curve_points": "3D 스케치 곡선의 점 선택",
"prefs.sketch.select_3d_curve_points_help": "그린 3D 스케치 곡선의 점을 표시하고 구성 요소의 참조로 선택합니다."
},
"zh": {
"prefs.sketch.select_3d_curve_points": "选择 3D 草图曲线上的点",
"prefs.sketch.select_3d_curve_points_help": "显示绘制的 3D 草图曲线上的点,并将其选作构造参照。"
},
"ar": {
"prefs.sketch.select_3d_curve_points": "تحديد نقاط منحنيات الرسم ثلاثي الأبعاد",
"prefs.sketch.select_3d_curve_points_help": "إظهار نقاط منحنيات الرسم ثلاثي الأبعاد المرسومة وتحديدها كمراجع للإنشاء."
},
"he": {
"prefs.sketch.select_3d_curve_points": "בחירת נקודות על עקומות סקיצה תלת־ממדית",
"prefs.sketch.select_3d_curve_points_help": "הצגה ובחירה של נקודות על עקומות סקיצה תלת־ממדית שצוירו, לשימוש כהפניות בנייה."
},
"vi": {
"prefs.sketch.select_3d_curve_points": "Chọn điểm trên đường cong phác thảo 3D",
"prefs.sketch.select_3d_curve_points_help": "Hiển thị và chọn các điểm trên đường cong phác thảo 3D đã vẽ để làm tham chiếu dựng hình."
}
}
@@ -1,20 +0,0 @@
{
"en": {
"ui.agent_chat_ctx_gone": "No longer in the design: it was changed or deleted."
},
"ja": {
"ui.agent_chat_ctx_gone": "デザインにはもうありません(変更または削除されました)。"
},
"zh": {
"ui.agent_chat_ctx_gone": "已不在设计中:它被修改或删除了。"
},
"ar": {
"ui.agent_chat_ctx_gone": "لم يعد في التصميم: تم تغييره أو حذفه."
},
"he": {
"ui.agent_chat_ctx_gone": "כבר לא בעיצוב: הוא שונה או נמחק."
},
"vi": {
"ui.agent_chat_ctx_gone": "Không còn trong thiết kế: nó đã bị thay đổi hoặc xóa."
}
}
@@ -1,10 +0,0 @@
{
"en": { "ui.agent_chat_transcript_assistant": "Assistant:", "ui.agent_chat_transcript_user": "User:" },
"ar": { "ui.agent_chat_transcript_assistant": "المساعد:", "ui.agent_chat_transcript_user": "المستخدم:" },
"de": { "ui.agent_chat_transcript_assistant": "Assistent:", "ui.agent_chat_transcript_user": "Benutzer:" },
"he": { "ui.agent_chat_transcript_assistant": "עוזר:", "ui.agent_chat_transcript_user": "משתמש:" },
"ja": { "ui.agent_chat_transcript_assistant": "アシスタント:", "ui.agent_chat_transcript_user": "ユーザー:" },
"ko": { "ui.agent_chat_transcript_assistant": "어시스턴트:", "ui.agent_chat_transcript_user": "사용자:" },
"vi": { "ui.agent_chat_transcript_assistant": "Trợ lý:", "ui.agent_chat_transcript_user": "Người dùng:" },
"zh": { "ui.agent_chat_transcript_assistant": "助手:", "ui.agent_chat_transcript_user": "用户:" }
}
@@ -1,21 +0,0 @@
{
"en": { "ui.agent_chat_snap_none_found": "No coding agent found. The Snap package is confined, so it cannot see or start the coding agents installed on this computer. To use them, install SolidCraft from the AppImage, .deb or .rpm package instead. An agent that uses an OpenAI-compatible API works in the Snap package too: set one up with Add agent." },
"ar": { "ui.agent_chat_snap_none_found": "لم يُعثر على وكيل برمجي. تعمل حزمة Snap في بيئة معزولة، لذا لا يمكنها رؤية الوكلاء البرمجيين المثبّتين على هذا الحاسوب ولا تشغيلهم. لاستخدامهم، ثبّت SolidCraft من حزمة AppImage أو .deb أو .rpm بدلًا من ذلك. يعمل الوكيل الذي يستخدم واجهة برمجية متوافقة مع OpenAI في حزمة Snap أيضًا: أعدّه من «إضافة وكيل»." },
"cs": { "ui.agent_chat_snap_none_found": "Nebyl nalezen žádný kódovací agent. Balíček Snap běží v izolovaném prostředí, takže nevidí kódovací agenty nainstalované v tomto počítači a nemůže je spustit. Chcete-li je používat, nainstalujte SolidCraft z balíčku AppImage, .deb nebo .rpm. Agent, který používá API kompatibilní s OpenAI, v balíčku Snap funguje: nastavte ho přes Přidat agenta." },
"de": { "ui.agent_chat_snap_none_found": "Kein Coding-Agent gefunden. Das Snap-Paket ist abgeschottet und kann die auf diesem Computer installierten Coding-Agenten weder sehen noch starten. Um sie zu nutzen, installieren Sie SolidCraft stattdessen aus dem AppImage-, .deb- oder .rpm-Paket. Ein Agent, der eine OpenAI-kompatible API nutzt, funktioniert auch im Snap-Paket: Richten Sie ihn mit Agent hinzufügen ein." },
"es": { "ui.agent_chat_snap_none_found": "No se ha encontrado ningún agente de programación. El paquete Snap está confinado, así que no puede ver ni iniciar los agentes de programación instalados en este equipo. Para usarlos, instala SolidCraft desde el paquete AppImage, .deb o .rpm. Un agente que use una API compatible con OpenAI también funciona en el paquete Snap: configúralo con Añadir agente." },
"fr": { "ui.agent_chat_snap_none_found": "Aucun agent de programmation trouvé. Le paquet Snap est confiné, il ne peut donc ni voir ni lancer les agents de programmation installés sur cet ordinateur. Pour les utiliser, installer plutôt SolidCraft depuis le paquet AppImage, .deb ou .rpm. Un agent qui utilise une API compatible OpenAI fonctionne aussi dans le paquet Snap. Le configurer avec Ajouter un agent." },
"he": { "ui.agent_chat_snap_none_found": "לא נמצא סוכן קוד. חבילת ה־Snap מבודדת, ולכן היא לא יכולה לראות או להפעיל את סוכני הקוד שמותקנים במחשב הזה. כדי להשתמש בהם, יש להתקין את SolidCraft מחבילת AppImage, .deb או .rpm במקום זאת. סוכן שמשתמש ב־API תואם OpenAI עובד גם בחבילת ה־Snap, ואפשר להגדיר אותו בעזרת הוספת סוכן." },
"it": { "ui.agent_chat_snap_none_found": "Nessun agente di programmazione trovato. Il pacchetto Snap è confinato, quindi non può vedere né avviare gli agenti di programmazione installati su questo computer. Per usarli, installa SolidCraft dal pacchetto AppImage, .deb o .rpm. Un agente che usa un’API compatibile con OpenAI funziona anche nel pacchetto Snap: configuralo con Aggiungi agente." },
"ja": { "ui.agent_chat_snap_none_found": "コーディングエージェントが見つかりません。Snap パッケージは制限された環境で動作するため、このコンピューターにインストールされたコーディングエージェントを認識することも起動することもできません。それらを使うには、代わりに AppImage、.deb または .rpm パッケージから SolidCraft をインストールしてください。OpenAI 互換 API を使うエージェントは Snap パッケージでも動作します。「エージェントを追加」から設定してください。" },
"ko": { "ui.agent_chat_snap_none_found": "코딩 에이전트를 찾지 못했습니다. Snap 패키지는 격리된 환경에서 실행되므로 이 컴퓨터에 설치된 코딩 에이전트를 보거나 시작할 수 없습니다. 이 에이전트를 사용하려면 대신 AppImage, .deb 또는 .rpm 패키지로 SolidCraft를 설치하세요. OpenAI 호환 API를 사용하는 에이전트는 Snap 패키지에서도 작동합니다. 에이전트 추가에서 설정하세요." },
"nl": { "ui.agent_chat_snap_none_found": "Geen codeeragent gevonden. Het Snap-pakket is afgeschermd en kan de codeeragents die op deze computer zijn geïnstalleerd niet zien of starten. Installeer SolidCraft in plaats daarvan via het AppImage-, .deb- of .rpm-pakket om ze te gebruiken. Een agent die een OpenAI-compatibele API gebruikt, werkt ook in het Snap-pakket: stel er een in met Agent toevoegen." },
"pl": { "ui.agent_chat_snap_none_found": "Nie znaleziono agenta programistycznego. Pakiet Snap działa w izolacji, więc nie widzi agentów programistycznych zainstalowanych na tym komputerze i nie może ich uruchomić. Aby z nich korzystać, zainstaluj SolidCraft z pakietu AppImage, .deb lub .rpm. Agent korzystający z API zgodnego z OpenAI działa także w pakiecie Snap: skonfiguruj go przyciskiem Dodaj agenta." },
"pt-BR": { "ui.agent_chat_snap_none_found": "Nenhum agente de programação encontrado. O pacote Snap é confinado, então não consegue ver nem iniciar os agentes de programação instalados neste computador. Para usá-los, instale o SolidCraft pelo pacote AppImage, .deb ou .rpm. Um agente que usa uma API compatível com OpenAI também funciona no pacote Snap: configure-o em Adicionar agente." },
"ru": { "ui.agent_chat_snap_none_found": "Кодирующий агент не найден. Пакет Snap работает в изолированной среде, поэтому не видит и не может запускать кодирующих агентов, установленных на этом компьютере. Чтобы пользоваться ими, установите SolidCraft из пакета AppImage, .deb или .rpm. Агент, использующий API, совместимый с OpenAI, работает и в пакете Snap: настройте его через «Добавить агент»." },
"tr": { "ui.agent_chat_snap_none_found": "Kodlama ajanı bulunamadı. Snap paketi yalıtılmış çalıştığı için bu bilgisayarda yüklü kodlama ajanlarını göremez ve başlatamaz. Bunları kullanmak için SolidCraft'ı bunun yerine AppImage, .deb veya .rpm paketinden yükleyin. OpenAI uyumlu API kullanan bir ajan Snap paketinde de çalışır: Ajan ekle ile ayarlayın." },
"uk": { "ui.agent_chat_snap_none_found": "Агента для програмування не знайдено. Пакет Snap працює в ізольованому середовищі, тому не бачить і не може запускати агентів для програмування, установлених на цьому комп’ютері. Щоб користуватися ними, установіть SolidCraft з пакета AppImage, .deb або .rpm. Агент, що використовує API, сумісний з OpenAI, працює і в пакеті Snap: налаштуйте його через «Додати агента»." },
"vi": { "ui.agent_chat_snap_none_found": "Không tìm thấy tác tử lập trình nào. Gói Snap chạy trong môi trường bị giới hạn nên không thể thấy hay khởi động các tác tử lập trình được cài trên máy tính này. Để dùng chúng, hãy cài SolidCraft từ gói AppImage, .deb hoặc .rpm thay vào đó. Tác tử dùng API tương thích OpenAI vẫn hoạt động trong gói Snap: hãy thiết lập bằng Thêm AI Agent." },
"zh": { "ui.agent_chat_snap_none_found": "未找到编程代理。Snap 软件包运行在受限环境中,无法看到或启动此计算机上安装的编程代理。要使用它们,请改用 AppImage、.deb 或 .rpm 软件包安装 SolidCraft。使用 OpenAI 兼容 API 的代理在 Snap 软件包中同样可用:请通过“添加智能体”进行设置。" },
"zh-TW": { "ui.agent_chat_snap_none_found": "未找到程式設計代理。Snap 套件在受限環境中執行,無法看到或啟動這台電腦上安裝的程式設計代理。若要使用它們,請改用 AppImage、.deb 或 .rpm 套件安裝 SolidCraft。使用 OpenAI 相容 API 的代理在 Snap 套件中同樣可用:請透過「新增代理」進行設定。" }
}
@@ -1,83 +0,0 @@
{
"en": {
"ui.agent_chat_answered_in": "Answered in {time}",
"ui.agent_chat_ended_after": "Ended after {time}",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_thinking_for": "Thinking for {time}",
"ui.agent_chat_tool_running_for": "running for {time}"
},
"ar": {
"ui.agent_chat_answered_in": "أُجيب خلال {time}",
"ui.agent_chat_ended_after": "انتهى بعد {time}",
"ui.agent_chat_span_h": "{h} ساعة {min} دقيقة",
"ui.agent_chat_span_min": "{n} دقيقة",
"ui.agent_chat_span_s": "{n} ث",
"ui.agent_chat_thinking_for": "يفكر منذ {time}",
"ui.agent_chat_tool_running_for": "قيد التشغيل منذ {time}"
},
"de": {
"ui.agent_chat_answered_in": "Beantwortet in {time}",
"ui.agent_chat_ended_after": "Beendet nach {time}",
"ui.agent_chat_span_h": "{h} Std. {min} Min.",
"ui.agent_chat_span_min": "{n} Min.",
"ui.agent_chat_span_s": "{n} Sek.",
"ui.agent_chat_thinking_for": "Denkt seit {time} nach",
"ui.agent_chat_tool_running_for": "läuft seit {time}"
},
"fr": {
"ui.agent_chat_answered_in": "Répondu en {time}",
"ui.agent_chat_ended_after": "Arrêté après {time}",
"ui.agent_chat_span_h": "{h} h {min} min",
"ui.agent_chat_span_min": "{n} min",
"ui.agent_chat_span_s": "{n} s",
"ui.agent_chat_thinking_for": "Réfléchit depuis {time}",
"ui.agent_chat_tool_running_for": "en cours depuis {time}"
},
"he": {
"ui.agent_chat_answered_in": "נענה תוך {time}",
"ui.agent_chat_ended_after": "הסתיים אחרי {time}",
"ui.agent_chat_span_h": "{h} שע' {min} דק'",
"ui.agent_chat_span_min": "{n} דק'",
"ui.agent_chat_span_s": "{n} שנ'",
"ui.agent_chat_thinking_for": "חושב כבר {time}",
"ui.agent_chat_tool_running_for": "רץ כבר {time}"
},
"ja": {
"ui.agent_chat_answered_in": "{time}で回答",
"ui.agent_chat_ended_after": "{time}後に終了",
"ui.agent_chat_span_h": "{h} 時間 {min} 分",
"ui.agent_chat_span_min": "{n} 分",
"ui.agent_chat_span_s": "{n} 秒",
"ui.agent_chat_thinking_for": "{time}考え中",
"ui.agent_chat_tool_running_for": "実行中 ({time})"
},
"ko": {
"ui.agent_chat_answered_in": "{time} 만에 답변",
"ui.agent_chat_ended_after": "{time} 후 종료",
"ui.agent_chat_span_h": "{h}시간 {min}분",
"ui.agent_chat_span_min": "{n}분",
"ui.agent_chat_span_s": "{n}초",
"ui.agent_chat_thinking_for": "{time}째 생각 중",
"ui.agent_chat_tool_running_for": "{time}째 실행 중"
},
"vi": {
"ui.agent_chat_answered_in": "Đã trả lời trong {time}",
"ui.agent_chat_ended_after": "Đã dừng sau {time}",
"ui.agent_chat_span_h": "{h} giờ {min} phút",
"ui.agent_chat_span_min": "{n} phút",
"ui.agent_chat_span_s": "{n} giây",
"ui.agent_chat_thinking_for": "Đang suy nghĩ {time}",
"ui.agent_chat_tool_running_for": "đang chạy {time}"
},
"zh": {
"ui.agent_chat_answered_in": "用时 {time} 完成回答",
"ui.agent_chat_ended_after": "{time} 后结束",
"ui.agent_chat_span_h": "{h} 小时 {min} 分钟",
"ui.agent_chat_span_min": "{n} 分钟",
"ui.agent_chat_span_s": "{n} 秒",
"ui.agent_chat_thinking_for": "已思考 {time}",
"ui.agent_chat_tool_running_for": "已运行 {time}"
}
}
@@ -1,10 +0,0 @@
{
"en": { "ui.agent_chat_model_search_or_id": "Search, or type any model id…" },
"ar": { "ui.agent_chat_model_search_or_id": "ابحث، أو اكتب أي معرّف نموذج…" },
"de": { "ui.agent_chat_model_search_or_id": "Suchen oder eine beliebige Modell-ID eingeben…" },
"he": { "ui.agent_chat_model_search_or_id": "חיפוש, או הקלדת מזהה מודל כלשהו…" },
"ja": { "ui.agent_chat_model_search_or_id": "検索、または任意のモデル ID を入力…" },
"ko": { "ui.agent_chat_model_search_or_id": "검색하거나 모델 ID를 직접 입력…" },
"vi": { "ui.agent_chat_model_search_or_id": "Tìm, hoặc nhập mã mô hình bất kỳ…" },
"zh": { "ui.agent_chat_model_search_or_id": "搜索,或输入任意模型 ID…" }
}
@@ -1,26 +0,0 @@
{
"en": {
"component.error.ambiguous_name": "Several components are named `{name}`. Use a numeric component ID: {ids}."
},
"ar": {
"component.error.ambiguous_name": "توجد عدة مكونات بالاسم `{name}`. استخدم معرّف مكوّن رقميًا: {ids}."
},
"de": {
"component.error.ambiguous_name": "Mehrere Komponenten heißen `{name}`. Verwende eine numerische Komponenten-ID: {ids}."
},
"he": {
"component.error.ambiguous_name": "לכמה רכיבים יש השם `{name}`. יש להשתמש במזהה רכיב מספרי: {ids}."
},
"ja": {
"component.error.ambiguous_name": "複数のコンポーネントに `{name}` という名前が付いています。数値のコンポーネント ID を使用してください: {ids}。"
},
"ko": {
"component.error.ambiguous_name": "이름이 `{name}`인 구성요소가 여러 개입니다. 숫자 구성요소 ID를 사용하세요: {ids}."
},
"vi": {
"component.error.ambiguous_name": "Nhiều thành phần có tên `{name}`. Hãy dùng ID thành phần dạng số: {ids}."
},
"zh": {
"component.error.ambiguous_name": "多个组件名为 `{name}`。请使用数字组件 ID:{ids}。"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"cmd.assembly_constraint_create": "Constrain",
"cmd.assembly_constraint_edit": "Edit Constraint"
},
"de": {
"cmd.assembly_constraint_create": "Abhängigkeit",
"cmd.assembly_constraint_edit": "Abhängigkeit bearbeiten"
},
"ja": {
"cmd.assembly_constraint_create": "拘束",
"cmd.assembly_constraint_edit": "拘束を編集"
},
"zh": {
"cmd.assembly_constraint_create": "约束",
"cmd.assembly_constraint_edit": "编辑约束"
},
"ko": {
"cmd.assembly_constraint_create": "구속",
"cmd.assembly_constraint_edit": "구속 편집"
},
"vi": {
"cmd.assembly_constraint_create": "Ràng buộc",
"cmd.assembly_constraint_edit": "Sửa ràng buộc"
},
"ar": {
"cmd.assembly_constraint_create": "تقييد",
"cmd.assembly_constraint_edit": "تحرير التقييد"
},
"he": {
"cmd.assembly_constraint_create": "אילוץ",
"cmd.assembly_constraint_edit": "עריכת אילוץ"
}
}
@@ -1,32 +0,0 @@
{
"en": {
"ui.agent_chat_state_no_design": "No design access",
"ui.agent_chat_no_design_hint": "The agent runs without SolidCraft's tools, so it can't read or change the design: solidcraft-cli was not found next to the app. Install SolidCraft with solidcraft-cli beside it (on Windows, the MSI or the portable zip), or set SOLIDCRAFT_CLI to its path, then connect again.",
"ui.agent_chat_tools_not_started": "The agent runs without SolidCraft's tools, so it can't read or change the design: solidcraft-cli was found, but its tools did not start (the error in the chat says why). Connect again; if it keeps happening, reinstall SolidCraft."
},
"ar": {
"ui.agent_chat_state_no_design": "لا وصول إلى التصميم",
"ui.agent_chat_no_design_hint": "يعمل الوكيل دون أدوات SolidCraft، لذا لا يستطيع قراءة التصميم أو تغييره: لم يُعثر على solidcraft-cli بجانب التطبيق. ثبّت SolidCraft مع solidcraft-cli بجانبه (في Windows: حزمة MSI أو ملف zip المحمول)، أو اضبط SOLIDCRAFT_CLI على مساره، ثم اتصل مرة أخرى.",
"ui.agent_chat_tools_not_started": "يعمل الوكيل دون أدوات SolidCraft، لذا لا يستطيع قراءة التصميم أو تغييره: عُثر على solidcraft-cli، لكن أدواته لم تبدأ (رسالة الخطأ في المحادثة توضح السبب). اتصل مرة أخرى، وإذا تكرر ذلك فأعد تثبيت SolidCraft."
},
"he": {
"ui.agent_chat_state_no_design": "אין גישה לתכן",
"ui.agent_chat_no_design_hint": "הסוכן פועל בלי הכלים של SolidCraft, ולכן אינו יכול לקרוא או לשנות את התכן: solidcraft-cli לא נמצא ליד היישום. התקינו את SolidCraft עם solidcraft-cli לצידו (ב-Windows: קובץ ה-MSI או ה-zip הנייד), או הגדירו את SOLIDCRAFT_CLI לנתיב שלו, ואז התחברו שוב.",
"ui.agent_chat_tools_not_started": "הסוכן פועל בלי הכלים של SolidCraft, ולכן אינו יכול לקרוא או לשנות את התכן: solidcraft-cli נמצא, אבל הכלים שלו לא הופעלו (הודעת השגיאה בצ'אט מסבירה למה). התחברו שוב, ואם זה חוזר, התקינו מחדש את SolidCraft."
},
"ja": {
"ui.agent_chat_state_no_design": "デザインにアクセスできません",
"ui.agent_chat_no_design_hint": "エージェントは SolidCraft のツールなしで動作しているため、デザインを読み取ることも変更することもできません。アプリの隣に solidcraft-cli が見つかりませんでした。solidcraft-cli が同梱された SolidCraft をインストールするか(Windows では MSI またはポータブル zip)、SOLIDCRAFT_CLI にそのパスを設定してから、もう一度接続してください。",
"ui.agent_chat_tools_not_started": "エージェントは SolidCraft のツールなしで動作しているため、デザインを読み取ることも変更することもできません。solidcraft-cli は見つかりましたが、そのツールが起動しませんでした(理由はチャットのエラーに表示されています)。もう一度接続してください。繰り返し起きる場合は SolidCraft を再インストールしてください。"
},
"vi": {
"ui.agent_chat_state_no_design": "Không truy cập được thiết kế",
"ui.agent_chat_no_design_hint": "Tác tử đang chạy mà không có công cụ của SolidCraft, nên không thể đọc hay thay đổi thiết kế: không tìm thấy solidcraft-cli cạnh ứng dụng. Hãy cài SolidCraft có solidcraft-cli đi kèm (trên Windows: bản MSI hoặc bản zip di động), hoặc đặt SOLIDCRAFT_CLI thành đường dẫn của nó, rồi kết nối lại.",
"ui.agent_chat_tools_not_started": "Tác tử đang chạy mà không có công cụ của SolidCraft, nên không thể đọc hay thay đổi thiết kế: đã tìm thấy solidcraft-cli, nhưng công cụ của nó không khởi động được (lỗi trong cuộc trò chuyện cho biết lý do). Hãy kết nối lại; nếu vẫn xảy ra, hãy cài lại SolidCraft."
},
"zh": {
"ui.agent_chat_state_no_design": "无法访问设计",
"ui.agent_chat_no_design_hint": "代理在没有 SolidCraft 工具的情况下运行,因此无法读取或修改设计:在应用旁边找不到 solidcraft-cli。请安装附带 solidcraft-cli 的 SolidCraft(在 Windows 上为 MSI 或便携版 zip),或将 SOLIDCRAFT_CLI 设置为它的路径,然后重新连接。",
"ui.agent_chat_tools_not_started": "代理在没有 SolidCraft 工具的情况下运行,因此无法读取或修改设计:已找到 solidcraft-cli,但其工具未能启动(聊天中的错误信息说明了原因)。请重新连接;如果问题仍然出现,请重新安装 SolidCraft。"
}
}
@@ -1,18 +0,0 @@
{
"en": { "ui.browser_collapse_below": "Collapse Below", "ui.browser_expand_below": "Expand Below" },
"ar": { "ui.browser_collapse_below": "طي ما بالأسفل", "ui.browser_expand_below": "توسيع ما بالأسفل" },
"de": { "ui.browser_collapse_below": "Darunter einklappen", "ui.browser_expand_below": "Darunter ausklappen" },
"es": { "ui.browser_collapse_below": "Contraer debajo", "ui.browser_expand_below": "Expandir debajo" },
"fr": { "ui.browser_collapse_below": "Réduire en dessous", "ui.browser_expand_below": "Développer en dessous" },
"he": { "ui.browser_collapse_below": "כיווץ מה שמתחת", "ui.browser_expand_below": "הרחבת מה שמתחת" },
"it": { "ui.browser_collapse_below": "Comprimi sotto", "ui.browser_expand_below": "Espandi sotto" },
"ja": { "ui.browser_collapse_below": "この下を折りたたむ", "ui.browser_expand_below": "この下を展開" },
"ko": { "ui.browser_collapse_below": "하위 항목 접기", "ui.browser_expand_below": "하위 항목 펼치기" },
"nl": { "ui.browser_collapse_below": "Onderliggende samenvouwen", "ui.browser_expand_below": "Onderliggende uitvouwen" },
"pl": { "ui.browser_collapse_below": "Zwiń poniżej", "ui.browser_expand_below": "Rozwiń poniżej" },
"ru": { "ui.browser_collapse_below": "Свернуть вложенное", "ui.browser_expand_below": "Развернуть вложенное" },
"uk": { "ui.browser_collapse_below": "Згорнути вкладене", "ui.browser_expand_below": "Розгорнути вкладене" },
"vi": { "ui.browser_collapse_below": "Thu gọn bên dưới", "ui.browser_expand_below": "Mở rộng bên dưới" },
"zh": { "ui.browser_collapse_below": "折叠下级", "ui.browser_expand_below": "展开下级" },
"zh-TW": { "ui.browser_collapse_below": "折疊下層", "ui.browser_expand_below": "展開下層" }
}
@@ -1,29 +0,0 @@
{
"en": {
"ui.renameSelectedBodies": "Rename Selected Bodies"
},
"ar": {
"ui.renameSelectedBodies": "إعادة تسمية الأجسام المحددة"
},
"de": {
"ui.renameSelectedBodies": "Ausgewählte Körper umbenennen"
},
"he": {
"ui.renameSelectedBodies": "שינוי שם הגופים הנבחרים"
},
"ja": {
"ui.renameSelectedBodies": "選択したボディの名前を変更"
},
"ko": {
"ui.renameSelectedBodies": "선택한 바디 이름 변경"
},
"pl": {
"ui.renameSelectedBodies": "Zmień nazwę zaznaczonych brył"
},
"vi": {
"ui.renameSelectedBodies": "Đổi tên các thân khối đã chọn"
},
"zh": {
"ui.renameSelectedBodies": "重命名所选实体"
}
}
@@ -1,90 +0,0 @@
{
"en": {
"browser.straighten_angle": "Edge direction",
"browser.straighten_choose": "Choose Horizontal, Vertical or Angle for the edge, then press Straighten.",
"browser.straighten_click_a": "Click the image at one end of an edge that should be straight, or type its coordinates.",
"browser.straighten_click_b": "Click the other end of the edge, or type its coordinates.",
"browser.straighten_horizontal": "Horizontal",
"browser.straighten_title": "Straighten: {name}",
"browser.straighten_vertical": "Vertical",
"cmd.canvas_straighten": "Straighten Canvas",
"ui.straighten": "Straighten"
},
"ar": {
"browser.straighten_angle": "اتجاه الحافة",
"browser.straighten_choose": "اختر ما تصبح عليه الحافة، أفقية أو رأسية أو بزاوية، ثم اضغط «تقويم».",
"browser.straighten_click_a": "انقر الصورة عند أحد طرفي حافة يجب أن تكون مستقيمة، أو اكتب إحداثياتها.",
"browser.straighten_click_b": "انقر الطرف الآخر للحافة، أو اكتب إحداثياته.",
"browser.straighten_horizontal": "أفقي",
"browser.straighten_title": "تقويم: {name}",
"browser.straighten_vertical": "رأسي",
"cmd.canvas_straighten": "تقويم اللوحة",
"ui.straighten": "تقويم"
},
"de": {
"browser.straighten_angle": "Richtung der Kante",
"browser.straighten_choose": "Wählen Sie, wie die Kante liegen soll (Horizontal, Vertikal oder ein Winkel), und klicken Sie dann auf Ausrichten.",
"browser.straighten_click_a": "Klicken Sie im Bild auf ein Ende einer Kante, die gerade sein soll, oder geben Sie die Koordinaten ein.",
"browser.straighten_click_b": "Klicken Sie auf das andere Ende der Kante, oder geben Sie die Koordinaten ein.",
"browser.straighten_horizontal": "Horizontal",
"browser.straighten_title": "Ausrichten: {name}",
"browser.straighten_vertical": "Vertikal",
"cmd.canvas_straighten": "Zeichenfläche ausrichten",
"ui.straighten": "Ausrichten"
},
"he": {
"browser.straighten_angle": "כיוון הקצה",
"browser.straighten_choose": "בחר מה יהיה הקצה, אופקי, אנכי או בזווית, ואז לחץ על יישור.",
"browser.straighten_click_a": "לחץ על התמונה בקצה אחד של קצה שאמור להיות ישר, או הקלד את הקואורדינטות שלו.",
"browser.straighten_click_b": "לחץ על הקצה השני, או הקלד את הקואורדינטות שלו.",
"browser.straighten_horizontal": "אופקי",
"browser.straighten_title": "יישור: {name}",
"browser.straighten_vertical": "אנכי",
"cmd.canvas_straighten": "יישור קנבס",
"ui.straighten": "יישור"
},
"ja": {
"browser.straighten_angle": "エッジの向き",
"browser.straighten_choose": "エッジの向き(水平、垂直、または角度)を選んでから、[傾き補正]を押してください。",
"browser.straighten_click_a": "まっすぐにしたいエッジの一端を画像上でクリックするか、座標を入力してください。",
"browser.straighten_click_b": "エッジのもう一端をクリックするか、座標を入力してください。",
"browser.straighten_horizontal": "水平",
"browser.straighten_title": "傾き補正: {name}",
"browser.straighten_vertical": "垂直",
"cmd.canvas_straighten": "キャンバスの傾き補正",
"ui.straighten": "傾き補正"
},
"ko": {
"browser.straighten_angle": "모서리 방향",
"browser.straighten_choose": "모서리 방향(수평, 수직 또는 각도)을 고른 다음 수평 맞추기를 누르세요.",
"browser.straighten_click_a": "곧아야 하는 모서리의 한쪽 끝을 이미지에서 클릭하거나 좌표를 입력하세요.",
"browser.straighten_click_b": "모서리의 다른 쪽 끝을 클릭하거나 좌표를 입력하세요.",
"browser.straighten_horizontal": "수평",
"browser.straighten_title": "수평 맞추기: {name}",
"browser.straighten_vertical": "수직",
"cmd.canvas_straighten": "캔버스 수평 맞추기",
"ui.straighten": "수평 맞추기"
},
"vi": {
"browser.straighten_angle": "Hướng của cạnh",
"browser.straighten_choose": "Chọn hướng cho cạnh (Ngang, Dọc hoặc một góc), rồi nhấn Làm thẳng.",
"browser.straighten_click_a": "Nhấp vào ảnh tại một đầu của cạnh cần thẳng, hoặc nhập tọa độ của nó.",
"browser.straighten_click_b": "Nhấp vào đầu kia của cạnh, hoặc nhập tọa độ của nó.",
"browser.straighten_horizontal": "Ngang",
"browser.straighten_title": "Làm thẳng: {name}",
"browser.straighten_vertical": "Dọc",
"cmd.canvas_straighten": "Làm thẳng hình ảnh Canvas",
"ui.straighten": "Làm thẳng"
},
"zh": {
"browser.straighten_angle": "边的方向",
"browser.straighten_choose": "选择边的方向(水平、垂直或角度),然后按“拉直”。",
"browser.straighten_click_a": "在图像上单击应为直线的边的一端,或输入其坐标。",
"browser.straighten_click_b": "单击该边的另一端,或输入其坐标。",
"browser.straighten_horizontal": "水平",
"browser.straighten_title": "拉直:{name}",
"browser.straighten_vertical": "垂直",
"cmd.canvas_straighten": "拉直画布",
"ui.straighten": "拉直"
}
}
@@ -1,41 +0,0 @@
{
"en": {
"ui.colour_vision_bends": "Bends"
},
"ar": {
"ui.colour_vision_bends": "الثنيات"
},
"cs": {
"ui.colour_vision_bends": "Ohyby"
},
"da": {
"ui.colour_vision_bends": "Bukninger"
},
"de": {
"ui.colour_vision_bends": "Biegungen"
},
"he": {
"ui.colour_vision_bends": "כיפופים"
},
"ja": {
"ui.colour_vision_bends": "曲げ"
},
"ko": {
"ui.colour_vision_bends": "벤딩"
},
"nb": {
"ui.colour_vision_bends": "Bøyninger"
},
"pl": {
"ui.colour_vision_bends": "Gięcia"
},
"ru": {
"ui.colour_vision_bends": "Гибы"
},
"vi": {
"ui.colour_vision_bends": "Các vị trí chấn"
},
"zh": {
"ui.colour_vision_bends": "折弯"
}
}
@@ -1,23 +0,0 @@
{
"en": {
"dialog.component_origin": "{placement} · {item}"
},
"ar": {
"dialog.component_origin": "{placement} · {item}"
},
"de": {
"dialog.component_origin": "{placement} · {item}"
},
"he": {
"dialog.component_origin": "{placement} · {item}"
},
"ja": {
"dialog.component_origin": "{placement} · {item}"
},
"vi": {
"dialog.component_origin": "{placement} · {item}"
},
"zh": {
"dialog.component_origin": "{placement} · {item}"
}
}
@@ -1,38 +0,0 @@
{
"en": {
"prefs.constraint_glyph_size": "Constraint glyph size",
"prefs.constraint_glyph_size_note": "How large constraint glyphs and their letters or icons are drawn in a sketch. 100% is the usual size; glyphs keep this screen size at every zoom."
},
"ar": {
"prefs.constraint_glyph_size": "حجم رموز القيود",
"prefs.constraint_glyph_size_note": "حجم رسم رموز القيود وحروفها أو أيقوناتها في الرسم. 100% هو الحجم المعتاد؛ وتحتفظ الرموز بهذا الحجم على الشاشة عند أي مستوى تكبير."
},
"de": {
"prefs.constraint_glyph_size": "Größe der Bindungssymbole",
"prefs.constraint_glyph_size_note": "Wie groß Bindungssymbole samt Buchstaben oder Icons in einer Skizze gezeichnet werden. 100 % ist die übliche Größe; die Symbole behalten diese Bildschirmgröße bei jedem Zoom."
},
"fr": {
"prefs.constraint_glyph_size": "Taille des symboles de contraintes",
"prefs.constraint_glyph_size_note": "Taille à laquelle les symboles de contraintes, avec leurs lettres ou icônes, sont dessinés dans une esquisse. 100 % est la taille habituelle ; les symboles gardent cette taille à l'écran quel que soit le zoom."
},
"he": {
"prefs.constraint_glyph_size": "גודל סמלי האילוצים",
"prefs.constraint_glyph_size_note": "הגודל שבו מצוירים סמלי האילוצים, עם האותיות או הסמלונים שלהם, בשרטוט. 100% הוא הגודל הרגיל; הסמלים שומרים על גודל המסך הזה בכל זום."
},
"ja": {
"prefs.constraint_glyph_size": "拘束グリフのサイズ",
"prefs.constraint_glyph_size_note": "スケッチ内の拘束グリフとその文字やアイコンを描く大きさ。100% が通常のサイズです。グリフはどのズームでもこの画面サイズを保ちます。"
},
"ko": {
"prefs.constraint_glyph_size": "구속 조건 기호 크기",
"prefs.constraint_glyph_size_note": "스케치에서 구속 조건 기호와 그 문자나 아이콘을 그리는 크기입니다. 100%가 기본 크기이며, 기호는 확대/축소와 관계없이 이 화면 크기를 유지합니다."
},
"vi": {
"prefs.constraint_glyph_size": "Kích thước biểu tượng ràng buộc",
"prefs.constraint_glyph_size_note": "Kích thước vẽ biểu tượng ràng buộc cùng chữ cái hoặc biểu tượng bên trong trong bản phác. 100% là kích thước thông thường; biểu tượng giữ kích thước màn hình này ở mọi mức thu phóng."
},
"zh": {
"prefs.constraint_glyph_size": "约束符号大小",
"prefs.constraint_glyph_size_note": "草图中约束符号及其字母或图标的绘制大小。100% 为常规大小;任意缩放比例下符号都保持此屏幕大小。"
}
}
@@ -1,80 +0,0 @@
{
"en": {
"cmd.construct.axis": "Axis",
"cmd.construct.plane": "Plane",
"cmd.construct.point": "Point",
"help.construct.axis": "Creates a construction axis with the method your picks call for: along an edge or line, through a hole or round face, where two planes meet, through two points, or square to a face through a point. Use it when you know the references and not the method.",
"help.construct.plane": "Creates a construction plane with the method your picks call for: offset from a plane, through a point, between two planes, through lines or points, tangent to a curved face, or square to a path. Use it when you know the references and not the method.",
"help.construct.point": "Creates a construction point with the method your picks call for: at a vertex, at the centre of a circle or sphere, along an edge, where two lines or three planes meet, or where a line crosses a plane. Use it when you know the references and not the method.",
"ui.construct_auto.chosen": "Chosen from your picks. Pick another reference, or take one out, to change the method.",
"ui.construct_auto.no_fit": "Pick other references: no method builds from these.",
"ui.construct_auto.pick": "Pick what to build from: the method follows from your picks.",
"ui.construct_auto.refs": "References",
"ui.construct_auto.select": "Select references to build from first"
},
"ja": {
"cmd.construct.axis": "軸",
"cmd.construct.plane": "平面",
"cmd.construct.point": "点",
"help.construct.axis": "選択に応じた方法で構築軸を作ります。エッジや線に沿って、穴や丸い面を通って、2つの平面の交線に、2点を通って、または点を通り面に垂直に作ります。参照は決まっているが方法を選びたくないときに使います。",
"help.construct.plane": "選択に応じた方法で構築平面を作ります。平面からのオフセット、点を通る、2つの平面の中間、線や点を通る、曲面に接する、またはパスに垂直に作ります。参照は決まっているが方法を選びたくないときに使います。",
"help.construct.point": "選択に応じた方法で構築点を作ります。頂点、円や球の中心、エッジ上、2本の線や3つの平面の交点、または線が平面と交わる位置に作ります。参照は決まっているが方法を選びたくないときに使います。",
"ui.construct_auto.chosen": "選択から方法を選びました。参照を追加または削除すると方法が変わります。",
"ui.construct_auto.no_fit": "別の参照を選択してください。これらから作れる方法がありません。",
"ui.construct_auto.pick": "作成元を選択してください。方法は選択から決まります。",
"ui.construct_auto.refs": "参照",
"ui.construct_auto.select": "先に作成元の参照を選択してください"
},
"zh": {
"cmd.construct.axis": "轴",
"cmd.construct.plane": "平面",
"cmd.construct.point": "点",
"help.construct.axis": "按所选对象对应的方法创建构造轴:沿边或直线、穿过孔或圆形面、两平面的交线、穿过两点,或过一点垂直于面。在已知参照但不想选择方法时使用。",
"help.construct.plane": "按所选对象对应的方法创建构造平面:偏移自平面、过一点、两平面之间、过直线或点、与曲面相切,或垂直于路径。在已知参照但不想选择方法时使用。",
"help.construct.point": "按所选对象对应的方法创建构造点:在顶点、圆或球的中心、沿边、两直线或三个平面的交点,或直线与平面的交点。在已知参照但不想选择方法时使用。",
"ui.construct_auto.chosen": "已根据所选对象选定方法。添加或移除参照即可更换方法。",
"ui.construct_auto.no_fit": "请选择其他参照:没有方法能由这些对象创建。",
"ui.construct_auto.pick": "选择创建依据:方法由所选对象决定。",
"ui.construct_auto.refs": "参照",
"ui.construct_auto.select": "请先选择创建依据的参照"
},
"ar": {
"cmd.construct.axis": "محور",
"cmd.construct.plane": "مستوى",
"cmd.construct.point": "نقطة",
"help.construct.axis": "ينشئ محورًا إنشائيًا بالطريقة التي تناسب ما تختاره: على امتداد حافة أو خط، أو عبر ثقب أو وجه دائري، أو عند تقاطع مستويين، أو عبر نقطتين، أو عموديًا على وجه عبر نقطة. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"help.construct.plane": "ينشئ مستوى إنشائيًا بالطريقة التي تناسب ما تختاره: إزاحة عن مستوى، أو عبر نقطة، أو بين مستويين، أو عبر خطوط أو نقاط، أو مماسًا لوجه منحنٍ، أو عموديًا على مسار. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"help.construct.point": "ينشئ نقطة إنشائية بالطريقة التي تناسب ما تختاره: عند رأس، أو في مركز دائرة أو كرة، أو على امتداد حافة، أو عند تقاطع خطين أو ثلاثة مستويات، أو حيث يقطع خط مستوى. استخدمه عندما تعرف المراجع ولا تعرف الطريقة.",
"ui.construct_auto.chosen": "اختيرت الطريقة من اختياراتك. اختر مرجعًا آخر أو أزل مرجعًا لتغيير الطريقة.",
"ui.construct_auto.no_fit": "اختر مراجع أخرى: لا توجد طريقة تبني من هذه المراجع.",
"ui.construct_auto.pick": "اختر ما تبني منه: الطريقة تتبع اختياراتك.",
"ui.construct_auto.refs": "المراجع",
"ui.construct_auto.select": "اختر أولًا المراجع التي تبني منها"
},
"he": {
"cmd.construct.axis": "ציר",
"cmd.construct.plane": "מישור",
"cmd.construct.point": "נקודה",
"help.construct.axis": "יוצר ציר עזר בשיטה שמתאימה למה שבחרת: לאורך קצה או קו, דרך חור או פאה עגולה, במפגש של שני מישורים, דרך שתי נקודות, או ניצב לפאה דרך נקודה. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"help.construct.plane": "יוצר מישור עזר בשיטה שמתאימה למה שבחרת: בהיסט ממישור, דרך נקודה, בין שני מישורים, דרך קווים או נקודות, משיק לפאה מעוקלת, או ניצב למסלול. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"help.construct.point": "יוצר נקודת עזר בשיטה שמתאימה למה שבחרת: בקודקוד, במרכז של מעגל או כדור, לאורך קצה, במפגש של שני קווים או שלושה מישורים, או במקום שבו קו חוצה מישור. השתמש בו כשאתה יודע את ההפניות ולא את השיטה.",
"ui.construct_auto.chosen": "השיטה נבחרה לפי הבחירות שלך. בחר הפניה נוספת, או הסר אחת, כדי לשנות את השיטה.",
"ui.construct_auto.no_fit": "בחר הפניות אחרות: אין שיטה שבונה מאלה.",
"ui.construct_auto.pick": "בחר ממה לבנות: השיטה נקבעת לפי הבחירות שלך.",
"ui.construct_auto.refs": "הפניות",
"ui.construct_auto.select": "בחר קודם את ההפניות לבנייה"
},
"vi": {
"cmd.construct.axis": "Trục",
"cmd.construct.plane": "Mặt phẳng",
"cmd.construct.point": "Điểm",
"help.construct.axis": "Tạo trục dựng theo phương pháp phù hợp với những gì bạn chọn: dọc theo cạnh hoặc đường, qua lỗ hoặc mặt tròn, nơi hai mặt phẳng giao nhau, qua hai điểm, hoặc vuông góc với mặt qua một điểm. Dùng khi bạn biết các tham chiếu nhưng không biết phương pháp.",
"help.construct.plane": "Tạo mặt phẳng dựng theo phương pháp phù hợp với những gì bạn chọn: cách một mặt phẳng, qua một điểm, giữa hai mặt phẳng, qua các đường hoặc điểm, tiếp xúc với mặt cong, hoặc vuông góc với đường dẫn. Dùng khi bạn biết các tham chiếu nhưng không biết phương pháp.",
"help.construct.point": "Tạo điểm dựng theo phương pháp phù hợp với những gì bạn chọn: tại đỉnh, tại tâm đường tròn hoặc mặt cầu, dọc theo cạnh, nơi hai đường hoặc ba mặt phẳng giao nhau, hoặc nơi một đường cắt mặt phẳng. Dùng khi bạn biết các tham chiếu nhưng không biết phương pháp.",
"ui.construct_auto.chosen": "Đã chọn phương pháp theo lựa chọn của bạn. Chọn thêm hoặc bỏ một tham chiếu để đổi phương pháp.",
"ui.construct_auto.no_fit": "Hãy chọn tham chiếu khác: không phương pháp nào dựng được từ các tham chiếu này.",
"ui.construct_auto.pick": "Chọn những gì để dựng: phương pháp theo lựa chọn của bạn.",
"ui.construct_auto.refs": "Tham chiếu",
"ui.construct_auto.select": "Hãy chọn tham chiếu để dựng trước"
}
}
@@ -1,58 +0,0 @@
{
"en": {
"ui.construct_planes": "Planes",
"ui.construct_axes": "Axes",
"ui.construct_points": "Points",
"prefs.construct_menu_groups": "Group Construct tools by entity type",
"prefs.construct_menu_groups_help": "Show Planes, Axes and Points headings. Off keeps the original menu order."
},
"ar": {
"ui.construct_planes": "المستويات",
"ui.construct_axes": "المحاور",
"ui.construct_points": "النقاط",
"prefs.construct_menu_groups": "تجميع أدوات الإنشاء حسب نوع العنصر",
"prefs.construct_menu_groups_help": "إظهار عناوين المستويات والمحاور والنقاط. يحافظ التعطيل على ترتيب القائمة الأصلي."
},
"he": {
"ui.construct_planes": "מישורים",
"ui.construct_axes": "צירים",
"ui.construct_points": "נקודות",
"prefs.construct_menu_groups": "קיבוץ כלי הבנייה לפי סוג ישות",
"prefs.construct_menu_groups_help": "הצגת כותרות מישורים, צירים ונקודות. כיבוי שומר על סדר התפריט המקורי."
},
"ja": {
"ui.construct_planes": "平面",
"ui.construct_axes": "軸",
"ui.construct_points": "点",
"prefs.construct_menu_groups": "構築ツールを要素の種類でグループ化",
"prefs.construct_menu_groups_help": "平面、軸、点の見出しを表示します。オフにすると元のメニュー順序を維持します。"
},
"zh": {
"ui.construct_planes": "平面",
"ui.construct_axes": "轴",
"ui.construct_points": "点",
"prefs.construct_menu_groups": "按实体类型分组构造工具",
"prefs.construct_menu_groups_help": "显示平面、轴和点标题。关闭时保留原始菜单顺序。"
},
"de": {
"ui.construct_planes": "Ebenen",
"ui.construct_axes": "Achsen",
"ui.construct_points": "Punkte",
"prefs.construct_menu_groups": "Konstruktionswerkzeuge nach Elementtyp gruppieren",
"prefs.construct_menu_groups_help": "Zeigt Überschriften für Ebenen, Achsen und Punkte. Aus behält die ursprüngliche Menüreihenfolge bei."
},
"ko": {
"ui.construct_planes": "평면",
"ui.construct_axes": "축",
"ui.construct_points": "점",
"prefs.construct_menu_groups": "요소 유형별로 구성 도구 그룹화",
"prefs.construct_menu_groups_help": "평면, 축, 점 제목을 표시합니다. 끄면 원래 메뉴 순서를 유지합니다."
},
"vi": {
"ui.construct_planes": "Các mặt phẳng",
"ui.construct_axes": "Các trục",
"ui.construct_points": "Các điểm",
"prefs.construct_menu_groups": "Nhóm công cụ dựng theo loại đối tượng",
"prefs.construct_menu_groups_help": "Hiện tiêu đề Mặt phẳng, Trục và Điểm. Tắt để giữ thứ tự menu ban đầu."
}
}
@@ -1,22 +0,0 @@
{
"ar": {
"ui.construction.axis_hint": "خط إنشائي: انقر نقطة، أو أدخل بعدها عن محور الرسم",
"ui.construction.parallel_hint": "خط إنشائي: اختر خطًا مستقيمًا ثم انقر أو أدخل الإزاحة؛ انقر بزر الفأرة الأيمن لتغيير المرجع"
},
"he": {
"ui.construction.axis_hint": "ישר עזר: לחיצה על נקודה, או הקלדת המרחק מציר הסקיצה",
"ui.construction.parallel_hint": "ישר עזר: בחירת ישר, ואז לחיצה או הקלדת ההיסט; לחיצה ימנית להחלפת הייחוס"
},
"ja": {
"ui.construction.axis_hint": "補助直線: 点をクリックするか、スケッチ軸からの距離を入力",
"ui.construction.parallel_hint": "補助直線: 直線を選択し、クリックするかオフセットを入力。右クリックで参照を変更"
},
"vi": {
"ui.construction.axis_hint": "Đường dựng hình: nhấp một điểm, hoặc nhập khoảng cách tới trục phác thảo",
"ui.construction.parallel_hint": "Đường dựng hình: chọn đường thẳng, rồi nhấp hoặc nhập khoảng dời; nhấp chuột phải để đổi tham chiếu"
},
"zh": {
"ui.construction.axis_hint": "构造直线:单击一点,或输入它到草图轴的距离",
"ui.construction.parallel_hint": "构造直线:先选直线,再单击或输入偏移;右键单击更换参照"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"prefs.dialog_first_letter_buttons": "Dialog buttons answer their first letter",
"prefs.dialog_first_letter_buttons_help": "With a dialog open, typing the first letter of a button's label presses it: O for OK, C for Cancel. A letter that fits two buttons does nothing, and a focused text field keeps the keystroke. Off: typing does nothing to the buttons, as before."
},
"ar": {
"prefs.dialog_first_letter_buttons": "أزرار نوافذ الحوار تستجيب لحرفها الأول",
"prefs.dialog_first_letter_buttons_help": "عند فتح نافذة حوار، كتابة الحرف الأول من تسمية الزر تضغطه: حرف «ا» يضغط زر «إلغاء» مثلًا. الحرف الذي يناسب زرَّين لا يفعل شيئًا، وحقل النص المركَّز عليه يحتفظ بالتضغطة. عند الإيقاف: الكتابة لا تفعل شيئًا للأزرار، كما كان سابقًا."
},
"de": {
"prefs.dialog_first_letter_buttons": "Dialogschaltflächen reagieren auf ihren Anfangsbuchstaben",
"prefs.dialog_first_letter_buttons_help": "Ist ein Dialog geöffnet, drückt der Anfangsbuchstabe einer Beschriftung die zugehörige Schaltfläche: O für OK, A für Abbrechen. Ein Buchstabe, der zu zwei Schaltflächen passt, tut nichts, und ein fokussiertes Textfeld behält die Tasteneingabe. Aus: Eingaben drücken keine Schaltfläche, wie bisher."
},
"he": {
"prefs.dialog_first_letter_buttons": "כפתורי תיבות דו-שיח נענים לאות הראשונה שלהם",
"prefs.dialog_first_letter_buttons_help": "כשתיבת דו-שיח פתוחה, הקלדת האות הראשונה של שם הכפתור לוחצת עליו: האות «ב» לוחצת על «ביטול», למשל. אות שמתאימה לשני כפתורים אינה עושה דבר, ושדה טקסט שבו נמצא הסמן שומר את ההקלדה. כבוי: הקלדה אינה משפיעה על הכפתורים, כמו קודם."
},
"ja": {
"prefs.dialog_first_letter_buttons": "ダイアログのボタンはラベルの先頭文字で押せる",
"prefs.dialog_first_letter_buttons_help": "ダイアログが開いているとき、ボタンのラベルの先頭文字を入力するとそのボタンが押されます:「キ」で「キャンセル」など。2 つのボタンに当てはまる文字は何もしません。フォーカス中のテキストフィールドはそのまま入力を受け取ります。オフ:従来どおり、入力ではボタンは押されません。"
},
"ko": {
"prefs.dialog_first_letter_buttons": "다이얼로그 단추가 첫 글자에 반응",
"prefs.dialog_first_letter_buttons_help": "다이얼로그가 열려 있을 때 단추 레이블의 첫 글자를 입력하면 그 단추를 누릅니다: 예를 들어 「ㅊ」은 「취소」를 누릅니다. 두 단추에 모두 해당하는 글자는 아무 동작을 하지 않으며, 포커스된 텍스트 필드는 입력을 그대로 받습니다. 끔: 기존처럼 입력이 단추에 영향을 주지 않습니다."
},
"vi": {
"prefs.dialog_first_letter_buttons": "Nút trong hộp thoại trả lời chữ cái đầu của nhãn",
"prefs.dialog_first_letter_buttons_help": "Khi một hộp thoại đang mở, gõ chữ cái đầu của nhãn một nút sẽ bấm nút đó: chữ H bấm nút Hủy bỏ, chẳng hạn. Một chữ khớp với hai nút không thực hiện gì, và trường văn bản đang tiêu điểm giữ lại phím gõ. Tắt: gõ phím không bấm nút, như trước đây."
},
"zh": {
"prefs.dialog_first_letter_buttons": "对话框按钮响应其首字母",
"prefs.dialog_first_letter_buttons_help": "打开对话框时,按下按钮标签的首字母即可触发该按钮:如“取”对应“取消”。一个字母若匹配两个按钮则不起作用,获得焦点的文本框保留按键输入。关闭时:按键不影响按钮,与以前相同。"
}
}
@@ -1,74 +0,0 @@
{
"en": {
"prefs.export": "Export",
"prefs.export_name": "Export file name",
"prefs.export_name.body": "Exported body's name (the first one when there are several)",
"prefs.export_name.design": "Design name",
"prefs.export_name_hint": "e.g. {design}-{body}",
"prefs.export_name_sample": "Exporting this design offers: {name}",
"prefs.export_name_tip": "The file name File › Export and Save As Mesh offer. These placeholders are replaced:\n{placeholders}\nA design property that is not set is left out. Leave the field empty to offer the design's name, or the body's for a mesh."
},
"ar": {
"prefs.export": "التصدير",
"prefs.export_name": "اسم ملف التصدير",
"prefs.export_name.body": "اسم الجسم المُصدَّر (الأول إن تعددت الأجسام)",
"prefs.export_name.design": "اسم التصميم",
"prefs.export_name_hint": "مثلًا {design}-{body}",
"prefs.export_name_sample": "تصدير هذا التصميم يقترح: {name}",
"prefs.export_name_tip": "اسم الملف الذي يقترحه «ملف › تصدير» و«حفظ كشبكة». تُستبدل هذه العناصر النائبة:\n{placeholders}\nتُحذف خاصية التصميم غير المعيّنة. اترك الحقل فارغًا لاقتراح اسم التصميم، أو اسم الجسم للشبكة."
},
"de": {
"prefs.export": "Export",
"prefs.export_name": "Dateiname beim Export",
"prefs.export_name.body": "Name des exportierten Körpers (des ersten, wenn es mehrere sind)",
"prefs.export_name.design": "Name des Designs",
"prefs.export_name_hint": "z. B. {design}-{body}",
"prefs.export_name_sample": "Beim Export dieses Designs vorgeschlagen: {name}",
"prefs.export_name_tip": "Der Dateiname, den Datei › Exportieren und Als Netz speichern vorschlagen. Diese Platzhalter werden ersetzt:\n{placeholders}\nEine nicht gesetzte Konstruktionseigenschaft entfällt. Leer lassen, um den Namen des Designs vorzuschlagen, bei einem Netz den des Körpers."
},
"he": {
"prefs.export": "ייצוא",
"prefs.export_name": "שם קובץ הייצוא",
"prefs.export_name.body": "שם הגוף המיוצא (הראשון כשיש כמה)",
"prefs.export_name.design": "שם התכן",
"prefs.export_name_hint": "לדוגמה {design}-{body}",
"prefs.export_name_sample": "ייצוא התכן הזה מציע: {name}",
"prefs.export_name_tip": "שם הקובץ שמציעים קובץ › ייצוא ושמירה כרשת משולשים. מצייני המיקום האלה מוחלפים:\n{placeholders}\nמאפיין תכן שלא הוגדר מושמט. השאירו את השדה ריק כדי להציע את שם התכן, או את שם הגוף לרשת."
},
"ja": {
"prefs.export": "エクスポート",
"prefs.export_name": "エクスポートのファイル名",
"prefs.export_name.body": "エクスポートするボディ名(複数ある場合は最初のボディ)",
"prefs.export_name.design": "デザイン名",
"prefs.export_name_hint": "例: {design}-{body}",
"prefs.export_name_sample": "このデザインのエクスポート時の名前: {name}",
"prefs.export_name_tip": "ファイル › エクスポートとメッシュとして保存が提案するファイル名です。次のプレースホルダーが置き換えられます:\n{placeholders}\n設定されていないデザインのプロパティは省かれます。空のままにすると、デザイン名(メッシュではボディ名)を提案します。"
},
"ko": {
"prefs.export": "내보내기",
"prefs.export_name": "내보내기 파일 이름",
"prefs.export_name.body": "내보내는 바디 이름(여러 개면 첫 번째 바디)",
"prefs.export_name.design": "디자인 이름",
"prefs.export_name_hint": "예: {design}-{body}",
"prefs.export_name_sample": "이 디자인을 내보낼 때 제안되는 이름: {name}",
"prefs.export_name_tip": "파일 › 내보내기와 메쉬로 저장이 제안하는 파일 이름입니다. 다음 자리 표시자가 바뀝니다:\n{placeholders}\n설정되지 않은 설계 속성은 빠집니다. 비워 두면 디자인 이름(메쉬의 경우 바디 이름)을 제안합니다."
},
"vi": {
"prefs.export": "Xuất",
"prefs.export_name": "Tên tệp khi xuất",
"prefs.export_name.body": "Tên khối được xuất (khối đầu tiên nếu có nhiều)",
"prefs.export_name.design": "Tên thiết kế",
"prefs.export_name_hint": "vd. {design}-{body}",
"prefs.export_name_sample": "Xuất thiết kế này sẽ đề xuất: {name}",
"prefs.export_name_tip": "Tên tệp mà Tệp › Xuất tệp và Lưu dưới dạng lưới đa giác đề xuất. Các phần giữ chỗ này được thay thế:\n{placeholders}\nThuộc tính thiết kế chưa đặt sẽ bị bỏ qua. Để trống để đề xuất tên thiết kế, hoặc tên khối với lưới."
},
"zh": {
"prefs.export": "导出",
"prefs.export_name": "导出文件名",
"prefs.export_name.body": "导出实体的名称(有多个时取第一个)",
"prefs.export_name.design": "设计名称",
"prefs.export_name_hint": "例如 {design}-{body}",
"prefs.export_name_sample": "导出此设计时建议的名称:{name}",
"prefs.export_name_tip": "文件 › 导出和另存为网格时建议的文件名。以下占位符会被替换:\n{placeholders}\n未设置的设计属性会被省略。留空则建议设计名称,网格则建议实体名称。"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"ui.export_selects_only_body": "Select the only body when exporting a mesh",
"ui.export_selects_only_body_tip": "Export STL, Export 3MF and Send to Slicer start with the design's body selected when it has just one."
},
"de": {
"ui.export_selects_only_body": "Einzigen Körper beim Mesh-Export auswählen",
"ui.export_selects_only_body_tip": "Als STL exportieren, Als 3MF exportieren und An Slicer senden starten mit dem Körper des Designs ausgewählt, wenn es nur einen hat."
},
"ar": {
"ui.export_selects_only_body": "تحديد الجسم الوحيد عند تصدير شبكة",
"ui.export_selects_only_body_tip": "تبدأ أوامر تصدير STL وتصدير 3MF والإرسال إلى برنامج التقطيع بتحديد جسم التصميم عندما لا يحتوي إلا على جسم واحد."
},
"he": {
"ui.export_selects_only_body": "בחירת הגוף היחיד בייצוא רשת",
"ui.export_selects_only_body_tip": "ייצוא STL, ייצוא 3MF ושליחה לסלייסר מתחילים כשגוף התכנון כבר נבחר, כשיש בו גוף אחד בלבד."
},
"ja": {
"ui.export_selects_only_body": "メッシュのエクスポート時に唯一のボディを選択する",
"ui.export_selects_only_body_tip": "デザインのボディが 1 つだけのとき、STL をエクスポート、3MF をエクスポート、スライサーに送るはそのボディを選択した状態で始まります。"
},
"ko": {
"ui.export_selects_only_body": "메시 내보내기 시 유일한 바디 선택",
"ui.export_selects_only_body_tip": "디자인에 바디가 하나뿐이면 STL 내보내기, 3MF 내보내기, 슬라이서로 보내기가 그 바디를 선택한 상태로 시작합니다."
},
"vi": {
"ui.export_selects_only_body": "Chọn khối duy nhất khi xuất lưới",
"ui.export_selects_only_body_tip": "Xuất tệp STL, Xuất tệp 3MF và Gửi sang phần mềm cắt lớp bắt đầu với khối của thiết kế đã được chọn khi thiết kế chỉ có một khối."
},
"zh": {
"ui.export_selects_only_body": "导出网格时选中唯一的实体",
"ui.export_selects_only_body_tip": "设计只有一个实体时,导出 STL、导出 3MF 和发送到切片软件会在打开时选中该实体。"
}
}
@@ -1,50 +0,0 @@
{
"en": {
"file_load.opened_behind": "{name} opened in a new tab",
"operations.waiting": "Ready",
"prefs.file_operations_wait": "Wait for files to open",
"prefs.file_operations_wait_note": "While a file opens or is inserted, or links are read again, the design waits behind a card with the file's progress and Cancel. Off: the file shows in the operations panel and you can keep working; an insert lands once you finish what you are doing, and a file opened meanwhile goes in a new tab."
},
"de": {
"file_load.opened_behind": "{name} in einem neuen Tab geöffnet",
"operations.waiting": "Bereit",
"prefs.file_operations_wait": "Auf das Öffnen von Dateien warten",
"prefs.file_operations_wait_note": "Während eine Datei geöffnet oder eingefügt wird oder Verknüpfungen neu gelesen werden, wartet die Konstruktion hinter einer Karte mit dem Fortschritt und Abbrechen. Aus: Die Datei erscheint im Vorgangsbereich und Sie können weiterarbeiten; ein Einfügen wird übernommen, sobald Sie fertig sind, und eine inzwischen geöffnete Datei kommt in einen neuen Tab."
},
"ja": {
"file_load.opened_behind": "{name} を新しいタブで開きました",
"operations.waiting": "準備完了",
"prefs.file_operations_wait": "ファイルを開く間は待つ",
"prefs.file_operations_wait_note": "ファイルを開く・挿入する・リンクを読み直す間、デザインは進行状況とキャンセルを示すカードの後ろで待機します。オフ:ファイルは処理パネルに表示され、作業を続けられます。挿入は作業が終わってから反映され、その間に開いたファイルは新しいタブに入ります。"
},
"ko": {
"file_load.opened_behind": "{name}을(를) 새 탭에서 열었습니다",
"operations.waiting": "준비됨",
"prefs.file_operations_wait": "파일이 열릴 때까지 기다리기",
"prefs.file_operations_wait_note": "파일을 열거나 삽입하거나 링크를 다시 읽는 동안 디자인이 진행 상황과 취소가 있는 카드 뒤에서 기다립니다. 끄면: 파일이 작업 패널에 표시되고 계속 작업할 수 있습니다. 삽입은 하던 작업을 마친 뒤 반영되고, 그 사이에 연 파일은 새 탭에 열립니다."
},
"zh": {
"file_load.opened_behind": "已在新标签页中打开{name}",
"operations.waiting": "就绪",
"prefs.file_operations_wait": "等待文件打开",
"prefs.file_operations_wait_note": "打开或插入文件、重新读取链接时,设计会在显示进度和取消按钮的卡片后等待。关闭:文件显示在操作面板中,您可以继续工作;插入会在您完成当前操作后生效,期间打开的文件会放在新标签页中。"
},
"ar": {
"file_load.opened_behind": "فُتح {name} في علامة تبويب جديدة",
"operations.waiting": "جاهز",
"prefs.file_operations_wait": "انتظار فتح الملفات",
"prefs.file_operations_wait_note": "أثناء فتح ملف أو إدراجه أو إعادة قراءة الروابط، ينتظر التصميم خلف بطاقة تعرض التقدم وزر الإلغاء. عند الإيقاف: يظهر الملف في لوحة العمليات ويمكنك متابعة العمل؛ يُطبَّق الإدراج بعد أن تنتهي مما تفعله، ويُفتح الملف المفتوح في الأثناء في علامة تبويب جديدة."
},
"he": {
"file_load.opened_behind": "{name} נפתח בכרטיסייה חדשה",
"operations.waiting": "מוכן",
"prefs.file_operations_wait": "המתנה לפתיחת קבצים",
"prefs.file_operations_wait_note": "בזמן שקובץ נפתח או מוכנס, או שקישורים נקראים מחדש, התכנון ממתין מאחורי כרטיס עם ההתקדמות וביטול. כבוי: הקובץ מוצג בחלונית הפעולות ואפשר להמשיך לעבוד; הוספה נכנסת לאחר שתסיימו את מה שאתם עושים, וקובץ שנפתח בינתיים נפתח בכרטיסייה חדשה."
},
"vi": {
"file_load.opened_behind": "Đã mở {name} trong thẻ mới",
"operations.waiting": "Sẵn sàng",
"prefs.file_operations_wait": "Chờ tệp mở xong",
"prefs.file_operations_wait_note": "Khi một tệp đang mở, đang chèn hoặc các liên kết được đọc lại, thiết kế chờ sau một thẻ hiện tiến độ và nút Hủy. Tắt: tệp hiện trong bảng thao tác và bạn có thể tiếp tục làm việc; phần chèn được áp dụng khi bạn làm xong việc đang làm, và tệp mở trong lúc đó được đặt vào thẻ mới."
}
}
@@ -1,34 +0,0 @@
{
"ar": {
"prefs.fillet_legacy_radius": "استخدام نصف القطر الافتراضي السابق للتقويس المصمت",
"prefs.fillet_legacy_radius.help": "معطّل افتراضيًا. عند التفعيل، يفتح التقويس المصمت الجديد على الرقم 2 مقروءًا بوحدات التصميم («2 بوصة» في تصميم بالبوصة)، كما كان سابقًا؛ وعند الإيقاف، يفتح على نصف القطر الافتراضي للأداة، 2 مم، معروضًا بوحدات التصميم («0.07874 بوصة» في تصميم بالبوصة)."
},
"de": {
"prefs.fillet_legacy_radius": "Den vorherigen Standardradius für Solid-Fillet verwenden",
"prefs.fillet_legacy_radius.help": "Standardmäßig aus. Ein: Ein neuer Solid-Fillet öffnet mit der in den Einheiten des Designs gelesenen Zahl 2 (\"2 in\" in einem Design in Zoll), wie zuvor; aus: Er öffnet mit dem Radius, mit dem das Werkzeug ausgeliefert wird, 2 mm, in den Einheiten des Designs angezeigt (\"0.07874 in\" in einem Design in Zoll)."
},
"en": {
"prefs.fillet_legacy_radius": "Use the previous Solid Fillet radius default",
"prefs.fillet_legacy_radius.help": "Off by default. When on, a new Solid Fillet opens at the number 2 read in the design's units (\"2 in\" in an inch design), as before; when off, it opens at the radius the tool ships with, 2 mm, shown in the design's units (\"0.07874 in\" in an inch design)."
},
"he": {
"prefs.fillet_legacy_radius": "השתמש בברירת המחדש הקודמת לרדיוס Fillet מוצק",
"prefs.fillet_legacy_radius.help": "כבוי כברירת מחדש. כשהוא פעיל, Solid Fillet חדש נפתח במספר 2 שנקרא ביחידות התכנון (\"2 אינץ\" בתכנון באינצ'ים), כמו קודם; כשהוא כבוי, הוא נפתח ברדיוס שבו הכלי נמסר, 2 מ\"מ, מוצג ביחידות התכנון (\"0.07874 אינץ\" בתכנון באינצ'ים)."
},
"ja": {
"prefs.fillet_legacy_radius": "以前のフィレット半径の既定値を使う",
"prefs.fillet_legacy_radius.help": "既定ではオフです。オンのとき:新しい Solid Fillet は設計の単位として読み取った数値 2(「2 in」)で始まり、以前と同じです。オフのとき:そのツールが標準で持つ半径 2 mm を設計の単位に換算した値(「0.07874 in」)で始まります。"
},
"ko": {
"prefs.fillet_legacy_radius": "이전 필렛 반지름 기본값 사용",
"prefs.fillet_legacy_radius.help": "기본적으로 꺼짐입니다. 켜면: 새 Solid Fillet은 설계 단위로 읽힌 숫자 2(\"2 in\")로 시작하며 이전과 같습니다. 끄면: 그 도구가 기본으로 제공하는 반지름 2 mm를 설계 단위로 표시한 값(\"0.07874 in\")으로 시작합니다."
},
"vi": {
"prefs.fillet_legacy_radius": "Dùng giá trị mặc định bán kính Fillet trước đây",
"prefs.fillet_legacy_radius.help": "Mặc định tắt. Khi bật: Solid Fillet mới bắt đầu với số 2 được đọc theo đơn vị của thiết kế (\"2 in\"), như trước; khi tắt: nó bắt đầu với bán kính mà công cụ được giao, 2 mm, hiển thị theo đơn vị của thiết kế (\"0.07874 in\")."
},
"zh": {
"prefs.fillet_legacy_radius": "使用之前的圆角半径默认值",
"prefs.fillet_legacy_radius.help": "默认关闭。开启时:新的 Solid Fillet 以按设计单位读取的数字 2(\"2 in\")开始,与之前相同。关闭时:它以该工具自带的半径 2 mm 开始,并按设计的单位显示(\"0.07874 in\")。"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"ui.first_dimension_scales_about_origin": "Scale about the sketch origin",
"ui.first_dimension_scales_about_origin_tip": "On: the drawing always grows or shrinks about the sketch origin, so a shape drawn away from the origin moves. Off: a drawing that nothing ties to the origin scales about its own middle and stays where it was drawn."
},
"ar": {
"ui.first_dimension_scales_about_origin": "تغيير المقياس حول أصل الرسم",
"ui.first_dimension_scales_about_origin_tip": "عند التفعيل: يكبر المرسوم أو يصغر دائمًا حول أصل الرسم، فإذا كان الشكل مرسومًا بعيدًا عن الأصل تحرّك. عند الإيقاف: المرسوم غير المرتبط بالأصل يتغير مقياسه حول منتصفه ويبقى حيث رُسم."
},
"de": {
"ui.first_dimension_scales_about_origin": "Um den Skizzenursprung skalieren",
"ui.first_dimension_scales_about_origin_tip": "Ein: Die Zeichnung wird immer um den Skizzenursprung vergrößert oder verkleinert, eine vom Ursprung entfernt gezeichnete Form verschiebt sich also. Aus: Eine Zeichnung, die nichts an den Ursprung bindet, wird um ihre eigene Mitte skaliert und bleibt an ihrem Platz."
},
"he": {
"ui.first_dimension_scales_about_origin": "שינוי קנה מידה סביב ראשית הסקיצה",
"ui.first_dimension_scales_about_origin_tip": "מופעל: הציור תמיד גדל או קטן סביב ראשית הסקיצה, כך שצורה שצוירה הרחק מהראשית זזה. כבוי: ציור שדבר אינו קושר לראשית משנה קנה מידה סביב מרכזו ונשאר במקומו."
},
"ja": {
"ui.first_dimension_scales_about_origin": "スケッチ原点を中心にスケールする",
"ui.first_dimension_scales_about_origin_tip": "オン: 図形は常にスケッチ原点を中心に拡大・縮小されるため、原点から離れて描いた図形は移動します。オフ: 原点に拘束されていない図形は自身の中心を基準にスケールし、描いた位置に留まります。"
},
"ko": {
"ui.first_dimension_scales_about_origin": "스케치 원점을 기준으로 배율 조정",
"ui.first_dimension_scales_about_origin_tip": "켜기: 도면이 항상 스케치 원점을 기준으로 커지거나 작아지므로 원점에서 떨어져 그린 도형은 이동합니다. 끄기: 원점에 묶이지 않은 도면은 자신의 중심을 기준으로 배율이 바뀌고 그린 자리에 그대로 있습니다."
},
"vi": {
"ui.first_dimension_scales_about_origin": "Co giãn quanh gốc phác thảo",
"ui.first_dimension_scales_about_origin_tip": "Bật: bản vẽ luôn phóng to hoặc thu nhỏ quanh gốc phác thảo, nên hình vẽ cách xa gốc sẽ di chuyển. Tắt: bản vẽ không gắn với gốc sẽ co giãn quanh tâm của chính nó và giữ nguyên vị trí."
},
"zh": {
"ui.first_dimension_scales_about_origin": "以草图原点为中心缩放",
"ui.first_dimension_scales_about_origin_tip": "开启:图形总是以草图原点为中心放大或缩小,因此远离原点绘制的形状会移动。关闭:未与原点关联的图形以其自身中心缩放,并保持在绘制的位置。"
}
}
-206
View File
@@ -1,206 +0,0 @@
{
"en": {
"cmd.frame_end_cap": "End Cap",
"error.end_cap_faces": "Pick at least one open end face of a frame member",
"error.end_cap_unresolved": "End {ends} of this cap is no longer on the model. Pick the end faces again",
"help.frame.end_cap": "Closes the open ends of frame members with plates shaped like the profile's outline. Use it to seal tubes, angles and beams, on top of the end or set into it.",
"ui.end_cap.chamfer": "Corner Chamfer",
"ui.end_cap.direction": "Direction",
"ui.end_cap.faces": "End Faces",
"ui.end_cap.inset": "Inset",
"ui.end_cap.inset_kind": "Inset By",
"ui.end_cap.inset_ratio": "Inset Ratio",
"ui.end_cap.inward": "Inward",
"ui.end_cap.length": "Length",
"ui.end_cap.outward": "Outward",
"ui.end_cap.ratio": "Ratio of thickness",
"ui.end_cap_title": "END CAP"
},
"ar": {
"cmd.frame_end_cap": "غطاء طرفي",
"error.end_cap_faces": "اختر وجهًا طرفيًا مفتوحًا واحدًا على الأقل لعضو إطار",
"error.end_cap_unresolved": "الطرف {ends} لهذا الغطاء لم يعد موجودًا في النموذج. اختر الأوجه الطرفية مرة أخرى",
"help.frame.end_cap": "يغلق الأطراف المفتوحة لأعضاء الإطار بألواح على شكل محيط المقطع. استخدمه لسد الأنابيب والزوايا والعوارض، فوق الطرف أو مغروسًا فيه.",
"ui.end_cap.chamfer": "شطف الزوايا",
"ui.end_cap.direction": "الاتجاه",
"ui.end_cap.faces": "الوجوه الطرفية",
"ui.end_cap.inset": "الإزاحة للداخل",
"ui.end_cap.inset_kind": "الإزاحة حسب",
"ui.end_cap.inset_ratio": "نسبة الإزاحة",
"ui.end_cap.inward": "للداخل",
"ui.end_cap.length": "الطول",
"ui.end_cap.outward": "للخارج",
"ui.end_cap.ratio": "نسبة من السماكة",
"ui.end_cap_title": "غطاء طرفي"
},
"de": {
"cmd.frame_end_cap": "Endkappe",
"error.end_cap_faces": "Mindestens eine offene Stirnfläche eines Rahmenelements auswählen",
"error.end_cap_unresolved": "Ende {ends} dieser Abdeckung ist nicht mehr im Modell. Stirnflächen erneut auswählen",
"help.frame.end_cap": "Schließt offene Enden von Rahmenelementen mit Platten in der Form des Profilumrisses. Damit verschließen Sie Rohre, Winkel und Träger, auf dem Ende oder darin eingelassen.",
"ui.end_cap.chamfer": "Eckfase",
"ui.end_cap.direction": "Richtung",
"ui.end_cap.faces": "Stirnflächen",
"ui.end_cap.inset": "Einzug",
"ui.end_cap.inset_kind": "Einzug als",
"ui.end_cap.inset_ratio": "Einzugsverhältnis",
"ui.end_cap.inward": "Nach innen",
"ui.end_cap.length": "Länge",
"ui.end_cap.outward": "Nach außen",
"ui.end_cap.ratio": "Anteil der Dicke",
"ui.end_cap_title": "ENDKAPPE"
},
"es": {
"cmd.frame_end_cap": "Tapa de extremo",
"error.end_cap_faces": "Selecciona al menos una cara de extremo abierta de un miembro",
"error.end_cap_unresolved": "El extremo {ends} de esta tapa ya no está en el modelo. Vuelve a seleccionar las caras de extremo",
"help.frame.end_cap": "Cierra los extremos abiertos de los miembros de una estructura con placas con la forma del contorno del perfil. Úsalo para tapar tubos, angulares y vigas, sobre el extremo o embutidas en él.",
"ui.end_cap.chamfer": "Chaflán de esquina",
"ui.end_cap.direction": "Dirección",
"ui.end_cap.faces": "Caras de extremo",
"ui.end_cap.inset": "Retranqueo",
"ui.end_cap.inset_kind": "Retranqueo por",
"ui.end_cap.inset_ratio": "Proporción de retranqueo",
"ui.end_cap.inward": "Hacia dentro",
"ui.end_cap.length": "Longitud",
"ui.end_cap.outward": "Hacia fuera",
"ui.end_cap.ratio": "Proporción del espesor",
"ui.end_cap_title": "TAPA DE EXTREMO"
},
"fr": {
"cmd.frame_end_cap": "Bouchon d'extrémité",
"error.end_cap_faces": "Sélectionnez au moins une face d'extrémité ouverte d'un élément de structure",
"error.end_cap_unresolved": "L'extrémité {ends} de ce bouchon n'est plus sur le modèle. Sélectionnez à nouveau les faces d'extrémité",
"help.frame.end_cap": "Ferme les extrémités ouvertes des éléments de structure avec des plaques à la forme du contour du profil. Utilisez-le pour boucher tubes, cornières et poutres, sur l'extrémité ou encastrées.",
"ui.end_cap.chamfer": "Chanfrein d'angle",
"ui.end_cap.direction": "Direction",
"ui.end_cap.faces": "Faces d'extrémité",
"ui.end_cap.inset": "Retrait",
"ui.end_cap.inset_kind": "Retrait en",
"ui.end_cap.inset_ratio": "Rapport de retrait",
"ui.end_cap.inward": "Vers l'intérieur",
"ui.end_cap.length": "Longueur",
"ui.end_cap.outward": "Vers l'extérieur",
"ui.end_cap.ratio": "Rapport de l'épaisseur",
"ui.end_cap_title": "BOUCHON D'EXTRÉMITÉ"
},
"he": {
"cmd.frame_end_cap": "מכסה קצה",
"error.end_cap_faces": "בחר לפחות פאת קצה פתוחה אחת של איבר מסגרת",
"error.end_cap_unresolved": "קצה {ends} של מכסה זה כבר אינו במודל. בחר שוב את פאות הקצה",
"help.frame.end_cap": "סוגר קצוות פתוחים של איברי מסגרת בלוחות בצורת קו המתאר של הפרופיל. השתמש בו כדי לאטום צינורות, זוויתנים וקורות, מעל הקצה או שקוע בו.",
"ui.end_cap.chamfer": "שיפוע פינות",
"ui.end_cap.direction": "כיוון",
"ui.end_cap.faces": "פאות קצה",
"ui.end_cap.inset": "היסט פנימה",
"ui.end_cap.inset_kind": "היסט לפי",
"ui.end_cap.inset_ratio": "יחס היסט",
"ui.end_cap.inward": "פנימה",
"ui.end_cap.length": "אורך",
"ui.end_cap.outward": "החוצה",
"ui.end_cap.ratio": "יחס מהעובי",
"ui.end_cap_title": "מכסה קצה"
},
"it": {
"cmd.frame_end_cap": "Tappo di estremità",
"error.end_cap_faces": "Seleziona almeno una faccia di estremità aperta di un elemento",
"error.end_cap_unresolved": "L'estremità {ends} di questa chiusura non è più nel modello. Seleziona di nuovo le facce di estremità",
"help.frame.end_cap": "Chiude le estremità aperte degli elementi con piastre sagomate sul contorno del profilo. Usalo per chiudere tubi, angolari e travi, sopra l'estremità o incassate.",
"ui.end_cap.chamfer": "Smusso degli angoli",
"ui.end_cap.direction": "Direzione",
"ui.end_cap.faces": "Facce di estremità",
"ui.end_cap.inset": "Rientro",
"ui.end_cap.inset_kind": "Rientro come",
"ui.end_cap.inset_ratio": "Rapporto di rientro",
"ui.end_cap.inward": "Verso l'interno",
"ui.end_cap.length": "Lunghezza",
"ui.end_cap.outward": "Verso l'esterno",
"ui.end_cap.ratio": "Rapporto dello spessore",
"ui.end_cap_title": "TAPPO DI ESTREMITÀ"
},
"ja": {
"cmd.frame_end_cap": "エンドキャップ",
"error.end_cap_faces": "フレーム部材の開いた端面を1つ以上選択してください",
"error.end_cap_unresolved": "このエンドキャップの端 {ends} はモデル上にありません。端面を選択し直してください",
"help.frame.end_cap": "フレーム部材の開いた端を、プロファイルの外形に沿ったプレートで閉じます。パイプ、アングル、梁の端をふさぐときに、端の上に載せるか端に埋め込んで使います。",
"ui.end_cap.chamfer": "角の面取り",
"ui.end_cap.direction": "方向",
"ui.end_cap.faces": "端面",
"ui.end_cap.inset": "内側オフセット",
"ui.end_cap.inset_kind": "オフセットの指定",
"ui.end_cap.inset_ratio": "オフセット比",
"ui.end_cap.inward": "内向き",
"ui.end_cap.length": "長さ",
"ui.end_cap.outward": "外向き",
"ui.end_cap.ratio": "厚さに対する比",
"ui.end_cap_title": "エンドキャップ"
},
"pt-BR": {
"cmd.frame_end_cap": "Tampa de extremidade",
"error.end_cap_faces": "Selecione pelo menos uma face de extremidade aberta de um membro",
"error.end_cap_unresolved": "A extremidade {ends} desta tampa não está mais no modelo. Selecione as faces de extremidade novamente",
"help.frame.end_cap": "Fecha as extremidades abertas dos membros com placas no formato do contorno do perfil. Use para tampar tubos, cantoneiras e vigas, sobre a extremidade ou embutidas nela.",
"ui.end_cap.chamfer": "Chanfro dos cantos",
"ui.end_cap.direction": "Direção",
"ui.end_cap.faces": "Faces de extremidade",
"ui.end_cap.inset": "Recuo",
"ui.end_cap.inset_kind": "Recuo por",
"ui.end_cap.inset_ratio": "Proporção de recuo",
"ui.end_cap.inward": "Para dentro",
"ui.end_cap.length": "Comprimento",
"ui.end_cap.outward": "Para fora",
"ui.end_cap.ratio": "Proporção da espessura",
"ui.end_cap_title": "TAMPA DE EXTREMIDADE"
},
"vi": {
"cmd.frame_end_cap": "Nắp đầu",
"error.end_cap_faces": "Chọn ít nhất một mặt đầu hở của một thanh khung",
"error.end_cap_unresolved": "Đầu {ends} của nắp này không còn trên mô hình. Hãy chọn lại các mặt đầu",
"help.frame.end_cap": "Đóng các đầu hở của thanh khung bằng tấm có hình đường bao của tiết diện. Dùng để bịt ống, thép góc và dầm, đặt lên đầu hoặc lắp chìm vào đầu.",
"ui.end_cap.chamfer": "Vát góc",
"ui.end_cap.direction": "Hướng",
"ui.end_cap.faces": "Mặt đầu",
"ui.end_cap.inset": "Thụt vào",
"ui.end_cap.inset_kind": "Thụt vào theo",
"ui.end_cap.inset_ratio": "Tỉ lệ thụt vào",
"ui.end_cap.inward": "Vào trong",
"ui.end_cap.length": "Chiều dài",
"ui.end_cap.outward": "Ra ngoài",
"ui.end_cap.ratio": "Tỉ lệ theo độ dày",
"ui.end_cap_title": "NẮP ĐẦU"
},
"zh": {
"cmd.frame_end_cap": "端盖",
"error.end_cap_faces": "请至少选择一个框架构件的开放端面",
"error.end_cap_unresolved": "此端盖的端 {ends} 已不在模型上。请重新选择端面",
"help.frame.end_cap": "用符合型材外形的板封闭框架构件的开放端。用于封住管材、角钢和梁的端部,可盖在端面上或嵌入端部。",
"ui.end_cap.chamfer": "角部倒角",
"ui.end_cap.direction": "方向",
"ui.end_cap.faces": "端面",
"ui.end_cap.inset": "内缩",
"ui.end_cap.inset_kind": "内缩方式",
"ui.end_cap.inset_ratio": "内缩比例",
"ui.end_cap.inward": "向内",
"ui.end_cap.length": "长度",
"ui.end_cap.outward": "向外",
"ui.end_cap.ratio": "厚度比例",
"ui.end_cap_title": "端盖"
},
"zh-TW": {
"cmd.frame_end_cap": "端蓋",
"error.end_cap_faces": "請至少選取一個框架構件的開放端面",
"error.end_cap_unresolved": "此端蓋的端 {ends} 已不在模型上。請重新選取端面",
"help.frame.end_cap": "以符合型材外形的板封閉框架構件的開放端。用於封住管材、角鋼與樑的端部,可蓋在端面上或嵌入端部。",
"ui.end_cap.chamfer": "角落倒角",
"ui.end_cap.direction": "方向",
"ui.end_cap.faces": "端面",
"ui.end_cap.inset": "內縮",
"ui.end_cap.inset_kind": "內縮方式",
"ui.end_cap.inset_ratio": "內縮比例",
"ui.end_cap.inward": "向內",
"ui.end_cap.length": "長度",
"ui.end_cap.outward": "向外",
"ui.end_cap.ratio": "厚度比例",
"ui.end_cap_title": "端蓋"
}
}
-10
View File
@@ -1,10 +0,0 @@
{
"en": { "ui.export_glb": "Export GLB" },
"ar": { "ui.export_glb": "تصدير GLB" },
"de": { "ui.export_glb": "Als GLB exportieren" },
"he": { "ui.export_glb": "ייצוא GLB" },
"ja": { "ui.export_glb": "GLB をエクスポート" },
"ko": { "ui.export_glb": "GLB 내보내기" },
"vi": { "ui.export_glb": "Xuất tệp GLB" },
"zh": { "ui.export_glb": "导出 GLB" }
}
@@ -1,155 +0,0 @@
{
"en": {
"prefs.graphics_api": "Graphics API",
"prefs.graphics_api_auto": "Automatic",
"prefs.graphics_api_help": "Choose the graphics API used to open SolidCraft. If the next start cannot open the window, the previous choice is restored.",
"prefs.graphics_api_override": "A launch override is controlling the graphics API. The saved choice will apply when SolidCraft is opened normally.",
"prefs.graphics_api_restart_note": "Applies after a restart. Unsaved designs are handled before closing.",
"prefs.graphics_api_restart_unavailable": "Restart SolidCraft to apply the saved graphics API.",
"prefs.graphics_api_running": "Current: {current}. Selected for next start: {selected}.",
"prefs.graphics_api_save_failed": "The graphics API choice could not be saved: {error}",
"prefs.graphics_api_start_failed": "The selected graphics API could not be prepared: {error}",
"prefs.graphics_api_start_reverted": "The previous start with {requested} did not open the window. SolidCraft restored {previous}.",
"prefs.graphics_api_unavailable": "Graphics API selection is available in the desktop app.",
"render.graphics_api_restart_vulkan": "Restart with Vulkan",
"render.graphics_api_restart_warning": "Changing graphics API restarts SolidCraft and asks you to save unsaved designs. If the new API cannot open the window, the previous choice is restored on the next start.",
"render.graphics_api_settings": "Graphics settings",
"render.graphics_api_vulkan_required": "GPU path tracing needs Vulkan in this session. Restart with Vulkan, or keep using a CPU image method."
},
"ar": {
"prefs.graphics_api": "واجهة برمجة تطبيقات الرسوميات",
"prefs.graphics_api_auto": "تلقائي",
"prefs.graphics_api_help": "اختر واجهة الرسوميات المستخدمة لفتح SolidCraft. إذا تعذّر فتح النافذة عند التشغيل التالي، فستُستعاد السابقة.",
"prefs.graphics_api_override": "يتحكم إعداد عند التشغيل في واجهة الرسوميات. سيُطبّق الاختيار المحفوظ عند فتح SolidCraft بالطريقة العادية.",
"prefs.graphics_api_restart_note": "يُطبّق بعد إعادة التشغيل. تُعالَج التصاميم غير المحفوظة قبل الإغلاق.",
"prefs.graphics_api_restart_unavailable": "أعد تشغيل SolidCraft لتطبيق واجهة الرسوميات المحفوظة.",
"prefs.graphics_api_running": "الحالية: {current}. المختارة للتشغيل التالي: {selected}.",
"prefs.graphics_api_save_failed": "تعذّر حفظ اختيار واجهة الرسوميات: {error}",
"prefs.graphics_api_start_failed": "تعذّر تجهيز واجهة الرسوميات المختارة: {error}",
"prefs.graphics_api_start_reverted": "لم يفتح التشغيل السابق باستخدام {requested} النافذة. استعاد SolidCraft الاختيار {previous}.",
"prefs.graphics_api_unavailable": "اختيار واجهة الرسوميات متاح في تطبيق سطح المكتب.",
"render.graphics_api_restart_vulkan": "إعادة التشغيل باستخدام Vulkan",
"render.graphics_api_restart_warning": "يؤدي تغيير واجهة الرسوميات إلى إعادة تشغيل SolidCraft ويطلب منك حفظ التصاميم غير المحفوظة. إذا تعذّر فتح النافذة بالواجهة الجديدة، فسيُستعاد الاختيار السابق عند التشغيل التالي.",
"render.graphics_api_settings": "إعدادات الرسوميات",
"render.graphics_api_vulkan_required": "يتطلب تتبّع المسارات بمعالج الرسوميات Vulkan في هذه الجلسة. أعد التشغيل باستخدام Vulkan، أو واصل استخدام طريقة صور بمعالج CPU."
},
"he": {
"prefs.graphics_api": "ממשק גרפי",
"prefs.graphics_api_auto": "אוטומטי",
"prefs.graphics_api_help": "בחרו את הממשק הגרפי המשמש לפתיחת SolidCraft. אם ההפעלה הבאה לא תצליח לפתוח את החלון, הבחירה הקודמת תשוחזר.",
"prefs.graphics_api_override": "הגדרת הפעלה עוקפת קובעת את הממשק הגרפי. הבחירה השמורה תחול כאשר SolidCraft ייפתח כרגיל.",
"prefs.graphics_api_restart_note": "חל לאחר הפעלה מחדש. עיצובים שלא נשמרו יטופלו לפני הסגירה.",
"prefs.graphics_api_restart_unavailable": "הפעילו מחדש את SolidCraft כדי להחיל את הממשק הגרפי השמור.",
"prefs.graphics_api_running": "נוכחי: {current}. נבחר להפעלה הבאה: {selected}.",
"prefs.graphics_api_save_failed": "לא ניתן לשמור את בחירת הממשק הגרפי: {error}",
"prefs.graphics_api_start_failed": "לא ניתן להכין את הממשק הגרפי שנבחר: {error}",
"prefs.graphics_api_start_reverted": "ההפעלה הקודמת עם {requested} לא פתחה את החלון. SolidCraft שחזר את {previous}.",
"prefs.graphics_api_unavailable": "בחירת ממשק גרפי זמינה ביישום שולחן העבודה.",
"render.graphics_api_restart_vulkan": "הפעלה מחדש עם Vulkan",
"render.graphics_api_restart_warning": "שינוי הממשק הגרפי מפעיל מחדש את SolidCraft ומבקש לשמור עיצובים שלא נשמרו. אם הממשק החדש לא יצליח לפתוח את החלון, הבחירה הקודמת תשוחזר בהפעלה הבאה.",
"render.graphics_api_settings": "הגדרות גרפיקה",
"render.graphics_api_vulkan_required": "מעקב נתיבים ב־GPU דורש Vulkan בהפעלה זו. הפעילו מחדש עם Vulkan, או המשיכו להשתמש בשיטת תמונה ב־CPU."
},
"ja": {
"prefs.graphics_api": "グラフィックスAPI",
"prefs.graphics_api_auto": "自動",
"prefs.graphics_api_help": "SolidCraftの起動に使用するグラフィックスAPIを選択します。次回起動時にウィンドウを開けなかった場合は、以前の選択に戻ります。",
"prefs.graphics_api_override": "起動時の上書き設定がグラフィックスAPIを指定しています。SolidCraftを通常どおり開くと、保存した選択が適用されます。",
"prefs.graphics_api_restart_note": "再起動後に適用されます。閉じる前に未保存のデザインを確認します。",
"prefs.graphics_api_restart_unavailable": "保存したグラフィックスAPIを適用するには、SolidCraftを再起動してください。",
"prefs.graphics_api_running": "現在: {current}。次回起動時の選択: {selected}。",
"prefs.graphics_api_save_failed": "グラフィックスAPIの選択を保存できませんでした: {error}",
"prefs.graphics_api_start_failed": "選択したグラフィックスAPIを準備できませんでした: {error}",
"prefs.graphics_api_start_reverted": "前回は{requested}でウィンドウを開けませんでした。SolidCraftは{previous}に戻しました。",
"prefs.graphics_api_unavailable": "グラフィックスAPIの選択はデスクトップアプリで利用できます。",
"render.graphics_api_restart_vulkan": "Vulkanで再起動",
"render.graphics_api_restart_warning": "グラフィックスAPIを変更するとSolidCraftが再起動し、未保存のデザインの保存を確認します。新しいAPIでウィンドウを開けない場合は、次回起動時に以前の選択に戻ります。",
"render.graphics_api_settings": "グラフィックス設定",
"render.graphics_api_vulkan_required": "このセッションでGPUパストレーシングを使用するにはVulkanが必要です。Vulkanで再起動するか、CPUの画像方式を引き続き使用してください。"
},
"vi": {
"prefs.graphics_api": "API đồ họa",
"prefs.graphics_api_auto": "Tự động",
"prefs.graphics_api_help": "Chọn API đồ họa dùng để mở SolidCraft. Nếu lần khởi động tiếp theo không mở được cửa sổ, lựa chọn trước sẽ được khôi phục.",
"prefs.graphics_api_override": "Một thiết lập ghi đè khi khởi chạy đang điều khiển API đồ họa. Lựa chọn đã lưu sẽ áp dụng khi mở SolidCraft bình thường.",
"prefs.graphics_api_restart_note": "Áp dụng sau khi khởi động lại. Các thiết kế chưa lưu được xử lý trước khi đóng.",
"prefs.graphics_api_restart_unavailable": "Khởi động lại SolidCraft để áp dụng API đồ họa đã lưu.",
"prefs.graphics_api_running": "Hiện tại: {current}. Đã chọn cho lần khởi động tiếp theo: {selected}.",
"prefs.graphics_api_save_failed": "Không thể lưu lựa chọn API đồ họa: {error}",
"prefs.graphics_api_start_failed": "Không thể chuẩn bị API đồ họa đã chọn: {error}",
"prefs.graphics_api_start_reverted": "Lần khởi động trước với {requested} không mở được cửa sổ. SolidCraft đã khôi phục {previous}.",
"prefs.graphics_api_unavailable": "Có thể chọn API đồ họa trong ứng dụng máy tính.",
"render.graphics_api_restart_vulkan": "Khởi động lại với Vulkan",
"render.graphics_api_restart_warning": "Đổi API đồ họa sẽ khởi động lại SolidCraft và yêu cầu lưu các thiết kế chưa lưu. Nếu API mới không mở được cửa sổ, lựa chọn trước sẽ được khôi phục ở lần khởi động tiếp theo.",
"render.graphics_api_settings": "Cài đặt đồ họa",
"render.graphics_api_vulkan_required": "Truy vết đường đi bằng GPU cần Vulkan trong phiên này. Khởi động lại với Vulkan hoặc tiếp tục dùng phương pháp tạo ảnh bằng CPU."
},
"zh": {
"prefs.graphics_api": "图形 API",
"prefs.graphics_api_auto": "自动",
"prefs.graphics_api_help": "选择用于启动 SolidCraft 的图形 API。如果下次启动无法打开窗口,将恢复之前的选择。",
"prefs.graphics_api_override": "启动覆盖设置正在控制图形 API。正常打开 SolidCraft 时将应用已保存的选择。",
"prefs.graphics_api_restart_note": "重启后生效。关闭前会处理未保存的设计。",
"prefs.graphics_api_restart_unavailable": "重启 SolidCraft 以应用已保存的图形 API。",
"prefs.graphics_api_running": "当前:{current}。下次启动的选择:{selected}。",
"prefs.graphics_api_save_failed": "无法保存图形 API 选择:{error}",
"prefs.graphics_api_start_failed": "无法准备所选图形 API:{error}",
"prefs.graphics_api_start_reverted": "上次使用 {requested} 启动时未能打开窗口。SolidCraft 已恢复为 {previous}。",
"prefs.graphics_api_unavailable": "图形 API 选择功能可在桌面应用中使用。",
"render.graphics_api_restart_vulkan": "使用 Vulkan 重启",
"render.graphics_api_restart_warning": "更改图形 API 将重启 SolidCraft,并提示保存未保存的设计。如果新 API 无法打开窗口,下次启动时将恢复之前的选择。",
"render.graphics_api_settings": "图形设置",
"render.graphics_api_vulkan_required": "本次会话的 GPU 路径追踪需要 Vulkan。请使用 Vulkan 重启,或继续使用 CPU 图像方式。"
},
"de": {
"prefs.graphics_api": "Grafik-API",
"prefs.graphics_api_auto": "Automatisch",
"prefs.graphics_api_help": "Wählen Sie die Grafik-API zum Starten von SolidCraft. Wenn sich beim nächsten Start kein Fenster öffnen lässt, wird die vorherige Auswahl wiederhergestellt.",
"prefs.graphics_api_override": "Eine Startvorgabe bestimmt die Grafik-API. Die gespeicherte Auswahl gilt, wenn SolidCraft normal geöffnet wird.",
"prefs.graphics_api_restart_note": "Gilt nach einem Neustart. Ungespeicherte Entwürfe werden vor dem Schließen berücksichtigt.",
"prefs.graphics_api_restart_unavailable": "Starten Sie SolidCraft neu, um die gespeicherte Grafik-API anzuwenden.",
"prefs.graphics_api_running": "Aktuell: {current}. Für den nächsten Start ausgewählt: {selected}.",
"prefs.graphics_api_save_failed": "Die Auswahl der Grafik-API konnte nicht gespeichert werden: {error}",
"prefs.graphics_api_start_failed": "Die ausgewählte Grafik-API konnte nicht vorbereitet werden: {error}",
"prefs.graphics_api_start_reverted": "Der vorherige Start mit {requested} konnte kein Fenster öffnen. SolidCraft hat {previous} wiederhergestellt.",
"prefs.graphics_api_unavailable": "Die Grafik-API kann in der Desktop-App ausgewählt werden.",
"render.graphics_api_restart_vulkan": "Mit Vulkan neu starten",
"render.graphics_api_restart_warning": "Ein Wechsel der Grafik-API startet SolidCraft neu und fragt nach dem Speichern ungespeicherter Entwürfe. Wenn die neue API kein Fenster öffnen kann, wird beim nächsten Start die vorherige Auswahl wiederhergestellt.",
"render.graphics_api_settings": "Grafikeinstellungen",
"render.graphics_api_vulkan_required": "GPU-Pathtracing benötigt Vulkan in dieser Sitzung. Starten Sie mit Vulkan neu oder verwenden Sie weiterhin ein CPU-Bildverfahren."
},
"ko": {
"prefs.graphics_api": "그래픽 API",
"prefs.graphics_api_auto": "자동",
"prefs.graphics_api_help": "SolidCraft를 시작할 그래픽 API를 선택합니다. 다음 시작에서 창을 열지 못하면 이전 선택으로 복원됩니다.",
"prefs.graphics_api_override": "시작 시 재정의 설정이 그래픽 API를 제어하고 있습니다. SolidCraft를 일반적인 방법으로 열면 저장된 선택이 적용됩니다.",
"prefs.graphics_api_restart_note": "다시 시작한 후 적용됩니다. 닫기 전에 저장하지 않은 설계를 처리합니다.",
"prefs.graphics_api_restart_unavailable": "저장된 그래픽 API를 적용하려면 SolidCraft를 다시 시작하세요.",
"prefs.graphics_api_running": "현재: {current}. 다음 시작 시 선택: {selected}.",
"prefs.graphics_api_save_failed": "그래픽 API 선택을 저장할 수 없습니다: {error}",
"prefs.graphics_api_start_failed": "선택한 그래픽 API를 준비할 수 없습니다: {error}",
"prefs.graphics_api_start_reverted": "{requested}을(를) 사용한 이전 시작에서 창을 열지 못했습니다. SolidCraft가 {previous}(으)로 복원했습니다.",
"prefs.graphics_api_unavailable": "그래픽 API는 데스크톱 앱에서 선택할 수 있습니다.",
"render.graphics_api_restart_vulkan": "Vulkan으로 다시 시작",
"render.graphics_api_restart_warning": "그래픽 API를 변경하면 SolidCraft가 다시 시작되고 저장하지 않은 설계를 저장할지 묻습니다. 새 API로 창을 열지 못하면 다음 시작에서 이전 선택으로 복원됩니다.",
"render.graphics_api_settings": "그래픽 설정",
"render.graphics_api_vulkan_required": "이 세션의 GPU 경로 추적에는 Vulkan이 필요합니다. Vulkan으로 다시 시작하거나 CPU 이미지 방식을 계속 사용하세요."
},
"es": {
"prefs.graphics_api": "API gráfica",
"prefs.graphics_api_auto": "Automático",
"prefs.graphics_api_help": "Elige la API gráfica usada para abrir SolidCraft. Si el próximo inicio no puede abrir la ventana, se restaurará la selección anterior.",
"prefs.graphics_api_override": "Una configuración de arranque está imponiendo la API gráfica. La selección guardada se aplicará al abrir SolidCraft de forma normal.",
"prefs.graphics_api_restart_note": "Se aplica después de reiniciar. Antes de cerrar se revisan los diseños sin guardar.",
"prefs.graphics_api_restart_unavailable": "Reinicia SolidCraft para aplicar la API gráfica guardada.",
"prefs.graphics_api_running": "Actual: {current}. Seleccionada para el próximo inicio: {selected}.",
"prefs.graphics_api_save_failed": "No se pudo guardar la selección de API gráfica: {error}",
"prefs.graphics_api_start_failed": "No se pudo preparar la API gráfica seleccionada: {error}",
"prefs.graphics_api_start_reverted": "El inicio anterior con {requested} no abrió la ventana. SolidCraft ha restaurado {previous}.",
"prefs.graphics_api_unavailable": "La selección de API gráfica está disponible en la aplicación de escritorio.",
"render.graphics_api_restart_vulkan": "Reiniciar con Vulkan",
"render.graphics_api_restart_warning": "Cambiar la API gráfica reinicia SolidCraft y te pide guardar los diseños sin guardar. Si la nueva API no puede abrir la ventana, se restaurará la selección anterior en el próximo inicio.",
"render.graphics_api_settings": "Ajustes gráficos",
"render.graphics_api_vulkan_required": "El trazado de trayectorias por GPU necesita Vulkan en esta sesión. Reinicia con Vulkan o sigue usando un método de imagen por CPU."
}
}
@@ -1,34 +0,0 @@
{
"ar": {
"prefs.history_steps_component": "خطوات السجل حسب المكوّن",
"prefs.history_steps_component_note": "عندما يكون مكوّن نشطًا أو محددًا، تتنقل عناصر تحكم السجل بين ميزات ذلك المكوّن كما يعرضها السجل في الأسفل. عند إيقافه تتنقل بين كل ميزات التصميم. السجل على اليسار أو تحت المستعرض يتنقل دائمًا بين كل الميزات."
},
"de": {
"prefs.history_steps_component": "Verlaufsschritte je Komponente",
"prefs.history_steps_component_note": "Ist eine Komponente aktiv oder ausgewählt, gehen die Verlaufssteuerelemente durch deren Features, so wie der Verlauf unten sie zeigt. Aus: Sie gehen durch alle Features des Designs. Der Verlauf links oder unter dem Browser geht immer durch alle Features."
},
"en": {
"prefs.history_steps_component": "History steps by component",
"prefs.history_steps_component_note": "With a component active or picked, the History controls step through that component's features, as the History at the bottom shows them. Off: they step through every feature of the design. The History on the left or under the browser always steps through every feature."
},
"he": {
"prefs.history_steps_component": "צעדי ציר הזמן לפי רכיב",
"prefs.history_steps_component_note": "כשרכיב פעיל או נבחר, פקדי ציר הזמן עוברים בין הפיצ'רים של אותו רכיב, כפי שציר הזמן למטה מציג אותם. כבוי: הם עוברים בין כל הפיצ'רים של התכנון. ציר הזמן משמאל או מתחת לדפדפן עובר תמיד בין כל הפיצ'רים."
},
"ja": {
"prefs.history_steps_component": "コンポーネント単位で履歴を移動",
"prefs.history_steps_component_note": "コンポーネントがアクティブまたは選択されているとき、履歴コントロールは下部の履歴に表示されるとおり、そのコンポーネントのフィーチャだけを移動します。オフにすると、デザインのすべてのフィーチャを移動します。左側またはブラウザー下の履歴は常にすべてのフィーチャを移動します。"
},
"ko": {
"prefs.history_steps_component": "구성 요소별 히스토리 이동",
"prefs.history_steps_component_note": "구성 요소가 활성화되었거나 선택되어 있으면 기록 컨트롤이 아래쪽 히스토리에 보이는 대로 그 구성 요소의 피처만 이동합니다. 끄면 디자인의 모든 피처를 이동합니다. 왼쪽 또는 브라우저 아래의 히스토리는 항상 모든 피처를 이동합니다."
},
"vi": {
"prefs.history_steps_component": "Bước Lịch sử theo cụm chi tiết",
"prefs.history_steps_component_note": "Khi một cụm chi tiết đang kích hoạt hoặc được chọn, các điều khiển Lịch sử đi qua các tính năng của cụm đó, như dòng Lịch sử ở cạnh dưới hiển thị. Tắt: chúng đi qua mọi tính năng của thiết kế. Cây Lịch sử ở bên trái hoặc dưới cây thư mục luôn đi qua mọi tính năng."
},
"zh": {
"prefs.history_steps_component": "历史按组件逐步移动",
"prefs.history_steps_component_note": "当某个组件处于活动或选中状态时,历史控件按底部历史的显示,只在该组件的特征之间移动。关闭后,它们在设计的所有特征之间移动。左侧或浏览器下方的历史始终在所有特征之间移动。"
}
}
@@ -1,20 +0,0 @@
{
"en": {
"dialog.hole_held_off_its_line": "The reference edge holds this hole on a line that leaves the face before the picked point. Pick where the line crosses the face, or take the edge out to move the hole freely."
},
"ar": {
"dialog.hole_held_off_its_line": "الحافة المرجعية تُبقي هذا الثقب على خط يغادر الوجه قبل النقطة المختارة. اختر حيث يعبر الخط الوجه، أو أزل الحافة لتحريك الثقب بحرية."
},
"he": {
"dialog.hole_held_off_its_line": "קצה הייחוס מחזיק את החור על קו שיוצא מהפאה לפני הנקודה שנבחרה. יש לבחור במקום שבו הקו עובר על הפאה, או להסיר את הקצה כדי להזיז את החור בחופשיות."
},
"ja": {
"dialog.hole_held_off_its_line": "参照エッジがこの穴を直線上に固定していますが、その直線は選択した点より手前で面の外に出ます。直線が面の上を通る位置を選択するか、エッジを外すと穴を自由に移動できます。"
},
"vi": {
"dialog.hole_held_off_its_line": "Cạnh tham chiếu giữ lỗ này trên một đường thẳng ra khỏi mặt trước điểm đã chọn. Hãy chọn chỗ đường thẳng đi qua mặt, hoặc bỏ cạnh để di chuyển lỗ tự do."
},
"zh": {
"dialog.hole_held_off_its_line": "参考边将此孔固定在一条直线上,该直线在所选点之前就离开了该面。请在直线经过该面的位置选取,或移除该边以自由移动孔。"
}
}
@@ -1,42 +0,0 @@
{
"en": {
"prefs.assemblies": "Assemblies",
"prefs.joint_drag_trackball": "Turn parts on a ball joint like a trackball when dragged",
"prefs.joint_drag_trackball_help": "Dragging a part that a ball joint holds turns it by the smallest turn about the joint, as if rolling a ball the size of the part. Off: the point you grabbed follows the pointer exactly, and the part may also spin about it."
},
"ar": {
"prefs.assemblies": "التجميعات",
"prefs.joint_drag_trackball": "تدوير الأجزاء على مفصل كروي مثل كرة التتبع عند سحبها",
"prefs.joint_drag_trackball_help": "سحب جزء يثبّته مفصل كروي يدوّره بأصغر دوران حول المفصل، كأنك تدحرج كرة بحجم الجزء. عند الإيقاف: تتبع النقطة التي أمسكتها المؤشر تمامًا، وقد يدور الجزء أيضًا حولها."
},
"de": {
"prefs.assemblies": "Baugruppen",
"prefs.joint_drag_trackball": "Teile an einem Kugelgelenk beim Ziehen wie einen Trackball drehen",
"prefs.joint_drag_trackball_help": "Wenn Sie ein Teil ziehen, das ein Kugelgelenk hält, dreht es sich um die kleinste Drehung um das Gelenk, als rollten Sie eine Kugel von der Größe des Teils. Aus: Der gegriffene Punkt folgt genau dem Zeiger, und das Teil kann sich zusätzlich um ihn drehen."
},
"he": {
"prefs.assemblies": "מכלולים",
"prefs.joint_drag_trackball": "סיבוב חלקים על מפרק כדורי כמו כדור עקיבה בעת גרירה",
"prefs.joint_drag_trackball_help": "גרירת חלק שמפרק כדורי מחזיק מסובבת אותו בסיבוב הקטן ביותר סביב המפרק, כאילו מגלגלים כדור בגודל החלק. כבוי: הנקודה שתפסת עוקבת אחרי המצביע במדויק, והחלק עלול גם להסתובב סביבה."
},
"ja": {
"prefs.assemblies": "アセンブリ",
"prefs.joint_drag_trackball": "ボールジョイントの部品をドラッグするとトラックボールのように回転",
"prefs.joint_drag_trackball_help": "ボールジョイントで保持された部品をドラッグすると、部品の大きさのボールを転がすように、ジョイントを中心に最小の回転で回ります。オフ:つかんだ点がポインターに正確に追従し、部品がその点を軸にさらに回転することがあります。"
},
"ko": {
"prefs.assemblies": "어셈블리",
"prefs.joint_drag_trackball": "볼 조인트의 부품을 끌 때 트랙볼처럼 회전",
"prefs.joint_drag_trackball_help": "볼 조인트가 잡고 있는 부품을 끌면 부품 크기의 공을 굴리듯 조인트를 중심으로 가장 작은 회전만큼 돌아갑니다. 끄면: 잡은 점이 포인터를 정확히 따라가고, 부품이 그 점을 축으로 더 돌 수도 있습니다."
},
"vi": {
"prefs.assemblies": "Cụm lắp ráp",
"prefs.joint_drag_trackball": "Xoay chi tiết trên khớp cầu như trackball khi kéo",
"prefs.joint_drag_trackball_help": "Kéo một chi tiết do khớp cầu giữ sẽ xoay nó theo góc xoay nhỏ nhất quanh khớp, như lăn một quả bóng có kích thước bằng chi tiết. Tắt: điểm bạn nắm theo đúng con trỏ, và chi tiết có thể tự xoay quanh điểm đó."
},
"zh": {
"prefs.assemblies": "装配",
"prefs.joint_drag_trackball": "拖动球关节上的零件时像轨迹球一样旋转",
"prefs.joint_drag_trackball_help": "拖动由球关节固定的零件时,它绕关节以最小的转动旋转,就像滚动一个与零件同样大小的球。关闭:抓取的点精确跟随指针,零件还可能绕该点自旋。"
}
}
@@ -0,0 +1,42 @@
{
"en": {
"prefs.keep_print_faces": "Keep print faces",
"prefs.keep_print_faces_tip": "On: the print face of each body is tinted in the view at all times and saved in the design. Off: it is tinted only while Send to Slicer is open, and designs are saved and opened without print faces."
},
"ar": {
"prefs.keep_print_faces": "الاحتفاظ بأوجه الطباعة",
"prefs.keep_print_faces_tip": "تشغيل: يُلوَّن وجه الطباعة لكل جسم في العرض دائمًا ويُحفظ في التصميم. إيقاف: يُلوَّن فقط أثناء فتح نافذة إرسال إلى برنامج التقطيع، وتُحفظ التصاميم وتُفتح بدون أوجه الطباعة."
},
"de": {
"prefs.keep_print_faces": "Auflageflächen behalten",
"prefs.keep_print_faces_tip": "Ein: Die Auflagefläche jedes Körpers wird in der Ansicht immer eingefärbt und in der Konstruktion gespeichert. Aus: Sie wird nur eingefärbt, solange An Slicer senden geöffnet ist, und Konstruktionen werden ohne Auflageflächen gespeichert und geöffnet."
},
"es": {
"prefs.keep_print_faces": "Conservar caras de impresión",
"prefs.keep_print_faces_tip": "Activado: la cara de impresión de cada cuerpo se tiñe siempre en la vista y se guarda en el diseño. Desactivado: solo se tiñe mientras Enviar al laminador está abierto, y los diseños se guardan y se abren sin caras de impresión."
},
"fr": {
"prefs.keep_print_faces": "Conserver les faces d’impression",
"prefs.keep_print_faces_tip": "Activé : la face d’impression de chaque corps est toujours teintée dans la vue et enregistrée dans la conception. Désactivé : elle n'est teintée que tant qu'Envoyer au slicer est ouvert, et les conceptions sont enregistrées et ouvertes sans faces d’impression."
},
"he": {
"prefs.keep_print_faces": "שמירת פאות הדפסה",
"prefs.keep_print_faces_tip": "מופעל: פאת ההדפסה של כל גוף נצבעת בתצוגה תמיד ונשמרת בתכנון. כבוי: היא נצבעת רק כל עוד חלון שליחה לסלייסר פתוח, ותכנונים נשמרים ונפתחים ללא פאות הדפסה."
},
"ja": {
"prefs.keep_print_faces": "造形面を保持",
"prefs.keep_print_faces_tip": "オン: 各ボディの造形面をビューで常に色付けし、デザインに保存します。オフ: 「スライサーに送る」が開いている間だけ色付けし、デザインは造形面なしで保存・オープンされます。"
},
"ko": {
"prefs.keep_print_faces": "출력 바닥면 유지",
"prefs.keep_print_faces_tip": "켜기: 각 바디의 출력 바닥면을 뷰에 항상 색으로 표시하고 디자인에 저장합니다. 끄기: 슬라이서로 보내기가 열려 있는 동안만 표시하며, 디자인은 출력 바닥면 없이 저장되고 열립니다."
},
"vi": {
"prefs.keep_print_faces": "Giữ mặt in",
"prefs.keep_print_faces_tip": "Bật: mặt in của mỗi khối luôn được tô màu trong khung nhìn và được lưu trong thiết kế. Tắt: mặt in chỉ được tô màu khi cửa sổ Gửi sang phần mềm cắt lớp (Slicer) đang mở, và thiết kế được lưu và mở mà không có mặt in."
},
"zh": {
"prefs.keep_print_faces": "保留打印底面",
"prefs.keep_print_faces_tip": "开启:每个实体的打印底面始终在视图中着色,并保存在设计中。关闭:仅在“发送到切片软件”打开时着色,设计保存和打开时不含打印底面。"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"nav.maya_horizontal_zoom.help": "Alt+right drag: right zooms in, left zooms out. Turn off to restore vertical drag zoom.",
"nav.maya_horizontal_zoom.label": "Maya: horizontal drag zoom"
},
"ar": {
"nav.maya_horizontal_zoom.help": "اسحب مع Alt وزر الفأرة الأيمن: إلى اليمين للتكبير وإلى اليسار للتصغير. عطّل هذا الخيار لاستعادة التكبير بالسحب العمودي.",
"nav.maya_horizontal_zoom.label": "Maya: التكبير بالسحب الأفقي"
},
"he": {
"nav.maya_horizontal_zoom.help": "Alt וגרירה עם לחצן העכבר הימני: ימינה לקירוב, שמאלה להרחקה. כבו כדי לחזור לזום בגרירה אנכית.",
"nav.maya_horizontal_zoom.label": "Maya: זום בגרירה אופקית"
},
"ja": {
"nav.maya_horizontal_zoom.help": "Alt+右ドラッグで右に動かすと拡大、左に動かすと縮小します。オフにすると従来の垂直ドラッグに戻ります。",
"nav.maya_horizontal_zoom.label": "Maya: 水平方向のドラッグでズーム"
},
"vi": {
"nav.maya_horizontal_zoom.help": "Alt+kéo chuột phải: kéo sang phải để phóng to, sang trái để thu nhỏ. Tắt để khôi phục thu phóng bằng cách kéo dọc.",
"nav.maya_horizontal_zoom.label": "Maya: thu phóng bằng cách kéo ngang"
},
"zh": {
"nav.maya_horizontal_zoom.help": "Alt+右键拖动:向右放大,向左缩小。关闭此选项可恢复垂直拖动缩放。",
"nav.maya_horizontal_zoom.label": "Maya:水平拖动缩放"
},
"de": {
"nav.maya_horizontal_zoom.help": "Alt+Rechtsziehen: nach rechts vergrößern, nach links verkleinern. Ausschalten, um wieder vertikal zu zoomen.",
"nav.maya_horizontal_zoom.label": "Maya: horizontal ziehen zum Zoomen"
},
"ko": {
"nav.maya_horizontal_zoom.help": "Alt+오른쪽 버튼 드래그: 오른쪽으로 움직이면 확대하고 왼쪽으로 움직이면 축소합니다. 끄면 세로 드래그 확대/축소로 돌아갑니다.",
"nav.maya_horizontal_zoom.label": "Maya: 가로 드래그로 확대/축소"
}
}
@@ -1,74 +0,0 @@
{
"en": {
"ai.prefs.control_port": "Port",
"ai.prefs.control_port_note": "The port AI agents connect to on this computer (127.0.0.1). 27878 is the default: when it is in use, the next free port is taken. Any other port is used exactly. Point your MCP client at the same port, for example solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_listening": "Listening on 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Not listening",
"ai.prefs.control_port_taken": "Port {port} is in use by another program (or another SolidCraft window). Choose another port.",
"ai.prefs.control_failed": "The control channel could not start: {error}",
"ai.prefs.control_from_launch": "Started with --control on port {port} for this run. Changes here take effect the next time SolidCraft starts without --control."
},
"de": {
"ai.prefs.control_port": "Port",
"ai.prefs.control_port_note": "Der Port, über den sich KI-Agenten auf diesem Computer verbinden (127.0.0.1). Standard ist 27878: Ist er belegt, wird der nächste freie Port genommen. Jeder andere Port wird genau so verwendet. Richte deinen MCP-Client auf denselben Port, zum Beispiel solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_listening": "Wartet auf 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Nicht aktiv",
"ai.prefs.control_port_taken": "Port {port} wird von einem anderen Programm (oder einem anderen SolidCraft-Fenster) verwendet. Wähle einen anderen Port.",
"ai.prefs.control_failed": "Der Steuerkanal konnte nicht starten: {error}",
"ai.prefs.control_from_launch": "Für diese Sitzung mit --control auf Port {port} gestartet. Änderungen hier gelten beim nächsten Start von SolidCraft ohne --control."
},
"ja": {
"ai.prefs.control_port": "ポート",
"ai.prefs.control_port_note": "このコンピューター上で AI エージェントが接続するポート (127.0.0.1)。既定は 27878 で、使用中の場合は次の空いているポートを使います。それ以外のポートはそのまま使います。MCP クライアントも同じポートに向けてください (例: solidcraft-cli mcp --connect 127.0.0.1:7878)。",
"ai.prefs.control_listening": "127.0.0.1:{port} で待機中",
"ai.prefs.control_not_listening": "待機していません",
"ai.prefs.control_port_taken": "ポート {port} は別のプログラム (または別の SolidCraft ウィンドウ) が使用しています。別のポートを選んでください。",
"ai.prefs.control_failed": "コントロールチャネルを開始できませんでした: {error}",
"ai.prefs.control_from_launch": "この実行は --control でポート {port} を使って開始されました。ここでの変更は、次に --control なしで SolidCraft を起動したときに反映されます。"
},
"zh": {
"ai.prefs.control_port": "端口",
"ai.prefs.control_port_note": "AI 代理在本机上连接的端口 (127.0.0.1)。默认为 27878:若被占用,则使用下一个空闲端口。其他端口按原样使用。请让 MCP 客户端指向同一端口,例如 solidcraft-cli mcp --connect 127.0.0.1:7878。",
"ai.prefs.control_listening": "正在监听 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "未在监听",
"ai.prefs.control_port_taken": "端口 {port} 已被其他程序(或另一个 SolidCraft 窗口)占用。请选择其他端口。",
"ai.prefs.control_failed": "控制通道无法启动:{error}",
"ai.prefs.control_from_launch": "本次运行通过 --control 在端口 {port} 上启动。此处的更改将在下次不带 --control 启动 SolidCraft 时生效。"
},
"ko": {
"ai.prefs.control_port": "포트",
"ai.prefs.control_port_note": "이 컴퓨터에서 AI 에이전트가 연결하는 포트(127.0.0.1)입니다. 기본값은 27878이며, 사용 중이면 다음 빈 포트를 사용합니다. 다른 포트는 그대로 사용합니다. MCP 클라이언트도 같은 포트를 가리키게 하세요(예: solidcraft-cli mcp --connect 127.0.0.1:7878).",
"ai.prefs.control_listening": "127.0.0.1:{port}에서 대기 중",
"ai.prefs.control_not_listening": "대기하지 않음",
"ai.prefs.control_port_taken": "포트 {port}을(를) 다른 프로그램(또는 다른 SolidCraft 창)이 사용 중입니다. 다른 포트를 선택하세요.",
"ai.prefs.control_failed": "제어 채널을 시작할 수 없습니다: {error}",
"ai.prefs.control_from_launch": "이번 실행은 --control로 포트 {port}에서 시작되었습니다. 여기서 바꾼 내용은 다음에 --control 없이 SolidCraft를 시작할 때 적용됩니다."
},
"vi": {
"ai.prefs.control_port": "Cổng",
"ai.prefs.control_port_note": "Cổng mà các tác tử AI kết nối trên máy tính này (127.0.0.1). Mặc định là 27878: nếu cổng đang được dùng, cổng trống tiếp theo sẽ được dùng. Mọi cổng khác được dùng đúng như vậy. Hãy trỏ ứng dụng MCP của bạn đến cùng cổng, ví dụ solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_listening": "Đang lắng nghe trên 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Không lắng nghe",
"ai.prefs.control_port_taken": "Cổng {port} đang được một chương trình khác (hoặc một cửa sổ SolidCraft khác) sử dụng. Hãy chọn cổng khác.",
"ai.prefs.control_failed": "Không thể khởi động kênh điều khiển: {error}",
"ai.prefs.control_from_launch": "Lần chạy này được khởi động với --control trên cổng {port}. Các thay đổi ở đây có hiệu lực vào lần tới SolidCraft khởi động mà không có --control."
},
"ar": {
"ai.prefs.control_port": "المنفذ",
"ai.prefs.control_port_note": "المنفذ الذي يتصل عبره وكلاء الذكاء الاصطناعي على هذا الحاسوب (127.0.0.1). الافتراضي هو 27878: إذا كان مستخدمًا يُستخدم المنفذ الحر التالي. أي منفذ آخر يُستخدم كما هو. وجّه عميل MCP إلى المنفذ نفسه، مثل solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_listening": "يستمع على 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "لا يستمع",
"ai.prefs.control_port_taken": "المنفذ {port} يستخدمه برنامج آخر (أو نافذة SolidCraft أخرى). اختر منفذًا آخر.",
"ai.prefs.control_failed": "تعذّر بدء قناة التحكم: {error}",
"ai.prefs.control_from_launch": "بدأ هذا التشغيل باستخدام --control على المنفذ {port}. تسري التغييرات هنا عند تشغيل SolidCraft في المرة القادمة دون --control."
},
"he": {
"ai.prefs.control_port": "פורט",
"ai.prefs.control_port_note": "הפורט שאליו סוכני AI מתחברים במחשב זה (127.0.0.1). ברירת המחדל היא 27878: אם הוא תפוס, נלקח הפורט הפנוי הבא. כל פורט אחר משמש בדיוק כפי שהוא. כוונו את לקוח ה-MCP לאותו פורט, למשל solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_listening": "מאזין ב-127.0.0.1:{port}",
"ai.prefs.control_not_listening": "לא מאזין",
"ai.prefs.control_port_taken": "פורט {port} בשימוש של תוכנה אחרת (או חלון SolidCraft אחר). בחרו פורט אחר.",
"ai.prefs.control_failed": "לא ניתן היה להפעיל את ערוץ הבקרה: {error}",
"ai.prefs.control_from_launch": "הפעלה זו התחילה עם --control בפורט {port}. שינויים כאן ייכנסו לתוקף בפעם הבאה ש-SolidCraft יופעל ללא --control."
}
}
@@ -1,47 +0,0 @@
{
"en": {
"measure.perimeter": "Perimeter",
"measure.perimeter_inner": "Inner perimeter",
"measure.perimeter_outer": "Outer perimeter"
},
"ar": {
"measure.perimeter": "المحيط",
"measure.perimeter_inner": "المحيط الداخلي",
"measure.perimeter_outer": "المحيط الخارجي"
},
"de": {
"measure.perimeter": "Umfang",
"measure.perimeter_inner": "Innenumfang",
"measure.perimeter_outer": "Außenumfang"
},
"fr": {
"measure.perimeter": "Périmètre",
"measure.perimeter_inner": "Périmètre intérieur",
"measure.perimeter_outer": "Périmètre extérieur"
},
"he": {
"measure.perimeter": "היקף",
"measure.perimeter_inner": "היקף פנימי",
"measure.perimeter_outer": "היקף חיצוני"
},
"ja": {
"measure.perimeter": "周長",
"measure.perimeter_inner": "内周長",
"measure.perimeter_outer": "外周長"
},
"ko": {
"measure.perimeter": "둘레",
"measure.perimeter_inner": "내부 둘레",
"measure.perimeter_outer": "외부 둘레"
},
"vi": {
"measure.perimeter": "Chu vi",
"measure.perimeter_inner": "Chu vi trong",
"measure.perimeter_outer": "Chu vi ngoài"
},
"zh": {
"measure.perimeter": "周长",
"measure.perimeter_inner": "内周长",
"measure.perimeter_outer": "外周长"
}
}
-38
View File
@@ -1,38 +0,0 @@
{
"ar": {
"cmd.note_add": "إضافة ملاحظة",
"cmd.note_delete": "حذف ملاحظة",
"cmd.note_list": "عرض الملاحظات",
"cmd.note_update": "تحرير الملاحظة"
},
"en": {
"cmd.note_add": "Add Note",
"cmd.note_delete": "Delete Note",
"cmd.note_list": "List Notes",
"cmd.note_update": "Edit Note"
},
"he": {
"cmd.note_add": "הוספת הערה",
"cmd.note_delete": "מחיקת הערה",
"cmd.note_list": "הצגת הערות",
"cmd.note_update": "עריכת הערה"
},
"ja": {
"cmd.note_add": "メモを追加",
"cmd.note_delete": "メモを削除",
"cmd.note_list": "メモを一覧表示",
"cmd.note_update": "メモを編集"
},
"vi": {
"cmd.note_add": "Thêm ghi chú",
"cmd.note_delete": "Xóa ghi chú",
"cmd.note_list": "Liệt kê ghi chú",
"cmd.note_update": "Chỉnh sửa ghi chú"
},
"zh": {
"cmd.note_add": "添加备注",
"cmd.note_delete": "删除备注",
"cmd.note_list": "列出备注",
"cmd.note_update": "编辑备注"
}
}
@@ -0,0 +1,26 @@
{
"en": {
"operations.failed": "Failed"
},
"de": {
"operations.failed": "Fehlgeschlagen"
},
"ja": {
"operations.failed": "失敗"
},
"ko": {
"operations.failed": "실패"
},
"zh": {
"operations.failed": "失败"
},
"ar": {
"operations.failed": "فشل"
},
"he": {
"operations.failed": "נכשל"
},
"vi": {
"operations.failed": "Thất bại"
}
}
@@ -1,106 +0,0 @@
{
"en": {
"operations.cancel": "Cancel {name}",
"operations.cancelled": "{name} cancelled",
"operations.cancelling": "Cancelling…",
"operations.cannot_cancel": "{name} can't be cancelled",
"operations.feature": "Feature",
"operations.feature_edit": "Edit feature",
"operations.meshing": "Loading parts",
"operations.queued": "Queued",
"operations.stopped": "Cancelled",
"prefs.operations_panel": "Show operations in the view",
"prefs.operations_panel_note": "Long operations (opening a file, computing a feature, an agent's command) show in the view's bottom-right corner with their progress and a button that cancels them. Off: a Computing notice, as before."
},
"de": {
"operations.cancel": "{name} abbrechen",
"operations.cancelled": "{name} abgebrochen",
"operations.cancelling": "Wird abgebrochen…",
"operations.cannot_cancel": "{name} kann nicht abgebrochen werden",
"operations.feature": "Feature",
"operations.feature_edit": "Feature bearbeiten",
"operations.meshing": "Teile werden geladen",
"operations.queued": "Wartet",
"operations.stopped": "Abgebrochen",
"prefs.operations_panel": "Vorgänge in der Ansicht zeigen",
"prefs.operations_panel_note": "Lange Vorgänge (eine Datei öffnen, ein Feature berechnen, der Befehl eines Agenten) erscheinen unten rechts in der Ansicht mit ihrem Fortschritt und einer Schaltfläche zum Abbrechen. Aus: wie bisher ein Hinweis „Berechnung“."
},
"ja": {
"operations.cancel": "{name} をキャンセル",
"operations.cancelled": "{name} をキャンセルしました",
"operations.cancelling": "キャンセル中…",
"operations.cannot_cancel": "{name} はキャンセルできません",
"operations.feature": "フィーチャー",
"operations.feature_edit": "フィーチャーを編集",
"operations.meshing": "パーツを読み込み中",
"operations.queued": "待機中",
"operations.stopped": "キャンセル済み",
"prefs.operations_panel": "ビューに処理を表示",
"prefs.operations_panel_note": "時間のかかる処理(ファイルを開く、フィーチャーの計算、エージェントのコマンド)が、進行状況とキャンセルボタンとともにビューの右下に表示されます。オフ:従来どおり「計算中」の通知を表示します。"
},
"ko": {
"operations.cancel": "{name} 취소",
"operations.cancelled": "{name} 취소됨",
"operations.cancelling": "취소하는 중…",
"operations.cannot_cancel": "{name}은(는) 취소할 수 없습니다",
"operations.feature": "피처",
"operations.feature_edit": "피처 편집",
"operations.meshing": "파트 불러오는 중",
"operations.queued": "대기 중",
"operations.stopped": "취소됨",
"prefs.operations_panel": "뷰에 작업 표시",
"prefs.operations_panel_note": "오래 걸리는 작업(파일 열기, 피처 계산, 에이전트 명령)이 진행 상황과 취소 버튼과 함께 뷰의 오른쪽 아래에 표시됩니다. 끄면: 이전처럼 계산 중 알림이 표시됩니다."
},
"zh": {
"operations.cancel": "取消{name}",
"operations.cancelled": "已取消{name}",
"operations.cancelling": "正在取消…",
"operations.cannot_cancel": "无法取消{name}",
"operations.feature": "特征",
"operations.feature_edit": "编辑特征",
"operations.meshing": "正在加载零件",
"operations.queued": "排队中",
"operations.stopped": "已取消",
"prefs.operations_panel": "在视图中显示操作",
"prefs.operations_panel_note": "耗时的操作(打开文件、计算特征、智能体的命令)会连同进度和取消按钮显示在视图右下角。关闭:与以前一样显示“正在计算”提示。"
},
"ar": {
"operations.cancel": "إلغاء {name}",
"operations.cancelled": "تم إلغاء {name}",
"operations.cancelling": "جارٍ الإلغاء…",
"operations.cannot_cancel": "لا يمكن إلغاء {name}",
"operations.feature": "ميزة",
"operations.feature_edit": "تحرير الميزة",
"operations.meshing": "جارٍ تحميل الأجزاء",
"operations.queued": "في الانتظار",
"operations.stopped": "أُلغي",
"prefs.operations_panel": "إظهار العمليات في العرض",
"prefs.operations_panel_note": "تظهر العمليات الطويلة (فتح ملف، حساب ميزة، أمر من وكيل) في الزاوية السفلية اليمنى من العرض مع تقدّمها وزر لإلغائها. عند الإيقاف: إشعار «جارٍ الحساب» كما كان من قبل."
},
"he": {
"operations.cancel": "ביטול {name}",
"operations.cancelled": "{name} בוטל",
"operations.cancelling": "מבטל…",
"operations.cannot_cancel": "לא ניתן לבטל את {name}",
"operations.feature": "פיצ'ר",
"operations.feature_edit": "עריכת פיצ'ר",
"operations.meshing": "טוען חלקים",
"operations.queued": "ממתין",
"operations.stopped": "בוטל",
"prefs.operations_panel": "הצגת פעולות בתצוגה",
"prefs.operations_panel_note": "פעולות ארוכות (פתיחת קובץ, חישוב פיצ'ר, פקודה של סוכן) מוצגות בפינה הימנית התחתונה של התצוגה עם ההתקדמות שלהן וכפתור לביטולן. כבוי: הודעת „מחשב” כמו קודם."
},
"vi": {
"operations.cancel": "Hủy {name}",
"operations.cancelled": "Đã hủy {name}",
"operations.cancelling": "Đang hủy…",
"operations.cannot_cancel": "Không thể hủy {name}",
"operations.feature": "Đặc trưng",
"operations.feature_edit": "Sửa đặc trưng",
"operations.meshing": "Đang tải chi tiết",
"operations.queued": "Đang chờ",
"operations.stopped": "Đã hủy",
"prefs.operations_panel": "Hiện các thao tác trong khung nhìn",
"prefs.operations_panel_note": "Các thao tác dài (mở tệp, tính đặc trưng, lệnh của tác tử) hiện ở góc dưới bên phải khung nhìn cùng tiến độ và nút hủy. Tắt: thông báo Đang tính như trước."
}
}
@@ -1,11 +0,0 @@
{
"ar": { "cmd.inspect_parameter_variants": "مقارنة بدائل المعلمات" },
"de": { "cmd.inspect_parameter_variants": "Parametervarianten vergleichen" },
"en": { "cmd.inspect_parameter_variants": "Compare Parameter Variants" },
"es": { "cmd.inspect_parameter_variants": "Comparar variantes de parámetros" },
"he": { "cmd.inspect_parameter_variants": "השוואת חלופות פרמטרים" },
"ja": { "cmd.inspect_parameter_variants": "パラメーターの組み合わせを比較" },
"ko": { "cmd.inspect_parameter_variants": "매개변수 조합 비교" },
"vi": { "cmd.inspect_parameter_variants": "So sánh các phương án tham số" },
"zh": { "cmd.inspect_parameter_variants": "比较参数方案" }
}
@@ -1,29 +0,0 @@
{
"en": {
"Drag to place it on another face.": "Drag to place it on another face."
},
"ar": {
"Drag to place it on another face.": "اسحب لوضعه على وجه آخر."
},
"de": {
"Drag to place it on another face.": "Ziehen, um es auf eine andere Fläche zu setzen."
},
"he": {
"Drag to place it on another face.": "יש לגרור כדי להציב אותו על פאה אחרת."
},
"ja": {
"Drag to place it on another face.": "ドラッグして別の面に配置します。"
},
"ko": {
"Drag to place it on another face.": "드래그하여 다른 면에 배치합니다."
},
"pl": {
"Drag to place it on another face.": "Przeciągnij, aby umieścić go na innej ścianie."
},
"vi": {
"Drag to place it on another face.": "Kéo để đặt nó lên một bề mặt khác."
},
"zh": {
"Drag to place it on another face.": "拖动以将其放置到另一个面上。"
}
}
@@ -1,14 +0,0 @@
{
"en": { "ui.properties.copy_value": "Click to copy", "ui.properties.value_copied": "Value copied" },
"ar": { "ui.properties.copy_value": "انقر للنسخ", "ui.properties.value_copied": "تم نسخ القيمة" },
"de": { "ui.properties.copy_value": "Klicken, um den Wert zu kopieren", "ui.properties.value_copied": "Wert kopiert" },
"es": { "ui.properties.copy_value": "Haz clic para copiar", "ui.properties.value_copied": "Valor copiado" },
"fr": { "ui.properties.copy_value": "Cliquer pour copier", "ui.properties.value_copied": "Valeur copiée" },
"he": { "ui.properties.copy_value": "לחיצה מעתיקה את הערך", "ui.properties.value_copied": "הערך הועתק" },
"it": { "ui.properties.copy_value": "Fai clic per copiare", "ui.properties.value_copied": "Valore copiato" },
"ja": { "ui.properties.copy_value": "クリックでコピー", "ui.properties.value_copied": "値をコピーしました" },
"ko": { "ui.properties.copy_value": "클릭하여 복사", "ui.properties.value_copied": "값을 복사했습니다" },
"vi": { "ui.properties.copy_value": "Nhấp để sao chép", "ui.properties.value_copied": "Đã sao chép giá trị" },
"zh": { "ui.properties.copy_value": "点击复制", "ui.properties.value_copied": "已复制数值" },
"zh-TW": { "ui.properties.copy_value": "按一下以複製", "ui.properties.value_copied": "已複製數值" }
}
@@ -1,10 +0,0 @@
{
"en": { "cmd.ui.toggle_visibility": "Show/Hide Selection" },
"de": { "cmd.ui.toggle_visibility": "Auswahl ein-/ausblenden" },
"ar": { "cmd.ui.toggle_visibility": "إظهار/إخفاء التحديد" },
"he": { "cmd.ui.toggle_visibility": "הצגה/הסתרה של הבחירה" },
"ja": { "cmd.ui.toggle_visibility": "選択項目の表示/非表示" },
"ko": { "cmd.ui.toggle_visibility": "선택 항목 표시/숨기기" },
"vi": { "cmd.ui.toggle_visibility": "Hiển thị/Ẩn mục đã chọn" },
"zh": { "cmd.ui.toggle_visibility": "显示/隐藏所选项" }
}
@@ -1,30 +0,0 @@
{
"en": {
"ui.relink_one_done": "Source relinked for this instance.",
"ui.relink_source_one": "Relink Source…"
},
"ar": {
"ui.relink_one_done": "أُعيد ربط المصدر لهذه النسخة.",
"ui.relink_source_one": "إعادة ربط المصدر…"
},
"de": {
"ui.relink_one_done": "Quelle für diese Instanz neu verknüpft.",
"ui.relink_source_one": "Quelle neu verknüpfen…"
},
"he": {
"ui.relink_one_done": "המקור קושר מחדש למופע זה.",
"ui.relink_source_one": "קישור מחדש למקור…"
},
"ja": {
"ui.relink_one_done": "このインスタンスの参照元を再リンクしました。",
"ui.relink_source_one": "参照元を再リンク…"
},
"vi": {
"ui.relink_one_done": "Đã liên kết lại nguồn cho thể hiện này.",
"ui.relink_source_one": "Liên kết lại nguồn…"
},
"zh": {
"ui.relink_one_done": "已为此实例重新链接源文件。",
"ui.relink_source_one": "重新链接源文件…"
}
}
@@ -1,8 +0,0 @@
{
"en": { "render.error_product_placement": "invalid product placement" },
"ar": { "render.error_product_placement": "موضع منتج غير صالح" },
"he": { "render.error_product_placement": "מיקום מוצר לא תקין" },
"ja": { "render.error_product_placement": "製品の配置が無効です" },
"vi": { "render.error_product_placement": "vị trí đặt sản phẩm không hợp lệ" },
"zh": { "render.error_product_placement": "产品放置无效" }
}
@@ -1,132 +0,0 @@
{
"en": {
"dialog.right_click_pick": "Select {input} first",
"ui.right_click_confirms": "Right-click confirms dialog inputs",
"ui.right_click_confirms_tip": "With a dialog open, a right-click in the view goes on to its next empty input, and on the last one runs OK"
},
"cs": {
"dialog.right_click_pick": "Nejprve vyberte {input}",
"ui.right_click_confirms": "Pravé kliknutí potvrzuje vstupy dialogu",
"ui.right_click_confirms_tip": "Při otevřeném dialogu přejde pravé kliknutí v zobrazení na další prázdný vstup a u posledního provede OK"
},
"da": {
"dialog.right_click_pick": "Vælg først {input}",
"ui.right_click_confirms": "Højreklik bekræfter dialogens input",
"ui.right_click_confirms_tip": "Med en dialog åben går et højreklik i visningen videre til næste tomme input, og ved det sidste udføres OK"
},
"de": {
"dialog.right_click_pick": "Zuerst {input} auswählen",
"ui.right_click_confirms": "Rechtsklick bestätigt Dialogeingaben",
"ui.right_click_confirms_tip": "Bei offenem Dialog springt ein Rechtsklick in der Ansicht zur nächsten leeren Eingabe und führt bei der letzten OK aus"
},
"es": {
"dialog.right_click_pick": "Selecciona primero {input}",
"ui.right_click_confirms": "El clic derecho confirma las entradas del diálogo",
"ui.right_click_confirms_tip": "Con un diálogo abierto, un clic derecho en la vista pasa a la siguiente entrada vacía y, en la última, ejecuta OK"
},
"fr": {
"dialog.right_click_pick": "Sélectionner d’abord {input}",
"ui.right_click_confirms": "Le clic droit valide les entrées du dialogue",
"ui.right_click_confirms_tip": "Avec un dialogue ouvert, un clic droit dans la vue passe à l’entrée vide suivante et, sur la dernière, exécute OK"
},
"gl": {
"dialog.right_click_pick": "Selecciona primeiro {input}",
"ui.right_click_confirms": "O clic dereito confirma as entradas do diálogo",
"ui.right_click_confirms_tip": "Cun diálogo aberto, un clic dereito na vista pasa á seguinte entrada baleira e, na última, executa OK"
},
"hu": {
"dialog.right_click_pick": "Előbb jelölje ki ezt: {input}",
"ui.right_click_confirms": "A jobb kattintás jóváhagyja a párbeszédablak bemeneteit",
"ui.right_click_confirms_tip": "Nyitott párbeszédablaknál a nézetben a jobb kattintás a következő üres bemenetre lép, az utolsónál pedig OK-t nyom"
},
"id": {
"dialog.right_click_pick": "Pilih {input} terlebih dahulu",
"ui.right_click_confirms": "Klik kanan mengonfirmasi input dialog",
"ui.right_click_confirms_tip": "Saat dialog terbuka, klik kanan di tampilan berpindah ke input kosong berikutnya, dan pada input terakhir menjalankan OK"
},
"it": {
"dialog.right_click_pick": "Seleziona prima {input}",
"ui.right_click_confirms": "Il clic destro conferma gli input della finestra di dialogo",
"ui.right_click_confirms_tip": "Con una finestra di dialogo aperta, un clic destro nella vista passa al successivo input vuoto e, sull’ultimo, esegue OK"
},
"ja": {
"dialog.right_click_pick": "先に {input} を選択",
"ui.right_click_confirms": "右クリックでダイアログの入力を確定",
"ui.right_click_confirms_tip": "ダイアログが開いているとき、ビューで右クリックすると次の空の入力へ進み、最後の入力では OK を実行します"
},
"ko": {
"dialog.right_click_pick": "먼저 {input} 선택",
"ui.right_click_confirms": "오른쪽 클릭으로 대화 상자 입력 확인",
"ui.right_click_confirms_tip": "대화 상자가 열려 있을 때 뷰에서 오른쪽 클릭하면 다음 빈 입력으로 이동하고, 마지막 입력에서는 OK를 실행합니다"
},
"ms": {
"dialog.right_click_pick": "Pilih {input} dahulu",
"ui.right_click_confirms": "Klik kanan mengesahkan input dialog",
"ui.right_click_confirms_tip": "Apabila dialog dibuka, klik kanan dalam paparan beralih ke input kosong seterusnya, dan pada input terakhir menjalankan OK"
},
"nl": {
"dialog.right_click_pick": "Eerst {input} selecteren",
"ui.right_click_confirms": "Rechtsklik bevestigt dialooginvoer",
"ui.right_click_confirms_tip": "Met een dialoog open gaat een rechtsklik in de weergave naar de volgende lege invoer, en bij de laatste voert hij OK uit"
},
"pl": {
"dialog.right_click_pick": "Najpierw zaznacz {input}",
"ui.right_click_confirms": "Prawy klik zatwierdza pola okna dialogowego",
"ui.right_click_confirms_tip": "Przy otwartym oknie dialogowym prawy klik w widoku przechodzi do następnego pustego pola, a przy ostatnim wykonuje OK"
},
"pt-BR": {
"dialog.right_click_pick": "Selecione {input} primeiro",
"ui.right_click_confirms": "O clique direito confirma as entradas da caixa de diálogo",
"ui.right_click_confirms_tip": "Com uma caixa de diálogo aberta, um clique direito na vista passa para a próxima entrada vazia e, na última, executa OK"
},
"ro": {
"dialog.right_click_pick": "Selectați mai întâi {input}",
"ui.right_click_confirms": "Clicul dreapta confirmă intrările dialogului",
"ui.right_click_confirms_tip": "Cu un dialog deschis, un clic dreapta în vedere trece la următoarea intrare goală, iar la ultima rulează OK"
},
"ru": {
"dialog.right_click_pick": "Сначала выберите {input}",
"ui.right_click_confirms": "Правый щелчок подтверждает поля диалога",
"ui.right_click_confirms_tip": "При открытом диалоге правый щелчок в виде переходит к следующему пустому полю, а на последнем выполняет OK"
},
"sv": {
"dialog.right_click_pick": "Markera {input} först",
"ui.right_click_confirms": "Högerklick bekräftar dialogens indata",
"ui.right_click_confirms_tip": "Med en dialog öppen går ett högerklick i vyn vidare till nästa tomma indata, och vid den sista körs OK"
},
"tr": {
"dialog.right_click_pick": "Önce {input} seçin",
"ui.right_click_confirms": "Sağ tıklama iletişim kutusu girişlerini onaylar",
"ui.right_click_confirms_tip": "Bir iletişim kutusu açıkken görünümde sağ tıklama bir sonraki boş girişe geçer, sonuncusunda ise OK çalıştırır"
},
"uk": {
"dialog.right_click_pick": "Спочатку виберіть {input}",
"ui.right_click_confirms": "Правий клік підтверджує поля діалогу",
"ui.right_click_confirms_tip": "Коли діалог відкрито, правий клік у вигляді переходить до наступного порожнього поля, а на останньому виконує OK"
},
"vi": {
"dialog.right_click_pick": "Chọn {input} trước",
"ui.right_click_confirms": "Nhấp chuột phải xác nhận đầu vào của hộp thoại",
"ui.right_click_confirms_tip": "Khi hộp thoại đang mở, nhấp chuột phải trong khung nhìn chuyển sang đầu vào trống tiếp theo, và ở đầu vào cuối cùng sẽ chạy OK"
},
"zh": {
"dialog.right_click_pick": "请先选择{input}",
"ui.right_click_confirms": "右键确认对话框输入",
"ui.right_click_confirms_tip": "对话框打开时,在视图中右键单击会转到下一个空输入,在最后一个输入上执行 OK"
},
"zh-TW": {
"dialog.right_click_pick": "請先選擇{input}",
"ui.right_click_confirms": "右鍵確認對話方塊輸入",
"ui.right_click_confirms_tip": "對話方塊開啟時,在視圖中按右鍵會轉到下一個空白輸入,在最後一個輸入上執行 OK"
},
"ar": {
"dialog.right_click_pick": "حدد {input} أولًا",
"ui.right_click_confirms": "النقر بزر الفأرة الأيمن يؤكد مدخلات مربع الحوار",
"ui.right_click_confirms_tip": "عندما يكون مربع حوار مفتوحًا، ينتقل النقر بزر الفأرة الأيمن في العرض إلى المدخل الفارغ التالي، وعند المدخل الأخير ينفّذ «موافق»"
},
"he": {
"dialog.right_click_pick": "יש לבחור תחילה {input}",
"ui.right_click_confirms": "לחיצה ימנית מאשרת קלטים בתיבת דו-שיח",
"ui.right_click_confirms_tip": "כאשר תיבת דו-שיח פתוחה, לחיצה ימנית בתצוגה עוברת לקלט הריק הבא, ובקלט האחרון מבצעת אישור"
}
}
-82
View File
@@ -1,82 +0,0 @@
{
"ar": {
"document.discard_row": "تجاهل",
"document.finish_save_prompt": "أكمل الرد على نافذة الحفظ قبل فتح تصميم آخر.",
"document.not_saved_yet": "لم يُحفظ بعد",
"document.save_many": "حفظ التغييرات في {n} من التصاميم؟",
"document.save_row": "حفظ",
"document.save_selected": "حفظ المحدد",
"prefs.save_prompt_one_at_a_time": "السؤال عن كل تصميم غير محفوظ على حدة عند إغلاق عدة تصاميم",
"prefs.save_prompt_one_at_a_time_help": "عرض نافذة حفظ لكل تصميم غير محفوظ بدلًا من قائمة مجمّعة."
},
"de": {
"document.discard_row": "Verwerfen",
"document.finish_save_prompt": "Beantworten Sie die Speicherabfrage, bevor Sie einen weiteren Entwurf öffnen.",
"document.not_saved_yet": "Noch nicht gespeichert",
"document.save_many": "Änderungen an {n} Entwürfen speichern?",
"document.save_row": "Speichern",
"document.save_selected": "Auswahl speichern",
"prefs.save_prompt_one_at_a_time": "Beim Schließen mehrerer Entwürfe für jeden ungespeicherten Entwurf einzeln fragen",
"prefs.save_prompt_one_at_a_time_help": "Für jeden ungespeicherten Entwurf eine eigene Speicherabfrage statt einer gemeinsamen Liste anzeigen."
},
"en": {
"document.discard_row": "Discard",
"document.finish_save_prompt": "Finish answering the save prompt before opening another design.",
"document.not_saved_yet": "Not saved yet",
"document.save_many": "Save changes to {n} designs?",
"document.save_row": "Save",
"document.save_selected": "Save Selected",
"prefs.save_prompt_one_at_a_time": "Ask about each unsaved design separately when closing several",
"prefs.save_prompt_one_at_a_time_help": "Show one save prompt per unsaved design instead of a combined list."
},
"he": {
"document.discard_row": "ביטול שינויים",
"document.finish_save_prompt": "יש לסיים לענות על חלון השמירה לפני פתיחת תכן אחר.",
"document.not_saved_yet": "עדיין לא נשמר",
"document.save_many": "לשמור שינויים ב־{n} תכנים?",
"document.save_row": "שמירה",
"document.save_selected": "שמירת הנבחרים",
"prefs.save_prompt_one_at_a_time": "לשאול על כל תכן שלא נשמר בנפרד בעת סגירת כמה",
"prefs.save_prompt_one_at_a_time_help": "להציג חלון שמירה נפרד לכל תכן שלא נשמר במקום רשימה משותפת."
},
"ja": {
"document.discard_row": "破棄",
"document.finish_save_prompt": "別のデザインを開く前に、保存の確認に回答してください。",
"document.not_saved_yet": "未保存",
"document.save_many": "{n} 件のデザインの変更を保存しますか?",
"document.save_row": "保存",
"document.save_selected": "選択項目を保存",
"prefs.save_prompt_one_at_a_time": "複数を閉じるとき、未保存のデザインごとに確認する",
"prefs.save_prompt_one_at_a_time_help": "一覧でまとめて確認する代わりに、未保存のデザインごとに保存を確認します。"
},
"ko": {
"document.discard_row": "버리기",
"document.finish_save_prompt": "다른 디자인을 열기 전에 저장 여부를 선택하세요.",
"document.not_saved_yet": "아직 저장하지 않음",
"document.save_many": "디자인 {n}개의 변경 사항을 저장하시겠습니까?",
"document.save_row": "저장",
"document.save_selected": "선택 항목 저장",
"prefs.save_prompt_one_at_a_time": "여러 디자인을 닫을 때 저장하지 않은 디자인마다 따로 묻기",
"prefs.save_prompt_one_at_a_time_help": "통합 목록 대신 저장하지 않은 디자인마다 저장 여부를 묻습니다."
},
"vi": {
"document.discard_row": "Bỏ thay đổi",
"document.finish_save_prompt": "Hãy trả lời xong hộp thoại lưu trước khi mở thiết kế khác.",
"document.not_saved_yet": "Chưa lưu",
"document.save_many": "Lưu thay đổi cho {n} thiết kế?",
"document.save_row": "Lưu",
"document.save_selected": "Lưu mục đã chọn",
"prefs.save_prompt_one_at_a_time": "Hỏi riêng từng thiết kế chưa lưu khi đóng nhiều thiết kế",
"prefs.save_prompt_one_at_a_time_help": "Hiển thị một hộp thoại lưu cho mỗi thiết kế chưa lưu thay vì một danh sách chung."
},
"zh": {
"document.discard_row": "放弃",
"document.finish_save_prompt": "请先回答保存提示,再打开其他设计。",
"document.not_saved_yet": "尚未保存",
"document.save_many": "保存 {n} 个设计的更改?",
"document.save_row": "保存",
"document.save_selected": "保存所选项",
"prefs.save_prompt_one_at_a_time": "关闭多个设计时,逐个询问未保存的设计",
"prefs.save_prompt_one_at_a_time_help": "对每个未保存的设计分别显示保存提示,而不是合并列表。"
}
}
@@ -1,8 +0,0 @@
{
"en": { "cmd.selection_get": "Get Selection" },
"ar": { "cmd.selection_get": "الحصول على التحديد" },
"he": { "cmd.selection_get": "קבלת הבחירה" },
"ja": { "cmd.selection_get": "選択を取得" },
"vi": { "cmd.selection_get": "Lấy vùng chọn" },
"zh": { "cmd.selection_get": "获取选择" }
}
@@ -1,38 +0,0 @@
{
"en": {
"Segments": "Segments",
"Split Edge": "Split Edge",
"Remove this segment": "Remove this segment",
"One more stretch of the picked edge, each with its own angle, height and turns": "One more stretch of the picked edge, each with its own angle, height and turns"
},
"ar": {
"Segments": "المقاطع",
"Split Edge": "تقسيم الحافة",
"Remove this segment": "إزالة هذا المقطع",
"One more stretch of the picked edge, each with its own angle, height and turns": "مقطع آخر من الحافة المختارة، لكل منها زاويتها وارتفاعها ولفّاتها"
},
"he": {
"Segments": "מקטעים",
"Split Edge": "פיצול המקצוע",
"Remove this segment": "הסרת המקטע הזה",
"One more stretch of the picked edge, each with its own angle, height and turns": "מקטע נוסף של המקצוע הנבחר, שלכל אחד זווית, גובה וכיפופים משלו"
},
"ja": {
"Segments": "セグメント",
"Split Edge": "エッジを分割",
"Remove this segment": "このセグメントを削除",
"One more stretch of the picked edge, each with its own angle, height and turns": "選択したエッジのもう一つの区間。それぞれに独自の角度、高さ、曲げ方向があります"
},
"vi": {
"Segments": "Đoạn",
"Split Edge": "Chia cạnh",
"Remove this segment": "Xóa đoạn này",
"One more stretch of the picked edge, each with its own angle, height and turns": "Thêm một đoạn nữa của cạnh đã chọn, mỗi đoạn có góc, chiều cao và hướng uốn riêng"
},
"zh": {
"Segments": "分段",
"Split Edge": "分割边",
"Remove this segment": "移除此分段",
"One more stretch of the picked edge, each with its own angle, height and turns": "所选边的又一段,每段都有自己的角度、高度和折弯方向"
}
}
@@ -1,62 +0,0 @@
{
"en": {
"prefs.sketch.cursor_coordinates": "Show the cursor's coordinates in a sketch",
"prefs.sketch.cursor_coordinates_note": "Beside the pointer, its X and Y from the sketch origin, also with no tool running. Off: only while a tool places a point."
},
"ar": {
"prefs.sketch.cursor_coordinates": "إظهار إحداثيات المؤشر في الرسم",
"prefs.sketch.cursor_coordinates_note": "بجانب المؤشر، قيمتا X وY من أصل الرسم، حتى دون تشغيل أي أداة. عند الإيقاف: فقط عندما تضع أداةٌ نقطة."
},
"de": {
"prefs.sketch.cursor_coordinates": "Cursorkoordinaten in der Skizze anzeigen",
"prefs.sketch.cursor_coordinates_note": "Neben dem Zeiger seine X- und Y-Werte vom Skizzenursprung, auch ohne aktives Werkzeug. Aus: nur während ein Werkzeug einen Punkt setzt."
},
"es": {
"prefs.sketch.cursor_coordinates": "Mostrar las coordenadas del cursor en un croquis",
"prefs.sketch.cursor_coordinates_note": "Junto al puntero, su X e Y desde el origen del croquis, también sin ninguna herramienta activa. Desactivado: solo mientras una herramienta coloca un punto."
},
"fr": {
"prefs.sketch.cursor_coordinates": "Afficher les coordonnées du curseur dans une esquisse",
"prefs.sketch.cursor_coordinates_note": "À côté du pointeur, ses X et Y depuis l'origine de l'esquisse, même sans outil actif. Désactivé : seulement pendant qu'un outil place un point."
},
"he": {
"prefs.sketch.cursor_coordinates": "הצגת קואורדינטות הסמן בסקיצה",
"prefs.sketch.cursor_coordinates_note": "ליד הסמן, ערכי X ו-Y שלו מראשית הסקיצה, גם כשאין כלי פעיל. כבוי: רק בזמן שכלי ממקם נקודה."
},
"it": {
"prefs.sketch.cursor_coordinates": "Mostra le coordinate del cursore in uno schizzo",
"prefs.sketch.cursor_coordinates_note": "Accanto al puntatore, la sua X e Y dall'origine dello schizzo, anche senza strumenti attivi. Disattivato: solo mentre uno strumento posiziona un punto."
},
"ja": {
"prefs.sketch.cursor_coordinates": "スケッチでカーソル座標を表示",
"prefs.sketch.cursor_coordinates_note": "ツールを実行していないときも、ポインターの横にスケッチ原点からの X と Y を表示します。オフ: ツールで点を配置している間だけ表示します。"
},
"ko": {
"prefs.sketch.cursor_coordinates": "스케치에서 커서 좌표 표시",
"prefs.sketch.cursor_coordinates_note": "도구를 실행하지 않을 때도 포인터 옆에 스케치 원점 기준 X와 Y를 표시합니다. 끄기: 도구로 점을 배치하는 동안에만 표시합니다."
},
"pl": {
"prefs.sketch.cursor_coordinates": "Pokazuj współrzędne kursora w szkicu",
"prefs.sketch.cursor_coordinates_note": "Obok wskaźnika jego X i Y od początku szkicu, także gdy żadne narzędzie nie działa. Wyłączone: tylko gdy narzędzie umieszcza punkt."
},
"pt-BR": {
"prefs.sketch.cursor_coordinates": "Mostrar as coordenadas do cursor em um esboço",
"prefs.sketch.cursor_coordinates_note": "Ao lado do ponteiro, seu X e Y a partir da origem do esboço, também sem nenhuma ferramenta ativa. Desativado: só enquanto uma ferramenta posiciona um ponto."
},
"ru": {
"prefs.sketch.cursor_coordinates": "Показывать координаты курсора в эскизе",
"prefs.sketch.cursor_coordinates_note": "Рядом с указателем его X и Y от начала координат эскиза, даже без активного инструмента. Выкл.: только пока инструмент ставит точку."
},
"vi": {
"prefs.sketch.cursor_coordinates": "Hiển thị tọa độ con trỏ trong bản phác thảo",
"prefs.sketch.cursor_coordinates_note": "Bên cạnh con trỏ, X và Y của nó tính từ gốc bản phác thảo, kể cả khi không có công cụ nào chạy. Tắt: chỉ khi một công cụ đang đặt điểm."
},
"zh": {
"prefs.sketch.cursor_coordinates": "在草图中显示光标坐标",
"prefs.sketch.cursor_coordinates_note": "即使没有运行工具,也在指针旁显示其相对于草图原点的 X 和 Y。关闭:仅在工具放置点时显示。"
},
"zh-TW": {
"prefs.sketch.cursor_coordinates": "在草圖中顯示游標座標",
"prefs.sketch.cursor_coordinates_note": "即使沒有執行工具,也在指標旁顯示其相對於草圖原點的 X 和 Y。關閉:僅在工具放置點時顯示。"
}
}
@@ -1,74 +0,0 @@
{
"en": {
"ui.sketch_links_added_curve": "{command} added 1 curve to the sketch.",
"ui.sketch_links_added_curves": "{command} added {count} curves to the sketch.",
"ui.sketch_links_added_point": "{command} added 1 point to the sketch.",
"ui.sketch_links_added_points": "{command} added {count} points to the sketch.",
"ui.sketch_links_hidden": "The result is hidden because {option} is off in the sketch palette.",
"ui.sketch_links_added_curves_and_points": "{command} added {curves} and {points} to the sketch.",
"ui.sketch_links_curve_count_one": "1 curve",
"ui.sketch_links_curve_count": "{count} curves",
"ui.sketch_links_point_count_one": "1 point",
"ui.sketch_links_point_count": "{count} points"
},
"ar": {
"ui.sketch_links_added_curve": "أضاف {command} منحنى واحدًا إلى الرسم.",
"ui.sketch_links_added_curves": "أضاف {command} منحنيات إلى الرسم (العدد: {count}).",
"ui.sketch_links_added_point": "أضاف {command} نقطة واحدة إلى الرسم.",
"ui.sketch_links_added_points": "أضاف {command} نقاطًا إلى الرسم (العدد: {count}).",
"ui.sketch_links_hidden": "النتيجة مخفية لأن خيار {option} مُعطَّل في خيارات الرسم.",
"ui.sketch_links_added_curves_and_points": "أضاف {command} إلى الرسم {curves} و{points}.",
"ui.sketch_links_curve_count_one": "منحنى واحدًا",
"ui.sketch_links_curve_count": "منحنيات (العدد: {count})",
"ui.sketch_links_point_count_one": "نقطة واحدة",
"ui.sketch_links_point_count": "نقاطًا (العدد: {count})"
},
"he": {
"ui.sketch_links_added_curve": "{command} הוסיף עקומה אחת לסקיצה.",
"ui.sketch_links_added_curves": "{command} הוסיף {count} עקומות לסקיצה.",
"ui.sketch_links_added_point": "{command} הוסיף נקודה אחת לסקיצה.",
"ui.sketch_links_added_points": "{command} הוסיף {count} נקודות לסקיצה.",
"ui.sketch_links_hidden": "התוצאה מוסתרת כי האפשרות {option} כבויה באפשרויות הסקיצה.",
"ui.sketch_links_added_curves_and_points": "{command} הוסיף לסקיצה {curves} ו־{points}.",
"ui.sketch_links_curve_count_one": "עקומה אחת",
"ui.sketch_links_curve_count": "{count} עקומות",
"ui.sketch_links_point_count_one": "נקודה אחת",
"ui.sketch_links_point_count": "{count} נקודות"
},
"ja": {
"ui.sketch_links_added_curve": "{command} でスケッチに曲線を 1 本追加しました。",
"ui.sketch_links_added_curves": "{command} でスケッチに曲線を {count} 本追加しました。",
"ui.sketch_links_added_point": "{command} でスケッチに点を 1 個追加しました。",
"ui.sketch_links_added_points": "{command} でスケッチに点を {count} 個追加しました。",
"ui.sketch_links_hidden": "スケッチオプションの {option} がオフのため、結果は表示されていません。",
"ui.sketch_links_added_curves_and_points": "{command} でスケッチに{curves}と{points}を追加しました。",
"ui.sketch_links_curve_count_one": "曲線 1 本",
"ui.sketch_links_curve_count": "曲線 {count} 本",
"ui.sketch_links_point_count_one": "点 1 個",
"ui.sketch_links_point_count": "点 {count} 個"
},
"vi": {
"ui.sketch_links_added_curve": "{command} đã thêm 1 đường cong vào bản phác thảo.",
"ui.sketch_links_added_curves": "{command} đã thêm {count} đường cong vào bản phác thảo.",
"ui.sketch_links_added_point": "{command} đã thêm 1 điểm vào bản phác thảo.",
"ui.sketch_links_added_points": "{command} đã thêm {count} điểm vào bản phác thảo.",
"ui.sketch_links_hidden": "Kết quả bị ẩn vì {option} đang tắt trong Tùy chọn phác thảo.",
"ui.sketch_links_added_curves_and_points": "{command} đã thêm {curves} và {points} vào bản phác thảo.",
"ui.sketch_links_curve_count_one": "1 đường cong",
"ui.sketch_links_curve_count": "{count} đường cong",
"ui.sketch_links_point_count_one": "1 điểm",
"ui.sketch_links_point_count": "{count} điểm"
},
"zh": {
"ui.sketch_links_added_curve": "{command} 已向草图添加 1 条曲线。",
"ui.sketch_links_added_curves": "{command} 已向草图添加 {count} 条曲线。",
"ui.sketch_links_added_point": "{command} 已向草图添加 1 个点。",
"ui.sketch_links_added_points": "{command} 已向草图添加 {count} 个点。",
"ui.sketch_links_hidden": "结果已隐藏,因为草图选项中的“{option}”已关闭。",
"ui.sketch_links_added_curves_and_points": "{command} 已向草图添加{curves}和{points}。",
"ui.sketch_links_curve_count_one": "1 条曲线",
"ui.sketch_links_curve_count": "{count} 条曲线",
"ui.sketch_links_point_count_one": "1 个点",
"ui.sketch_links_point_count": "{count} 个点"
}
}
@@ -1,38 +0,0 @@
{
"en": {
"sketch.move_released": "Moved: {count} constraints tying it to what stays were let go ({names}).",
"sketch.move_released_one": "Moved: {count} constraint tying it to what stays was let go ({names})."
},
"ar": {
"sketch.move_released": "تم النقل: أُزيلت {count} قيود كانت تربطه بما بقي ({names}).",
"sketch.move_released_one": "تم النقل: أُزيل {count} قيد كان يربطه بما بقي ({names})."
},
"de": {
"sketch.move_released": "Verschoben: {count} Abhängigkeiten zum Rest wurden gelöst ({names}).",
"sketch.move_released_one": "Verschoben: {count} Abhängigkeit zum Rest wurde gelöst ({names})."
},
"es": {
"sketch.move_released": "Movido: se soltaron {count} restricciones que lo unían a lo que queda ({names}).",
"sketch.move_released_one": "Movido: se soltó {count} restricción que lo unía a lo que queda ({names})."
},
"fr": {
"sketch.move_released": "Déplacé : {count} contraintes qui le liaient au reste ont été relâchées ({names}).",
"sketch.move_released_one": "Déplacé : {count} contrainte qui le liait au reste a été relâchée ({names})."
},
"he": {
"sketch.move_released": "הוזז: {count} אילוצים שקשרו אותו למה שנשאר שוחררו ({names}).",
"sketch.move_released_one": "הוזז: {count} אילוץ שקשר אותו למה שנשאר שוחרר ({names})."
},
"ja": {
"sketch.move_released": "移動しました: 残る要素とつないでいた拘束 {count} 個を解除しました ({names})。",
"sketch.move_released_one": "移動しました: 残る要素とつないでいた拘束 {count} 個を解除しました ({names})。"
},
"vi": {
"sketch.move_released": "Đã di chuyển: đã bỏ {count} ràng buộc nối nó với phần còn lại ({names}).",
"sketch.move_released_one": "Đã di chuyển: đã bỏ {count} ràng buộc nối nó với phần còn lại ({names})."
},
"zh": {
"sketch.move_released": "已移动:已解除 {count} 个将其与保留部分相连的约束({names})。",
"sketch.move_released_one": "已移动:已解除 {count} 个将其与保留部分相连的约束({names})。"
}
}
@@ -1,42 +0,0 @@
{
"en": {
"prefs.sketch.max_points": "Largest sketch",
"prefs.sketch.max_points_note": "The most points or curves one sketch holds: 20000 by default, at most 200000. Insert SVG and Insert DXF refuse a larger drawing. A large sketch solves and draws more slowly.",
"prefs.sketch.max_points_unit": "points"
},
"ar": {
"prefs.sketch.max_points": "أكبر حجم للرسم",
"prefs.sketch.max_points_note": "أكبر عدد من النقاط أو المنحنيات في رسم واحد: 20000 افتراضيًا، و200000 كحد أقصى. يرفض «إدراج SVG» و«إدراج DXF» رسمًا أكبر. الرسم الكبير يُحل ويُعرض بشكل أبطأ.",
"prefs.sketch.max_points_unit": "نقطة"
},
"de": {
"prefs.sketch.max_points": "Größte Skizze",
"prefs.sketch.max_points_note": "Die meisten Punkte oder Kurven, die eine Skizze aufnimmt: standardmäßig 20000, höchstens 200000. SVG einfügen und DXF einfügen lehnen eine größere Zeichnung ab. Eine große Skizze wird langsamer gelöst und gezeichnet.",
"prefs.sketch.max_points_unit": "Punkte"
},
"he": {
"prefs.sketch.max_points": "הסקיצה הגדולה ביותר",
"prefs.sketch.max_points_note": "המספר המרבי של נקודות או עקומות בסקיצה אחת: 20000 כברירת מחדל, ועד 200000. הוספת SVG והוספת DXF דוחות שרטוט גדול יותר. סקיצה גדולה נפתרת ומוצגת לאט יותר.",
"prefs.sketch.max_points_unit": "נקודות"
},
"ja": {
"prefs.sketch.max_points": "最大スケッチ",
"prefs.sketch.max_points_note": "1 つのスケッチに入る点または曲線の最大数です。既定は 20000、上限は 200000 です。SVG を挿入と DXF を挿入は、これより大きい図面を受け付けません。大きなスケッチは解決と描画が遅くなります。",
"prefs.sketch.max_points_unit": "点"
},
"ko": {
"prefs.sketch.max_points": "최대 스케치",
"prefs.sketch.max_points_note": "스케치 하나에 들어가는 점 또는 곡선의 최대 개수입니다. 기본값은 20000, 최대 200000입니다. SVG 삽입과 DXF 삽입은 이보다 큰 도면을 거부합니다. 큰 스케치는 해석과 그리기가 느려집니다.",
"prefs.sketch.max_points_unit": "점"
},
"vi": {
"prefs.sketch.max_points": "Phác thảo lớn nhất",
"prefs.sketch.max_points_note": "Số điểm hoặc đường cong tối đa trong một phác thảo: mặc định 20000, tối đa 200000. Chèn tệp SVG và Chèn tệp DXF từ chối bản vẽ lớn hơn. Phác thảo lớn được giải và vẽ chậm hơn.",
"prefs.sketch.max_points_unit": "điểm"
},
"zh": {
"prefs.sketch.max_points": "最大草图",
"prefs.sketch.max_points_note": "一个草图可容纳的点或曲线的最大数量:默认 20000,最多 200000。插入 SVG 和插入 DXF 会拒绝更大的图形。大型草图的求解和绘制会更慢。",
"prefs.sketch.max_points_unit": "点"
}
}
@@ -1,240 +0,0 @@
{
"en": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Baseline",
"sketch_text.valign_top": "Top",
"sketch_text.valign_middle": "Middle",
"sketch_text.valign_bottom": "Bottom"
},
"ar": {
"Vertical": "عمودي",
"sketch_text.valign_baseline": "خط الأساس",
"sketch_text.valign_top": "أعلى",
"sketch_text.valign_middle": "وسط",
"sketch_text.valign_bottom": "أسفل"
},
"bg": {
"Vertical": "Вертикално",
"sketch_text.valign_baseline": "Базова линия",
"sketch_text.valign_top": "Горе",
"sketch_text.valign_middle": "Среда",
"sketch_text.valign_bottom": "Долу"
},
"bs": {
"Vertical": "Vertikalno",
"sketch_text.valign_baseline": "Osnovna linija",
"sketch_text.valign_top": "Vrh",
"sketch_text.valign_middle": "Sredina",
"sketch_text.valign_bottom": "Dno"
},
"ca": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Línia base",
"sketch_text.valign_top": "Dalt",
"sketch_text.valign_middle": "Mig",
"sketch_text.valign_bottom": "Baix"
},
"cs": {
"Vertical": "Svisle",
"sketch_text.valign_baseline": "Účaří",
"sketch_text.valign_top": "Nahoře",
"sketch_text.valign_middle": "Uprostřed",
"sketch_text.valign_bottom": "Dole"
},
"da": {
"Vertical": "Lodret",
"sketch_text.valign_baseline": "Grundlinje",
"sketch_text.valign_top": "Top",
"sketch_text.valign_middle": "Midte",
"sketch_text.valign_bottom": "Bund"
},
"de": {
"Vertical": "Vertikal",
"sketch_text.valign_baseline": "Grundlinie",
"sketch_text.valign_top": "Oben",
"sketch_text.valign_middle": "Mitte",
"sketch_text.valign_bottom": "Unten"
},
"es": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Línea base",
"sketch_text.valign_top": "Arriba",
"sketch_text.valign_middle": "Centro",
"sketch_text.valign_bottom": "Abajo"
},
"fi": {
"Vertical": "Pystysuunta",
"sketch_text.valign_baseline": "Perusviiva",
"sketch_text.valign_top": "Ylä",
"sketch_text.valign_middle": "Keski",
"sketch_text.valign_bottom": "Ala"
},
"fr": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Ligne de base",
"sketch_text.valign_top": "Haut",
"sketch_text.valign_middle": "Milieu",
"sketch_text.valign_bottom": "Bas"
},
"gl": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Liña base",
"sketch_text.valign_top": "Arriba",
"sketch_text.valign_middle": "Medio",
"sketch_text.valign_bottom": "Abaixo"
},
"he": {
"Vertical": "אנכי",
"sketch_text.valign_baseline": "קו בסיס",
"sketch_text.valign_top": "למעלה",
"sketch_text.valign_middle": "אמצע",
"sketch_text.valign_bottom": "למטה"
},
"hr": {
"Vertical": "Okomito",
"sketch_text.valign_baseline": "Osnovna linija",
"sketch_text.valign_top": "Vrh",
"sketch_text.valign_middle": "Sredina",
"sketch_text.valign_bottom": "Dno"
},
"hu": {
"Vertical": "Függőleges",
"sketch_text.valign_baseline": "Alapvonal",
"sketch_text.valign_top": "Fent",
"sketch_text.valign_middle": "Középen",
"sketch_text.valign_bottom": "Lent"
},
"id": {
"Vertical": "Vertikal",
"sketch_text.valign_baseline": "Garis dasar",
"sketch_text.valign_top": "Atas",
"sketch_text.valign_middle": "Tengah",
"sketch_text.valign_bottom": "Bawah"
},
"it": {
"Vertical": "Verticale",
"sketch_text.valign_baseline": "Linea di base",
"sketch_text.valign_top": "Alto",
"sketch_text.valign_middle": "Centro",
"sketch_text.valign_bottom": "Basso"
},
"ja": {
"Vertical": "垂直",
"sketch_text.valign_baseline": "ベースライン",
"sketch_text.valign_top": "上",
"sketch_text.valign_middle": "中央",
"sketch_text.valign_bottom": "下"
},
"ka": {
"Vertical": "ვერტიკალური",
"sketch_text.valign_baseline": "საბაზისო ხაზი",
"sketch_text.valign_top": "ზემოთ",
"sketch_text.valign_middle": "შუა",
"sketch_text.valign_bottom": "ქვემოთ"
},
"ko": {
"Vertical": "수직",
"sketch_text.valign_baseline": "기준선",
"sketch_text.valign_top": "위",
"sketch_text.valign_middle": "가운데",
"sketch_text.valign_bottom": "아래"
},
"ms": {
"Vertical": "Menegak",
"sketch_text.valign_baseline": "Garis dasar",
"sketch_text.valign_top": "Atas",
"sketch_text.valign_middle": "Tengah",
"sketch_text.valign_bottom": "Bawah"
},
"nb": {
"Vertical": "Loddrett",
"sketch_text.valign_baseline": "Grunnlinje",
"sketch_text.valign_top": "Topp",
"sketch_text.valign_middle": "Midt",
"sketch_text.valign_bottom": "Bunn"
},
"nl": {
"Vertical": "Verticaal",
"sketch_text.valign_baseline": "Basislijn",
"sketch_text.valign_top": "Boven",
"sketch_text.valign_middle": "Midden",
"sketch_text.valign_bottom": "Onder"
},
"pl": {
"Vertical": "Pionowo",
"sketch_text.valign_baseline": "Linia bazowa",
"sketch_text.valign_top": "Góra",
"sketch_text.valign_middle": "Środek",
"sketch_text.valign_bottom": "Dół"
},
"pt-BR": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Linha de base",
"sketch_text.valign_top": "Topo",
"sketch_text.valign_middle": "Meio",
"sketch_text.valign_bottom": "Base"
},
"ro": {
"Vertical": "Vertical",
"sketch_text.valign_baseline": "Linie de bază",
"sketch_text.valign_top": "Sus",
"sketch_text.valign_middle": "Mijloc",
"sketch_text.valign_bottom": "Jos"
},
"ru": {
"Vertical": "По вертикали",
"sketch_text.valign_baseline": "Базовая линия",
"sketch_text.valign_top": "Верх",
"sketch_text.valign_middle": "Середина",
"sketch_text.valign_bottom": "Низ"
},
"sr": {
"Vertical": "Вертикално",
"sketch_text.valign_baseline": "Основна линија",
"sketch_text.valign_top": "Врх",
"sketch_text.valign_middle": "Средина",
"sketch_text.valign_bottom": "Дно"
},
"sv": {
"Vertical": "Lodrät",
"sketch_text.valign_baseline": "Baslinje",
"sketch_text.valign_top": "Överkant",
"sketch_text.valign_middle": "Mitten",
"sketch_text.valign_bottom": "Nederkant"
},
"tr": {
"Vertical": "Dikey",
"sketch_text.valign_baseline": "Taban çizgisi",
"sketch_text.valign_top": "Üst",
"sketch_text.valign_middle": "Orta",
"sketch_text.valign_bottom": "Alt"
},
"uk": {
"Vertical": "По вертикалі",
"sketch_text.valign_baseline": "Базова лінія",
"sketch_text.valign_top": "Верх",
"sketch_text.valign_middle": "Середина",
"sketch_text.valign_bottom": "Низ"
},
"vi": {
"Vertical": "Dọc",
"sketch_text.valign_baseline": "Đường cơ sở",
"sketch_text.valign_top": "Trên",
"sketch_text.valign_middle": "Giữa",
"sketch_text.valign_bottom": "Dưới"
},
"zh-TW": {
"Vertical": "垂直",
"sketch_text.valign_baseline": "基線",
"sketch_text.valign_top": "頂端",
"sketch_text.valign_middle": "置中",
"sketch_text.valign_bottom": "底端"
},
"zh": {
"Vertical": "垂直",
"sketch_text.valign_baseline": "基线",
"sketch_text.valign_top": "顶端",
"sketch_text.valign_middle": "居中",
"sketch_text.valign_bottom": "底端"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"prefs.sketch.snap_to_visible_grid": "Snap to the grid's visible crossings",
"prefs.sketch_snap_to_visible_grid_note": "A point in a sketch snaps to the crossings of the lines the grid draws when the pointer means one, and to the finer lattice between them otherwise. Off: the point snaps to the finer lattice only, as before."
},
"ar": {
"prefs.sketch.snap_to_visible_grid": "الالتقاط عند تقاطع الشبكة المرئي",
"prefs.sketch_snap_to_visible_grid_note": "تلتصق النقطة في الرسم عند تقاطع الخطوط التي ترسمها الشبكة عندما يشير المؤشر إلى أحدها، وإلا تلتصق بالشبكة الأدق بينها. عند الإيقاف: تلتصق النقطة بالشبكة الأدق فقط، كما كان."
},
"de": {
"prefs.sketch.snap_to_visible_grid": "Am sichtbaren Schnittpunkt des Rasters fangen",
"prefs.sketch_snap_to_visible_grid_note": "Ein Punkt in einer Skizze rastet am Schnittpunkt der vom Raster gezeichneten Linien ein, wenn der Zeiger auf einen davon zeigt, sonst am feineren Gitter zwischen ihnen. Aus: Der Punkt rastet nur am feineren Gitter ein, wie zuvor."
},
"he": {
"prefs.sketch.snap_to_visible_grid": "הצמדה למפגשים הנראים של הרשת",
"prefs.sketch_snap_to_visible_grid_note": "נקודה בסקיצה נצמדת למפגש של הקווים שהרשת מציירת כשהמצביע מכוון לאחד מהם, ולרשת הדקה שביניהם אחרת. כבוי: הנקודה נצמדת לרשת הדקה בלבד, כמו קודם."
},
"ja": {
"prefs.sketch.snap_to_visible_grid": "グリッドの交点にスナップ",
"prefs.sketch_snap_to_visible_grid_note": "スケッチ内の点は、グリッドが描画する線の交点にポインターが指しているときはその交点にスナップし、それ以外ではその間のより細かい格子の交点にスナップします。オフ: 前也是一样で、点はより細かい格子の交点にだけスナップします。"
},
"ko": {
"prefs.sketch.snap_to_visible_grid": "격자의 보이는 교차점에 스냅",
"prefs.sketch_snap_to_visible_grid_note": "스케치의 점은 포인터가 가리키는 경우 격자가 그리는 선들의 교차점에 스냅되고, 그렇지 않으면 그 사이의 더 촘촘한 격자에 스냅됩니다. 끄기: 이전과 같이 점은 촘촘한 격자에만 스냅됩니다."
},
"vi": {
"prefs.sketch.snap_to_visible_grid": "Bắt vào giao điểm nhìn thấy của lưới",
"prefs.sketch_snap_to_visible_grid_note": "Một điểm trong phác thảo bắt vào giao điểm của các đường mà lưới vẽ khi con trỏ chỉ vào một giao điểm, và vào lưới mịn hơn giữa chúng trong trường hợp khác. Tắt: điểm chỉ bắt vào lưới mịn hơn, như trước."
},
"zh": {
"prefs.sketch.snap_to_visible_grid": "捕捉网格可见的交点",
"prefs.sketch_snap_to_visible_grid_note": "当指针指向网格绘制的线的交点时,草图中的点捕捉到该交点,否则捕捉到交点之间更细的网格。关闭:点只捕捉到更细的网格,与之前相同。"
}
}
@@ -1,62 +0,0 @@
{
"uk": {
"prefs.render_legacy_memory_admission": "Використовувати попередні перевірки пам'яті рендерингу",
"prefs.render_legacy_memory_admission_help": "Дозволяє нативний рендеринг у межах фіксованих бюджетів спільної пам'яті та пам'яті хоста, навіть коли оцінка перевищує доступну RAM. Обмеження пристрою й перевірки виділення пам'яті все одно діють.",
"render.caustics_area_lights": "Каустика площинних джерел світла",
"render.caustics_environment": "Каустика середовища",
"render.cpu_threads": "Робочі потоки CPU",
"render.cpu_threads_auto": "Авто",
"render.cpu_threads_custom": "Власна",
"render.cpu_threads_help": "«Авто» використовує доступні робочі потоки CPU. Один потік працює послідовно. Більше потоків може потребувати більше пам'яті.",
"render.cpu_threads_single": "Один",
"render.cpu_threads_web": "Рендеринг у браузері використовує один кооперативний робочий потік. Вибір робочих потоків, збережений для настільного застосунку, не змінюється.",
"render.denoise_class_background": "Пропущено: фон",
"render.denoise_class_coverage": "Пропущено: часткове покриття",
"render.denoise_class_degenerate": "Пропущено: вироджений шлях",
"render.denoise_class_depth": "Пропущено: ліміт глибини шляху",
"render.denoise_class_emitter": "Пропущено: джерело світла",
"render.denoise_class_exit": "Пропущено: несумісний вихід",
"render.denoise_class_identity": "Пропущено: ліміт ідентичності напрямних даних",
"render.denoise_class_lens": "Пропущено: глибина різкості",
"render.denoise_class_material": "Пропущено: непідтримуваний матеріал",
"render.denoise_class_nested": "Пропущено: вкладене середовище",
"render.denoise_class_optical": "Придатне: заломлена поверхня",
"render.denoise_class_reflection": "Пропущено: відбивна кінцева точка",
"render.denoise_class_surface": "Придатне: поверхня",
"render.denoise_class_tir": "Пропущено: повне внутрішнє відбиття",
"render.denoise_class_transmission": "Пропущено: подальше пропускання",
"render.denoise_class_unavailable": "Пропущено: немає напрямних даних",
"render.denoise_class_volume": "Пропущено: об'ємне розсіювання",
"render.denoise_diagnostics_counts": "Придатні: {eligible} · Пропущені: {skipped}",
"render.denoise_diagnostics_enable": "Збирати діагностику шумозаглушення",
"render.denoise_diagnostics_grid": "Кількість пікселів у внутрішньому розмірі {width} × {height}.",
"render.denoise_diagnostics_help": "Збирає кількість придатних і пропущених пікселів, навіть коли шумозаглушення вимкнено. Лічба використовує внутрішній розмір рендерингу, а маска — вихідний розмір.",
"render.denoise_diagnostics_title": "Діагностика шумозаглушення",
"render.denoise_export_mask": "Експортувати маску PNG",
"render.denoise_firefly": "Пригнічувати ізольовані яскраві пікселі",
"render.denoise_format_mask": "Маска PNG",
"render.denoise_mask_copy_help": "Експортуйте маску шумозаглушення як PNG або поверніться до відрендереного зображення, щоб скопіювати його.",
"render.denoise_mask_unavailable": "Увімкніть діагностику шумозаглушення й відрендерте зображення, щоб оглянути його маску.",
"render.denoise_optical_filter": "Фільтрувати дзеркала й скло",
"render.denoise_optical_filter_help": "Фільтрувати придатне відбите й пропущене світло. Вимкніть, щоб шумозаглушувати лише непрозорі поверхні.",
"render.denoise_passes": "Проходи фільтрації",
"render.denoise_settings_help": "Більше проходів згладжує ширшу область. Сила визначає, скільки фільтрації застосовує кожен прохід. Непідтримувані оптичні шляхи залишаються нефільтрованими.",
"render.denoise_strength": "Сила шумозаглушення",
"render.denoise_view_image": "Відрендерене зображення",
"render.denoise_view_mask": "Маска шумозаглушення",
"render.metal_energy_compensation": "Відновлювати відбивну здатність шорсткого металу",
"render.metal_energy_compensation_help": "Компенсує втрати світла між мікрогранями шорсткого металу. Рендеринг на CPU потребує непрямого освітлення.",
"render.quality_legacy_samples": "Збережене значення: {samples} вибірок на піксель. Нові значення обмежено {maximum} вибірками на піксель.",
"render.quality_preset_limit": "Цей пресет перевищує ліміт вибору 16384 вибірок на піксель. Виберіть кількість вибірок до 16384.",
"render.size_8k_uhd": "8K UHD",
"render.supersampling": "Наддискретизація",
"render.supersampling_dimensions": "Рендерить {width} × {height} і зменшує до {output_width} × {output_height}. Використовує вчетверо більше пікселів.",
"render.supersampling_help": "Рендерить із подвійною шириною та висотою, потім зменшує в лінійному світлі. Вихідний розмір не змінюється.",
"render.supersampling_off": "Вимкнено",
"render.supersampling_x2": "2×",
"render.texture_filtering": "Фільтрувати деталі текстури",
"render.texture_filtering_help": "Використовує mip-рівні й анізотропну фільтрацію, щоб зменшити аліасинг текстури під час мінімізації. Потребує більше пам'яті; вимкнено зберігає попередню фільтрацію.",
"ui.construction.axis_hint": "Допоміжна пряма: клацніть точку або введіть її відстань від осі ескізу",
"ui.construction.parallel_hint": "Допоміжна пряма: виберіть пряму, потім клацніть або введіть зсув; клацніть правою кнопкою, щоб змінити опорний об'єкт"
}
}
@@ -1,79 +0,0 @@
{
"uk": {
"ai.prefs.control_failed": "Не вдалося запустити канал керування: {error}",
"ai.prefs.control_from_launch": "Запущено з --control на порту {port} для цього запуску. Зміни тут набудуть чинності наступного разу, коли SolidCraft запуститься без --control.",
"ai.prefs.control_listening": "Прослуховування на 127.0.0.1:{port}",
"ai.prefs.control_not_listening": "Не прослуховується",
"ai.prefs.control_port": "Порт",
"ai.prefs.control_port_note": "Порт, до якого ШІ-агенти підключаються на цьому комп'ютері (127.0.0.1). 27878 — типовий: якщо його зайнято, береться наступний вільний. Будь-який інший порт використовується точно. Спрямуйте свій клієнт MCP на той самий порт, наприклад solidcraft-cli mcp --connect 127.0.0.1:7878.",
"ai.prefs.control_port_taken": "Порт {port} зайнятий іншою програмою (або іншим вікном SolidCraft). Виберіть інший порт.",
"cmd.assembly_constraint_create": "Обмежити",
"cmd.assembly_constraint_edit": "Редагувати обмеження",
"cmd.construct.axis": "Вісь",
"cmd.construct.plane": "Площина",
"cmd.construct.point": "Точка",
"cmd.note_add": "Додати примітку",
"cmd.note_delete": "Видалити примітку",
"cmd.note_list": "Список приміток",
"cmd.note_update": "Редагувати примітку",
"cmd.selection_get": "Отримати виділення",
"dialog.component_origin": "{placement} · {item}",
"file_load.opened_behind": "Відкрито {name} у новій вкладці",
"help.construct.axis": "Створює допоміжну вісь методом, який підказують ваші вибори: уздовж ребра чи прямої, крізь отвір або круглу грань, там, де перетинаються дві площини, через дві точки чи перпендикулярно до грані через точку. Використовуйте, коли ви знаєте опорні елементи, але не метод.",
"help.construct.plane": "Створює допоміжну площину методом, який підказують ваші вибори: зі зміщенням від площини, через точку, між двома площинами, через прямі чи точки, дотично до криволінійної грані чи перпендикулярно до траєкторії. Використовуйте, коли ви знаєте опорні елементи, але не метод.",
"help.construct.point": "Створює допоміжну точку методом, який підказують ваші вибори: у вершині, у центрі кола чи кулі, уздовж ребра, там, де перетинаються дві прямі чи три площини, або там, де пряма перетинає площину. Використовуйте, коли ви знаєте опорні елементи, але не метод.",
"nav.maya_horizontal_zoom.help": "Alt+праве перетягування: праворуч — наближення, ліворуч — віддалення. Вимкніть, щоб повернути вертикальне масштабування перетягуванням.",
"nav.maya_horizontal_zoom.label": "Maya: горизонтальне масштабування перетягуванням",
"operations.cancel": "Скасувати {name}",
"operations.cancelled": "{name} скасовано",
"operations.cancelling": "Скасування…",
"operations.cannot_cancel": "{name} не можна скасувати",
"operations.feature": "Операція",
"operations.feature_edit": "Редагувати операцію",
"operations.meshing": "Завантаження деталей",
"operations.queued": "У черзі",
"operations.stopped": "Скасовано",
"operations.waiting": "Готово",
"prefs.assemblies": "Збірки",
"prefs.constraint_glyph_size": "Розмір позначок обмежень",
"prefs.constraint_glyph_size_note": "Наскільки великими малюються позначки обмежень та їхні літери чи піктограми в ескізі. 100% — звичайний розмір; позначки зберігають цей розмір на екрані за будь-якого масштабу.",
"prefs.construct_menu_groups": "Групувати інструменти побудови за типом об'єкта",
"prefs.construct_menu_groups_help": "Показувати заголовки «Площини», «Осі» та «Точки». Вимкнено: зберігається початковий порядок меню.",
"prefs.dialog_first_letter_buttons": "Кнопки діалогів реагують на першу літеру",
"prefs.dialog_first_letter_buttons_help": "Коли діалог відкрито, натискання першої літери напису кнопки натискає її: O — OK, С — «Скасувати». Літера, що підходить до двох кнопок, нічого не робить, а сфокусоване текстове поле зберігає натискання. Вимкнено: натискання літер не діє на кнопки, як раніше.",
"prefs.export": "Експорт",
"prefs.export_name": "Ім'я файлу експорту",
"prefs.export_name.body": "Назва експортованого тіла (першого, якщо їх кілька)",
"prefs.export_name.design": "Назва проєкту",
"prefs.export_name_hint": "напр. {design}-{body}",
"prefs.export_name_sample": "Під час експорту цього проєкту пропонується: {name}",
"prefs.export_name_tip": "Ім'я файлу, яке пропонують «Файл» › «Експорт» і «Зберегти як сітку». Ці заповнювачі замінюються:\n{placeholders}\nНевстановлену властивість проєкту пропущено. Залиште поле порожнім, щоб пропонувати назву проєкту або, для сітки, назву тіла.",
"prefs.file_operations_wait": "Чекати на відкриття файлів",
"prefs.file_operations_wait_note": "Поки файл відкривається чи вставляється або зв'язки читаються знову, проєкт чекає за карткою з поступом файлу й кнопкою «Скасувати». Вимкнено: файл показується в панелі операцій, і ви можете працювати далі; вставлення відбувається, коли ви завершите поточну дію, а відкритий тим часом файл потрапляє в нову вкладку.",
"prefs.joint_drag_trackball": "Обертати деталі на кульовому з'єднанні під час перетягування, як трекболом",
"prefs.joint_drag_trackball_help": "Перетягування деталі, яку утримує кульове з'єднання, обертає її найменшим поворотом навколо з'єднання, наче котиться куля розміром із деталь. Вимкнено: схоплена точка точно йде за вказівником, і деталь може також обертатися навколо неї.",
"prefs.operations_panel": "Показувати операції у виді",
"prefs.operations_panel_note": "Тривалі операції (відкриття файлу, обчислення операції, команда агента) показуються в правому нижньому куті виду з поступом і кнопкою, що їх скасовує. Вимкнено: повідомлення «Обчислення», як раніше.",
"render.error_product_placement": "недійсне розміщення виробу",
"sketch.move_released": "Переміщено: звільнено обмежень, що прив'язували його до нерухомого: {count} ({names}).",
"sketch.move_released_one": "Переміщено: звільнено обмеження, що прив'язувало його до нерухомого: {count} ({names}).",
"ui.agent_chat_answered_in": "Відповідь за {time}",
"ui.agent_chat_ended_after": "Завершено за {time}",
"ui.agent_chat_model_search_or_id": "Пошук або введіть будь-який ID моделі…",
"ui.agent_chat_span_h": "{h} год {min} хв",
"ui.agent_chat_span_min": "{n} хв",
"ui.agent_chat_span_s": "{n} с",
"ui.agent_chat_thinking_for": "Міркування: {time}",
"ui.agent_chat_tool_running_for": "триває {time}",
"ui.agent_chat_transcript_assistant": "Асистент:",
"ui.agent_chat_transcript_user": "Користувач:",
"ui.construct_auto.chosen": "Вибрано за вашими опорними елементами. Виберіть інший опорний елемент або приберіть один, щоб змінити метод.",
"ui.construct_auto.no_fit": "Виберіть інші опорні елементи: жоден метод не будує з цих.",
"ui.construct_auto.pick": "Виберіть, з чого будувати: метод випливає з ваших виборів.",
"ui.construct_auto.refs": "Опорні елементи",
"ui.construct_auto.select": "Спершу виберіть опорні елементи для побудови",
"ui.construct_axes": "Осі",
"ui.construct_planes": "Площини",
"ui.construct_points": "Точки"
}
}
-104
View File
@@ -1,104 +0,0 @@
{
"uk": {
"Edit Holes": "Редагувати отвори",
"Select the curves to divide first": "Спершу виберіть криві для поділу",
"browser.canvas_locked": "Полотно заблоковано. Спершу розблокуйте його.",
"cmd.model_body_features": "Перелічити операції тіла",
"cmd.panel.focus.next": "Сфокусувати наступну панель",
"cmd.panel.focus.previous": "Сфокусувати попередню панель",
"cmd.panel.move.next_zone": "Перемістити панель до наступної зони",
"cmd.panel.sash.down": "Змінити розмір роздільника панелей униз",
"cmd.panel.sash.left": "Змінити розмір роздільника панелей ліворуч",
"cmd.panel.sash.reset": "Скинути роздільник сфокусованої панелі",
"cmd.panel.sash.right": "Змінити розмір роздільника панелей праворуч",
"cmd.panel.sash.up": "Змінити розмір роздільника панелей угору",
"cmd.panel.toggle": "Перемкнути сфокусовану панель",
"cmd.pointcloud_reload": "Перезавантажити хмару точок",
"cmd.sketch.replace": "Замінити ескіз",
"cmd.sketch_point_divide": "Поділити криву",
"cmd.ui.palette": "Пошук команд",
"file_load.reloading_cloud": "Перезавантаження хмари точок",
"help.sketch.point.divide": "Розміщує точки, що поділяють вибрані криві на рівні за довжиною частини. Точки залишаються на кожній кривій і зберігають свій крок, коли крива змінюється.",
"hole_folder.applies_to": "Зміни застосовуються до {count} отворів у теці {folder}; кожен зберігає своє місце.",
"nav.orbit_cursor_wrap.help": "Перетягування для обертання, що сягає краю виду, переносить курсор на протилежний край і продовжує обертання. Вимкнено: перетягування зупиняється на краю екрана. Не діє у Wayland і в браузері.",
"nav.orbit_cursor_wrap.label": "Переносити курсор під час обертання",
"parts.family.countersunk_socket_screw": "Гвинт із потайною головкою та внутрішнім шестигранником",
"prefs.browser_body_features": "Операції під тілами",
"prefs.browser_body_features_note": "Кожне тіло в браузері розгортається, показуючи операції часового ланцюжка, що його побудували, у порядку ланцюжка.",
"prefs.design_tools.hole_group": "Групувати отвори, створені разом",
"prefs.design_tools.hole_group_help": "Отвори, створені за один раз, опиняються в одній теці в історії, спершу закритій; відкрийте її, щоб редагувати отвір окремо.",
"prefs.design_tools.hole_several": "Кілька отворів на одній грані",
"prefs.design_tools.hole_several_help": "Вибір іншого місця на грані додає ще один отвір; вибір отвору видаляє його.",
"prefs.history_folder_kind_icon": "Значок теки за її операціями",
"prefs.history_folder_kind_icon_note": "Тека історії, усі операції якої одного типу, показує їхній значок.",
"prefs.panel_layout.recovery": "Не вдалося відновити збережені компонування панелей. Збережені дані не втрачено; «Класичне» залишається доступним.",
"prefs.shared_panel_layout": "Використовувати спільне компонування панелей",
"prefs.shared_panel_layout_help": "Показувати наявні браузер, історію та асистента в переміщуваних панелях. Зміна набуде чинності після застосування налаштувань.",
"prefs.sketch.escape_twice_finishes": "Подвійний Esc завершує ескіз",
"prefs.sketch.escape_twice_finishes_note": "Два швидкі натискання Esc завершують ескіз. Вимкнено: Esc лише скасовує інструмент чи вибір, а ескіз завершує «Завершити ескіз».",
"render.caustics_depth": "Глибина шляху каустики",
"render.caustics_enable": "Каустика скла від точкових і спрямованих джерел світла",
"render.caustics_help": "Кількість фотонів керує шумом і обсягом роботи. Радіус збирання обмінює чіткі деталі на плавнішу оцінку. CPU потребує непрямого освітлення.",
"render.caustics_path_required": "Каустика на CPU потребує непрямого освітлення.",
"render.caustics_photons": "Фотони",
"render.caustics_radius": "Радіус збирання",
"render.glass_abbe": "Число Аббе",
"render.glass_dispersion": "Хроматична дисперсія",
"render.glass_film": "Інтерференція тонкої плівки",
"render.glass_film_ior": "IOR плівки",
"render.glass_film_thickness": "Товщина плівки",
"render.glass_model_enable": "Розширена модель скла",
"render.glass_model_help": "Шорсткість скла розсіює промені, що проходять крізь нього. Дисперсія й колір плівки використовують три смуги довжин хвиль. Для шорстких листів потрібно вимкнути пряме пропускання тіней.",
"render.glass_roughness": "Шорсткість скла",
"render.gpu_job_shader_wait": "Підготовка шейдерів може тривати хвилини",
"sketch.divide_hint": "Точки поділяють кожну криву на рівні за довжиною частини й зберігають їх, коли крива змінюється.",
"ui.first_dimension_scales": "Перший розмір масштабує креслення",
"ui.first_dimension_scales_tip": "Увімкнено: перший лінійний розмір ескізу масштабує креслення, яке він вимірює, тож форма зберігається. Вимкнено: розмір задає лише те, що вимірює.",
"ui.heading_divide_curve": "ПОДІЛИТИ КРИВУ",
"ui.heading_press_pull": "НАТИСНУТИ/ВИТЯГНУТИ",
"ui.mesh_import_origin": "Перемістити до початку координат",
"ui.mesh_import_origin_tip": "Центрувати сітку по X і Y, розмістивши її основу на Z = 0. Коли вимкнено, сітка зберігає координати, записані у файлі.",
"ui.panel_layout.applied": "Застосовано «{name}» у робочій області «{workspace}»",
"ui.panel_layout.cancel": "Скасувати",
"ui.panel_layout.confirm_replace": "Замінити «{name}»?",
"ui.panel_layout.copy": "Копіювати",
"ui.panel_layout.current": "Поточне компонування",
"ui.panel_layout.custom": "Власне",
"ui.panel_layout.custom_hint": "Панелі переміщено після застосування: {name}.",
"ui.panel_layout.details": "Подробиці",
"ui.panel_layout.layout_workspace": "Робоча область компонування",
"ui.panel_layout.page_defaults_hint": "Скидає налаштування цієї сторінки. Розташування панелей і збережені компонування залишаються без змін.",
"ui.panel_layout.panel_layout": "Компонування панелей",
"ui.panel_layout.panel_style": "Стиль панелей",
"ui.panel_layout.replace": "Замінити компонування",
"ui.panel_layout.replace_current": "Замінити поточним",
"ui.panel_layout.replace_short": "Замінити",
"ui.panel_layout.reset": "Скинути робочу область",
"ui.panel_layout.reset_hint": "Повернути робочу область «{workspace}» до типового розташування. Збережені компонування залишаються без змін.",
"ui.panel_layout.reset_short": "Скинути",
"ui.panel_layout.restore_failed": "Не вдалося відновити ваше компонування",
"ui.panel_layout.save": "Зберегти компонування",
"ui.panel_layout.save_as": "Зберегти як",
"ui.panel_layout.save_as_tile": "Зберегти як…",
"ui.panel_layout.selected": "вибрано",
"ui.panel_layout.suggested_name": "Компонування {n}",
"ui.panel_layout.try_again": "Спробувати знову",
"ui.panel_layout.validation.builtin": "Вбудовані компонування не можна змінювати",
"ui.panel_layout.validation.duplicate": "Ця назва вже використовується",
"ui.panel_layout.validation.empty": "Введіть назву",
"ui.panel_layout.validation.full": "Збережено 64 з 64. Виберіть одне для заміни.",
"ui.panel_layout.validation.invalid": "Використовуйте від 1 до 64 символів без керівних символів",
"ui.panel_layout.workspace.classic": "Класичне",
"ui.panel_layout.workspace.modelling": "Моделювання",
"ui.panel_layout.workspace.render": "Рендеринг",
"ui.panel_layout.workspace.review": "Огляд",
"ui.panel_layout.workspace.sketch": "Ескіз",
"ui.panel_layout.your_layout": "ваше компонування",
"ui.point_cloud_reload": "Перезавантажити з файлу",
"ui.project_references_construction": "Проєктувати посилання як допоміжну геометрію",
"ui.project_references_construction_note": "«Проєктувати», «Перетин», «Включити 3D-геометрію» і ребра грані, які додає новий ескіз на грані, створюють допоміжну геометрію: посилання для креслення, не включені до профілів. Вони залишаються пов'язаними з моделлю.",
"ui.replace_sketch.from_file": "З файлу проєкту…",
"ui.replace_sketch.no_sketches": "У цьому проєкті немає ескізу, який можна взяти",
"ui.segments": "Сегменти"
}
}
@@ -1,34 +0,0 @@
{
"en": {
"ui.view_compass_tip": "View from {axis}. Click again to reverse. Drag to orbit.",
"ui.view_compass_tip_snap": "View from {axis}. Click again to reverse. Drag to orbit; hold Shift to snap."
},
"ar": {
"ui.view_compass_tip": "العرض من {axis}. انقر مرة أخرى للعكس. اسحب لتدوير العرض.",
"ui.view_compass_tip_snap": "العرض من {axis}. انقر مرة أخرى للعكس. اسحب لتدوير العرض؛ اضغط مطولًا على Shift للالتقاط."
},
"de": {
"ui.view_compass_tip": "Ansicht von {axis}. Erneut klicken zum Umkehren. Ziehen zum Drehen.",
"ui.view_compass_tip_snap": "Ansicht von {axis}. Erneut klicken zum Umkehren. Ziehen zum Drehen; Umschalttaste halten zum Einrasten."
},
"he": {
"ui.view_compass_tip": "מבט מ־{axis}. לחיצה נוספת הופכת את הכיוון. גרירה מסובבת את המבט.",
"ui.view_compass_tip_snap": "מבט מ־{axis}. לחיצה נוספת הופכת את הכיוון. גרירה מסובבת את המבט; יש להחזיק את Shift כדי להצמיד."
},
"ja": {
"ui.view_compass_tip": "{axis}方向から表示します。もう一度クリックすると反転します。ドラッグでオービットします。",
"ui.view_compass_tip_snap": "{axis}方向から表示します。もう一度クリックすると反転します。ドラッグでオービットし、Shiftを押すとスナップします。"
},
"ko": {
"ui.view_compass_tip": "{axis} 방향에서 봅니다. 다시 클릭하면 반대 방향으로 바뀝니다. 드래그하여 회전합니다.",
"ui.view_compass_tip_snap": "{axis} 방향에서 봅니다. 다시 클릭하면 반대 방향으로 바뀝니다. 드래그하여 회전하고, Shift를 누르면 스냅됩니다."
},
"vi": {
"ui.view_compass_tip": "Nhìn từ {axis}. Bấm lần nữa để đảo ngược. Kéo để xoay góc nhìn.",
"ui.view_compass_tip_snap": "Nhìn từ {axis}. Bấm lần nữa để đảo ngược. Kéo để xoay góc nhìn; giữ Shift để bắt dính."
},
"zh": {
"ui.view_compass_tip": "从 {axis} 方向查看。再次单击可反向。拖动可环绕。",
"ui.view_compass_tip_snap": "从 {axis} 方向查看。再次单击可反向。拖动可环绕;按住 Shift 可吸附。"
}
}
+336 -20
View File
File diff suppressed because it is too large Load Diff
+28 -2
View File
@@ -885,6 +885,7 @@
"Variable Radius": "Raio variável",
"Variable radius": "Raio variável",
"Velocity": "Velocidade",
"Vertical": "Vertical",
"Vertices": "Vértices",
"View": "Vista",
"View navigator": "Navegador de vistas",
@@ -1149,6 +1150,7 @@
"cmd.file_save_mesh": "Salvar como malha",
"cmd.file_send_to_slicer": "Enviar para o fatiador",
"cmd.file_slicers": "Fatiadores instalados",
"cmd.frame_end_cap": "Tampa de extremidade",
"cmd.frame_member": "Membro estrutural",
"cmd.frame_profile_insert": "Inserir perfil",
"cmd.frame_profile_list": "Biblioteca de perfis",
@@ -1623,6 +1625,7 @@
"dialog.pattern_sketch_not_object": "Escolha corpos ou recursos: um esboço não é nenhum dos dois. Repita suas curvas com o Padrão ou Espelhar do próprio esboço, ou extrude-o primeiro.",
"dialog.primitive_point_tip": "Um ponto que preenche X, Y e Z: clique aqui e depois clique em um vértice, aresta ou face do modelo, em um ponto de um esboço ou na origem.",
"dialog.reference_edge_tip": "Uma aresta reta da face escolhida a partir da qual medir a distância abaixo: clique aqui e depois clique na aresta.",
"dialog.right_click_pick": "Selecione {input} primeiro",
"dialog.select": "↖ Selecionar",
"dialog.selected_count": "↖ {count} selecionados",
"dialog.selection_constraint": "Restrição {id}",
@@ -1667,6 +1670,8 @@
"dxf.tolerance": "Tolerância da curva",
"dxf.tolerance_help": "Somente corpos visíveis. As curvas usam segmentos retos. Uma tolerância menor gera curvas mais finas e usa mais tempo e memória.",
"each rail's curves must be in one sketch": "as curvas de cada trilho devem estar em um único esboço",
"error.end_cap_faces": "Selecione pelo menos uma face de extremidade aberta de um membro",
"error.end_cap_unresolved": "A extremidade {ends} desta tampa não está mais no modelo. Selecione as faces de extremidade novamente",
"feature computation ended without a result": "o cálculo do recurso terminou sem resultado",
"file.open.drawing_filter": "Projetos, arquivos CAD, malhas e desenhos",
"file.open.portal_fallback.no_portal_service": "O seletor de arquivos que abriu não é o da área de trabalho: o serviço de portal da área de trabalho não está disponível.",
@@ -1764,6 +1769,7 @@
"help.file.send_to_slicer": "Salva os corpos selecionados como arquivo 3MF e o abre no fatiador que você escolher. Use para ir do modelo à impressão em um só passo.",
"help.font_details": "A interface usa as fontes integradas do egui (Ubuntu Light e Hack, sob as licenças Ubuntu Font Licence e MIT/Bitstream Vera; Noto Emoji e a fonte de ícones emoji, sob OFL e MIT). O texto dos esboços usa Liberation Sans (SIL OFL 1.1). O pacote opcional de fontes da The Crafting Apps, craft-fonts (BIZ UDPGothic, Shippori Mincho, BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic; SIL OFL 1.1), não está incluído nas compilações do SolidCraft.",
"help.fonts": "Fontes",
"help.frame.end_cap": "Fecha as extremidades abertas dos membros com placas no formato do contorno do perfil. Use para tampar tubos, cantoneiras e vigas, sobre a extremidade ou embutidas nela.",
"help.frame.member": "Coloca um perfil, como um tubo ou um perfil extrudado de alumínio, ao longo das linhas de um esboço de estrutura, um membro por linha. Use para construir estruturas, racks e construções soldadas.",
"help.inspect.accessibility": "Colore as faces que uma ferramenta alcança a partir de uma direção e as que ela não alcança. Use para verificar uma peça para usinagem ou moldagem por esse lado.",
"help.inspect.center_of_mass": "Mostra o centro de massa dos corpos, de cada um e de todos juntos, com densidade uniforme. Use para verificar o equilíbrio e para onde uma peça vai tombar.",
@@ -2582,7 +2588,7 @@
"prefs.design_tools.imported_files": "Arquivos importados",
"prefs.design_tools.note": "Observação",
"prefs.design_tools.off": "Desativado",
"prefs.design_tools.placement_group": "Apoio, Ressalto, Encaixe por pressão",
"prefs.design_tools.placement_group": "Recursos posicionados",
"prefs.design_tools.rows": "Linhas",
"prefs.devices": "Mouse 3D",
"prefs.dialog_buttons": "Botões das caixas de diálogo",
@@ -2877,6 +2883,8 @@
"prefs.sketch.center_arc": "O arco pelo centro segue o cursor",
"prefs.sketch.click_selects": "Clique seleciona",
"prefs.sketch.conflict_colour": "Cor de conflito",
"prefs.sketch.cursor_coordinates": "Mostrar as coordenadas do cursor em um esboço",
"prefs.sketch.cursor_coordinates_note": "Ao lado do ponteiro, seu X e Y a partir da origem do esboço, também sem nenhuma ferramenta ativa. Desativado: só enquanto uma ferramenta posiciona um ponto.",
"prefs.sketch.drawing": "Desenho",
"prefs.sketch.ellipse_axes": "Desenhar elipses com seus eixos",
"prefs.sketch.ellipse_axes_note": "Os eixos maior e menor como linhas de construção, para que os semieixos e eixos possam ser cotados. Desativado: apenas a elipse, e D nela dá o raio menor onde quer que o valor seja puxado, desenhado e rotulado R como antes.",
@@ -4738,6 +4746,10 @@
"sketch_text.path_clear": "Tirar o texto da curva",
"sketch_text.path_hint": "Uma curva do esboço que o texto segue: clique aqui e depois na curva",
"sketch_text.use_font_file": "Usar o arquivo de fonte {path}",
"sketch_text.valign_baseline": "Linha de base",
"sketch_text.valign_bottom": "Base",
"sketch_text.valign_middle": "Meio",
"sketch_text.valign_top": "Topo",
"solid": "sólido",
"status.editing": "Editando {name}",
"status.navigation": "Mapeamento do mouse: {mapping}",
@@ -5073,6 +5085,7 @@
"ui.agent_chat_setup_title": "Configurar um assistente",
"ui.agent_chat_side": "Lado do chat com agente",
"ui.agent_chat_signed_in": "conectado",
"ui.agent_chat_snap_none_found": "Nenhum agente de programação encontrado. O pacote Snap é confinado, então não consegue ver nem iniciar os agentes de programação instalados neste computador. Para usá-los, instale o SolidCraft pelo pacote AppImage, .deb ou .rpm. Um agente que usa uma API compatível com OpenAI também funciona no pacote Snap: configure-o em Adicionar agente.",
"ui.agent_chat_state_auth": "É preciso entrar",
"ui.agent_chat_state_busy": "Trabalhando…",
"ui.agent_chat_state_exited": "Agente parado",
@@ -5448,6 +5461,17 @@
"ui.ellipse": "Elipse",
"ui.emboss_wrap_note": "Perfis de linhas ortogonais tangentes a uma parede cilíndrica suportada são envolvidos automaticamente. Escolha uma parede para definir um destino.",
"ui.end": "Fim",
"ui.end_cap.chamfer": "Chanfro dos cantos",
"ui.end_cap.direction": "Direção",
"ui.end_cap.faces": "Faces de extremidade",
"ui.end_cap.inset": "Recuo",
"ui.end_cap.inset_kind": "Recuo por",
"ui.end_cap.inset_ratio": "Proporção de recuo",
"ui.end_cap.inward": "Para dentro",
"ui.end_cap.length": "Comprimento",
"ui.end_cap.outward": "Para fora",
"ui.end_cap.ratio": "Proporção da espessura",
"ui.end_cap_title": "TAMPA DE EXTREMIDADE",
"ui.end_radius": "Raio final",
"ui.end_scale": "Escala final",
"ui.ends": "Extremidades",
@@ -5903,7 +5927,7 @@
"ui.pitch": "Passo",
"ui.placement": "Posicionamento",
"ui.placement_handles": "Alças de posicionamento",
"ui.placement_handles_tip": "Um marcador para arrastar o recurso pelo modelo e um anel para girá-lo.",
"ui.placement_handles_tip": "Um marcador para arrastar o recurso pelo modelo e, onde o recurso pode girar, um anel para girá-lo.",
"ui.plane": "Plano",
"ui.plane_at_angle": "Plano em ângulo",
"ui.plugins": "Plug-ins",
@@ -6017,6 +6041,8 @@
"ui.ribbon_pin_footer": "Os comandos fixados aparecem na faixa de opções. Passe o mouse sobre uma linha para fixar ou desafixar.",
"ui.ribbon_workspace": "Espaço de trabalho",
"ui.right": "Direita",
"ui.right_click_confirms": "O clique direito confirma as entradas da caixa de diálogo",
"ui.right_click_confirms_tip": "Com uma caixa de diálogo aberta, um clique direito na vista passa para a próxima entrada vazia e, na última, executa OK",
"ui.save": "Salvar",
"ui.save_as": "Salvar como",
"ui.save_mesh_no_slicer_open": "Nenhum fatiador encontrado: escolha Personalizado… e selecione o seu programa fatiador",
+9 -1
View File
@@ -698,6 +698,7 @@
"Value": "Valoare",
"Variable Radius": "Rază variabilă",
"Velocity": "Viteză",
"Vertical": "Vertical",
"Vertices": "Vârfuri",
"View navigator": "Navigator de vizualizare",
"Volume": "Volum",
@@ -1369,6 +1370,7 @@
"dialog.edit_title": "EDITARE {title}",
"dialog.no_shown_body": "Niciun corp afișat de modificat: afișați unul sau alegeți Corp nou",
"dialog.pattern_sketch_not_object": "Alegeți corpuri sau operații: o schiță nu este niciuna dintre ele. Repetați curbele ei cu Matrice sau Oglindire din schiță, ori extrudați-o mai întâi.",
"dialog.right_click_pick": "Selectați mai întâi {input}",
"dialog.select": "↖ Selectează",
"dialog.selected_count": "↖ {count} selectate",
"dialog.selection_constraint": "Constrângerea {id}",
@@ -3931,6 +3933,10 @@
"sketch_text.path_clear": "Scoate textul de pe curbă",
"sketch_text.path_hint": "O curbă a schiței pe care o urmează textul: faceți clic aici, apoi pe curbă",
"sketch_text.use_font_file": "Folosește fișierul de font {path}",
"sketch_text.valign_baseline": "Linie de bază",
"sketch_text.valign_bottom": "Jos",
"sketch_text.valign_middle": "Mijloc",
"sketch_text.valign_top": "Sus",
"solid": "solid",
"status.editing": "Se editează {name}",
"status.navigation": "Mapare mouse: {mapping}",
@@ -4909,7 +4915,7 @@
"ui.pitch": "Pas",
"ui.placement": "Plasare",
"ui.placement_handles": "Mânere de plasare",
"ui.placement_handles_tip": "Mânere pe previzualizarea unui Reazem, Bosaj sau a unei Prinderi cu clichet: trageți marcajul pentru a-l muta pe model, rotiți-l cu inelul său",
"ui.placement_handles_tip": "Un marcaj pentru a trage operația pe model și, acolo unde operația se poate roti, un inel pentru a o roti.",
"ui.plane": "Plan",
"ui.plane_at_angle": "Plan în unghi",
"ui.plugins": "Pluginuri",
@@ -5013,6 +5019,8 @@
"ui.ribbon_pin_footer": "Comenzile fixate apar pe bandă. Treceți cursorul peste un rând pentru a-l fixa sau defixa.",
"ui.ribbon_workspace": "Spațiu de lucru",
"ui.right": "Dreapta",
"ui.right_click_confirms": "Clicul dreapta confirmă intrările dialogului",
"ui.right_click_confirms_tip": "Cu un dialog deschis, un clic dreapta în vedere trece la următoarea intrare goală, iar la ultima rulează OK",
"ui.save": "Salvează",
"ui.save_as": "Salvează ca",
"ui.save_mesh_no_slicer_open": "Nu s-a găsit niciun slicer: alegeți Personalizat… și selectați programul dumneavoastră de slicing",

Some files were not shown because too many files have changed in this diff Show More