################################################################################
##
##  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} is up-to-date and does not have to be rebuilt.
Compc.NoUpdateMessage=${name} is up-to-date and does not have to be rebuilt.
CompcPreLink.HigherMinimumSupportedVersionRequired=The swc '${swc}' requires a minimum supported version of at least ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=The swc '${swc}' has style defaults and is in the library-path, which means dependencies will be linked in without the styles.  This can cause applications, which use the output swc, to have missing skins.  The swc should be put in the external-library-path.
PreLink.DependencyNotCompatible=The dependency ${definition} from ${swc} has a minimum supported version of ${swcMinimumVersion}, which is higher than the compatibility version, ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=The target file does not have an externally visible definition.
PreLink.MissingFactoryClassInFrameMetadata=This compilation unit did not have a factoryClass specified in Frame metadata to load the configured runtime shared libraries. To compile without runtime shared libraries either set the -static-link-runtime-shared-libraries option to true or remove the -runtime-shared-libraries option.
PreLink.InvalidBackgroundColor=Invalid background color: ${backgroundColor}
PreLink.CouldNotParseNumber=Could not parse '${num}' as a number for ${attribute}.
PreLink.MissingSignedLibraryDigest=No signed digest found in catalog.xml of the library, ${libraryPath}. Compile the library with -create-digest=true and try again.
PreLink.MissingUnsignedLibraryDigest=No unsigned digest found in catalog.xml of the library, ${libraryPath}. Compile the library with -create-digest=true and try again.
PreLink.ClassesMappedToSameRemoteAlias=A mapping for '${existingClassName}' to the remote class alias '${alias}' was found while processing class '${className}'. Flex now generates code to check if an alias has already been registered. When deserializing remote data an alias can only map to a single class.
PreLink.RequiredRsls=Required RSLs:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} with 1 failover.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020${rslUrl} with ${failoverCount} failovers.
PreLink.CompiledAsAComponent=${className} is a module or application that is directly referenced. This will cause ${className} and all of its dependencies to be linked in with ${mainDefinition}. Using an interface is the recommended practice to avoid this.
ToolsConfiguration.FailedToLoadLicenseFile=Failed to load license file: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Invalid -as3 and -es combination. -as3=${as3} and -es=${es}. Either one of them can be 'true'.
ToolsConfiguration.BadESStrictCombination=-es=${es} and -strict=${strict}. -strict is allowed, but may result in compiler errors for references to dynamic properties.
ToolsConfiguration.DeprecatedConfigurationOption='${var}' has been deprecated since ${since}. Please use '${replacement}'.
Optimizer.NotAValidSwfFile=${fileName} is not a valid SWF file
