<?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">Referencia ambigua a %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">No se permiten los especificadores de acceso con atributos de espacio de nombres.
		<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">No se encontró el espacio de nombres o no es una constante en tiempo de compilación.
	
<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">Una expresión super sólo se puede utilizar dentro de métodos de instancia de clase.</error>
	<error id="1007" label="kError_InvalidSuperStatement">Una sentencia super sólo se puede utilizar dentro de constructores de instancia de clase.
<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">El atributo no es válido.</error>
	<error id="1010" label="kError_InvalidOverride">El atributo override sólo se puede utilizar en definiciones de propiedad de clase.
<description><![CDATA[
		You cannot use the <code>override</code> keyword within a function block.
	]]></description>

</error>
	<error id="1011" label="kError_InvalidVirtual">El atributo virtual sólo se puede utilizar en definiciones de propiedad de clase.
<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">El atributo static sólo se puede utilizar en definiciones dentro de una clase.</error>
	<error id="1013" label="kError_InvalidPrivate">El atributo private sólo se puede utilizar en definiciones de propiedad de clase.</error>
	<error id="1014" label="kError_Unsupported_Intrinsic">El atributo intrinsic ya no se admite.
<description>
		ActionScript 3.0 does not support the <code>intrinsic</code> keyword.
	</description>

</error>
	<error id="1016" label="kError_BaseClassIsFinal">La clase base es final.
<description><![CDATA[
		The superclass cannot be extended because it is marked 
		as <code>final</code>.
	]]></description>

</error>
	<error id="1017" label="kError_UnknownBaseClass">No se encontró la definición de la clase base %s.</error>
	<error id="1018" label="kError_DuplicateClassDefinition">Definición de clase duplicada: %s.</error>
	<error id="1020" label="kError_OverrideNotFound">El método marcado como override debe sustituir a otro método.</error>
	<error id="1021" label="kError_DuplicateFunction">Definición de función duplicada.
<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">No se puede sustituir un descriptor de acceso final.</error>
	<error id="1023" label="kError_IncompatibleOverride">Sustitución no compatible.
<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">Sustitución de una función no marcada como 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">No se puede redefinir un método 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">Las funciones de constructor deben ser métodos de instancia.</error>
	<error id="1027" label="kError_FuncIsStaticAndOverride">Las funciones no pueden ser al mismo tiempo static y override.</error>
	<error id="1028" label="kError_FuncIsStaticAndVirtual">Las funciones no pueden ser al mismo tiempo static y virtual.</error>
	<error id="1029" label="kError_FuncIsVirtualAndFinal">Las funciones no pueden ser al mismo tiempo final y virtual.</error>
	<error id="1030" label="kError_RestParameterNotNamed">Debe especificar el nombre de la matriz de argumentos de variable.
<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">Las variables virtual no se admiten.</error>
	<error id="1034" label="kError_NativeVars">Las variables no pueden ser nativas.</error>
	<error id="1035" label="kError_VarIsFinalAndVirtual">Las variables no pueden ser al mismo tiempo final y virtual.</error>
	<error id="1037" label="kError_NestedPackage">Los paquetes no se pueden anidar.</error>
	<error id="1038" label="kError_BreakHasNoTarget">No se encontró el destino de la sentencia break.</error>
	<error id="1039" label="kError_ContinueHasNoTarget">No se encontró el destino de la sentencia continue.</error>
	<error id="1040" label="kError_DuplicateLabel">Definición de etiqueta duplicada.</error>
	<error id="1041" label="kError_AttributesAreNotCallable">No se puede llamar a los atributos.</error>
	<error id="1042" label="kError_ThisUsedInStaticFunction">La palabra clave this no se puede utilizar en métodos static. Sólo se puede utilizar en métodos de instancia, cierres de funciones y código global.
<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">Espacio de nombres no definido.</error>
	<error id="1044" label="kError_UnknownInterfaceMethod">El método de interfaz %s del espacio de nombres %s no se implementa con la clase %s.</error>
	<error id="1045" label="kError_UnknownInterface">No se encontró la interfaz %s.</error>
	<error id="1046" label="kError_UnknownType">No se encontró el tipo o no es una constante en tiempo de compilación: %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">Se desconoce el inicializador de parámetros o no es una constante en tiempo de compilación.
	
	<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">No se puede utilizar el método como constructor.
	
	<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">Asignación no válida a una variable especificada como constante.</error>
	<error id="1050" label="kError_AssignmentToNonRefVar">No se puede asignar a un valor sin referencia.</error>
	<error id="1051" label="kError_ReturnTypeMustBeUndefined">El valor devuelto no debe estar definido.
