diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties
index ff0bf23f8..11b77c7ee 100644
--- a/core/resources/l10n/messages_zh_CN.properties
+++ b/core/resources/l10n/messages_zh_CN.properties
@@ -42,7 +42,7 @@ AppearanceCfg.lbl.texture.repeat = \u91CD\u590D:
AppearanceCfg.lbl.texture.rotation = \u65CB\u8F6C:
AppearanceCfg.lbl.texture.scale = \u7F29\u653E:
-BasicEventSimulationEngine.error.NaNResult = \u6A21\u62DF\u7ED3\u679C\u5E76\u4E0D\u662F\u4E2A\u6570\u503C,\u8BF7\u6C47\u62A5bug
+BasicEventSimulationEngine.error.NaNResult = \u6A21\u62DF\u7ED3\u679C\u975E\u6570\u503C,\u8BF7\u6C47\u62A5bug
BasicEventSimulationEngine.error.earlyMotorBurnout = \u53D1\u52A8\u673A\u8D77\u98DE\u524D\u5DF2\u71C3\u5C3D.
BasicEventSimulationEngine.error.noIgnition = \u53D1\u52A8\u673A\u672A\u70B9\u706B
BasicEventSimulationEngine.error.noMotorsDefined = \u53D1\u52A8\u673A\u672A\u5B9A\u4E49
@@ -128,11 +128,15 @@ ComponentCfgDlg.Modify = \u4FEE\u6539
!ComponentConfigDialog
ComponentCfgDlg.configuration = \u8BBE\u7F6E
+ComponentIcons.Altimeter = \u9AD8\u5EA6\u8BA1
+ComponentIcons.Battery = \u7535\u6C60
ComponentIcons.Bodytube = \u7BAD\u4F53
ComponentIcons.Bulkhead = \u9694\u677F
ComponentIcons.Centeringring = \u4E2D\u5FC3\u73AF
+ComponentIcons.Deploymentcharge = \u5F00\u4F1E\u836F
ComponentIcons.Ellipticalfinset = \u692D\u5706\u7A33\u5B9A\u7FFC
ComponentIcons.Engineblock = \u53D1\u52A8\u673A
+ComponentIcons.Flightcomputer = \u98DE\u63A7
ComponentIcons.Freeformfinset = \u66F2\u9762\u7A33\u5B9A\u7FFC
ComponentIcons.Innertube = \u5185\u7BA1
ComponentIcons.Launchlug = \u53D1\u5C04\u8854\u5957
@@ -140,11 +144,15 @@ ComponentIcons.Masscomponent = \u8D28\u91CF\u7EC4\u4EF6
!ComponentIcons
ComponentIcons.Nosecone = \u5934\u9525
ComponentIcons.Parachute = \u964D\u843D\u4F1E
+ComponentIcons.Payload = \u6709\u6548\u8F7D\u8377
+ComponentIcons.Recoveryhardware = \u56DE\u6536\u8BBE\u5907
ComponentIcons.Shockcord = \u51CF\u9707\u7D22
ComponentIcons.Streamer = \u98D8\u5E26
+ComponentIcons.Tracker = \u8DDF\u8E2A\u5668
ComponentIcons.Transition = \u7EA7\u95F4\u6BB5
ComponentIcons.Trapezoidalfinset = \u68AF\u5F62\u7A33\u5B9A\u7FFC
ComponentIcons.Tubecoupler = \u8FDE\u63A5\u5668
+ComponentIcons.Tubefinset = \u7BA1\u5F62\u7FFC
ComponentIcons.disabled = (\u5DF2\u7981\u7528)
ComponentPresetChooserDialog.checkbox.filterAftDiameter = \u5339\u914D\u540E\u76F4\u5F84
@@ -264,6 +272,9 @@ FinSet.TabRelativePosition.CENTER = \u7FFC\u6839\u5F26\u4E2D\u70B9
FinSet.TabRelativePosition.END = \u7FFC\u6839\u5F26\u540E\u7F18
FinSet.TabRelativePosition.FRONT = \u7FFC\u6839\u5F26\u524D\u7F18
+FinSetCfg.lbl.Filletradius = \u63A5\u7F1D\u534A\u5F84:
+FinSetCfg.lbl.Finfilletmaterial = \u63A5\u7F1D\u6750\u6599:
+
FinSetConfig.Convertfinset = \u8F6C\u6362\u7FFC
FinSetConfig.but.AutoCalc = \u81EA\u52A8\u8BA1\u7B97
FinSetConfig.but.Converttofreeform = \u8F6C\u4E3A\u81EA\u7531\u66F2\u9762
@@ -282,6 +293,10 @@ FinSetConfig.ttip.Tabheight = \u7FFC\u5C55\u65B9\u5411\u7684\u9AD8\u
FinSetConfig.ttip.Tablength = \u7FFC\u677F\u7684\u957F\u5EA6.
FinSetConfig.ttip.Tabposition = \u7FFC\u677F\u7684\u4F4D\u7F6E.
+FinsetCfg.ttip.Finfillets1 = \u5C06\u9884\u4F30\u8D28\u91CF\u6DFB\u52A0\u5230\u7FFC\u6839\u90E8.
+FinsetCfg.ttip.Finfillets2 = \u5047\u5B9A\u63A5\u7F1D\u5185\u51F9\u4E14\u548C\u7BAD\u4F53\u3001\u7FFC\u677F\u76F8\u5207.
+FinsetCfg.ttip.Finfillets3 = \u65E0\u63A5\u7F1D\u60C5\u51B5\u4E0B\u5C06\u8BBE\u5B9A\u63A5\u7F1D\u534A\u5F84\u4E3A0.
+
FlightDataType.TYPE_ACCELERATION_TOTAL = \u603B\u52A0\u901F\u5EA6
FlightDataType.TYPE_ACCELERATION_XY = \u6A2A\u5411\u52A0\u901F\u5EA6
FlightDataType.TYPE_ACCELERATION_Z = \u5782\u76F4\u52A0\u901F\u5EA6
@@ -508,8 +523,15 @@ LineStyle.Dotted = \u70B9\u865A\u7EBF
! LineStyle
LineStyle.Solid = \u5B9E\u7EBF
+MassComponent.Altimeter = \u9AD8\u5EA6\u8BA1
+MassComponent.Battery = \u7535\u6C60
+MassComponent.DeploymentCharge = \u5F00\u4F1E\u836F
+MassComponent.FlightComputer = \u98DE\u63A7
!MassComponent
MassComponent.MassComponent = \u8D28\u91CF\u7EC4\u4EF6
+MassComponent.Payload = \u6709\u6548\u8F7D\u8377
+MassComponent.RecoveryHardware = \u56DE\u6536\u8BBE\u5907
+MassComponent.Tracker = \u8FFD\u8E2A\u5668
MassComponentCfg.but.Reset = \u91CD\u7F6E
MassComponentCfg.lbl.Density = \u8FD1\u4F3C\u5BC6\u5EA6:
@@ -521,6 +543,7 @@ MassComponentCfg.lbl.PosRelativeto = \u76F8\u5BF9\u4F4D\u7F6E:
MassComponentCfg.lbl.Radialdirection = \u5F84\u5411\u65B9\u5411:
MassComponentCfg.lbl.Radialdistance = \u5F84\u5411\u8DDD\u79BB:
MassComponentCfg.lbl.plus = \u52A0
+MassComponentCfg.lbl.type = \u7C7B\u578B
MassComponentCfg.tab.General = \u5E38\u89C4
MassComponentCfg.tab.Radialpos = \u5F84\u5411\u4F4D\u7F6E
MassComponentCfg.tab.ttip.General = \u5E38\u89C4\u5C5E\u6027
@@ -551,7 +574,7 @@ MotorCfg.checkbox.compmotormount = \u8BE5\u7EC4\u4EF6\u4E3A\u53D1\u52A8\u673A\u5
MotorCfg.lbl.Currentmotor = \u5F53\u524D\u53D1\u52A8\u673A:
MotorCfg.lbl.Flightcfg = \u98DE\u884C\u914D\u7F6E:
MotorCfg.lbl.Ignitionat = \u70B9\u706B\u65F6\u523B:
-MotorCfg.lbl.Motoroverhang = \u53D1\u52A8\u673A\u7A81\u51FA:
+MotorCfg.lbl.Motoroverhang = \u53D1\u52A8\u673A\u6A2A\u7F69\u91CF:
MotorCfg.lbl.longA1 = \u5F53\u524D\u8BBE\u8BA1\u7A3F\u4E3A\u5355\u7EA7\u706B\u7BAD.
MotorCfg.lbl.longA2 = \u70B9\u51FB"\u65B0\u5EFA\u7EA7"\u5EFA\u7ACB\u65B0\u7684\u706B\u7BAD\u7EA7.
MotorCfg.lbl.longB1 = \u5F53\u524D\u8BBE\u8BA1\u7A3F\u6709
@@ -723,15 +746,46 @@ PhotoFrame.menu.window.size = \u5927\u5C0F
PhotoFrame.menu.window.size.portrait = {0} \u76F8\u7247
PhotoFrame.title = \u7167\u76F8\u9986
-PhotoSettingsConfig.colorChooser.title = \u9009\u8272\u5668
-PhotoSettingsConfig.tab.effects = \u7279\u6548
-PhotoSettingsConfig.tab.environment = \u73AF\u5883
-PhotoSettingsConfig.tab.orientation = \u65B9\u5411
-PhotoSettingsConfig.title = \u8BBE\u7F6E
+PhotoSettingsConfig.colorChooser.title = \u9009\u8272\u677F
+PhotoSettingsConfig.lbl.advance = \u9AD8\u7EA7
+PhotoSettingsConfig.lbl.amb = \u73AF\u5883
+PhotoSettingsConfig.lbl.camera = \u76F8\u673A
+PhotoSettingsConfig.lbl.effects = \u6548\u679C
+PhotoSettingsConfig.lbl.exhaustScale = \u5C3E\u6C14\u5927\u5C0F
+PhotoSettingsConfig.lbl.flame = \u706B\u7130
+PhotoSettingsConfig.lbl.flameAspect = \u706B\u7130\u5916\u89C2\u89D2\u5EA6
+PhotoSettingsConfig.lbl.fov = \u89C6\u573A
+PhotoSettingsConfig.lbl.light = \u5149\u7167
+PhotoSettingsConfig.lbl.lightAlt = \u5149\u7167\u9AD8\u5EA6
+PhotoSettingsConfig.lbl.lightAz = \u5149\u7167\u65B9\u4F4D
+PhotoSettingsConfig.lbl.pitch = \u503E\u89D2
+PhotoSettingsConfig.lbl.rocket = \u706B\u7BAD
+PhotoSettingsConfig.lbl.roll = \u65CB\u8F6C
+PhotoSettingsConfig.lbl.sky = \u5929\u7A7A
+PhotoSettingsConfig.lbl.skyColor = \u5929\u7A7A\u989C\u8272
+PhotoSettingsConfig.lbl.skyCredit = \u56FE\u7247\u6CE8\u89E3
+PhotoSettingsConfig.lbl.skyImage = \u5929\u7A7A\u56FE\u7247
+PhotoSettingsConfig.lbl.smoke = \u70DF\u96FE
+PhotoSettingsConfig.lbl.smokeFlame = \u7130\u70DF
+PhotoSettingsConfig.lbl.smokeOpacity = \u70DF\u900F\u660E\u5EA6
+PhotoSettingsConfig.lbl.sparkConcentration = \u706B\u661F\u6D53\u5EA6
+PhotoSettingsConfig.lbl.sparkWeight = \u706B\u661F\u91CD\u91CF
+PhotoSettingsConfig.lbl.sparks = \u706B\u661F
+PhotoSettingsConfig.lbl.speed = \u901F\u5EA6
+PhotoSettingsConfig.lbl.sun = \u9633\u5149
+PhotoSettingsConfig.lbl.vAlt = \u89C6\u9AD8\u5EA6
+PhotoSettingsConfig.lbl.vAz = \u89C6\u65B9\u4F4D\u89D2
+PhotoSettingsConfig.lbl.vDist = \u89C6\u8DDD
+PhotoSettingsConfig.lbl.yaw = \u65CB\u89D2
+PhotoSettingsConfig.tab.effects = \u7279\u6548
+PhotoSettingsConfig.tab.environment = \u73AF\u5883
+PhotoSettingsConfig.tab.orientation = \u65B9\u5411
+PhotoSettingsConfig.title = \u8BBE\u7F6E
PlotConfiguration.Angleofattack = \u653B\u89D2\u548C\u65B9\u5411 vs. \u65F6\u95F4
PlotConfiguration.Dragcoef = \u963B\u529B\u7CFB\u6570 vs. \u9A6C\u8D6B\u6570
PlotConfiguration.Flightside = \u98DE\u884C\u4FA7\u89C6\u5256\u9762
+PlotConfiguration.Groundtrack = \u5730\u9762\u822A\u8FF9
PlotConfiguration.Rollcharacteristics = \u6EDA\u8F6C\u7279\u5F81
PlotConfiguration.Simulationtime = \u6A21\u62DF\u65F6\u95F4\u6B65\u957F vs. \u8BA1\u7B97\u65F6\u95F4
PlotConfiguration.Stability = \u7A33\u5B9A\u6027 vs. \u65F6\u95F4
@@ -1015,6 +1069,23 @@ SimulationEditDialog.btn.plot = \u6570\u636E\u56FE
SimulationEditDialog.btn.simulate = \u4EFF\u771F
SimulationEditDialog.btn.simulateAndPlot = \u4EFF\u771F & \u6570\u636E\u56FE
+SimulationExtension.javacode.className = \u5B8C\u6574\u7684Java\u7C7B\u540D:
+SimulationExtension.javacode.desc = \u6DFB\u52A0\u81EA\u5B9A\u4E49SimulationListener(\u76D1\u542C\u4E8B\u4EF6)
+SimulationExtension.javacode.name = Java\u4EE3\u7801
+SimulationExtension.javacode.name.none = \u65E0
+SimulationExtension.scripting.desc = \u81EA\u5B9A\u4E49OpenRocket\u6269\u5C55\u811A\u672C.
+SimulationExtension.scripting.language.label = \u8BED\u8A00:
+SimulationExtension.scripting.name = {language}\u811A\u672C
+SimulationExtension.scripting.text.enabled = \u542F\u7528\u811A\u672C
+SimulationExtension.scripting.text.enabled.ttip = \u811A\u672C\u53EA\u6709\u5728\u542F\u7528\u540E\u624D\u4F1A\u88AB\u6267\u884C.
+SimulationExtension.scripting.text.trusted = \u5728\u672C\u673A\u4E0A\u4FE1\u4EFB\u8BE5\u811A\u672C
+SimulationExtension.scripting.text.trusted.clear = \u6E05\u9664\u811A\u672C\u4FE1\u4EFB
+SimulationExtension.scripting.text.trusted.clear.ttip = \u6E05\u9664\u5BF9\u6240\u6709\u811A\u672C\u7684\u4FE1\u4EFB
+SimulationExtension.scripting.text.trusted.cleared = \u6240\u6709\u811A\u672C\u5DF2\u4E0D\u88AB\u672C\u673A\u4FE1\u4EFB.
+SimulationExtension.scripting.text.trusted.cleared.title = \u5DF2\u6E05\u9664
+SimulationExtension.scripting.text.trusted.msg = \u4E0D\u53EF\u4FE1\u7684\u811A\u672C\u4F1A\u5728\u8BFB\u53D6\u65F6\u88AB\u7981\u7528
+SimulationExtension.scripting.warning.disabled = \u4E0D\u53EF\u4FE1\u811A\u672C\u5DF2\u88AB\u7981\u7528. \u4F60\u9700\u8981\u5728\u4EFF\u771F\u9009\u9879\u4E2D\u624B\u52A8\u542F\u7528.
+
SimulationModifierTree.OptimizationParameters = \u4F18\u5316\u53C2\u6570
SimulationPlotPanel.error.noPlotSelected = \u8BF7\u5728Y\u8F74\u6DFB\u52A0\u81F3\u5C111\u4E2A\u53D8\u91CF.
@@ -1034,7 +1105,7 @@ SleeveCfg.tab.Wallthickness = \u58C1\u539A:
SlideShowDialog.btn.next = \u4E0B\u4E00\u9875
SlideShowDialog.btn.prev = \u4E0A\u4E00\u9875
-SlideShowLinkListener.error.msg = \u5F88\u62B1\u6B49, \u6240\u9009\u7684\u6559\u7A0B\u8FD8\u672A\u5B8C\u6210.
+SlideShowLinkListener.error.msg = \u5F88\u9057\u61BE, \u6240\u9009\u7684\u6559\u7A0B\u8FD8\u672A\u88AB\u64B0\u5199.
SlideShowLinkListener.error.title = \u6CA1\u6709\u627E\u5230\u76F8\u5173\u6559\u7A0B
StabilityParameter.name = \u7A33\u5B9A\u6027
@@ -1215,6 +1286,17 @@ TrapezoidFinSetCfg.tab.Generalproperties = \u5E38\u89C4\u5C5E\u6027
! TubeCoupler
TubeCoupler.TubeCoupler = \u8FDE\u63A5\u5668
+TubeFinSet.TubeFinSet = \u7BA1\u5F62\u7FFC
+
+TubeFinSetCfg.checkbox.Automatic = \u81EA\u52A8
+TubeFinSetCfg.lbl.Finrotation = \u7FFC\u7FC5\u65CB\u5EA6:
+TubeFinSetCfg.lbl.Innerdiam = \u5185\u76F4\u5F84:
+TubeFinSetCfg.lbl.Length = \u957F\u5EA6:
+TubeFinSetCfg.lbl.Nbroffins = \u7FFC\u6570\u91CF:
+TubeFinSetCfg.lbl.Outerdiam = \u5916\u76F4\u5F84:
+TubeFinSetCfg.lbl.Thickness = \u539A\u5EA6:
+TubeFinSetCfg.lbl.ttip.Finrotation = \u7A33\u5B9A\u7FFC\u7EC4\u5408\u91CC\u7B2C\u4E00\u7247\u7684\u89D2\u5EA6
+
Warning.DISCONTINUITY = \u7BAD\u4F53\u76F4\u5F84\u4E0D\u8FDE\u7EED.
Warning.FILE_INVALID_PARAMETER = \u65E0\u6548\u53C2\u6570, \u5FFD\u7565.
Warning.JAGGED_EDGED_FIN = \u952F\u9F7F\u7FFC\u9884\u6D4B\u53EF\u80FD\u4E0D\u51C6\u786E.
@@ -1228,6 +1310,7 @@ Warning.RECOVERY_HIGH_SPEED = \u56DE\u6536\u88C5\u7F6E\u5206\u79BB
Warning.RECOVERY_LAUNCH_ROD = \u56DE\u6536\u88C5\u7F6E\u5728\u53D1\u5C04\u67B6\u4E0A\u89E6\u53D1.
Warning.SUPERSONIC = \u8D85\u97F3\u901F\u73AF\u5883\u4E0B\u7684\u8BA1\u7B97\u7ED3\u679C\u53EF\u80FD\u4E0D\u51C6\u786E.
Warning.THICK_FIN = \u539A\u7FFC\u6A21\u578B\u53EF\u80FD\u4E0D\u51C6\u786E.
+Warning.TUMBLE_UNDER_THRUST = \u706B\u7BAD\u7EA7\u5728\u63A8\u529B\u4F5C\u7528\u4E0B\u5F00\u59CB\u503E\u8986.
bugreport.dlg.but.Sendbugreport = \u53D1\u9001\u9519\u8BEF\u62A5\u544A
bugreport.dlg.but.Sendbugreport.Ttip = \u81EA\u52A8\u53D1\u9001\u9519\u8BEF\u62A5\u544A\u7ED9OpenRocket\u5F00\u53D1\u7EC4
@@ -1275,6 +1358,7 @@ compaddbuttons.Shockcord = \u51CF\u9707\u7D22
compaddbuttons.Streamer = \u98D8\u5E26
compaddbuttons.Transition = \u7EA7\u95F4\u6BB5
compaddbuttons.Trapezoidal = \u68AF\u5F62\u7A33\u5B9A\u7FFC
+compaddbuttons.Tubefin = \u7BA1\u5F62\u7FFC
compaddbuttons.askPosition.Addtotheend = \u5728\u5C3E\u90E8\u6DFB\u52A0
compaddbuttons.askPosition.Cancel = \u53D6\u6D88
compaddbuttons.askPosition.Inserthere = \u5728\u6B64\u63D2\u5165
@@ -1417,6 +1501,10 @@ filetypes.images = \u56FE\u50CF\u6587\u4EF6
! General file type names
filetypes.pdf = PDF \u6587\u4EF6 (*.pdf)
+generalprefs.languages.default = \u7CFB\u7EDF\u9ED8\u8BA4
+generalprefs.lbl.language = \u754C\u9762\u8BED\u8A00
+generalprefs.lbl.languageEffect = \u65B0\u7684\u8BED\u8A00\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548.
+
main.menu.analyze = \u5206\u6790
main.menu.analyze.componentAnalysis = \u7EC4\u4EF6\u5206\u6790
main.menu.analyze.componentAnalysis.desc = \u4EC5\u5206\u6790\u706B\u7BAD\u90E8\u4EF6
@@ -1620,12 +1708,15 @@ optimization.modifier.trapezoidfinset.tipChord.desc = \u4F18\u5316\u7FFC\u6
pref.dlg.Add = \u6DFB\u52A0
pref.dlg.Allthrustcurvefiles = \u652F\u6301\u7684\u63A8\u529B\u66F2\u7EBF\u6587\u4EF6(*.eng; *.rse; *.zip; \u6587\u4EF6\u5939)
-pref.dlg.DescriptionArea.Adddirectories = \u4EFB\u4F55\u65B0\u6DFB\u52A0\u7684RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng), RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse), ZIP\u538B\u7F29\u5305\u6216\u6587\u4EF6\u5939\u6240\u5305\u542B\u7684\u63A8\u529B\u66F2\u7EBF\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u540E\u751F\u6548
+pref.dlg.DescriptionArea.Adddirectories = \u4EFB\u4F55\u65B0\u6DFB\u52A0\u7684RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng), RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse), ZIP\u538B\u7F29\u5305\u6216\u6587\u4EF6\u5939\u6240\u5305\u542B\u7684\u63A8\u529B\u66F2\u7EBF\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548
pref.dlg.PrefBooleanSelector1 = \u5220\u9664
pref.dlg.PrefBooleanSelector2 = \u786E\u8BA4
pref.dlg.PrefChoiseSelector1 = \u603B\u662F\u8BE2\u95EE
pref.dlg.PrefChoiseSelector2 = \u63D2\u5728\u4E2D\u95F4
pref.dlg.PrefChoiseSelector3 = \u63D2\u5728\u6700\u540E
+pref.dlg.PrefFontLarge = \u5927
+pref.dlg.PrefFontMedium = \u4E2D
+pref.dlg.PrefFontSmall = \u5C0F
pref.dlg.RASPfiles = RASP\u53D1\u52A8\u673A\u6587\u4EF6(*.eng)
pref.dlg.RockSimfiles = RockSim\u53D1\u52A8\u673A\u6587\u4EF6(*.rse)
pref.dlg.ZIParchives = ZIP\u538B\u7F29\u5305(*.zip)
@@ -1637,6 +1728,8 @@ pref.dlg.but.defaultmetric = \u7F3A\u7701\u516C\u5236
pref.dlg.but.openlast = \u5728\u542F\u52A8\u7684\u65F6\u5019\u6253\u5F00\u4E0A\u6B21\u8BBE\u8BA1
pref.dlg.but.reset = \u91CD\u7F6E
pref.dlg.checkbox.Checkupdates = \u542F\u52A8\u65F6\u68C0\u67E5\u66F4\u65B0
+pref.dlg.checkbox.Runsimulations = \u5728\u67E5\u770B\u4EFF\u771F\u9762\u677F\u65F6\u91CD\u65B0\u8FD0\u884C\u8FC7\u65F6\u7684\u4EFF\u771F\u9879.
+pref.dlg.checkbox.Updateestimates = \u5728\u8BBE\u8BA1\u7A97\u53E3\u66F4\u65B0\u9884\u4F30\u7684\u98DE\u884C\u53C2\u6570.
pref.dlg.lbl.Acceleration = \u52A0\u901F\u5EA6:
pref.dlg.lbl.Angle = \u89D2\u5EA6:
pref.dlg.lbl.Area = \u9762\u79EF:
@@ -1654,6 +1747,7 @@ pref.dlg.lbl.Motordimensions = \u53D1\u52A8\u673A\u5C3A\u5BF8:
pref.dlg.lbl.Positiontoinsert = \u65B0\u7EC4\u4EF6\u63D2\u5165\u4F4D\u7F6E:
pref.dlg.lbl.Pressure = \u538B\u529B:
pref.dlg.lbl.Rocketdimensions = \u706B\u7BAD\u5C3A\u5BF8:
+pref.dlg.lbl.Rocketinfofontsize = \u706B\u7BAD\u8BBE\u8BA1\u9762\u677F\u7684\u6587\u5B57\u5927\u5C0F:
pref.dlg.lbl.Rollrate = \u89D2\u901F\u5EA6:
pref.dlg.lbl.Selectprefunits = \u8BF7\u9009\u62E9\u5355\u4F4D\u5236:
pref.dlg.lbl.Stability = \u7A33\u5B9A\u6027:
@@ -1673,15 +1767,19 @@ pref.dlg.opengl.but.enableAA = \u542F\u7528\u53CD\u952F\u9F7F
pref.dlg.opengl.but.enableGL = \u542F\u7528\u4E09\u7EF4\u56FE\u50CF
pref.dlg.opengl.lbl.title = \u4E09\u7EF4\u56FE\u50CF
pref.dlg.opengl.lbl.useFBO = \u79BB\u7EBF\u6E32\u67D3
+pref.dlg.tab.Colors = \u663E\u793A:
pref.dlg.tab.Custommaterials = \u81EA\u5B9A\u4E49\u6750\u6599
pref.dlg.tab.Defaultunits = \u7F3A\u7701\u5355\u4F4D
pref.dlg.tab.Graphics = \u56FE\u50CF
+pref.dlg.tab.Launch = \u53D1\u5C04
pref.dlg.tab.Materials = \u6750\u6599
pref.dlg.tab.Miscellaneousoptions = \u6742\u9879
pref.dlg.tab.Options = \u9009\u9879
+pref.dlg.tab.Simulation = \u4EFF\u771F
pref.dlg.tab.Units = \u5355\u4F4D\u5236
pref.dlg.title.Preferences = \u9996\u9009\u9879
pref.dlg.ttip.Checkupdatesnow = \u73B0\u5728\u68C0\u67E5\u8F6F\u4EF6\u66F4\u65B0
+pref.dlg.ttip.DefaultMach1 = \u672C\u8BBE\u5B9A\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548.
printdlg.but.preview = \u9884\u89C8
printdlg.but.saveaspdf = \u4FDD\u5B58\u4E3A PDF
@@ -1712,9 +1810,13 @@ simedtdlg.IntensityDesc.Medium = \u4E2D
simedtdlg.IntensityDesc.None = \u65E0
simedtdlg.IntensityDesc.Veryhigh = \u5F88\u9AD8
simedtdlg.IntensityDesc.Verylow = \u5F88\u4F4E
+simedtdlg.SimExt.add = \u6DFB\u52A0\u6269\u5C55
+simedtdlg.SimExt.copyExtension = \u590D\u5236\u6269\u5C55
+simedtdlg.SimExt.desc = \u6A21\u62DF\u6269\u5C55 \u80FD\u5728\u6A21\u62DF\u8FC7\u7A0B\u4E2D\u542F\u7528\u9AD8\u7EA7\u7279\u6027\u4EE5\u53CA\u81EA\u5B9A\u4E49\u529F\u80FD. \u6BD4\u5982\u4F60\u53EF\u4EE5\u505A hardware-in-the-loop \u6D4B\u8BD5.
+simedtdlg.SimExt.noExtensions = \u65E0\u6269\u5C55\u5B9A\u4E49\u9879.
simedtdlg.border.Atmoscond = \u5927\u6C14\u6761\u4EF6
simedtdlg.border.Launchrod = \u53D1\u5C04\u67B6
-simedtdlg.border.Simlist = \u4EFF\u771F\u76D1\u542C\u5668
+simedtdlg.border.SimExt = \u6A21\u62DF\u6269\u5C55
simedtdlg.border.Simopt = \u4EFF\u771F\u9009\u9879
simedtdlg.but.add = \u6DFB\u52A0
simedtdlg.but.remove = \u79FB\u9664
@@ -1725,9 +1827,14 @@ simedtdlg.but.savedefault = \u8BBE\u4E3A\u9ED8\u8BA4
simedtdlg.but.ttip.resettodefault = \u91CD\u7F6E\u65F6\u95F4\u6B65\u957F\u4E3A\u7F3A\u7701\u503C (
simedtdlg.chart.Simflight = \u5DF2\u4EFF\u771F\u7684\u98DE\u884C
simedtdlg.checkbox.InterStdAtmosphere = \u4F7F\u7528\u56FD\u9645\u6807\u51C6\u5927\u6C14\u6A21\u578B
+simedtdlg.checkbox.Intowind = \u603B\u662F\u987A\u98CE\u6216\u9006\u98CE\u53D1\u5C04
simedtdlg.checkbox.ttip.InterStdAtmosphere1 = \u9009\u62E9\u4F7F\u7528\u56FD\u9645\u6807\u51C6\u5927\u6C14\u6A21\u578B.
\u8BE5\u6A21\u578B\u7684\u5927\u6C14\u6E29\u5EA6\u4E3A
simedtdlg.checkbox.ttip.InterStdAtmosphere2 = , \u5927\u6C14\u538B\u4E3A
simedtdlg.checkbox.ttip.InterStdAtmosphere3 = \u4E14\u5747\u4E3A\u6D77\u5E73\u9762\u503C.
+simedtdlg.checkbox.ttip.Intowind1 = \u52FE\u9009\u540E\u53D1\u5C04\u6746\u5C06\u4F1A\u6307\u5411\u98CE\u5411.
+simedtdlg.checkbox.ttip.Intowind2 = 0\u89D2\u5EA6\u53D1\u5C04\u5373\u53D1\u5C04\u6746\u5782\u76F4\u5411\u4E0A.
+simedtdlg.checkbox.ttip.Intowind3 = \u8D1F\u53D1\u5C04\u6746\u89D2\u5EA6\u5C06\u987A\u98CE\u53D1\u5C04.
\u53D6\u6D88\u52FE\u9009\u672C\u9879\u540E\u4F60\u53EF\u4EE5\u6307\u5B9A\u4EFB\u610F\u53D1\u5C04\u6746\u89D2\u5EA6.
+simedtdlg.checkbox.ttip.Intowind4 = \u53D6\u6D88\u52FE\u9009\u672C\u9879\u540E\u4F60\u53EF\u4EE5\u6307\u5B9A\u4EFB\u610F\u53D1\u5C04\u6746\u89D2\u5EA6.
simedtdlg.combo.ttip.Flightcfg = \u9009\u62E9\u8981\u4F7F\u7528\u7684\u98DE\u884C\u914D\u7F6E.
simedtdlg.dlg.Simres = \u4EFF\u771F\u7ED3\u679C
simedtdlg.lbl.Addsimlist = \u6DFB\u52A0\u4EFF\u771F\u76D1\u542C\u5668
@@ -1753,6 +1860,7 @@ simedtdlg.lbl.Temperature = \u6E29\u5EA6:
simedtdlg.lbl.Timestep = \u65F6\u95F4\u6B65\u957F:
simedtdlg.lbl.Turbulenceintensity = \u6E4D\u6D41\u5F3A\u5EA6:
simedtdlg.lbl.Wind = \u98CE\u573A\u6761\u4EF6
+simedtdlg.lbl.Winddirection = \u98CE\u5411:
simedtdlg.lbl.runsimfirst = \u8BF7\u5148\u8FD0\u884C\u4EFF\u771F
simedtdlg.lbl.ttip.Altitude = \u53D1\u5C04\u9AD8\u5EA6\u57FA\u4E8E\u6D77\u5E73\u9762.
\u8FD9\u4F1A\u5F71\u54CD\u5927\u6C14\u6A21\u578B\u4E2D\u706B\u7BAD\u7684\u4F4D\u7F6E.
simedtdlg.lbl.ttip.Angle = \u53D1\u5C04\u67B6\u76F8\u5BF9\u4E8E\u5782\u76F4\u65B9\u5411\u7684\u89D2\u5EA6
@@ -1776,6 +1884,7 @@ simedtdlg.lbl.ttip.Timestep2 = 4\u9636\u6A21\u62DF\u65B9\u6CD5\u9
simedtdlg.lbl.ttip.Turbulenceintensity1 = \u6E4D\u6D41\u5F3A\u5EA6\u8FD1\u4F3C\u4E3A\u6807\u51C6\u5DEE\u9664\u4EE5\u5E73\u5747\u98CE\u901F.
simedtdlg.lbl.ttip.Turbulenceintensity2 = \u5178\u578B\u53D6\u503C\u8303\u56F4\u662F\u4ECE
simedtdlg.lbl.ttip.Turbulenceintensity3 = \u5230
+simedtdlg.lbl.ttip.Winddirection = \u98CE\u5411, 0-360\u5EA6.
0 \u662F\u5317\u98CE,
90 \u662F\u4E1C\u98CE
simedtdlg.tab.CustomExpressions = \u81EA\u5B9A\u4E49\u8868\u8FBE\u5F0F
simedtdlg.tab.Exportdata = \u8F93\u51FA\u6570\u636E
simedtdlg.tab.Launchcond = \u53D1\u5C04\u6761\u4EF6
@@ -1785,40 +1894,42 @@ simedtdlg.title.Editsim = \u7F16\u8F91\u4EFF\u771F
simedtdlg.txt.longA1 = \u4EFF\u771F\u76D1\u542C\u5668(Simulation Listener)\u662F\u4E00\u4E2A\u9AD8\u7EA7\u7279\u6027,\u5141\u8BB8\u7528\u6237\u81EA\u5B9A\u4E49\u4EE3\u7801\u4E0E\u4EFF\u771F\u8FC7\u7A0B\u4EA4\u4E92
simedtdlg.txt.longA2 = \u5173\u4E8E\u4EFF\u771F\u76D1\u542C\u5668\u7684\u8BE6\u7EC6\u4FE1\u606F,\u8BF7\u53C2\u9605OpenRocket\u76F8\u5173\u6280\u672F\u6587\u6863.
-simpanel.but.deletesimulations = \u5220\u9664\u4EFF\u771F
-simpanel.but.editsimulation = \u7F16\u8F91\u4EFF\u771F
+simpanel.but.deletesimulations = \u5220\u9664\u4EFF\u771F
+simpanel.but.editsimulation = \u7F16\u8F91\u4EFF\u771F
! Simulation Panel
-simpanel.but.newsimulation = \u65B0\u5EFA\u4EFF\u771F
-simpanel.but.plotexport = \u7ED8\u56FE/\u8F93\u51FA
-simpanel.but.runsimulations = \u8FD0\u884C\u4EFF\u771F
-simpanel.but.ttip.deletesim = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F
-simpanel.but.ttip.editsim = \u7F16\u8F91\u9009\u4E2D\u7684\u4EFF\u771F
-simpanel.but.ttip.newsimulation = \u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u4EFF\u771F
-simpanel.but.ttip.runsimu = \u91CD\u65B0\u8FD0\u884C\u9009\u4E2D\u7684\u4EFF\u771F
-simpanel.checkbox.donotask = \u4E0D\u518D\u8BE2\u95EE
-simpanel.col.Apogee = \u6700\u9AD8\u70B9
-simpanel.col.Configuration = \u914D\u7F6E
-simpanel.col.Flighttime = \u98DE\u884C\u65F6\u95F4
-simpanel.col.Groundhitvelocity = \u649E\u51FB\u5730\u9762\u901F\u5EA6
-simpanel.col.Maxacceleration = \u6700\u5927\u52A0\u901F\u5EA6
-simpanel.col.Maxvelocity = \u6700\u5927\u901F\u5EA6
-simpanel.col.Motors = \u53D1\u52A8\u673A
-simpanel.col.Name = \u540D\u79F0
-simpanel.col.Timetoapogee = \u6700\u9AD8\u70B9\u65F6\u95F4
-simpanel.col.Velocityatdeploy = \u6709\u6548\u8D1F\u8377\u901F\u5EA6
-simpanel.col.Velocityoffrod = \u79BB\u67B6\u901F\u5EA6
-simpanel.dlg.lbl.DeleteSim1 = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F?
-simpanel.dlg.lbl.DeleteSim2 = \u8BE5\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500.
-simpanel.dlg.lbl.DeleteSim3 = \u5220\u9664\u4EFF\u771F
-simpanel.lbl.defpref = \u60A8\u53EF\u5728\u9996\u9009\u9879\u4E2D\u4FEE\u6539\u9ED8\u8BA4\u64CD\u4F5C.
-simpanel.ttip.external = \u5BFC\u5165\u7684\u6570\u636E
-simpanel.ttip.loaded = \u4ECE\u6587\u4EF6\u8F7D\u5165\u6570\u636E
-simpanel.ttip.noData = \u6CA1\u6709\u53EF\u7528\u7684\u4EFF\u771F\u6570\u636E.
-simpanel.ttip.noWarnings = \u6CA1\u6709\u8B66\u544A.
-simpanel.ttip.notSimulated = \u672A\u8FDB\u884C\u8FC7\u4EFF\u771F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F.
-simpanel.ttip.outdated = \u6570\u636E\u5DF2\u8FC7\u671F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F\u91CD\u65B0\u8BA1\u7B97.
-simpanel.ttip.uptodate = \u6700\u65B0\u7684\u6570\u636E
-simpanel.ttip.warnings = \u8B66\u544A:
+simpanel.but.newsimulation = \u65B0\u5EFA\u4EFF\u771F
+simpanel.but.plotexport = \u7ED8\u56FE/\u8F93\u51FA
+simpanel.but.runsimulations = \u8FD0\u884C\u4EFF\u771F
+simpanel.but.ttip.deletesim = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F
+simpanel.but.ttip.editsim = \u7F16\u8F91\u9009\u4E2D\u7684\u4EFF\u771F
+simpanel.but.ttip.newsimulation = \u6DFB\u52A0\u4E00\u4E2A\u65B0\u7684\u4EFF\u771F
+simpanel.but.ttip.runsimu = \u91CD\u65B0\u8FD0\u884C\u9009\u4E2D\u7684\u4EFF\u771F
+simpanel.checkbox.donotask = \u4E0D\u518D\u8BE2\u95EE
+simpanel.col.Apogee = \u6700\u9AD8\u70B9
+simpanel.col.Configuration = \u914D\u7F6E
+simpanel.col.Flighttime = \u98DE\u884C\u65F6\u95F4
+simpanel.col.Groundhitvelocity = \u649E\u51FB\u5730\u9762\u901F\u5EA6
+simpanel.col.Maxacceleration = \u6700\u5927\u52A0\u901F\u5EA6
+simpanel.col.Maxvelocity = \u6700\u5927\u901F\u5EA6
+simpanel.col.Motors = \u53D1\u52A8\u673A
+simpanel.col.Name = \u540D\u79F0
+simpanel.col.OptimumCoastTime = \u6700\u957F\u5EF6\u6EDE\u65F6\u95F4
+simpanel.col.OptimumCoastTime.ttip = \u4ECE\u6700\u540E\u4E00\u7EA7\u53D1\u52A8\u673A\u71C3\u5C3D\u81F3\u8FBE\u5230\u6700\u9AD8\u9AD8\u5EA6\u7684\u65F6\u95F4.
+simpanel.col.Timetoapogee = \u6700\u9AD8\u70B9\u65F6\u95F4
+simpanel.col.Velocityatdeploy = \u6709\u6548\u8D1F\u8377\u901F\u5EA6
+simpanel.col.Velocityoffrod = \u79BB\u67B6\u901F\u5EA6
+simpanel.dlg.lbl.DeleteSim1 = \u5220\u9664\u9009\u4E2D\u7684\u4EFF\u771F?
+simpanel.dlg.lbl.DeleteSim2 = \u8BE5\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500.
+simpanel.dlg.lbl.DeleteSim3 = \u5220\u9664\u4EFF\u771F
+simpanel.lbl.defpref = \u60A8\u53EF\u5728\u9996\u9009\u9879\u4E2D\u4FEE\u6539\u9ED8\u8BA4\u64CD\u4F5C.
+simpanel.ttip.external = \u5BFC\u5165\u7684\u6570\u636E
+simpanel.ttip.loaded = \u4ECE\u6587\u4EF6\u8F7D\u5165\u6570\u636E
+simpanel.ttip.noData = \u6CA1\u6709\u53EF\u7528\u7684\u4EFF\u771F\u6570\u636E.
+simpanel.ttip.noWarnings = \u6CA1\u6709\u8B66\u544A.
+simpanel.ttip.notSimulated = \u672A\u8FDB\u884C\u8FC7\u4EFF\u771F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F.
+simpanel.ttip.outdated = \u6570\u636E\u5DF2\u8FC7\u671F
\u70B9\u51FB\u8FD0\u884C\u4EFF\u771F\u91CD\u65B0\u8BA1\u7B97.
+simpanel.ttip.uptodate = \u6700\u65B0\u7684\u6570\u636E
+simpanel.ttip.warnings = \u8B66\u544A:
simplotpanel.AUTO_NAME = \u81EA\u52A8
simplotpanel.CUSTOM = \u81EA\u5B9A\u4E49