################################################################################
##
##  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 FlexJS uses the Adobe Flash Player's playerglobal.swc to build Adobe Flash applications.\n\
\n\
Die Adobe Flash Player playerglobal.swc verwendet die Adobe SDK Lizenzvereinbarung.\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 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\
Diese Lizenz ist nicht mit der Apache V2 Lizenz vereinbar.\n\
Möchten SIe jetzt die Adobe Flash Player playerglobal.swc installieren?


air.prompt.text=\
Apache FlexJS uses the Adobe AIR SDK to build Adobe AIR applications.\n\
Das Adobe AIR SDK verwendet die Adobe SDK Lizenzvereinbarung.\n\
http://www.adobe.com/products/air/sdk-eula.html.\n\
Diese Lizenz ist nicht mit der Apache V2 Lizenz vereinbar.\n\
Möchten SIe jetzt das Adobe AIR SDK installieren?

osmf.prompt.text=\
Das Open Source Media Framework (OSMF) welches von den Videokomponenten\n\
verwendet wird ist unter der Mozilla Public License Version 1.1 lizensiert.\n\
Möchten Sie das Open Source Media Framework (OSMF) jetzt installieren?
\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 FlexJS uses SWFObject when building Adobe Flash applications.\n\
Das SWFObject utility verwendet die MIT License (MIT).\n\
http://opensource.org/licenses/mit-license.php.\n\
Diese Lizenz ist mit der Apache V2 Lizenz vereinbar.\n\
Möchten SIe jetzt das SWFObject utility installieren?:\n\

blazeds.prompt.text=\
Apache Flex kann optional Adobe BlazeDS einbinden.\n\
Dieses Feature benötigt flex-messaging-common.jar aus dem Adobe Flex SDK.\n\
Die Adobe SDK Lizenzvereinbarung für Adobe Flex 4.6 gilt für diese Jar-Datei.\n\
Diese Lizenz ist nicht mit der Apache V2 Lizenz vereinbar.\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\
Möchten Sie diese Jar-Datei aus dem Adobe Flex SDK installieren?

fontswf.prompt.text=\
Apache Flex kann optional das Feature \"Einbetten von Schriftarten\" einbinden.\n\
Dieses Feature benötigt verschieden Schriftarten Jar-Dateien aus dem Adobe Flex SDK.\n\
Die Adobe SDK Lizenzvereinbarung für Adobe Flex 4.6 gilt für diese Jar-Dateien.\n\
Diese Lizenz ist nicht mit der Apache V2 Lizenz vereinbar.\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\
Möchten Sie diese Jar-Dateien aus dem Adobe Flex SDK installieren?
 
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}

INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Lade Adobe AIR Runtime Kit für Mac von: 
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Lade Adobe AIR Runtime Kit für Windows von: 
INFO_DOWNLOADING_FILE_FROM=Lade {0} von: {1} herunter
INFO_DOWNLOADED=Download abgeschlossen 
INFO_FINISHED_UNTARING=untar abgeschlossen: 
INFO_FINISHED_UNZIPPING=entpacken abgeschlossen: 
INFO_INSTALLING_CONFIG_FILES=Installiere Framework Konfigurationsdateien für die Verwendung mit einer IDE
INFO_INSTALLING_PLAYERGLOBAL_SWC=Installiere Adobe Flash Player playerglobal.swc von: 