<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">Se desconoce el inicializador de constantes o no es una constante en tiempo de compilación.

	<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">Los tipos de descriptor de acceso deben coincidir.</error>
	<error id="1054" label="kError_BadSetterReturnType">El tipo devuelto de una definición de establecimiento debe ser unspecified o 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">La propiedad es de sólo escritura.</error>
	<error id="1059" label="kError_PropertyIsReadOnly">La propiedad es de sólo lectura.

	<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">Llamada a un método %s posiblemente no definido mediante una referencia con tipo estático %s.

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

</error> <!-- edited -->
	<error id="1063" label="kError_UnableToOpenFile">No se puede abrir el archivo: %s.</error>
	<error id="1064" label="kError_InvalidMetaData">Metadatos no válidos.
	<description><![CDATA[
	This metadata is unrecognized.
	]]></description>


</error>
	<error id="1065" label="kError_MetaDataAttributesHasMoreThanOneElement">Los atributos de metadatos no pueden tener más de un elemento.</error>
	<error id="1067" label="kError_ImplicitCoercisionOfUnrelatedType">Conversión implícita de un valor de tipo %s a un tipo %s no relacionado.
<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">No se puede abrir el archivo incluido: %s.</error>
	<error id="1069" label="kError_Parser_DefinitionOrDirectiveExpected">Error de sintaxis: se esperaba una definición o directiva.

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

</error>
	<error id="1071" label="kError_Parser_ExpectingAnnotatableDirectiveAfterAttributes">Error de sintaxis: se esperaba una palabra clave de definición (como function) después del atributo %s, no %s.
<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">Error de sintaxis: se esperaba xml antes del espacio de nombres.
<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">Error de sintaxis: se esperaba una cláusula catch o finally.</error>
	<error id="1075" label="kError_Parser_EachWithoutIn">Error de sintaxis: la palabra clave 'each' no se admite sin un operador 'in'.</error>
	<error id="1076" label="kError_Parser_ExpectedLeftParen">Error de sintaxis: se esperaba el paréntesis de apertura antes del identificador.</error>
	<error id="1077" label="kError_Parser_ExpectedCaseLabel">Se esperaba 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">La etiqueta debe ser un identificador sencillo.</error>
	<error id="1079" label="kError_Parser_WrongNumberOfSuperArgs">Una expresión super debe tener un operando.</error>
	<error id="1080" label="kError_Parser_ExpectingIncrOrDecrOperator">Se esperaba un operador de incremento o decremento.</error>
	<error id="1082" label="kError_Parser_ExpectingASingleExpressionWithinParenthesis">Se esperaba una sola expresión entre paréntesis.</error>
	<error id="1083" label="kError_Parser_ExpectedPrimaryExprBefore">Error de sintaxis: no se esperaba %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">Error de sintaxis: se esperaba %s antes de %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">Error de sintaxis: se esperaba un punto y coma antes de %s.</error>
	<error id="1087" label="kError_Parser_ExtraCharsAfterEndOfProgram">Error de sintaxis: se encontraron caracteres adicionales tras el final del programa.</error>
	<error id="1093" label="kError_Lexical_General">Error de sintaxis.</error>
	<error id="1094" label="kError_Lexical_LineTerminatorInSingleQuotedStringLiteral">Error de sintaxis: un literal de cadena debe terminarse antes del salto de línea.</error>
	<error id="1095" label="kError_Lexical_LineTerminatorInDoubleQuotedStringLiteral">Error de sintaxis: un literal de cadena debe terminarse antes del salto de línea.</error>
	<error id="1097" label="kError_Lexical_EndOfStreamInStringLiteral">Error de sintaxis: entrada finalizada antes de alcanzar las comillas de cierre de un literal de cadena.</error>
	<error id="1099" label="kError_Lexical_SyntaxError">Error de sintaxis.</error>
	<error id="1100" label="kError_Lexical_NoMatchingTag">Error de sintaxis: la etiqueta inicial y la etiqueta final de XML no coinciden.</error>
	<error id="1102" label="kError_CannotDeleteSuperDecendants">No se pueden eliminar los descendientes de super.</error>
	<error id="1103" label="kError_DuplicateNamespaceDefinition">Definición de espacio de nombres duplicada.

	<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">El destino de la asignación debe ser un valor de referencia.

	<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">El operando de incremento debe ser una referencia.
	<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">El operando de incremento no es válido.

	<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">El operando de decremento no es válido.
	<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">Se esperaba una expresión.

