################################################################################
##
##  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=s,n
yes=s
no=n

flash.prompt.text=\
Apache Flex SDK uses the Adobe Flash Player's playerglobal.swc to build Adobe Flash applications.\n\
\n\
The playerglobal.swc file is subject to and governed by the\n\
Adobe Flex SDK License Agreement specified here:\n\
http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
By downloading, modifying, distributing, using and/or accessing any files the playerglobal.swc file\n\
you agree to the terms and conditions of the applicable end user license agreement.\n\
\n\
In addition to the Adobe license terms, you also agree to be bound by the third-party terms specified here:\n\
http://www.adobe.com/products/eula/third_party/.\n\
Adobe recommends that you review these third-party terms.\n\
\n\
This license is not compatible with the Apache v2 license.\n\
Do you want to download and install the playerglobal.swc?

air.prompt.text=\
Apache Flex SDK uses the Adobe AIR SDK to build Adobe AIR applications.\n\
The Adobe AIR SDK is subject to and governed by the\n\
Adobe AIR SDK License Agreement specified here:\n\
http://www.adobe.com/products/air/sdk-eula.html.\n\
This license is not compatible with the Apache v2 license.\n\
Do you want to download and install the Adobe AIR SDK?

osmf.prompt.text=\
O Open Source Media Framework (OSMF) utilizado pelos componentes de video\n\
está sob a licença Mozilla Public License Version 1.1.\n\
Mozilla Public License Version 1.1:\n\
\n\
The contents of the file(s) are subject to the Mozilla Public License Version 1.1.\n\
You may not use the file(s) except in compliance with the License. \n\
You may obtain a copy of the License here:\n\
http://www.mozilla.org/MPL/. \n\
By downloading, modifying, distributing, using and/or accessing the file(s), \n\
you agree to the terms and conditions of the applicable license agreement.\n\
\n\
I have read the MPL1.1 license information above?"

swfobject.prompt.text=\
Apache Flex SDK uses the SWFObject when building Adobe Flash applications.\n\
SWFObject is subject to and governed by the\n\
MIT License Agreement specified here:\n\
http://opensource.org/licenses/mit-license.php.\n\
This license is compatible with the Apache v2 license.\n\
Do you want to download and install the SWFObject?

blazeds.prompt.text=\
Apache Flex pode, opcionalmente, integrar-se com serviços de remoting como\n\
BlazeDS, GraniteDS, WebORB, Red5, AMFPHP, RubyAMF, PyAMF e outros.\n\
Esta funcionalidade requer a biblioteca flex-messaging-common.jar do SDK Adobe Flex.\n\
A licença do SDK Adobe Flex 4.6 aplica-se a esta biblioteca.\n\
Esta licença não é compatível com a licença Apache V2.\n\
\n\
Adobe Flex SDK License Agreement:\n\
\n\
All files contained in this Adobe Flex SDK download are subject to and governed by the\n\
Adobe Flex SDK License Agreement specified here: \n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
By downloading, modifying, distributing, using and/or accessing any files in this Adobe Flex SDK, \n\
you agree to the terms and conditions of the applicable end user license agreement.\n\
\n\
In addition to the Adobe license terms, you also agree to be bound by the third-party terms specified here: \n\
    http://www.adobe.com/products/eula/third_party/. \n\
Adobe recommends that you review these third-party terms.\n\
\n\
Deseja instalar a biblioteca a partir do SDK Adobe Flex

fontswf.prompt.text=\
Apache Flex pode, opcionalmente, integrar-se com o suporte de fontes embutidas da Adobe.\n\
Este recurso requer alguns jars do Adobe Flex SDK, que estão sob o contrato de licença\n\
do Adobe Flex 4.6.\n\
Esta licença não é compatível com a licença Apache V2.\n\
\n\
Adobe Flex SDK License Agreement:\n\
\n\
All files contained in this Adobe Flex SDK download are subject to and governed by the\n\
Adobe Flex SDK License Agreement specified here: \n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
By downloading, modifying, distributing, using and/or accessing any files in this Adobe Flex SDK, \n\
you agree to the terms and conditions of the applicable end user license agreement.\n\
\n\
In addition to the Adobe license terms, you also agree to be bound by the third-party terms specified here: \n\
    http://www.adobe.com/products/eula/third_party/. \n\
Adobe recommends that you review these third-party terms.\n\
\n\
Você quer instalar estes jars a partir do Adobe Flex SDK?
 
unable.to.find.java=Unable to find Java executable.  Please set JAVA_HOME environment variable

install.complete.echo=${basedir} is now an IDE compatible folder
find.java.echo.pattern=Java is $${java.executable}
mac.copy.echo.pattern=Copying files from $${download.dir}/airsdk/$${srcdir} to $${destdir}

INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Efetuando download do Adobe AIR Runtime Kit for Mac a partir de: 
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Efetuando download do Adobe AIR Runtime Kit for Windows a partir de: 
INFO_DOWNLOADING_FILE_FROM=Efetuando download {0} de: {1}
INFO_DOWNLOADED=Download finalizado 
INFO_FINISHED_UNTARING=Untar finalizado: 
INFO_FINISHED_UNZIPPING=Descompactação finalizada: 
INFO_INSTALLING_CONFIG_FILES=Instalando arquivos de configuração dos frameworks para utilização com a IDE
INFO_INSTALLING_PLAYERGLOBAL_SWC=Instalando Adobe Flash Player playerglobal.swc a partir de: 
