Internationalize the main menu.

pull/106/head
whitequark 2017-01-05 10:39:08 +00:00
parent 4f04406121
commit 529e1bfd63
11 changed files with 1081 additions and 143 deletions

View File

@ -7,12 +7,420 @@ msgid ""
msgstr ""
"Project-Id-Version: SolveSpace 3.0\n"
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
"POT-Creation-Date: 2017-01-05 10:32+0000\n"
"POT-Creation-Date: 2017-01-05 10:37+0000\n"
"PO-Revision-Date: 2017-01-05 10:30+0000\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: en_US\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:29
msgid "&File"
msgstr "&File"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:30
msgid "&New"
msgstr "&New"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:31
msgid "&Open..."
msgstr "&Open..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:32
msgid "Open &Recent"
msgstr "Open &Recent"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:33
msgid "&Save"
msgstr "&Save"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:34
msgid "Save &As..."
msgstr "Save &As..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:36
msgid "Export &Image..."
msgstr "Export &Image..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:37
msgid "Export 2d &View..."
msgstr "Export 2d &View..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:38
msgid "Export 2d &Section..."
msgstr "Export 2d &Section..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:39
msgid "Export 3d &Wireframe..."
msgstr "Export 3d &Wireframe..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:40
msgid "Export Triangle &Mesh..."
msgstr "Export Triangle &Mesh..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:41
msgid "Export &Surfaces..."
msgstr "Export &Surfaces..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:42
msgid "Im&port..."
msgstr "Im&port..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:45
msgid "E&xit"
msgstr "E&xit"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:48
msgid "&Edit"
msgstr "&Edit"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:49
msgid "&Undo"
msgstr "&Undo"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:50
msgid "&Redo"
msgstr "&Redo"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:51
msgid "Re&generate All"
msgstr "Re&generate All"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:53
msgid "Snap Selection to &Grid"
msgstr "Snap Selection to &Grid"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:54
msgid "Rotate Imported &90°"
msgstr "Rotate Imported &90°"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:56
msgid "Cu&t"
msgstr "Cu&t"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:57
msgid "&Copy"
msgstr "&Copy"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:58
msgid "&Paste"
msgstr "&Paste"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:59
msgid "Paste &Transformed..."
msgstr "Paste &Transformed..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:60
msgid "&Delete"
msgstr "&Delete"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:62
msgid "Select &Edge Chain"
msgstr "Select &Edge Chain"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:63
msgid "Select &All"
msgstr "Select &All"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:64
msgid "&Unselect All"
msgstr "&Unselect All"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:66
msgid "&View"
msgstr "&View"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:67
msgid "Zoom &In"
msgstr "Zoom &In"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:68
msgid "Zoom &Out"
msgstr "Zoom &Out"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:69
msgid "Zoom To &Fit"
msgstr "Zoom To &Fit"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:71
msgid "Align View to &Workplane"
msgstr "Align View to &Workplane"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:72
msgid "Nearest &Ortho View"
msgstr "Nearest &Ortho View"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:73
msgid "Nearest &Isometric View"
msgstr "Nearest &Isometric View"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:74
msgid "&Center View At Point"
msgstr "&Center View At Point"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:76
msgid "Show Snap &Grid"
msgstr "Show Snap &Grid"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:77
msgid "Use &Perspective Projection"
msgstr "Use &Perspective Projection"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:80
msgid "Show Menu &Bar"
msgstr "Show Menu &Bar"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:82
msgid "Show &Toolbar"
msgstr "Show &Toolbar"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:83
msgid "Show Property Bro&wser"
msgstr "Show Property Bro&wser"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:85
msgid "Dimensions in &Inches"
msgstr "Dimensions in &Inches"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:86
msgid "Dimensions in &Millimeters"
msgstr "Dimensions in &Millimeters"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:89
msgid "&Full Screen"
msgstr "&Full Screen"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:92
msgid "&New Group"
msgstr "&New Group"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:93
msgid "Sketch In &3d"
msgstr "Sketch In &3d"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:94
msgid "Sketch In New &Workplane"
msgstr "Sketch In New &Workplane"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:96
msgid "Step &Translating"
msgstr "Step &Translating"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:97
msgid "Step &Rotating"
msgstr "Step &Rotating"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:99
msgid "E&xtrude"
msgstr "E&xtrude"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:100
msgid "&Lathe"
msgstr "&Lathe"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:102
msgid "Link / Assemble..."
msgstr "Link / Assemble..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:103
msgid "Link Recent"
msgstr "Link Recent"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:105
msgid "&Sketch"
msgstr "&Sketch"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:106
msgid "In &Workplane"
msgstr "In &Workplane"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:107
msgid "Anywhere In &3d"
msgstr "Anywhere In &3d"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:109
msgid "Datum &Point"
msgstr "Datum &Point"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:110
msgid "&Workplane"
msgstr "&Workplane"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:112
msgid "Line &Segment"
msgstr "Line &Segment"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:113
msgid "C&onstruction Line Segment"
msgstr "C&onstruction Line Segment"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:114
msgid "&Rectangle"
msgstr "&Rectangle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:115
msgid "&Circle"
msgstr "&Circle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:116
msgid "&Arc of a Circle"
msgstr "&Arc of a Circle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:117
msgid "&Bezier Cubic Spline"
msgstr "&Bezier Cubic Spline"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:119
msgid "&Text in TrueType Font"
msgstr "&Text in TrueType Font"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:121
msgid "To&ggle Construction"
msgstr "To&ggle Construction"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:122
msgid "Tangent &Arc at Point"
msgstr "Tangent &Arc at Point"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:123
msgid "Split Curves at &Intersection"
msgstr "Split Curves at &Intersection"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:125
msgid "&Constrain"
msgstr "&Constrain"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:126
msgid "&Distance / Diameter"
msgstr "&Distance / Diameter"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:127
msgid "Re&ference Dimension"
msgstr "Re&ference Dimension"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:128
msgid "A&ngle"
msgstr "A&ngle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:129
msgid "Reference An&gle"
msgstr "Reference An&gle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:130
msgid "Other S&upplementary Angle"
msgstr "Other S&upplementary Angle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:131
msgid "Toggle R&eference Dim"
msgstr "Toggle R&eference Dim"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:133
msgid "&Horizontal"
msgstr "&Horizontal"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:134
msgid "&Vertical"
msgstr "&Vertical"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:136
msgid "&On Point / Curve / Plane"
msgstr "&On Point / Curve / Plane"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:137
msgid "E&qual Length / Radius / Angle"
msgstr "E&qual Length / Radius / Angle"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:138
msgid "Length Ra&tio"
msgstr "Length Ra&tio"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:139
msgid "Length Diff&erence"
msgstr "Length Diff&erence"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:140
msgid "At &Midpoint"
msgstr "At &Midpoint"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:141
msgid "S&ymmetric"
msgstr "S&ymmetric"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:142
msgid "Para&llel / Tangent"
msgstr "Para&llel / Tangent"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:143
msgid "&Perpendicular"
msgstr "&Perpendicular"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:144
msgid "Same Orient&ation"
msgstr "Same Orient&ation"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:145
msgid "Lock Point Where &Dragged"
msgstr "Lock Point Where &Dragged"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:147
msgid "Comment"
msgstr "Comment"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:149
msgid "&Analyze"
msgstr "&Analyze"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:150
msgid "Measure &Volume"
msgstr "Measure &Volume"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:151
msgid "Measure A&rea"
msgstr "Measure A&rea"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:152
msgid "Measure &Perimeter"
msgstr "Measure &Perimeter"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:153
msgid "Show &Interfering Parts"
msgstr "Show &Interfering Parts"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:154
msgid "Show &Naked Edges"
msgstr "Show &Naked Edges"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:156
msgid "Show Degrees of &Freedom"
msgstr "Show Degrees of &Freedom"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:158
msgid "&Trace Point"
msgstr "&Trace Point"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:159
msgid "&Stop Tracing..."
msgstr "&Stop Tracing..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:160
msgid "Step &Dimension..."
msgstr "Step &Dimension..."
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:162
msgid "&Help"
msgstr "&Help"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:163
msgid "&Website / Manual"
msgstr "&Website / Manual"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:164
msgid "&Language"
msgstr "&Language"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:166
msgid "&About"
msgstr "&About"

