diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java index 0a8050cf8..4321d7334 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -1,182 +1,182 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash; - -import com.jpexs.decompiler.flash.abc.ScriptPack; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.ScriptInfo; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedText; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.tags.base.ASMSource; -import com.jpexs.helpers.ImmediateFuture; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class DecompilerPool { - - private final ThreadPoolExecutor executor; - - public DecompilerPool() { - int threadCount = Configuration.getParallelThreadCount(); - executor = new ThreadPoolExecutor(threadCount, threadCount, - 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>()); - } - - public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - writer.startFunction("!script"); - src.getActionScriptSource(writer, actions); - writer.endFunction(); - - HighlightedText result = new HighlightedText(writer); - SWF swf = src.getSwf(); - if (swf != null) { - swf.as2Cache.put(src, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - int scriptIndex = pack.scriptIndex; - ScriptInfo script = null; - if (scriptIndex > -1) { - script = pack.abc.script_info.get(scriptIndex); - } - boolean parallel = Configuration.parallelSpeedUp.get(); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); - - HighlightedText result = new HighlightedText(writer); - SWF swf = pack.getSwf(); - if (swf != null) { - swf.as3Cache.put(pack, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - private Future submit(Callable callable) { - boolean parallel = Configuration.parallelSpeedUp.get(); - if (parallel) { - Future f = executor.submit(callable); - return f; - } else { - boolean cancelled = false; - Throwable throwable = null; - HighlightedText result = null; - try { - result = callable.call(); - } catch (InterruptedException ex) { - cancelled = true; - } catch (Exception ex) { - throwable = ex; - } - - return new ImmediateFuture<>(result, throwable, cancelled); - } - } - - public String getStat() { - return "core: " + executor.getCorePoolSize() - + " size: " + executor.getPoolSize() - + " largest: " + executor.getLargestPoolSize() - + " max: " + executor.getMaximumPoolSize() - + " active: " + executor.getActiveCount() - + " count: " + executor.getTaskCount() - + " completed: " + executor.getCompletedTaskCount(); - } - - public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { - Future future = submitTask(src, actions, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public HighlightedText decompile(ScriptPack pack) throws InterruptedException { - Future future = submitTask(pack, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public void shutdown() throws InterruptedException { - executor.shutdown(); - if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.ScriptInfo; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.helpers.ImmediateFuture; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class DecompilerPool { + + private final ThreadPoolExecutor executor; + + public DecompilerPool() { + int threadCount = Configuration.getParallelThreadCount(); + executor = new ThreadPoolExecutor(threadCount, threadCount, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>()); + } + + public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + writer.startFunction("!script"); + src.getActionScriptSource(writer, actions); + writer.endFunction(); + + HighlightedText result = new HighlightedText(writer); + SWF swf = src.getSwf(); + if (swf != null) { + swf.as2Cache.put(src, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + int scriptIndex = pack.scriptIndex; + ScriptInfo script = null; + if (scriptIndex > -1) { + script = pack.abc.script_info.get(scriptIndex); + } + boolean parallel = Configuration.parallelSpeedUp.get(); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); + + HighlightedText result = new HighlightedText(writer); + SWF swf = pack.getSwf(); + if (swf != null) { + swf.as3Cache.put(pack, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + private Future submit(Callable callable) { + boolean parallel = Configuration.parallelSpeedUp.get(); + if (parallel) { + Future f = executor.submit(callable); + return f; + } else { + boolean cancelled = false; + Throwable throwable = null; + HighlightedText result = null; + try { + result = callable.call(); + } catch (InterruptedException ex) { + cancelled = true; + } catch (Exception ex) { + throwable = ex; + } + + return new ImmediateFuture<>(result, throwable, cancelled); + } + } + + public String getStat() { + return "core: " + executor.getCorePoolSize() + + " size: " + executor.getPoolSize() + + " largest: " + executor.getLargestPoolSize() + + " max: " + executor.getMaximumPoolSize() + + " active: " + executor.getActiveCount() + + " count: " + executor.getTaskCount() + + " completed: " + executor.getCompletedTaskCount(); + } + + public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { + Future future = submitTask(src, actions, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public HighlightedText decompile(ScriptPack pack) throws InterruptedException { + Future future = submitTask(pack, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public void shutdown() throws InterruptedException { + executor.shutdown(); + if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { + } + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index 720918a55..5575b7397 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -1,137 +1,137 @@ -/* - * Copyright (C) 2010-2016 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 . - */ -package com.jpexs.decompiler.flash.gui.abc; - -import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.abc.types.traits.TraitType; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.helpers.NulWriter; -import com.jpexs.decompiler.flash.search.ABCSearchResult; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class TraitsListItem { - - private final TraitType type; - - private final boolean isStatic; - - private final ABC abc; - - private final int classIndex; - - private final int index; - - private final int scriptIndex; - - public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; - - public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; - - public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; - - public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { - this.type = type; - this.index = index; - this.isStatic = isStatic; - this.abc = abc; - this.classIndex = classIndex; - this.scriptIndex = scriptIndex; - } - - public int getGlobalTraitId() { - return abc.getGlobalTraitId(type, isStatic, classIndex, index); - } - - public String toStringName() { - - if (type == TraitType.INITIALIZER) { - if (!isStatic) { - return "__" + STR_INSTANCE_INITIALIZER; - } else { - return "__" + STR_CLASS_INITIALIZER; - } - } - if (type == TraitType.SCRIPT_INITIALIZER) { - return "__" + STR_SCRIPT_INITIALIZER; - } - if (isStatic) { - return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } else { - return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } - } - - @Override - public String toString() { - String s = ""; - try { - if (type == TraitType.SCRIPT_INITIALIZER) { - s = STR_SCRIPT_INITIALIZER; - } else if (type == TraitType.INITIALIZER) { - if (!isStatic) { - s = STR_INSTANCE_INITIALIZER; - } else { - s = STR_CLASS_INITIALIZER; - } - } else if (isStatic) { - ConvertData convertData = new ConvertData(); - Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } else { - ConvertData convertData = new ConvertData(); - Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } - } catch (InterruptedException ex) { - Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); - } - s = s.replaceAll("[ \r\n]+", " "); - return s; - } - - public TraitType getType() { - return type; - } - - public boolean isStatic() { - return isStatic; - } - - public int getClassIndex() { - return classIndex; - } - - public int getIndex() { - return index; - } -} +/* + * Copyright (C) 2010-2016 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 . + */ +package com.jpexs.decompiler.flash.gui.abc; + +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.helpers.NulWriter; +import com.jpexs.decompiler.flash.search.ABCSearchResult; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class TraitsListItem { + + private final TraitType type; + + private final boolean isStatic; + + private final ABC abc; + + private final int classIndex; + + private final int index; + + private final int scriptIndex; + + public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; + + public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; + + public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; + + public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { + this.type = type; + this.index = index; + this.isStatic = isStatic; + this.abc = abc; + this.classIndex = classIndex; + this.scriptIndex = scriptIndex; + } + + public int getGlobalTraitId() { + return abc.getGlobalTraitId(type, isStatic, classIndex, index); + } + + public String toStringName() { + + if (type == TraitType.INITIALIZER) { + if (!isStatic) { + return "__" + STR_INSTANCE_INITIALIZER; + } else { + return "__" + STR_CLASS_INITIALIZER; + } + } + if (type == TraitType.SCRIPT_INITIALIZER) { + return "__" + STR_SCRIPT_INITIALIZER; + } + if (isStatic) { + return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } else { + return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } + } + + @Override + public String toString() { + String s = ""; + try { + if (type == TraitType.SCRIPT_INITIALIZER) { + s = STR_SCRIPT_INITIALIZER; + } else if (type == TraitType.INITIALIZER) { + if (!isStatic) { + s = STR_INSTANCE_INITIALIZER; + } else { + s = STR_CLASS_INITIALIZER; + } + } else if (isStatic) { + ConvertData convertData = new ConvertData(); + Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } else { + ConvertData convertData = new ConvertData(); + Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } + } catch (InterruptedException ex) { + Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); + } + s = s.replaceAll("[ \r\n]+", " "); + return s; + } + + public TraitType getType() { + return type; + } + + public boolean isStatic() { + return isStatic; + } + + public int getClassIndex() { + return classIndex; + } + + public int getIndex() { + return index; + } +} 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 811de2324..669f23a6e 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -1,734 +1,734 @@ -# Copyright (C) 2010-2016 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 . - -menu.file = \u6587\u4ef6 -menu.file.open = \u6253\u5f00... -menu.file.save = \u4fdd\u5b58 -menu.file.saveas = \u53e6\u5b58\u4e3a... -menu.file.export.fla = \u5bfc\u51fa\u5230 FLA -menu.file.export.all = \u5bfc\u51fa\u6240\u6709 -menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 -menu.file.exit = \u9000\u51fa - -menu.tools = \u5de5\u5177 -menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... -menu.tools.proxy = \u4ee3\u7406 -menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 -menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... -menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 -menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 -menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b - -menu.settings = \u8bbe\u7f6e -menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 -menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 -menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f -menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) -menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 -menu.settings.language = \u66f4\u6539\u8bed\u8a00 -menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 -menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b - -menu.help = \u5e2e\u52a9 -menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... -menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! -menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 -menu.help.about = \u5173\u4e8e... - -contextmenu.remove = \u5220\u9664 - -button.save = \u4fdd\u5b58 -button.edit = \u7f16\u8f91 -button.cancel = \u53d6\u6d88 -button.replace = \u66ff\u6362... - -notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) - -swfpreview = SWF \u9884\u89c8 -swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) - -parameters = \u53c2\u6570 - -rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: - -rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. -rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. - -node.texts = \u6587\u672c -node.images = \u56fe\u50cf -node.movies = \u89c6\u9891 -node.sounds = \u58f0\u97f3 -node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e -node.fonts = \u5b57\u4f53 -node.sprites = \u7cbe\u7075 -node.shapes = \u56fe\u5f62 -node.morphshapes = \u53d8\u5f62\u5f62\u72b6 -node.buttons = \u6309\u94ae -node.frames = \u5e27 -node.scripts = \u811a\u672c - -message.warning = \u8b66\u544a -message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f -message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 -message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f -message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f -message.confirm = \u786e\u8ba4 - -message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 - -message.parallel = \u591a\u7ebf\u7a0b -message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait - -message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 -message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 -message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 -message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 - -work.buffering = \u7f13\u51b2 -work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 -work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae -work.disassembling = \u53cd\u6c47\u7f16 -work.exporting = \u5bfc\u51fa\u4e2d -work.searching = \u641c\u7d22\u4e2d -work.renaming = \u91cd\u547d\u540d\u4e2d -work.exporting.fla = \u5bfc\u51fa FLA \u4e2d -work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d -work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d -work.decompiling = \u53cd\u7f16\u8bd1\u4e2d -work.gettingvariables = \u83b7\u53d6\u53d8\u91cf -work.reading.swf = \u8bfb\u5165 SWF \u4e2d -work.creatingwindow = \u521b\u5efa\u7a97\u4f53 -work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 - -work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 - -message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . -message.search.notfound.title = \u6ca1\u6709\u627e\u5230 - -message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname -message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 -message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 -message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% - -filter.images = \u56fe\u7247 (%extensions%) -filter.fla = %version% \u6587\u4ef6 (*.fla) -filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) -filter.swf = SWF \u6587\u4ef6 (*.swf) - -error = \u9519\u8bef -error.image.invalid = \u65e0\u6548\u56fe\u7247. - -error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c -error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 -error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 -error.export = \u5bfc\u51fa\u65f6\u9519\u8bef - -export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 -export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% - -update.check.title = \u786e\u8ba4\u66f4\u65b0 -update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. - -message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. -message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% - -proxy = \u4ee3\u7406 -proxy.start = \u5f00\u59cb\u4ee3\u7406 -proxy.stop = \u505c\u6b62\u4ee3\u7406 -proxy.show = \u663e\u793a\u4ee3\u7406 -exit = \u9000\u51fa - -panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 -panel.decompiled = AS\u8d44\u6e90 - -search.info = \u641c\u7d22 "%text%" : -search.script = \u811a\u672c - -constants = \u5e38\u91cf -traits = Traits - -pleasewait = \u8bf7\u7a0d\u7b49 - -abc.detail.methodtrait = Method/Getter/Setter Trait -abc.detail.unsupported = - -abc.detail.slotconsttrait = Slot/Const Trait -abc.detail.traitname = \u540d\u79f0: - -abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: -abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: -abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) -abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 - -abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: -abc.detail.methodinfo.parameters = \u53c2\u6570: -abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: - -error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef -error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef - -abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f -abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 -abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 - -abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: - -error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef - -message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. -info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. - -button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 -button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 - -action.edit.experimental = (\u5b9e\u9a8c\u7684) - -message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f - -error.action.save = %error% \u5728 %line% \u884c - -message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f - -#after version 1.6.5u1: - -button.ok = \u786e\u5b9a -button.cancel = \u53d6\u6d88 - -font.name = \u5b57\u4f53\u540d\u79f0: -font.isbold = \u52a0\u7c97: -font.isitalic = \u659c\u4f53: -font.ascent = \u4e0a\u6807: -font.descent = \u4e0b\u6807: -font.leading = Leading: -font.characters = \u5b57\u7b26\u96c6: -font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: -value.unknown = ? - -yes = \u662f -no = \u5426 - -errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 -errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 - -#after version 1.6.6: - -dialog.message.title = \u6d88\u606f -dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 - -button.yes = \u662f -button.no = \u5426 - -FileChooser.openButtonText = \u6253\u5f00 -FileChooser.openButtonToolTipText = \u6253\u5f00 -FileChooser.lookInLabelText = \u6d4f\u89c8: -FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 -FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: -FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: -FileChooser.listViewButtonToolTipText = \u5217\u8868 -FileChooser.listViewButtonAccessibleName = \u5217\u8868 -FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f -FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 -FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 -FileChooser.fileNameHeaderText = \u540d\u79f0 -FileChooser.fileSizeHeaderText = \u5927\u5c0f -FileChooser.fileTypeHeaderText = \u7c7b\u578b -FileChooser.fileDateHeaderText = \u65e5\u671f -FileChooser.fileAttrHeaderText = \u5c5e\u6027 -FileChooser.openDialogTitleText = \u6253\u5f00 -FileChooser.directoryDescriptionText = \u76ee\u5f55 -FileChooser.directoryOpenButtonText = \u6253\u5f00 -FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 -FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 -FileChooser.helpButtonText = \u5e2e\u52a9 -FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 -FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 -FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} -FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) -FileChooser.saveButtonText = \u4fdd\u5b58 -FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 -FileChooser.saveDialogTitleText = \u4fdd\u5b58 -FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: -FileChooser.updateButtonText = \u5237\u65b0 -FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 - -#after version 1.6.6u2: - -FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 -FileChooser.fileDateHeader.textAndMnemonic = Modified -FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 -FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: -FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f -FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b -FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: -FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: -FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 -FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 -FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 -FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: -FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 -FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 -FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: -FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 -FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 -FileChooser.listViewActionLabelText = \u5217\u8868 -FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.refreshActionLabelText = \u5237\u65b0 -FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 -FileChooser.viewMenuLabelText = \u6d4f\u89c8 -FileChooser.fileSizeKiloBytes = {0} KB -FileChooser.fileSizeMegaBytes = {0} MB -FileChooser.fileSizeGigaBytes = {0} GB -FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: - -error.occured = \u53d1\u751f\u9519\u8bef : %error% -button.abort = \u7ec8\u6b62 -button.retry = \u91cd\u8bd5 -button.ignore = \u5ffd\u7565 - -font.source = \u6e90\u5b57\u4f53: - -#after version 1.6.7: - -menu.export = \u5bfc\u51fa -menu.general = \u901a\u7528 -menu.language = \u8bed\u8a00 - -startup.welcometo = \u6b22\u8fce\u4f7f\u7528 -startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 - -error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". - -warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 - -#after version 1.7.0u1: - -menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF -menu.file.reload = \u91cd\u8f7d -message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f - -dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 -button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 - -ColorChooser.okText = \u786e\u5b9a -ColorChooser.cancelText = \u53d6\u6d88 -ColorChooser.resetText = \u91cd\u7f6e -ColorChooser.previewText = \u9884\u89c8 -ColorChooser.swatchesNameText = \u8c03\u8272\u677f -ColorChooser.swatchesRecentText = \u6700\u8fd1: -ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c - -#after version 1.7.1: - -preview.play = \u64ad\u653e -preview.pause = \u6682\u505c -preview.stop = \u505c\u6b62 - -message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f - -menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 - -#after version 1.7.2u2 - -error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 -button.addtrait = \u6dfb\u52a0 Trait -button.font.embed = \u5d4c\u5165... -button.yes.all = \u5168\u662f -button.no.all = \u5168\u5426 -message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f - -filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) -filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b -work.canceled = \u5df2\u53d6\u6d88 -work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b -menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e -menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 - -#after version 1.7.4 -work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d -message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f -contextmenu.closeSwf = \u5173\u95ed SWF -menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 -menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... -filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) - -#after version 1.8.0 -font.updateTexts = \u66f4\u65b0\u6587\u672c - -#after version 1.8.0u1 -menu.file.close = \u5173\u95ed -menu.file.closeAll = \u5168\u90e8\u5173\u95ed -menu.tools.otherTools = \u5176\u4ed6 -menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 -fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: -fontName.copyright = \u5b57\u4f53\u7248\u6743: -button.preview = \u9884\u89c8 -button.reset = \u91cd\u7f6e -errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 -errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 - -decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef - -disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 -disassemblingProgress.reading = \u8bfb\u53d6\u4e2d -disassemblingProgress.deobfuscating = \u6df7\u6dc6 - -contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 - -filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) -filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) -filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) - -open.error = \u9519\u8bef -open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 -open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 - -node.others = \u5176\u4ed6 - -#after version 1.8.1 -menu.tools.search = \u6587\u672c\u67e5\u627e - -#after version 1.8.1u1 -menu.tools.timeline = \u65f6\u95f4\u8f74 - -dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 -button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 - -#default item name, will be used in following sentences -generictag.array.item = \u9879\u76ee -generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% -generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d -generictag.array.remove = \u79fb\u9664 %item% -generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e -generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% - -#after version 2.0.0 -contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 - -filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) -filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) -filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) - -error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 - -button.prev = \u4e0a\u4e00\u9875 -button.next = \u4e0b\u4e00\u9875 - -#after version 2.1.0 -message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 -message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 -message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 - -message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 -message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a - -menu.import = \u5bfc\u5165 -menu.file.import.text = \u5bfc\u5165\u6587\u672c -import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 -error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f - -#after version 2.1.1 -contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 - -abc.action.find-usages = \u67e5\u627e\u5f15\u7528 -abc.action.find-declaration = \u67e5\u627e\u58f0\u660e - -contextmenu.rawEdit = RAW\u7f16\u8f91 -contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 - -menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 - -menu.view = \u67e5\u770b -menu.file.view.resources = \u8d44\u6e90 -menu.file.view.hex = \u4e8c\u8fdb\u5236 - -node.header = \u6587\u4ef6\u5934 - -header.signature = \u6587\u4ef6\u6807\u8bc6: -header.compression = \u538b\u7f29\u6a21\u5f0f: -header.compression.lzma = LZMA -header.compression.zlib = ZLIB -header.compression.none = \u65e0\u538b\u7f29 -header.version = SWF\u7248\u672c: -header.gfx = GFX: -header.filesize = \u6587\u4ef6\u5927\u5c0f -header.framerate = \u5e27\u7387: -header.framecount = \u5e27\u6570: -header.displayrect = \u663e\u793a\u533a\u57df: -header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips -header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels - -#after version 2.1.2 -contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 -contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c -contextmenu.parseABC = \u89e3\u6790ABC -contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 - -#after version 2.1.3 -menu.deobfuscation = \u53cd\u6df7\u6dc6 -menu.file.deobfuscation.old = \u65e7\u6837\u5f0f -menu.file.deobfuscation.new = \u65b0\u6837\u5f0f - -#after version 2.1.4 -contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 -binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 - -#after version 3.0.0 -button.zoomin.hint = \u653e\u5927 -button.zoomout.hint = \u7f29\u5c0f -button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 -button.zoomnone.hint = \u7f29\u653e\u5230 1:1 -button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f - -editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 - -#Font name which is presented in the SWF Font tag -font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: - -menu.debugger = \u8c03\u8bd5\u5668 -menu.debugger.switch = \u8c03\u8bd5\u5668 -menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 -menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 - -message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 - -contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e - -deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d -deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 - -#after version 4.0.2 -preview.nextframe = \u4e0b\u4e00\u5e27 -preview.prevframe = \u4e0a\u4e00\u5e27 -preview.gotoframe = \u8f6c\u5230\u5e27... - -preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 -preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) -preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 - -error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f - -#after version 4.0.5 -contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 -fit = \u9002\u5408 -button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c - -menu.tools.replace = \u6587\u672c\u66ff\u6362 - -message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f -message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f - -contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 -contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML -contextmenu.importSwfXml = \u5bfc\u5165 SWF XML - -filter.xml = XML - -#after version 4.1.0 -contextmenu.undo = \u64a4\u6d88 - -text.align.left = \u5de6\u5bf9\u9f50 -text.align.right = \u53f3\u5bf9\u9f50 -text.align.center = \u5c45\u4e2d\u5bf9\u9f50 -text.align.justify = \u4e24\u7aef\u5bf9\u9f50 - -text.undo = \u64a4\u6d88\u66f4\u6539 - -menu.file.import.xml = \u5bfc\u5165 SWF XML -menu.file.export.xml = \u5bfc\u51fa SWF XML - -#after version 4.1.1 -text.align.translatex.decrease = \u51cf\u5c11 TranslateX -text.align.translatex.increase = \u589e\u52a0 TranslateX -selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e -selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e -button.ignoreAll = \u5ffd\u7565\u5168\u90e8 -menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class -text.toggleCase = \u5207\u6362\u5916\u58f3 - -#after version 5.0.2 -preview.loop = \u5faa\u73af -menu.file.import.script = \u5bfc\u5165\u811a\u672c -contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e -button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e -button.resolveConstants = \u89e3\u6790\u5e38\u6570 - -#after version 5.1.0 -button.viewConstants = \u67e5\u770b\u5e38\u91cf -work.exported = \u5bfc\u51fa -button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... - -tagInfo.header.name = \u540d\u79f0 -tagInfo.header.value = \u503c -tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b -tagInfo.characterId = \u5b57\u7b26 ID -tagInfo.offset = \u504f\u79fb -tagInfo.length = \u957f\u5ea6 -tagInfo.bounds = \u8fb9\u754c -tagInfo.width = \u5bbd\u5ea6 -tagInfo.height = \u9ad8\u5ea6 -tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 - -button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a -taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f - -tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 - -#after version 5.3.0 -header.uncompressed = \u65e0\u538b\u7f29 -header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 -header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 -header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 - -tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 -tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f -tagInfo.samplingRate = \u91c7\u6837\u7387 -tagInfo.stereo = \u7acb\u4f53\u58f0 -tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf - -filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) -filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 - -import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 -import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 - -error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% -error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 - -#after version 6.0.2 -contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 -menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e - -#after version 6.1.1 -menu.file.start = \u5f00\u59cb -menu.file.start.run = \u8fd0\u884c -menu.file.start.stop = \u505c\u6b62 -menu.file.start.debug = \u8c03\u8bd5 -menu.debugging = \u8c03\u8bd5\u4e2d -menu.debugging.debug = \u8c03\u8bd5 -menu.debugging.debug.stop = \u505c\u6b62 -menu.debugging.debug.pause = \u6682\u505c -menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c -menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 -menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa -menu.debugging.debug.continue = \u7ee7\u7eed -menu.debugging.debug.stack = \u5806\u6808... -menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... - -message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 - -debugpanel.header = \u8c03\u8bd5\u4e2d - -variables.header.registers = \u5bc4\u5b58\u5668 -variables.header.locals = \u672c\u673a -variables.header.arguments = \u53c2\u6570 -variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe -variables.column.name = \u540d\u79f0 -variables.column.type = \u7c7b\u578b -variables.column.value = \u503c - -callStack.header = \u8c03\u7528\u5806\u6808 -callStack.header.file = \u6587\u4ef6 -callStack.header.line = \u884c - -stack.header = \u5806\u53e0 -stack.header.item = \u9879\u76ee - -constantpool.header = \u5e38\u91cf\u6c60 -constantpool.header.id = Id -constantpool.header.value = \u503c - -work.running = \u8fd0\u884c\u884c -work.debugging = \u8c03\u8bd5\u4e2d -work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 -work.breakat = \u65ad\u70b9\u5728\u0020 -work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 - -debuglog.header = \u65e5\u5fd7 -debuglog.button.clear = \u6e05\u9664 - -#after 7.0.1 -work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 - -error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 - -debug.break.reason.unknown = (\u672a\u77e5) -debug.break.reason.breakpoint = (\u65ad\u70b9) -debug.break.reason.watch = (\u89c2\u770b) -debug.break.reason.fault = (\u6545\u969c) -debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) -debug.break.reason.step = (\u6b65\u9aa4) -debug.break.reason.halt = (\u505c\u6b62) -debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) - -menu.file.start.debugpcode = \u8c03\u8bd5 P-code - -#after 7.1.2 -button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... -message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 - -message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f -message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f - -message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 -message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f - -menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f - -#after 8.0.1 -menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a -message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 - -menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 -message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f -export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 - -button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 -button.remove = \u6e05\u9664 -button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb - -generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 -generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ - ------------------\n\ - \u6807\u91cf\u7c7b\u578b:\n\ - %scalar_samples%\ - \u5176\u4ed6\u7c7b\u578b:\n\ - %nonscalar_samples%\ - \n\ - \u6ce8\u610f:\n\ - \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ - %reference_sample%\n\ - \ * Keys in Dictionary entries can be any type\n -contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a - +# Copyright (C) 2010-2016 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 . + +menu.file = \u6587\u4ef6 +menu.file.open = \u6253\u5f00... +menu.file.save = \u4fdd\u5b58 +menu.file.saveas = \u53e6\u5b58\u4e3a... +menu.file.export.fla = \u5bfc\u51fa\u5230 FLA +menu.file.export.all = \u5bfc\u51fa\u6240\u6709 +menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 +menu.file.exit = \u9000\u51fa + +menu.tools = \u5de5\u5177 +menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... +menu.tools.proxy = \u4ee3\u7406 +menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 +menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... +menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 +menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 +menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b + +menu.settings = \u8bbe\u7f6e +menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 +menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 +menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f +menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) +menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 +menu.settings.language = \u66f4\u6539\u8bed\u8a00 +menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 +menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b + +menu.help = \u5e2e\u52a9 +menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... +menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! +menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 +menu.help.about = \u5173\u4e8e... + +contextmenu.remove = \u5220\u9664 + +button.save = \u4fdd\u5b58 +button.edit = \u7f16\u8f91 +button.cancel = \u53d6\u6d88 +button.replace = \u66ff\u6362... + +notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) + +swfpreview = SWF \u9884\u89c8 +swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) + +parameters = \u53c2\u6570 + +rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: + +rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. +rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. + +node.texts = \u6587\u672c +node.images = \u56fe\u50cf +node.movies = \u89c6\u9891 +node.sounds = \u58f0\u97f3 +node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e +node.fonts = \u5b57\u4f53 +node.sprites = \u7cbe\u7075 +node.shapes = \u56fe\u5f62 +node.morphshapes = \u53d8\u5f62\u5f62\u72b6 +node.buttons = \u6309\u94ae +node.frames = \u5e27 +node.scripts = \u811a\u672c + +message.warning = \u8b66\u544a +message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f +message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 +message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f +message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f +message.confirm = \u786e\u8ba4 + +message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 + +message.parallel = \u591a\u7ebf\u7a0b +message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait + +message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 +message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 +message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 +message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 + +work.buffering = \u7f13\u51b2 +work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 +work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae +work.disassembling = \u53cd\u6c47\u7f16 +work.exporting = \u5bfc\u51fa\u4e2d +work.searching = \u641c\u7d22\u4e2d +work.renaming = \u91cd\u547d\u540d\u4e2d +work.exporting.fla = \u5bfc\u51fa FLA \u4e2d +work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d +work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d +work.decompiling = \u53cd\u7f16\u8bd1\u4e2d +work.gettingvariables = \u83b7\u53d6\u53d8\u91cf +work.reading.swf = \u8bfb\u5165 SWF \u4e2d +work.creatingwindow = \u521b\u5efa\u7a97\u4f53 +work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 + +work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 + +message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . +message.search.notfound.title = \u6ca1\u6709\u627e\u5230 + +message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname +message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 +message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 +message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% + +filter.images = \u56fe\u7247 (%extensions%) +filter.fla = %version% \u6587\u4ef6 (*.fla) +filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) +filter.swf = SWF \u6587\u4ef6 (*.swf) + +error = \u9519\u8bef +error.image.invalid = \u65e0\u6548\u56fe\u7247. + +error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c +error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 +error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 +error.export = \u5bfc\u51fa\u65f6\u9519\u8bef + +export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 +export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% + +update.check.title = \u786e\u8ba4\u66f4\u65b0 +update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. + +message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. +message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% + +proxy = \u4ee3\u7406 +proxy.start = \u5f00\u59cb\u4ee3\u7406 +proxy.stop = \u505c\u6b62\u4ee3\u7406 +proxy.show = \u663e\u793a\u4ee3\u7406 +exit = \u9000\u51fa + +panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 +panel.decompiled = AS\u8d44\u6e90 + +search.info = \u641c\u7d22 "%text%" : +search.script = \u811a\u672c + +constants = \u5e38\u91cf +traits = Traits + +pleasewait = \u8bf7\u7a0d\u7b49 + +abc.detail.methodtrait = Method/Getter/Setter Trait +abc.detail.unsupported = - +abc.detail.slotconsttrait = Slot/Const Trait +abc.detail.traitname = \u540d\u79f0: + +abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: +abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: +abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) +abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 + +abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: +abc.detail.methodinfo.parameters = \u53c2\u6570: +abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: + +error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef +error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef + +abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f +abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 +abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 + +abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: + +error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef + +message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. +info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. + +button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 +button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 + +action.edit.experimental = (\u5b9e\u9a8c\u7684) + +message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f + +error.action.save = %error% \u5728 %line% \u884c + +message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f + +#after version 1.6.5u1: + +button.ok = \u786e\u5b9a +button.cancel = \u53d6\u6d88 + +font.name = \u5b57\u4f53\u540d\u79f0: +font.isbold = \u52a0\u7c97: +font.isitalic = \u659c\u4f53: +font.ascent = \u4e0a\u6807: +font.descent = \u4e0b\u6807: +font.leading = Leading: +font.characters = \u5b57\u7b26\u96c6: +font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: +value.unknown = ? + +yes = \u662f +no = \u5426 + +errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 +errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 + +#after version 1.6.6: + +dialog.message.title = \u6d88\u606f +dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 + +button.yes = \u662f +button.no = \u5426 + +FileChooser.openButtonText = \u6253\u5f00 +FileChooser.openButtonToolTipText = \u6253\u5f00 +FileChooser.lookInLabelText = \u6d4f\u89c8: +FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 +FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: +FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: +FileChooser.listViewButtonToolTipText = \u5217\u8868 +FileChooser.listViewButtonAccessibleName = \u5217\u8868 +FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f +FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 +FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 +FileChooser.fileNameHeaderText = \u540d\u79f0 +FileChooser.fileSizeHeaderText = \u5927\u5c0f +FileChooser.fileTypeHeaderText = \u7c7b\u578b +FileChooser.fileDateHeaderText = \u65e5\u671f +FileChooser.fileAttrHeaderText = \u5c5e\u6027 +FileChooser.openDialogTitleText = \u6253\u5f00 +FileChooser.directoryDescriptionText = \u76ee\u5f55 +FileChooser.directoryOpenButtonText = \u6253\u5f00 +FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 +FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 +FileChooser.helpButtonText = \u5e2e\u52a9 +FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 +FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 +FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} +FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) +FileChooser.saveButtonText = \u4fdd\u5b58 +FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 +FileChooser.saveDialogTitleText = \u4fdd\u5b58 +FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: +FileChooser.updateButtonText = \u5237\u65b0 +FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 + +#after version 1.6.6u2: + +FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 +FileChooser.fileDateHeader.textAndMnemonic = Modified +FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 +FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: +FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f +FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b +FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: +FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: +FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 +FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 +FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 +FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: +FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 +FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 +FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: +FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 +FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 +FileChooser.listViewActionLabelText = \u5217\u8868 +FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.refreshActionLabelText = \u5237\u65b0 +FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 +FileChooser.viewMenuLabelText = \u6d4f\u89c8 +FileChooser.fileSizeKiloBytes = {0} KB +FileChooser.fileSizeMegaBytes = {0} MB +FileChooser.fileSizeGigaBytes = {0} GB +FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: + +error.occured = \u53d1\u751f\u9519\u8bef : %error% +button.abort = \u7ec8\u6b62 +button.retry = \u91cd\u8bd5 +button.ignore = \u5ffd\u7565 + +font.source = \u6e90\u5b57\u4f53: + +#after version 1.6.7: + +menu.export = \u5bfc\u51fa +menu.general = \u901a\u7528 +menu.language = \u8bed\u8a00 + +startup.welcometo = \u6b22\u8fce\u4f7f\u7528 +startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 + +error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". + +warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 + +#after version 1.7.0u1: + +menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF +menu.file.reload = \u91cd\u8f7d +message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f + +dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 +button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 + +ColorChooser.okText = \u786e\u5b9a +ColorChooser.cancelText = \u53d6\u6d88 +ColorChooser.resetText = \u91cd\u7f6e +ColorChooser.previewText = \u9884\u89c8 +ColorChooser.swatchesNameText = \u8c03\u8272\u677f +ColorChooser.swatchesRecentText = \u6700\u8fd1: +ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c + +#after version 1.7.1: + +preview.play = \u64ad\u653e +preview.pause = \u6682\u505c +preview.stop = \u505c\u6b62 + +message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f + +menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 + +#after version 1.7.2u2 + +error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 +button.addtrait = \u6dfb\u52a0 Trait +button.font.embed = \u5d4c\u5165... +button.yes.all = \u5168\u662f +button.no.all = \u5168\u5426 +message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f + +filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) +filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b +work.canceled = \u5df2\u53d6\u6d88 +work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b +menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e +menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 + +#after version 1.7.4 +work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d +message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f +contextmenu.closeSwf = \u5173\u95ed SWF +menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 +menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... +filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) + +#after version 1.8.0 +font.updateTexts = \u66f4\u65b0\u6587\u672c + +#after version 1.8.0u1 +menu.file.close = \u5173\u95ed +menu.file.closeAll = \u5168\u90e8\u5173\u95ed +menu.tools.otherTools = \u5176\u4ed6 +menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 +fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: +fontName.copyright = \u5b57\u4f53\u7248\u6743: +button.preview = \u9884\u89c8 +button.reset = \u91cd\u7f6e +errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 +errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 + +decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef + +disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 +disassemblingProgress.reading = \u8bfb\u53d6\u4e2d +disassemblingProgress.deobfuscating = \u6df7\u6dc6 + +contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 + +filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) +filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) +filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) + +open.error = \u9519\u8bef +open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 +open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 + +node.others = \u5176\u4ed6 + +#after version 1.8.1 +menu.tools.search = \u6587\u672c\u67e5\u627e + +#after version 1.8.1u1 +menu.tools.timeline = \u65f6\u95f4\u8f74 + +dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 +button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 + +#default item name, will be used in following sentences +generictag.array.item = \u9879\u76ee +generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% +generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d +generictag.array.remove = \u79fb\u9664 %item% +generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e +generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% + +#after version 2.0.0 +contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 + +filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) +filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) +filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) + +error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 + +button.prev = \u4e0a\u4e00\u9875 +button.next = \u4e0b\u4e00\u9875 + +#after version 2.1.0 +message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 +message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 +message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 + +message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 +message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a + +menu.import = \u5bfc\u5165 +menu.file.import.text = \u5bfc\u5165\u6587\u672c +import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 +error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f + +#after version 2.1.1 +contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 + +abc.action.find-usages = \u67e5\u627e\u5f15\u7528 +abc.action.find-declaration = \u67e5\u627e\u58f0\u660e + +contextmenu.rawEdit = RAW\u7f16\u8f91 +contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 + +menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 + +menu.view = \u67e5\u770b +menu.file.view.resources = \u8d44\u6e90 +menu.file.view.hex = \u4e8c\u8fdb\u5236 + +node.header = \u6587\u4ef6\u5934 + +header.signature = \u6587\u4ef6\u6807\u8bc6: +header.compression = \u538b\u7f29\u6a21\u5f0f: +header.compression.lzma = LZMA +header.compression.zlib = ZLIB +header.compression.none = \u65e0\u538b\u7f29 +header.version = SWF\u7248\u672c: +header.gfx = GFX: +header.filesize = \u6587\u4ef6\u5927\u5c0f +header.framerate = \u5e27\u7387: +header.framecount = \u5e27\u6570: +header.displayrect = \u663e\u793a\u533a\u57df: +header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips +header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels + +#after version 2.1.2 +contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 +contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c +contextmenu.parseABC = \u89e3\u6790ABC +contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 + +#after version 2.1.3 +menu.deobfuscation = \u53cd\u6df7\u6dc6 +menu.file.deobfuscation.old = \u65e7\u6837\u5f0f +menu.file.deobfuscation.new = \u65b0\u6837\u5f0f + +#after version 2.1.4 +contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 +binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 + +#after version 3.0.0 +button.zoomin.hint = \u653e\u5927 +button.zoomout.hint = \u7f29\u5c0f +button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 +button.zoomnone.hint = \u7f29\u653e\u5230 1:1 +button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f + +editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 + +#Font name which is presented in the SWF Font tag +font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: + +menu.debugger = \u8c03\u8bd5\u5668 +menu.debugger.switch = \u8c03\u8bd5\u5668 +menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 +menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 + +message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 + +contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e + +deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d +deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 + +#after version 4.0.2 +preview.nextframe = \u4e0b\u4e00\u5e27 +preview.prevframe = \u4e0a\u4e00\u5e27 +preview.gotoframe = \u8f6c\u5230\u5e27... + +preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 +preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) +preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 + +error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f + +#after version 4.0.5 +contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 +fit = \u9002\u5408 +button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c + +menu.tools.replace = \u6587\u672c\u66ff\u6362 + +message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f +message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f + +contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 +contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML +contextmenu.importSwfXml = \u5bfc\u5165 SWF XML + +filter.xml = XML + +#after version 4.1.0 +contextmenu.undo = \u64a4\u6d88 + +text.align.left = \u5de6\u5bf9\u9f50 +text.align.right = \u53f3\u5bf9\u9f50 +text.align.center = \u5c45\u4e2d\u5bf9\u9f50 +text.align.justify = \u4e24\u7aef\u5bf9\u9f50 + +text.undo = \u64a4\u6d88\u66f4\u6539 + +menu.file.import.xml = \u5bfc\u5165 SWF XML +menu.file.export.xml = \u5bfc\u51fa SWF XML + +#after version 4.1.1 +text.align.translatex.decrease = \u51cf\u5c11 TranslateX +text.align.translatex.increase = \u589e\u52a0 TranslateX +selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e +selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e +button.ignoreAll = \u5ffd\u7565\u5168\u90e8 +menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class +text.toggleCase = \u5207\u6362\u5916\u58f3 + +#after version 5.0.2 +preview.loop = \u5faa\u73af +menu.file.import.script = \u5bfc\u5165\u811a\u672c +contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e +button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e +button.resolveConstants = \u89e3\u6790\u5e38\u6570 + +#after version 5.1.0 +button.viewConstants = \u67e5\u770b\u5e38\u91cf +work.exported = \u5bfc\u51fa +button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... + +tagInfo.header.name = \u540d\u79f0 +tagInfo.header.value = \u503c +tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b +tagInfo.characterId = \u5b57\u7b26 ID +tagInfo.offset = \u504f\u79fb +tagInfo.length = \u957f\u5ea6 +tagInfo.bounds = \u8fb9\u754c +tagInfo.width = \u5bbd\u5ea6 +tagInfo.height = \u9ad8\u5ea6 +tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 + +button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a +taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f + +tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 + +#after version 5.3.0 +header.uncompressed = \u65e0\u538b\u7f29 +header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 +header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 +header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 + +tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 +tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f +tagInfo.samplingRate = \u91c7\u6837\u7387 +tagInfo.stereo = \u7acb\u4f53\u58f0 +tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf + +filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) +filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 + +import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 +import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 + +error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% +error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 + +#after version 6.0.2 +contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 +menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e + +#after version 6.1.1 +menu.file.start = \u5f00\u59cb +menu.file.start.run = \u8fd0\u884c +menu.file.start.stop = \u505c\u6b62 +menu.file.start.debug = \u8c03\u8bd5 +menu.debugging = \u8c03\u8bd5\u4e2d +menu.debugging.debug = \u8c03\u8bd5 +menu.debugging.debug.stop = \u505c\u6b62 +menu.debugging.debug.pause = \u6682\u505c +menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c +menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 +menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa +menu.debugging.debug.continue = \u7ee7\u7eed +menu.debugging.debug.stack = \u5806\u6808... +menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... + +message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 + +debugpanel.header = \u8c03\u8bd5\u4e2d + +variables.header.registers = \u5bc4\u5b58\u5668 +variables.header.locals = \u672c\u673a +variables.header.arguments = \u53c2\u6570 +variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe +variables.column.name = \u540d\u79f0 +variables.column.type = \u7c7b\u578b +variables.column.value = \u503c + +callStack.header = \u8c03\u7528\u5806\u6808 +callStack.header.file = \u6587\u4ef6 +callStack.header.line = \u884c + +stack.header = \u5806\u53e0 +stack.header.item = \u9879\u76ee + +constantpool.header = \u5e38\u91cf\u6c60 +constantpool.header.id = Id +constantpool.header.value = \u503c + +work.running = \u8fd0\u884c\u884c +work.debugging = \u8c03\u8bd5\u4e2d +work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 +work.breakat = \u65ad\u70b9\u5728\u0020 +work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 + +debuglog.header = \u65e5\u5fd7 +debuglog.button.clear = \u6e05\u9664 + +#after 7.0.1 +work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 + +error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 + +debug.break.reason.unknown = (\u672a\u77e5) +debug.break.reason.breakpoint = (\u65ad\u70b9) +debug.break.reason.watch = (\u89c2\u770b) +debug.break.reason.fault = (\u6545\u969c) +debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) +debug.break.reason.step = (\u6b65\u9aa4) +debug.break.reason.halt = (\u505c\u6b62) +debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) + +menu.file.start.debugpcode = \u8c03\u8bd5 P-code + +#after 7.1.2 +button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... +message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 + +message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f +message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f + +message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 +message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f + +menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f + +#after 8.0.1 +menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a +message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 + +menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 +message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f +export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 + +button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 +button.remove = \u6e05\u9664 +button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb + +generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 +generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ + ------------------\n\ + \u6807\u91cf\u7c7b\u578b:\n\ + %scalar_samples%\ + \u5176\u4ed6\u7c7b\u578b:\n\ + %nonscalar_samples%\ + \n\ + \u6ce8\u610f:\n\ + \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ + %reference_sample%\n\ + \ * Keys in Dictionary entries can be any type\n +contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a + diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index 0261f0f6d..1db811dfd 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -1,433 +1,438 @@ -/* - * Copyright (C) 2010-2016 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 . - */ -package com.jpexs.decompiler.flash.gui.player; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; -import com.jpexs.decompiler.flash.gui.Main; -import com.jpexs.helpers.CancellableWorker; -import com.jpexs.javactivex.ActiveX; -import com.jpexs.javactivex.ActiveXEvent; -import com.jpexs.javactivex.ActiveXException; -import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; -import com.sun.jna.Platform; -import java.awt.AWTException; -import java.awt.Color; -import java.awt.Component; -import java.awt.Panel; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Robot; -import java.awt.image.BufferedImage; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * - * @author JPEXS - */ -public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { - - private final int setMovieDelay = Configuration.setMovieDelay.get(); - - private final List listeners = new ArrayList<>(); - - private final ShockwaveFlash flash; - - private final Timer timer; - - private boolean stopped = true; - - private boolean closed = false; - - private float frameRate; - - @Override - public boolean loopAvailable() { - return false; - } - - @Override - public boolean screenAvailable() { - return true; - } - - @Override - public boolean zoomAvailable() { - return true; - } - - @Override - public double getZoomToFit() { - //TODO - return 1; - } - - @Override - public Zoom getZoom() { - return null; - } - - private double zoom = 1.0; - - @Override - public synchronized void zoom(Zoom zoom) { - double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; - int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); - if (zoomint == 0) { - zoomint = 1; - } - if (zoomint > 32767) { - zoomint = 32767; - } - if (zoomint == 100) { - zoomint = 0; - } - - flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values - flash.Zoom(zoomint); - } - - public synchronized String getVariable(String name) throws IOException { - return flash.GetVariable(name); - } - - public synchronized void setVariable(String name, String value) throws IOException { - flash.SetVariable(name, value); - } - - public synchronized String call(String callString) throws IOException { - - return flash.CallFunction(callString); - } - - @Override - public synchronized int getCurrentFrame() { - if (flash == null) { - return 0; - } - try { - return flash.getFrameNum(); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized int getTotalFrames() { - if (flash == null) { - return 0; - } - try { - if (flash.getReadyState() == 4) { - return flash.getTotalFrames(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized void setBackground(Color color) { - try { - flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - public FlashPlayerPanel(Component frame) { - if (!Platform.isWindows()) { - throw new FlashUnsupportedException(); - } - - try { - Callable callable = new Callable() { - @Override - public ShockwaveFlash call() throws InterruptedException { - return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); - } - }; - - // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor - flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); - } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { - throw new FlashUnsupportedException(); - } - - flash.setAllowScriptAccess("always"); - try { - flash.setAllowNetworking("all"); - } catch (ActiveXException ex) { - // ignore - } - - flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { - fireMediaDisplayStateChanged(); - }); - - flash.addFlashCallListener((ActiveXEvent axe) -> { - String req = (String) axe.args.get("request"); - Matcher m = Pattern.compile("(.*)").matcher(req); - if (m.matches()) { - String funname = m.group(1); - String msg = m.group(2); - if (funname.equals("alert") || funname.equals("console.log")) { - if (Main.debugDialog != null) { - Main.debugDialog.log(funname + ":" + msg); - } - } - } - }); - - timer = new Timer(); - timer.schedule(new TimerTask() { - private boolean isPlaying = false; - - private int currentFrame = 0; - - @Override - public void run() { - if (closed) { - return; - } - try { - ShockwaveFlash flash1 = flash; - - boolean changed = false; - - if (flash1.getReadyState() >= 3) { - boolean isPlaying = flash1.IsPlaying(); - if (this.isPlaying != isPlaying) { - this.isPlaying = isPlaying; - } - - int currentFrame = flash1.CurrentFrame(); - if (this.currentFrame != currentFrame) { - this.currentFrame = currentFrame; - changed = true; - } - } else { - this.isPlaying = false; - } - - if (changed) { - fireMediaDisplayStateChanged(); - } - } catch (Exception ex) { - // ignore - cancel(); - } - } - }, 100, 100); - } - - public synchronized void stopSWF() { - displaySWF("-", null, 1); - stopped = true; - fireMediaDisplayStateChanged(); - } - - public synchronized boolean isStopped() { - return stopped; - } - - @Override - public BufferedImage printScreen() { - Point screenloc = getLocationOnScreen(); - try { - return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); - } catch (AWTException ex) { - return null; - } - } - - private String movieToPlay = null; - - private Thread playQueue; - - private final Object queueLock = new Object(); - - public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { - - // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors - if (playQueue == null) { - playQueue = new Thread() { - long lastTime; - - @Override - public void run() { - while (true) { - boolean empty; - synchronized (queueLock) { - empty = movieToPlay == null; - if (empty) { - try { - queueLock.wait(); - } catch (InterruptedException ex) { - break; - } - } - } - if (!empty) { - flash.setMovie(movieToPlay); - synchronized (queueLock) { - movieToPlay = null; - } - try { - Thread.sleep(setMovieDelay); - } catch (InterruptedException ex) { - break; - } - } - } - } - }; - playQueue.start(); - } - zoom = 1.0; - this.frameRate = frameRate; - if (bgColor != null) { - setBackground(bgColor); - } - synchronized (queueLock) { - movieToPlay = flashName; - queueLock.notify(); - } - - //play - stopped = false; - fireMediaDisplayStateChanged(); - } - - @Override - public synchronized void close() throws IOException { - timer.cancel(); - closed = true; - } - - @Override - public void pause() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void stop() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void rewind() { - try { - if (flash.getReadyState() >= 3) { - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void play() { - try { - if (flash.getReadyState() >= 3) { - flash.Play(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public boolean isPlaying() { - try { - if (flash.getReadyState() >= 3) { - return flash.IsPlaying(); - } else { - return false; - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - return false; - } - } - - @Override - public void setLoop(boolean loop - ) { - } - - @Override - public void gotoFrame(int frame - ) { - if (frame < 0) { - return; - } - if (frame >= getTotalFrames()) { - return; - } - try { - if (flash.getReadyState() >= 3) { - flash.GotoFrame(frame); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public float getFrameRate() { - return frameRate; - } - - @Override - public boolean isLoaded() { - return !isStopped(); - } - - public void fireMediaDisplayStateChanged() { - for (MediaDisplayListener l : listeners) { - l.mediaDisplayStateChanged(this); - } - } - - @Override - public void addEventListener(MediaDisplayListener listener) { - listeners.add(listener); - } - - @Override - public void removeEventListener(MediaDisplayListener listener) { - listeners.remove(listener); - } -} +/* + * Copyright (C) 2010-2016 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 . + */ +package com.jpexs.decompiler.flash.gui.player; + +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; +import com.jpexs.decompiler.flash.gui.Main; +import com.jpexs.helpers.CancellableWorker; +import com.jpexs.javactivex.ActiveX; +import com.jpexs.javactivex.ActiveXEvent; +import com.jpexs.javactivex.ActiveXException; +import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; +import com.sun.jna.Platform; +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Component; +import java.awt.Panel; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { + + private static final Logger logger = Logger.getLogger(FlashPlayerPanel.class.getName()); + + private final int setMovieDelay = Configuration.setMovieDelay.get(); + + private final List listeners = new ArrayList<>(); + + private final ShockwaveFlash flash; + + private final Timer timer; + + private boolean stopped = true; + + private boolean closed = false; + + private float frameRate; + + @Override + public boolean loopAvailable() { + return false; + } + + @Override + public boolean screenAvailable() { + return true; + } + + @Override + public boolean zoomAvailable() { + return true; + } + + @Override + public double getZoomToFit() { + //TODO + return 1; + } + + @Override + public Zoom getZoom() { + return null; + } + + private double zoom = 1.0; + + @Override + public synchronized void zoom(Zoom zoom) { + double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; + int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); + if (zoomint == 0) { + zoomint = 1; + } + if (zoomint > 32767) { + zoomint = 32767; + } + if (zoomint == 100) { + zoomint = 0; + } + + flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values + flash.Zoom(zoomint); + } + + public synchronized String getVariable(String name) throws IOException { + return flash.GetVariable(name); + } + + public synchronized void setVariable(String name, String value) throws IOException { + flash.SetVariable(name, value); + } + + public synchronized String call(String callString) throws IOException { + + return flash.CallFunction(callString); + } + + @Override + public synchronized int getCurrentFrame() { + if (flash == null) { + return 0; + } + try { + return flash.getFrameNum(); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized int getTotalFrames() { + if (flash == null) { + return 0; + } + try { + if (flash.getReadyState() == 4) { + return flash.getTotalFrames(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized void setBackground(Color color) { + try { + flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + public FlashPlayerPanel(Component frame) { + if (!Platform.isWindows()) { + throw new FlashUnsupportedException(); + } + + try { + Callable callable = new Callable() { + @Override + public ShockwaveFlash call() throws InterruptedException { + return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); + } + }; + + // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor + flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); + } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { + logger.log(Level.WARNING, "Cannot initialize flash panel", ex); + throw new FlashUnsupportedException(); + } + + flash.setAllowScriptAccess("always"); + try { + flash.setAllowNetworking("all"); + } catch (ActiveXException ex) { + // ignore + } + + flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { + fireMediaDisplayStateChanged(); + }); + + flash.addFlashCallListener((ActiveXEvent axe) -> { + String req = (String) axe.args.get("request"); + Matcher m = Pattern.compile("(.*)").matcher(req); + if (m.matches()) { + String funname = m.group(1); + String msg = m.group(2); + if (funname.equals("alert") || funname.equals("console.log")) { + if (Main.debugDialog != null) { + Main.debugDialog.log(funname + ":" + msg); + } + } + } + }); + + timer = new Timer(); + timer.schedule(new TimerTask() { + private boolean isPlaying = false; + + private int currentFrame = 0; + + @Override + public void run() { + if (closed) { + return; + } + try { + ShockwaveFlash flash1 = flash; + + boolean changed = false; + + if (flash1.getReadyState() >= 3) { + boolean isPlaying = flash1.IsPlaying(); + if (this.isPlaying != isPlaying) { + this.isPlaying = isPlaying; + } + + int currentFrame = flash1.CurrentFrame(); + if (this.currentFrame != currentFrame) { + this.currentFrame = currentFrame; + changed = true; + } + } else { + this.isPlaying = false; + } + + if (changed) { + fireMediaDisplayStateChanged(); + } + } catch (Exception ex) { + // ignore + cancel(); + } + } + }, 100, 100); + } + + public synchronized void stopSWF() { + displaySWF("-", null, 1); + stopped = true; + fireMediaDisplayStateChanged(); + } + + public synchronized boolean isStopped() { + return stopped; + } + + @Override + public BufferedImage printScreen() { + Point screenloc = getLocationOnScreen(); + try { + return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); + } catch (AWTException ex) { + return null; + } + } + + private String movieToPlay = null; + + private Thread playQueue; + + private final Object queueLock = new Object(); + + public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { + + // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors + if (playQueue == null) { + playQueue = new Thread() { + long lastTime; + + @Override + public void run() { + while (true) { + boolean empty; + synchronized (queueLock) { + empty = movieToPlay == null; + if (empty) { + try { + queueLock.wait(); + } catch (InterruptedException ex) { + break; + } + } + } + if (!empty) { + flash.setMovie(movieToPlay); + synchronized (queueLock) { + movieToPlay = null; + } + try { + Thread.sleep(setMovieDelay); + } catch (InterruptedException ex) { + break; + } + } + } + } + }; + playQueue.start(); + } + zoom = 1.0; + this.frameRate = frameRate; + if (bgColor != null) { + setBackground(bgColor); + } + synchronized (queueLock) { + movieToPlay = flashName; + queueLock.notify(); + } + + //play + stopped = false; + fireMediaDisplayStateChanged(); + } + + @Override + public synchronized void close() throws IOException { + timer.cancel(); + closed = true; + } + + @Override + public void pause() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void stop() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void rewind() { + try { + if (flash.getReadyState() >= 3) { + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void play() { + try { + if (flash.getReadyState() >= 3) { + flash.Play(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public boolean isPlaying() { + try { + if (flash.getReadyState() >= 3) { + return flash.IsPlaying(); + } else { + return false; + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + return false; + } + } + + @Override + public void setLoop(boolean loop + ) { + } + + @Override + public void gotoFrame(int frame + ) { + if (frame < 0) { + return; + } + if (frame >= getTotalFrames()) { + return; + } + try { + if (flash.getReadyState() >= 3) { + flash.GotoFrame(frame); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public float getFrameRate() { + return frameRate; + } + + @Override + public boolean isLoaded() { + return !isStopped(); + } + + public void fireMediaDisplayStateChanged() { + for (MediaDisplayListener l : listeners) { + l.mediaDisplayStateChanged(this); + } + } + + @Override + public void addEventListener(MediaDisplayListener listener) { + listeners.add(listener); + } + + @Override + public void removeEventListener(MediaDisplayListener listener) { + listeners.remove(listener); + } +}