<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">Falta el nombre de la etiqueta XML.</error>
	<error id="1111" hidden="true" label="kError_InvalidAbcFile">El archivo %s no es un archivo ABC válido.</error>
    <error id="1112" label="kError_Parser_FileIncludesItself">La posible recursión infinita debida a este archivo incluido: %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">Se detectó una referencia de tipo circular en %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">El atributo public sólo se puede utilizar dentro de un paquete.</error>
	<error id="1115" label="kError_InvalidInternal">El atributo internal sólo se puede utilizar dentro de un paquete.</error>
	<error id="1116" label="kError_InvalidNamespace">Un atributo de espacio de nombres definido por el usuario sólo se puede utilizar en el nivel superior de una definición de clase.</error>
	<error id="1118" label="kError_ImplicitCoercionToSubtype">Conversión implícita de un valor con tipo estático %s a un tipo %s posiblemente no relacionado.
	<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">Acceso a una propiedad %s posiblemente no definida mediante una referencia con tipo estático %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">Acceso a una propiedad %s no definida.

<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">Una definición captadora no debe tener parámetros.</error>
    <error id="1122" label="kError_SetterMustHaveOneParameter">Una definición de establecimiento debe tener exactamente un parámetro.</error>
    <error id="1123" label="kError_SetterCannotHaveOptional">Una definición de establecimiento no puede tener parámetros opcionales.</error>
    <error id="1124" label="kError_BadGetterReturnType">El tipo devuelto de una definición captadora no debe ser 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">Los métodos definidos en una interfaz no pueden tener cuerpo.</error>
    <error id="1126" label="kError_FunctionWithoutBody">Las función no tiene cuerpo.</error>
    <error id="1127" label="kError_DuplicateAttribute">El atributo %s se especificó varias veces.

	<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">Definición de interfaz duplicada: %s.

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

</error>
    <error id="1130" label="kError_CtorWithReturnType">Un constructor no puede especificar un tipo devuelto.</error>
    <error id="1131" label="kError_InvalidClassNesting">Las clases no deben anidarse.</error>
    <error id="1132" label="kError_InvalidFinalUsage">El atributo final sólo se puede utilizar en un método definido en una clase.</error>
    <error id="1133" label="kError_InvalidNative">El atributo native sólo se puede utilizar con definiciones de función.</error>
    <error id="1134" label="kError_InvalidDynamic">El atributo dynamic sólo se puede utilizar con definiciones de clase.</error>
    <error id="1135" label="kError_Parser_keywordInsteadOfTypeExpr">Error de sintaxis: %s no es un tipo válido.</error>
    <error id="1136" label="kError_WrongNumberOfArguments">Número de argumentos incorrecto.  Se esperaba %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">Número de argumentos incorrecto.  No se esperaba más de %s.</error>
    <error id="1138" label="kError_BadRequiredParameter">Los parámetros necesarios no se permiten después de los parámetros opcionales.</error>
    <error id="1139" label="kError_VarInInterface">Las interfaces no admiten declaraciones de variables.</error>
    <error id="1140" label="kError_InvalidRestDecl">Los parámetros especificados después de la palabra clave de definición de parámetro ...rest sólo pueden ser un tipo de datos Array.</error>
    <error id="1141" label="kError_CannotExtendInterface">Una clase sólo puede ampliar otra clase, no una interfaz.</error>
    <error id="1142" label="kError_CannotExtendClass">Una interfaz sólo puede ampliar otras interfaces, pero %s es una clase.
	<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">El atributo override sólo se puede utilizar en un método definido en una clase.</error>
    <error id="1144" label="kError_IncompatibleInterfaceMethod">El método de interfaz %s del espacio de nombres %s está implementado con una firma no compatible en la clase %s.

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