View File

@ -8,11 +8,419 @@ msgid ""
msgstr ""
"Project-Id-Version: SolveSpace 3.0\n"
"Report-Msgid-Bugs-To: whitequark@whitequark.org\n"
"POT-Creation-Date: 2017-01-05 10:32+0000\n"
"POT-Creation-Date: 2017-01-05 10:37+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:29
msgid "&File"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:30
msgid "&New"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:31
msgid "&Open..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:32
msgid "Open &Recent"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:33
msgid "&Save"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:34
msgid "Save &As..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:36
msgid "Export &Image..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:37
msgid "Export 2d &View..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:38
msgid "Export 2d &Section..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:39
msgid "Export 3d &Wireframe..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:40
msgid "Export Triangle &Mesh..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:41
msgid "Export &Surfaces..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:42
msgid "Im&port..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:45
msgid "E&xit"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:48
msgid "&Edit"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:49
msgid "&Undo"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:50
msgid "&Redo"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:51
msgid "Re&generate All"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:53
msgid "Snap Selection to &Grid"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:54
msgid "Rotate Imported &90°"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:56
msgid "Cu&t"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:57
msgid "&Copy"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:58
msgid "&Paste"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:59
msgid "Paste &Transformed..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:60
msgid "&Delete"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:62
msgid "Select &Edge Chain"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:63
msgid "Select &All"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:64
msgid "&Unselect All"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:66
msgid "&View"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:67
msgid "Zoom &In"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:68
msgid "Zoom &Out"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:69
msgid "Zoom To &Fit"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:71
msgid "Align View to &Workplane"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:72
msgid "Nearest &Ortho View"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:73
msgid "Nearest &Isometric View"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:74
msgid "&Center View At Point"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:76
msgid "Show Snap &Grid"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:77
msgid "Use &Perspective Projection"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:80
msgid "Show Menu &Bar"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:82
msgid "Show &Toolbar"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:83
msgid "Show Property Bro&wser"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:85
msgid "Dimensions in &Inches"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:86
msgid "Dimensions in &Millimeters"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:89
msgid "&Full Screen"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:92
msgid "&New Group"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:93
msgid "Sketch In &3d"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:94
msgid "Sketch In New &Workplane"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:96
msgid "Step &Translating"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:97
msgid "Step &Rotating"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:99
msgid "E&xtrude"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:100
msgid "&Lathe"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:102
msgid "Link / Assemble..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:103
msgid "Link Recent"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:105
msgid "&Sketch"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:106
msgid "In &Workplane"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:107
msgid "Anywhere In &3d"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:109
msgid "Datum &Point"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:110
msgid "&Workplane"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:112
msgid "Line &Segment"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:113
msgid "C&onstruction Line Segment"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:114
msgid "&Rectangle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:115
msgid "&Circle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:116
msgid "&Arc of a Circle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:117
msgid "&Bezier Cubic Spline"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:119
msgid "&Text in TrueType Font"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:121
msgid "To&ggle Construction"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:122
msgid "Tangent &Arc at Point"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:123
msgid "Split Curves at &Intersection"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:125
msgid "&Constrain"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:126
msgid "&Distance / Diameter"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:127
msgid "Re&ference Dimension"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:128
msgid "A&ngle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:129
msgid "Reference An&gle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:130
msgid "Other S&upplementary Angle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:131
msgid "Toggle R&eference Dim"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:133
msgid "&Horizontal"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:134
msgid "&Vertical"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:136
msgid "&On Point / Curve / Plane"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:137
msgid "E&qual Length / Radius / Angle"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:138
msgid "Length Ra&tio"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:139
msgid "Length Diff&erence"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:140
msgid "At &Midpoint"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:141
msgid "S&ymmetric"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:142
msgid "Para&llel / Tangent"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:143
msgid "&Perpendicular"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:144
msgid "Same Orient&ation"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:145
msgid "Lock Point Where &Dragged"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:147
msgid "Comment"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:149
msgid "&Analyze"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:150
msgid "Measure &Volume"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:151
msgid "Measure A&rea"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:152
msgid "Measure &Perimeter"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:153
msgid "Show &Interfering Parts"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:154
msgid "Show &Naked Edges"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:156
msgid "Show Degrees of &Freedom"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:158
msgid "&Trace Point"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:159
msgid "&Stop Tracing..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:160
msgid "Step &Dimension..."
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:162
msgid "&Help"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:163
msgid "&Website / Manual"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:164
msgid "&Language"
msgstr ""
#: /home/whitequark/Work/solvespace/src/graphicswin.cpp:166
msgid "&About"
msgstr ""

