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


yes.no.prompts=o,n
yes=o
no=n

flash.prompt.text=\
Apache Flex SDK nécessite Adobe Flash Player (playerglobal.swc) pour générer des applications Adobe Flash.\n\
\n\
Le fichier playerglobal.swc est soumis à l'accord de licence Adobe Flex SDK suivant :\n\
http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
Vous devez accepter les termes et conditions de l'accord de licence de l'utilisateur applicable\n\
avant de télécharger, modifier, distribuer, utiliser et/ou accéder au fichier playerglobal.swc.\n\
\n\
En plus de l'accord de licence Adobe, vous devez aussi accepter les termes des accords de tierce-partie suivants :\n\
  http://www.adobe.com/products/eula/third_party/.\n\
Adobe vous recommande de parcourir les termes de ces accords.\n\
\n\
Cette licence n'est pas compatible avec la licence Apache V2.\n\
Voulez-vous installer le logiciel Adobe Flash Player playerglobal.swc?

air.prompt.text=\
Apache Flex SDK nécessite Adobe AIR SDK pour générer des applications Adobe AIR.\n\
L'accord de licence SDK Adobe s'applique à Adobe AIR SDK.\n\
http://www.adobe.com/products/air/sdk-eula.html.\n\
Cette licence n'est pas incluse dans la licence Apache V2.\n\
Voulez-vous installer le SDK Adobe AIR?

osmf.prompt.text=\
L'Open Source Media Framework (OSMF) utilisé par les composants vidéo est sous licence Mozilla Public License Version 1.1.\n\
Voulez-vous installer Open Source Media Framework (OSMF)?\n\
Mozilla Public License Version 1.1:\n\
\n\
Le contenu de ces fichiers est soumis à l'accord de licence Mozilla Public License Version 1.1.\n\
Vous ne pouvez pas utiliser ces fichiers sans acceptation de l'accord de licence. \n\
Vous pouvez obtenir une copie de cette licence ici :\n\
http://www.mozilla.org/MPL/. \n\
Vous devez accepter les termes et conditions de l'accord de licence de l'utilisateur applicable\n\
avant de télécharger, modifier, distribuer, utiliser et/ou accéder à ces fichiers.\n\
\n\
J'ai bien lu les informations ci-dessus à propos de la licence MPL1.1 ?"

swfobject.prompt.text=\
Apache Flex SDK nécessite SWFObject pour générer des applications Adobe Flash.\n\
La licence MIT (MIT) s'applique à l'utilitaire SWFObject.\n\
http://opensource.org/licenses/mit-license.php.\n\
Cette licence n'est pas incluse dans la licence Apache V2.\n\
Voulez-vous installer l'utilitaire SWFObject?

blazeds.prompt.text=\
Apache Flex peut éventuellement s'intégrer à Adobe BlazeDS. Cette\n\
fonctionnalité nécessite flex-messaging-common.jar du SDK Adobe Flex.\n\
L'accord de licence Adobe SDK pour Adobe Flex 4.6 s'applique à ce jar.\n\
Cette licence n'est pas incluse dans la licence Apache V2.\n\
\n\
Accord de licence Adobe Flex SDK :\n\
\n\
Tous les fichiers contenus dans Adobe Flex SDK sont soumis \n\
à l'accord de licence Adobe Flex SDK suivant : \n\
http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
Vous devez accepter les termes et conditions de l'accord de licence de l'utilisateur applicable\n\
avant de télécharger, modifier, distribuer, utiliser et/ou accéder aux fichiers de Adobe Flex SDK.\n\
\n\
En plus de l'accord de licence Adobe, vous devez aussi accepter les termes des accords de tierce-partie suivants :\n\
  http://www.adobe.com/products/eula/third_party/.\n\
Adobe vous recommande de parcourir les termes de ces accords.\n\
\n\
Voulez-vous installer ce jar à partir du SDK Adobe Flex?

fontswf.prompt.text=\
Apache Flex peut éventuellement s'intégrer avec le support de polices embarquées\n\
Adobe (Adobe's embedded font support). Cette fonctionnalité nécessite quelques jars\n\
de polices du SDK Adobe Flex. L'accord de licence Adobe SDK pour Adobe Flex 4.6\n\
s'applique à ces jars.\n\
Cette licence n'est pas compatible avec la licence Apache V2.\n\
\n\
Accord de licence Adobe Flex SDK :\n\
\n\
Tous les fichiers contenus dans Adobe Flex SDK sont soumis \n\
à l'accord de licence Adobe Flex SDK suivant : \n\
http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
Vous devez accepter les termes et conditions de l'accord de licence de l'utilisateur applicable\n\
avant de télécharger, modifier, distribuer, utiliser et/ou accéder aux fichiers de Adobe Flex SDK.\n\
\n\
En plus de l'accord de licence Adobe, vous devez aussi accepter les termes des accords de tierce-partie suivants :\n\
  http://www.adobe.com/products/eula/third_party/.\n\
Adobe vous recommande de parcourir les termes de ces accords.\n\
\n\
Voulez-vous installer ces jars à partir du SDK Adobe Flex?
 
unable.to.find.java=Le programme Java est introuvable.  Positionner la variable d'environnement JAVA_HOME

install.complete.echo=Le répertoire ${basedir} est maintenant compatible avec un IDE Flex
find.java.echo.pattern=Le programme Java est : $${java.executable}
mac.copy.echo.pattern=Copie en cours des fichiers de $${download.dir}/airsdk/$${srcdir} vers $${destdir}

INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Téléchargement d'Adobe AIR Runtime Kit pour Mac à partir de :
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Téléchargement d'Adobe AIR Runtime Kit pour Windows à partir de :
INFO_FINISHED_UNTARING=Décompression de l'archive terminée :
INFO_FINISHED_UNZIPPING=Décompression terminée :
INFO_INSTALLING_PLAYERGLOBAL_SWC=Installation d'Adobe Flash Player playerglobal.swc à partir de:
INFO_INSTALLING_CONFIG_FILES=Installation des fichiers de configuration du framework configurés pour être utilisés avec un IDE
INFO_DOWNLOADING_FILE_FROM=Téléchargement {0} de: {1}
INFO_DOWNLOADED=Téléchargement terminé