################################################################################
##
##  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} Byte)
Compc.OutputMessage=${name} (${length} Byte)
Compiler.NoUpdateMessage=${name} ist auf dem aktuellen Stand und muss nicht neu erstellt werden.
Compc.NoUpdateMessage=${name} ist auf dem aktuellen Stand und muss nicht neu erstellt werden.
CompcPreLink.HigherMinimumSupportedVersionRequired=Die SWC-Datei \u201e${swc}\u201c erfordert mindestens die Unterst\u00fctzung durch die Version ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=Die SWC-Datei \u201e${swc}\u201c enth\u00e4lt Stilstandardeinstellungen und befindet sich im library-path. Daher werden Abh\u00e4ngigkeiten ohne die Stile angebunden, was dazu f\u00fchren kann, dass in Anwendungen, die die ausgegebene SWC-Datei verwenden, Skins fehlen. Die SWC-Datei sollte in den external-library-path verschoben werden.
PreLink.DependencyNotCompatible=Die Abh\u00e4ngigkeit ${definition} von ${swc} hat eine mindestens unterst\u00fctzte Version von ${swcMinimumVersion}. Diese ist h\u00f6her als die Kompatibilit\u00e4tsversion ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=F\u00fcr die Zieldatei gibt es keine extern sichtbare Definition.
PreLink.MissingFactoryClassInFrameMetadata=Bei dieser Kompilierungseinheit war in den Frame-Metadaten keine factoryClass zum Laden der konfigurierten, zur Laufzeit gemeinsam genutzten Bibliotheken angegeben. Um ohne zur Laufzeit gemeinsam genutzte Bibliotheken zu kompilieren, legen Sie entweder die Option \u201e-static-link-runtime-shared-libraries\u201c als \u201etrue\u201c fest oder entfernen die Option \u201e-runtime-shared-libraries\u201c.
PreLink.InvalidBackgroundColor=Ung\u00fcltige Hintergrundfarbe: ${backgroundColor}
PreLink.CouldNotParseNumber=${num} konnte nicht als Zahl f\u00fcr ${attribute} analysiert werden.
PreLink.MissingSignedLibraryDigest=Kein signiertes Digest in der catalog.xml dieser Bibliothek gefunden: ${libraryPath}. Kompilieren Sie die Bibliothek mit -create-digest=true und versuchen Sie es noch einmal.
PreLink.MissingUnsignedLibraryDigest=Kein nicht signiertes Digest in der catalog.xml dieser Bibliothek gefunden: ${libraryPath}. Kompilieren Sie die Bibliothek mit -create-digest=true und versuchen Sie es noch einmal.
PreLink.ClassesMappedToSameRemoteAlias=Bei der Verarbeitung der Klasse \u201e${className}\u201c wurde eine Zuordnung f\u00fcr \u201e${existingClassName}\u201c zum Remote-Klassenalias \u201e${alias}\u201c gefunden. Flex generiert jetzt Code, um zu pr\u00fcfen, ob bereits ein Alias registriert wurde. Bei der Deserialisierung von Remote-Daten kann ein Alias nur einer einzigen Klasse zugeordnet werden. 
PreLink.RequiredRsls=Erforderliche RSLs:
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} mit 1 Failover.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020>${rslUrl} mit ${failoverCount} Failovern.
PreLink.CompiledAsAComponent=${className} ist ein direkt referenziertes Modul bzw. eine direkt referenzierte Anwendung. Dies f\u00fchrt dazu, dass ${className} und alle ihre Abh\u00e4ngigkeiten an ${mainDefinition} gebunden werden. Um dies zu vermeiden, empfiehlt es sich, eine Schnittstelle zu verwenden.
ToolsConfiguration.FailedToLoadLicenseFile=Lizenzdatei konnte nicht geladen werden: ${fileName}
ToolsConfiguration.BadAS3ESCombination=Ung\u00fcltige Kombination aus -as3 und -es. -as3=${as3} und -es=${es}. Einer der Ausdr\u00fccke kann 'true' sein.
ToolsConfiguration.BadESStrictCombination=-es=${es} und -strict=${strict}. -strict ist zul\u00e4ssig, kann aber bei Verweisen auf dynamische Eigenschaften zu Kompilierer-Fehlern f\u00fchren.
ToolsConfiguration.DeprecatedConfigurationOption=${var}' ist ung\u00fcltig seit ${since}. Verwenden Sie '${replacement}'.
Optimizer.NotAValidSwfFile=${fileName} ist keine g\u00fcltige SWF-Datei.