View File

@ -26,143 +26,144 @@
const GraphicsWindow::MenuEntry GraphicsWindow::menu[] = {
//level
// label id accel ty fn
{ 0, "&File", Command::NONE, 0, TN, NULL },
{ 1, "&New", Command::NEW, C|'N', TN, mFile },
{ 1, "&Open...", Command::OPEN, C|'O', TN, mFile },
{ 1, "Open &Recent", Command::OPEN_RECENT, 0, TN, mFile },
{ 1, "&Save", Command::SAVE, C|'S', TN, mFile },
{ 1, "Save &As...", Command::SAVE_AS, 0, TN, mFile },
{ 0, N_("&File"), Command::NONE, 0, TN, NULL },
{ 1, N_("&New"), Command::NEW, C|'N', TN, mFile },
{ 1, N_("&Open..."), Command::OPEN, C|'O', TN, mFile },
{ 1, N_("Open &Recent"), Command::OPEN_RECENT, 0, TN, mFile },
{ 1, N_("&Save"), Command::SAVE, C|'S', TN, mFile },
{ 1, N_("Save &As..."), Command::SAVE_AS, 0, TN, mFile },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Export &Image...", Command::EXPORT_PNG, 0, TN, mFile },
{ 1, "Export 2d &View...", Command::EXPORT_VIEW, 0, TN, mFile },
{ 1, "Export 2d &Section...", Command::EXPORT_SECTION, 0, TN, mFile },
{ 1, "Export 3d &Wireframe...", Command::EXPORT_WIREFRAME, 0, TN, mFile },
{ 1, "Export Triangle &Mesh...", Command::EXPORT_MESH, 0, TN, mFile },
{ 1, "Export &Surfaces...", Command::EXPORT_SURFACES, 0, TN, mFile },
{ 1, "Im&port...", Command::IMPORT, 0, TN, mFile },
{ 1, N_("Export &Image..."), Command::EXPORT_PNG, 0, TN, mFile },
{ 1, N_("Export 2d &View..."), Command::EXPORT_VIEW, 0, TN, mFile },
{ 1, N_("Export 2d &Section..."), Command::EXPORT_SECTION, 0, TN, mFile },
{ 1, N_("Export 3d &Wireframe..."), Command::EXPORT_WIREFRAME, 0, TN, mFile },
{ 1, N_("Export Triangle &Mesh..."), Command::EXPORT_MESH, 0, TN, mFile },
{ 1, N_("Export &Surfaces..."), Command::EXPORT_SURFACES, 0, TN, mFile },
{ 1, N_("Im&port..."), Command::IMPORT, 0, TN, mFile },
#ifndef __APPLE__
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "E&xit", Command::EXIT, C|'Q', TN, mFile },
{ 1, N_("E&xit"), Command::EXIT, C|'Q', TN, mFile },
#endif
{ 0, "&Edit", Command::NONE, 0, TN, NULL },
{ 1, "&Undo", Command::UNDO, C|'Z', TN, mEdit },
{ 1, "&Redo", Command::REDO, C|'Y', TN, mEdit },
{ 1, "Re&generate All", Command::REGEN_ALL, ' ', TN, mEdit },
{ 0, N_("&Edit"), Command::NONE, 0, TN, NULL },
{ 1, N_("&Undo"), Command::UNDO, C|'Z', TN, mEdit },
{ 1, N_("&Redo"), Command::REDO, C|'Y', TN, mEdit },
{ 1, N_("Re&generate All"), Command::REGEN_ALL, ' ', TN, mEdit },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Snap Selection to &Grid", Command::SNAP_TO_GRID, '.', TN, mEdit },
{ 1, "Rotate Imported &90°", Command::ROTATE_90, '9', TN, mEdit },
{ 1, N_("Snap Selection to &Grid"), Command::SNAP_TO_GRID, '.', TN, mEdit },
{ 1, N_("Rotate Imported &90°"), Command::ROTATE_90, '9', TN, mEdit },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Cu&t", Command::CUT, C|'X', TN, mClip },
{ 1, "&Copy", Command::COPY, C|'C', TN, mClip },
{ 1, "&Paste", Command::PASTE, C|'V', TN, mClip },
{ 1, "Paste &Transformed...", Command::PASTE_TRANSFORM, C|'T', TN, mClip },
{ 1, "&Delete", Command::DELETE, DEL, TN, mClip },
{ 1, N_("Cu&t"), Command::CUT, C|'X', TN, mClip },
{ 1, N_("&Copy"), Command::COPY, C|'C', TN, mClip },
{ 1, N_("&Paste"), Command::PASTE, C|'V', TN, mClip },
{ 1, N_("Paste &Transformed..."), Command::PASTE_TRANSFORM, C|'T', TN, mClip },
{ 1, N_("&Delete"), Command::DELETE, DEL, TN, mClip },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Select &Edge Chain", Command::SELECT_CHAIN, C|'E', TN, mEdit },
{ 1, "Select &All", Command::SELECT_ALL, C|'A', TN, mEdit },
{ 1, "&Unselect All", Command::UNSELECT_ALL, ESC, TN, mEdit },
{ 1, N_("Select &Edge Chain"), Command::SELECT_CHAIN, C|'E', TN, mEdit },
{ 1, N_("Select &All"), Command::SELECT_ALL, C|'A', TN, mEdit },
{ 1, N_("&Unselect All"), Command::UNSELECT_ALL, ESC, TN, mEdit },
{ 0, "&View", Command::NONE, 0, TN, NULL },
{ 1, "Zoom &In", Command::ZOOM_IN, '+', TN, mView },
{ 1, "Zoom &Out", Command::ZOOM_OUT, '-', TN, mView },
{ 1, "Zoom To &Fit", Command::ZOOM_TO_FIT, 'F', TN, mView },
{ 0, N_("&View"), Command::NONE, 0, TN, NULL },
{ 1, N_("Zoom &In"), Command::ZOOM_IN, '+', TN, mView },
{ 1, N_("Zoom &Out"), Command::ZOOM_OUT, '-', TN, mView },
{ 1, N_("Zoom To &Fit"), Command::ZOOM_TO_FIT, 'F', TN, mView },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Align View to &Workplane", Command::ONTO_WORKPLANE, 'W', TN, mView },
{ 1, "Nearest &Ortho View", Command::NEAREST_ORTHO, F(2), TN, mView },
{ 1, "Nearest &Isometric View", Command::NEAREST_ISO, F(3), TN, mView },
{ 1, "&Center View At Point", Command::CENTER_VIEW, F(4), TN, mView },
{ 1, N_("Align View to &Workplane"), Command::ONTO_WORKPLANE, 'W', TN, mView },
{ 1, N_("Nearest &Ortho View"), Command::NEAREST_ORTHO, F(2), TN, mView },
{ 1, N_("Nearest &Isometric View"), Command::NEAREST_ISO, F(3), TN, mView },
{ 1, N_("&Center View At Point"), Command::CENTER_VIEW, F(4), TN, mView },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Show Snap &Grid", Command::SHOW_GRID, '>', TC, mView },
{ 1, "Use &Perspective Projection", Command::PERSPECTIVE_PROJ, '`', TC, mView },
{ 1, N_("Show Snap &Grid"), Command::SHOW_GRID, '>', TC, mView },
{ 1, N_("Use &Perspective Projection"), Command::PERSPECTIVE_PROJ, '`', TC, mView },
{ 1, NULL, Command::NONE, 0, TN, NULL },
#if defined(__APPLE__)
{ 1, "Show Menu &Bar", Command::SHOW_MENU_BAR, C|F(12), TC, mView },
{ 1, N_("Show Menu &Bar"), Command::SHOW_MENU_BAR, C|F(12), TC, mView },
#endif
{ 1, "Show &Toolbar", Command::SHOW_TOOLBAR, 0, TC, mView },
{ 1, "Show Property Bro&wser", Command::SHOW_TEXT_WND, '\t', TC, mView },
{ 1, N_("Show &Toolbar"), Command::SHOW_TOOLBAR, 0, TC, mView },
{ 1, N_("Show Property Bro&wser"), Command::SHOW_TEXT_WND, '\t', TC, mView },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Dimensions in &Inches", Command::UNITS_INCHES, 0, TR, mView },
{ 1, "Dimensions in &Millimeters", Command::UNITS_MM, 0, TR, mView },
{ 1, N_("Dimensions in &Inches"), Command::UNITS_INCHES, 0, TR, mView },
{ 1, N_("Dimensions in &Millimeters"), Command::UNITS_MM, 0, TR, mView },
#if defined(__unix__) || defined(__APPLE__)
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "&Full Screen", Command::FULL_SCREEN, C|F(11), TC, mView },
{ 1, N_("&Full Screen"), Command::FULL_SCREEN, C|F(11), TC, mView },
#endif
{ 0, "&New Group", Command::NONE, 0, TN, NULL },
{ 1, "Sketch In &3d", Command::GROUP_3D, S|'3', TN, mGrp },
{ 1, "Sketch In New &Workplane", Command::GROUP_WRKPL, S|'W', TN, mGrp },
{ 0, N_("&New Group"), Command::NONE, 0, TN, NULL },
{ 1, N_("Sketch In &3d"), Command::GROUP_3D, S|'3', TN, mGrp },
{ 1, N_("Sketch In New &Workplane"), Command::GROUP_WRKPL, S|'W', TN, mGrp },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Step &Translating", Command::GROUP_TRANS, S|'T', TN, mGrp },
{ 1, "Step &Rotating", Command::GROUP_ROT, S|'R', TN, mGrp },
{ 1, N_("Step &Translating"), Command::GROUP_TRANS, S|'T', TN, mGrp },
{ 1, N_("Step &Rotating"), Command::GROUP_ROT, S|'R', TN, mGrp },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "E&xtrude", Command::GROUP_EXTRUDE, S|'X', TN, mGrp },
{ 1, "&Lathe", Command::GROUP_LATHE, S|'L', TN, mGrp },
{ 1, N_("E&xtrude"), Command::GROUP_EXTRUDE, S|'X', TN, mGrp },
{ 1, N_("&Lathe"), Command::GROUP_LATHE, S|'L', TN, mGrp },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Link / Assemble...", Command::GROUP_LINK, S|'I', TN, mGrp },
{ 1, "Link Recent", Command::GROUP_RECENT, 0, TN, mGrp },
{ 1, N_("Link / Assemble..."), Command::GROUP_LINK, S|'I', TN, mGrp },
{ 1, N_("Link Recent"), Command::GROUP_RECENT, 0, TN, mGrp },
{ 0, "&Sketch", Command::NONE, 0, TN, NULL },
{ 1, "In &Workplane", Command::SEL_WORKPLANE, '2', TR, mReq },
{ 1, "Anywhere In &3d", Command::FREE_IN_3D, '3', TR, mReq },
{ 0, N_("&Sketch"), Command::NONE, 0, TN, NULL },
{ 1, N_("In &Workplane"), Command::SEL_WORKPLANE, '2', TR, mReq },
{ 1, N_("Anywhere In &3d"), Command::FREE_IN_3D, '3', TR, mReq },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Datum &Point", Command::DATUM_POINT, 'P', TN, mReq },
{ 1, "&Workplane", Command::WORKPLANE, 0, TN, mReq },
{ 1, N_("Datum &Point"), Command::DATUM_POINT, 'P', TN, mReq },
{ 1, N_("&Workplane"), Command::WORKPLANE, 0, TN, mReq },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Line &Segment", Command::LINE_SEGMENT, 'S', TN, mReq },
{ 1, "C&onstruction Line Segment", Command::CONSTR_SEGMENT, S|'S', TN, mReq },
{ 1, "&Rectangle", Command::RECTANGLE, 'R', TN, mReq },
{ 1, "&Circle", Command::CIRCLE, 'C', TN, mReq },
{ 1, "&Arc of a Circle", Command::ARC, 'A', TN, mReq },
{ 1, "&Bezier Cubic Spline", Command::CUBIC, 'B', TN, mReq },
{ 1, N_("Line &Segment"), Command::LINE_SEGMENT, 'S', TN, mReq },
{ 1, N_("C&onstruction Line Segment"), Command::CONSTR_SEGMENT, S|'S', TN, mReq },
{ 1, N_("&Rectangle"), Command::RECTANGLE, 'R', TN, mReq },
{ 1, N_("&Circle"), Command::CIRCLE, 'C', TN, mReq },
{ 1, N_("&Arc of a Circle"), Command::ARC, 'A', TN, mReq },
{ 1, N_("&Bezier Cubic Spline"), Command::CUBIC, 'B', TN, mReq },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "&Text in TrueType Font", Command::TTF_TEXT, 'T', TN, mReq },
{ 1, N_("&Text in TrueType Font"), Command::TTF_TEXT, 'T', TN, mReq },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "To&ggle Construction", Command::CONSTRUCTION, 'G', TN, mReq },
{ 1, "Tangent &Arc at Point", Command::TANGENT_ARC, S|'A', TN, mReq },
{ 1, "Split Curves at &Intersection", Command::SPLIT_CURVES, 'I', TN, mReq },
{ 1, N_("To&ggle Construction"), Command::CONSTRUCTION, 'G', TN, mReq },
{ 1, N_("Tangent &Arc at Point"), Command::TANGENT_ARC, S|'A', TN, mReq },
{ 1, N_("Split Curves at &Intersection"), Command::SPLIT_CURVES, 'I', TN, mReq },
{ 0, "&Constrain", Command::NONE, 0, TN, NULL },
{ 1, "&Distance / Diameter", Command::DISTANCE_DIA, 'D', TN, mCon },
{ 1, "Re&ference Dimension", Command::REF_DISTANCE, S|'D', TN, mCon },
{ 1, "A&ngle", Command::ANGLE, 'N', TN, mCon },
{ 1, "Reference An&gle", Command::REF_ANGLE, S|'N', TN, mCon },
{ 1, "Other S&upplementary Angle", Command::OTHER_ANGLE, 'U', TN, mCon },
{ 1, "Toggle R&eference Dim", Command::REFERENCE, 'E', TN, mCon },
{ 0, N_("&Constrain"), Command::NONE, 0, TN, NULL },
{ 1, N_("&Distance / Diameter"), Command::DISTANCE_DIA, 'D', TN, mCon },
{ 1, N_("Re&ference Dimension"), Command::REF_DISTANCE, S|'D', TN, mCon },
{ 1, N_("A&ngle"), Command::ANGLE, 'N', TN, mCon },
{ 1, N_("Reference An&gle"), Command::REF_ANGLE, S|'N', TN, mCon },
{ 1, N_("Other S&upplementary Angle"), Command::OTHER_ANGLE, 'U', TN, mCon },
{ 1, N_("Toggle R&eference Dim"), Command::REFERENCE, 'E', TN, mCon },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "&Horizontal", Command::HORIZONTAL, 'H', TN, mCon },
{ 1, "&Vertical", Command::VERTICAL, 'V', TN, mCon },
{ 1, N_("&Horizontal"), Command::HORIZONTAL, 'H', TN, mCon },
{ 1, N_("&Vertical"), Command::VERTICAL, 'V', TN, mCon },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "&On Point / Curve / Plane", Command::ON_ENTITY, 'O', TN, mCon },
{ 1, "E&qual Length / Radius / Angle", Command::EQUAL, 'Q', TN, mCon },
{ 1, "Length Ra&tio", Command::RATIO, 'Z', TN, mCon },
{ 1, "Length Diff&erence", Command::DIFFERENCE, 'J', TN, mCon },
{ 1, "At &Midpoint", Command::AT_MIDPOINT, 'M', TN, mCon },
{ 1, "S&ymmetric", Command::SYMMETRIC, 'Y', TN, mCon },
{ 1, "Para&llel / Tangent", Command::PARALLEL, 'L', TN, mCon },
{ 1, "&Perpendicular", Command::PERPENDICULAR, '[', TN, mCon },
{ 1, "Same Orient&ation", Command::ORIENTED_SAME, 'X', TN, mCon },
{ 1, "Lock Point Where &Dragged", Command::WHERE_DRAGGED, ']', TN, mCon },
{ 1, N_("&On Point / Curve / Plane"), Command::ON_ENTITY, 'O', TN, mCon },
{ 1, N_("E&qual Length / Radius / Angle"), Command::EQUAL, 'Q', TN, mCon },
{ 1, N_("Length Ra&tio"), Command::RATIO, 'Z', TN, mCon },
{ 1, N_("Length Diff&erence"), Command::DIFFERENCE, 'J', TN, mCon },
{ 1, N_("At &Midpoint"), Command::AT_MIDPOINT, 'M', TN, mCon },
{ 1, N_("S&ymmetric"), Command::SYMMETRIC, 'Y', TN, mCon },
{ 1, N_("Para&llel / Tangent"), Command::PARALLEL, 'L', TN, mCon },
{ 1, N_("&Perpendicular"), Command::PERPENDICULAR, '[', TN, mCon },
{ 1, N_("Same Orient&ation"), Command::ORIENTED_SAME, 'X', TN, mCon },
{ 1, N_("Lock Point Where &Dragged"), Command::WHERE_DRAGGED, ']', TN, mCon },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Comment", Command::COMMENT, ';', TN, mCon },
{ 1, N_("Comment"), Command::COMMENT, ';', TN, mCon },
{ 0, "&Analyze", Command::NONE, 0, TN, NULL },
{ 1, "Measure &Volume", Command::VOLUME, C|S|'V', TN, mAna },
{ 1, "Measure A&rea", Command::AREA, C|S|'A', TN, mAna },
{ 1, "Measure &Perimeter", Command::PERIMETER, C|S|'P', TN, mAna },
{ 1, "Show &Interfering Parts", Command::INTERFERENCE, C|S|'I', TN, mAna },
{ 1, "Show &Naked Edges", Command::NAKED_EDGES, C|S|'N', TN, mAna },
{ 0, N_("&Analyze"), Command::NONE, 0, TN, NULL },
{ 1, N_("Measure &Volume"), Command::VOLUME, C|S|'V', TN, mAna },
{ 1, N_("Measure A&rea"), Command::AREA, C|S|'A', TN, mAna },
{ 1, N_("Measure &Perimeter"), Command::PERIMETER, C|S|'P', TN, mAna },
{ 1, N_("Show &Interfering Parts"), Command::INTERFERENCE, C|S|'I', TN, mAna },
{ 1, N_("Show &Naked Edges"), Command::NAKED_EDGES, C|S|'N', TN, mAna },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "Show Degrees of &Freedom", Command::SHOW_DOF, C|S|'F', TN, mAna },
{ 1, N_("Show Degrees of &Freedom"), Command::SHOW_DOF, C|S|'F', TN, mAna },
{ 1, NULL, Command::NONE, 0, TN, NULL },
{ 1, "&Trace Point", Command::TRACE_PT, C|S|'T', TN, mAna },
{ 1, "&Stop Tracing...", Command::STOP_TRACING, C|S|'S', TN, mAna },
{ 1, "Step &Dimension...", Command::STEP_DIM, C|S|'D', TN, mAna },
{ 1, N_("&Trace Point"), Command::TRACE_PT, C|S|'T', TN, mAna },
{ 1, N_("&Stop Tracing..."), Command::STOP_TRACING, C|S|'S', TN, mAna },
{ 1, N_("Step &Dimension..."), Command::STEP_DIM, C|S|'D', TN, mAna },
{ 0, "&Help", Command::NONE, 0, TN, NULL },
{ 1, "&Website / Manual", Command::WEBSITE, 0, TN, mHelp },
{ 0, N_("&Help"), Command::NONE, 0, TN, NULL },
{ 1, N_("&Website / Manual"), Command::WEBSITE, 0, TN, mHelp },
{ 1, N_("&Language"), Command::LOCALE, 0, TN, mHelp },
#ifndef __APPLE__
{ 1, "&About", Command::ABOUT, 0, TN, mHelp },
{ 1, N_("&About"), Command::ABOUT, 0, TN, mHelp },
#endif
{ -1, 0, Command::NONE, 0, TN, 0 }
};

