diff --git a/README.md b/README.md
index 45560e84ad..27b7d473ab 100644
--- a/README.md
+++ b/README.md
@@ -113,7 +113,7 @@ The application was made in Czech Republic.
### Translators
* **Jaume Badiella Aguilera** - catalan translation
* **Capasha** - swedish translation
-* **王晨旭** (Chenxu Wang), **晓之车**, **安安**, **流水渺渺** - chinese translation
+* **王晨旭** (Chenxu Wang), **晓之车**, **安安**, **流水渺渺**, **老biu** - chinese translation
* **focus** - russian translation
* **honfika** - hungarian translation
* **kalip** - italian translation
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS2_zh.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS2_zh.properties
index 131ad9e3b1..5e90ef27d8 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS2_zh.properties
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/docs/pcode/AS2_zh.properties
@@ -1,5 +1,612 @@
+#String for whole list generation
+ui.list.heading = \u52a8\u4f5c\u5217\u8868
+ui.list.pageTitle = \u52a8\u4f5c\u5217\u8868
+ui.list.documentTitle = \u52a8\u4f5c\u5217\u8868
+ui.list.pageDescription = \u6240\u6709\u5df2\u77e5\u64cd\u4f5c\u53ca\u5176\u64cd\u4f5c\u6570\u548c\u5806\u6808\u503c\u7684\u5217\u8868
+#various strings in UI:
+ui.unknown = ???
+ui.stack = \u5806\u6808:
+ui.stack.before = ...,
+ui.stack.before.empty = ...
+ui.stack.to = \ \u279e
+ui.flags = \u6807\u7b7e:
+ui.description = \u8bf4\u660e:
+ui.filter.hide = \u9690\u85cf:
+ui.filter.byname = \u6309\u540d\u79f0\u67e5\u627e:
+ui.filter.order = \u6392\u5e8f:
+ui.filter.order.code = \u4ee3\u7801
+ui.filter.order.name = \u540d\u79f0
+ui.swfVersion = \u81eaSWF\u7248\u672c\u4ee5\u6765:
+#----------------------- Actions
+action.gotoframe.name = GotoFrame
+action.gotoframe.code = 0x81
+action.gotoframe.swfVersion = 3
+action.gotoframe.shortDescription = \u8f6c\u5230\u5e27
+action.gotoframe.operands = frame:UI16
+action.geturl.name = GetURL
+action.geturl.code = 0x83
+action.geturl.swfVersion = 3
+action.geturl.shortDescription = \u83b7\u53d6URL
+action.geturl.operands = urlString:STRING, targetString:STRING
+action.nextframe.name = NextFrame
+action.nextframe.code = 0x04
+action.nextframe.swfVersion = 3
+action.nextframe.shortDescription = \u8f6c\u5230\u4e0b\u4e00\u5e27
+action.prevframe.name = PrevFrame
+action.prevframe.code = 0x05
+action.prevframe.swfVersion = 3
+action.prevframe.shortDescription = \u8f6c\u5230\u4e0a\u4e00\u5e27
+action.play.name = Play
+action.play.code = 0x06
+action.play.swfVersion = 3
+action.play.shortDescription = \u64ad\u653e
+action.play.description = \u4ece\u5f53\u524d\u5e27\u5f00\u59cb\u64ad\u653e
+action.stop.name = Stop
+action.stop.code = 0x07
+action.stop.swfVersion = 3
+action.stop.shortDescription = \u505c\u6b62\u64ad\u653e
+action.stop.description = \u5728\u5f53\u524d\u5e27\u505c\u6b62\u64ad\u653e
action.stop.stackBefore =
action.stop.stackAfter =
action.stop.operands =
+action.togglequality.name = ToggleQuality
+action.togglequality.code = 0x08
+action.togglequality.swfVersion = 3
+action.togglequality.shortDescription = \u5207\u6362\u8d28\u91cf
+action.togglequality.description = \u5728\u9ad8\u548c\u4f4e\u4e4b\u95f4\u5207\u6362\u663e\u793a\u8d28\u91cf
action.togglequality.stackBefore =
action.togglequality.stackAfter =
+action.stopsounds.name = StopSounds
+action.stopsounds.code = 0x09
+action.stopsounds.swfVersion = 3
+action.stopsounds.shortDescription = \u505c\u6b62\u58f0\u97f3
+action.stopsounds.description = \u505c\u6b62\u64ad\u653e\u6240\u6709\u58f0\u97f3
+action.waitforframe.name = WaitForFrame
+action.waitforframe.code = 0x8A
+action.waitforframe.swfVersion = 3
+action.waitforframe.shortDescription = \u7b49\u5f85\u5e27
+action.waitforframe.operands = frame:UI16, skipCount:UI8
+action.settarget.name = SetTarget
+action.settarget.code = 0x8B
+action.settarget.swfVersion = 3
+action.settarget.shortDescription = \u8bbe\u5b9a\u76ee\u6807
+action.settarget.description = \u66f4\u6539\u540e\u7eed\u52a8\u4f5c\u7684\u4e0a\u4e0b\u6587
+action.settarget.operands = targetName:STRING
+action.gotolabel.name = GoToLabel
+action.gotolabel.code = 0x8C
+action.gotolabel.swfVersion = 3
+action.gotolabel.shortDescription = \u8f6c\u5230\u6807\u7b7e
+action.gotolabel.description = \u8f6c\u5230\u4e0e\u6307\u5b9a\u6807\u7b7e\u5173\u8054\u7684\u5e27
+action.gotolabel.operands = label:STRING
+action.push.name = Push
+action.push.code = 0x96
+action.push.swfVersion = 4
+action.push.shortDescription = \u63a8\u9001\u503c(s)
+action.push.description = \u5c06\u4e00\u4e2a\u6216\u591a\u4e2a\u503c\u63a8\u9001\u5230\u5806\u6808
+action.push.stackAfter = value1, value2, ...
+action.push.operands = value1:*, [value2:*, ...]
+action.pop.name = Pop
+action.pop.code = 0x17
+action.pop.swfVersion = 4
+action.pop.shortDescription = \u5f39\u51fa\u503c
+action.pop.description = \u4ece\u5806\u6808\u4e2d\u5f39\u51fa\u503c\u5e76\u5c06\u5176\u4e22\u5f03
+action.pop.stackBefore = value
+action.add.name = Add
+action.add.code = 0x0A
+action.add.swfVersion = 4
+action.add.shortDescription = \u6dfb\u52a0\u4e24\u4e2a\u503c
+action.add.description = \u5c06\u4e24\u4e2a\u6570\u5b57\u76f8\u52a0\u5e76\u5c06\u7ed3\u679c\u63a8\u56de\u5806\u6808
+action.add.stackBefore = value1, value2
+action.add.stackAfter = result
+action.subtract.name = Subtract
+action.subtract.code = 0x0B
+action.subtract.swfVersion = 4
+action.subtract.shortDescription = \u51cf\u53bb\u4e24\u4e2a\u503c
+action.subtract.description = \u51cf\u53bb\u4e24\u4e2a\u6570\u5b57\u5e76\u5c06\u7ed3\u679c\u63a8\u56de\u5806\u6808
+action.subtract.stackBefore = value1, value2
+action.subtract.stackAfter = result
+action.multiply.name = Multiply
+action.multiply.code = 0x0C
+action.multiply.swfVersion = 4
+action.multiply.shortDescription = \u5c06\u4e24\u4e2a\u503c\u76f8\u4e58
+action.multiply.description = \u5c06\u4e24\u4e2a\u6570\u5b57\u76f8\u4e58\u5e76\u5c06\u7ed3\u679c\u63a8\u56de\u5806\u6808
+action.multiply.stackBefore = value1, value2
+action.multiply.stackAfter = result
+action.divide.name = Divide
+action.divide.code = 0x0D
+action.divide.swfVersion = 4
+action.divide.shortDescription = \u5c06\u4e24\u4e2a\u503c\u76f8\u9664
+action.divide.description = \u5c06\u4e24\u4e2a\u6570\u5b57\u76f8\u9664\u5e76\u5c06\u7ed3\u679c\u63a8\u56de\u5806\u6808
+action.divide.stackBefore = value1, value2
+action.divide.stackAfter = result
+action.equals.name = Equals
+action.equals.code = 0x0E
+action.equals.swfVersion = 4
+action.equals.shortDescription = \u68c0\u67e5\u4e24\u4e2a\u503c\u662f\u5426\u76f8\u7b49
+action.equals.stackBefore = value1, value2
+action.equals.stackAfter = booleanResult
+action.less.name = Less
+action.less.code = 0x0F
+action.less.swfVersion = 4
+action.less.shortDescription = \u68c0\u67e5\u8be5\u503c\u662f\u5426\u5c0f\u4e8e\u5176\u4ed6\u503c
+action.less.stackBefore = value1, value2
+action.less.stackAfter = booleanResult
+action.and.name = And
+action.and.code = 0x10
+action.and.swfVersion = 4
+action.and.shortDescription = \u903b\u8f91\u4e0e
+action.and.description = \u5bf9\u4e24\u4e2a\u6570\u5b57\u6267\u884c\u903b\u8f91\u4e0e\u8fd0\u7b97
+action.and.stackBefore = value1, value2
+action.and.stackAfter = booleanResult
+action.or.name = Or
+action.or.code = 0x11
+action.or.swfVersion = 4
+action.or.shortDescription = \u903b\u8f91\u6216
+action.or.description = \u5bf9\u4e24\u4e2a\u6570\u5b57\u6267\u884c\u903b\u8f91\u6216\u8fd0\u7b97
+action.or.stackBefore = value1, value2
+action.or.stackAfter = booleanResult
+action.not.name = Not
+action.not.code = 0x12
+action.not.swfVersion = 4
+action.not.shortDescription = \u903b\u8f91\u975e
+action.not.description = \u5bf9\u4e00\u4e2a\u6570\u5b57\u6267\u884c\u903b\u8f91\u975e\u8fd0\u7b97
+action.not.stackBefore = value
+action.not.stackAfter = booleanResult
+action.stringequals.name = StringEquals
+action.stringequals.code = 0x13
+action.stringequals.swfVersion = 4
+action.stringequals.shortDescription = \u68c0\u67e5\u4e24\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u76f8\u7b49
+action.stringequals.stackBefore = value1, value2
+action.stringequals.stackAfter = booleanResult
+action.stringlength.name = StringLength
+action.stringlength.code = 0x14
+action.stringlength.swfVersion = 4
+action.stringlength.shortDescription = \u5b57\u7b26\u4e32\u7684\u957f\u5ea6
+action.stringlength.description = \u8ba1\u7b97\u5b57\u7b26\u4e32\u7684\u957f\u5ea6
+action.stringlength.stackBefore = value
+action.stringlength.stackAfter = result
+action.stringadd.name = StringAdd
+action.stringadd.code = 0x21
+action.stringadd.swfVersion = 4
+action.stringadd.shortDescription = \u8fde\u63a5\u4e24\u4e2a\u5b57\u7b26\u4e32
+action.stringadd.stackBefore = value1, value2
+action.stringadd.stackAfter = result
+action.stringextract.name = StringExtract
+action.stringextract.code = 0x15
+action.stringextract.swfVersion = 4
+action.stringextract.shortDescription = \u4ece\u5b57\u7b26\u4e32\u4e2d\u63d0\u53d6\u5b50\u5b57\u7b26\u4e32
+action.stringextract.stackBefore = count, index, string
+action.stringextract.stackAfter = result
+action.stringless.name = StringLess
+action.stringless.code = 0x29
+action.stringless.swfVersion = 4
+action.stringless.shortDescription = \u68c0\u67e5\u5b57\u7b26\u4e32\u662f\u5426\u5c0f\u4e8e\u5176\u4ed6\u5b57\u7b26\u4e32
+action.stringless.stackBefore = value1, value2
+action.stringless.stackAfter = booleanResult
+action.mbstringlength.name = MBStringLength
+action.mbstringlength.code = 0x31
+action.mbstringlength.swfVersion = 4
+action.mbstringlength.shortDescription = \u5b57\u7b26\u4e32\u957f\u5ea6\u591a\u5b57\u8282\u611f\u77e5
+action.mbstringlength.description = \u8ba1\u7b97\u591a\u5b57\u8282\u611f\u77e5\u5b57\u7b26\u4e32\u7684\u957f\u5ea6
+action.mbstringlength.stackBefore = value
+action.mbstringlength.stackAfter = result
+action.mbstringextract.name = MBStringExtract
+action.mbstringextract.code = 0x35
+action.mbstringextract.swfVersion = 4
+action.mbstringextract.shortDescription = \u4ece\u652f\u6301\u591a\u5b57\u8282\u7684\u5b57\u7b26\u4e32\u4e2d\u63d0\u53d6\u5b50\u5b57\u7b26\u4e32
+action.mbstringextract.stackBefore = count, index, string
+action.mbstringextract.stackAfter = result
+action.tointeger.name = ToInteger
+action.tointeger.code = 0x18
+action.tointeger.swfVersion = 4
+action.tointeger.shortDescription = \u5c06\u503c\u8f6c\u6362\u4e3a\u6574\u6570
+action.tointeger.stackBefore = value
+action.tointeger.stackAfter = result
+action.chartoascii.name = CharToAscii
+action.chartoascii.code = 0x32
+action.chartoascii.swfVersion = 4
+action.chartoascii.shortDescription = \u5c06\u5b57\u7b26\u4ee3\u7801\u8f6c\u6362\u4e3aASCII\u7801
+action.chartoascii.stackBefore = value
+action.chartoascii.stackAfter = result
+action.asciitochar.name = AsciiToChar
+action.asciitochar.code = 0x33
+action.asciitochar.swfVersion = 4
+action.asciitochar.shortDescription = \u5c06\u503c\u8f6c\u6362\u4e3aASCII\u5b57\u7b26\u4ee3\u7801
+action.asciitochar.stackBefore = value
+action.asciitochar.stackAfter = result
+action.mbchartoascii.name = MBCharToAscii
+action.mbchartoascii.code = 0x36
+action.mbchartoascii.swfVersion = 4
+action.mbchartoascii.shortDescription = \u5c06\u5b57\u7b26\u4ee3\u7801\u8f6c\u6362\u4e3aASCII\u591a\u5b57\u8282\u611f\u77e5
+action.mbchartoascii.stackBefore = value
+action.mbchartoascii.stackAfter = result
+action.mbasciitochar.name = MBAsciiToChar
+action.mbasciitochar.code = 0x37
+action.mbasciitochar.swfVersion = 4
+action.mbasciitochar.shortDescription = \u5c06\u503c\u8f6c\u6362\u4e3a\u652f\u6301\u591a\u5b57\u8282\u7684ASCII\u5b57\u7b26\u4ee3\u7801
+action.mbasciitochar.stackBefore = value
+action.mbasciitochar.stackAfter = result
+action.jump.name = Jump
+action.jump.code = 0x99
+action.jump.swfVersion = 4
+action.jump.shortDescription = \u8df3\u8f6c\u5230\u4f4d\u7f6e
+action.jump.operands = location:identifier
+action.if.name = If
+action.if.code = 0x9D
+action.if.swfVersion = 4
+action.if.shortDescription = \u5982\u679c\u5206\u652f
+action.if.description = \u521b\u5efa\u6761\u4ef6\u6d4b\u8bd5\u548c\u5206\u652f
+action.if.stackBefore = condition
+action.if.operands = branchTarget:identifier
+action.call.name = Call
+action.call.code = 0x9E
+action.call.swfVersion = 4
+action.call.shortDescription = \u8c03\u7528\u5b50\u7a0b\u5e8f
+action.call.stackBefore = value
+action.getvariable.name = GetVariable
+action.getvariable.code = 0x1C
+action.getvariable.swfVersion = 4
+action.getvariable.shortDescription = \u83b7\u53d6\u53d8\u91cf\u503c
+action.getvariable.stackBefore = name
+action.getvariable.stackAfter = value
+action.setvariable.name = SetVariable
+action.setvariable.code = 0x1D
+action.setvariable.swfVersion = 4
+action.setvariable.shortDescription = \u8bbe\u7f6e\u53d8\u91cf\u503c
+action.setvariable.stackBefore = value, name
+action.geturl2.name = GetURL2
+action.geturl2.code = 0x9A
+action.geturl2.swfVersion = 4
+action.geturl2.shortDescription = \u83b7\u53d6URL(\u57fa\u4e8e\u5806\u6808)
+action.geturl2.stackBefore = target, url
+# Note: official documentation has the order of fields wrong
+action.geturl2.operands = loadVariablesFlag:boolean, loadTargetFlag:boolean, sendVarsMethod:integer
+action.gotoframe2.name = GotoFrame2
+action.gotoframe2.code = 0x9F
+action.gotoframe2.swfVersion = 4
+action.gotoframe2.shortDescription = \u8f6c\u5230\u5e27(\u57fa\u4e8e\u5806\u6808)
+action.gotoframe2.stackBefore = frame
+action.gotoframe2.operands = sceneBiasFlag:boolean, playFlag:boolean, [sceneBias:UI16]
+action.settarget2.name = SetTarget2
+action.settarget2.code = 0x20
+action.settarget2.swfVersion = 4
+action.settarget2.shortDescription = \u8bbe\u7f6e\u5f53\u524d\u4e0a\u4e0b\u6587(\u57fa\u4e8e\u5806\u6808)
+action.settarget2.stackBefore = target
+action.getproperty.name = GetProperty
+action.getproperty.code = 0x22
+action.getproperty.swfVersion = 4
+action.getproperty.shortDescription = \u83b7\u53d6\u5c5e\u6027\u503c
+action.getproperty.stackBefore = index, target
+action.getproperty.stackAfter = value
+action.setproperty.name = SetProperty
+action.setproperty.code = 0x23
+action.setproperty.swfVersion = 4
+action.setproperty.shortDescription = \u8bbe\u7f6e\u5c5e\u6027\u503c
+action.setproperty.stackBefore = value, index, target
+action.clonesprite.name = CloneSprite
+action.clonesprite.code = 0x24
+action.clonesprite.swfVersion = 4
+action.clonesprite.shortDescription = \u514b\u9686\u4e00\u4e2a\u7cbe\u7075
+action.clonesprite.stackBefore = depth, target, source
+action.removesprite.name = RemoveSprite
+action.removesprite.code = 0x25
+action.removesprite.swfVersion = 4
+action.removesprite.shortDescription = \u79fb\u9664\u7cbe\u7075
+action.removesprite.stackBefore = target
+action.startdrag.name = StartDrag
+action.startdrag.code = 0x27
+action.startdrag.swfVersion = 4
+action.startdrag.shortDescription = \u5f00\u59cb\u62d6\u52a8\u4e00\u4e2a\u5f71\u7247\u526a\u8f91
+action.startdrag.stackBefore = target, lockcenter, constrain, [y2, x2, y1, x1]
+action.enddrag.name = EndDrag
+action.enddrag.code = 0x28
+action.enddrag.swfVersion = 4
+action.enddrag.shortDescription = \u7ed3\u675f\u62d6\u52a8\u64cd\u4f5c
+action.waitforframe2.name = WaitForFrame2
+action.waitforframe2.code = 0x8D
+action.waitforframe2.swfVersion = 4
+action.waitforframe2.shortDescription = \u7b49\u5f85\u5e27(\u57fa\u4e8e\u5806\u6808)
+action.waitforframe2.stackBefore = frame
+action.waitforframe2.operands = skipCount:UI8
+action.trace.name = Trace
+action.trace.code = 0x26
+action.trace.swfVersion = 4
+action.trace.shortDescription = \u53d1\u9001\u8c03\u8bd5\u8f93\u51fa\u5b57\u7b26\u4e32
+action.trace.stackBefore = value
+action.gettime.name = GetTime
+action.gettime.code = 0x34
+action.gettime.swfVersion = 4
+action.gettime.shortDescription = \u83b7\u53d6FP\u542f\u52a8\u540e\u7684\u6beb\u79d2\u6570
+action.gettime.stackAfter = value
+action.randomnumber.name = RandomNumber
+action.randomnumber.code = 0x30
+action.randomnumber.swfVersion = 4
+action.randomnumber.shortDescription = \u8ba1\u7b97\u968f\u673a\u6570
+action.randomnumber.stackBefore = maximum
+action.randomnumber.stackAfter = result
+action.callfunction.name = CallFunction
+action.callfunction.code = 0x3D
+action.callfunction.swfVersion = 5
+action.callfunction.shortDescription = \u6267\u884c\u4e00\u4e2a\u51fd\u6570
+action.callfunction.stackBefore = functionName, numArgs, [argument1, argument2, ...]
+action.callfunction.stackAfter = result
+action.callmethod.name = CallMethod
+action.callmethod.code = 0x52
+action.callmethod.swfVersion = 5
+action.callmethod.shortDescription = \u5728\u5bf9\u8c61\u4e0a\u6267\u884c\u65b9\u6cd5
+action.callmethod.stackBefore = methodName, object, numArgs, [argument1, argument2, ...]
+action.callmethod.stackAfter = result
+action.constantpool.name = ConstantPool
+action.constantpool.code = 0x88
+action.constantpool.swfVersion = 5
+action.constantpool.shortDescription = \u521b\u5efa\u65b0\u7684\u5e38\u91cf\u6c60
+action.constantpool.operands = constant1:STRING, [constant2:STRING, ...]
+action.definefunction.name = DefineFunction
+action.definefunction.code = 0x9B
+action.definefunction.swfVersion = 5
+action.definefunction.shortDescription = \u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570
+action.definefunction.stackAfter = result
+action.definefunction.operands = functionName:STRING, numParams:UI16, [paramName1, paramName2, ...]
+action.definelocal.name = DefineLocal
+action.definelocal.code = 0x3C
+action.definelocal.swfVersion = 5
+action.definelocal.shortDescription = \u5b9a\u4e49\u5c40\u90e8\u53d8\u91cf\u5e76\u8bbe\u7f6e\u5176\u503c
+action.definelocal.stackBefore = value, name
+action.definelocal2.name = DefineLocal2
+action.definelocal2.code = 0x41
+action.definelocal2.swfVersion = 5
+action.definelocal2.shortDescription = \u5b9a\u4e49\u5c40\u90e8\u53d8\u91cf\u800c\u4e0d\u8bbe\u7f6e\u5176\u503c
+action.definelocal2.stackBefore = name
+action.delete.name = Delete
+action.delete.code = 0x3A
+action.delete.swfVersion = 5
+action.delete.shortDescription = \u4ecescriptObject\u4e2d\u5220\u9664\u547d\u540d\u5c5e\u6027
+action.delete.stackBefore = name, object
+action.delete2.name = Delete2
+action.delete2.code = 0x3B
+action.delete2.swfVersion = 5
+action.delete2.shortDescription = \u5220\u9664\u547d\u540d\u5c5e\u6027
+action.delete2.stackBefore = name
+action.enumerate.name = Enumerate
+action.enumerate.code = 0x46
+action.enumerate.swfVersion = 5
+action.enumerate.shortDescription = \u4ece\u5bf9\u8c61\u4e2d\u83b7\u53d6\u6240\u6709\u69fd\u7684\u540d\u79f0
+action.enumerate.stackBefore = objectName
+action.enumerate.stackAfter = null, [slotName1, slotName2, ...]
+action.equals2.name = Equals2
+action.equals2.code = 0x49
+action.equals2.swfVersion = 5
+action.equals2.shortDescription = \u6839\u636e\u7c7b\u578b\u68c0\u67e5\u4e24\u4e2a\u503c\u662f\u5426\u76f8\u7b49
+action.equals2.stackBefore = value1, value2
+action.equals2.stackAfter = result
+action.getmember.name = GetMember
+action.getmember.code = 0x4E
+action.getmember.swfVersion = 5
+action.getmember.shortDescription = \u4ece\u5bf9\u8c61\u4e2d\u83b7\u53d6\u547d\u540d\u5c5e\u6027
+action.getmember.stackBefore = propertyName, object
+action.getmember.stackAfter = result
+action.initarray.name = InitArray
+action.initarray.code = 0x42
+action.initarray.swfVersion = 5
+action.initarray.shortDescription = \u521d\u59cb\u5316\u6570\u7ec4
+action.initarray.stackBefore = numArgs, [argument1, argument2, ...]
+action.initarray.stackAfter = result
+action.initobject.name = InitObject
+action.initobject.code = 0x43
+action.initobject.swfVersion = 5
+action.initobject.shortDescription = \u521d\u59cb\u5316\u5bf9\u8c61
+action.initobject.stackBefore = numProps, [value1, name1, value2, name2, ...]
+action.initobject.stackAfter = result
+action.newmethod.name = NewMethod
+action.newmethod.code = 0x53
+action.newmethod.swfVersion = 5
+action.newmethod.shortDescription = \u8c03\u7528\u6784\u9020\u65b9\u6cd5\u5e76\u521b\u5efa\u65b0\u5bf9\u8c61
+action.newmethod.stackBefore = methodName, object, numArgs, [argument1, argument2, ...]
+action.newmethod.stackAfter = result
+action.newobject.name = NewObject
+action.newobject.code = 0x40
+action.newobject.swfVersion = 5
+action.newobject.shortDescription = \u8c03\u7528\u6784\u9020\u51fd\u6570\u5e76\u521b\u5efa\u65b0\u5bf9\u8c61
+action.newobject.stackBefore = objectName, numArgs, [argument1, argument2, ...]
+action.newobject.stackAfter = result
+action.setmember.name = SetMember
+action.setmember.code = 0x4F
+action.setmember.swfVersion = 5
+action.setmember.shortDescription = \u8bbe\u7f6e\u5bf9\u8c61\u7684\u547d\u540d\u5c5e\u6027
+action.setmember.stackBefore = value, propertyName, object
+action.targetpath.name = TargetPath
+action.targetpath.code = 0x45
+action.targetpath.swfVersion = 5
+action.targetpath.shortDescription = \u83b7\u53d6\u5bf9\u8c61\u76ee\u6807\u8def\u5f84
+action.targetpath.stackBefore = object
+action.targetpath.stackAfter = result
+action.with.name = With
+action.with.code = 0x94
+action.with.swfVersion = 5
+action.with.shortDescription = \u7528\u5757\u5b9a\u4e49
+action.with.stackBefore = object
+action.tonumber.name = ToNumber
+action.tonumber.code = 0x4A
+action.tonumber.swfVersion = 5
+action.tonumber.shortDescription = \u5c06\u503c\u8f6c\u6362\u4e3a\u6570\u5b57
+action.tonumber.stackBefore = value
+action.tonumber.stackAfter = result
+action.tostring.name = ToString
+action.tostring.code = 0x4B
+action.tostring.swfVersion = 5
+action.tostring.shortDescription = \u5c06\u503c\u8f6c\u6362\u4e3a\u5b57\u7b26\u4e32
+action.tostring.stackBefore = value
+action.tostring.stackAfter = result
+action.typeof.name = TypeOf
+action.typeof.code = 0x44
+action.typeof.swfVersion = 5
+action.typeof.shortDescription = \u83b7\u53d6\u5bf9\u8c61\u7c7b\u578b
+action.typeof.stackBefore = value
+action.typeof.stackAfter = result
+action.add2.name = Add2
+action.add2.code = 0x47
+action.add2.swfVersion = 5
+action.add2.shortDescription = \u6839\u636e\u7c7b\u578b\u6dfb\u52a0\u4e24\u4e2a\u503c
+action.add2.stackBefore = value1, value2
+action.add2.stackAfter = result
+action.less2.name = Less2
+action.less2.code = 0x48
+action.less2.swfVersion = 5
+action.less2.shortDescription = \u6839\u636e\u7c7b\u578b\u68c0\u67e5\u8be5\u503c\u662f\u5426\u5c0f\u4e8e\u5176\u4ed6\u503c
+action.less2.stackBefore = value1, value2
+action.less2.stackAfter = booleanResult
+action.modulo.name = Modulo
+action.modulo.code = 0x3F
+action.modulo.swfVersion = 5
+action.modulo.shortDescription = \u8ba1\u7b97\u4e24\u4e2a\u6570\u7684\u6a21
+action.modulo.description = \u8ba1\u7b97\u4e24\u4e2a\u6570\u5b57\u7684\u6a21\u5e76\u5c06\u7ed3\u679c\u63a8\u56de\u5806\u6808
+action.modulo.stackBefore = value1, value2
+action.modulo.stackAfter = result
+action.bitand.name = BitAnd
+action.bitand.code = 0x60
+action.bitand.swfVersion = 5
+action.bitand.shortDescription = \u6309\u4f4d\u4e0e
+action.bitand.description = \u5bf9\u4e24\u4e2a\u6570\u5b57\u6267\u884c\u6309\u4f4d\u4e0e\u8fd0\u7b97
+action.bitand.stackBefore = value1, value2
+action.bitand.stackAfter = result
+action.bitlshift.name = BitLShift
+action.bitlshift.code = 0x63
+action.bitlshift.swfVersion = 5
+action.bitlshift.shortDescription = \u5de6\u79fb\u4f4d
+action.bitlshift.stackBefore = shiftCount, value
+action.bitlshift.stackAfter = result
+action.bitor.name = BitOr
+action.bitor.code = 0x61
+action.bitor.swfVersion = 5
+action.bitor.shortDescription = \u6309\u4f4d\u6216
+action.bitor.description = \u5bf9\u4e24\u4e2a\u6570\u5b57\u6267\u884c\u6309\u4f4d\u6216\u8fd0\u7b97
+action.bitor.stackBefore = value1, value2
+action.bitor.stackAfter = result
+action.bitrshift.name = BitRShift
+action.bitrshift.code = 0x64
+action.bitrshift.swfVersion = 5
+action.bitrshift.shortDescription = \u53f3\u79fb\u4f4d
+action.bitrshift.stackBefore = shiftCount, value
+action.bitrshift.stackAfter = result
+action.biturshift.name = BitURShift
+action.biturshift.code = 0x65
+action.biturshift.swfVersion = 5
+action.biturshift.shortDescription = \u65e0\u7b26\u53f7\u53f3\u79fb
+action.biturshift.stackBefore = shiftCount, value
+action.biturshift.stackAfter = result
+action.bitxor.name = BitXor
+action.bitxor.code = 0x62
+action.bitxor.swfVersion = 5
+action.bitxor.shortDescription = \u6309\u4f4d\u5f02\u6216
+action.bitxor.description = \u5bf9\u4e24\u4e2a\u6570\u5b57\u6267\u884c\u6309\u4f4d\u5f02\u6216\u8fd0\u7b97
+action.bitxor.stackBefore = value1, value2
+action.bitxor.stackAfter = result
+action.decrement.name = Decrement
+action.decrement.code = 0x51
+action.decrement.swfVersion = 5
+action.decrement.shortDescription = \u9012\u51cf\u503c
+action.decrement.stackBefore = value
+action.decrement.stackAfter = result
+action.increment.name = Increment
+action.increment.code = 0x50
+action.increment.swfVersion = 5
+action.increment.shortDescription = \u589e\u91cf\u503c
+action.increment.stackBefore = value
+action.increment.stackAfter = result
+action.pushduplicate.name = PushDuplicate
+action.pushduplicate.code = 0x4C
+action.pushduplicate.swfVersion = 5
+action.pushduplicate.shortDescription = \u590d\u5236\u5806\u6808\u9876\u90e8
+action.pushduplicate.stackBefore = value
+action.pushduplicate.stackAfter = value, value
+action.return.name = Return
+action.return.code = 0x3E
+action.return.swfVersion = 5
+action.return.shortDescription = \u8fd4\u56de\u503c
+action.return.stackBefore = value
+action.stackswap.name = StackSwap
+action.stackswap.code = 0x4D
+action.stackswap.swfVersion = 5
+action.stackswap.shortDescription = \u4ea4\u6362\u5806\u6808\u4e0a\u7684\u524d\u4e24\u4e2a\u503c
+action.stackswap.stackBefore = value1, value2
+action.stackswap.stackAfter = value2, value1
+action.storeregister.name = StoreRegister
+action.storeregister.code = 0x87
+action.storeregister.swfVersion = 5
+action.storeregister.shortDescription = \u5c06\u503c\u5b58\u50a8\u5230\u5bc4\u5b58\u5668\u4e2d
+action.storeregister.stackBefore = value
+action.storeregister.stackAfter = value
+action.storeregister.operands = registerNumber:UI8
+action.instanceof.name = InstanceOf
+action.instanceof.code = 0x54
+action.instanceof.swfVersion = 6
+action.instanceof.shortDescription = \u5bf9\u8c61\u662f\u7c7b\u7684\u5b9e\u4f8b
+action.instanceof.stackBefore = constructor, object
+action.instanceof.stackAfter = booleanResult
+action.enumerate2.name = Enumerate2
+action.enumerate2.code = 0x55
+action.enumerate2.swfVersion = 6
+action.enumerate2.shortDescription = \u4ece\u5bf9\u8c61\u4e2d\u83b7\u53d6\u6240\u6709\u69fd\u7684\u540d\u79f0(\u5806\u6808\u53c2\u6570\u662f\u5bf9\u8c61\u7c7b\u578b)
+action.enumerate2.stackBefore = object
+action.enumerate2.stackAfter = null, [slotName1, slotName2, ...]
+action.strictequals.name = StrictEquals
+action.strictequals.code = 0x66
+action.strictequals.swfVersion = 6
+action.strictequals.shortDescription = \u68c0\u67e5\u4e24\u4e2a\u503c\u662f\u5426\u76f8\u7b49\u4e14\u7c7b\u578b\u76f8\u540c
+action.strictequals.stackBefore = value1, value2
+action.strictequals.stackAfter = booleanResult
+action.greater.name = Greater
+action.greater.code = 0x67
+action.greater.swfVersion = 6
+action.greater.shortDescription = \u68c0\u67e5\u8be5\u503c\u662f\u5426\u5927\u4e8e\u5176\u4ed6\u503c
+action.greater.stackBefore = value1, value2
+action.greater.stackAfter = booleanResult
+action.stringgreater.name = StringGreater
+action.stringgreater.code = 0x68
+action.stringgreater.swfVersion = 6
+action.stringgreater.shortDescription = \u68c0\u67e5\u5b57\u7b26\u4e32\u662f\u5426\u5927\u4e8e\u5176\u4ed6\u503c
+action.stringgreater.stackBefore = value1, value2
+action.stringgreater.stackAfter = booleanResult
+action.definefunction2.name = DefineFunction2
+action.definefunction2.code = 0x8E
+action.definefunction2.swfVersion = 7
+action.definefunction2.shortDescription = \u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570(\u9644\u52a0\u529f\u80fd)
+action.definefunction2.stackAfter = result
+action.definefunction2.operands = functionName:STRING, numParams:UI16, \
+ registerCount:UI8, \
+ preloadParentFlag:boolean, \
+ preloadRootFlag:boolean, \
+ suppressSuperFlag:boolean, \
+ preloadSuperFlag:boolean, \
+ suppressArgumentsFlag:boolean, \
+ preloadArgumentsFlag:boolean, \
+ suppressThisFlag:boolean, \
+ preloadThisFlag:boolean, \
+ preloadGlobalFlag:boolean, \
+ [register1:UI8, paramName1:STRING, register2:UI8, paramName2:STRING, ...]
+action.extends.name = Extends
+action.extends.code = 0x69
+action.extends.swfVersion = 7
+action.extends.shortDescription = \u521b\u5efa\u7ee7\u627f\u5173\u7cfb
+action.extends.stackBefore = superClassConstructor, subClassConstructor
+action.castop.name = CastOp
+action.castop.code = 0x2B
+action.castop.swfVersion = 7
+action.castop.shortDescription = \u5f3a\u5236\u8f6c\u6362\u6570\u636e\u7c7b\u578b
+action.castop.stackBefore = object, constructor
+action.castop.stackAfter = result
+action.implementsop.name = ImplementsOp
+action.implementsop.code = 0x2C
+action.implementsop.swfVersion = 7
+action.implementsop.shortDescription = \u6307\u5b9a\u7c7b\u5b9e\u73b0\u7684\u63a5\u53e3
+action.implementsop.stackBefore = classConstructor, numInterfaces, [interfaceConstructor1, interfaceConstructor2, ...]
+action.try.name = Try
+action.try.code = 0x8F
+action.try.swfVersion = 7
+action.try.shortDescription = \u4e3a\u7279\u6b8a\u60c5\u51b5\u5b9a\u4e49\u5904\u7406\u7a0b\u5e8f
+action.try.operands = catchTarget:register|STRING
+action.throw.name = Throw
+action.throw.code = 0x2A
+action.throw.swfVersion = 7
+action.throw.shortDescription = \u629b\u51fa\u5f02\u5e38\u60c5\u51b5
+action.throw.stackBefore = value
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties
index 45e5d7305c..5ba397df26 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/AboutDialog_zh.properties
@@ -20,7 +20,7 @@ contributors = \u8d21\u732e\u8005:
#In the translation, replace "english" with target language name
translation.author.label = \u4e2d\u6587\u7ffb\u8bd1\uff1a
#In the translation, insert your name here
-translation.author = \u6653\u4e4b\u8f66,\u5b89\u5b89,\u738b\u6668\u65ed,\u6d41\u6c34\u6e3a\u6e3a
+translation.author = \u6653\u4e4b\u8f66,\u5b89\u5b89,\u738b\u6668\u65ed,\u6d41\u6c34\u6e3a\u6e3a,\u8001biu
developers = \u5f00\u53d1:
developers.others = \u4ee5\u53caGitHub\u4e0eGoogleCode\u7684\u5176\u4ed6\u4eba
translators = \u7ffb\u8bd1\u8005:
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties
index 44b0f5a0bf..e0ad19fd30 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog_zh.properties
@@ -480,6 +480,14 @@ config.name.lastFlaExportCompressed = \u6700\u65b0\u7684FLA\u538b\u7f29\u65b9\u5
config.description.lastFlaExportCompressed = \u4e0a\u6b21\u5bfc\u51fa\u7684FLA\u538b\u7f29\u65b9\u5f0f
#after 19.0.0
config.name.showImportSpriteInfo = \u5bfc\u5165\u7cbe\u7075(sprite)\u524d\u663e\u793a\u4fe1\u606f
+config.description.showImportSpriteInfo = \u5728\u83dc\u5355\u4e2d\u5355\u51fb"\u5bfc\u5165\u7cbe\u7075"\u540e\u663e\u793a\u6709\u5173\u5bfc\u5165\u7cbe\u7075\u5982\u4f55\u5de5\u4f5c\u7684\u4e00\u4e9b\u4fe1\u606f
+config.name.displayAs12PCodeDocsPanel = \u5728AS1/2 P-code\u4e2d\u663e\u793a\u6587\u6863\u9762\u677f
+config.description.displayAs12PCodeDocsPanel = \u5728AS1/2 P-code\u7f16\u8f91\u548c\u5c55\u793a\u4e2d\u663e\u793a\u5305\u542b\u64cd\u4f5c\u6587\u6863\u7684\u9762\u677f
+config.name.gui.action.splitPane.docs.dividerLocationPercent = (\u5185\u90e8)AS 1/2\u5206\u9694\u9762\u677f\u6587\u6863\u5206\u9694\u7b26\u4f4d\u7f6e\u767e\u5206\u6bd4
+config.description.action.avm2.splitPane.docs.dividerLocationPercent = AS 1/2\u5206\u9694\u9762\u677f\u6587\u6863\u5206\u9694\u7b26\u4f4d\u7f6e\u767e\u5206\u6bd4
+#after 19.1.2
+config.name.rememberLastScreen = \u8bb0\u4f4f\u4e0a\u6b21\u4f7f\u7528\u7684\u5c4f\u5e55\uff08\u5728\u591a\u4e2a\u663e\u793a\u5668\u4e0a\uff09
+config.description.rememberLastScreen = \u5728\u591a\u5c4f\u5e55\u914d\u7f6e\u4e2d\u8bb0\u4f4f\u4e0a\u6b21\u4f7f\u7528\u7684\u5c4f\u5e55
config.name.lastMainWindowScreenIndex = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55\u7d22\u5f15
config.description.lastMainWindowScreenIndex = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55\u7d22\u5f15
config.name.lastMainWindowScreenX = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55X
@@ -490,3 +498,41 @@ config.name.lastMainWindowScreenWidth = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53
config.description.lastMainWindowScreenWidth = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55\u5bbd\u5ea6
config.name.lastMainWindowScreenHeight = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55\u5bbd\u5ea6
config.description.lastMainWindowScreenHeight = \u6700\u540e\u4e00\u4e2a\u4e3b\u7a97\u53e3\u7684\u5c4f\u5e55\u5bbd\u5ea6
+config.name.displayAs12PCodePanel = \u663e\u793aAS1/2 P-code\u9762\u677f
+config.description.displayAs12PCodePanel = \u663e\u793aActionScript 1\u548c2\u7684\u53cd\u6c47\u7f16P-code\u64cd\u4f5c\u9762\u677f
+config.name.displayAs3PCodePanel = \u663e\u793aAS3 P-code\u9762\u677f
+config.description.displayAs3PCodePanel = \u663e\u793aActionScript 3\u7684\u53cd\u6c47\u7f16P-code\u6307\u4ee4\u9762\u677f
+config.name.flaExportUseMappedFontLayout = FLA\u5bfc\u51fa-\u4f7f\u7528\u6620\u5c04\u5b57\u4f53\u5e03\u5c40
+config.description.flaExportUseMappedFontLayout = \u5f53FLA\u5bfc\u51fa\u8fc7\u7a0b\u4e2d\u5b9e\u9645\u5b57\u4f53\u6ca1\u6709\u5e03\u5c40\u65f6,\u5728\u786e\u5b9a\u5b57\u6bcd\u95f4\u8ddd\u65f6\u4f7f\u7528\u6307\u5b9a\u7684\u6e90\u5b57\u4f53\u524d\u8fdb\u503c
+#after 20.0.0
+config.name.formatting.tab.size = \u9009\u9879\u5361\u5927\u5c0f
+config.description.formatting.tab.size = \u6bcf\u4e2a\u9009\u9879\u5361\u7684\u7a7a\u683c\u6570
+config.name.boxBlurPixelsLimit = \u6846\u6a21\u7cca\u6ee4\u955c\u50cf\u7d20\u9650\u5236
+config.description.boxBlurPixelsLimit = \u8ba1\u7b97boxblur\u6ee4\u955c\u7684\u6700\u5927\u50cf\u7d20\u6570.\u5b9e\u9645\u9650\u5236\u662f\u8fd9\u4e2a\u6570\u5b57\u4e58\u4ee510000.\u5982\u679c\u50cf\u7d20\u6570\u8f83\u5927,\u5219blurX\u548cblurY\u4f1a\u51cf\u5c11
+config.name.as3ExportNamesUseClassNamesOnly = \u5bfc\u51fa\u8d44\u4ea7\u7684\u540d\u79f0\u4ec5\u57fa\u4e8e\u7c7b\u522b(AS3)
+config.description.as3ExportNamesUseClassNamesOnly = \u5bfc\u51fa\u7684\u8d44\u4ea7\u6587\u4ef6(\u56fe\u50cf,\u58f0\u97f3\u7b49)\u4ec5\u4eceSymbolClass\u6807\u7b7e\u4e2d\u83b7\u53d6\u540d\u79f0,\u5373\u5176\u5206\u914d\u7684\u7c7b\u522b.\u672a\u6dfb\u52a0\u5b57\u7b26id.\u6b64\u5916,\u5f53\u4e3a\u540c\u4e00\u8d44\u4ea7\u5206\u914d\u591a\u4e2a\u7c7b\u522b\u65f6,\u5b83\u4f1a\u88ab\u591a\u6b21\u5bfc\u51fa.(\u9002\u7528\u4e8eActionScript 3 SWF)
+config.name.jnaTempDirectory = JNA\u4e34\u65f6\u76ee\u5f55
+config.description.jnaTempDirectory = JNA DLL\u7684\u4e34\u65f6\u76ee\u5f55\u8def\u5f84\u7b49.\u8fd9\u9700\u8981\u8bbe\u7f6e\u4e3a\u4e0d\u5305\u542b\u4efb\u4f55Unicode\u5b57\u7b26\u7684\u8def\u5f84.\u5982\u679c\u672a\u8bbe\u7f6e,\u5219\u4f7f\u7528\u5f53\u524d\u7528\u6237TEMP\u76ee\u5f55
+config.name.flaExportFixShapes = FLA\u5bfc\u51fa-\u4fee\u590d\u5f62\u72b6(\u7f13\u6162)
+config.description.flaExportFixShapes = \u5e94\u7528\u5206\u5272\u91cd\u53e0\u8fb9\u7684\u8fc7\u7a0b\u6765\u5c1d\u8bd5\u4fee\u590d\u67d0\u4e9b\u5f62\u72b6\u4e0a\u7f3a\u5931\u7684\u586b\u5145.\u5bf9\u4e8e\u67d0\u4e9b\u590d\u6742\u7684\u5f62\u72b6,\u8fd9\u53ef\u80fd\u4f1a\u975e\u5e38\u7f13\u6162
+config.name.lastExportResampleWav = \u91cd\u65b0\u91c7\u6837wav\u7684\u6700\u540e\u8bbe\u7f6e
+config.description.lastExportResampleWav = \u4e0a\u6b21\u5c06wav\u91cd\u65b0\u91c7\u6837\u8bbe\u7f6e\u4e3a44kHz
+config.name.previewResampleSound = \u5728\u58f0\u97f3\u9884\u89c8\u4e2d\u91cd\u65b0\u91c7\u6837
+config.description.previewResampleSound = \u5728\u58f0\u97f3\u9884\u89c8\u4e2d\u91cd\u65b0\u91c7\u6837\u81f344kHz
+config.name.lastExportTransparentBackground = \u5e27\u5bfc\u51fa\u4e2d\u5ffd\u7565\u80cc\u666f\u989c\u8272\u7684\u6700\u540e\u8bbe\u7f6e
+config.description.lastExportTransparentBackground = \u5ffd\u7565\u5e27\u5bfc\u51fa\u7684\u80cc\u666f\u989c\u8272\u4ee5\u4f7f\u80cc\u666f\u900f\u660e\u7684\u6700\u540e\u8bbe\u7f6e
+config.name.warningAbcClean = \u6e05\u7406\u5b57\u8282\u7801\u64cd\u4f5c\u65f6\u8b66\u544a
+config.description.warningAbcClean = \u5728\u6267\u884c\u5b57\u8282\u7801\u6e05\u7406\u64cd\u4f5c\u4e4b\u524d\u663e\u793a\u8b66\u544a
+config.name.warningAddFunction = \u5728AS3 P-code\u4e2d\u6dfb\u52a0\u65b0\u51fd\u6570\u65f6\u8b66\u544a
+config.description.warningAddFunction = \u5728AS3 P-code\u4e2d\u521b\u5efa\u65b0\u51fd\u6570\u4e4b\u524d\u663e\u793a\u8b66\u544a.\u5b83\u8fd8\u663e\u793a\u4e86\u4e00\u4e9b\u64cd\u4f5c\u5982\u4f55\u5de5\u4f5c\u7684\u4fe1\u606f
+#after 21.0.2
+config.name.linkAllClasses = \u6dfb\u52a0\u6240\u6709\u7c7b(\u58f0\u97f3,\u5b57\u4f53,\u56fe\u50cf)\u7684\u94fe\u63a5
+config.description.linkAllClasses = \u6dfb\u52a0\u94fe\u63a5SWF\u4e2d\u6240\u6709(\u58f0\u97f3,\u5b57\u4f53,\u56fe\u50cf)\u7c7b\u7684\u7279\u6b8a\u811a\u672c.\u5f53\u6ca1\u6709\u5176\u4ed6\u811a\u672c\u94fe\u63a5\u5b83\u4eec\u65f6\u5f88\u6709\u7528,\u5728\u7f16\u8bd1\u6587\u4ef6\u4e2d\u4ecd\u7136\u53ef\u7528
+#after 21.1.0
+config.name.recentColors = \u6700\u8fd1\u7684\u989c\u8272
+config.description.recentColors = \u989c\u8272\u5bf9\u8bdd\u6846\u4e2d\u7684\u6700\u65b0\u989c\u8272
+#after 21.1.1
+config.name.gui.splitPaneEasyVertical.dividerLocationPercent = (\u5185\u90e8)\u7b80\u6613UI\u5782\u76f4\u62c6\u5206\u5668\u4f4d\u7f6e
+config.name.gui.splitPaneEasyHorizontal.dividerLocationPercent = (\u5185\u90e8)\u7b80\u6613UI\u6c34\u5e73\u62c6\u5206\u5668\u4f4d\u7f6e
+config.name.lastSessionEasySwf = \u4e0a\u6b21\u7b80\u6613\u6a21\u5f0f\u4f1a\u8bdd\u6587\u4ef6
+config.description.lastSessionEasySwf = \u5305\u542b\u5728\u7b80\u6613\u6a21\u5f0f\u4e0b\u4e0a\u6b21\u4f1a\u8bdd\u4e2d\u9009\u62e9\u7684SWF
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ColorChooserDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ColorChooserDialog_zh.properties
new file mode 100644
index 0000000000..06f11182ed
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/locales/ColorChooserDialog_zh.properties
@@ -0,0 +1,16 @@
+# Copyright (C) 2024 JPEXS
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+dialog.title = \u9009\u62e9\u989c\u8272
+recent.add = \u6dfb\u52a0
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ConvertPlaceObjectTypeDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ConvertPlaceObjectTypeDialog_zh.properties
new file mode 100644
index 0000000000..64ee226745
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/locales/ConvertPlaceObjectTypeDialog_zh.properties
@@ -0,0 +1,23 @@
+# Copyright (C) 2024 JPEXS
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+dialog.title = \u8f6c\u6362\u653e\u7f6e\u5bf9\u8c61\u7c7b\u578b
+place1 = \u989c\u8272\u53d8\u6362,\u6df1\u5ea6,\u5b57\u7b26id,\u77e9\u9635
+place2 = \u6807\u5fd7\u79fb\u52a8,\u526a\u8f91\u52a8\u4f5c,\u526a\u8f91\u6df1\u5ea6,alpha\u989c\u8272\u53d8\u6362,\u540d\u79f0,\u6bd4\u7387
+place3 = \u7c7b\u540d,\u80cc\u666f\u989c\u8272,\u4f4d\u56fe\u7f13\u5b58,\u6df7\u5408\u6a21\u5f0f,\u8fc7\u6ee4\u5668,\u53ef\u89c1\u6027
+place4 = AMF\u6570\u636e
+minimum = (\u6700\u5c0f\u503c)
+unsupported = (\u4e0d\u652f\u6301)
+button.ok = \u786e\u5b9a
+button.cancel = \u53d6\u6d88
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ConvertShapeTypeDialog_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/ConvertShapeTypeDialog_zh.properties
new file mode 100644
index 0000000000..2dadd326ab
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/locales/ConvertShapeTypeDialog_zh.properties
@@ -0,0 +1,23 @@
+# Copyright (C) 2024 JPEXS
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+dialog.title = \u8f6c\u6362\u5f62\u72b6\u7c7b\u578b
+shape1 = \u9996\u4e2a\u7248\u672c
+shape2 = \u6837\u5f0f\u5217\u8868\u4e2d\u6709255\u591a\u79cd\u6837\u5f0f,\u591a\u4e2a\u6837\u5f0f\u5217\u8868
+shape3 = \u989c\u8272\u900f\u660e\u5ea6
+shape4 = LINESTYLE2(\u8fde\u63a5,\u5927\u5199,\u7f29\u653e,\u7b14\u5212\u586b\u5145),\u8fb9\u7f18\u8fb9\u754c,\u7126\u70b9\u6e10\u53d8,\u5c55\u5f00\u6a21\u5f0f,\u63d2\u503c\u6a21\u5f0f,numgradients>8
+minimum = (\u6700\u5c0f\u503c)
+unsupported = (\u4e0d\u652f\u6301)
+button.ok = \u786e\u5b9a
+button.cancel = \u53d6\u6d88
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/EasyPanel_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/EasyPanel_zh.properties
new file mode 100644
index 0000000000..922968f39d
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/locales/EasyPanel_zh.properties
@@ -0,0 +1,77 @@
+# Copyright (C) 2024 JPEXS
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+library = \u5e93
+library.folder.images = \u56fe\u50cf
+library.folder.graphics = \u56fe\u5f62
+library.folder.shapeTweens = \u5f62\u72b6\u8865\u95f4
+library.folder.texts = \u6587\u672c
+library.folder.fonts = \u5b57\u4f53
+library.folder.movieClips = \u5f71\u7247\u526a\u8f91
+library.folder.buttons = \u6309\u94ae
+library.folder.sounds = \u58f0\u97f3
+library.folder.videos = \u89c6\u9891
+library.header.name = \u540d\u79f0
+library.header.asLinkage = AS\u94fe\u63a5
+item.image = \u56fe\u50cf
+item.graphic = \u56fe\u5f62
+item.shapeTween = \u5f62\u72b6\u8865\u95f4
+item.text = \u6587\u672c
+item.font = \u5b57\u4f53
+item.movieClip = \u5f71\u7247\u526a\u8f91
+item.button = \u6309\u94ae
+item.sound = \u58f0\u97f3
+item.video = \u89c6\u9891
+item.uknown = \u672a\u77e5
+undo = \u64a4\u9500 %action%
+undo.cannot = \u65e0\u6cd5\u64a4\u9500
+redo = \u91cd\u505a %action%
+redo.cannot = \u65e0\u6cd5\u91cd\u505a
+transform = \u8f6c\u6362
+action.addFrame = \u6dfb\u52a0\u5e27
+action.addKeyFrame = \u6dfb\u52a0\u5173\u952e\u5e27
+action.addKeyFrameWithBlankFrameBefore = \u5728\u7a7a\u767d\u5e27\u4e4b\u524d\u6dfb\u52a0\u5173\u952e\u5e27
+action.removeFrame = \u79fb\u9664\u5e27
+action.transform = \u8f6c\u6362
+action.move = \u79fb\u52a8
+action.addToStage = \u6dfb\u52a0\u5230\u821e\u53f0
+action.change = \u66f4\u6539 %item%
+action.change.compression = \u538b\u7f29
+action.change.swfVersion = SWF\u7248\u672c
+action.change.encrypted = \u52a0\u5bc6
+action.change.gfx = GFX
+action.change.frameRate = \u5e27\u7387
+action.change.width = \u5bbd
+action.change.height = \u9ad8
+action.change.colorEffect = \u989c\u8272\u6548\u679c
+timeline.main = \u4e3b\u65f6\u95f4\u8f74
+timeline.item = \u65f6\u95f4\u8f74 %item%
+timeline.item.cancel = \u53d6\u6d88-\u5355\u51fb\u4ee5\u8f6c\u5230\u4e3b\u65f6\u95f4\u8f74
+properties = \u5c5e\u6027
+properties.document = \u6587\u6863
+properties.instance.single = \u5b9e\u4f8b %item%
+properties.instance.multiple = %count% \u5b9e\u4f8b
+properties.instance.none = \u65e0\u5b9e\u4f8b
+properties.instance.header.positionSize = \u4f4d\u7f6e\u548c\u5927\u5c0f
+properties.instance.header.colorEffect = \u989c\u8272\u6548\u679c
+property.label = %item%:
+property.instance.item = \u9879\u76ee
+property.instance.colorEffect.alpha = Alpha
+property.instance.colorEffect.red = \u7ea2
+property.instance.colorEffect.green = \u7eff
+property.instance.colorEffect.blue = \u84dd
+property.instance.positionSize.x = X
+property.instance.positionSize.y = Y
+property.instance.positionSize.width = \u5bbd
+property.instance.positionSize.height = \u9ad8
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties
index 6ac2fe5f44..be2c64121b 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties
@@ -61,7 +61,7 @@ node.sounds = \u58f0\u97f3
node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e
node.fonts = \u5b57\u4f53
node.sprites = \u7cbe\u7075
-node.shapes = \u56fe\u5f62
+node.shapes = \u5f62\u72b6
node.morphshapes = \u53d8\u5f62\u5f62\u72b6
node.buttons = \u6309\u94ae
node.frames = \u5e27
@@ -612,7 +612,7 @@ script.seemsBroken = \u8b66\u544a: \u4ee3\u7801\u53cd\u6c47\u7f16\u5305\u
\u6216\u811a\u672c\u662f\u7531\u975e\u6807\u51c6\u7684\u7f16\u8bd1\u5668\u751f\u6210\u7684(\u5982Haxe\u7b49)\u3002 \
#after 13.0.3
-button.removetrait = \u5220\u9664\u7279\u5f81
+button.removetrait = \u5220\u9664trait
message.confirm.removetrait = \u60a8\u786e\u5b9a\u8981\u5220\u9664\u9009\u4e2d\u7684trait?
contextmenu.addScript = \u6dfb\u52a0\u811a\u672c
contextmenu.addClass = \u6dfb\u52a0\u7c7b
@@ -753,9 +753,9 @@ contextmenu.unpin.all = \u5168\u90e8\u53d6\u6d88\u56fa\u5b9a
contextmenu.unpin.others = \u53d6\u6d88\u56fa\u5b9a\u5176\u4ed6
menu.tools.otherTools.clearPinnedItems = \u6e05\u7a7a\u56fa\u5b9a\u9879\u76ee
menu.settings.flattenASPackages = \u5c55\u5f00ActionScript\u5305
-work.reading.abc = \u8bfb\u53d6ABC
+work.reading.abc = \u8bfb\u53d6\u5b57\u8282\u7801
filter.abc = ActionScript3\u5b57\u8282\u7801\u6587\u4ef6(*.abc)
-contextmenu.exportAbc = \u5bfc\u51faABC
+contextmenu.exportAbc = \u5bfc\u51fa\u5b57\u8282\u7801
contextmenu.pin = \u56fa\u5b9a
#after 17.0.4
productinfo.product = \u751f\u4ea7:
@@ -872,10 +872,22 @@ warning.cannotencrypt = \u8b66\u544a:\u6587\u4ef6%file%\u4f7f\u7528HARMAN Air\u5
#after 18.5.0
warning.edit.headerframecount = \u8b66\u544a:\u7f16\u8f91\u6587\u4ef6\u5934(header)\u4e2d\u7684\u5e27\u6570\u4e0d\u4f1a\u66f4\u65b0SWF\u65f6\u95f4\u8f74\u4e0a\u663e\u793a\u5e27(ShowFrame)\u6807\u7b7e\u7684\u5fc5\u8981\u6570\u91cf\r\n\u8981\u6dfb\u52a0\u65b0\u7684\u5e27\uff0c\u60a8\u6700\u597d\u4f7f\u7528SWF\u4e0a\u7684\u53f3\u952e\u5355\u51fb\u4e0a\u4e0b\u6587\u83dc\u5355 -> \u6dfb\u52a0\u5e27\r\n\
\u82e5\u5982\u6b64\u505a,\u8fd9\u5c06\u76f8\u5e94\u7684\u66f4\u65b0\u6587\u4ef6\u5934(header)\u4e2d\u7684\u5e27\u6570
-menu.tools.abcexplorer = ABC\u6d4f\u89c8\u5668
-contextmenu.abcexplorer = \u6d4f\u89c8ABC\u5b57\u8282\u7801
+warning.icon = \u70b9\u51fb\u663e\u793a\u76f8\u5173\u8b66\u544a
+button.export = \u5bfc\u51fa
+error.font.cannotaddcharacter = \u9519\u8bef:\u65e0\u6cd5\u5411\u5b57\u4f53\u6dfb\u52a0\u66f4\u591a\u5b57\u7b26.\r\n\u5df2\u6210\u529f\u6dfb\u52a0\u5b57\u7b26:%numchars%
+info.noteditable.compound = \u8be5\u811a\u672c\u662f\u590d\u5408\u7684,\u5177\u6709\u591a\u4e2a\u5916\u90e8\u53ef\u89c1\u7684\u5b9a\u4e49.\u76f4\u63a5\u7f16\u8f91\u4e0d\u53ef\u7528
+menu.tools.abcexplorer = \u5b57\u8282\u7801\u6d4f\u89c8\u5668
+contextmenu.abcexplorer = \u6d4f\u89c8\u5b57\u8282\u7801
+button.abcexploretrait = \u5728\u5b57\u8282\u7801\u6d4f\u89c8\u5668\u4e2d\u663e\u793atrait
+#after 19.0.0
+binarydata.swfInside.packer = \u770b\u8d77\u6765\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u4e2d\u6709SWF,\u7528%packer%\u6253\u5305.\u5355\u51fb\u6b64\u5904\u89e3\u538b\u7f29SWF\u5e76\u5c06\u5176\u4f5c\u4e3a\u5b50\u6811\u52a0\u8f7d
+button.replaceWithGif = \u66ff\u6362\u4e3aGIF...
+message.info.importSprites = \u5728\u5bfc\u5165\u7cbe\u7075\u65f6,\u60a8\u9700\u8981\u9009\u62e9\u4e00\u4e2a\u6587\u4ef6\u5939.\r\n\
+ \u8be5\u6587\u4ef6\u5939\u5fc5\u987b\u5305\u542b"sprites"\u5b50\u6587\u4ef6\u5939,\u5176\u4e2d\u7684\u6587\u4ef6\u540d\u5fc5\u987b\u4e0e\u5f53\u524d\u9009\u5b9aSWF\u4e2d\u7684\u73b0\u6709sprites\u5339\u914d.\r\n\
+ \u6bcf\u4e2a\u6587\u4ef6\u5fc5\u987b\u5177\u6709".gif"\u6269\u5c55\u540d
import.sprite.result = \u5df2\u5bfc\u5165%count%\u4e2a\u7cbe\u7075
menu.file.import.sprite = \u4eceGIF\u5bfc\u5165\u7cbe\u7075
+error.shapeTooLarge = \u5f62\u72b6\u4e2d\u7684\u67d0\u4e9b\u957f\u5ea6\u592a\u5927,\u65e0\u6cd5\u4fdd\u5b58.\\r\n\u7ee7\u7eed\u64cd\u4f5c\u4e4b\u524d,\u8bf7\u5c06\u70b9\u79fb\u8fd1,\u8c03\u6574\u5f62\u72b6\u5927\u5c0f\u548c/\u6216\u5728\u957f\u8fb9\u4e2d\u95f4\u63d2\u5165\u4e00\u4e2a\u70b9
#after 19.1.2
tagInfo.fileName = \u6587\u4ef6\u540d\u79f0
tagInfo.exportName = \u5bfc\u51fa\u540d\u79f0
@@ -891,15 +903,61 @@ tagInfo.flags = \u6807\u5fd7
tagInfo.prefix = \u524d\u7f00
tagInfo.swfName = SWF\u540d\u79f0
tagInfo.codeOffsets = \u4ee3\u7801\u504f\u79fb\u91cf
+tagInfo.gradientSize = \u6e10\u53d8\u5927\u5c0f
tagInfo.textureId = \u7eb9\u7406Id
-tag.shape.create = \u4ece\u6587\u4ef6\u521b\u5efa\u5f62\u72b6(shape)...
-tag.image.create = \u4ece\u6587\u4ef6\u521b\u5efa\u56fe\u50cf(image)...
+tagInfo.textureFormat = \u7eb9\u7406\u683c\u5f0f
+tagInfo.padPixels = \u586b\u5145\u50cf\u7d20
+tagInfo.nominalGlyphSz = \u6807\u79f0\u5b57\u5f62\u5927\u5c0f
+tagInfo.glyphCount = \u5b57\u5f62\u8ba1\u6570
+tagInfo.fontCount = \u5b57\u4f53\u8ba1\u6570
+tag.shape.create = \u4ece\u6587\u4ef6\u521b\u5efa\u5f62\u72b6...
+tag.image.create = \u4ece\u6587\u4ef6\u521b\u5efa\u56fe\u50cf...
+tag.sprite.create = \u4eceGIF\u6587\u4ef6\u521b\u5efa\u7cbe\u7075...
+tag.movie.create = \u4ece\u6587\u4ef6\u521b\u5efa\u89c6\u9891...
+tag.sound.create = \u4ece\u6587\u4ef6\u521b\u5efa\u58f0\u97f3...
+tag.font.create = \u4f7f\u7528\u5bf9\u8bdd\u6846\u521b\u5efa\u5b57\u4f53...
+tag.binaryData.create = \u4ece\u6587\u4ef6\u521b\u5efa\u4e8c\u8fdb\u5236\u6570\u636e...
+tag.morphshape.create = \u4ece\u5f62\u72b6\u6587\u4ef6\u521b\u5efa\u53d8\u5f62\u5f62\u72b6...
+dialog.morphshape.startShape = \u9009\u62e9\u8d77\u59cb\u5f62\u72b6
+dialog.morphshape.endShape = \u9009\u62e9\u7aef\u70b9\u5f62\u72b6.\u5355\u51fb"\u53d6\u6d88"\u4f7f\u7ed3\u675f\u5f62\u72b6\u4e0e\u5f00\u59cb\u5f62\u72b6\u76f8\u540c
+error.morphshape.incompatible = \u65e0\u6cd5\u521b\u5efa\u53d8\u5f62\u5f62\u72b6:\u5f00\u59cb\u548c\u7ed3\u675f\u5f62\u72b6\u7684\u586b\u5145/\u7ebf\u6761\u6837\u5f0f\u4e0d\u517c\u5bb9
+shaperecords.edge.style = \u6837\u5f0f\u66f4\u6539 (%details%)
+shaperecords.edge.style.move = \u79fb\u52a8\u5230 %x%, %y%
+shaperecords.edge.end = \u5f62\u72b6\u7ed3\u675f
+#after 20.0.0
+contextmenu.copyFrame = \u5c06\u5e27\u590d\u5236\u5230
+contextmenu.copyFrame.clipboard = \u590d\u5236\u5230\u5e27\u526a\u8d34\u677f
+contextmenu.cutFrame = \u526a\u5207\u5230\u5e27\u526a\u8d34\u677f
+contextmenu.moveFrame = \u5c06\u5e27\u79fb\u52a8\u5230
+contextmenu.clipboard.frame = \u5e27\u526a\u8d34\u677f
+clipboard.hint.frame = \u5e27\u526a\u8d34\u677f\u4e2d\u7684\u9879\u76ee\u6570
+clipboard.clear.frame = \u6e05\u9664\u5e27\u526a\u8d34\u677f
+debug.export = \u5bfc\u51fa %name%
+debug.export.bytearray = \u5bfc\u51fa\u5b57\u8282\u6570\u7ec4\u6570\u636e...
+debug.import = \u5bfc\u5165\u5230 %name%
+debug.import.bytearray = \u5bfc\u5165\u5b57\u8282\u6570\u7ec4\u6570\u636e...
action.edit.flex = (Flex \u7f16\u8bd1\u5668)
header.encrypted = Harman\u52a0\u5bc6
header.warning.unsupportedGfxEncryption = GFX\u4e0d\u652f\u6301Harman\u52a0\u5bc6
contextmenu.applyUnpacker = \u5e94\u7528\u89e3\u5305\u5668
+binarydata.dataInside.packer = \u770b\u8d77\u6765\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u662f\u7528%packer%\u6253\u5305\u7684.\u5355\u51fb\u6b64\u5904\u89e3\u538b\u7f29\u4e8c\u8fdb\u5236\u6570\u636e
+error.wrong.packer = %item%\r\n\u65e0\u6cd5\u4f7f\u7528%packer%\u89e3\u538b\u7f29\u4e8c\u8fdb\u5236\u6570\u636e.\\r\n\u6b64\u6253\u5305\u5668\u53ef\u80fd\u672a\u6253\u5305\u6570\u636e
+contextmenu.copyTagToReplaceByClass = \u5c06\u6807\u7b7e\u590d\u5236\u5230(\u66ff\u6362\u4e3a\u7c7b\u540d)
+contextmenu.copyTagToReplaceByExportName = \u5c06\u6807\u7b7e\u590d\u5236\u5230(\u66ff\u6362\u4e3a\u5bfc\u51fa\u540d\u79f0)
button.breakpointList = \u663e\u793a\u65ad\u70b9\u5217\u8868
node.scenes = \u573a\u666f
+contextmenu.showInFramesFolder = \u5728\u5e27\u6587\u4ef6\u5939\u4e2d\u663e\u793a
+#after 20.1.0
+contextmenu.collapseAll = \u5168\u90e8\u6298\u53e0
+contextmenu.collectDepthAsSprites = \u6536\u96c6\u4e0e\u7cbe\u7075\u6df1\u5ea6\u76f8\u540c\u7684\u6807\u7b7e
+preview.resample = \u5c06\u58f0\u97f3\u91cd\u65b0\u91c7\u6837\u523044kHz
+contextmenu.setAs3ClassLinkage = \u8bbe\u7f6eAS3\u7c7b\u94fe\u63a5
+contextmenu.cleanAbc = \u6e05\u7406\u5b57\u8282\u7801-\u79fb\u9664\u672a\u4f7f\u7528\u7684\u9879\u76ee
+warning.cleanAbc = \u6b64\u64cd\u4f5c\u5c06\u4ece\u5b57\u8282\u7801\u4e2d\u5220\u9664\u4f7f\u7528\u7387\u4e3a\u96f6\u7684\u9879\u76ee,\u8fd9\u4e9b\u9879\u76ee\u4e0d\u4f1a\u4ece\u4efb\u4f55\u811a\u672c\u4e2d\u5f15\u7528.\r\n\
+ \u67d0\u4e9b\u6df7\u6dc6\u7684SWF\u6587\u4ef6\u53ef\u80fd\u4f1a\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u53d7\u635f.\r\n\
+ \u4f7f\u7528\u5b83\u7684\u98ce\u9669\u7531\u4f60\u81ea\u5df1\u627f\u62c5,\u4f60\u60f3\u7ee7\u7eed\u5417?
+tagInfo.idType = id\u7684\u7c7b\u578b
+contextmenu.configurePathResolving = \u914d\u7f6e\u8def\u5f84\u89e3\u6790...
contextmenu.setAsLinkage = \u8bbe\u7f6eAS\u94fe\u63a5
contextmenu.exportFlashDevelop = \u5bfc\u51fa\u4e3aFlashDevelop\u5de5\u7a0b
filter.as3proj = FlashDevelop AS3\u5de5\u7a0b (*.as3proj)
@@ -919,6 +977,10 @@ filter.exe.projectorLinux = Linux\u653e\u6620\u6587\u4ef6
callStack.header.swf = SWF
#after 21.0.0
button.addfunction = \u6dfb\u52a0\u65b0\u51fd\u6570
+message.confirm.addfunction = \u6b64\u64cd\u4f5c\u5c06\u4f7f\u7528\u5206\u914d\u7684MethodBody\u521b\u5efa\u4e00\u4e2a\u65b0\u7684MethodInfo\u5bf9\u8c61,\u5e76\u8fd4\u56de\u65b9\u6cd5\u4fe1\u606f\u7d22\u5f15\r\n\
+ \u60a8\u53ef\u4ee5\u5c06\u5176\u7528\u4f5c\u65b0\u51fd\u6570\u6307\u4ee4\u7684\u64cd\u4f5c\u6570.\r\n\
+ \u8981\u7f16\u8f91\u6b64\u51fd\u6570\u7684\u4e3b\u4f53\u548c\u53c2\u6570,\u60a8\u5fc5\u987b\u5728ActionScript\u89c6\u56fe\u4e2d\u627e\u5230\u5b83
+addfunction.result = \u751f\u6210\u7684\u65b0\u65b9\u6cd5\u4fe1\u606fid:%method_info_index%.\u6309"\u786e\u5b9a"\u5c06\u5176\u590d\u5236\u5230\u526a\u8d34\u677f
addfunction.result.title = \u65b0\u65b9\u6cd5\u4fe1\u606f
#after 21.0.2
filter.air.as3proj = FlashDevelop AS3\u5de5\u7a0b (*.as3proj)
@@ -928,3 +990,9 @@ packer.key = \u8f93\u5165\u6253\u5305\u5de5\u5177"%packer%"\u7684\u5bc6\u94a5:
contextmenu.exportVsCode = \u5bfc\u51fa\u4e3aVS Code\u5de5\u7a0b
work.exporting.vsCode = \u6b63\u5728\u5bfc\u51fa\u4e3aVS Code\u5de5\u7a0b
menu.file.export.vsCode = \u5bfc\u51fa\u4e3aVS Code\u5de5\u7a0b
+#after 21.1.0
+contextmenu.convertShapeType = \u8f6c\u6362\u5f62\u72b6\u7c7b\u578b
+contextmenu.convertPlaceObjectType = \u8f6c\u6362\u653e\u7f6e\u5bf9\u8c61\u7c7b\u578b
+work.decompiling.allScripts.ucf = \u53cd\u7f16\u8bd1\u6240\u6709\u811a\u672c\u4ee5\u83b7\u5f97\u672a\u521d\u59cb\u5316\u7684\u7c7b\u5b57\u6bb5.\u8fd9\u53ef\u80fd\u9700\u8981\u4e00\u6bb5\u65f6\u95f4
+#after 21.1.1
+menu.file.view.easy = \u7b80\u6613\u6a21\u5f0f