<?xml version='1.0' encoding='utf-8' standalone='no' ?>
<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->


<!--  

   Note that error id="1179" does not need to be translated, its for internal use only.
-->

<errors>
	<error id="1000" label="kError_AmbiguousReference">对 %s 的引用有歧义。


	<description><![CDATA[
	A reference might be to more than one item. For example, the following uses the namespaces <code>rss</code> and <code>xml</code>, each of which defines a 
	different value for the <code>hello()</code> function. The 		
	<code>trace(hello())</code> statement returns this error because it cannot determine which namespace to use.<br>
	
<pre><code>private namespace rss;
private namespace xml;
    
public function ErrorExamples() {
  	use namespace rss;
   	use namespace xml;
	trace(hello());
}
    
rss function hello():String {
      	return "hola";
    }
    
    xml function hello():String {
        return "foo";
    }</code></pre>
 

	<p>Correct an ambiguous reference by making the reference specific. The following example 	uses the form <i>namespace</i>::<i>function</i> to specify 
	which namespace to use:


<pre><code>public function ErrorExamples() {
    
    trace(rss::hello());
    trace(xml::hello());
}</code></pre>
        
	]]>
	</description>

</error>
	<error id="1003" label="kError_NamespaceAccessSpecifiers">不允许将访问说明符与 namespace 属性一同使用。
		<description>You can not use both an access specifier (such as private or public) and a namespace attribute on a definition.</description></error>
	<error id="1004" label="kError_Unknown_Namespace">namespace 要么找不到，要么不是编译时常数。
	
<description><![CDATA[
		The namespace is either unknown or is an expression that could have different values at run time.
		Check that you are spelling the namespace correctly and that its definition is imported correctly.]]></description>
</error>

	<error id="1006" label="kError_InvalidSuperExpression">super 表达式只能在类实例方法内部使用。</error>
	<error id="1007" label="kError_InvalidSuperStatement">super 语句只能在类实例构造函数内部使用。
<description><![CDATA[
		You cannot use the <code>super</code> statement within static members. You can 
		use the <code>super</code> statement only within class instances.
	]]>
	</description>
</error>
	<error id="1008" label="kError_InvalidAttribute">属性无效。</error>
	<error id="1010" label="kError_InvalidOverride">override 属性只能用于类属性定义。
<description><![CDATA[
		You cannot use the <code>override</code> keyword within a function block.
	]]></description>

</error>
	<error id="1011" label="kError_InvalidVirtual">virtual 属性只能用于类属性定义。
<description><![CDATA[
		You cannot use the <code>virtual</code> attribute when you declare a property that does not belong to a class 
		(for example, when you declare a variable within a function block).
	]]></description>
</error>
	<error id="1012" label="kError_InvalidStatic">static 属性只能用于类内部的定义。</error>
	<error id="1013" label="kError_InvalidPrivate">private 属性只能用于类属性定义。</error>
	<error id="1014" label="kError_Unsupported_Intrinsic">intrinsic 属性已不受支持。
<description>
		ActionScript 3.0 does not support the <code>intrinsic</code> keyword.
	</description>

</error>
	<error id="1016" label="kError_BaseClassIsFinal">基类为 final。
<description><![CDATA[
		The superclass cannot be extended because it is marked 
		as <code>final</code>.
	]]></description>

</error>
	<error id="1017" label="kError_UnknownBaseClass">找不到基类 %s 的定义。</error>
	<error id="1018" label="kError_DuplicateClassDefinition">类定义重复: %s。</error>
	<error id="1020" label="kError_OverrideNotFound">标记为 override 的方法必须覆盖另一方法。</error>
	<error id="1021" label="kError_DuplicateFunction">函数定义重复。
<description>
		You cannot declare more than one function with the same identifier name within the same scope.
	</description>

</error>
	<error id="1022" label="kError_OverrideFinalAccessor">无法覆盖 final 存取器。</error>
	<error id="1023" label="kError_IncompatibleOverride">不兼容的覆盖。
<description> A function marked override must exactly match the parameter and return type declaration of the function it is overriding. 
It must have the same number of parameters, each of the same type, and declare the same return type.  If any of the parameters are optional, that
must match as well.  Both functions must use the same access specifier (public, private, and so on) or namespace attribute as well.</description></error>
	<error id="1024" label="kError_OverrideOfFuncNotMarkedForOverride">正在覆盖未标记为 override 的函数。
<description>
		<![CDATA[
		If a method in a class overrides a method in a base class, you must explicitly declare it by using the <code>override</code> attribute, as this example shows:

		<pre>public override function foo():void{};</pre>
	]]>
	</description>

</error>
	<error id="1025" label="kError_FinalMethodRedefinition">无法重定义 final 方法。
<description><![CDATA[
		The method cannot be extended because it is marked
		as <code>final</code> in the base class.
	]]></description>

</error>
	<error id="1026" label="kError_ConstructorsMustBeInstanceMethods">构造函数必须是实例方法。</error>
	<error id="1027" label="kError_FuncIsStaticAndOverride">函数不能同时标记为 static 和 override。</error>
	<error id="1028" label="kError_FuncIsStaticAndVirtual">函数不能同时标记为 static 和 virtual。</error>
	<error id="1029" label="kError_FuncIsVirtualAndFinal">函数不能同时标记为 final 和 virtual。</error>
	<error id="1030" label="kError_RestParameterNotNamed">必须指定可变参数数组的名称。
<description>
	<![CDATA[
		The ...(rest) parameter definition specifies that all values supplied after ...(rest) 
		are collected into any array.  
		You must specify a name for the array, as in the expression 
		<code>function foo(x,...(rest))</code>.

	]]>
	</description>

</error>
	<error id="1033" label="kError_VirtualVars">不支持 virtual 变量。</error>
	<error id="1034" label="kError_NativeVars">变量不能是内置变量。</error>
	<error id="1035" label="kError_VarIsFinalAndVirtual">变量不能同时标记为 final 和 virtual。</error>
	<error id="1037" label="kError_NestedPackage">包不能嵌套。</error>
	<error id="1038" label="kError_BreakHasNoTarget">找不到 break 语句的目标。</error>
	<error id="1039" label="kError_ContinueHasNoTarget">找不到 continue 语句的目标。</error>
	<error id="1040" label="kError_DuplicateLabel">标签定义重复。</error>
	<error id="1041" label="kError_AttributesAreNotCallable">属性不可调用。</error>
	<error id="1042" label="kError_ThisUsedInStaticFunction">不能在 static 方法中使用 this 关键字。该关键字只能在实例方法、函数闭包和全局代码中使用。
<description>
	<![CDATA[
		You cannot use the <code>this</code> keyword within a static member, because 
		<code>this</code> would have no context.
	]]>
	</description>


</error>
	<error id="1043" label="kError_UndefinedNamespace">未定义的命名空间。</error>
	<error id="1044" label="kError_UnknownInterfaceMethod">接口方法 %s (位于命名空间 %s 中)未由类 %s 实现。</error>
	<error id="1045" label="kError_UnknownInterface">找不到接口 %s。</error>
	<error id="1046" label="kError_UnknownType">找不到类型，或者它不是编译时常数: %s。
<description>
		<![CDATA[
		The class used as a type declaration is either unknown or is an expression that could have different values at run time.
		Check that you are importing the correct class and that its package location
		has not changed. Also, check that the package that contains the code (not the
		imported class) is defined correctly (for example, make sure to use proper
		ActionScript 3.0 package syntax, and not ActionScript 2.0 syntax).</p>

		<p>The error can also occur if the class being referenced is not defined in a namespace that is in use or is not defined as public:</p>

		<pre><code>public class Foo{}</code></pre>

        <span class="flexonly"><p>If you are using Flex&#153 Builder&#153 2 and the class is in a library,
		make sure to set the class path for the project.</p></span>


	]]>
	</description>


</error>
	<error id="1047" label="kError_NonConstantParamInitializer">参数初始值设定项未知或不是编译时常数。
	
	<description><![CDATA[
	The value used as the default value for the parameter is either undefined or could have different values at run time. Check that the initializer is spelled 
	correctly, and that the initializer value isn't an expression that could result in different possible values at run time.
	]]></description>
</error>
	
	<error id="1048" label="kError_MethodIsNotAConstructor">方法不能用作构造函数。
	
	<description><![CDATA[
	It is not possible to create an instance of a method of a class.  Only global functions can be used in <code>new</code> expressions.
	
<pre>class D { function xx() { return 22; } }
var d:D = new D();
var x = new d.xx(); // error, method cannot be used as constructor
function yy() { this.a = 22; }
var z = new yy(); // no error, global functions can be used as constructors.</pre>

	]]></description>	
</error>
	<error id="1049" label="kError_AssignmentToConstVar">对指定为常数的变量进行的赋值非法。</error>
	<error id="1050" label="kError_AssignmentToNonRefVar">无法为非引用值赋值。</error>
	<error id="1051" label="kError_ReturnTypeMustBeUndefined">返回值必须未定义。
<description><![CDATA[
		You are attempting to use the <code>return</code> statement within a method that
		has a declared return type <code>void</code>.
	]]></description>