View File

@ -592,6 +592,12 @@ ContextCommand ShowContextMenu(void) {
SolveSpace::Group::MenuGroup((SolveSpace::Command)cmd);
}
}
+ (void)handleLocale:(id)sender {
uint32_t offset = [sender tag];
SolveSpace::SolveSpaceUI::MenuHelp(
(SolveSpace::Command)((uint32_t)SolveSpace::Command::LOCALE + offset));
}
@end
namespace SolveSpace {
@ -602,6 +608,10 @@ void InitMainMenu(NSMenu *mainMenu) {
NSMenu *levels[5] = {mainMenu, 0};
NSString *label;
while([mainMenu numberOfItems] != 1) {
[mainMenu removeItemAtIndex:1];
}
const GraphicsWindow::MenuEntry *entry = &GraphicsWindow::menu[0];
int current_level = 0;
while(entry->level >= 0) {
@ -619,9 +629,9 @@ void InitMainMenu(NSMenu *mainMenu) {
current_level = entry->level;
if(entry->label) {
label = [NSString stringWithUTF8String:Translate(entry->label).c_str()];
/* OS X does not support mnemonics */
label = [[NSString stringWithUTF8String:entry->label]
stringByReplacingOccurrencesOfString:@"&" withString:@""];
label = [label stringByReplacingOccurrencesOfString:@"&" withString:@""];
unichar accelChar = entry->accel &
~(GraphicsWindow::SHIFT_MASK | GraphicsWindow::CTRL_MASK);
@ -650,6 +660,22 @@ void InitMainMenu(NSMenu *mainMenu) {
[levels[entry->level] addItem:[NSMenuItem separatorItem]];
}
if(entry->id == Command::LOCALE) {
NSMenu *localeMenu = [[NSMenu alloc] initWithTitle:label];
[menuItem setSubmenu:localeMenu];
size_t i = 0;
for(auto locale : Locales()) {
NSMenuItem *localeMenuItem =
[localeMenu addItemWithTitle:
[NSString stringWithUTF8String:locale.displayName.c_str()]
action:NULL keyEquivalent:@""];
[localeMenuItem setTag:(NSInteger)i++];
[localeMenuItem setTarget:[MainMenuResponder class]];
[localeMenuItem setAction:@selector(handleLocale:)];
}
}
mainMenuItems[(uint32_t)entry->id] = menuItem;
++entry;
@ -1168,6 +1194,10 @@ std::vector<std::string> SolveSpace::GetFontFiles() {
}
@end
void SolveSpace::RefreshLocale() {
SolveSpace::InitMainMenu([NSApp mainMenu]);
}
void SolveSpace::ExitNow(void) {
[NSApp stop:nil];
}
@ -1329,7 +1359,12 @@ int main(int argc, const char *argv[]) {
SolveSpace::InitGraphicsWindow();
SolveSpace::InitTextWindow();
[[NSBundle mainBundle] loadNibNamed:@"MainMenu" owner:nil topLevelObjects:nil];
SolveSpace::InitMainMenu([NSApp mainMenu]);
NSArray *languages = [NSLocale preferredLanguages];
for(NSString *language in languages) {
dbp("%s", ([language UTF8String]));
if(SolveSpace::SetLocale([language UTF8String])) break;
}
connexionInit();
SolveSpace::SS.Init();

View File

@ -782,7 +782,7 @@ protected:
}
private:
const GraphicsWindow::MenuEntry &_entry;
const GraphicsWindow::MenuEntry _entry;
bool _synthetic;
};
@ -808,18 +808,21 @@ static void InitMainMenu(Gtk::MenuShell *menu_shell) {
current_level = entry->level;
if(entry->label) {
GraphicsWindow::MenuEntry localizedEntry = *entry;
localizedEntry.label = Translate(entry->label).c_str();
switch(entry->kind) {
case GraphicsWindow::MenuKind::NORMAL:
menu_item = new MainMenuItem<Gtk::MenuItem>(*entry);
menu_item = new MainMenuItem<Gtk::MenuItem>(localizedEntry);
break;
case GraphicsWindow::MenuKind::CHECK:
menu_item = new MainMenuItem<Gtk::CheckMenuItem>(*entry);
menu_item = new MainMenuItem<Gtk::CheckMenuItem>(localizedEntry);
break;
case GraphicsWindow::MenuKind::RADIO:
MainMenuItem<Gtk::CheckMenuItem> *radio_item =
new MainMenuItem<Gtk::CheckMenuItem>(*entry);
new MainMenuItem<Gtk::CheckMenuItem>(localizedEntry);
radio_item->set_draw_as_radio(true);
menu_item = radio_item;
break;
@ -828,6 +831,20 @@ static void InitMainMenu(Gtk::MenuShell *menu_shell) {
menu_item = new Gtk::SeparatorMenuItem();
}
if(entry->id == Command::LOCALE) {
Gtk::Menu *menu = new Gtk::Menu;
menu_item->set_submenu(*menu);
size_t i = 0;
for(auto locale : Locales()) {
GraphicsWindow::MenuEntry localeEntry = {};
localeEntry.label = locale.displayName.c_str();
localeEntry.id = (Command)((uint32_t)Command::LOCALE + i++);
localeEntry.fn = entry->fn;
menu->append(*new MainMenuItem<Gtk::MenuItem>(localeEntry));
}
}
levels[entry->level]->append(*menu_item);
main_menu_items[(uint32_t)entry->id] = menu_item;
@ -1347,7 +1364,17 @@ static GdkFilterReturn GdkSpnavFilter(GdkXEvent *gxevent, GdkEvent *, gpointer)
/* Application lifecycle */
void ExitNow(void) {
void RefreshLocale() {
for(auto menu : GW->get_menubar().get_children()) {
GW->get_menubar().remove(*menu);
}
InitMainMenu(&GW->get_menubar());
GW->get_menubar().show_all();
GW->get_menubar().accelerate(*GW);
GW->get_menubar().accelerate(*TW);
}
void ExitNow() {
GW->hide();
TW->hide();
}
@ -1390,8 +1417,6 @@ int main(int argc, char** argv) {
TW.reset(new TextWindowGtk);
GW.reset(new GraphicsWindowGtk);
InitMainMenu(&GW->get_menubar());
GW->get_menubar().accelerate(*TW);
TW->set_transient_for(*GW);
GW->set_icon(icon_gdk);
TW->set_icon(icon_gdk);
@ -1399,6 +1424,11 @@ int main(int argc, char** argv) {
TW->show_all();
GW->show_all();
const char* const* langNames = g_get_language_names();
while(*langNames) {
if(SetLocale(*langNames++)) break;
}
#ifdef HAVE_SPACEWARE
// We don't care if it can't be opened; just continue without.
spnav_x11_open(gdk_x11_get_default_xdisplay(),

View File

@ -253,6 +253,9 @@ std::vector<std::string> GetFontFiles() {
// Application lifecycle
//-----------------------------------------------------------------------------
void RefreshLocale() {
}
void ExitNow() {
ssassert(false, "Not implemented");
}

View File

@ -16,6 +16,11 @@
#include <commctrl.h>
#include <commdlg.h>
#ifdef MenuHelp
// This is defined to IsolationAwareMenuHelp on Windows 6.0 and later.
#undef MenuHelp
#endif
#ifdef HAVE_SPACEWARE
# include <si.h>
# include <siapp.h>
@ -1016,6 +1021,11 @@ LRESULT CALLBACK GraphicsWndProc(HWND hwnd, UINT msg, WPARAM wParam,
Group::MenuGroup(id);
break;
}
if((uint32_t)id >= (uint32_t)Command::LOCALE &&
(uint32_t)id < ((uint32_t)Command::LOCALE + Locales().size())) {
SolveSpaceUI::MenuHelp(id);
break;
}
int i;
for(i = 0; SS.GW.menu[i].level >= 0; i++) {
if(id == SS.GW.menu[i].id) {
@ -1293,7 +1303,7 @@ HMENU CreateGraphicsWindowMenus()
if(SS.GW.menu[i].label) {
std::string accel = MakeAcceleratorLabel(SS.GW.menu[i].accel);
const char *sep = accel.empty() ? "" : "\t";
label = ssprintf("%s%s%s", SS.GW.menu[i].label, sep, accel.c_str());
label = ssprintf("%s%s%s", Translate(SS.GW.menu[i].label).c_str(), sep, accel.c_str());
}
if(SS.GW.menu[i].level == 0) {
@ -1311,6 +1321,15 @@ HMENU CreateGraphicsWindowMenus()
RecentImportMenu = CreateMenu();
AppendMenuW(m, MF_STRING | MF_POPUP,
(UINT_PTR)RecentImportMenu, Widen(label).c_str());
} else if(SS.GW.menu[i].id == Command::LOCALE) {
HMENU LocaleMenu = CreateMenu();
size_t i = 0;
for(auto locale : Locales()) {
AppendMenuW(LocaleMenu, MF_STRING,
(uint32_t)Command::LOCALE + i++, Widen(locale.displayName).c_str());
}
AppendMenuW(m, MF_STRING | MF_POPUP,
(UINT_PTR)LocaleMenu, Widen(label).c_str());
} else if(SS.GW.menu[i].label) {
AppendMenuW(m, MF_STRING, (uint32_t)SS.GW.menu[i].id, Widen(label).c_str());
} else {
@ -1343,12 +1362,11 @@ static void CreateMainWindows()
IMAGE_ICON, 16, 16, 0);
ssassert(RegisterClassEx(&wc), "Cannot register window class");
HMENU top = CreateGraphicsWindowMenus();
GraphicsWnd = CreateWindowExW(0, L"GraphicsWnd",
L"SolveSpace (not yet saved)",
WS_OVERLAPPED | WS_THICKFRAME | WS_CLIPCHILDREN | WS_MAXIMIZEBOX |
WS_MINIMIZEBOX | WS_SYSMENU | WS_SIZEBOX | WS_CLIPSIBLINGS,
50, 50, 900, 600, NULL, top, Instance, NULL);
50, 50, 900, 600, NULL, NULL, Instance, NULL);
ssassert(GraphicsWnd != NULL, "Cannot create window");
GraphicsEditControl = CreateWindowExW(WS_EX_CLIENTEDGE, WC_EDIT, L"",
@ -1396,6 +1414,14 @@ static void CreateMainWindows()
ClientIsSmallerBy = (r.bottom - r.top) - (rc.bottom - rc.top);
}
void SolveSpace::RefreshLocale() {
HMENU oldMenu = GetMenu(GraphicsWnd);
SetMenu(GraphicsWnd, CreateGraphicsWindowMenus());
if(oldMenu != NULL) {
DestroyMenu(oldMenu);
}
}
#ifdef HAVE_SPACEWARE
//-----------------------------------------------------------------------------
// Test if a message comes from the SpaceNavigator device. If yes, dispatch
@ -1478,6 +1504,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
}
#endif
// Use the user default locale.
SetLocale((uint16_t)GetUserDefaultLCID());
// Call in to the platform-independent code, and let them do their init
SS.Init();

View File

@ -1473,6 +1473,7 @@ bool SetLocale(Predicate pred) {
std::string filename = "locales/" + it->language + "_" + it->region + ".po";
translations[*it] = Translation::From(LoadString(filename));
currentTranslation = &translations[*it];
RefreshLocale();
return true;
} else {
return false;

View File

@ -102,6 +102,11 @@ void SolveSpaceUI::Init() {
RefreshRecentMenus();
// Autosave timer
autosaveInterval = CnfThawInt(5, "AutosaveInterval");
// Locale
std::string locale = CnfThawString("", "Locale");
if(!locale.empty()) {
SetLocale(locale);
}
// The default styles (colors, line widths, etc.) are also stored in the
// configuration file, but we will automatically load those as we need
@ -810,6 +815,20 @@ void SolveSpaceUI::ShowNakedEdges(bool reportOnlyWhenNotOkay) {
}
void SolveSpaceUI::MenuHelp(Command id) {
if((uint32_t)id >= (uint32_t)Command::LOCALE &&
(uint32_t)id < ((uint32_t)Command::LOCALE + Locales().size())) {
size_t offset = (uint32_t)id - (uint32_t)Command::LOCALE;
size_t i = 0;
for(auto locale : Locales()) {
if(i++ == offset) {
CnfFreezeString(locale.Culture(), "Locale");
SetLocale(locale.Culture());
break;
}
}
return;
}
switch(id) {
case Command::WEBSITE:
OpenWebsite("http://solvespace.com/helpmenu");

View File

@ -238,6 +238,8 @@ std::vector<std::string> GetFontFiles();
void OpenWebsite(const char *url);
void RefreshLocale();
void CheckMenuByCmd(Command id, bool checked);
void RadioMenuByCmd(Command id, bool selected);
void EnableMenuByCmd(Command id, bool enabled);

View File

@ -21,7 +21,7 @@ public:
};
struct LocaleLess {
bool operator()(const Locale &a, const Locale &b) {
bool operator()(const Locale &a, const Locale &b) const {
return a.language < b.language ||
(a.language == b.language && a.region < b.region);
}
@ -143,6 +143,8 @@ enum class Command : uint32_t {
// Recent
RECENT_OPEN = 0xf000,
RECENT_LINK = 0xf100,
// Locale
LOCALE = 0xf200,
};
enum class ContextCommand : uint32_t {