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

flash.prompt.text=\
Apache Flex SDK gebruikt Adobe Flash Player's playerglobal.swc om Adobe Flash applicaties te maken.\n\
\n\
De Adobe SDK licentie overeenkomst geldt voor Adobe Flash Player's playerglobal.swc.\n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
Door het downloaden, aanpassen, distribueren, gebruiken en/of openen van playerglobal.swc\n\
gaat u akkoord met de voorwaarden van de toepasselijke gebruikersovereenkomst.\n\
\n\
Naast de Adobe gebruikersovereenkomst gaat u tevens akkoord met de volgende 'third-party' voorwaarden:\n\
    http://www.adobe.com/products/eula/third_party/.\n\
Adobe raad u aan om deze 'third-party' voorwaarden door te nemen.\n\
\n\
Deze licentie is niet compatibel met de Apache V2 licentie.\n\
Wilt u de Adobe Flash Player playerglobal.swc installeren?

air.prompt.text=\
Apache Flex SDK gebruikt de Adobe AIR SDK om Adobe AIR applicaties te maken.\n\
De Adobe SDK licentie overeenkomst geldt voor de Adobe AIR SDK.\n\
    http://www.adobe.com/products/air/sdk-eula.html.\n\
Deze licentie is niet compatibel met de Apache V2 licentie.\n\
Wilt u de Adobe AIR SDK installeren?

osmf.prompt.text=\
Het Open Source Media Framework (OSMF) dat gebruikt wordt door de video\n\
componenten is gelicenseerd onder de Mozilla Public License Versie 1.1.\n\
\n\
Mozilla Public License Version 1.1:\n\
\n\
De bestanden en hun inhoud vallen onder de Mozilla Public License Version 1.1.\n\
U kunt deze bestanden enkel gebruiken onder de voorwaarden van de licentieovereenkomst.\n\
U kunt de licentieovereenkomst hier vinden:\n\
    http://www.mozilla.org/MPL/. \n\
Door het downloaden, aanpassen, distribueren, gebruiken en/of openen van de bestanden\n\
gaat u akkoord met de voorwaarden van de toepasselijke gebruikersovereenkomst.\n\
\n\
Wilt u het OSMF installeren?

swfobject.prompt.text=\
Apache Flex SDK gebruikt de SWFObject utility om Adobe Flash applicaties te maken.\n\
De MIT License (MIT) geldt voor de SWFObject utility.\n\
\n\
U kunt de MIT licentieovereenkomst hier vinden:\n\
    http://opensource.org/licenses/mit-license.php.\n\
Deze licentie is compatibel met de Apache V2 licentie.\n\
\n\
Wilt u de SWFObject utility installeren?

blazeds.prompt.text=\
Apache Flex kan optioneel integreren met remoting providers zoals BlazeDS,\n\
GraniteDS, WebORB, Red5, AMFPHP, RubyAMF, PyAMF en andere. Deze feature vereist\n\
flex-messaging-common.jar uit de Adobe Flex SDK. De Adobe SDK licentie\n\
overeenkomst voor Adobe Flex 4.6 geldt voor deze jar.\n\
\n\
Deze licentie is niet compatibel met de Apache V2 licentie.\n\
\n\
Adobe Flex SDK Licentieovereenkomst:\n\
\n\
De Adobe Flex SDK licentie overeenkomst geldt voor de Adobe Flex SDK:\n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
Door het downloaden, aanpassen, distribueren, gebruiken en/of openen van bestanden in de Adobe Flex SDK\n\
gaat u akkoord met de voorwaarden van de toepasselijke gebruikersovereenkomst.\n\
\n\
Naast de Adobe gebruikersovereenkomst gaat u tevens akkoord met de volgende 'third-party' voorwaarden:\n\
    http://www.adobe.com/products/eula/third_party/.\n\
Adobe raad u aan om deze 'third-party' voorwaarden door te nemen.\n\
\n\
Wilt u deze jar uit de Adobe Flex SDK installeren?

fontswf.prompt.text=\
Apache Flex kan optioneel integreren met Adobe's embedded font support.\n\
Deze feature vereist een aantal font jars uit de Adobe Flex SDK.\n\
De Adobe SDK licentie overeenkomst voor Adobe Flex 4.6 geldt voor deze jars.\n\
Deze licentie is niet compatibel met de Apache V2 licentie.\n\
\n\
Deze licentie is niet compatibel met de Apache V2 licentie.\n\
\n\
Adobe Flex SDK Licentieovereenkomst:\n\
\n\
De Adobe Flex SDK licentie overeenkomst geldt voor de Adobe Flex SDK:\n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
Door het downloaden, aanpassen, distribueren, gebruiken en/of openen van bestanden in de Adobe Flex SDK\n\
gaat u akkoord met de voorwaarden van de toepasselijke gebruikersovereenkomst.\n\
\n\
Naast de Adobe gebruikersovereenkomst gaat u tevens akkoord met de volgende 'third-party' voorwaarden:\n\
    http://www.adobe.com/products/eula/third_party/.\n\
Adobe raad u aan om deze 'third-party' voorwaarden door te nemen.\n\
\n\
Wilt u deze jars uit de Adobe Flex SDK installeren?
 
unable.to.find.java=Java executable niet gevonden. Configureer de JAVA_HOME omgevingsvariabele.

install.complete.echo=${basedir} is nu een IDE compatibele folder
find.java.echo.pattern=Java is $${java.executable}
mac.copy.echo.pattern=Kopieer bestanden van $${download.dir}/airsdk/$${srcdir} naar $${destdir}

INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Adobe AIR Runtime Kit voor Mac wordt gedownload van: 
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Adobe AIR Runtime Kit voor Windows wordt gedownload van: 
INFO_DOWNLOADING_FILE_FROM={0} wordt gedownload van: {1}
INFO_DOWNLOADED=Gedownload 
INFO_FINISHED_UNTARING=Klaar met tar uitpakken:
INFO_FINISHED_UNZIPPING=Klaar met zip uitpakken: 
INFO_INSTALLING_CONFIG_FILES=Framework configuratie bestanden voor gebruik met IDE worden geinstalleerd
INFO_INSTALLING_PLAYERGLOBAL_SWC=Adobe Flash Player playerglobal.swc wordt geinstalleerd van: