################################################################################
##
##  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 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 Flex SDK 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 Flex SDK 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: 
