################################################################################
##
##  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.
##
################################################################################
BTN_LABEL_BROWSE=BROWSE
BTN_LABEL_CLOSE=CLOSE
BTN_LABEL_INSTALL=INSTALL
BTN_LABEL_INSTALL_LOG=INSTALL LOG
ERROR_CONFIG_XML_LOAD=Error while trying to load XML configuration file: 
ERROR_INVALID_AIR_SDK_URL_MAC=Adobe AIR SDK URL for Mac invalid in configuration file
ERROR_INVALID_AIR_SDK_URL_WINDOWS=Adobe AIR SDK URL for Windows invalid in configuration file
ERROR_INVALID_FLASH_PLAYER_SWC_URL=Flash Player swc URL invalid in configuration file
ERROR_INVALID_FLEX_SDK_DIRECTORY=Invalid Flex SDK directory selected
ERROR_INVALID_SDK_URL=Apache Flex SDK URL invalid in configuration file
ERROR_NATIVE_PROCESS_ERROR=Native Process error unable to untar Adobe AIR SDK
ERROR_NATIVE_PROCESS_NOT_SUPPORTED=Native Process not supported. Unable to untar Adobe AIR SDK
ERROR_UNABLE_TO_COPY_FILE=Unable to copy file 
ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY=Unable to create temporary directory
ERROR_UNABLE_TO_DELETE_TEMP_DIRECTORY=Unable to clean up temporary installation directories
ERROR_UNABLE_TO_DOWNLOAD_AIR_SDK=Unable to download Adobe AIR Runtime Kit
ERROR_UNABLE_TO_DOWNLOAD_FLASH_PLAYER_SWC=Unable to download Flash Player swc
ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK=Unable to download Apache Flex SDK
ERROR_UNABLE_TO_INSTALL_CONFIG_FILES=Unable to install configuration files
ERROR_UNSUPPORTED_OPERATING_SYSTEM=Unsupported operating system
INFO_ABORT_INSTALLATION=Aborting Installation
INFO_APP_INVOKED=Invoked in command line mode with the following arguments: 
INFO_CREATING_FLEX_HOME=Creating Apache Flex home
INFO_CREATING_TEMP_DIR=Creating temporary directory
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_DOWNLOADING_FLEX_SDK=Downloading Apache Flex SDK from: 
INFO_DOWNLOADED=Download complete 
INFO_ENTER_VALID_FLEX_SDK_PATH=Please enter valid directory path for the Flex SDK
INFO_FINISHED_UNTARING=Finished untaring: 
INFO_FINISHED_UNZIPPING=Finished unzipping: 
INFO_INSTALLATION_COMPLETE=Installation complete.
INFO_INSTALLING_CONFIG_FILES=Installing frameworks configuration files configured for use with an IDE
INFO_INSTALLING_PLAYERGLOBAL_SWC=Installing Adobe Flash Player playerglobal.swc from: 
INFO_INVOKED_GUI_MODE=invoked in GUI mode
INFO_SELECT_DIRECTORY=Select a directory
INFO_UNZIPPING=Unzipping: 
SELECT_PATH_PROMPT=Enter Flex SDK path or browse to select a path
STEP_SELECT_AIR_AND_FLASH_VERSION=Select AIR and Flash Player versions.
STEP_CREATE_DIRECTORIES=Create Directories
STEP_DOWNLOAD_AIR_RUNTIME_KIT=Download Adobe AIR Runtime Kit
STEP_DOWNLOAD_FLASHPLAYER_SWC=Download Flash Player swc
STEP_DOWNLOAD_FLEX_SDK=Download Apache Flex SDK
STEP_INSTALL_CONFIG_FILES=Install Framework Configuration Files
STEP_UNZIP_AIR_RUNTIME_KIT=Unzip Adobe AIR Runtime Kit
STEP_UNZIP_FLEX_SDK=Unzip Apache Flex SDK
