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


flash.prompt.text=\
Apache Royale uses the Adobe Flash Player's playerglobal.swc to\n\
build Adobe Flash applications.\n\
\n\
To get the latest playerglobal.swc, go to this site:\n\
\n\
  https://www.adobe.com/support/flashplayer/debug_downloads.html\n\
\n\
and download playerglobal.swc to your default downloads folder.\n\
Then hit any key and this script will find the file in the\n\
downloads folder and copy it into the right place.\n\
To use older versions of playerglobal.swc, choose one from this page\n\
\n\
https://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html\n\
\n\
Hit the Enter key when the download is complete to continue.

air.prompt.text=\
Apache Royale uses the Adobe AIR SDK to build Adobe AIR applications.\n\
\n\
To get the latest Adobe AIR SDK, go to this site:\n\
\n\
  http://www.adobe.com/devnet/air/air-sdk-download.html\n\
\n\
and download the Adobe AIR SDK to your default downloads folder.\n\
(The Adobe AIR SDKs for Flex are smaller downloads)\n\
Then hit any key and this script will find the file in your\n\
downloads folder and copy it into the right place.\n\
To use older versions of the Adobe AIR SDK, choose one from this page\n\
\n\
https://helpx.adobe.com/air/kb/archived-air-sdk-version.html\n\
\n\
(The "SDK" downloads are smaller than the "SDK and Compiler" downloads)\n\
Hit the Enter key when the download is complete to continue.\n\
Adobe AIR SDKs take a while to copy so feel free to go do something else\n\
if you don't get an error right away.

ERROR_ADOBE_AIR_SDK_NOT_FOUND=Could not find Adobe AIR SDK in downloads folder.
INFO_USING_AIR=Using Adobe AIR SDK:
INFO_FINISHED_UNZIPPING=Finished unzipping:
INFO_FINISHED_UNTARING=Finished untaring:
INFO_COPIED_FLASH=Copied playerglobal.swc

