More updates to localization provided by Ruslan Uss.

This commit is contained in:
Kevin Ruland 2012-09-11 16:10:51 +00:00
parent 02550a8258
commit b0d03cc473
7 changed files with 64 additions and 33 deletions

View File

@ -394,6 +394,14 @@ simpanel.col.Maxacceleration = Max. acceleration
simpanel.col.Timetoapogee = Time to apogee simpanel.col.Timetoapogee = Time to apogee
simpanel.col.Flighttime = Flight time simpanel.col.Flighttime = Flight time
simpanel.col.Groundhitvelocity = Ground hit velocity simpanel.col.Groundhitvelocity = Ground hit velocity
simpanel.ttip.uptodate = <i>Up to date</i>
simpanel.ttip.loaded = <i>Data loaded from a file</i>
simpanel.ttip.outdated = <i><font color=\"red\">Data is out of date</font></i><br>Click <i><b>Run simulations</b></i> to simulate.
simpanel.ttip.external = <i>Imported data</i>
simpanel.ttip.notSimulated = <i>Not simulated yet</i><br>Click <i><b>Run simulations</b></i> to simulate.
simpanel.ttip.noData = No simulation data available.
simpanel.ttip.noWarnings = <font color=\"gray\">No warnings.</font>
simpanel.ttip.warnings = <font color=\"red\">Warnings:</font>
! SimulationRunDialog ! SimulationRunDialog
SimuRunDlg.title.RunSim = Running simulations... SimuRunDlg.title.RunSim = Running simulations...
@ -1425,6 +1433,10 @@ Warning.JAGGED_EDGED_FIN = Jagged-edged fin predictions may be inaccurate.
Warning.LISTENERS_AFFECTED = Listeners modified the flight simulation Warning.LISTENERS_AFFECTED = Listeners modified the flight simulation
Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = Recovery device opened while motor still burning. Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = Recovery device opened while motor still burning.
Warning.FILE_INVALID_PARAMETER = Invalid parameter encountered, ignoring. Warning.FILE_INVALID_PARAMETER = Invalid parameter encountered, ignoring.
Warning.PARALLEL_FINS = Too many parallel fins
Warning.SUPERSONIC = Body calculations may not be entirely accurate at supersonic speeds.
Warning.RECOVERY_LAUNCH_ROD = Recovery device device deployed while on the launch guide.
Warning.RECOVERY_HIGH_SPEED = Recovery device deployment at high speed
! Scale dialog ! Scale dialog

View File

@ -394,6 +394,14 @@ simpanel.col.Maxacceleration = \u041c\u0430\u043a\u0441. \u0443\u0441\u043a\u043
simpanel.col.Timetoapogee = \u0412\u0440\u0435\u043c\u044f \u0434\u043e \u0430\u043f\u043e\u0433\u0435\u044f simpanel.col.Timetoapogee = \u0412\u0440\u0435\u043c\u044f \u0434\u043e \u0430\u043f\u043e\u0433\u0435\u044f
simpanel.col.Flighttime = \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430 simpanel.col.Flighttime = \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0442\u0430
simpanel.col.Groundhitvelocity = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f simpanel.col.Groundhitvelocity = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f
simpanel.ttip.uptodate = <i>\u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b</i>
simpanel.ttip.loaded = <i>\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0438\u0437 \u0444\u0430\u0439\u043b\u0430</i>
simpanel.ttip.outdated = <i><font color=\"red\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438</font></i><br>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 <i><b>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u044b</b></i> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430.
simpanel.ttip.external = <i>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435</i>
simpanel.ttip.notSimulated = <i>\u0420\u0430\u0441\u0447\u0435\u0442 \u0435\u0449\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f</i><br>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 <i><b>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0447\u0435\u0442\u044b</b></i> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430.
simpanel.ttip.noData = \u041d\u0435\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.
simpanel.ttip.noWarnings = <font color=\"gray\">\u041d\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439.</font>
simpanel.ttip.warnings = <font color=\"red\">\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:</font>
! SimulationRunDialog ! SimulationRunDialog
SimuRunDlg.title.RunSim = \u0420\u0430\u0441\u0447\u0435\u0442\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435... SimuRunDlg.title.RunSim = \u0420\u0430\u0441\u0447\u0435\u0442\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435...
@ -563,8 +571,8 @@ compaddbuttons.Bodycompandfinsets = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u
compaddbuttons.Nosecone = \u0413\u043e\u043b\u043e\u0432\u043d\u043e\u0439\n\u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c compaddbuttons.Nosecone = \u0413\u043e\u043b\u043e\u0432\u043d\u043e\u0439\n\u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c
compaddbuttons.Bodytube = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u0430\u044f\n\u0442\u0440\u0443\u0431\u0430 compaddbuttons.Bodytube = \u041a\u043e\u0440\u043f\u0443\u0441\u043d\u0430\u044f\n\u0442\u0440\u0443\u0431\u0430
compaddbuttons.Transition = \u041f\u0435\u0440\u0435\u0445\u043e\u0434 compaddbuttons.Transition = \u041f\u0435\u0440\u0435\u0445\u043e\u0434
compaddbuttons.Trapezoidal = \u0422\u0440\u0430\u043f\u0435\u0446\u0438\u0435\u0432\u0438\u0434\u043d\u044b\u0439 compaddbuttons.Trapezoidal = \u0422\u0440\u0430\u043f\u0435\u0446\u0438\u0435\u0432\u0438\u0434\u043d\u043e\u0435\n\u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
compaddbuttons.Elliptical = \u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 compaddbuttons.Elliptical = \u042d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435\n\u043e\u043f\u0435\u0440\u0435\u043d\u0438\u0435
compaddbuttons.Freeform = \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439\n\u0444\u043e\u0440\u043c\u044b compaddbuttons.Freeform = \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439\n\u0444\u043e\u0440\u043c\u044b
compaddbuttons.Launchlug = \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435\n\u043a\u043e\u043b\u044c\u0446\u043e compaddbuttons.Launchlug = \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435\n\u043a\u043e\u043b\u044c\u0446\u043e
compaddbuttons.Innercomponent = \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 compaddbuttons.Innercomponent = \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438
@ -1098,7 +1106,7 @@ main.menu.analyze.customExpressions.desc = \u041e\u043f\u0440\u0435\u0434\u0435\
main.menu.help = \u0421\u043f\u0440\u0430\u0432\u043a\u0430 main.menu.help = \u0421\u043f\u0440\u0430\u0432\u043a\u0430
main.menu.help.desc = \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 OpenRocket main.menu.help.desc = \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 OpenRocket
main.menu.help.tours = \u042d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u0438 main.menu.help.tours = \u041f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430
main.menu.help.tours.desc = \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u044c \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u044e \u043f\u043e OpenRocket main.menu.help.tours.desc = \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u044c \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u044e \u043f\u043e OpenRocket
main.menu.help.license = \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f main.menu.help.license = \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f
main.menu.help.license.desc = \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 OpenRocket main.menu.help.license.desc = \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 OpenRocket
@ -1191,8 +1199,8 @@ Shape.Conical = \u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439
Shape.Conical.desc1 = \u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c. Shape.Conical.desc1 = \u041a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c.
Shape.Conical.desc2 = \u0423 \u043a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. Shape.Conical.desc2 = \u0423 \u043a\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u0440\u044f\u043c\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.
Shape.Ogive = \u0421\u0442\u0440\u0435\u043b\u043e\u0432\u0438\u0434\u043d\u044b\u0439 Shape.Ogive = \u0421\u0442\u0440\u0435\u043b\u043e\u0432\u0438\u0434\u043d\u044b\u0439
Shape.Ogive.desc1 = An ogive nose cone has a profile that is a segment of a circle. The shape parameter value 1 produces a <b>tangent ogive</b>, which has a smooth transition to the body tube, values less than 1 produce <b>secant ogives</b>. Shape.Ogive.desc1 = \u0421\u0442\u0440\u0435\u043b\u043e\u0432\u0438\u0434\u043d\u044b\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u0443\u0433\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u044b, \u0440\u0430\u0432\u043d\u044b\u0439 1, \u0434\u0430\u0435\u0442 <b>\u0432\u044b\u043f\u0443\u043a\u043b\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c</b>, \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u043d\u0443\u044e \u0442\u0440\u0443\u0431\u0443, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043c\u0435\u043d\u044c\u0448\u0438\u0439 1, \u0434\u0430\u0435\u0442 <b>\u0443\u043f\u043b\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c</b>.
Shape.Ogive.desc2 = An ogive transition has a profile that is a segment of a circle. The shape parameter value 1 produces a <b>tangent ogive</b>, which has a smooth transition to the body tube at the aft end, values less than 1 produce <b>secant ogives</b>. Shape.Ogive.desc2 = \u0421\u0442\u0440\u0435\u043b\u043e\u0432\u0438\u0434\u043d\u044b\u0439 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u043e\u0431\u0442\u0435\u043a\u0430\u0442\u0435\u043b\u044c \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u0443\u0433\u0438 \u043e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u044b, \u0440\u0430\u0432\u043d\u044b\u0439 1, \u0434\u0430\u0435\u0442 <b>\u0432\u044b\u043f\u0443\u043a\u043b\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c</b>, \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u043d\u0443\u044e \u0442\u0440\u0443\u0431\u0443, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043c\u0435\u043d\u044c\u0448\u0438\u0439 1, \u0434\u0430\u0435\u0442 <b>\u0443\u043f\u043b\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c</b>.
Shape.Ellipsoid = \u042d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434 Shape.Ellipsoid = \u042d\u043b\u043b\u0438\u043f\u0441\u043e\u0438\u0434
Shape.Ellipsoid.desc1 = An ellipsoidal nose cone has a profile of a half-ellipse with major axes of lengths 2&times;<i>Length</i> and <i>Diameter</i>. Shape.Ellipsoid.desc1 = An ellipsoidal nose cone has a profile of a half-ellipse with major axes of lengths 2&times;<i>Length</i> and <i>Diameter</i>.
Shape.Ellipsoid.desc2 = An ellipsoidal transition has a profile of a half-ellipse with major axes of lengths 2&times;<i>Length</i> and <i>Diameter</i>. If the transition is not clipped, then the profile is extended at the center by the corresponding radius. Shape.Ellipsoid.desc2 = An ellipsoidal transition has a profile of a half-ellipse with major axes of lengths 2&times;<i>Length</i> and <i>Diameter</i>. If the transition is not clipped, then the profile is extended at the center by the corresponding radius.
@ -1402,6 +1410,7 @@ FlightDataType.TYPE_COMPUTATION_TIME = \u0412\u0440\u0435\u043c\u044f \u0440\u04
FlightDataType.TYPE_LATITUDE = \u0428\u0438\u0440\u043e\u0442\u0430 FlightDataType.TYPE_LATITUDE = \u0428\u0438\u0440\u043e\u0442\u0430
FlightDataType.TYPE_LONGITUDE = \u0414\u043e\u043b\u0433\u043e\u0442\u0430 FlightDataType.TYPE_LONGITUDE = \u0414\u043e\u043b\u0433\u043e\u0442\u0430
FlightDataType.TYPE_CORIOLIS_ACCELERATION = \u041a\u043e\u0440\u0438\u043e\u043b\u0438\u0441\u043e\u0432\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 FlightDataType.TYPE_CORIOLIS_ACCELERATION = \u041a\u043e\u0440\u0438\u043e\u043b\u0438\u0441\u043e\u0432\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435
FlightDataType.TYPE_GRAVITY = \u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435
! PlotConfiguration ! PlotConfiguration
PlotConfiguration.Verticalmotion = \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 / \u0412\u0440\u0435\u043c\u044f PlotConfiguration.Verticalmotion = \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 / \u0412\u0440\u0435\u043c\u044f
@ -1420,8 +1429,12 @@ Warning.DISCONTINUITY = \u0420\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u
Warning.THICK_FIN = \u0422\u043e\u043b\u0441\u0442\u044b\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438. Warning.THICK_FIN = \u0422\u043e\u043b\u0441\u0442\u044b\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438.
Warning.JAGGED_EDGED_FIN = \u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u0441 \u0437\u0430\u043e\u0441\u0442\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0440\u0430\u044f\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438. Warning.JAGGED_EDGED_FIN = \u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u0441 \u0437\u0430\u043e\u0441\u0442\u0440\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u0440\u0430\u044f\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438.
Warning.LISTENERS_AFFECTED = \u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u043e\u043b\u0435\u0442\u0430 Warning.LISTENERS_AFFECTED = \u0421\u043b\u0443\u0448\u0430\u0442\u0435\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u043e\u043b\u0435\u0442\u0430
Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = \u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435. Warning.RECOVERY_DEPLOYMENT_WHILE_BURNING = \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435.
Warning.FILE_INVALID_PARAMETER = \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e. Warning.FILE_INVALID_PARAMETER = \u0412\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e.
Warning.PARALLEL_FINS = \u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432.
Warning.SUPERSONIC = \u0420\u0430\u0441\u0447\u0435\u0442\u044b \u043a\u043e\u0440\u043f\u0443\u0441\u0430 \u043f\u0440\u0438 \u0441\u0432\u0435\u0440\u0445\u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u044b.
Warning.RECOVERY_LAUNCH_ROD = \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435.
Warning.RECOVERY_HIGH_SPEED = \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438
! Scale dialog ! Scale dialog
@ -1668,14 +1681,14 @@ CompassSelectionButton.lbl.NW = NW
SlideShowDialog.btn.next = \u0414\u0430\u043b\u0435\u0435 SlideShowDialog.btn.next = \u0414\u0430\u043b\u0435\u0435
SlideShowDialog.btn.prev = \u041d\u0430\u0437\u0430\u0434 SlideShowDialog.btn.prev = \u041d\u0430\u0437\u0430\u0434
SlideShowLinkListener.error.title = \u042d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b SlideShowLinkListener.error.title = \u041f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u044b
SlideShowLinkListener.error.msg = Sorry, the selected tour has not yet been written. SlideShowLinkListener.error.msg = \u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0435\u0449\u0435 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e.
GuidedTourSelectionDialog.title = Guided tours GuidedTourSelectionDialog.title = \u041f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430
GuidedTourSelectionDialog.lbl.selectTour = Select guided tour: GuidedTourSelectionDialog.lbl.selectTour = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e:
GuidedTourSelectionDialog.lbl.description = Tour description: GuidedTourSelectionDialog.lbl.description = \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430:
GuidedTourSelectionDialog.lbl.length = Number of slides: GuidedTourSelectionDialog.lbl.length = \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u0430\u0439\u0434\u043e\u0432:
GuidedTourSelectionDialog.btn.start = Start tour! GuidedTourSelectionDialog.btn.start = \u041d\u0430\u0447\u0430\u0442\u044c!
! Custom Fin BMP Importer ! Custom Fin BMP Importer

