From 984f74d271129b06d4b156a7842bcb52672585fd Mon Sep 17 00:00:00 2001 From: whitequark Date: Sat, 7 Jan 2017 06:41:13 +0000 Subject: [PATCH] Internationalize all messages without substitutions. --- res/locales/en_US.po | 1241 ++++++++++++++++++++++++++++++++++++------ res/locales/ua_UA.po | 1088 ++++++++++++++++++++++++++++++------ res/messages.pot | 1053 +++++++++++++++++++++++++++++------ src/CMakeLists.txt | 13 +- src/clipboard.cpp | 24 +- src/confscreen.cpp | 18 +- src/constraint.cpp | 269 +++++---- src/export.cpp | 18 +- src/exportvector.cpp | 12 +- src/file.cpp | 8 +- src/graphicswin.cpp | 79 ++- src/group.cpp | 60 +- src/groupmesh.cpp | 9 +- src/modify.cpp | 25 +- src/mouse.cpp | 34 +- src/resource.cpp | 90 ++- src/solvespace.cpp | 26 +- src/style.cpp | 10 +- src/textscreens.cpp | 14 +- src/ui.h | 25 +- src/view.cpp | 6 +- 21 files changed, 3316 insertions(+), 806 deletions(-) diff --git a/res/locales/en_US.po b/res/locales/en_US.po index 491ab2d2..45db4fd1 100644 --- a/res/locales/en_US.po +++ b/res/locales/en_US.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2017-01-05 12:33+0000\n" +"POT-Creation-Date: 2017-01-07 06:44+0000\n" "PO-Revision-Date: 2017-01-05 10:30+0000\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,622 +17,1551 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:29 +#: clipboard.cpp:242 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." + +#: clipboard.cpp:259 +msgid "Clipboard is empty; nothing to paste." +msgstr "Clipboard is empty; nothing to paste." + +#: clipboard.cpp:306 +msgid "Number of copies to paste must be at least one." +msgstr "Number of copies to paste must be at least one." + +#: clipboard.cpp:322 textscreens.cpp:704 +msgid "Scale cannot be zero." +msgstr "Scale cannot be zero." + +#: clipboard.cpp:360 +msgid "Select one point to define origin of rotation." +msgstr "Select one point to define origin of rotation." + +#: clipboard.cpp:372 +msgid "Select two points to define translation vector." +msgstr "Select two points to define translation vector." + +#: clipboard.cpp:382 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." + +#: clipboard.cpp:386 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "Too many items to paste; split this into smaller pastes." + +#: clipboard.cpp:391 +msgid "No workplane active." +msgstr "No workplane active." + +#: confscreen.cpp:328 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "Bad format: specify coordinates as x, y, z" + +#: confscreen.cpp:339 style.cpp:698 textscreens.cpp:725 +msgid "Bad format: specify color as r, g, b" +msgstr "Bad format: specify color as r, g, b" + +#: confscreen.cpp:364 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." + +#: confscreen.cpp:378 +msgid "Specify between 0 and 8 digits after the decimal." +msgstr "Specify between 0 and 8 digits after the decimal." + +#: confscreen.cpp:390 +msgid "Export scale must not be zero!" +msgstr "Export scale must not be zero!" + +#: confscreen.cpp:402 +msgid "Cutter radius offset must not be negative!" +msgstr "Cutter radius offset must not be negative!" + +#: confscreen.cpp:456 +msgid "Bad value: autosave interval should be positive" +msgstr "Bad value: autosave interval should be positive" + +#: confscreen.cpp:459 +msgid "Bad format: specify interval in integral minutes" +msgstr "Bad format: specify interval in integral minutes" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "pts-coincident" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "pt-pt-distance" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "pt-line-distance" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "pt-plane-distance" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "pt-face-distance" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "proj-pt-pt-distance" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "pt-in-plane" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "pt-on-line" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "pt-on-face" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "eq-length" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "eq-length-and-pt-ln-dist" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "eq-pt-line-distances" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "length-ratio" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "length-difference" +msgstr "length-difference" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "symmetric" +msgstr "symmetric" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "symmetric-h" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "symmetric-v" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "symmetric-line" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "at-midpoint" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "horizontal" +msgstr "horizontal" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "vertical" +msgstr "vertical" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "diameter" +msgstr "diameter" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "pt-on-circle" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "same-orientation" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "angle" +msgstr "angle" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "parallel" +msgstr "parallel" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "arc-line-tangent" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "cubic-line-tangent" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "curve-curve-tangent" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "perpendicular" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "eq-radius" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "eq-angle" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "eq-line-len-arc-len" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "lock-where-dragged" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "comment" +msgstr "comment" + +#: constraint.cpp:159 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" + +#: constraint.cpp:212 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" +msgstr "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" + +#: constraint.cpp:274 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" + +#: constraint.cpp:313 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" + +#: constraint.cpp:330 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +msgstr "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" + +#: constraint.cpp:356 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" + +#: constraint.cpp:414 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" + +#: constraint.cpp:428 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." + +#: constraint.cpp:458 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." + +#: constraint.cpp:471 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" +msgstr "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" + +#: constraint.cpp:492 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" + +#: constraint.cpp:544 +msgid "Must select an angle constraint." +msgstr "Must select an angle constraint." + +#: constraint.cpp:556 +msgid "Must select a constraint with associated label." +msgstr "Must select a constraint with associated label." + +#: constraint.cpp:567 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" + +#: constraint.cpp:624 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." + +#: constraint.cpp:648 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." + +#: constraint.cpp:658 +msgid "Curve-curve tangency must apply in workplane." +msgstr "Curve-curve tangency must apply in workplane." + +#: constraint.cpp:676 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." + +#: constraint.cpp:685 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" + +#: constraint.cpp:703 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" + +#: constraint.cpp:718 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" + +#: constraint.cpp:729 +msgid "click center of comment text" +msgstr "click center of comment text" + +#: exportvector.cpp:330 +msgid "freehand lines were replaced with continuous lines" +msgstr "freehand lines were replaced with continuous lines" + +#: exportvector.cpp:332 +msgid "zigzag lines were replaced with continuous lines" +msgstr "zigzag lines were replaced with continuous lines" + +#: exportvector.cpp:583 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" + +#: exportvector.cpp:800 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." + +#: file.cpp:43 group.cpp:94 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "sketch-in-plane" + +#: file.cpp:61 +msgctxt "group-name" +msgid "#references" +msgstr "#references" + +#: file.cpp:508 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." + +#: graphicswin.cpp:29 msgid "&File" msgstr "&File" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:30 +#: graphicswin.cpp:30 msgid "&New" msgstr "&New" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:31 +#: graphicswin.cpp:31 msgid "&Open..." msgstr "&Open..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:32 +#: graphicswin.cpp:32 msgid "Open &Recent" msgstr "Open &Recent" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:33 +#: graphicswin.cpp:33 msgid "&Save" msgstr "&Save" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:34 +#: graphicswin.cpp:34 msgid "Save &As..." msgstr "Save &As..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:36 +#: graphicswin.cpp:36 msgid "Export &Image..." msgstr "Export &Image..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:37 +#: graphicswin.cpp:37 msgid "Export 2d &View..." msgstr "Export 2d &View..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:38 +#: graphicswin.cpp:38 msgid "Export 2d &Section..." msgstr "Export 2d &Section..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:39 +#: graphicswin.cpp:39 msgid "Export 3d &Wireframe..." msgstr "Export 3d &Wireframe..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:40 +#: graphicswin.cpp:40 msgid "Export Triangle &Mesh..." msgstr "Export Triangle &Mesh..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:41 +#: graphicswin.cpp:41 msgid "Export &Surfaces..." msgstr "Export &Surfaces..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:42 +#: graphicswin.cpp:42 msgid "Im&port..." msgstr "Im&port..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:45 +#: graphicswin.cpp:45 msgid "E&xit" msgstr "E&xit" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:48 +#: graphicswin.cpp:48 msgid "&Edit" msgstr "&Edit" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:49 +#: graphicswin.cpp:49 msgid "&Undo" msgstr "&Undo" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:50 +#: graphicswin.cpp:50 msgid "&Redo" msgstr "&Redo" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:51 +#: graphicswin.cpp:51 msgid "Re&generate All" msgstr "Re&generate All" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:53 +#: graphicswin.cpp:53 msgid "Snap Selection to &Grid" msgstr "Snap Selection to &Grid" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:54 +#: graphicswin.cpp:54 msgid "Rotate Imported &90°" msgstr "Rotate Imported &90°" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:56 +#: graphicswin.cpp:56 msgid "Cu&t" msgstr "Cu&t" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:57 +#: graphicswin.cpp:57 msgid "&Copy" msgstr "&Copy" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:58 +#: graphicswin.cpp:58 msgid "&Paste" msgstr "&Paste" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:59 +#: graphicswin.cpp:59 msgid "Paste &Transformed..." msgstr "Paste &Transformed..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:60 +#: graphicswin.cpp:60 msgid "&Delete" msgstr "&Delete" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:62 +#: graphicswin.cpp:62 msgid "Select &Edge Chain" msgstr "Select &Edge Chain" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:63 +#: graphicswin.cpp:63 msgid "Select &All" msgstr "Select &All" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:64 +#: graphicswin.cpp:64 msgid "&Unselect All" msgstr "&Unselect All" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:66 +#: graphicswin.cpp:66 msgid "&View" msgstr "&View" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:67 +#: graphicswin.cpp:67 msgid "Zoom &In" msgstr "Zoom &In" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:68 +#: graphicswin.cpp:68 msgid "Zoom &Out" msgstr "Zoom &Out" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:69 +#: graphicswin.cpp:69 msgid "Zoom To &Fit" msgstr "Zoom To &Fit" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:71 +#: graphicswin.cpp:71 msgid "Align View to &Workplane" msgstr "Align View to &Workplane" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:72 +#: graphicswin.cpp:72 msgid "Nearest &Ortho View" msgstr "Nearest &Ortho View" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:73 +#: graphicswin.cpp:73 msgid "Nearest &Isometric View" msgstr "Nearest &Isometric View" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:74 +#: graphicswin.cpp:74 msgid "&Center View At Point" msgstr "&Center View At Point" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:76 +#: graphicswin.cpp:76 msgid "Show Snap &Grid" msgstr "Show Snap &Grid" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:77 +#: graphicswin.cpp:77 msgid "Use &Perspective Projection" msgstr "Use &Perspective Projection" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:80 +#: graphicswin.cpp:80 msgid "Show Menu &Bar" msgstr "Show Menu &Bar" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:82 +#: graphicswin.cpp:82 msgid "Show &Toolbar" msgstr "Show &Toolbar" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:83 +#: graphicswin.cpp:83 msgid "Show Property Bro&wser" msgstr "Show Property Bro&wser" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:85 +#: graphicswin.cpp:85 msgid "Dimensions in &Inches" msgstr "Dimensions in &Inches" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:86 +#: graphicswin.cpp:86 msgid "Dimensions in &Millimeters" msgstr "Dimensions in &Millimeters" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:89 +#: graphicswin.cpp:89 msgid "&Full Screen" msgstr "&Full Screen" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:92 +#: graphicswin.cpp:92 msgid "&New Group" msgstr "&New Group" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:93 +#: graphicswin.cpp:93 msgid "Sketch In &3d" msgstr "Sketch In &3d" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:94 +#: graphicswin.cpp:94 msgid "Sketch In New &Workplane" msgstr "Sketch In New &Workplane" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:96 +#: graphicswin.cpp:96 msgid "Step &Translating" msgstr "Step &Translating" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:97 +#: graphicswin.cpp:97 msgid "Step &Rotating" msgstr "Step &Rotating" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:99 +#: graphicswin.cpp:99 msgid "E&xtrude" msgstr "E&xtrude" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:100 +#: graphicswin.cpp:100 msgid "&Lathe" msgstr "&Lathe" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:102 +#: graphicswin.cpp:102 msgid "Link / Assemble..." msgstr "Link / Assemble..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:103 +#: graphicswin.cpp:103 msgid "Link Recent" msgstr "Link Recent" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:105 +#: graphicswin.cpp:105 msgid "&Sketch" msgstr "&Sketch" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:106 +#: graphicswin.cpp:106 msgid "In &Workplane" msgstr "In &Workplane" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:107 +#: graphicswin.cpp:107 msgid "Anywhere In &3d" msgstr "Anywhere In &3d" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:109 +#: graphicswin.cpp:109 msgid "Datum &Point" msgstr "Datum &Point" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:110 +#: graphicswin.cpp:110 msgid "&Workplane" msgstr "&Workplane" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:112 +#: graphicswin.cpp:112 msgid "Line &Segment" msgstr "Line &Segment" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:113 +#: graphicswin.cpp:113 msgid "C&onstruction Line Segment" msgstr "C&onstruction Line Segment" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:114 +#: graphicswin.cpp:114 msgid "&Rectangle" msgstr "&Rectangle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:115 +#: graphicswin.cpp:115 msgid "&Circle" msgstr "&Circle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:116 +#: graphicswin.cpp:116 msgid "&Arc of a Circle" msgstr "&Arc of a Circle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:117 +#: graphicswin.cpp:117 msgid "&Bezier Cubic Spline" msgstr "&Bezier Cubic Spline" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:119 +#: graphicswin.cpp:119 msgid "&Text in TrueType Font" msgstr "&Text in TrueType Font" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:121 +#: graphicswin.cpp:121 msgid "To&ggle Construction" msgstr "To&ggle Construction" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:122 +#: graphicswin.cpp:122 msgid "Tangent &Arc at Point" msgstr "Tangent &Arc at Point" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:123 +#: graphicswin.cpp:123 msgid "Split Curves at &Intersection" msgstr "Split Curves at &Intersection" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:125 +#: graphicswin.cpp:125 msgid "&Constrain" msgstr "&Constrain" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:126 +#: graphicswin.cpp:126 msgid "&Distance / Diameter" msgstr "&Distance / Diameter" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:127 +#: graphicswin.cpp:127 msgid "Re&ference Dimension" msgstr "Re&ference Dimension" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:128 +#: graphicswin.cpp:128 msgid "A&ngle" msgstr "A&ngle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:129 +#: graphicswin.cpp:129 msgid "Reference An&gle" msgstr "Reference An&gle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:130 +#: graphicswin.cpp:130 msgid "Other S&upplementary Angle" msgstr "Other S&upplementary Angle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:131 +#: graphicswin.cpp:131 msgid "Toggle R&eference Dim" msgstr "Toggle R&eference Dim" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:133 +#: graphicswin.cpp:133 msgid "&Horizontal" msgstr "&Horizontal" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:134 +#: graphicswin.cpp:134 msgid "&Vertical" msgstr "&Vertical" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:136 +#: graphicswin.cpp:136 msgid "&On Point / Curve / Plane" msgstr "&On Point / Curve / Plane" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:137 +#: graphicswin.cpp:137 msgid "E&qual Length / Radius / Angle" msgstr "E&qual Length / Radius / Angle" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:138 +#: graphicswin.cpp:138 msgid "Length Ra&tio" msgstr "Length Ra&tio" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:139 +#: graphicswin.cpp:139 msgid "Length Diff&erence" msgstr "Length Diff&erence" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:140 +#: graphicswin.cpp:140 msgid "At &Midpoint" msgstr "At &Midpoint" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:141 +#: graphicswin.cpp:141 msgid "S&ymmetric" msgstr "S&ymmetric" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:142 +#: graphicswin.cpp:142 msgid "Para&llel / Tangent" msgstr "Para&llel / Tangent" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:143 +#: graphicswin.cpp:143 msgid "&Perpendicular" msgstr "&Perpendicular" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:144 +#: graphicswin.cpp:144 msgid "Same Orient&ation" msgstr "Same Orient&ation" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:145 +#: graphicswin.cpp:145 msgid "Lock Point Where &Dragged" msgstr "Lock Point Where &Dragged" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:147 +#: graphicswin.cpp:147 msgid "Comment" msgstr "Comment" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:149 +#: graphicswin.cpp:149 msgid "&Analyze" msgstr "&Analyze" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:150 +#: graphicswin.cpp:150 msgid "Measure &Volume" msgstr "Measure &Volume" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:151 +#: graphicswin.cpp:151 msgid "Measure A&rea" msgstr "Measure A&rea" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:152 +#: graphicswin.cpp:152 msgid "Measure &Perimeter" msgstr "Measure &Perimeter" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:153 +#: graphicswin.cpp:153 msgid "Show &Interfering Parts" msgstr "Show &Interfering Parts" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:154 +#: graphicswin.cpp:154 msgid "Show &Naked Edges" msgstr "Show &Naked Edges" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:156 +#: graphicswin.cpp:156 msgid "Show Degrees of &Freedom" msgstr "Show Degrees of &Freedom" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:158 +#: graphicswin.cpp:158 msgid "&Trace Point" msgstr "&Trace Point" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:159 +#: graphicswin.cpp:159 msgid "&Stop Tracing..." msgstr "&Stop Tracing..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:160 +#: graphicswin.cpp:160 msgid "Step &Dimension..." msgstr "Step &Dimension..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:162 +#: graphicswin.cpp:162 msgid "&Help" msgstr "&Help" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:163 +#: graphicswin.cpp:163 msgid "&Website / Manual" msgstr "&Website / Manual" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:164 +#: graphicswin.cpp:164 msgid "&Language" msgstr "&Language" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:166 +#: graphicswin.cpp:166 msgid "&About" msgstr "&About" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:495 +#: graphicswin.cpp:492 +msgid "No workplane is active, so the grid will not appear." +msgstr "No workplane is active, so the grid will not appear." + +#: graphicswin.cpp:501 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." + +#: graphicswin.cpp:582 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" +"Select a point; this point will become the center of the view on screen." + +#: graphicswin.cpp:864 +msgid "No additional entities share endpoints with the selected entities." +msgstr "No additional entities share endpoints with the selected entities." + +#: graphicswin.cpp:884 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." + +#: graphicswin.cpp:908 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." + +#: graphicswin.cpp:915 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." + +#: graphicswin.cpp:980 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "No workplane selected. Activating default workplane for this group." + +#: graphicswin.cpp:985 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." + +#: graphicswin.cpp:1009 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." + +#: graphicswin.cpp:1020 +msgid "click point on arc (draws anti-clockwise)" +msgstr "click point on arc (draws anti-clockwise)" + +#: graphicswin.cpp:1021 +msgid "click to place datum point" +msgstr "click to place datum point" + +#: graphicswin.cpp:1022 +msgid "click first point of line segment" +msgstr "click first point of line segment" + +#: graphicswin.cpp:1024 +msgid "click first point of construction line segment" +msgstr "click first point of construction line segment" + +#: graphicswin.cpp:1025 +msgid "click first point of cubic segment" +msgstr "click first point of cubic segment" + +#: graphicswin.cpp:1026 +msgid "click center of circle" +msgstr "click center of circle" + +#: graphicswin.cpp:1027 +msgid "click origin of workplane" +msgstr "click origin of workplane" + +#: graphicswin.cpp:1028 +msgid "click one corner of rectangle" +msgstr "click one corner of rectangle" + +#: graphicswin.cpp:1029 +msgid "click top left of text" +msgstr "click top left of text" + +#: graphicswin.cpp:1042 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." + +#: group.cpp:89 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "sketch-in-3d" + +#: group.cpp:145 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a workplane (copy of the workplane)\n" + +#: group.cpp:157 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." + +#: group.cpp:166 +msgctxt "group-name" +msgid "extrude" +msgstr "extrude" + +#: group.cpp:178 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" + +#: group.cpp:188 +msgctxt "group-name" +msgid "lathe" +msgstr "lathe" + +#: group.cpp:201 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" + +#: group.cpp:214 +msgctxt "group-name" +msgid "rotate" +msgstr "rotate" + +#: group.cpp:225 +msgctxt "group-name" +msgid "translate" +msgstr "translate" + +#: group.cpp:257 +msgctxt "group-name" +msgid "link" +msgstr "link" + +#: group.cpp:339 +msgid "(unnamed)" +msgstr "(unnamed)" + +#: groupmesh.cpp:607 +msgid "not closed contour, or not all same style!" +msgstr "not closed contour, or not all same style!" + +#: groupmesh.cpp:620 +msgid "points not all coplanar!" +msgstr "points not all coplanar!" + +#: groupmesh.cpp:622 +msgid "contour is self-intersecting!" +msgstr "contour is self-intersecting!" + +#: groupmesh.cpp:624 +msgid "zero-length edge!" +msgstr "zero-length edge!" + +#: modify.cpp:237 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "Must be sketching in workplane to create tangent arc." + +#: modify.cpp:284 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." + +#: modify.cpp:371 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." + +#: modify.cpp:575 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "Couldn't split this entity; lines, circles, or cubics only." + +#: modify.cpp:601 +msgid "Must be sketching in workplane to split." +msgstr "Must be sketching in workplane to split." + +#: modify.cpp:611 +msgid "" +"Select two entities that intersect each other (e.g. two lines or two circles " +"or a circle and a line)." +msgstr "" +"Select two entities that intersect each other (e.g. two lines or two circles " +"or a circle and a line)." + +#: modify.cpp:655 +msgid "Can't split; no intersection found." +msgstr "Can't split; no intersection found." + +#: mouse.cpp:495 msgid "No Style" msgstr "No Style" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:496 +#: mouse.cpp:496 msgid "Newly Created Custom Style..." msgstr "Newly Created Custom Style..." -#: /home/whitequark/Work/solvespace/src/mouse.cpp:544 +#: mouse.cpp:544 msgid "Assign to Style" msgstr "Assign to Style" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:547 +#: mouse.cpp:547 msgid "Group Info" msgstr "Group Info" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:550 +#: mouse.cpp:550 msgid "Style Info" msgstr "Style Info" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:553 +#: mouse.cpp:553 msgid "Select Edge Chain" msgstr "Select Edge Chain" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:558 +#: mouse.cpp:558 msgid "Toggle Reference Dimension" msgstr "Toggle Reference Dimension" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:564 +#: mouse.cpp:564 msgid "Other Supplementary Angle" msgstr "Other Supplementary Angle" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:569 +#: mouse.cpp:569 msgid "Snap to Grid" msgstr "Snap to Grid" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:577 +#: mouse.cpp:577 msgid "Remove Spline Point" msgstr "Remove Spline Point" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:588 +#: mouse.cpp:588 msgid "Add Spline Point" msgstr "Add Spline Point" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:592 +#: mouse.cpp:592 msgid "Toggle Construction" msgstr "Toggle Construction" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:606 +#: mouse.cpp:606 msgid "Delete Point-Coincident Constraint" msgstr "Delete Point-Coincident Constraint" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:612 +#: mouse.cpp:612 msgid "Cut" msgstr "Cut" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:613 +#: mouse.cpp:613 msgid "Copy" msgstr "Copy" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:616 +#: mouse.cpp:616 msgid "Select All" msgstr "Select All" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:620 +#: mouse.cpp:620 msgid "Paste" msgstr "Paste" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:621 +#: mouse.cpp:621 msgid "Paste Transformed..." msgstr "Paste Transformed..." -#: /home/whitequark/Work/solvespace/src/mouse.cpp:625 +#: mouse.cpp:625 msgid "Delete" msgstr "Delete" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:627 +#: mouse.cpp:627 msgid "Unselect All" msgstr "Unselect All" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:633 +#: mouse.cpp:633 msgid "Unselect Hovered" msgstr "Unselect Hovered" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:638 +#: mouse.cpp:638 msgid "Zoom to Fit" msgstr "Zoom to Fit" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:18 +#: mouse.cpp:778 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "Cannot add spline point: maximum number of points reached." + +#: mouse.cpp:948 mouse.cpp:1199 +msgid "click next point of line, or press Esc" +msgstr "click next point of line, or press Esc" + +#: mouse.cpp:954 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:981 +msgid "click to place other corner of rectangle" +msgstr "click to place other corner of rectangle" + +#: mouse.cpp:1001 +msgid "click to set radius" +msgstr "click to set radius" + +#: mouse.cpp:1006 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:1024 +msgid "click to place point" +msgstr "click to place point" + +#: mouse.cpp:1039 +msgid "click next point of cubic, or press Esc" +msgstr "click next point of cubic, or press Esc" + +#: mouse.cpp:1044 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." + +#: mouse.cpp:1060 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." + +#: mouse.cpp:1075 +msgid "click to place bottom left of text" +msgstr "click to place bottom left of text" + +#: mouse.cpp:1086 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "NEW COMMENT -- DOUBLE-CLICK TO EDIT" + +#: style.cpp:161 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." + +#: style.cpp:704 +msgid "Style name cannot be empty" +msgstr "Style name cannot be empty" + +#: style.cpp:717 +msgid "Scale must not be zero or negative!" +msgstr "Scale must not be zero or negative!" + +#: textscreens.cpp:657 +msgid "Can't repeat fewer than 1 time." +msgstr "Can't repeat fewer than 1 time." + +#: textscreens.cpp:661 +msgid "Can't repeat more than 999 times." +msgstr "Can't repeat more than 999 times." + +#: textscreens.cpp:690 +msgid "Group name cannot be empty" +msgstr "Group name cannot be empty" + +#: textscreens.cpp:734 +msgid "Opacity must be between zero and one." +msgstr "Opacity must be between zero and one." + +#: textscreens.cpp:773 +msgid "Radius cannot be zero or negative." +msgstr "Radius cannot be zero or negative." + +#: toolbar.cpp:18 msgid "Sketch line segment" msgstr "Sketch line segment" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:20 +#: toolbar.cpp:20 msgid "Sketch rectangle" msgstr "Sketch rectangle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:22 +#: toolbar.cpp:22 msgid "Sketch circle" msgstr "Sketch circle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:24 +#: toolbar.cpp:24 msgid "Sketch arc of a circle" msgstr "Sketch arc of a circle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:26 +#: toolbar.cpp:26 msgid "Sketch curves from text in a TrueType font" msgstr "Sketch curves from text in a TrueType font" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:28 +#: toolbar.cpp:28 msgid "Create tangent arc at selected point" msgstr "Create tangent arc at selected point" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:30 +#: toolbar.cpp:30 msgid "Sketch cubic Bezier spline" msgstr "Sketch cubic Bezier spline" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:32 +#: toolbar.cpp:32 msgid "Sketch datum point" msgstr "Sketch datum point" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:34 +#: toolbar.cpp:34 msgid "Toggle construction" msgstr "Toggle construction" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:36 +#: toolbar.cpp:36 msgid "Split lines / curves where they intersect" msgstr "Split lines / curves where they intersect" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:40 +#: toolbar.cpp:40 msgid "Constrain distance / diameter / length" msgstr "Constrain distance / diameter / length" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:42 +#: toolbar.cpp:42 msgid "Constrain angle" msgstr "Constrain angle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:44 +#: toolbar.cpp:44 msgid "Constrain to be horizontal" msgstr "Constrain to be horizontal" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:46 +#: toolbar.cpp:46 msgid "Constrain to be vertical" msgstr "Constrain to be vertical" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:48 +#: toolbar.cpp:48 msgid "Constrain to be parallel or tangent" msgstr "Constrain to be parallel or tangent" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:50 +#: toolbar.cpp:50 msgid "Constrain to be perpendicular" msgstr "Constrain to be perpendicular" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:52 +#: toolbar.cpp:52 msgid "Constrain point on line / curve / plane / point" msgstr "Constrain point on line / curve / plane / point" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:54 +#: toolbar.cpp:54 msgid "Constrain symmetric" msgstr "Constrain symmetric" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:56 +#: toolbar.cpp:56 msgid "Constrain equal length / radius / angle" msgstr "Constrain equal length / radius / angle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:58 +#: toolbar.cpp:58 msgid "Constrain normals in same orientation" msgstr "Constrain normals in same orientation" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:60 +#: toolbar.cpp:60 msgid "Other supplementary angle" msgstr "Other supplementary angle" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:62 +#: toolbar.cpp:62 msgid "Toggle reference dimension" msgstr "Toggle reference dimension" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:66 +#: toolbar.cpp:66 msgid "New group extruding active sketch" msgstr "New group extruding active sketch" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:68 +#: toolbar.cpp:68 msgid "New group rotating active sketch" msgstr "New group rotating active sketch" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:70 +#: toolbar.cpp:70 msgid "New group step and repeat rotating" msgstr "New group step and repeat rotating" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:72 +#: toolbar.cpp:72 msgid "New group step and repeat translating" msgstr "New group step and repeat translating" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:74 +#: toolbar.cpp:74 msgid "New group in new workplane (thru given entities)" msgstr "New group in new workplane (thru given entities)" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:76 +#: toolbar.cpp:76 msgid "New group in 3d" msgstr "New group in 3d" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:78 +#: toolbar.cpp:78 msgid "New group linking / assembling file" msgstr "New group linking / assembling file" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:82 +#: toolbar.cpp:82 msgid "Nearest isometric view" msgstr "Nearest isometric view" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:84 +#: toolbar.cpp:84 msgid "Align view to active workplane" msgstr "Align view to active workplane" + +#: view.cpp:78 +msgid "Scale cannot be zero or negative." +msgstr "Scale cannot be zero or negative." + +#: view.cpp:90 view.cpp:99 +msgid "Bad format: specify x, y, z" +msgstr "Bad format: specify x, y, z" diff --git a/res/locales/ua_UA.po b/res/locales/ua_UA.po index cb56a6a6..81b10557 100644 --- a/res/locales/ua_UA.po +++ b/res/locales/ua_UA.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2017-01-05 12:33+0000\n" +"POT-Creation-Date: 2017-01-07 06:44+0000\n" "PO-Revision-Date: 2017-01-05 10:30+0000\n" "Last-Translator: appsoft@ua.fm\n" "Language-Team: OpenOrienteeringUkraine\n" @@ -17,622 +17,1398 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:29 +#: clipboard.cpp:242 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" + +#: clipboard.cpp:259 +msgid "Clipboard is empty; nothing to paste." +msgstr "" + +#: clipboard.cpp:306 +msgid "Number of copies to paste must be at least one." +msgstr "" + +#: clipboard.cpp:322 textscreens.cpp:704 +msgid "Scale cannot be zero." +msgstr "" + +#: clipboard.cpp:360 +msgid "Select one point to define origin of rotation." +msgstr "" + +#: clipboard.cpp:372 +msgid "Select two points to define translation vector." +msgstr "" + +#: clipboard.cpp:382 +msgid "" +"Transformation is identity. So all copies will be exactly on top of each " +"other." +msgstr "" + +#: clipboard.cpp:386 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "" + +#: clipboard.cpp:391 +msgid "No workplane active." +msgstr "" + +#: confscreen.cpp:328 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "" + +#: confscreen.cpp:339 style.cpp:698 textscreens.cpp:725 +msgid "Bad format: specify color as r, g, b" +msgstr "" + +#: confscreen.cpp:364 +msgid "" +"The perspective factor will have no effect until you enable View -> Use " +"Perspective Projection." +msgstr "" + +#: confscreen.cpp:378 +msgid "Specify between 0 and 8 digits after the decimal." +msgstr "" + +#: confscreen.cpp:390 +msgid "Export scale must not be zero!" +msgstr "" + +#: confscreen.cpp:402 +msgid "Cutter radius offset must not be negative!" +msgstr "" + +#: confscreen.cpp:456 +msgid "Bad value: autosave interval should be positive" +msgstr "" + +#: confscreen.cpp:459 +msgid "Bad format: specify interval in integral minutes" +msgstr "" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "length-difference" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "symmetric" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "horizontal" +msgstr "" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "vertical" +msgstr "" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "diameter" +msgstr "" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "angle" +msgstr "" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "parallel" +msgstr "" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "comment" +msgstr "" + +#: constraint.cpp:159 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply " +"to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" + +#: constraint.cpp:212 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can " +"apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" +msgstr "" + +#: constraint.cpp:274 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can " +"apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance " +"equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" + +#: constraint.cpp:313 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" + +#: constraint.cpp:330 +msgid "" +"Bad selection for length difference constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments\n" +msgstr "" + +#: constraint.cpp:356 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" + +#: constraint.cpp:414 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate " +"axis)\n" +" * line segment, and two points or a line segment (symmetric about line " +"segment)\n" +" * workplane, and two points or a line segment (symmetric about " +"workplane)\n" +msgstr "" + +#: constraint.cpp:428 +msgid "" +"A workplane must be active when constraining symmetric without an explicit " +"symmetry plane." +msgstr "" + +#: constraint.cpp:458 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a " +"horizontal or vertical constraint." +msgstr "" + +#: constraint.cpp:471 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can " +"apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" +msgstr "" + +#: constraint.cpp:492 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply " +"to:\n" +"\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:544 +msgid "Must select an angle constraint." +msgstr "" + +#: constraint.cpp:556 +msgid "Must select a constraint with associated label." +msgstr "" + +#: constraint.cpp:567 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:624 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with " +"Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:648 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them " +"with Constrain -> On Point before constraining tangent." +msgstr "" + +#: constraint.cpp:658 +msgid "Curve-curve tangency must apply in workplane." +msgstr "" + +#: constraint.cpp:676 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point " +"before constraining tangent." +msgstr "" + +#: constraint.cpp:685 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply " +"to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" + +#: constraint.cpp:703 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:718 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can " +"apply to:\n" +"\n" +" * a point\n" +msgstr "" + +#: constraint.cpp:729 +msgid "click center of comment text" +msgstr "" + +#: exportvector.cpp:330 +msgid "freehand lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:332 +msgid "zigzag lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:583 +msgid "" +"Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" + +#: exportvector.cpp:800 +msgid "" +"PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" + +#: file.cpp:43 group.cpp:94 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "" + +#: file.cpp:61 +msgctxt "group-name" +msgid "#references" +msgstr "" + +#: file.cpp:508 +msgid "" +"Unrecognized data in file. This file may be corrupt, or from a newer version " +"of the program." +msgstr "" + +#: graphicswin.cpp:29 msgid "&File" msgstr "&Файл" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:30 +#: graphicswin.cpp:30 msgid "&New" msgstr "&Новий" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:31 +#: graphicswin.cpp:31 msgid "&Open..." msgstr "&Відкрити..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:32 +#: graphicswin.cpp:32 msgid "Open &Recent" msgstr "Відкрити &Недавні" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:33 +#: graphicswin.cpp:33 msgid "&Save" msgstr "&Зберегти" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:34 +#: graphicswin.cpp:34 msgid "Save &As..." msgstr "Зберегти &Як..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:36 +#: graphicswin.cpp:36 msgid "Export &Image..." msgstr "Експортувати &Зображення..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:37 +#: graphicswin.cpp:37 msgid "Export 2d &View..." msgstr "Експортувати 2d &Вигляд..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:38 +#: graphicswin.cpp:38 msgid "Export 2d &Section..." msgstr "Експортувати 2d &Секцію..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:39 +#: graphicswin.cpp:39 msgid "Export 3d &Wireframe..." msgstr "Експортувати 3d &Скелет..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:40 +#: graphicswin.cpp:40 msgid "Export Triangle &Mesh..." msgstr "Експортувати Тригранний &Каркас..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:41 +#: graphicswin.cpp:41 msgid "Export &Surfaces..." msgstr "Експортувати &Поверхні..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:42 +#: graphicswin.cpp:42 msgid "Im&port..." msgstr "Ім&портувати..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:45 +#: graphicswin.cpp:45 msgid "E&xit" msgstr "В&ихід" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:48 +#: graphicswin.cpp:48 msgid "&Edit" msgstr "&Редагувати" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:49 +#: graphicswin.cpp:49 msgid "&Undo" msgstr "&Відмінити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:50 +#: graphicswin.cpp:50 msgid "&Redo" msgstr "&Повторити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:51 +#: graphicswin.cpp:51 msgid "Re&generate All" msgstr "Ре&генерувати Все" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:53 +#: graphicswin.cpp:53 msgid "Snap Selection to &Grid" msgstr "Прикріпити Виділене до &Сітки" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:54 +#: graphicswin.cpp:54 msgid "Rotate Imported &90°" msgstr "Обернути Імпортоване на &90°" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:56 +#: graphicswin.cpp:56 msgid "Cu&t" msgstr "Ви&різати" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:57 +#: graphicswin.cpp:57 msgid "&Copy" msgstr "&Копіювати" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:58 +#: graphicswin.cpp:58 msgid "&Paste" msgstr "&Вставити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:59 +#: graphicswin.cpp:59 msgid "Paste &Transformed..." msgstr "Вставити &Трансфмованим..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:60 +#: graphicswin.cpp:60 msgid "&Delete" msgstr "&Delete" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:62 +#: graphicswin.cpp:62 msgid "Select &Edge Chain" msgstr "Виділити Ланцуг &Ребер" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:63 +#: graphicswin.cpp:63 msgid "Select &All" msgstr "Виділити &Усе" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:64 +#: graphicswin.cpp:64 msgid "&Unselect All" msgstr "&Зняти Виділення з Усього" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:66 +#: graphicswin.cpp:66 msgid "&View" msgstr "&View" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:67 +#: graphicswin.cpp:67 msgid "Zoom &In" msgstr "На&близити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:68 +#: graphicswin.cpp:68 msgid "Zoom &Out" msgstr "Від&далити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:69 +#: graphicswin.cpp:69 msgid "Zoom To &Fit" msgstr "Умістити на &Екрані" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:71 +#: graphicswin.cpp:71 msgid "Align View to &Workplane" msgstr "Вирівняти Вигляд до Робочої &Площини" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:72 +#: graphicswin.cpp:72 msgid "Nearest &Ortho View" msgstr "Найближчий &Ортогональний Вигляд" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:73 +#: graphicswin.cpp:73 msgid "Nearest &Isometric View" msgstr "Найближчий &Ізометричний Вигляд" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:74 +#: graphicswin.cpp:74 msgid "&Center View At Point" msgstr "&Центрувати Вигляд На Точці" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:76 +#: graphicswin.cpp:76 msgid "Show Snap &Grid" msgstr "Показати &Сітку Прикріплення" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:77 +#: graphicswin.cpp:77 msgid "Use &Perspective Projection" msgstr "Використовувати &Перспективну Проекцію" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:80 +#: graphicswin.cpp:80 msgid "Show Menu &Bar" msgstr "Показати Панель &Меню" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:82 +#: graphicswin.cpp:82 msgid "Show &Toolbar" msgstr "Показати Панель &Інструментів" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:83 +#: graphicswin.cpp:83 msgid "Show Property Bro&wser" msgstr "Показати Вікно Власти&востей" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:85 +#: graphicswin.cpp:85 msgid "Dimensions in &Inches" msgstr "Розміри в &Дюймах" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:86 +#: graphicswin.cpp:86 msgid "Dimensions in &Millimeters" msgstr "Розміри в &Міліметрах" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:89 +#: graphicswin.cpp:89 msgid "&Full Screen" msgstr "&Повний Екран" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:92 +#: graphicswin.cpp:92 msgid "&New Group" msgstr "&Нова Група" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:93 +#: graphicswin.cpp:93 msgid "Sketch In &3d" msgstr "Креслення В &3d" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:94 +#: graphicswin.cpp:94 msgid "Sketch In New &Workplane" msgstr "Креслення В Новій Робочій &Площині" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:96 +#: graphicswin.cpp:96 msgid "Step &Translating" msgstr "Покрокове &Переміщення" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:97 +#: graphicswin.cpp:97 msgid "Step &Rotating" msgstr "Покрокове &Обертання" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:99 +#: graphicswin.cpp:99 msgid "E&xtrude" msgstr "Ви&давити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:100 +#: graphicswin.cpp:100 msgid "&Lathe" msgstr "&Виточити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:102 +#: graphicswin.cpp:102 msgid "Link / Assemble..." msgstr "Приєднати / Монтувати..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:103 +#: graphicswin.cpp:103 msgid "Link Recent" msgstr "Приєднати Недавні" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:105 +#: graphicswin.cpp:105 msgid "&Sketch" msgstr "&Креслення" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:106 +#: graphicswin.cpp:106 msgid "In &Workplane" msgstr "В Робочій &Площині" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:107 +#: graphicswin.cpp:107 msgid "Anywhere In &3d" msgstr "Будь-де В &3d" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:109 +#: graphicswin.cpp:109 msgid "Datum &Point" msgstr "Опорна &Точка" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:110 +#: graphicswin.cpp:110 msgid "&Workplane" msgstr "Робоча &Площина" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:112 +#: graphicswin.cpp:112 msgid "Line &Segment" msgstr "&Відрізок Прямої" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:113 +#: graphicswin.cpp:113 msgid "C&onstruction Line Segment" msgstr "Контсрук&ційний Відрізок Прямої" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:114 +#: graphicswin.cpp:114 msgid "&Rectangle" msgstr "&Прямокутник" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:115 +#: graphicswin.cpp:115 msgid "&Circle" msgstr "&Коло" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:116 +#: graphicswin.cpp:116 msgid "&Arc of a Circle" msgstr "&Дуга Кола" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:117 +#: graphicswin.cpp:117 msgid "&Bezier Cubic Spline" msgstr "Кубічний Сплайн &Без'є" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:119 +#: graphicswin.cpp:119 msgid "&Text in TrueType Font" msgstr "&Текст з TrueType Шрифтом" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:121 +#: graphicswin.cpp:121 msgid "To&ggle Construction" msgstr "Пере&мкнути Конструктивність" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:122 +#: graphicswin.cpp:122 msgid "Tangent &Arc at Point" msgstr "Дотична &Дуга на Точці" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:123 +#: graphicswin.cpp:123 msgid "Split Curves at &Intersection" msgstr "Розрізати Криві на &Перетині" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:125 +#: graphicswin.cpp:125 msgid "&Constrain" msgstr "&Обмежити" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:126 +#: graphicswin.cpp:126 msgid "&Distance / Diameter" msgstr "&Відстань / Діаметр" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:127 +#: graphicswin.cpp:127 msgid "Re&ference Dimension" msgstr "Від&носний Розмір" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:128 +#: graphicswin.cpp:128 msgid "A&ngle" msgstr "К&ут" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:129 +#: graphicswin.cpp:129 msgid "Reference An&gle" msgstr "Відносний К&ут" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:130 +#: graphicswin.cpp:130 msgid "Other S&upplementary Angle" msgstr "Інший Су&міжний Кут" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:131 +#: graphicswin.cpp:131 msgid "Toggle R&eference Dim" msgstr "Перемкнути Від&носність Розмірів" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:133 +#: graphicswin.cpp:133 msgid "&Horizontal" msgstr "&Горизонтально" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:134 +#: graphicswin.cpp:134 msgid "&Vertical" msgstr "&Вертикально" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:136 +#: graphicswin.cpp:136 msgid "&On Point / Curve / Plane" msgstr "&На точці / Кривій / Площині" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:137 +#: graphicswin.cpp:137 msgid "E&qual Length / Radius / Angle" msgstr "Рі&вні Довжина / Радіус / Кут" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:138 +#: graphicswin.cpp:138 msgid "Length Ra&tio" msgstr "Про&порція Довжин" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:139 +#: graphicswin.cpp:139 msgid "Length Diff&erence" msgstr "Рі&зниця Довжин" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:140 +#: graphicswin.cpp:140 msgid "At &Midpoint" msgstr "До &Середини" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:141 +#: graphicswin.cpp:141 msgid "S&ymmetric" msgstr "Си&метрично" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:142 +#: graphicswin.cpp:142 msgid "Para&llel / Tangent" msgstr "Пара&лельно / Дотична" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:143 +#: graphicswin.cpp:143 msgid "&Perpendicular" msgstr "&Препендикулярно" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:144 +#: graphicswin.cpp:144 msgid "Same Orient&ation" msgstr "Однакова Орієн&тація" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:145 +#: graphicswin.cpp:145 msgid "Lock Point Where &Dragged" msgstr "Фіксувати Точку Після &Переміщення" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:147 +#: graphicswin.cpp:147 msgid "Comment" msgstr "Коментар" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:149 +#: graphicswin.cpp:149 msgid "&Analyze" msgstr "&Аналізувати" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:150 +#: graphicswin.cpp:150 msgid "Measure &Volume" msgstr "Обрахувати &Об'єм" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:151 +#: graphicswin.cpp:151 msgid "Measure A&rea" msgstr "Обрахувати Пл&ощу" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:152 +#: graphicswin.cpp:152 msgid "Measure &Perimeter" msgstr "Обрахувати &Периметр" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:153 +#: graphicswin.cpp:153 msgid "Show &Interfering Parts" msgstr "Показати &Дотичні Частини" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:154 +#: graphicswin.cpp:154 msgid "Show &Naked Edges" msgstr "Показати &Приховані Ребра" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:156 +#: graphicswin.cpp:156 msgid "Show Degrees of &Freedom" msgstr "Показати Степені &Свободи" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:158 +#: graphicswin.cpp:158 msgid "&Trace Point" msgstr "&Трасувати Точку" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:159 +#: graphicswin.cpp:159 msgid "&Stop Tracing..." msgstr "&Зупити Трасування..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:160 +#: graphicswin.cpp:160 msgid "Step &Dimension..." msgstr "Прорахувати &Розмір..." -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:162 +#: graphicswin.cpp:162 msgid "&Help" msgstr "&Довідка" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:163 +#: graphicswin.cpp:163 msgid "&Website / Manual" msgstr "&Вебсайт / Посібник" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:164 +#: graphicswin.cpp:164 msgid "&Language" msgstr "&Мова" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:166 +#: graphicswin.cpp:166 msgid "&About" msgstr "&Про програму" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:495 +#: graphicswin.cpp:492 +msgid "No workplane is active, so the grid will not appear." +msgstr "" + +#: graphicswin.cpp:501 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel " +"projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the " +"configuration screen. A value around 0.3 is typical." +msgstr "" + +#: graphicswin.cpp:582 +msgid "" +"Select a point; this point will become the center of the view on screen." +msgstr "" + +#: graphicswin.cpp:864 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" + +#: graphicswin.cpp:884 +msgid "" +"To use this command, select a point or other entity from an linked part, or " +"make a link group the active group." +msgstr "" + +#: graphicswin.cpp:908 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) " +"to define the plane for the snap grid." +msgstr "" + +#: graphicswin.cpp:915 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints " +"with a label. To snap a line, select its endpoints." +msgstr "" + +#: graphicswin.cpp:980 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" + +#: graphicswin.cpp:985 +msgid "" +"No workplane is selected, and the active group does not have a default " +"workplane. Try selecting a workplane, or activating a sketch-in-new-" +"workplane group." +msgstr "" + +#: graphicswin.cpp:1009 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select " +"nothing to set up arc parameters." +msgstr "" + +#: graphicswin.cpp:1020 +msgid "click point on arc (draws anti-clockwise)" +msgstr "" + +#: graphicswin.cpp:1021 +msgid "click to place datum point" +msgstr "" + +#: graphicswin.cpp:1022 +msgid "click first point of line segment" +msgstr "" + +#: graphicswin.cpp:1024 +msgid "click first point of construction line segment" +msgstr "" + +#: graphicswin.cpp:1025 +msgid "click first point of cubic segment" +msgstr "" + +#: graphicswin.cpp:1026 +msgid "click center of circle" +msgstr "" + +#: graphicswin.cpp:1027 +msgid "click origin of workplane" +msgstr "" + +#: graphicswin.cpp:1028 +msgid "click one corner of rectangle" +msgstr "" + +#: graphicswin.cpp:1029 +msgid "click top left of text" +msgstr "" + +#: graphicswin.cpp:1042 +msgid "" +"No entities are selected. Select entities before trying to toggle their " +"construction state." +msgstr "" + +#: group.cpp:89 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "" + +#: group.cpp:145 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the " +"lines)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" + +#: group.cpp:157 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch " +"will be extruded normal to the workplane." +msgstr "" + +#: group.cpp:166 +msgctxt "group-name" +msgid "extrude" +msgstr "" + +#: group.cpp:178 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel " +"to line / normal, through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" + +#: group.cpp:188 +msgctxt "group-name" +msgid "lathe" +msgstr "" + +#: group.cpp:201 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that " +"point)\n" +" * a point and a line or a normal (rotate about an axis through the " +"point, and parallel to line / normal)\n" +msgstr "" + +#: group.cpp:214 +msgctxt "group-name" +msgid "rotate" +msgstr "" + +#: group.cpp:225 +msgctxt "group-name" +msgid "translate" +msgstr "" + +#: group.cpp:257 +msgctxt "group-name" +msgid "link" +msgstr "" + +#: group.cpp:339 +msgid "(unnamed)" +msgstr "" + +#: groupmesh.cpp:607 +msgid "not closed contour, or not all same style!" +msgstr "" + +#: groupmesh.cpp:620 +msgid "points not all coplanar!" +msgstr "" + +#: groupmesh.cpp:622 +msgid "contour is self-intersecting!" +msgstr "" + +#: groupmesh.cpp:624 +msgid "zero-length edge!" +msgstr "" + +#: modify.cpp:237 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "" + +#: modify.cpp:284 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or " +"circles in this group and workplane join." +msgstr "" + +#: modify.cpp:371 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the " +"desired geometry by hand with tangency constraints." +msgstr "" + +#: modify.cpp:575 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" + +#: modify.cpp:601 +msgid "Must be sketching in workplane to split." +msgstr "" + +#: modify.cpp:611 +msgid "" +"Select two entities that intersect each other (e.g. two lines or two circles " +"or a circle and a line)." +msgstr "" + +#: modify.cpp:655 +msgid "Can't split; no intersection found." +msgstr "" + +#: mouse.cpp:495 msgid "No Style" msgstr "Без Стилю" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:496 +#: mouse.cpp:496 msgid "Newly Created Custom Style..." msgstr "Створити Користувацький Стиль..." -#: /home/whitequark/Work/solvespace/src/mouse.cpp:544 +#: mouse.cpp:544 msgid "Assign to Style" msgstr "Встановити Стиль" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:547 +#: mouse.cpp:547 msgid "Group Info" msgstr "Параметри Групи" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:550 +#: mouse.cpp:550 msgid "Style Info" msgstr "Параметри Стилю" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:553 +#: mouse.cpp:553 msgid "Select Edge Chain" msgstr "Виділити Ланцюг Ребер" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:558 +#: mouse.cpp:558 msgid "Toggle Reference Dimension" msgstr "Перемкнути Відносність Розміру" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:564 +#: mouse.cpp:564 msgid "Other Supplementary Angle" msgstr "Інший Суміжний Кут" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:569 +#: mouse.cpp:569 msgid "Snap to Grid" msgstr "Прикріпити до Сітки" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:577 +#: mouse.cpp:577 msgid "Remove Spline Point" msgstr "Видалити Точку Сплайну" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:588 +#: mouse.cpp:588 msgid "Add Spline Point" msgstr "Додати Точку Сплайну" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:592 +#: mouse.cpp:592 msgid "Toggle Construction" msgstr "Пермкнути Конструктивність" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:606 +#: mouse.cpp:606 msgid "Delete Point-Coincident Constraint" msgstr "Роз'єднати З'єднання Точок" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:612 +#: mouse.cpp:612 msgid "Cut" msgstr "Вирізати" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:613 +#: mouse.cpp:613 msgid "Copy" msgstr "Копіювати" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:616 +#: mouse.cpp:616 msgid "Select All" msgstr "Виділити Усе" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:620 +#: mouse.cpp:620 msgid "Paste" msgstr "Вставити" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:621 +#: mouse.cpp:621 msgid "Paste Transformed..." msgstr "Вставити Трансформованим..." -#: /home/whitequark/Work/solvespace/src/mouse.cpp:625 +#: mouse.cpp:625 msgid "Delete" msgstr "Видалити" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:627 +#: mouse.cpp:627 msgid "Unselect All" msgstr "Зняти Виділення з Усього" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:633 +#: mouse.cpp:633 msgid "Unselect Hovered" msgstr "Зняти Виділення з Наведеного" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:638 +#: mouse.cpp:638 msgid "Zoom to Fit" msgstr "Умістити на Екрані" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:18 +#: mouse.cpp:778 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" + +#: mouse.cpp:948 mouse.cpp:1199 +msgid "click next point of line, or press Esc" +msgstr "" + +#: mouse.cpp:954 +msgid "" +"Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:981 +msgid "click to place other corner of rectangle" +msgstr "" + +#: mouse.cpp:1001 +msgid "click to set radius" +msgstr "" + +#: mouse.cpp:1006 +msgid "" +"Can't draw arc in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:1024 +msgid "click to place point" +msgstr "" + +#: mouse.cpp:1039 +msgid "click next point of cubic, or press Esc" +msgstr "" + +#: mouse.cpp:1044 +msgid "" +"Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" + +#: mouse.cpp:1060 +msgid "" +"Can't draw text in 3d; first, activate a workplane with Sketch -> In " +"Workplane." +msgstr "" + +#: mouse.cpp:1075 +msgid "click to place bottom left of text" +msgstr "" + +#: mouse.cpp:1086 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "" + +#: style.cpp:161 +msgid "" +"Can't assign style to an entity that's derived from another entity; try " +"assigning a style to this entity's parent." +msgstr "" + +#: style.cpp:704 +msgid "Style name cannot be empty" +msgstr "" + +#: style.cpp:717 +msgid "Scale must not be zero or negative!" +msgstr "" + +#: textscreens.cpp:657 +msgid "Can't repeat fewer than 1 time." +msgstr "" + +#: textscreens.cpp:661 +msgid "Can't repeat more than 999 times." +msgstr "" + +#: textscreens.cpp:690 +msgid "Group name cannot be empty" +msgstr "" + +#: textscreens.cpp:734 +msgid "Opacity must be between zero and one." +msgstr "" + +#: textscreens.cpp:773 +msgid "Radius cannot be zero or negative." +msgstr "" + +#: toolbar.cpp:18 msgid "Sketch line segment" msgstr "Накреслети відрізок прямої" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:20 +#: toolbar.cpp:20 msgid "Sketch rectangle" msgstr "Накреслити прямокутник" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:22 +#: toolbar.cpp:22 msgid "Sketch circle" msgstr "Накреслити коло" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:24 +#: toolbar.cpp:24 msgid "Sketch arc of a circle" msgstr "Накреслити дугу кола" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:26 +#: toolbar.cpp:26 msgid "Sketch curves from text in a TrueType font" msgstr "Накреслити криві з тексту на TrueType шрифті" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:28 +#: toolbar.cpp:28 msgid "Create tangent arc at selected point" msgstr "Створити дотичну дугу у вибраній точці" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:30 +#: toolbar.cpp:30 msgid "Sketch cubic Bezier spline" msgstr "Накреслити кубічний сплайн Без'є" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:32 +#: toolbar.cpp:32 msgid "Sketch datum point" msgstr "Накреслити опорну точку" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:34 +#: toolbar.cpp:34 msgid "Toggle construction" msgstr "Перемкнути конструктивність" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:36 +#: toolbar.cpp:36 msgid "Split lines / curves where they intersect" msgstr "Розрізати лініх / криві в місцях перетину" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:40 +#: toolbar.cpp:40 msgid "Constrain distance / diameter / length" msgstr "Визначити відстань / діаметр / довжину" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:42 +#: toolbar.cpp:42 msgid "Constrain angle" msgstr "Визначити кут" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:44 +#: toolbar.cpp:44 msgid "Constrain to be horizontal" msgstr "Встановити горизонтально" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:46 +#: toolbar.cpp:46 msgid "Constrain to be vertical" msgstr "Встановити перпендикулярно" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:48 +#: toolbar.cpp:48 msgid "Constrain to be parallel or tangent" msgstr "Встановити паралельно або дотично" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:50 +#: toolbar.cpp:50 msgid "Constrain to be perpendicular" msgstr "Встановити перпендикулярно" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:52 +#: toolbar.cpp:52 msgid "Constrain point on line / curve / plane / point" msgstr "Прив'язати точку до лінії / кривої / площини / точки" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:54 +#: toolbar.cpp:54 msgid "Constrain symmetric" msgstr "Встановити симетрично" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:56 +#: toolbar.cpp:56 msgid "Constrain equal length / radius / angle" msgstr "Встановити однаковими відстань / радіус / кут" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:58 +#: toolbar.cpp:58 msgid "Constrain normals in same orientation" msgstr "Спрямувати нормалі в одному напрямку" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:60 +#: toolbar.cpp:60 msgid "Other supplementary angle" msgstr "Інший суміжний кут" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:62 +#: toolbar.cpp:62 msgid "Toggle reference dimension" msgstr "Перемкнути відносність розміру" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:66 +#: toolbar.cpp:66 msgid "New group extruding active sketch" msgstr "Нова група екструдування активного креслення" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:68 +#: toolbar.cpp:68 msgid "New group rotating active sketch" msgstr "Нова група обертання актиного креслення" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:70 +#: toolbar.cpp:70 msgid "New group step and repeat rotating" msgstr "Нова група крокування і повторення обертання" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:72 +#: toolbar.cpp:72 msgid "New group step and repeat translating" msgstr "Нова група крокування і повторення зміщення" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:74 +#: toolbar.cpp:74 msgid "New group in new workplane (thru given entities)" msgstr "Нова група в новій площині (через обрані об'екти)" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:76 +#: toolbar.cpp:76 msgid "New group in 3d" msgstr "Нова група в 3d" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:78 +#: toolbar.cpp:78 msgid "New group linking / assembling file" msgstr "Нова група приєднання / монтування файлу" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:82 +#: toolbar.cpp:82 msgid "Nearest isometric view" msgstr "Найближчий ізометричний вигляд" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:84 +#: toolbar.cpp:84 msgid "Align view to active workplane" msgstr "Вирівняти вигляд до активної робочої площини" + +#: view.cpp:78 +msgid "Scale cannot be zero or negative." +msgstr "" + +#: view.cpp:90 view.cpp:99 +msgid "Bad format: specify x, y, z" +msgstr "" diff --git a/res/messages.pot b/res/messages.pot index e0b9f553..d0c96606 100644 --- a/res/messages.pot +++ b/res/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: SolveSpace 3.0\n" "Report-Msgid-Bugs-To: whitequark@whitequark.org\n" -"POT-Creation-Date: 2017-01-05 12:33+0000\n" +"POT-Creation-Date: 2017-01-07 06:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,622 +17,1363 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:29 +#: clipboard.cpp:242 +msgid "" +"Cut, paste, and copy work only in a workplane.\n" +"\n" +"Activate one with Sketch -> In Workplane." +msgstr "" + +#: clipboard.cpp:259 +msgid "Clipboard is empty; nothing to paste." +msgstr "" + +#: clipboard.cpp:306 +msgid "Number of copies to paste must be at least one." +msgstr "" + +#: clipboard.cpp:322 textscreens.cpp:704 +msgid "Scale cannot be zero." +msgstr "" + +#: clipboard.cpp:360 +msgid "Select one point to define origin of rotation." +msgstr "" + +#: clipboard.cpp:372 +msgid "Select two points to define translation vector." +msgstr "" + +#: clipboard.cpp:382 +msgid "Transformation is identity. So all copies will be exactly on top of each other." +msgstr "" + +#: clipboard.cpp:386 +msgid "Too many items to paste; split this into smaller pastes." +msgstr "" + +#: clipboard.cpp:391 +msgid "No workplane active." +msgstr "" + +#: confscreen.cpp:328 +msgid "Bad format: specify coordinates as x, y, z" +msgstr "" + +#: confscreen.cpp:339 style.cpp:698 textscreens.cpp:725 +msgid "Bad format: specify color as r, g, b" +msgstr "" + +#: confscreen.cpp:364 +msgid "" +"The perspective factor will have no effect until you enable View -> Use Perspective Projection." +msgstr "" + +#: confscreen.cpp:378 +msgid "Specify between 0 and 8 digits after the decimal." +msgstr "" + +#: confscreen.cpp:390 +msgid "Export scale must not be zero!" +msgstr "" + +#: confscreen.cpp:402 +msgid "Cutter radius offset must not be negative!" +msgstr "" + +#: confscreen.cpp:456 +msgid "Bad value: autosave interval should be positive" +msgstr "" + +#: confscreen.cpp:459 +msgid "Bad format: specify interval in integral minutes" +msgstr "" + +#: constraint.cpp:12 +msgctxt "constr-name" +msgid "pts-coincident" +msgstr "" + +#: constraint.cpp:13 +msgctxt "constr-name" +msgid "pt-pt-distance" +msgstr "" + +#: constraint.cpp:14 +msgctxt "constr-name" +msgid "pt-line-distance" +msgstr "" + +#: constraint.cpp:15 +msgctxt "constr-name" +msgid "pt-plane-distance" +msgstr "" + +#: constraint.cpp:16 +msgctxt "constr-name" +msgid "pt-face-distance" +msgstr "" + +#: constraint.cpp:17 +msgctxt "constr-name" +msgid "proj-pt-pt-distance" +msgstr "" + +#: constraint.cpp:18 +msgctxt "constr-name" +msgid "pt-in-plane" +msgstr "" + +#: constraint.cpp:19 +msgctxt "constr-name" +msgid "pt-on-line" +msgstr "" + +#: constraint.cpp:20 +msgctxt "constr-name" +msgid "pt-on-face" +msgstr "" + +#: constraint.cpp:21 +msgctxt "constr-name" +msgid "eq-length" +msgstr "" + +#: constraint.cpp:22 +msgctxt "constr-name" +msgid "eq-length-and-pt-ln-dist" +msgstr "" + +#: constraint.cpp:23 +msgctxt "constr-name" +msgid "eq-pt-line-distances" +msgstr "" + +#: constraint.cpp:24 +msgctxt "constr-name" +msgid "length-ratio" +msgstr "" + +#: constraint.cpp:25 +msgctxt "constr-name" +msgid "length-difference" +msgstr "" + +#: constraint.cpp:26 +msgctxt "constr-name" +msgid "symmetric" +msgstr "" + +#: constraint.cpp:27 +msgctxt "constr-name" +msgid "symmetric-h" +msgstr "" + +#: constraint.cpp:28 +msgctxt "constr-name" +msgid "symmetric-v" +msgstr "" + +#: constraint.cpp:29 +msgctxt "constr-name" +msgid "symmetric-line" +msgstr "" + +#: constraint.cpp:30 +msgctxt "constr-name" +msgid "at-midpoint" +msgstr "" + +#: constraint.cpp:31 +msgctxt "constr-name" +msgid "horizontal" +msgstr "" + +#: constraint.cpp:32 +msgctxt "constr-name" +msgid "vertical" +msgstr "" + +#: constraint.cpp:33 +msgctxt "constr-name" +msgid "diameter" +msgstr "" + +#: constraint.cpp:34 +msgctxt "constr-name" +msgid "pt-on-circle" +msgstr "" + +#: constraint.cpp:35 +msgctxt "constr-name" +msgid "same-orientation" +msgstr "" + +#: constraint.cpp:36 +msgctxt "constr-name" +msgid "angle" +msgstr "" + +#: constraint.cpp:37 +msgctxt "constr-name" +msgid "parallel" +msgstr "" + +#: constraint.cpp:38 +msgctxt "constr-name" +msgid "arc-line-tangent" +msgstr "" + +#: constraint.cpp:39 +msgctxt "constr-name" +msgid "cubic-line-tangent" +msgstr "" + +#: constraint.cpp:40 +msgctxt "constr-name" +msgid "curve-curve-tangent" +msgstr "" + +#: constraint.cpp:41 +msgctxt "constr-name" +msgid "perpendicular" +msgstr "" + +#: constraint.cpp:42 +msgctxt "constr-name" +msgid "eq-radius" +msgstr "" + +#: constraint.cpp:43 +msgctxt "constr-name" +msgid "eq-angle" +msgstr "" + +#: constraint.cpp:44 +msgctxt "constr-name" +msgid "eq-line-len-arc-len" +msgstr "" + +#: constraint.cpp:45 +msgctxt "constr-name" +msgid "lock-where-dragged" +msgstr "" + +#: constraint.cpp:46 +msgctxt "constr-name" +msgid "comment" +msgstr "" + +#: constraint.cpp:159 +msgid "" +"Bad selection for distance / diameter constraint. This constraint can apply to:\n" +"\n" +" * two points (distance between points)\n" +" * a line segment (length)\n" +" * two points and a line segment or normal (projected distance)\n" +" * a workplane and a point (minimum distance)\n" +" * a line segment and a point (minimum distance)\n" +" * a plane face and a point (minimum distance)\n" +" * a circle or an arc (diameter)\n" +msgstr "" + +#: constraint.cpp:212 +msgid "" +"Bad selection for on point / curve / plane constraint. This constraint can apply to:\n" +"\n" +" * two points (points coincident)\n" +" * a point and a workplane (point in plane)\n" +" * a point and a line segment (point on line)\n" +" * a point and a circle or arc (point on curve)\n" +" * a point and a plane face (point on face)\n" +msgstr "" + +#: constraint.cpp:274 +msgid "" +"Bad selection for equal length / radius constraint. This constraint can apply to:\n" +"\n" +" * two line segments (equal length)\n" +" * two line segments and two points (equal point-line distances)\n" +" * a line segment and two points (equal point-line distances)\n" +" * a line segment, and a point and line segment (point-line distance equals length)\n" +" * four line segments or normals (equal angle between A,B and C,D)\n" +" * three line segments or normals (equal angle between A,B and B,C)\n" +" * two circles or arcs (equal radius)\n" +" * a line segment and an arc (line segment length equals arc length)\n" +msgstr "" + +#: constraint.cpp:313 +msgid "" +"Bad selection for length ratio constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" + +#: constraint.cpp:330 +msgid "" +"Bad selection for length difference constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +msgstr "" + +#: constraint.cpp:356 +msgid "" +"Bad selection for at midpoint constraint. This constraint can apply to:\n" +"\n" +" * a line segment and a point (point at midpoint)\n" +" * a line segment and a workplane (line's midpoint on plane)\n" +msgstr "" + +#: constraint.cpp:414 +msgid "" +"Bad selection for symmetric constraint. This constraint can apply to:\n" +"\n" +" * two points or a line segment (symmetric about workplane's coordinate axis)\n" +" * line segment, and two points or a line segment (symmetric about line segment)\n" +" * workplane, and two points or a line segment (symmetric about workplane)\n" +msgstr "" + +#: constraint.cpp:428 +msgid "A workplane must be active when constraining symmetric without an explicit symmetry plane." +msgstr "" + +#: constraint.cpp:458 +msgid "" +"Activate a workplane (with Sketch -> In Workplane) before applying a horizontal or vertical " +"constraint." +msgstr "" + +#: constraint.cpp:471 +msgid "" +"Bad selection for horizontal / vertical constraint. This constraint can apply to:\n" +"\n" +" * two points\n" +" * a line segment\n" +msgstr "" + +#: constraint.cpp:492 +msgid "" +"Bad selection for same orientation constraint. This constraint can apply to:\n" +"\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:544 +msgid "Must select an angle constraint." +msgstr "" + +#: constraint.cpp:556 +msgid "Must select a constraint with associated label." +msgstr "" + +#: constraint.cpp:567 +msgid "" +"Bad selection for angle constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:624 +msgid "" +"The tangent arc and line segment must share an endpoint. Constrain them with Constrain -> On " +"Point before constraining tangent." +msgstr "" + +#: constraint.cpp:648 +msgid "" +"The tangent cubic and line segment must share an endpoint. Constrain them with Constrain -> On " +"Point before constraining tangent." +msgstr "" + +#: constraint.cpp:658 +msgid "Curve-curve tangency must apply in workplane." +msgstr "" + +#: constraint.cpp:676 +msgid "" +"The curves must share an endpoint. Constrain them with Constrain -> On Point before constraining " +"tangent." +msgstr "" + +#: constraint.cpp:685 +msgid "" +"Bad selection for parallel / tangent constraint. This constraint can apply to:\n" +"\n" +" * two line segments (parallel)\n" +" * a line segment and a normal (parallel)\n" +" * two normals (parallel)\n" +" * two line segments, arcs, or beziers, that share an endpoint (tangent)\n" +msgstr "" + +#: constraint.cpp:703 +msgid "" +"Bad selection for perpendicular constraint. This constraint can apply to:\n" +"\n" +" * two line segments\n" +" * a line segment and a normal\n" +" * two normals\n" +msgstr "" + +#: constraint.cpp:718 +msgid "" +"Bad selection for lock point where dragged constraint. This constraint can apply to:\n" +"\n" +" * a point\n" +msgstr "" + +#: constraint.cpp:729 +msgid "click center of comment text" +msgstr "" + +#: exportvector.cpp:330 +msgid "freehand lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:332 +msgid "zigzag lines were replaced with continuous lines" +msgstr "" + +#: exportvector.cpp:583 +msgid "Some aspects of the drawing have no DXF equivalent and were not exported:\n" +msgstr "" + +#: exportvector.cpp:800 +msgid "PDF page size exceeds 200 by 200 inches; many viewers may reject this file." +msgstr "" + +#: file.cpp:43 group.cpp:94 +msgctxt "group-name" +msgid "sketch-in-plane" +msgstr "" + +#: file.cpp:61 +msgctxt "group-name" +msgid "#references" +msgstr "" + +#: file.cpp:508 +msgid "Unrecognized data in file. This file may be corrupt, or from a newer version of the program." +msgstr "" + +#: graphicswin.cpp:29 msgid "&File" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:30 +#: graphicswin.cpp:30 msgid "&New" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:31 +#: graphicswin.cpp:31 msgid "&Open..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:32 +#: graphicswin.cpp:32 msgid "Open &Recent" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:33 +#: graphicswin.cpp:33 msgid "&Save" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:34 +#: graphicswin.cpp:34 msgid "Save &As..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:36 +#: graphicswin.cpp:36 msgid "Export &Image..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:37 +#: graphicswin.cpp:37 msgid "Export 2d &View..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:38 +#: graphicswin.cpp:38 msgid "Export 2d &Section..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:39 +#: graphicswin.cpp:39 msgid "Export 3d &Wireframe..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:40 +#: graphicswin.cpp:40 msgid "Export Triangle &Mesh..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:41 +#: graphicswin.cpp:41 msgid "Export &Surfaces..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:42 +#: graphicswin.cpp:42 msgid "Im&port..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:45 +#: graphicswin.cpp:45 msgid "E&xit" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:48 +#: graphicswin.cpp:48 msgid "&Edit" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:49 +#: graphicswin.cpp:49 msgid "&Undo" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:50 +#: graphicswin.cpp:50 msgid "&Redo" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:51 +#: graphicswin.cpp:51 msgid "Re&generate All" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:53 +#: graphicswin.cpp:53 msgid "Snap Selection to &Grid" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:54 +#: graphicswin.cpp:54 msgid "Rotate Imported &90°" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:56 +#: graphicswin.cpp:56 msgid "Cu&t" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:57 +#: graphicswin.cpp:57 msgid "&Copy" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:58 +#: graphicswin.cpp:58 msgid "&Paste" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:59 +#: graphicswin.cpp:59 msgid "Paste &Transformed..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:60 +#: graphicswin.cpp:60 msgid "&Delete" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:62 +#: graphicswin.cpp:62 msgid "Select &Edge Chain" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:63 +#: graphicswin.cpp:63 msgid "Select &All" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:64 +#: graphicswin.cpp:64 msgid "&Unselect All" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:66 +#: graphicswin.cpp:66 msgid "&View" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:67 +#: graphicswin.cpp:67 msgid "Zoom &In" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:68 +#: graphicswin.cpp:68 msgid "Zoom &Out" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:69 +#: graphicswin.cpp:69 msgid "Zoom To &Fit" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:71 +#: graphicswin.cpp:71 msgid "Align View to &Workplane" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:72 +#: graphicswin.cpp:72 msgid "Nearest &Ortho View" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:73 +#: graphicswin.cpp:73 msgid "Nearest &Isometric View" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:74 +#: graphicswin.cpp:74 msgid "&Center View At Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:76 +#: graphicswin.cpp:76 msgid "Show Snap &Grid" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:77 +#: graphicswin.cpp:77 msgid "Use &Perspective Projection" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:80 +#: graphicswin.cpp:80 msgid "Show Menu &Bar" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:82 +#: graphicswin.cpp:82 msgid "Show &Toolbar" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:83 +#: graphicswin.cpp:83 msgid "Show Property Bro&wser" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:85 +#: graphicswin.cpp:85 msgid "Dimensions in &Inches" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:86 +#: graphicswin.cpp:86 msgid "Dimensions in &Millimeters" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:89 +#: graphicswin.cpp:89 msgid "&Full Screen" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:92 +#: graphicswin.cpp:92 msgid "&New Group" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:93 +#: graphicswin.cpp:93 msgid "Sketch In &3d" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:94 +#: graphicswin.cpp:94 msgid "Sketch In New &Workplane" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:96 +#: graphicswin.cpp:96 msgid "Step &Translating" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:97 +#: graphicswin.cpp:97 msgid "Step &Rotating" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:99 +#: graphicswin.cpp:99 msgid "E&xtrude" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:100 +#: graphicswin.cpp:100 msgid "&Lathe" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:102 +#: graphicswin.cpp:102 msgid "Link / Assemble..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:103 +#: graphicswin.cpp:103 msgid "Link Recent" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:105 +#: graphicswin.cpp:105 msgid "&Sketch" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:106 +#: graphicswin.cpp:106 msgid "In &Workplane" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:107 +#: graphicswin.cpp:107 msgid "Anywhere In &3d" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:109 +#: graphicswin.cpp:109 msgid "Datum &Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:110 +#: graphicswin.cpp:110 msgid "&Workplane" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:112 +#: graphicswin.cpp:112 msgid "Line &Segment" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:113 +#: graphicswin.cpp:113 msgid "C&onstruction Line Segment" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:114 +#: graphicswin.cpp:114 msgid "&Rectangle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:115 +#: graphicswin.cpp:115 msgid "&Circle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:116 +#: graphicswin.cpp:116 msgid "&Arc of a Circle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:117 +#: graphicswin.cpp:117 msgid "&Bezier Cubic Spline" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:119 +#: graphicswin.cpp:119 msgid "&Text in TrueType Font" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:121 +#: graphicswin.cpp:121 msgid "To&ggle Construction" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:122 +#: graphicswin.cpp:122 msgid "Tangent &Arc at Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:123 +#: graphicswin.cpp:123 msgid "Split Curves at &Intersection" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:125 +#: graphicswin.cpp:125 msgid "&Constrain" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:126 +#: graphicswin.cpp:126 msgid "&Distance / Diameter" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:127 +#: graphicswin.cpp:127 msgid "Re&ference Dimension" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:128 +#: graphicswin.cpp:128 msgid "A&ngle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:129 +#: graphicswin.cpp:129 msgid "Reference An&gle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:130 +#: graphicswin.cpp:130 msgid "Other S&upplementary Angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:131 +#: graphicswin.cpp:131 msgid "Toggle R&eference Dim" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:133 +#: graphicswin.cpp:133 msgid "&Horizontal" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:134 +#: graphicswin.cpp:134 msgid "&Vertical" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:136 +#: graphicswin.cpp:136 msgid "&On Point / Curve / Plane" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:137 +#: graphicswin.cpp:137 msgid "E&qual Length / Radius / Angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:138 +#: graphicswin.cpp:138 msgid "Length Ra&tio" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:139 +#: graphicswin.cpp:139 msgid "Length Diff&erence" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:140 +#: graphicswin.cpp:140 msgid "At &Midpoint" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:141 +#: graphicswin.cpp:141 msgid "S&ymmetric" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:142 +#: graphicswin.cpp:142 msgid "Para&llel / Tangent" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:143 +#: graphicswin.cpp:143 msgid "&Perpendicular" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:144 +#: graphicswin.cpp:144 msgid "Same Orient&ation" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:145 +#: graphicswin.cpp:145 msgid "Lock Point Where &Dragged" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:147 +#: graphicswin.cpp:147 msgid "Comment" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:149 +#: graphicswin.cpp:149 msgid "&Analyze" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:150 +#: graphicswin.cpp:150 msgid "Measure &Volume" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:151 +#: graphicswin.cpp:151 msgid "Measure A&rea" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:152 +#: graphicswin.cpp:152 msgid "Measure &Perimeter" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:153 +#: graphicswin.cpp:153 msgid "Show &Interfering Parts" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:154 +#: graphicswin.cpp:154 msgid "Show &Naked Edges" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:156 +#: graphicswin.cpp:156 msgid "Show Degrees of &Freedom" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:158 +#: graphicswin.cpp:158 msgid "&Trace Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:159 +#: graphicswin.cpp:159 msgid "&Stop Tracing..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:160 +#: graphicswin.cpp:160 msgid "Step &Dimension..." msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:162 +#: graphicswin.cpp:162 msgid "&Help" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:163 +#: graphicswin.cpp:163 msgid "&Website / Manual" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:164 +#: graphicswin.cpp:164 msgid "&Language" msgstr "" -#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:166 +#: graphicswin.cpp:166 msgid "&About" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:495 +#: graphicswin.cpp:492 +msgid "No workplane is active, so the grid will not appear." +msgstr "" + +#: graphicswin.cpp:501 +msgid "" +"The perspective factor is set to zero, so the view will always be a parallel projection.\n" +"\n" +"For a perspective projection, modify the perspective factor in the configuration screen. A value " +"around 0.3 is typical." +msgstr "" + +#: graphicswin.cpp:582 +msgid "Select a point; this point will become the center of the view on screen." +msgstr "" + +#: graphicswin.cpp:864 +msgid "No additional entities share endpoints with the selected entities." +msgstr "" + +#: graphicswin.cpp:884 +msgid "" +"To use this command, select a point or other entity from an linked part, or make a link group the " +"active group." +msgstr "" + +#: graphicswin.cpp:908 +msgid "" +"No workplane is active. Activate a workplane (with Sketch -> In Workplane) to define the plane " +"for the snap grid." +msgstr "" + +#: graphicswin.cpp:915 +msgid "" +"Can't snap these items to grid; select points, text comments, or constraints with a label. To " +"snap a line, select its endpoints." +msgstr "" + +#: graphicswin.cpp:980 +msgid "No workplane selected. Activating default workplane for this group." +msgstr "" + +#: graphicswin.cpp:985 +msgid "" +"No workplane is selected, and the active group does not have a default workplane. Try selecting a " +"workplane, or activating a sketch-in-new-workplane group." +msgstr "" + +#: graphicswin.cpp:1009 +msgid "" +"Bad selection for tangent arc at point. Select a single point, or select nothing to set up arc " +"parameters." +msgstr "" + +#: graphicswin.cpp:1020 +msgid "click point on arc (draws anti-clockwise)" +msgstr "" + +#: graphicswin.cpp:1021 +msgid "click to place datum point" +msgstr "" + +#: graphicswin.cpp:1022 +msgid "click first point of line segment" +msgstr "" + +#: graphicswin.cpp:1024 +msgid "click first point of construction line segment" +msgstr "" + +#: graphicswin.cpp:1025 +msgid "click first point of cubic segment" +msgstr "" + +#: graphicswin.cpp:1026 +msgid "click center of circle" +msgstr "" + +#: graphicswin.cpp:1027 +msgid "click origin of workplane" +msgstr "" + +#: graphicswin.cpp:1028 +msgid "click one corner of rectangle" +msgstr "" + +#: graphicswin.cpp:1029 +msgid "click top left of text" +msgstr "" + +#: graphicswin.cpp:1042 +msgid "No entities are selected. Select entities before trying to toggle their construction state." +msgstr "" + +#: group.cpp:89 +msgctxt "group-name" +msgid "sketch-in-3d" +msgstr "" + +#: group.cpp:145 +msgid "" +"Bad selection for new sketch in workplane. This group can be created with:\n" +"\n" +" * a point (through the point, orthogonal to coordinate axes)\n" +" * a point and two line segments (through the point, parallel to the lines)\n" +" * a workplane (copy of the workplane)\n" +msgstr "" + +#: group.cpp:157 +msgid "" +"Activate a workplane (Sketch -> In Workplane) before extruding. The sketch will be extruded " +"normal to the workplane." +msgstr "" + +#: group.cpp:166 +msgctxt "group-name" +msgid "extrude" +msgstr "" + +#: group.cpp:178 +msgid "" +"Bad selection for new lathe group. This group can be created with:\n" +"\n" +" * a point and a line segment or normal (revolved about an axis parallel to line / normal, " +"through point)\n" +" * a line segment (revolved about line segment)\n" +msgstr "" + +#: group.cpp:188 +msgctxt "group-name" +msgid "lathe" +msgstr "" + +#: group.cpp:201 +msgid "" +"Bad selection for new rotation. This group can be created with:\n" +"\n" +" * a point, while locked in workplane (rotate in plane, about that point)\n" +" * a point and a line or a normal (rotate about an axis through the point, and parallel to " +"line / normal)\n" +msgstr "" + +#: group.cpp:214 +msgctxt "group-name" +msgid "rotate" +msgstr "" + +#: group.cpp:225 +msgctxt "group-name" +msgid "translate" +msgstr "" + +#: group.cpp:257 +msgctxt "group-name" +msgid "link" +msgstr "" + +#: group.cpp:339 +msgid "(unnamed)" +msgstr "" + +#: groupmesh.cpp:607 +msgid "not closed contour, or not all same style!" +msgstr "" + +#: groupmesh.cpp:620 +msgid "points not all coplanar!" +msgstr "" + +#: groupmesh.cpp:622 +msgid "contour is self-intersecting!" +msgstr "" + +#: groupmesh.cpp:624 +msgid "zero-length edge!" +msgstr "" + +#: modify.cpp:237 +msgid "Must be sketching in workplane to create tangent arc." +msgstr "" + +#: modify.cpp:284 +msgid "" +"To create a tangent arc, select a point where two non-construction lines or circles in this group " +"and workplane join." +msgstr "" + +#: modify.cpp:371 +msgid "" +"Couldn't round this corner. Try a smaller radius, or try creating the desired geometry by hand " +"with tangency constraints." +msgstr "" + +#: modify.cpp:575 +msgid "Couldn't split this entity; lines, circles, or cubics only." +msgstr "" + +#: modify.cpp:601 +msgid "Must be sketching in workplane to split." +msgstr "" + +#: modify.cpp:611 +msgid "" +"Select two entities that intersect each other (e.g. two lines or two circles or a circle and a " +"line)." +msgstr "" + +#: modify.cpp:655 +msgid "Can't split; no intersection found." +msgstr "" + +#: mouse.cpp:495 msgid "No Style" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:496 +#: mouse.cpp:496 msgid "Newly Created Custom Style..." msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:544 +#: mouse.cpp:544 msgid "Assign to Style" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:547 +#: mouse.cpp:547 msgid "Group Info" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:550 +#: mouse.cpp:550 msgid "Style Info" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:553 +#: mouse.cpp:553 msgid "Select Edge Chain" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:558 +#: mouse.cpp:558 msgid "Toggle Reference Dimension" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:564 +#: mouse.cpp:564 msgid "Other Supplementary Angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:569 +#: mouse.cpp:569 msgid "Snap to Grid" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:577 +#: mouse.cpp:577 msgid "Remove Spline Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:588 +#: mouse.cpp:588 msgid "Add Spline Point" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:592 +#: mouse.cpp:592 msgid "Toggle Construction" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:606 +#: mouse.cpp:606 msgid "Delete Point-Coincident Constraint" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:612 +#: mouse.cpp:612 msgid "Cut" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:613 +#: mouse.cpp:613 msgid "Copy" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:616 +#: mouse.cpp:616 msgid "Select All" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:620 +#: mouse.cpp:620 msgid "Paste" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:621 +#: mouse.cpp:621 msgid "Paste Transformed..." msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:625 +#: mouse.cpp:625 msgid "Delete" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:627 +#: mouse.cpp:627 msgid "Unselect All" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:633 +#: mouse.cpp:633 msgid "Unselect Hovered" msgstr "" -#: /home/whitequark/Work/solvespace/src/mouse.cpp:638 +#: mouse.cpp:638 msgid "Zoom to Fit" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:18 +#: mouse.cpp:778 +msgid "Cannot add spline point: maximum number of points reached." +msgstr "" + +#: mouse.cpp:948 mouse.cpp:1199 +msgid "click next point of line, or press Esc" +msgstr "" + +#: mouse.cpp:954 +msgid "Can't draw rectangle in 3d; first, activate a workplane with Sketch -> In Workplane." +msgstr "" + +#: mouse.cpp:981 +msgid "click to place other corner of rectangle" +msgstr "" + +#: mouse.cpp:1001 +msgid "click to set radius" +msgstr "" + +#: mouse.cpp:1006 +msgid "Can't draw arc in 3d; first, activate a workplane with Sketch -> In Workplane." +msgstr "" + +#: mouse.cpp:1024 +msgid "click to place point" +msgstr "" + +#: mouse.cpp:1039 +msgid "click next point of cubic, or press Esc" +msgstr "" + +#: mouse.cpp:1044 +msgid "Sketching in a workplane already; sketch in 3d before creating new workplane." +msgstr "" + +#: mouse.cpp:1060 +msgid "Can't draw text in 3d; first, activate a workplane with Sketch -> In Workplane." +msgstr "" + +#: mouse.cpp:1075 +msgid "click to place bottom left of text" +msgstr "" + +#: mouse.cpp:1086 +msgid "NEW COMMENT -- DOUBLE-CLICK TO EDIT" +msgstr "" + +#: style.cpp:161 +msgid "" +"Can't assign style to an entity that's derived from another entity; try assigning a style to this " +"entity's parent." +msgstr "" + +#: style.cpp:704 +msgid "Style name cannot be empty" +msgstr "" + +#: style.cpp:717 +msgid "Scale must not be zero or negative!" +msgstr "" + +#: textscreens.cpp:657 +msgid "Can't repeat fewer than 1 time." +msgstr "" + +#: textscreens.cpp:661 +msgid "Can't repeat more than 999 times." +msgstr "" + +#: textscreens.cpp:690 +msgid "Group name cannot be empty" +msgstr "" + +#: textscreens.cpp:734 +msgid "Opacity must be between zero and one." +msgstr "" + +#: textscreens.cpp:773 +msgid "Radius cannot be zero or negative." +msgstr "" + +#: toolbar.cpp:18 msgid "Sketch line segment" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:20 +#: toolbar.cpp:20 msgid "Sketch rectangle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:22 +#: toolbar.cpp:22 msgid "Sketch circle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:24 +#: toolbar.cpp:24 msgid "Sketch arc of a circle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:26 +#: toolbar.cpp:26 msgid "Sketch curves from text in a TrueType font" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:28 +#: toolbar.cpp:28 msgid "Create tangent arc at selected point" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:30 +#: toolbar.cpp:30 msgid "Sketch cubic Bezier spline" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:32 +#: toolbar.cpp:32 msgid "Sketch datum point" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:34 +#: toolbar.cpp:34 msgid "Toggle construction" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:36 +#: toolbar.cpp:36 msgid "Split lines / curves where they intersect" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:40 +#: toolbar.cpp:40 msgid "Constrain distance / diameter / length" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:42 +#: toolbar.cpp:42 msgid "Constrain angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:44 +#: toolbar.cpp:44 msgid "Constrain to be horizontal" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:46 +#: toolbar.cpp:46 msgid "Constrain to be vertical" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:48 +#: toolbar.cpp:48 msgid "Constrain to be parallel or tangent" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:50 +#: toolbar.cpp:50 msgid "Constrain to be perpendicular" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:52 +#: toolbar.cpp:52 msgid "Constrain point on line / curve / plane / point" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:54 +#: toolbar.cpp:54 msgid "Constrain symmetric" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:56 +#: toolbar.cpp:56 msgid "Constrain equal length / radius / angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:58 +#: toolbar.cpp:58 msgid "Constrain normals in same orientation" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:60 +#: toolbar.cpp:60 msgid "Other supplementary angle" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:62 +#: toolbar.cpp:62 msgid "Toggle reference dimension" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:66 +#: toolbar.cpp:66 msgid "New group extruding active sketch" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:68 +#: toolbar.cpp:68 msgid "New group rotating active sketch" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:70 +#: toolbar.cpp:70 msgid "New group step and repeat rotating" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:72 +#: toolbar.cpp:72 msgid "New group step and repeat translating" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:74 +#: toolbar.cpp:74 msgid "New group in new workplane (thru given entities)" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:76 +#: toolbar.cpp:76 msgid "New group in 3d" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:78 +#: toolbar.cpp:78 msgid "New group linking / assembling file" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:82 +#: toolbar.cpp:82 msgid "Nearest isometric view" msgstr "" -#: /home/whitequark/Work/solvespace/src/toolbar.cpp:84 +#: toolbar.cpp:84 msgid "Align view to active workplane" msgstr "" + +#: view.cpp:78 +msgid "Scale cannot be zero or negative." +msgstr "" + +#: view.cpp:90 view.cpp:99 +msgid "Bad format: specify x, y, z" +msgstr "" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4788fee2..8309e49c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -212,21 +212,20 @@ if(HAVE_GETTEXT) set(output_pot ${CMAKE_CURRENT_SOURCE_DIR}/../res/messages.pot) set(templ_po ${CMAKE_CURRENT_BINARY_DIR}/messages.po) set(output_po ${CMAKE_CURRENT_SOURCE_DIR}/../res/locales/en_US.po) - set(inputs) - foreach(input ${solvespace_core_SOURCES}) - list(APPEND inputs ${CMAKE_CURRENT_SOURCE_DIR}/${input}) - endforeach() + set(inputs ${solvespace_core_SOURCES}) add_custom_command( OUTPUT ${output_pot} COMMAND ${XGETTEXT} - --keyword --keyword=_ --keyword=N_ + --keyword --keyword=_ --keyword=N_ --keyword=C_:2,1c --keyword=CN_:2,1c --force-po --width=100 --sort-by-file - --package-name=SolveSpace --package-version=3.0 + --package-name=SolveSpace + --package-version=${solvespace_VERSION_MAJOR}.${solvespace_VERSION_MINOR} "--copyright-holder=the PACKAGE authors" --msgid-bugs-address=whitequark@whitequark.org --from-code=utf-8 --output=${output_pot} ${inputs} DEPENDS ${inputs} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Extracting translations" VERBATIM) add_custom_command( @@ -240,7 +239,7 @@ if(HAVE_GETTEXT) DEPENDS ${output_pot} COMMENT "Updating English translations" VERBATIM) - add_custom_target(solvespace-translations ALL + add_custom_target(solvespace-translations DEPENDS ${output_pot} ${output_po}) endif() diff --git a/src/clipboard.cpp b/src/clipboard.cpp index 369fc34e..85fec938 100644 --- a/src/clipboard.cpp +++ b/src/clipboard.cpp @@ -239,8 +239,8 @@ void GraphicsWindow::PasteClipboard(Vector trans, double theta, double scale) { void GraphicsWindow::MenuClipboard(Command id) { if(id != Command::DELETE && !SS.GW.LockedInWorkplane()) { - Error("Cut, paste, and copy work only in a workplane.\n\n" - "Activate one with Sketch -> In Workplane."); + Error(_("Cut, paste, and copy work only in a workplane.\n\n" + "Activate one with Sketch -> In Workplane.")); return; } @@ -256,7 +256,7 @@ void GraphicsWindow::MenuClipboard(Command id) { case Command::PASTE_TRANSFORM: { if(SS.clipboard.r.n == 0) { - Error("Clipboard is empty; nothing to paste."); + Error(_("Clipboard is empty; nothing to paste.")); break; } @@ -303,7 +303,7 @@ bool TextWindow::EditControlDoneForPaste(const char *s) { if(v > 0) { shown.paste.times = v; } else { - Error("Number of copies to paste must be at least one."); + Error(_("Number of copies to paste must be at least one.")); } break; } @@ -319,7 +319,7 @@ bool TextWindow::EditControlDoneForPaste(const char *s) { if(fabs(v) > 1e-6) { shown.paste.scale = v; } else { - Error("Scale cannot be zero."); + Error(_("Scale cannot be zero.")); } break; } @@ -357,7 +357,7 @@ void TextWindow::ScreenPasteTransformed(int link, uint32_t v) { Entity *e = SK.GetEntity(SS.GW.gs.point[0]); SS.TW.shown.paste.origin = e->PointGetNum(); } else { - Error("Select one point to define origin of rotation."); + Error(_("Select one point to define origin of rotation.")); } SS.GW.ClearSelection(); break; @@ -369,7 +369,7 @@ void TextWindow::ScreenPasteTransformed(int link, uint32_t v) { SS.TW.shown.paste.trans = (pb->PointGetNum()).Minus(pa->PointGetNum()); } else { - Error("Select two points to define translation vector."); + Error(_("Select two points to define translation vector.")); } SS.GW.ClearSelection(); break; @@ -379,16 +379,16 @@ void TextWindow::ScreenPasteTransformed(int link, uint32_t v) { SS.TW.shown.paste.trans.Magnitude() < LENGTH_EPS && SS.TW.shown.paste.times != 1) { - Message("Transformation is identity. So all copies will be " - "exactly on top of each other."); + Message(_("Transformation is identity. So all copies will be " + "exactly on top of each other.")); } if(SS.TW.shown.paste.times*SS.clipboard.r.n > 100) { - Error("Too many items to paste; split this into smaller " - "pastes."); + Error(_("Too many items to paste; split this into smaller " + "pastes.")); break; } if(!SS.GW.LockedInWorkplane()) { - Error("No workplane active."); + Error(_("No workplane active.")); break; } Entity *wrkpl = SK.GetEntity(SS.GW.ActiveWorkplane()); diff --git a/src/confscreen.cpp b/src/confscreen.cpp index 8fca9c04..60f53578 100644 --- a/src/confscreen.cpp +++ b/src/confscreen.cpp @@ -325,7 +325,7 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { if(sscanf(s, "%lf, %lf, %lf", &x, &y, &z)==3) { SS.lightDir[edit.i] = Vector::From(x, y, z); } else { - Error("Bad format: specify coordinates as x, y, z"); + Error(_("Bad format: specify coordinates as x, y, z")); } InvalidateGraphics(); break; @@ -336,7 +336,7 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { rgb = rgb.ClampWithin(0, 1); SS.modelColor[edit.i] = RGBf(rgb.x, rgb.y, rgb.z); } else { - Error("Bad format: specify color as r, g, b"); + Error(_("Bad format: specify color as r, g, b")); } break; } @@ -361,8 +361,8 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { case Edit::CAMERA_TANGENT: { SS.cameraTangent = (min(2.0, max(0.0, atof(s))))/1000.0; if(!SS.usePerspectiveProj) { - Message("The perspective factor will have no effect until you " - "enable View -> Use Perspective Projection."); + Message(_("The perspective factor will have no effect until you " + "enable View -> Use Perspective Projection.")); } InvalidateGraphics(); break; @@ -375,7 +375,7 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { case Edit::DIGITS_AFTER_DECIMAL: { int v = atoi(s); if(v < 0 || v > 8) { - Error("Specify between 0 and 8 digits after the decimal."); + Error(_("Specify between 0 and 8 digits after the decimal.")); } else { SS.SetUnitDigitsAfterDecimal(v); } @@ -387,7 +387,7 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { if(e) { double ev = e->Eval(); if(fabs(ev) < 0.001 || isnan(ev)) { - Error("Export scale must not be zero!"); + Error(_("Export scale must not be zero!")); } else { SS.exportScale = (float)ev; } @@ -399,7 +399,7 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { if(e) { double ev = SS.ExprToMm(e); if(isnan(ev) || ev < 0) { - Error("Cutter radius offset must not be negative!"); + Error(_("Cutter radius offset must not be negative!")); } else { SS.exportOffset = (float)ev; } @@ -453,10 +453,10 @@ bool TextWindow::EditControlDoneForConfiguration(const char *s) { SS.autosaveInterval = interval; SetAutosaveTimerFor(interval); } else { - Error("Bad value: autosave interval should be positive"); + Error(_("Bad value: autosave interval should be positive")); } } else { - Error("Bad format: specify interval in integral minutes"); + Error(_("Bad format: specify interval in integral minutes")); } break; } diff --git a/src/constraint.cpp b/src/constraint.cpp index f71f8b5f..14e32716 100644 --- a/src/constraint.cpp +++ b/src/constraint.cpp @@ -7,47 +7,47 @@ #include "solvespace.h" std::string Constraint::DescriptionString() const { - const char *s; + std::string s; switch(type) { - case Type::POINTS_COINCIDENT: s = "pts-coincident"; break; - case Type::PT_PT_DISTANCE: s = "pt-pt-distance"; break; - case Type::PT_LINE_DISTANCE: s = "pt-line-distance"; break; - case Type::PT_PLANE_DISTANCE: s = "pt-plane-distance"; break; - case Type::PT_FACE_DISTANCE: s = "pt-face-distance"; break; - case Type::PROJ_PT_DISTANCE: s = "proj-pt-pt-distance"; break; - case Type::PT_IN_PLANE: s = "pt-in-plane"; break; - case Type::PT_ON_LINE: s = "pt-on-line"; break; - case Type::PT_ON_FACE: s = "pt-on-face"; break; - case Type::EQUAL_LENGTH_LINES: s = "eq-length"; break; - case Type::EQ_LEN_PT_LINE_D: s = "eq-length-and-pt-ln-dist"; break; - case Type::EQ_PT_LN_DISTANCES: s = "eq-pt-line-distances"; break; - case Type::LENGTH_RATIO: s = "length-ratio"; break; - case Type::LENGTH_DIFFERENCE: s = "length-difference"; break; - case Type::SYMMETRIC: s = "symmetric"; break; - case Type::SYMMETRIC_HORIZ: s = "symmetric-h"; break; - case Type::SYMMETRIC_VERT: s = "symmetric-v"; break; - case Type::SYMMETRIC_LINE: s = "symmetric-line"; break; - case Type::AT_MIDPOINT: s = "at-midpoint"; break; - case Type::HORIZONTAL: s = "horizontal"; break; - case Type::VERTICAL: s = "vertical"; break; - case Type::DIAMETER: s = "diameter"; break; - case Type::PT_ON_CIRCLE: s = "pt-on-circle"; break; - case Type::SAME_ORIENTATION: s = "same-orientation"; break; - case Type::ANGLE: s = "angle"; break; - case Type::PARALLEL: s = "parallel"; break; - case Type::ARC_LINE_TANGENT: s = "arc-line-tangent"; break; - case Type::CUBIC_LINE_TANGENT: s = "cubic-line-tangent"; break; - case Type::CURVE_CURVE_TANGENT: s = "curve-curve-tangent"; break; - case Type::PERPENDICULAR: s = "perpendicular"; break; - case Type::EQUAL_RADIUS: s = "eq-radius"; break; - case Type::EQUAL_ANGLE: s = "eq-angle"; break; - case Type::EQUAL_LINE_ARC_LEN: s = "eq-line-len-arc-len"; break; - case Type::WHERE_DRAGGED: s = "lock-where-dragged"; break; - case Type::COMMENT: s = "comment"; break; - default: s = "???"; break; + case Type::POINTS_COINCIDENT: s = C_("constr-name", "pts-coincident"); break; + case Type::PT_PT_DISTANCE: s = C_("constr-name", "pt-pt-distance"); break; + case Type::PT_LINE_DISTANCE: s = C_("constr-name", "pt-line-distance"); break; + case Type::PT_PLANE_DISTANCE: s = C_("constr-name", "pt-plane-distance"); break; + case Type::PT_FACE_DISTANCE: s = C_("constr-name", "pt-face-distance"); break; + case Type::PROJ_PT_DISTANCE: s = C_("constr-name", "proj-pt-pt-distance"); break; + case Type::PT_IN_PLANE: s = C_("constr-name", "pt-in-plane"); break; + case Type::PT_ON_LINE: s = C_("constr-name", "pt-on-line"); break; + case Type::PT_ON_FACE: s = C_("constr-name", "pt-on-face"); break; + case Type::EQUAL_LENGTH_LINES: s = C_("constr-name", "eq-length"); break; + case Type::EQ_LEN_PT_LINE_D: s = C_("constr-name", "eq-length-and-pt-ln-dist"); break; + case Type::EQ_PT_LN_DISTANCES: s = C_("constr-name", "eq-pt-line-distances"); break; + case Type::LENGTH_RATIO: s = C_("constr-name", "length-ratio"); break; + case Type::LENGTH_DIFFERENCE: s = C_("constr-name", "length-difference"); break; + case Type::SYMMETRIC: s = C_("constr-name", "symmetric"); break; + case Type::SYMMETRIC_HORIZ: s = C_("constr-name", "symmetric-h"); break; + case Type::SYMMETRIC_VERT: s = C_("constr-name", "symmetric-v"); break; + case Type::SYMMETRIC_LINE: s = C_("constr-name", "symmetric-line"); break; + case Type::AT_MIDPOINT: s = C_("constr-name", "at-midpoint"); break; + case Type::HORIZONTAL: s = C_("constr-name", "horizontal"); break; + case Type::VERTICAL: s = C_("constr-name", "vertical"); break; + case Type::DIAMETER: s = C_("constr-name", "diameter"); break; + case Type::PT_ON_CIRCLE: s = C_("constr-name", "pt-on-circle"); break; + case Type::SAME_ORIENTATION: s = C_("constr-name", "same-orientation"); break; + case Type::ANGLE: s = C_("constr-name", "angle"); break; + case Type::PARALLEL: s = C_("constr-name", "parallel"); break; + case Type::ARC_LINE_TANGENT: s = C_("constr-name", "arc-line-tangent"); break; + case Type::CUBIC_LINE_TANGENT: s = C_("constr-name", "cubic-line-tangent"); break; + case Type::CURVE_CURVE_TANGENT: s = C_("constr-name", "curve-curve-tangent"); break; + case Type::PERPENDICULAR: s = C_("constr-name", "perpendicular"); break; + case Type::EQUAL_RADIUS: s = C_("constr-name", "eq-radius"); break; + case Type::EQUAL_ANGLE: s = C_("constr-name", "eq-angle"); break; + case Type::EQUAL_LINE_ARC_LEN: s = C_("constr-name", "eq-line-len-arc-len"); break; + case Type::WHERE_DRAGGED: s = C_("constr-name", "lock-where-dragged"); break; + case Type::COMMENT: s = C_("constr-name", "comment"); break; + default: s = "???"; break; } - return ssprintf("c%03x-%s", h.v, s); + return ssprintf("c%03x-%s", h.v, s.c_str()); } #ifndef LIBRARY @@ -156,16 +156,15 @@ void Constraint::MenuConstrain(Command id) { c.type = Type::DIAMETER; c.entityA = gs.entity[0]; } else { - Error( -"Bad selection for distance / diameter constraint. This " -"constraint can apply to:\n\n" -" * two points (distance between points)\n" -" * a line segment (length)\n" -" * two points and a line segment or normal (projected distance)\n" -" * a workplane and a point (minimum distance)\n" -" * a line segment and a point (minimum distance)\n" -" * a plane face and a point (minimum distance)\n" -" * a circle or an arc (diameter)\n"); + Error(_("Bad selection for distance / diameter constraint. This " + "constraint can apply to:\n\n" + " * two points (distance between points)\n" + " * a line segment (length)\n" + " * two points and a line segment or normal (projected distance)\n" + " * a workplane and a point (minimum distance)\n" + " * a line segment and a point (minimum distance)\n" + " * a plane face and a point (minimum distance)\n" + " * a circle or an arc (diameter)\n")); return; } if(c.type == Type::PT_PT_DISTANCE || c.type == Type::PROJ_PT_DISTANCE) { @@ -210,13 +209,13 @@ void Constraint::MenuConstrain(Command id) { c.ptA = gs.point[0]; c.entityA = gs.face[0]; } else { - Error("Bad selection for on point / curve / plane constraint. " - "This constraint can apply to:\n\n" - " * two points (points coincident)\n" - " * a point and a workplane (point in plane)\n" - " * a point and a line segment (point on line)\n" - " * a point and a circle or arc (point on curve)\n" - " * a point and a plane face (point on face)\n"); + Error(_("Bad selection for on point / curve / plane constraint. " + "This constraint can apply to:\n\n" + " * two points (points coincident)\n" + " * a point and a workplane (point in plane)\n" + " * a point and a line segment (point on line)\n" + " * a point and a circle or arc (point on curve)\n" + " * a point and a plane face (point on face)\n")); return; } AddConstraint(&c); @@ -272,22 +271,22 @@ void Constraint::MenuConstrain(Command id) { c.entityB = gs.entity[1]; } } else { - Error("Bad selection for equal length / radius constraint. " - "This constraint can apply to:\n\n" - " * two line segments (equal length)\n" - " * two line segments and two points " - "(equal point-line distances)\n" - " * a line segment and two points " - "(equal point-line distances)\n" - " * a line segment, and a point and line segment " - "(point-line distance equals length)\n" - " * four line segments or normals " - "(equal angle between A,B and C,D)\n" - " * three line segments or normals " - "(equal angle between A,B and B,C)\n" - " * two circles or arcs (equal radius)\n" - " * a line segment and an arc " - "(line segment length equals arc length)\n"); + Error(_("Bad selection for equal length / radius constraint. " + "This constraint can apply to:\n\n" + " * two line segments (equal length)\n" + " * two line segments and two points " + "(equal point-line distances)\n" + " * a line segment and two points " + "(equal point-line distances)\n" + " * a line segment, and a point and line segment " + "(point-line distance equals length)\n" + " * four line segments or normals " + "(equal angle between A,B and C,D)\n" + " * three line segments or normals " + "(equal angle between A,B and B,C)\n" + " * two circles or arcs (equal radius)\n" + " * a line segment and an arc " + "(line segment length equals arc length)\n")); return; } if(c.type == Type::EQUAL_ANGLE) { @@ -311,9 +310,9 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.entity[0]; c.entityB = gs.entity[1]; } else { - Error("Bad selection for length ratio constraint. This " - "constraint can apply to:\n\n" - " * two line segments\n"); + Error(_("Bad selection for length ratio constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n")); return; } @@ -328,9 +327,9 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.entity[0]; c.entityB = gs.entity[1]; } else { - Error("Bad selection for length difference constraint. This " - "constraint can apply to:\n\n" - " * two line segments\n"); + Error(_("Bad selection for length difference constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n")); return; } @@ -354,12 +353,12 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.entity[i]; c.entityB = gs.entity[1-i]; } else { - Error("Bad selection for at midpoint constraint. This " - "constraint can apply to:\n\n" - " * a line segment and a point " - "(point at midpoint)\n" - " * a line segment and a workplane " - "(line's midpoint on plane)\n"); + Error(_("Bad selection for at midpoint constraint. This " + "constraint can apply to:\n\n" + " * a line segment and a point " + "(point at midpoint)\n" + " * a line segment and a workplane " + "(line's midpoint on plane)\n")); return; } AddConstraint(&c); @@ -412,22 +411,22 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.entity[0]; c.type = Type::SYMMETRIC_LINE; } else { - Error("Bad selection for symmetric constraint. This constraint " - "can apply to:\n\n" - " * two points or a line segment " - "(symmetric about workplane's coordinate axis)\n" - " * line segment, and two points or a line segment " - "(symmetric about line segment)\n" - " * workplane, and two points or a line segment " - "(symmetric about workplane)\n"); + Error(_("Bad selection for symmetric constraint. This constraint " + "can apply to:\n\n" + " * two points or a line segment " + "(symmetric about workplane's coordinate axis)\n" + " * line segment, and two points or a line segment " + "(symmetric about line segment)\n" + " * workplane, and two points or a line segment " + "(symmetric about workplane)\n")); return; } if(c.entityA.v == Entity::NO_ENTITY.v) { // Horizontal / vertical symmetry, implicit symmetry plane // normal to the workplane if(c.workplane.v == Entity::FREE_IN_3D.v) { - Error("A workplane must be active when constraining " - "symmetric without an explicit symmetry plane."); + Error(_("A workplane must be active when constraining " + "symmetric without an explicit symmetry plane.")); return; } Vector pa = SK.GetEntity(c.ptA)->PointGetNum(); @@ -456,8 +455,8 @@ void Constraint::MenuConstrain(Command id) { case Command::HORIZONTAL: { hEntity ha, hb; if(c.workplane.v == Entity::FREE_IN_3D.v) { - Error("Activate a workplane (with Sketch -> In Workplane) before " - "applying a horizontal or vertical constraint."); + Error(_("Activate a workplane (with Sketch -> In Workplane) before " + "applying a horizontal or vertical constraint.")); return; } if(gs.lineSegments == 1 && gs.n == 1) { @@ -469,10 +468,10 @@ void Constraint::MenuConstrain(Command id) { ha = c.ptA = gs.point[0]; hb = c.ptB = gs.point[1]; } else { - Error("Bad selection for horizontal / vertical constraint. " - "This constraint can apply to:\n\n" - " * two points\n" - " * a line segment\n"); + Error(_("Bad selection for horizontal / vertical constraint. " + "This constraint can apply to:\n\n" + " * two points\n" + " * a line segment\n")); return; } if(id == Command::HORIZONTAL) { @@ -490,9 +489,9 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.anyNormal[0]; c.entityB = gs.anyNormal[1]; } else { - Error("Bad selection for same orientation constraint. This " - "constraint can apply to:\n\n" - " * two normals\n"); + Error(_("Bad selection for same orientation constraint. This " + "constraint can apply to:\n\n" + " * two normals\n")); return; } SS.UndoRemember(); @@ -542,7 +541,7 @@ void Constraint::MenuConstrain(Command id) { break; } } - Error("Must select an angle constraint."); + Error(_("Must select an angle constraint.")); return; case Command::REFERENCE: @@ -554,7 +553,7 @@ void Constraint::MenuConstrain(Command id) { break; } } - Error("Must select a constraint with associated label."); + Error(_("Must select a constraint with associated label.")); return; case Command::ANGLE: @@ -565,11 +564,11 @@ void Constraint::MenuConstrain(Command id) { c.entityB = gs.vector[1]; c.valA = 0; } else { - Error("Bad selection for angle constraint. This constraint " - "can apply to:\n\n" - " * two line segments\n" - " * a line segment and a normal\n" - " * two normals\n"); + Error(_("Bad selection for angle constraint. This constraint " + "can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n")); return; } @@ -622,9 +621,9 @@ void Constraint::MenuConstrain(Command id) { } else if(l0.Equals(a2) || l1.Equals(a2)) { c.other = true; } else { - Error("The tangent arc and line segment must share an " - "endpoint. Constrain them with Constrain -> " - "On Point before constraining tangent."); + Error(_("The tangent arc and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent.")); return; } c.type = Type::ARC_LINE_TANGENT; @@ -646,9 +645,9 @@ void Constraint::MenuConstrain(Command id) { } else if(l0.Equals(af) || l1.Equals(af)) { c.other = true; } else { - Error("The tangent cubic and line segment must share an " - "endpoint. Constrain them with Constrain -> " - "On Point before constraining tangent."); + Error(_("The tangent cubic and line segment must share an " + "endpoint. Constrain them with Constrain -> " + "On Point before constraining tangent.")); return; } c.type = Type::CUBIC_LINE_TANGENT; @@ -656,7 +655,7 @@ void Constraint::MenuConstrain(Command id) { c.entityB = line->h; } else if(gs.cubics + gs.arcs == 2 && gs.n == 2) { if(!SS.GW.LockedInWorkplane()) { - Error("Curve-curve tangency must apply in workplane."); + Error(_("Curve-curve tangency must apply in workplane.")); return; } Entity *eA = SK.GetEntity(gs.entity[0]), @@ -674,22 +673,22 @@ void Constraint::MenuConstrain(Command id) { } else if(af.Equals(bf)) { c.other = true; c.other2 = true; } else { - Error("The curves must share an endpoint. Constrain them " - "with Constrain -> On Point before constraining " - "tangent."); + Error(_("The curves must share an endpoint. Constrain them " + "with Constrain -> On Point before constraining " + "tangent.")); return; } c.type = Type::CURVE_CURVE_TANGENT; c.entityA = eA->h; c.entityB = eB->h; } else { - Error("Bad selection for parallel / tangent constraint. This " - "constraint can apply to:\n\n" - " * two line segments (parallel)\n" - " * a line segment and a normal (parallel)\n" - " * two normals (parallel)\n" - " * two line segments, arcs, or beziers, that share " - "an endpoint (tangent)\n"); + Error(_("Bad selection for parallel / tangent constraint. This " + "constraint can apply to:\n\n" + " * two line segments (parallel)\n" + " * a line segment and a normal (parallel)\n" + " * two normals (parallel)\n" + " * two line segments, arcs, or beziers, that share " + "an endpoint (tangent)\n")); return; } AddConstraint(&c); @@ -701,11 +700,11 @@ void Constraint::MenuConstrain(Command id) { c.entityA = gs.vector[0]; c.entityB = gs.vector[1]; } else { - Error("Bad selection for perpendicular constraint. This " - "constraint can apply to:\n\n" - " * two line segments\n" - " * a line segment and a normal\n" - " * two normals\n"); + Error(_("Bad selection for perpendicular constraint. This " + "constraint can apply to:\n\n" + " * two line segments\n" + " * a line segment and a normal\n" + " * two normals\n")); return; } AddConstraint(&c); @@ -716,9 +715,9 @@ void Constraint::MenuConstrain(Command id) { c.type = Type::WHERE_DRAGGED; c.ptA = gs.point[0]; } else { - Error("Bad selection for lock point where dragged constraint. " - "This constraint can apply to:\n\n" - " * a point\n"); + Error(_("Bad selection for lock point where dragged constraint. " + "This constraint can apply to:\n\n" + " * a point\n")); return; } AddConstraint(&c); @@ -727,7 +726,7 @@ void Constraint::MenuConstrain(Command id) { case Command::COMMENT: SS.GW.pending.operation = GraphicsWindow::Pending::COMMAND; SS.GW.pending.command = Command::COMMENT; - SS.GW.pending.description = "click center of comment text"; + SS.GW.pending.description = _("click center of comment text"); SS.ScheduleShowTW(); break; diff --git a/src/export.cpp b/src/export.cpp index 12da831a..50f017cd 100644 --- a/src/export.cpp +++ b/src/export.cpp @@ -15,8 +15,8 @@ void SolveSpaceUI::ExportSectionTo(const std::string &filename) { Group *g = SK.GetGroup(SS.GW.activeGroup); g->GenerateDisplayItems(); if(g->displayMesh.IsEmpty()) { - Error("No solid model present; draw one with extrudes and revolves, " - "or use Export 2d View to export bare lines and curves."); + Error(_("No solid model present; draw one with extrudes and revolves, " + "or use Export 2d View to export bare lines and curves.")); return; } @@ -57,12 +57,12 @@ void SolveSpaceUI::ExportSectionTo(const std::string &filename) { u = ut.WithMagnitude(1); v = (n.Cross(u)).WithMagnitude(1); } else { - Error("Bad selection for export section. Please select:\n\n" - " * nothing, with an active workplane " - "(workplane is section plane)\n" - " * a face (section plane through face)\n" - " * a point and two line segments " - "(plane through point and parallel to lines)\n"); + Error(_("Bad selection for export section. Please select:\n\n" + " * nothing, with an active workplane " + "(workplane is section plane)\n" + " * a face (section plane through face)\n" + " * a point and two line segments " + "(plane through point and parallel to lines)\n")); return; } SS.GW.ClearSelection(); @@ -802,7 +802,7 @@ void SolveSpaceUI::ExportMeshTo(const std::string &filename) { SMesh *m = &(SK.GetGroup(SS.GW.activeGroup)->displayMesh); if(m->IsEmpty()) { - Error("Active group mesh is empty; nothing to export."); + Error(_("Active group mesh is empty; nothing to export.")); return; } diff --git a/src/exportvector.cpp b/src/exportvector.cpp index 40e9fb17..aa8fed13 100644 --- a/src/exportvector.cpp +++ b/src/exportvector.cpp @@ -327,9 +327,9 @@ public: entity->setWidthMm(Style::WidthMm(hs.v)); if(s->stippleType == StipplePattern::FREEHAND) { - messages.insert("freehand lines were replaced with continuous lines"); + messages.insert(_("freehand lines were replaced with continuous lines")); } else if(s->stippleType == StipplePattern::ZIGZAG) { - messages.insert("zigzag lines were replaced with continuous lines"); + messages.insert(_("zigzag lines were replaced with continuous lines")); } } @@ -580,8 +580,8 @@ void DxfFileWriter::FinishAndCloseFile() { } if(!interface.messages.empty()) { - std::string text = "Some aspects of the drawing have no DXF equivalent and " - "were not exported:\n"; + std::string text = _("Some aspects of the drawing have no DXF equivalent and " + "were not exported:\n"); for(const std::string &message : interface.messages) { text += " * " + message + "\n"; } @@ -797,8 +797,8 @@ void PdfFileWriter::StartFile() { if((ptMax.x - ptMin.x) > 200*25.4 || (ptMax.y - ptMin.y) > 200*25.4) { - Message("PDF page size exceeds 200 by 200 inches; many viewers may " - "reject this file."); + Message(_("PDF page size exceeds 200 by 200 inches; many viewers may " + "reject this file.")); } fprintf(f, diff --git a/src/file.cpp b/src/file.cpp index 09acbbe4..45c233f8 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -40,7 +40,7 @@ hGroup SolveSpaceUI::CreateDefaultDrawingGroup() { // And an empty group, for the first stuff the user draws. g.visible = true; - g.name = "sketch-in-plane"; + g.name = C_("group-name", "sketch-in-plane"); g.type = Group::Type::DRAWING_WORKPLANE; g.subtype = Group::Subtype::WORKPLANE_BY_POINT_ORTHO; g.order = 1; @@ -58,7 +58,7 @@ void SolveSpaceUI::NewFile() { // Our initial group, that contains the references. Group g = {}; g.visible = true; - g.name = "#references"; + g.name = C_("group-name", "#references"); g.type = Group::Type::DRAWING_3D; g.order = 0; g.h = Group::HGROUP_REFERENCES; @@ -505,8 +505,8 @@ bool SolveSpaceUI::LoadFromFile(const std::string &filename, bool canCancel) { fclose(fh); if(fileLoadError) { - Error("Unrecognized data in file. This file may be corrupt, or " - "from a new version of the program."); + Error(_("Unrecognized data in file. This file may be corrupt, or " + "from a newer version of the program.")); // At least leave the program in a non-crashing state. if(SK.group.n == 0) { NewFile(); diff --git a/src/graphicswin.cpp b/src/graphicswin.cpp index bee0518c..526c3283 100644 --- a/src/graphicswin.cpp +++ b/src/graphicswin.cpp @@ -489,8 +489,7 @@ void GraphicsWindow::MenuView(Command id) { case Command::SHOW_GRID: SS.GW.showSnapGrid = !SS.GW.showSnapGrid; if(SS.GW.showSnapGrid && !SS.GW.LockedInWorkplane()) { - Message("No workplane is active, so the grid will not " - "appear."); + Message(_("No workplane is active, so the grid will not appear.")); } SS.GW.EnsureValidActives(); InvalidateGraphics(); @@ -499,11 +498,11 @@ void GraphicsWindow::MenuView(Command id) { case Command::PERSPECTIVE_PROJ: SS.usePerspectiveProj = !SS.usePerspectiveProj; if(SS.cameraTangent < 1e-6) { - Error("The perspective factor is set to zero, so the view will " - "always be a parallel projection.\n\n" - "For a perspective projection, modify the perspective " - "factor in the configuration screen. A value around 0.3 " - "is typical."); + Error(_("The perspective factor is set to zero, so the view will " + "always be a parallel projection.\n\n" + "For a perspective projection, modify the perspective " + "factor in the configuration screen. A value around 0.3 " + "is typical.")); } SS.GW.EnsureValidActives(); InvalidateGraphics(); @@ -580,8 +579,8 @@ void GraphicsWindow::MenuView(Command id) { SS.GW.AnimateOnto(quat0, pt.ScaledBy(-1)); SS.GW.ClearSelection(); } else { - Error("Select a point; this point will become the center " - "of the view on screen."); + Error(_("Select a point; this point will become the center " + "of the view on screen.")); } break; @@ -862,8 +861,7 @@ void GraphicsWindow::MenuEdit(Command id) { } } while(didSomething); if(newlySelected == 0) { - Error("No additional entities share endpoints with the " - "selected entities."); + Error(_("No additional entities share endpoints with the selected entities.")); } InvalidateGraphics(); SS.ScheduleShowTW(); @@ -883,9 +881,9 @@ void GraphicsWindow::MenuEdit(Command id) { hGroup hg = e ? e->group : SS.GW.activeGroup; Group *g = SK.GetGroup(hg); if(g->type != Group::Type::LINKED) { - Error("To use this command, select a point or other " - "entity from an linked part, or make a link " - "group the active group."); + Error(_("To use this command, select a point or other " + "entity from an linked part, or make a link " + "group the active group.")); break; } @@ -907,16 +905,16 @@ void GraphicsWindow::MenuEdit(Command id) { case Command::SNAP_TO_GRID: { if(!SS.GW.LockedInWorkplane()) { - Error("No workplane is active. Activate a workplane " - "(with Sketch -> In Workplane) to define the plane " - "for the snap grid."); + Error(_("No workplane is active. Activate a workplane " + "(with Sketch -> In Workplane) to define the plane " + "for the snap grid.")); break; } SS.GW.GroupSelection(); if(SS.GW.gs.points == 0 && SS.GW.gs.constraintLabels == 0) { - Error("Can't snap these items to grid; select points, " - "text comments, or constraints with a label. " - "To snap a line, select its endpoints."); + Error(_("Can't snap these items to grid; select points, " + "text comments, or constraints with a label. " + "To snap a line, select its endpoints.")); break; } SS.UndoRemember(); @@ -979,15 +977,15 @@ void GraphicsWindow::MenuRequest(Command id) { } else if(g->type == Group::Type::DRAWING_WORKPLANE) { // The group's default workplane g->activeWorkplane = g->h.entity(0); - Message("No workplane selected. Activating default workplane " - "for this group."); + Message(_("No workplane selected. Activating default workplane " + "for this group.")); } if(!SS.GW.LockedInWorkplane()) { - Error("No workplane is selected, and the active group does " - "not have a default workplane. Try selecting a " - "workplane, or activating a sketch-in-new-workplane " - "group."); + Error(_("No workplane is selected, and the active group does " + "not have a default workplane. Try selecting a " + "workplane, or activating a sketch-in-new-workplane " + "group.")); break; } // Align the view with the selected workplane @@ -1008,9 +1006,9 @@ void GraphicsWindow::MenuRequest(Command id) { if(SS.GW.gs.n == 1 && SS.GW.gs.points == 1) { SS.GW.MakeTangentArc(); } else if(SS.GW.gs.n != 0) { - Error("Bad selection for tangent arc at point. Select a " - "single point, or select nothing to set up arc " - "parameters."); + Error(_("Bad selection for tangent arc at point. Select a " + "single point, or select nothing to set up arc " + "parameters.")); } else { SS.TW.GoToScreen(TextWindow::Screen::TANGENT_ARC); SS.GW.ForceTextWindowShown(); @@ -1019,15 +1017,16 @@ void GraphicsWindow::MenuRequest(Command id) { } break; - case Command::ARC: s = "click point on arc (draws anti-clockwise)"; goto c; - case Command::DATUM_POINT: s = "click to place datum point"; goto c; - case Command::LINE_SEGMENT: s = "click first point of line segment"; goto c; - case Command::CONSTR_SEGMENT: s = "click first point of construction line segment"; goto c; - case Command::CUBIC: s = "click first point of cubic segment"; goto c; - case Command::CIRCLE: s = "click center of circle"; goto c; - case Command::WORKPLANE: s = "click origin of workplane"; goto c; - case Command::RECTANGLE: s = "click one corner of rectangle"; goto c; - case Command::TTF_TEXT: s = "click top left of text"; goto c; + case Command::ARC: s = _("click point on arc (draws anti-clockwise)"); goto c; + case Command::DATUM_POINT: s = _("click to place datum point"); goto c; + case Command::LINE_SEGMENT: s = _("click first point of line segment"); goto c; + case Command::CONSTR_SEGMENT: + s = _("click first point of construction line segment"); goto c; + case Command::CUBIC: s = _("click first point of cubic segment"); goto c; + case Command::CIRCLE: s = _("click center of circle"); goto c; + case Command::WORKPLANE: s = _("click origin of workplane"); goto c; + case Command::RECTANGLE: s = _("click one corner of rectangle"); goto c; + case Command::TTF_TEXT: s = _("click top left of text"); goto c; c: SS.GW.pending.operation = GraphicsWindow::Pending::COMMAND; SS.GW.pending.command = id; @@ -1040,8 +1039,8 @@ c: SS.UndoRemember(); SS.GW.GroupSelection(); if(SS.GW.gs.entities == 0) { - Error("No entities are selected. Select entities before " - "trying to toggle their construction state."); + Error(_("No entities are selected. Select entities before " + "trying to toggle their construction state.")); } int i; for(i = 0; i < SS.GW.gs.entities; i++) { diff --git a/src/group.cpp b/src/group.cpp index 054ea399..2a04d686 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -86,12 +86,12 @@ void Group::MenuGroup(Command id) { switch(id) { case Command::GROUP_3D: g.type = Type::DRAWING_3D; - g.name = "sketch-in-3d"; + g.name = C_("group-name", "sketch-in-3d"); break; case Command::GROUP_WRKPL: g.type = Type::DRAWING_WORKPLANE; - g.name = "sketch-in-plane"; + g.name = C_("group-name", "sketch-in-plane"); if(gs.points == 1 && gs.n == 1) { g.subtype = Subtype::WORKPLANE_BY_POINT_ORTHO; @@ -142,28 +142,28 @@ void Group::MenuGroup(Command id) { } else ssassert(false, "Unexpected workplane subtype"); } } else { - Error("Bad selection for new sketch in workplane. This " - "group can be created with:\n\n" - " * a point (through the point, orthogonal to coordinate axes)\n" - " * a point and two line segments (through the point, " - "parallel to the lines)\n" - " * a workplane (copy of the workplane)\n"); + Error(_("Bad selection for new sketch in workplane. This " + "group can be created with:\n\n" + " * a point (through the point, orthogonal to coordinate axes)\n" + " * a point and two line segments (through the point, " + "parallel to the lines)\n" + " * a workplane (copy of the workplane)\n")); return; } break; case Command::GROUP_EXTRUDE: if(!SS.GW.LockedInWorkplane()) { - Error("Activate a workplane (Sketch -> In Workplane) before " - "extruding. The sketch will be extruded normal to the " - "workplane."); + Error(_("Activate a workplane (Sketch -> In Workplane) before " + "extruding. The sketch will be extruded normal to the " + "workplane.")); return; } g.type = Type::EXTRUDE; g.opA = SS.GW.activeGroup; g.predef.entityB = SS.GW.ActiveWorkplane(); g.subtype = Subtype::ONE_SIDED; - g.name = "extrude"; + g.name = C_("group-name", "extrude"); break; case Command::GROUP_LATHE: @@ -175,17 +175,17 @@ void Group::MenuGroup(Command id) { g.predef.entityB = gs.entity[0]; // since a line segment is a vector } else { - Error("Bad selection for new lathe group. This group can " - "be created with:\n\n" - " * a point and a line segment or normal " - "(revolved about an axis parallel to line / " - "normal, through point)\n" - " * a line segment (revolved about line segment)\n"); + Error(_("Bad selection for new lathe group. This group can " + "be created with:\n\n" + " * a point and a line segment or normal " + "(revolved about an axis parallel to line / " + "normal, through point)\n" + " * a line segment (revolved about line segment)\n")); return; } g.type = Type::LATHE; g.opA = SS.GW.activeGroup; - g.name = "lathe"; + g.name = C_("group-name", "lathe"); break; case Command::GROUP_ROT: { @@ -198,20 +198,20 @@ void Group::MenuGroup(Command id) { g.predef.origin = gs.point[0]; g.predef.entityB = gs.vector[0]; } else { - Error("Bad selection for new rotation. This group can " - "be created with:\n\n" - " * a point, while locked in workplane (rotate " - "in plane, about that point)\n" - " * a point and a line or a normal (rotate about " - "an axis through the point, and parallel to " - "line / normal)\n"); + Error(_("Bad selection for new rotation. This group can " + "be created with:\n\n" + " * a point, while locked in workplane (rotate " + "in plane, about that point)\n" + " * a point and a line or a normal (rotate about " + "an axis through the point, and parallel to " + "line / normal)\n")); return; } g.type = Type::ROTATE; g.opA = SS.GW.activeGroup; g.valA = 3; g.subtype = Subtype::ONE_SIDED; - g.name = "rotate"; + g.name = C_("group-name", "rotate"); break; } @@ -222,7 +222,7 @@ void Group::MenuGroup(Command id) { g.subtype = Subtype::ONE_SIDED; g.predef.entityB = SS.GW.ActiveWorkplane(); g.activeWorkplane = SS.GW.ActiveWorkplane(); - g.name = "translate"; + g.name = C_("group-name", "translate"); break; case Command::GROUP_LINK: { @@ -254,7 +254,7 @@ void Group::MenuGroup(Command id) { if(groupName.length() > 0) { g.name = groupName; } else { - g.name = "link"; + g.name = C_("group-name", "link"); } g.meshCombine = CombineAs::ASSEMBLE; @@ -336,7 +336,7 @@ void Group::TransformImportedBy(Vector t, Quaternion q) { std::string Group::DescriptionString() { if(name.empty()) { - return ssprintf("g%03x-(unnamed)", h.v); + return ssprintf("g%03x-%s", h.v, _("(unnamed)")); } else { return ssprintf("g%03x-%s", h.v, name.c_str()); } diff --git a/src/groupmesh.cpp b/src/groupmesh.cpp index 6d1b2a7a..addac645 100644 --- a/src/groupmesh.cpp +++ b/src/groupmesh.cpp @@ -604,7 +604,8 @@ void Group::DrawPolyError(Canvas *canvas) { // Report this error only in sketch-in-workplane groups; otherwise // it's just a nuisance. if(type == Type::DRAWING_WORKPLANE) { - canvas->DrawVectorText("not closed contour, or not all same style!", textHeight, + canvas->DrawVectorText(_("not closed contour, or not all same style!"), + textHeight, polyError.notClosedAt.b, camera.projRight, camera.projUp, hcsError); canvas->DrawLine(polyError.notClosedAt.a, polyError.notClosedAt.b, hcsUnclosed); @@ -616,11 +617,11 @@ void Group::DrawPolyError(Canvas *canvas) { if(type == Type::DRAWING_WORKPLANE) { const char *msg; if(polyError.how == PolyError::NOT_COPLANAR) { - msg = "points not all coplanar!"; + msg = _("points not all coplanar!"); } else if(polyError.how == PolyError::SELF_INTERSECTING) { - msg = "contour is self-intersecting!"; + msg = _("contour is self-intersecting!"); } else { - msg = "zero-length edge!"; + msg = _("zero-length edge!"); } canvas->DrawVectorText(msg, textHeight, polyError.errorPointAt, camera.projRight, camera.projUp, diff --git a/src/modify.cpp b/src/modify.cpp index 0165b8b0..9869cb9b 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -234,8 +234,7 @@ void GraphicsWindow::ParametricCurve::ConstrainPointIfCoincident(hEntity hpt) { //----------------------------------------------------------------------------- void GraphicsWindow::MakeTangentArc() { if(!LockedInWorkplane()) { - Error("Must be sketching in workplane to create tangent " - "arc."); + Error(_("Must be sketching in workplane to create tangent arc.")); return; } @@ -282,9 +281,9 @@ void GraphicsWindow::MakeTangentArc() { } } if(c != 2) { - Error("To create a tangent arc, select a point where two " - "non-construction lines or circles in this group and " - "workplane join."); + Error(_("To create a tangent arc, select a point where two " + "non-construction lines or circles in this group and " + "workplane join.")); return; } @@ -369,9 +368,9 @@ void GraphicsWindow::MakeTangentArc() { t[0] > 0.99 || t[1] > 0.99 || isnan(t[0]) || isnan(t[1])) { - Error("Couldn't round this corner. Try a smaller radius, or try " - "creating the desired geometry by hand with tangency " - "constraints."); + Error(_("Couldn't round this corner. Try a smaller radius, or try " + "creating the desired geometry by hand with tangency " + "constraints.")); return; } @@ -573,7 +572,7 @@ hEntity GraphicsWindow::SplitEntity(hEntity he, Vector pinter) { } else if(e->type == Entity::Type::CUBIC || e->type == Entity::Type::CUBIC_PERIODIC) { ret = SplitCubic(he, pinter); } else { - Error("Couldn't split this entity; lines, circles, or cubics only."); + Error(_("Couldn't split this entity; lines, circles, or cubics only.")); return Entity::NO_ENTITY; } @@ -599,7 +598,7 @@ hEntity GraphicsWindow::SplitEntity(hEntity he, Vector pinter) { void GraphicsWindow::SplitLinesOrCurves() { if(!LockedInWorkplane()) { - Error("Must be sketching in workplane to split."); + Error(_("Must be sketching in workplane to split.")); return; } @@ -609,8 +608,8 @@ void GraphicsWindow::SplitLinesOrCurves() { gs.cubics + gs.periodicCubics) == 2)) { - Error("Select two entities that intersect each other (e.g. two lines " - "or two circles or a circle and a line)."); + Error(_("Select two entities that intersect each other (e.g. two lines " + "or two circles or a circle and a line).")); return; } @@ -653,7 +652,7 @@ void GraphicsWindow::SplitLinesOrCurves() { Constraint::ConstrainCoincident(hia, hib); } } else { - Error("Can't split; no intersection found."); + Error(_("Can't split; no intersection found.")); } // All done, clean up and regenerate. diff --git a/src/mouse.cpp b/src/mouse.cpp index f5c13698..2fcd6eea 100644 --- a/src/mouse.cpp +++ b/src/mouse.cpp @@ -775,7 +775,7 @@ void GraphicsWindow::MouseRightUp(double x, double y) { SS.MarkGroupDirtyByEntity(gs.entity[0]); ClearSelection(); } else { - Error("Cannot add spline point: maximum number of points reached."); + Error(_("Cannot add spline point: maximum number of points reached.")); } break; } @@ -945,14 +945,14 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_LINE_POINT; pending.request = hr; pending.point = hr.entity(2); - pending.description = "click next point of line, or press Esc"; + pending.description = _("click next point of line, or press Esc"); SK.GetEntity(pending.point)->PointForceTo(v); break; case Command::RECTANGLE: { if(!SS.GW.LockedInWorkplane()) { - Error("Can't draw rectangle in 3d; first, activate a workplane " - "with Sketch -> In Workplane."); + Error(_("Can't draw rectangle in 3d; first, activate a workplane " + "with Sketch -> In Workplane.")); ClearSuper(); break; } @@ -978,7 +978,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_POINT; pending.point = lns[1].entity(2); - pending.description = "click to place other corner of rectangle"; + pending.description = _("click to place other corner of rectangle"); hr = lns[0]; break; } @@ -998,13 +998,13 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_RADIUS; pending.circle = hr.entity(0); - pending.description = "click to set radius"; + pending.description = _("click to set radius"); break; case Command::ARC: { if(!SS.GW.LockedInWorkplane()) { - Error("Can't draw arc in 3d; first, activate a workplane " - "with Sketch -> In Workplane."); + Error(_("Can't draw arc in 3d; first, activate a workplane " + "with Sketch -> In Workplane.")); ClearPending(); break; } @@ -1021,7 +1021,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_ARC_POINT; pending.point = hr.entity(3); - pending.description = "click to place point"; + pending.description = _("click to place point"); break; } case Command::CUBIC: @@ -1036,13 +1036,13 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_CUBIC_POINT; pending.point = hr.entity(4); - pending.description = "click next point of cubic, or press Esc"; + pending.description = _("click next point of cubic, or press Esc"); break; case Command::WORKPLANE: if(LockedInWorkplane()) { - Error("Sketching in a workplane already; sketch in 3d before " - "creating new workplane."); + Error(_("Sketching in a workplane already; sketch in 3d before " + "creating new workplane.")); ClearSuper(); break; } @@ -1057,8 +1057,8 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { case Command::TTF_TEXT: { if(!SS.GW.LockedInWorkplane()) { - Error("Can't draw text in 3d; first, activate a workplane " - "with Sketch -> In Workplane."); + Error(_("Can't draw text in 3d; first, activate a workplane " + "with Sketch -> In Workplane.")); ClearSuper(); break; } @@ -1072,7 +1072,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_POINT; pending.point = hr.entity(2); - pending.description = "click to place bottom left of text"; + pending.description = _("click to place bottom left of text"); break; } @@ -1083,7 +1083,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { c.workplane = SS.GW.ActiveWorkplane(); c.type = Constraint::Type::COMMENT; c.disp.offset = v; - c.comment = "NEW COMMENT -- DOUBLE-CLICK TO EDIT"; + c.comment = _("NEW COMMENT -- DOUBLE-CLICK TO EDIT"); hc = Constraint::AddConstraint(&c); break; } @@ -1196,7 +1196,7 @@ void GraphicsWindow::MouseLeftDown(double mx, double my) { pending.operation = Pending::DRAGGING_NEW_LINE_POINT; pending.request = hr; pending.point = hr.entity(2); - pending.description = "click next point of line, or press Esc"; + pending.description = _("click next point of line, or press Esc"); break; } diff --git a/src/resource.cpp b/src/resource.cpp index 761ed70f..5b5a759a 100644 --- a/src/resource.cpp +++ b/src/resource.cpp @@ -1254,6 +1254,25 @@ unsigned PluralExpr::Eval(const std::string &s, unsigned n) { return t.value; } +//----------------------------------------------------------------------------- +// Gettext message keys +//----------------------------------------------------------------------------- + +class TranslationKey { +public: + bool hasContext; + std::string context; + std::string ident; +}; + +struct TranslationKeyLess { + bool operator()(const TranslationKey &a, const TranslationKey &b) const { + return a.hasContext < b.hasContext || + (a.hasContext == b.hasContext && a.context < b.context) || + (a.hasContext == b.hasContext && a.context == b.context && a.ident < b.ident); + } +}; + //----------------------------------------------------------------------------- // Gettext .po file parsing //----------------------------------------------------------------------------- @@ -1265,7 +1284,7 @@ public: unsigned pluralCount; std::string pluralExpr; - std::map> messages; + std::map, TranslationKeyLess> messages; void SkipSpace(); std::string ReadString(); @@ -1342,11 +1361,18 @@ void GettextParser::Parse() { SkipSpace(); while(!reader.AtEnd()) { + TranslationKey key = {}; + + if(reader.TryString("msgctxt")) { + key.hasContext = true; + key.context = ReadString(); + } + reader.ExpectString("msgid"); - std::string msgid = ReadString(); + key.ident = ReadString(); + if(reader.TryString("msgid_plural")) { - std::string _msgid_plural = ReadString(); - // We don't need it. + ReadString(); // we don't need it } std::vector msgstrs; @@ -1364,7 +1390,7 @@ void GettextParser::Parse() { } } - if(msgid == "") { + if(key.ident == "") { ssassert(msgstrs.size() == 1, "Expected exactly one header msgstr"); ParseHeader(msgstrs[0]); @@ -1372,7 +1398,7 @@ void GettextParser::Parse() { ssassert(msgstrs.size() == 1 || msgstrs.size() == pluralCount, "Expected msgstr count to match plural form count"); - messages.emplace(msgid, msgstrs); + messages.emplace(key, msgstrs); } } } @@ -1386,12 +1412,12 @@ public: unsigned pluralCount; std::string pluralExpr; - std::map> messages; + std::map, TranslationKeyLess> messages; static Translation From(const std::string &poData); - const std::string &Translate(const char *msgid); - const std::string &TranslatePlural(const char *msgid, unsigned n); + const std::string &Translate(const TranslationKey &key); + const std::string &TranslatePlural(const TranslationKey &key, unsigned n); }; Translation Translation::From(const std::string &poData) { @@ -1406,28 +1432,28 @@ Translation Translation::From(const std::string &poData) { return trans; } -const std::string &Translation::Translate(const char *msgid) { - auto it = messages.find(msgid); +const std::string &Translation::Translate(const TranslationKey &key) { + auto it = messages.find(key); if(it == messages.end()) { - dbp("Missing translation for '%s'", msgid); - messages[msgid].emplace_back(msgid); - it = messages.find(msgid); + dbp("Missing translation for %s'%s'", key.context.c_str(), key.ident.c_str()); + messages[key].emplace_back(key.ident); + it = messages.find(key); } if(it->second.size() != 1) { - dbp("Incorrect use of translated message '%s'", msgid); + dbp("Incorrect use of translated message %s'%s'", key.context.c_str(), key.ident.c_str()); ssassert(false, "Using a message with a plural form without a number"); } return it->second[0]; } -const std::string &Translation::TranslatePlural(const char *msgid, unsigned n) { - auto it = messages.find(msgid); +const std::string &Translation::TranslatePlural(const TranslationKey &key, unsigned n) { + auto it = messages.find(key); if(it == messages.end()) { - dbp("Missing translation for '%s'", msgid); + dbp("Missing translation for %s'%s'", key.context.c_str(), key.ident.c_str()); for(unsigned i = 0; i < pluralCount; i++) { - messages[msgid].emplace_back(msgid); + messages[key].emplace_back(key.ident); } - it = messages.find(msgid); + it = messages.find(key); } unsigned pluralForm = PluralExpr::Eval(pluralExpr, n); return it->second[pluralForm]; @@ -1501,11 +1527,31 @@ bool SetLocale(uint16_t lcid) { } const std::string &Translate(const char *msgid) { - return currentTranslation->Translate(msgid); + TranslationKey key = {}; + key.ident = msgid; + return currentTranslation->Translate(key); +} + +const std::string &Translate(const char *msgctxt, const char *msgid) { + TranslationKey key = {}; + key.hasContext = true; + key.context = msgctxt; + key.ident = msgid; + return currentTranslation->Translate(key); } const std::string &TranslatePlural(const char *msgid, unsigned n) { - return currentTranslation->TranslatePlural(msgid, n); + TranslationKey key = {}; + key.ident = msgid; + return currentTranslation->TranslatePlural(key, n); +} + +const std::string &TranslatePlural(const char *msgctxt, const char *msgid, unsigned n) { + TranslationKey key = {}; + key.hasContext = true; + key.context = msgctxt; + key.ident = msgid; + return currentTranslation->TranslatePlural(key, n); } } diff --git a/src/solvespace.cpp b/src/solvespace.cpp index 4262777d..217f5ff3 100644 --- a/src/solvespace.cpp +++ b/src/solvespace.cpp @@ -476,10 +476,10 @@ void SolveSpaceUI::MenuFile(Command id) { (FilenameHasExtension(exportFile, ".txt") || fabs(SS.exportOffset) > LENGTH_EPS)) { - Message("Constraints are currently shown, and will be exported " - "in the toolpath. This is probably not what you want; " - "hide them by clicking the link at the top of the " - "text window."); + Message(_("Constraints are currently shown, and will be exported " + "in the toolpath. This is probably not what you want; " + "hide them by clicking the link at the top of the " + "text window.")); } SS.ExportViewOrWireframeTo(exportFile, /*exportWireframe*/false); @@ -583,11 +583,11 @@ void SolveSpaceUI::MenuAnalyze(Command id) { SS.ScheduleShowTW(); SS.GW.ClearSelection(); } else { - Error("Constraint must have a label, and must not be " - "a reference dimension."); + Error(_("Constraint must have a label, and must not be " + "a reference dimension.")); } } else { - Error("Bad selection for step dimension; select a constraint."); + Error(_("Bad selection for step dimension; select a constraint.")); } break; @@ -611,7 +611,7 @@ void SolveSpaceUI::MenuAnalyze(Command id) { Error("%d edges interfere with other triangles, bad.", SS.nakedEdges.l.n); } else { - Message("The assembly does not interfere, good."); + Message(_("The assembly does not interfere, good.")); } break; } @@ -688,9 +688,9 @@ void SolveSpaceUI::MenuAnalyze(Command id) { case Command::AREA: { Group *g = SK.GetGroup(SS.GW.activeGroup); if(g->polyError.how != PolyError::GOOD) { - Error("This group does not contain a correctly-formed " - "2d closed area. It is open, not coplanar, or self-" - "intersecting."); + Error(_("This group does not contain a correctly-formed " + "2d closed area. It is open, not coplanar, or self-" + "intersecting.")); break; } SEdgeList sel = {}; @@ -731,7 +731,7 @@ void SolveSpaceUI::MenuAnalyze(Command id) { perimeter / scale, SS.UnitName()); } else { - Error("Bad selection for perimeter; select line segments, arcs, and curves."); + Error(_("Bad selection for perimeter; select line segments, arcs, and curves.")); } break; } @@ -747,7 +747,7 @@ void SolveSpaceUI::MenuAnalyze(Command id) { SS.traced.point = gs.point[0]; SS.GW.ClearSelection(); } else { - Error("Bad selection for trace; select a single point."); + Error(_("Bad selection for trace; select a single point.")); } break; diff --git a/src/style.cpp b/src/style.cpp index d1a5e007..06534729 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -158,8 +158,8 @@ void Style::AssignSelectionToStyle(uint32_t v) { } if(showError) { - Error("Can't assign style to an entity that's derived from another " - "entity; try assigning a style to this entity's parent."); + Error(_("Can't assign style to an entity that's derived from another " + "entity; try assigning a style to this entity's parent.")); } SS.GW.ClearSelection(); @@ -695,13 +695,13 @@ bool TextWindow::EditControlDoneForStyles(const char *str) { SS.backgroundColor = RGBf(rgb.x, rgb.y, rgb.z); } } else { - Error("Bad format: specify color as r, g, b"); + Error(_("Bad format: specify color as r, g, b")); } break; } case Edit::STYLE_NAME: if(!*str) { - Error("Style name cannot be empty"); + Error(_("Style name cannot be empty")); } else { SS.UndoRemember(); s = Style::Get(edit.style); @@ -714,7 +714,7 @@ bool TextWindow::EditControlDoneForStyles(const char *str) { if(e) { double ev = e->Eval(); if(ev < 0.001 || isnan(ev)) { - Error("Scale must not be zero or negative!"); + Error(_("Scale must not be zero or negative!")); } else { SS.bgImage.scale = ev / SS.MmPerUnit(); } diff --git a/src/textscreens.cpp b/src/textscreens.cpp index 7a06109a..3ef6a73e 100644 --- a/src/textscreens.cpp +++ b/src/textscreens.cpp @@ -654,11 +654,11 @@ void TextWindow::EditControlDone(const char *s) { double ev = e->Eval(); if((int)ev < 1) { - Error("Can't repeat fewer than 1 time."); + Error(_("Can't repeat fewer than 1 time.")); break; } if((int)ev > 999) { - Error("Can't repeat more than 999 times."); + Error(_("Can't repeat more than 999 times.")); break; } @@ -687,7 +687,7 @@ void TextWindow::EditControlDone(const char *s) { } case Edit::GROUP_NAME: { if(!*s) { - Error("Group name cannot be empty"); + Error(_("Group name cannot be empty")); } else { SS.UndoRemember(); @@ -701,7 +701,7 @@ void TextWindow::EditControlDone(const char *s) { if(e) { double ev = e->Eval(); if(fabs(ev) < 1e-6) { - Error("Scale cannot be zero."); + Error(_("Scale cannot be zero.")); } else { Group *g = SK.GetGroup(edit.group); g->scale = ev; @@ -722,7 +722,7 @@ void TextWindow::EditControlDone(const char *s) { SS.MarkGroupDirty(g->h); SS.GW.ClearSuper(); } else { - Error("Bad format: specify color as r, g, b"); + Error(_("Bad format: specify color as r, g, b")); } break; } @@ -731,7 +731,7 @@ void TextWindow::EditControlDone(const char *s) { if(e) { double alpha = e->Eval(); if(alpha < 0 || alpha > 1) { - Error("Opacity must be between zero and one."); + Error(_("Opacity must be between zero and one.")); } else { Group *g = SK.GetGroup(edit.group); g->color.alpha = (int)(255.1f * alpha); @@ -770,7 +770,7 @@ void TextWindow::EditControlDone(const char *s) { Expr *e = Expr::From(s, /*popUpError=*/true); if(!e) break; if(e->Eval() < LENGTH_EPS) { - Error("Radius cannot be zero or negative."); + Error(_("Radius cannot be zero or negative.")); break; } SS.tangentArcRadius = SS.ExprToMm(e); diff --git a/src/ui.h b/src/ui.h index be1a1bbe..c7fa0f75 100644 --- a/src/ui.h +++ b/src/ui.h @@ -32,10 +32,31 @@ bool SetLocale(const std::string &name); bool SetLocale(uint16_t lcid); const std::string &Translate(const char *msgid); +const std::string &Translate(const char *msgctxt, const char *msgid); const std::string &TranslatePlural(const char *msgid, unsigned n); +const std::string &TranslatePlural(const char *msgctxt, const char *msgid, unsigned n); -inline const char *N_(const char *msgid) { return msgid; } -inline const char *_(const char *msgid) { return Translate(msgid).c_str(); } +inline const char *N_(const char *msgid) { + return msgid; +} +inline const char *CN_(const char *msgctxt, const char *msgid) { + return msgid; +} +#if defined(LIBRARY) +inline const char *_(const char *msgid) { + return msgid; +} +inline const char *C_(const char *msgctxt, const char *msgid) { + return msgid; +} +#else +inline const char *_(const char *msgid) { + return Translate(msgid).c_str(); +} +inline const char *C_(const char *msgctxt, const char *msgid) { + return Translate(msgctxt, msgid).c_str(); +} +#endif // This table describes the top-level menus in the graphics winodw. enum class Command : uint32_t { diff --git a/src/view.cpp b/src/view.cpp index 6f91eb65..a51f080c 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -75,7 +75,7 @@ bool TextWindow::EditControlDoneForView(const char *s) { if(v > LENGTH_EPS) { SS.GW.scale = v; } else { - Error("Scale cannot be zero or negative."); + Error(_("Scale cannot be zero or negative.")); } } break; @@ -87,7 +87,7 @@ bool TextWindow::EditControlDoneForView(const char *s) { pt = pt.ScaledBy(SS.MmPerUnit()); SS.GW.offset = pt.ScaledBy(-1); } else { - Error("Bad format: specify x, y, z"); + Error(_("Bad format: specify x, y, z")); } break; } @@ -96,7 +96,7 @@ bool TextWindow::EditControlDoneForView(const char *s) { case Edit::VIEW_PROJ_UP: { Vector pt; if(sscanf(s, "%lf, %lf, %lf", &pt.x, &pt.y, &pt.z) != 3) { - Error("Bad format: specify x, y, z"); + Error(_("Bad format: specify x, y, z")); break; } if(edit.meaning == Edit::VIEW_PROJ_RIGHT) {