</error>
    <error id="1145" label="kError_NativeMethodWithBody">Los métodos nativos no pueden tener cuerpo.
	<description><![CDATA[
	You cannot use <code>native</code> because it is a reserved keyword.
	]]></description>

</error>
    <error id="1146" label="kError_ConstructorCannnotBeGetterSetter">Un constructor no puede ser un método getter o setter.</error>
    <error id="1147" label="kError_MissingFilespec">No se especificó ningún archivo AS de origen.</error>
    <error id="1149" label="kError_CannotReturnFromStaticInit">La sentencia return no se puede utilizar en código de inicialización estático.</error>
	<error id="1150" label="kError_InvalidProtected">El atributo protected sólo se puede utilizar en definiciones de propiedad de clase.</error>
	<error id="1151" label="kError_ConflictingNameInNamespace">Existe un conflicto con la definición %s del espacio de nombres %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"> Existe un conflicto con la definición heredada %s del espacio de nombres %s.</error>
    <error id="1153" label="kError_ConstructorMustBePublic">Un constructor sólo puede declararse como public.</error>
	<error id="1154" label="kError_ConflictingAccessSpecifiers">En una definición, sólo se puede especificar una instancia de public, private, protected o internal.</error>
	<error id="1155" label="kError_InvalidNestedAccessor">Los descriptores de acceso no se pueden anidar dentro de otras funciones.</error>
	<error id="1156" label="kError_CannotInstantiateInterface">No se pueden crear instancias de las interfaces con el operador new.</error>
	<error id="1157" label="kError_BadAccessInterfaceMember">Los miembros de la interfaz no se pueden declarar como public, private, protected o internal.</error>
	<error id="1158" label="kError_Parser_ExpectedLeftBrace">Error de sintaxis: falta la llave izquierda de apertura ({) antes del cuerpo de la función.</error>
    <error id="1159" label="kError_CannotReturnFromPackageInit">La sentencia devuelta no se puede utilizar en código de inicialización de paquetes.</error>
    <error id="1160" label="kError_InvalidInterfaceNative">El atributo native no se puede utilizar en definiciones de interfaz.
	<description><![CDATA[
	You cannot use <code>native</code> because it is a reserved keyword.
	]]></description>

</error>
    <error id="1162" label="kError_MultipleNamespaceAttributes">Sólo se puede utilizar un atributo de espacio de nombres por definición.</error>
    <error id="1163" label="kError_ConflictingInheritedNameInInterface">Existe un conflicto entre el método %s y la definición heredada de la interfaz %s.</error>
    <error id="1165" label="kError_InvalidInterfaceAttribute">El atributo de interfaz %s no es válido.</error>
    <error id="1166" label="kError_NamespaceInInterface">Las interfaces no admiten declaraciones de espacio de nombres.</error>
    <error id="1167" label="kError_DuplicateImplements">La clase %s implementa la interfaz %s varias veces.

	<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">Asignación no válida a la función %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">Los métodos de interfaz no admiten atributos de espacio de nombres.</error>
    <error id="1170" label="kError_MustReturnValue">La función no devuelve un valor.

	<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">Un inicializador de espacio de nombres debe ser un literal de cadena u otro espacio de nombres.</error>
    <error id="1172" label="kError_DefinitionNotFound">No se encontró la definición %s.</error>
    <error id="1173" label="kError_InvalidLabel">La definición de etiqueta no es válida.</error>
    <error id="1176" label="kError_IncompatableValueComparison">Comparación entre un valor con tipo estático %s y un tipo %s posiblemente no relacionado.
<description>This error is enabled in strict mode.</description></error>
    <error id="1177" label="kError_CannotReturnFromGlobalInit">La sentencia return no se puede utilizar en código de inicialización global.</error>
    <error id="1178" label="kError_InaccessiblePropertyReference">Intento de acceso a una propiedad %s no accesible mediante una referencia con tipo estático %s.</error>
    <error id="1179" hidden="true" label="kError_ColonObjectAnnoOutOfService">:Object está fuera de servicio temporalmente. Utilice :* en su lugar.</error>
	<error id="1180" label="kError_Strict_PlainUndefinedMethod">Llamada a un método %s posiblemente no definido.
<description>This error appears only when the compiler is running in strict mode.</description></error>
	<error id="1181" label="kError_ForwardReferenceToBaseClass">Referencia a la clase base %s, que se define más adelante</error>
	<error id="1182" label="kError_IllegalPackageReference">No se puede utilizar el paquete como un valor: %s.</error>
	<error id="1184" label="kError_IncompatibleDefaultValue">Valor predeterminado no compatible de tipo %s donde se esperaba %s.</error>
	<error id="1185" label="kError_MultipleSwitchDefaults">El conmutador tiene más de un valor predeterminado, pero sólo se admite uno.</error>
    <error id="1188" label="kError_AssignmentToDefinedClass">Asignación no válida a la clase %s.</error>
    <error id="1189" label="kError_Strict_AttemptToDeleteFixedProperty">Intento de eliminación de la propiedad fija %s.  Sólo se pueden eliminar propiedades definidas dinámicamente.
<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">No se encontró la clase base o no es una constante en tiempo de compilación.</error>
    <error id="1191" label="kError_InvalidInterfaceTypeExpression">No se encontró la interfaz o no es una constante en tiempo de compilación.</error>
    <error id="1192" label="kError_StaticModifiedNamespace">El atributo static no se admite en definiciones de espacio de nombres.</error>
    <error id="1193" label="kError_InvalidInterfaceNesting">Las definiciones de interfaz no se pueden anidar dentro de la clase o de otras definiciones de interfaz.</error>
	<error id="1194" label="kError_PrototypeIsAnInvalidAttribute">El atributo prototype no es válido.</error>
	<error id="1195" label="kError_InaccessibleMethodReference">Intento de acceso a un método %s no accesible mediante una referencia con tipo estático %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">Error de sintaxis: se esperaba una expresión después de la sentencia throw.</error>
    <error id="1197" label="kError_Authoring_SymbolClassInheritance">La clase %s no puede ampliar %s, ya que ambas están asociadas a símbolos de biblioteca o a la línea de tiempo principal.</error>
    <error id="1198" label="kError_AttributesOnPackage">La definición de paquetes no admite atributos.</error>
    <error id="1199" label="kError_InternalError">Error interno: %s.</error>
    <error id="1200" label="kError_ParserInvalidForInInitializer">Error de sintaxis: inicializador for-in no válido; sólo se esperaba 1 expresión.</error>
	<error id="1201" label="kError_IllegalSuperStatement">Una sentencia super no puede aparecer después de una sentencia this, super, return o throw.</error>
	<error id="1202" label="kError_UnfoundPackageProperty">Acceso a una propiedad %s no definida en el paquete %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">No se encontró ningún constructor predefinido en la clase base %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">/* encontrado sin coincidencia con */ .
<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 de sintaxis: se esperaba una llave izquierda de apertura ({) o un literal de cadena ("").</error>
	<error id="1206" label="kError_InvalidES4SuperStatement">Una sentencia super sólo se puede utilizar como el último elemento de la lista de inicializadores de un constructor.
<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">La palabra clave this no se puede utilizar en inicializadores de propiedades.
    <description>
	<![CDATA[
		You cannot use the <code>this</code> keyword within a property initializer.
	]]>
	</description>
    </error>
	<error id="1208" label="kError_NonConstantConfigInit">El inicializador de un valor de configuración debe ser una constante en tiempo de compilación.
    <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">Una variable de configuración sólo se puede declarar const.
    <description>
	<![CDATA[
		When defining a configuration variable, it must be declared as const.
	]]>
	</description>
    </error>
	<error id="1210" label="kError_InvalidConfigLocation">Debe declararse un valor de configuración en el nivel superior de un programa o paquete.
    <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">Existe un conflicto entre el espacio de nombres %s y un espacio de nombres de configuración.
    <description>
	<![CDATA[
		A namespace may not have the same name as a configuration namespace.
	]]>
	</description>
    </error>
	<error id="1212" label="kError_InvalidPrecision">La precisión debe ser un número entero entre 1 y 34.</error>
	<error id="1214" label="kError_WrongVersion">Versión no compatible: no se puede hacer referencia a la definición %s introducida en la versión %s del código con la versión %s.</error>
	<error id="1215" label="kError_LossyConversion">Inicialización no válida: la conversión a tipo %s pierde datos.</error>
</errors>
