################################################################################
##
##  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} octets)
Compc.OutputMessage=${name} (${length} octets)
Compiler.NoUpdateMessage=${name} est \u00e0 jour et n'a pas besoin d'\u00eatre r\u00e9g\u00e9n\u00e9r\u00e9.
Compc.NoUpdateMessage=${name} est \u00e0 jour et n'a pas besoin d'\u00eatre r\u00e9g\u00e9n\u00e9r\u00e9.
CompcPreLink.HigherMinimumSupportedVersionRequired=Le fichier SWC \u00ab\u00a0${swc}\u00a0\u00bb n\u00e9cessite une version prise en charge minimale de ${swcMinimumSupportedVersion}. 
CompcPreLink.PotentialForMissingSkins=Le fichier SWC \u00ab\u00a0${swc}\u00a0\u00bb comporte des valeurs de style par d\u00e9faut et figure dans le chemin de biblioth\u00e8que, les d\u00e9pendances seront donc li\u00e9es sans les styles. Par cons\u00e9quent, les applications qui utilisent le fichier SWC de sortie peuvent pr\u00e9senter des habillages manquants. Le fichier SWC doit \u00eatre plac\u00e9 dans le chemin de biblioth\u00e8que externe.
PreLink.DependencyNotCompatible=La d\u00e9pendance ${definition} de ${swc} poss\u00e8de une version prise en charge minimale de ${swcMinimumVersion} qui est sup\u00e9rieure \u00e0 la version de compatibilit\u00e9 ${compatibilityVersion}.
PreLink.NoExternalVisibleDefinition=Le fichier cible ne dispose pas d'une d\u00e9finition visible en externe.
PreLink.MissingFactoryClassInFrameMetadata=Cette unit\u00e9 de compilation ne disposait pas d'entr\u00e9e factoryClass indiqu\u00e9e dans les m\u00e9tadonn\u00e9es Frame en vue de charger les biblioth\u00e8ques d'ex\u00e9cution partag\u00e9es configur\u00e9es. Pour compiler sans biblioth\u00e8que d'ex\u00e9cution partag\u00e9e, d\u00e9finissez l'option -static-link-runtime-shared-libraries sur vraie ou d\u00e9sactivez l'option -runtime-shared-libraries.
PreLink.InvalidBackgroundColor=Couleur d'arri\u00e8re-plan incorrecte : ${backgroundColor}
PreLink.CouldNotParseNumber=Impossible d'analyser ${num} en tant que valeur num\u00e9rique pour ${attribute}.
PreLink.MissingSignedLibraryDigest=Aucun \u00e9l\u00e9ment de pr\u00e9traitement sign\u00e9 trouv\u00e9 dans le fichier catalog.xml de la biblioth\u00e8que, ${libraryPath}. Compilez la biblioth\u00e8que au moyen de -create-digest=true et r\u00e9essayez.
PreLink.MissingUnsignedLibraryDigest=Aucun \u00e9l\u00e9ment de pr\u00e9traitement non sign\u00e9 trouv\u00e9 dans le fichier catalog.xml de la biblioth\u00e8que, ${libraryPath}. Compilez la biblioth\u00e8que au moyen de -create-digest=true et r\u00e9essayez.
PreLink.ClassesMappedToSameRemoteAlias=Un mappage de '${existingClassName}' \u00e0 l'alias de classe distante '${alias}' a \u00e9t\u00e9 trouv\u00e9 lors du traitement de la classe '${className}'. Flex g\u00e9n\u00e8re maintenant du code pour v\u00e9rifier si un alias a d\u00e9j\u00e0 \u00e9t\u00e9 enregistr\u00e9. Lors de la d\u00e9s\u00e9rialisation de donn\u00e9es distantes, un alias peut uniquement \u00eatre mapp\u00e9 \u00e0 une classe unique.
PreLink.RequiredRsls=RSL requis :
PreLink.RequiredRslUrl=\u0020\u0020\u0020\u0020${rslUrl}
PreLink.RequiredRslUrlWithFailover=\u0020\u0020\u0020\u0020${rslUrl} avec 1 basculement.
PreLink.RequiredRslUrlWithMultipleFailovers=\u0020\u0020\u0020\u0020${rslUrl} avec ${failoverCount} basculements.
PreLink.CompiledAsAComponent=${className} est un module ou une application directement r\u00e9f\u00e9renc\u00e9. Cela provoque la liaison de ${className} et de toutes ses d\u00e9pendances avec ${mainDefinition}. L'utilisation d'une interface est la pratique recommand\u00e9e pour \u00e9viter ce probl\u00e8me.
ToolsConfiguration.FailedToLoadLicenseFile=Impossible de charger le fichier de licence : ${fileName}
ToolsConfiguration.BadAS3ESCombination=Combinaison as3 et -es incorrecte. -as3=${as3} et -es=${es} : l'une ou l'autre entr\u00e9e seulement peut \u00eatre d\u00e9finie sur true.
ToolsConfiguration.BadESStrictCombination=-es=${es} et -strict=${strict}. L'attribut -strict est autoris\u00e9, mais il peut entra\u00eener des erreurs de compilation pour les r\u00e9f\u00e9rences \u00e0 des propri\u00e9t\u00e9s dynamiques.
ToolsConfiguration.DeprecatedConfigurationOption='${var}' est obsol\u00e8te depuis ${since}. S'il vous pla\u00eet utiliser '${replacement}'.
Optimizer.NotAValidSwfFile=${fileName} n'est pas un fichier SWF valide.