</error>
	<error id="1052" label="kError_ConstInitializerNotConst">常数初始值设定项未知或不是编译时常数。

	<description><![CDATA[
	The value used to initialize the constant is either undefined or could have different values at run time. Check that the initializer is spelled 
	correctly, and that the initializer value isn't an expression that could result in different possible values at run time.
	]]></description>

</error>
	<error id="1053" label="kError_AccessorTypesMustMatch">存取器类型必须相匹配。</error>
	<error id="1054" label="kError_BadSetterReturnType">setter 定义的返回类型必须未指定或为 void。
<description><![CDATA[
		You cannot specify a return value for a setter function. For example, the following is invalid:

		<pre>public function set gamma(g:Number):Number;</pre>

		<p>The following <em>is</em> valid:</p>

		<pre>public function set gamma(g:Number):void;</pre>
	]]></description>

</error>
	<error id="1058" label="kError_PropertyIsWriteOnly">属性是只写的。</error>
	<error id="1059" label="kError_PropertyIsReadOnly">属性是只读的。

	<description><![CDATA[
	This property is defined through a getter function, which allows you to retrieve that property's value. There is no setter function defined 
	for this property, however, so it is read-only.
	<p>In the following example, line 3 generates an error because there is no setter function defined for <code>xx</code>:
	
<pre>class D { function get xx() { return 22; } }
var d:D = new D();
d.xx = 44; // error, property is read-only</pre>
	]]></description>

</error>
	<error id="1061" label="kError_Strict_UndefinedMethod">调用可能未定义的方法 %s (通过 static 类型 %s 引用)。

	<description><![CDATA[
	You are calling a method that is not defined.
	]]></description>

</error> <!-- edited -->
	<error id="1063" label="kError_UnableToOpenFile">无法打开文件: %s。</error>
	<error id="1064" label="kError_InvalidMetaData">元数据无效。
	<description><![CDATA[
	This metadata is unrecognized.
	]]></description>


</error>
	<error id="1065" label="kError_MetaDataAttributesHasMoreThanOneElement">元数据属性不能包含多个元素。</error>
	<error id="1067" label="kError_ImplicitCoercisionOfUnrelatedType">%s 类型值的隐式强制指令的目标是非相关类型 %s。
<description><![CDATA[
		You are attempting to cast an object to a type to which it cannot be converted. This can happen
		if the class you are casting to is not in the inheritance chain of the object being cast.
		This error appears only when the compiler is running in strict mode.
	]]></description>


</error>
	<error id="1068" label="kError_Parser_UnableToOpenFile">无法打开所包含的文件: %s。</error>
	<error id="1069" label="kError_Parser_DefinitionOrDirectiveExpected">语法错误: 需要定义或指令。

<description>
		Check the syntax in the line.
	</description>

</error>
	<error id="1071" label="kError_Parser_ExpectingAnnotatableDirectiveAfterAttributes">语法错误: 在属性 %s (而不是 %s)之后需要一个定义关键字(如 function)。
<description>
	<![CDATA[
		This error will occur if the author forgets to use the "var" or "function" keyword in a declaration.
<pre><code>public int z;// should be 'public var z:int;'</code></pre>

		This error might also occur when the compiler encounters an unexpected character. For example,
		the following use of the <code>trace()</code> function is invalid, because of the missing
		parentheses (the correct syntax is <code>trace("hello")</code>):

<pre>
trace "hello"
</pre>
	]]>
	</description>

</error>
	<error id="1072" label="kError_Parser_ExpectedXMLBeforeNameSpace">语法错误: 在 namespace 之前应该有 xml。
<description>
	<![CDATA[
		The correct statement syntax is <code>default xml namespace = </code> <em>ns</em>. Either the keyword <code>xml</code> (note the lowercase) 
		is missing or an incorrect keyword was used. For more
		information, see the <a href="statements.html#default_xml_namespace">default xml namespace</a>
		directive.
	]]>
	</description>

</error>
	<error id="1073" label="kError_Parser_ExpectingCatchOrFinally">语法错误: 需要 catch 或 finally 子句。</error>
	<error id="1075" label="kError_Parser_EachWithoutIn">语法错误: 'each' 关键字必须带有 'in' 运算符。</error>
	<error id="1076" label="kError_Parser_ExpectedLeftParen">语法错误: 在标识符之前应该有左括号。</error>
	<error id="1077" label="kError_Parser_ExpectedCaseLabel">需要 CaseLabel。

	<description><![CDATA[
	The compiler expected a <code>case</code> statement at this point in the switch block. The 	following switch block incorrectly includes a call to <code>print</code> before the first </code><code>case</code> statement:

<pre>switch(x)
{
trace(2);
case 0:  trace(0); 
break
}</pre>
	]]>
    </description>
