################################################################################
##
##  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 en hoeft niet opnieuw te worden gemaakt.
Compc.NoUpdateMessage=${name} is up-to-date en hoeft niet opnieuw te worden gemaakt.
CompcPreLink.HigherMinimumSupportedVersionRequired=De swc ${swc} vereist een ondersteunde minimumversie van ten minste ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=De swc ${swc} heeft standaardinstellingen voor de stijl en bevindt zich in het library-path, wat betekent dat afhankelijkheden worden gekoppeld zonder de stijlen. Hierdoor ontbreken er mogelijk skins in toepassingen die de uitvoer-swc gebruiken. De swc moet in het external-library-path worden geplaatst.
PreLink.DependencyNotCompatible=De afhankelijkheid ${definition} van ${swc} heeft een ondersteunde minimumversie van ${swcMinimumVersion}, die hoger is dan de compatibiliteitsversie, ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=Het doelbestand heeft geen extern zichtbare definitie.
PreLink.MissingFactoryClassInFrameMetadata=Voor deze compilatie-eenheid is geen factoryClass opgegeven in frame-metagegevens om de geconfigureerde bibliotheken die bij uitvoering gedeeld worden, te laden. Voor compilatie zonder bij uitvoering gedeelde bibliotheken kunt u de optie 'bij uitvoering gedeelde bibliotheken statisch koppelen' op 'waar' instellen of de optie 'bij uitvoering gedeelde bibliotheken' verwijderen.
PreLink.InvalidBackgroundColor=Ongeldige achtergrondkleur: ${backgroundColor}
PreLink.CouldNotParseNumber=Kan '${num}' niet parseren als een getal voor ${attribute}.
PreLink.MissingSignedLibraryDigest=Er is geen ondertekende digest gevonden in catalog.xml van de bibliotheek, ${libraryPath}. Compileer de bibliotheek met -create-digest=true en probeer het opnieuw.
PreLink.MissingUnsignedLibraryDigest=Er is geen niet-ondertekende digest gevonden in catalog.xml van de bibliotheek, ${libraryPath}. Compileer de bibliotheek met -create-digest=true en probeer het opnieuw.
PreLink.ClassesMappedToSameRemoteAlias=Een toewijzing voor '${existingClassName}' aan de alias van de externe klasse '${alias}' is aangetroffen tijdens het verwerken van klasse '${className}'. Flex genereert nu code om te controleren of er al een alias geregistreerd is. Tijdens deserialisatie van externe gegevens kan een alias aan slechts \u00e9\u00e9n klasse worden toegewezen. 
PreLink.RequiredRsls=Vereiste RSL's:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} met 1 failover.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020${rslUrl} met ${failoverCount} failovers.
PreLink.CompiledAsAComponent=${className} is een module of toepassing waar rechtstreeks naar verwezen wordt. Hierdoor worden ${className} en alle bijbehorende afhankelijkheden gekoppeld met ${mainDefinition}. Het gebruik van een interface is de aanbevolen procedure om dit te vermijden.
ToolsConfiguration.FailedToLoadLicenseFile=Laden van licentiebestand is mislukt: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Ongeldige combinatie van -as3 en -es. -as3=${as3} en -es=${es}. E\u00e9n ervan kan 'waar' zijn.
ToolsConfiguration.BadESStrictCombination=-es=${es} en -strict=${strict}. -strict is toegestaan, maar kan resulteren in compilerfouten voor verwijzingen naar dynamische eigenschappen.
ToolsConfiguration.DeprecatedConfigurationOption=${var}' is afgekeurd sinds ${since}. Gebruik '${replacement}'.
Optimizer.NotAValidSwfFile=${fileName} is geen geldig swf-bestand