View File

@ -102,6 +102,7 @@ public abstract class Warning {
private double length = Double.NaN; private double length = Double.NaN;
private double delay = Double.NaN; private double delay = Double.NaN;
@Override
public String toString() { public String toString() {
String str = "No motor with designation '" + designation + "'"; String str = "No motor with designation '" + designation + "'";
if (manufacturer != null) if (manufacturer != null)
@ -315,4 +316,13 @@ public abstract class Warning {
//// Invalid parameter encountered, ignoring. //// Invalid parameter encountered, ignoring.
public static final Warning FILE_INVALID_PARAMETER = public static final Warning FILE_INVALID_PARAMETER =
new Other(trans.get("Warning.FILE_INVALID_PARAMETER")); new Other(trans.get("Warning.FILE_INVALID_PARAMETER"));
public static final Warning PARALLEL_FINS =
new Other(trans.get("Warning.PARALLEL_FINS"));
public static final Warning SUPERSONIC =
new Other(trans.get("Warning.SUPERSONIC"));
public static final Warning RECOVERY_LAUNCH_ROD =
new Other(trans.get("Warning.RECOVERY_LAUNCH_ROD"));
} }

View File

@ -163,7 +163,7 @@ public class FinSetCalc extends RocketComponentCalc {
default: default:
// Assume 75% efficiency // Assume 75% efficiency
cna *= 0.75; cna *= 0.75;
warnings.add("Too many parallel fins"); warnings.add(Warning.PARALLEL_FINS);
break; break;
} }

View File

@ -5,6 +5,7 @@ import static net.sf.openrocket.util.MathUtil.pow2;
import net.sf.openrocket.aerodynamics.AerodynamicForces; import net.sf.openrocket.aerodynamics.AerodynamicForces;
import net.sf.openrocket.aerodynamics.BarrowmanCalculator; import net.sf.openrocket.aerodynamics.BarrowmanCalculator;
import net.sf.openrocket.aerodynamics.FlightConditions; import net.sf.openrocket.aerodynamics.FlightConditions;
import net.sf.openrocket.aerodynamics.Warning;
import net.sf.openrocket.aerodynamics.WarningSet; import net.sf.openrocket.aerodynamics.WarningSet;
import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.RocketComponent;
@ -140,7 +141,7 @@ public class SymmetricComponentCalc extends RocketComponentCalc {
// Add warning on supersonic flight // Add warning on supersonic flight
if (conditions.getMach() > 1.1) { if (conditions.getMach() > 1.1) {
warnings.add("Body calculations may not be entirely accurate at supersonic speeds."); warnings.add(Warning.SUPERSONIC);
} }
} }

