################################################################################
##
##  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.
##
################################################################################

# flex2.tools
Mxmlc.OutputMessage=${name} (${length} bytes)
Compc.OutputMessage=${name} (${length} bytes)
Compiler.NoUpdateMessage=${name} est\u00e1 actualizado y no necesita ser reconstruido.
Compc.NoUpdateMessage=${name} est\u00e1 actualizado y no necesita ser reconstruido.
CompcPreLink.HigherMinimumSupportedVersionRequired=El swc '${swc}' requiere una versi\u00f3n m\u00ednima compatible de al menos ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=El swc '${swc}' tiene opciones de estilo predeterminadas y est\u00e1 en library-path, por lo que las dependencias se vincular\u00e1n sin los estilos. Esto podr\u00eda hacer que faltaran aspectos en aplicaci\u00f3n, que usan el swc de salida. El swc deber\u00eda colocarse en external-library-path.
PreLink.DependencyNotCompatible=La dependencia ${definition} de ${swc} posee una versi\u00f3n m\u00ednima compatible de ${swcMinimumVersion}, que es mayor que la versi\u00f3n de compatibilidad, ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=El archivo de destino no tiene ninguna definici\u00f3n visible externamente.
PreLink.MissingFactoryClassInFrameMetadata=Esta unidad de compilaci\u00f3n no tiene ninguna factoryClass especificada en los metadatos del fotograma para cargar las bibliotecas compartidas en tiempo de ejecuci\u00f3n configuradas. Para compilar sin bibliotecas compartidas en tiempo de ejecuci\u00f3n establezca la opci\u00f3n -static-link-runtime-shared-libraries en true o elimine la opci\u00f3n -runtime-shared-libraries.
PreLink.InvalidBackgroundColor=Color de fondo no v\u00e1lido: ${backgroundColor}
PreLink.CouldNotParseNumber=No se pudo analizar '${num}' como n\u00famero de ${attribute}.
PreLink.MissingSignedLibraryDigest=No se ha encontrado ning\u00fan compendio firmado en catalog.xml de la biblioteca, ${libraryPath}. Compile la biblioteca con -create-digest=true e int\u00e9ntelo de nuevo.
PreLink.MissingUnsignedLibraryDigest=No se ha encontrado ning\u00fan compendio sin firmar en catalog.xml de la biblioteca, ${libraryPath}. Compile la biblioteca con -create-digest=true e int\u00e9ntelo de nuevo.
PreLink.ClassesMappedToSameRemoteAlias=Se ha encontrado una asignaci\u00f3n de '${existingClassName}' al alias de clase remota '${alias}' durante el procesamiento de la clase '${className}'. Ahora Flex genera c\u00f3digo para comprobar si ya se ha registrado un alias. Al deserializar datos remotos, un alias s\u00f3lo se puede asignar a una sola clase. 
PreLink.RequiredRsls=RSL obigatorias:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} con 1 conmutaci\u00f3n por error.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020${rslUrl} con ${failoverCount} conmutaciones por error.
PreLink.CompiledAsAComponent=${className} es un m\u00f3dulo o una aplicaci\u00f3n a la que se hace referencia directamente. Har\u00e1 que ${className} y todas sus dependencias se vinculen con ${mainDefinition}. Se recomienda usar una interfaz para evitarlo.
ToolsConfiguration.FailedToLoadLicenseFile=Error al cargar el archivo de licencias: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Combinaci\u00f3n -as3 y -es no v\u00e1lida. -as3=${as3} y -es=${es}. Cualquiera de ellas puede tener el valor 'true'.
ToolsConfiguration.BadESStrictCombination=-es=${es} y -strict=${strict}. -strict se permite, pero puede dar lugar a errores del compilador de referencias a propiedades din\u00e1micas.
ToolsConfiguration.DeprecatedConfigurationOption=${var}' est\u00e1 en desuso desde ${since}. Utilice '${replacement}'.
Optimizer.NotAValidSwfFile=${fileName} no es un archivo SWF v\u00e1lido.