</error>
	<error id="1078" label="kError_Parser_LabelIsNotIdentifier">标签必须是简单标识符。</error>
	<error id="1079" label="kError_Parser_WrongNumberOfSuperArgs">super 表达式必须有一个操作数。</error>
	<error id="1080" label="kError_Parser_ExpectingIncrOrDecrOperator">需要增量或减量运算符。</error>
	<error id="1082" label="kError_Parser_ExpectingASingleExpressionWithinParenthesis">括号内应为单个表达式。</error>
	<error id="1083" label="kError_Parser_ExpectedPrimaryExprBefore">语法错误: 不需要 %s。

<description>
	<![CDATA[
		The line of code is missing some information. In the following example,
		some expression (such as another number) needs to be included after the final plus sign:

		<pre>var sum:int = 1 + 2 + ;</pre>
	]]>
	</description>

</error>
	<error id="1084" label="kError_Parser_ExpectedToken">语法错误:  %s 应在 %s 之前。
<description>
	<![CDATA[
		The expression was unexpected at this point.
		If the error says "Expecting right brace before end of program," a block of code
		is missing a closing brace (&#125).

		<p>If the error says "Expecting left parenthesis before _," you may have omitted a  
		parenthesis from a conditional expression, as shown in the following example, which is intentionally incorrect: </p>

		<pre><code>var fact:int = 1 * 2 * 3;
if fact &gt; 2 {
	var bigger:Boolean = true;
}</code></pre>
	]]>
	</description>


</error>
	<error id="1086" label="kError_Parser_ExpectedSemicolon">语法错误: 在 %s 之前应该有分号。</error>
	<error id="1087" label="kError_Parser_ExtraCharsAfterEndOfProgram">语法错误: 在程序结尾之后发现多余的字符。</error>
	<error id="1093" label="kError_Lexical_General">语法错误。</error>
	<error id="1094" label="kError_Lexical_LineTerminatorInSingleQuotedStringLiteral">语法错误: 在换行之前必须结束字符串文本。</error>
	<error id="1095" label="kError_Lexical_LineTerminatorInDoubleQuotedStringLiteral">语法错误: 在换行之前必须结束字符串文本。</error>
	<error id="1097" label="kError_Lexical_EndOfStreamInStringLiteral">语法错误: 字符串文本的输入已在到达右引号之前结束。</error>
	<error id="1099" label="kError_Lexical_SyntaxError">语法错误。</error>
	<error id="1100" label="kError_Lexical_NoMatchingTag">语法错误: XML 的开始和结束标签不匹配。</error>
	<error id="1102" label="kError_CannotDeleteSuperDecendants">无法删除 super 后代。</error>
	<error id="1103" label="kError_DuplicateNamespaceDefinition">命名空间定义重复。

	<description><![CDATA[
	You defined the namespace more than once. Delete or modify the duplicate definition.
	]]></description>


</error>
	<error id="1104" hidden="true" label="kError_ErrorNodeError"> %s </error>
	<error id="1105" label="kError_AssignmentTargetNotRefVal">赋值的目标必须是引用值。

	<description><![CDATA[
	You can assign a value to a variable, but you cannot assign a value to another value. 
	]]></description> 
</error>
	<error id="1106" label="kError_IncrementOperatorNotAReference">增量的操作数必须是引用。
	<description><![CDATA[
	The operand must be a variable, an element in an array, or a property of an object.
	]]></description>
</error>
	<error id="1107" label="kError_InvalidIncrementOperand">增量操作数无效。

	<description><![CDATA[
	The operand must be a variable, an element in an array, or a property of an object.
	]]></description>
</error>
	<error id="1108" label="kError_InvalidDecrementOperand">减量操作数无效。
	<description><![CDATA[
	The operand must be a variable, an element in an array, or a property of an object.
	]]></description>
</error>
	<error id="1109" label="kError_ExpectingExpression">需要表达式。

<description>
	<![CDATA[
		An expression is missing in a part of the code. For example, the following produces this
		error (there is a condition missing from the <code>if</code> statement:

<pre><code>var x = (5 &gt; 2) ? 
trace(x)</code></pre>
	]]>
	</description>


</error>
	<error id="1110" label="kError_MissingXMLTagName">缺少 XML 标签名称。</error>
	<error id="1111" hidden="true" label="kError_InvalidAbcFile">文件 %s 不是有效的 ABC 文件。</error>
    <error id="1112" label="kError_Parser_FileIncludesItself">可能导致无限递归，因为此文件包含: %s。

	<description><![CDATA[
	A file that is included in the source being compiled contains other <code>include</code> 	statements that would cause an infinite loop. For example, the following files. a.as and 	b.as, generate this error because each file tries to include the other.
	<p>
	File a.as contains the following, which attempts to include the file b.as:
<pre>import foo.bar.baz;
include "b.as"
trace(2);</pre>
	<p>File b.as contains the following, which attempts to include the file a.as:
	<pre>include "a.as"</pre>

	]]></description>

</error>
	<error id="1113" label="kError_CircularReference">在 %s 中检测到循环类型引用。
	<description><![CDATA[
	A class is trying to extend a superclass. For example, class A cannot extend class B if B inherits from A:
<pre><code>class a extends b { }
class b extends a { }</code></pre>
	]]></description>

</error>
	<error id="1114" label="kError_InvalidPublic">public 属性只能在包的内部使用。</error>
	<error id="1115" label="kError_InvalidInternal">internal 属性只能在包的内部使用。</error>
	<error id="1116" label="kError_InvalidNamespace">用户定义的 namespace 属性只能在类定义的顶级使用。</error>
	<error id="1118" label="kError_ImplicitCoercionToSubtype">属于 static 类型 %s 的值的隐式强制指令的目标可能是非相关类型 %s。
	<description><![CDATA[You are using a value that is not of the expected type and no implicit coercion exists to convert it to the expected type.
	<p>Perhaps you are using a supertype where a subtype is expected. For example:
<pre><code>class A {}
var a:A = new A(); 
class B extends A { function f() }
var b : B = a // error</code></pre>
	<p>The last statement generates an error because it attempts to assign an object of type A to a variable of type B.
	<p>Similarly, the following defines the <code>foo()</code> function, which takes a parameter of type B. The statement <code> foo(a);</code> 
	generates an error because it attempts to use a parameter of type A:
<pre><code>function foo(x:B) { }
foo(a);</code></pre>
	<p>Also, the following statement generates an error because the returned value for 	<code>foo2()</code> must be type B:
	<pre><code>function foo2():B { return new A(); }</code></pre>
	]]></description>

</error>
	<error id="1119" label="kError_UndefinedProperty">访问可能未定义的属性 %s (通过 static 类型 %s 引用)。


<description>
	<![CDATA[
		You are attempting to access a property that does not exist for the specified object. For example,
		the following code generates this error because an int object does not have a property named
		<code>assortment</code>:

<pre><code>var i:int = 44;
var str:String = i.assortment;</code></pre>

		This error appears only when the compiler is running in strict mode.
	]]>
	</description>


</error>
	<error id="1120" label="kError_UnfoundProperty">访问的属性 %s 未定义。

<description>
	<![CDATA[
		You are attempting to access an undefined variable. For example, if the variable
		<code>huh</code> has not been defined, a call to it generates this error:

<pre><code>huh = 55;</code></pre>

		This error can appear only when the compiler is running in strict mode.
	]]>
	</description>


</error>
    <error id="1121" label="kError_GetterCannotHaveParameters">getter 定义不能有参数。</error>
    <error id="1122" label="kError_SetterMustHaveOneParameter">setter 定义只能有一个参数。</error>
    <error id="1123" label="kError_SetterCannotHaveOptional">setter 定义不能有可选参数。</error>
    <error id="1124" label="kError_BadGetterReturnType">getter 定义的返回类型不能为 void。

	<description><![CDATA[
	A getter function simulates a variable. Because variables cannot be of type void, you cannot declare getter functions to return type void.
	]]></description>
</error>
    <error id="1125" label="kError_InterfaceMethodWithBody">接口中定义的方法不能含有过程体。</error>
    <error id="1126" label="kError_FunctionWithoutBody">函数没有过程体。</error>
    <error id="1127" label="kError_DuplicateAttribute">属性 %s 被多次指定。

	<description><![CDATA[
	You specified an attribute more than once in the same statement. For example, the statement <code>public static public var x;</code> generates 
	this error because it specifies that the variable <code>x</code> is public twice. Delete duplicate declarations.
	]]></description>

</error>
    <error id="1129" label="kError_DuplicateInterfaceDefinition">接口定义重复: %s。

	<description><![CDATA[
	Change or delete the duplicate definitions.
	]]></description>

</error>
    <error id="1130" label="kError_CtorWithReturnType">构造函数不能指定返回类型。</error>
    <error id="1131" label="kError_InvalidClassNesting">类不能嵌套。</error>
    <error id="1132" label="kError_InvalidFinalUsage">final 属性只能用于类中定义的方法。</error>
    <error id="1133" label="kError_InvalidNative">内置属性只能与函数定义一起使用。</error>
    <error id="1134" label="kError_InvalidDynamic">动态属性只能与类定义一起使用。</error>
    <error id="1135" label="kError_Parser_keywordInsteadOfTypeExpr">语法错误: %s 不是有效类型。</error>
    <error id="1136" label="kError_WrongNumberOfArguments">参数个数不正确。应为 %s 个。

	<description><![CDATA[
	The function expects a different number of arguments than those you provided. For example, the 	following defines function <code>goo</code>, which has two arguments:
<pre>class A { static function goo(x:int,y:int) 
{ return(x+y); } }</pre>
	<p>The following statement would generate an error because it provides three arguments:
<pre>A.goo(1,2,3);</pre>
	]]></description>
</error>
    <error id="1137" label="kError_TooManyArguments">参数个数不正确。不应超过 %s 个。</error>
    <error id="1138" label="kError_BadRequiredParameter">必选参数不得位于可选参数之后。</error>
    <error id="1139" label="kError_VarInInterface">不允许在接口中使用变量声明。</error>
    <error id="1140" label="kError_InvalidRestDecl">在 ...rest 参数定义关键字之后指定的参数只能为 Array 数据类型。</error>
    <error id="1141" label="kError_CannotExtendInterface">一个类只能扩展另一个类，不能扩展一个接口。</error>
    <error id="1142" label="kError_CannotExtendClass">一个接口只能扩展其它接口，而 %s 是类。
	<description><![CDATA[
	You are attempting to have the interface extend a class. An interface can only extend another 	interface.
	]]></description>

</error>
    <error id="1143" label="kError_InvalidOverrideUsage">override 属性只能用于类中定义的方法。</error>
    <error id="1144" label="kError_IncompatibleInterfaceMethod">接口方法 %s (位于命名空间 %s 中)是通过类 %s 中不兼容的签名实现的。

	<description><![CDATA[
	Method signatures must match exactly.
	]]></description>

</error>
    <error id="1145" label="kError_NativeMethodWithBody">内置方法不能含有过程体。
	<description><![CDATA[
	You cannot use <code>native</code> because it is a reserved keyword.
	]]></description>

</error>
    <error id="1146" label="kError_ConstructorCannnotBeGetterSetter">构造函数不能是 getter 方法或 setter 方法。</error>
    <error id="1147" label="kError_MissingFilespec">没有指定 AS 源文件。</error>
    <error id="1149" label="kError_CannotReturnFromStaticInit">不能在静态初始化代码中使用返回语句。</error>
	<error id="1150" label="kError_InvalidProtected">protected 属性只能用于类属性定义。</error>
	<error id="1151" label="kError_ConflictingNameInNamespace">定义 %s (在命名空间 %s 中)存在冲突。

	<description><![CDATA[
	You cannot declare more than one variable with the same identifier name within the same scope unless all such variables are declared to be of 
	the same type. In ActionScript 3.0, different code 	blocks (such as those used in two <code>for</code> loops in the same function definition) are 	considered to be in the same scope. 
	<p>The following code example correctly casts the variable <code>x</code> as the same type:
<pre><code>function test()
{
	var x:int = 3;
	for(var x:int = 33; x &lt; 55; x++)
	trace(x);
	for(var x:int = 11; x &lt; 33; x++)
	trace(x)
}</code></pre>
	<p>The following code example generates an error because the type casting in the variable declaration and the <code>for</code> loops are different:
<pre><code>function test()
{
	var x:String = "The answer is";
	for(var x:int = 33; x &lt; 55; x++) // error
	trace(x);
	for(var x:unit = 11; x &lt; 33; x++) // error
	trace(x)
}</code></pre>
]]></description>


</error>
	<error id="1152" label="kError_ConflictingInheritedNameInNamespace"> 继承的定义 %s (在命名空间 %s 中)存在冲突。</error>
    <error id="1153" label="kError_ConstructorMustBePublic">构造函数只能声明为 public。</error>
	<error id="1154" label="kError_ConflictingAccessSpecifiers">在定义中只能指定 public、private、protected 或 internal 中的一个。</error>
	<error id="1155" label="kError_InvalidNestedAccessor">存取器不能嵌套在其它函数中。</error>
	<error id="1156" label="kError_CannotInstantiateInterface">不能使用新的运算符对接口进行实例化。</error>
	<error id="1157" label="kError_BadAccessInterfaceMember">接口成员不能声明为 public、private、protected 或 internal。</error>
	<error id="1158" label="kError_Parser_ExpectedLeftBrace">语法错误: 函数体之前缺少左大括号 ({)。</error>
    <error id="1159" label="kError_CannotReturnFromPackageInit">不能在包初始化代码中使用返回语句。</error>
    <error id="1160" label="kError_InvalidInterfaceNative">内置属性不能用于接口定义。
	<description><![CDATA[
	You cannot use <code>native</code> because it is a reserved keyword.
	]]></description>

</error>
    <error id="1162" label="kError_MultipleNamespaceAttributes">每个定义只能使用一个 namespace 属性。</error>
    <error id="1163" label="kError_ConflictingInheritedNameInInterface">方法 %s 与从接口 %s 继承的定义冲突。</error>
    <error id="1165" label="kError_InvalidInterfaceAttribute">接口属性 %s 无效。</error>
    <error id="1166" label="kError_NamespaceInInterface">不允许在接口中使用 namespace 声明。</error>
    <error id="1167" label="kError_DuplicateImplements">类 %s 多次实现接口 %s。

	<description><![CDATA[
	The class implements the same interface more than once. For example, the following generates this error because 
	class C implements interface A twice:

<pre><code>interface A {  public function f();  };
class C implements A,A {
public function f() { trace("f"); }
}</code></pre>
	
	<p>The correct implementing statement should be <code> class C implements A {</code>.
	]]></description>

</error>
    <error id="1168" label="kError_AssignmentToDefinedFunction">对函数 %s 的赋值非法。

	<description><![CDATA[
	You are attempting to redefine a function. For example, the following defines the function 	<code>topLevel()</code> 
	to print the word "top". The second statement generates an error because it assigns a different return value to the function:
<pre><code>function topLevel() { trace("top"); }
topLevel = function() { trace("replacement works in ~");} // error</code></pre>
	]]></description>


</error>
    <error id="1169" label="kError_InterfaceNamespaceAttribute">不允许在接口方法中使用 namespace 属性。</error>
    <error id="1170" label="kError_MustReturnValue">函数没有返回值。

	<description><![CDATA[
	Every possible control flow in a function must return a value whenever the return type is 	something other than void. The following function 
	<code>f(x)</code> does not generate an error because the <code>if..else</code> statement always returns a value:

<pre><code>function f(x):int
{
if (x)
    	return 2;
else
    	return 3;
} // no error</code></pre>

<p>However, the function <code>g(x)</code> below generates the error because the <code>switch</code> statement does not always 
return a value.
<pre><code>function g(x:int):int
{
switch(x)
{
      	case 1: return 1;
      	case 2: return 2:
}
// return 2;//uncomment to remove the error
}</code></pre>

	<p>This checking is enabled only when the function declares a return type other than void. 
	]]></description>
</error>
    <error id="1171" label="kError_InvalidNamespaceInitializer">一个 namespace 的初始值设定项必须是一个原义字符串或者是另一个 namespace。</error>
    <error id="1172" label="kError_DefinitionNotFound">找不到定义 %s。</error>
    <error id="1173" label="kError_InvalidLabel">标签定义无效。</error>
    <error id="1176" label="kError_IncompatableValueComparison">在属于 static 类型 %s 的值与可能的非相关类型 %s 之间进行比较。
<description>This error is enabled in strict mode.</description></error>
    <error id="1177" label="kError_CannotReturnFromGlobalInit">不能在全局初始化代码中使用返回语句。</error>
    <error id="1178" label="kError_InaccessiblePropertyReference">试图访问不可访问的属性 %s (通过 static 类型 %s 引用)。</error>
    <error id="1179" hidden="true" label="kError_ColonObjectAnnoOutOfService">:Object is temporarily out of service.Use :* instead.</error>
	<error id="1180" label="kError_Strict_PlainUndefinedMethod">调用的方法 %s 可能未定义。
<description>This error appears only when the compiler is running in strict mode.</description></error>
	<error id="1181" label="kError_ForwardReferenceToBaseClass">基类 %s 的向前引用。</error>
	<error id="1182" label="kError_IllegalPackageReference">包不能作为以下值使用: %s。</error>
	<error id="1184" label="kError_IncompatibleDefaultValue">类型 %s (应为 %s)的默认值不兼容。</error>
	<error id="1185" label="kError_MultipleSwitchDefaults">switch 有多个默认值，但只允许有一个默认值。</error>
    <error id="1188" label="kError_AssignmentToDefinedClass">对类 %s 的赋值非法。</error>
    <error id="1189" label="kError_Strict_AttemptToDeleteFixedProperty">试图删除固定属性 %s。只能删除动态定义的属性。
<description>Delete removes dynamically defined properties from an object.  Declared properties of a class can not be deleted.  This error appears only when the compiler is running in strict mode.</description></error>
	<error id="1190" label="kError_InvalidBaseTypeExpression">找不到基类，或者它不是编译时常数。</error>
    <error id="1191" label="kError_InvalidInterfaceTypeExpression">找不到接口，或者它不是编译时常数。</error>
    <error id="1192" label="kError_StaticModifiedNamespace">在 namespace 定义中不允许使用 static 属性。</error>
    <error id="1193" label="kError_InvalidInterfaceNesting">接口定义不能嵌套在类或其它接口定义中。</error>
	<error id="1194" label="kError_PrototypeIsAnInvalidAttribute">prototype 属性无效。</error>
	<error id="1195" label="kError_InaccessibleMethodReference">试图访问不可访问的方法 %s (通过 static 类型 %s 引用)。
		<description><![CDATA[You are either calling a private method from another class, or calling a method defined in a namespace that is not in use.  If you are calling a method defined in an unused namespace, add a <code>use</code> statement for the required namespace.
	]]></description>
 	</error>
	<error id="1196" label="kError_Parser_ThrowWithoutExpression">语法错误: throw 之后应为表达式。</error>
    <error id="1197" label="kError_Authoring_SymbolClassInheritance">类 %s 不能扩展 %s，因为两者均与库元件或主时间轴关联。</error>
    <error id="1198" label="kError_AttributesOnPackage">在包的定义中不允许使用属性。</error>
    <error id="1199" label="kError_InternalError">内部错误: %s。</error>
    <error id="1200" label="kError_ParserInvalidForInInitializer">语法错误: for-in 初始值设定项无效，应该只有一个表达式。</error>
	<error id="1201" label="kError_IllegalSuperStatement">this、super、return 或 throw 语句后面不能出现 super 语句。</error>
	<error id="1202" label="kError_UnfoundPackageProperty">访问的属性 %s (在包 %s 中)未定义。

<description>
	<![CDATA[
		You are attempting to access an undefined variable in a package. For example, if the variable
		<code>p.huh</code> has not been defined, a call to it generates this error:

<pre><code>p.huh = 55;</code></pre>

		This error can only appear when the compiler is running in strict mode.
	]]>
</description>
    </error>
    <error id="1203" label="kError_NoDefaultBaseclassCtor">未在基类 %s 中找到默认的构造函数。
<description>You must explicitly call the constructor of the base class with a super() statement if it has 1 or more required arguments.</description></error>
	<error id="1204" label="kError_BlockCommentNotTerminated">找到的 /* 没有匹配的 */。
<description>
	<![CDATA[
		The characters '/*' where found, which indicate the beginning of a comment, but the corresponding characters, '*/', which indicate the end of the comment block, were not found.
    ]]></description>
	</error>
	<error id="1205" label="kError_ParserExpectingLeftBraceOrStringLiteral">语法错误: 需要左花括号 ({) 或字符串文字 ("")。</error>
	<error id="1206" label="kError_InvalidES4SuperStatement">super 语句只能用作构造函数初始值设定项列表中的最后一项。
<description><![CDATA[
		You cannot use the <code>super</code> statement within a constructor. You can 
		use the <code>super</code> statement only as the last item in the constructor initializer list.
	]]>
	</description>
    </error>
	<error id="1207" label="kError_ThisUsedInInitializer">不能在属性初始值设定项中使用 this 关键字。
    <description>
	<![CDATA[
		You cannot use the <code>this</code> keyword within a property initializer.
	]]>
	</description>
    </error>
	<error id="1208" label="kError_NonConstantConfigInit">配置值的初始值设定项必须是编译时常量。
    <description>
	<![CDATA[
		The initializer of a configuration value must be a value known at compile time.  The initializer may be a constant string, number, or boolean, or 
		a reference to another previously defined configuration value.
	]]>
	</description>
    </error>
	<error id="1209" label="kError_NonConstConfigVar">配置变量只能声明为 const。
    <description>
	<![CDATA[
		When defining a configuration variable, it must be declared as const.
	]]>
	</description>
    </error>
	<error id="1210" label="kError_InvalidConfigLocation">配置值必须在程序或包的顶级声明。
    <description>
	<![CDATA[
		A configuration value must be declared at the top level of a program or package.
	]]>
	</description>
    </error>
	<error id="1211" label="kError_ShadowedConfigNamespace">命名空间 %s 与配置命名空间冲突。
    <description>
	<![CDATA[
		A namespace may not have the same name as a configuration namespace.
	]]>
	</description>
    </error>
	<error id="1212" label="kError_InvalidPrecision">精度必须是一个介于 1 和 34 之间的整数。</error>
	<error id="1214" label="kError_WrongVersion">不兼容的版本: 无法引用定义 %s（在版本 %s 中引入），来源为版本 %s 的代码。</error>
	<error id="1215" label="kError_LossyConversion">初始化无效: 转换为类型 %s 会丢失数据。</error>
</errors>
