################################################################################
##
##  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=y,n
yes=y
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 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=\
The Open Source Media Framework (OSMF) used by the video components\n\
is licensed under the 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?

ofl.prompt.text=\
Apache Flex SDK uses the Font Awesome and Lato fonts in the FlatSpark theme.\n\
The SIL Open Font License apply to these fonts.\n\
You may obtain a copy of the License here:\n\
http://scripts.sil.org/OFL\n\
This license is not compatible with the Apache v2 license.\n\
Do you want to install these fonts?

fontswf.prompt.text=\
Apache Flex can optionally integrate with Adobe's embedded font support.\n\
This feature requires a few font jars from the Adobe Flex SDK.\n\
The Adobe SDK license agreement for Adobe Flex 4.6 applies to these jars.\n\
This license is not compatible with the Apache v2 license.\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\
Do you want to install this jar from the 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}

ERROR_REQUIRED_LICENSE=Required license not accepted.  Canceling installation.
INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Downloading Adobe AIR Runtime Kit for Mac from: 
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Downloading Adobe AIR Runtime Kit for Windows from: 
INFO_FINISHED_UNTARING=Finished untaring: 
INFO_FINISHED_UNZIPPING=Finished uncompressing: 
INFO_INSTALLING_PLAYERGLOBAL_SWC=Installing Adobe Flash Player playerglobal.swc from: 
INFO_INSTALLING_CONFIG_FILES=Installing frameworks configuration files configured for use with an IDE
INFO_DOWNLOADING_FILE_FROM=Downloading {0} from: {1}
INFO_DOWNLOADED=Download complete 
INFO_VALIDATING_FILE=Validating download:
INFO_USING_CACHED_FILE=Using file from cache:
