<?xml version="1.0"?>
<!--

  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.

-->

<config>
    <!--<progressLabels>
        <en_US>
            <Copy>Copying %1 of %2</Copy>
            <Get>Downloading bytes %1 of %2</Get>
            <Checksum>Computing checksum: bytes %1 of %2</Checksum>
        </en_US>
    </progressLabels>
     -->
    <strings description="override default installer strings here">
        <string id="INFO_DOWNLOADING_FLEX_SDK">
            <el_GR>Γίνεται λήψη του Apache Flex Falcon Compiler από:</el_GR>
            <en_US>Downloading Apache Flex Falcon Compiler from: </en_US>
        </string>
        <string id="INFO_ENTER_VALID_FLEX_SDK_PATH">
            <el_GR>Παρακαλώ εισάγετε μια έγκυρη διαδρομή καταλόγου για το Flex SDK</el_GR>
            <en_US>Please enter valid directory path for a Flex or FlexJS SDK</en_US>
        </string>
        <string id="INFO_SELECT_DIRECTORY">
            <el_GR>Επιλέξτε τον κατάλογο στον οποίο θέλετε να εγκαταστήσετε το Flex Falcon</el_GR>
            <en_US>Select the directory where you want to install the Flex Falcon Compiler</en_US>
        </string>
        <string id="INFO_VERIFY_FLEX_SDK_DONE">
            <el_GR>Η επαλήθευση των ληφθέντων αρχείων είναι επιτυχής.</el_GR>
            <en_US>The Apache Flex Falcon MD5 Signature of the downloaded files matches the reference. The file is valid.</en_US>
        </string>
        <string id="SELECT_PATH_PROMPT">
            <el_GR>Πληκτρολογήστε η επιλέξτε μια έγκυρη διαδρομή για το Flex Falcon Compiler</el_GR>
            <en_US>Where do you want to install the Apache Flex Falcon Compiler?</en_US>
        </string>
        <string id="ERROR_VERIFY_FLEX_SDK">
            <el_GR>Η επαλήθευση των ληφθέντων αρχείων απέτυχε. Η εγκατάσταση σταμάτησε.</el_GR>
            <en_US>The Apache Flex Falcon MD5 Signature of the downloaded files does not match the reference value. The file is invalid, installation is aborted.</en_US>
        </string>
        <string id="BTN_LABEL_OPEN_APACHE_FLEX_FOLDER">
            <el_GR>ΑΝΟΙΓΜΑ ΦΑΚΕΛΟΥ APACHE FLEX FALCON</el_GR>
            <en_US>OPEN APACHE FLEX FALCON FOLDER</en_US>
        </string>
        <string id="STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK">
            <el_GR>Λήψη Apache Flex Falcon Compiler</el_GR>
            <en_US>Apache Flex Falcon Compiler (Required)</en_US>
        </string>
        <string id="STEP_VERIFY_FLEX_SDK">
            <el_GR>Γίνεται επαλήθευση του Apache Flex Falcon MD5 Signature</el_GR>
            <en_US>Verifying Apache Flex Falcon MD5 Signature</en_US>
        </string>
        <string id="STEP_UNZIP_FLEX_SDK">
            <el_GR>Αποσυμπίεση του Apache Flex Falcon Compiler</el_GR>
            <en_US>Uncompress Apache Flex Falcon Compiler</en_US>
        </string>
    </strings>
    <steps description="targets that should have a 'step' in the GUI progress indicator, in order of appearance.">
        <step id="download">
            <el_GR></el_GR>
            <en_US>Download Falcon dependencies</en_US>
        </step>
        <step id="copyfiles">
            <el_GR></el_GR>
            <en_US>Copy Falcon Compiler files</en_US>
        </step>
    </steps>
    <component id="STEP_REQUIRED_INSTALL_APACHE_FLEX_FALCON" required="true" property="do.flexfalcon.install">
        <el_GR>
            <label>Apache Flex Falcon (Απαιτούμενο)</label>
            <message>Για το Apache Flex Falcon ισχύει η συμφωνία χρήσης του Apache License V2. Θέλετε να εγκαταστήσετε το Apache Flex Falcon;</message>
        </el_GR>
        <en_US>
            <label>Apache Flex Falcon (Required)</label>
            <message>The Apache License V2 applies to the Apache Flex Falcon Compiler.  Do you want to install the Apache Flex Falcon Compiler?</message>
            <license>Apache V2 License</license>
            <licenseURL>http://www.apache.org/licenses/LICENSE-2.0.html</licenseURL>
        </en_US>
    </component>
</config>