View File

@ -571,42 +571,38 @@ public class SimulationPanel extends JPanel {
tip = "<html><b>" + sim.getName() + "</b><br>"; tip = "<html><b>" + sim.getName() + "</b><br>";
switch (sim.getStatus()) { switch (sim.getStatus()) {
case UPTODATE: case UPTODATE:
//// <i>Up to date</i><br> tip += trans.get ("simpanel.ttip.uptodate") + "<br>";
tip += "<i>Up to date</i><br>";
break; break;
case LOADED: case LOADED:
//// <i>Data loaded from a file</i><br> tip += trans.get ("simpanel.ttip.loaded") + "<br>";
tip += "<i>Data loaded from a file</i><br>";
break; break;
case OUTDATED: case OUTDATED:
tip += "<i><font color=\"red\">Data is out of date</font></i><br>"; tip += trans.get ("simpanel.ttip.outdated") + "<br>";
tip += "Click <i><b>Run simulations</b></i> to simulate.<br>";
break; break;
case EXTERNAL: case EXTERNAL:
tip += "<i>Imported data</i><br>"; tip += trans.get ("simpanel.ttip.external") + "<br>";
return tip; return tip;
case NOT_SIMULATED: case NOT_SIMULATED:
tip += "<i>Not simulated yet</i><br>"; tip += trans.get ("simpanel.ttip.notSimulated");
tip += "Click <i><b>Run simulations</b></i> to simulate.";
return tip; return tip;
} }
if (data == null) { if (data == null) {
tip += "No simulation data available."; tip += trans.get ("simpanel.ttip.noData");
return tip; return tip;
} }
WarningSet warnings = data.getWarningSet(); WarningSet warnings = data.getWarningSet();
if (warnings.isEmpty()) { if (warnings.isEmpty()) {
tip += "<font color=\"gray\">No warnings.</font>"; tip += trans.get ("simpanel.ttip.noWarnings");
return tip; return tip;
} }
tip += "<font color=\"red\">Warnings:</font>"; tip += trans.get ("simpanel.ttip.warnings");
for (Warning w : warnings) { for (Warning w : warnings) {
tip += "<br>" + w.toString(); tip += "<br>" + w.toString();
} }

View File

@ -1,12 +1,12 @@
package net.sf.openrocket.simulation; package net.sf.openrocket.simulation;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import net.sf.openrocket.aerodynamics.FlightConditions; import net.sf.openrocket.aerodynamics.FlightConditions;
import net.sf.openrocket.aerodynamics.Warning; import net.sf.openrocket.aerodynamics.Warning;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.motor.MotorId; import net.sf.openrocket.motor.MotorId;
@ -18,7 +18,6 @@ import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.RecoveryDevice; import net.sf.openrocket.rocketcomponent.RecoveryDevice;
import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.Stage; import net.sf.openrocket.rocketcomponent.Stage;
import net.sf.openrocket.simulation.customexpression.CustomExpression;
import net.sf.openrocket.simulation.exception.MotorIgnitionException; import net.sf.openrocket.simulation.exception.MotorIgnitionException;
import net.sf.openrocket.simulation.exception.SimulationException; import net.sf.openrocket.simulation.exception.SimulationException;
import net.sf.openrocket.simulation.exception.SimulationLaunchException; import net.sf.openrocket.simulation.exception.SimulationLaunchException;
@ -33,6 +32,7 @@ import net.sf.openrocket.util.Quaternion;
public class BasicEventSimulationEngine implements SimulationEngine { public class BasicEventSimulationEngine implements SimulationEngine {
private static final Translator trans = Application.getTranslator();
private static final LogHelper log = Application.getLogger(); private static final LogHelper log = Application.getLogger();
// TODO: MEDIUM: Allow selecting steppers // TODO: MEDIUM: Allow selecting steppers
@ -470,15 +470,14 @@ public class BasicEventSimulationEngine implements SimulationEngine {
// Check for launch rod // Check for launch rod
if (!status.isLaunchRodCleared()) { if (!status.isLaunchRodCleared()) {
status.getWarnings().add(Warning.fromString("Recovery device device deployed while on " + status.getWarnings().add(Warning.RECOVERY_LAUNCH_ROD);
"the launch guide."));
} }
// Check current velocity // Check current velocity
if (status.getRocketVelocity().length() > 20) { if (status.getRocketVelocity().length() > 20) {
// TODO: LOW: Custom warning. // TODO: LOW: Custom warning.
status.getWarnings().add(Warning.fromString("Recovery device deployment at high " + status.getWarnings().add(Warning.fromString(trans.get("Warning.RECOVERY_HIGH_SPEED") +
"speed (" " ("
+ UnitGroup.UNITS_VELOCITY.toStringUnit(status.getRocketVelocity().length()) + UnitGroup.UNITS_VELOCITY.toStringUnit(status.getRocketVelocity().length())
+ ").")); + ")."));
} }