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

flash.prompt.text=\
Apache Flex SDK używa pliku Adobe Flash Player playerglobal.swc do budowania apkilacji Adobe Flash.\n\
\n\
Plik playerglobal.swc podlega Umowie Licencyjnej \n\
Adobe Flex SDK dostępnej tutaj:\n\
http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf,\n\
Poprzez pobieranie, modyfikowanie, rozpowszechnianie, używanie i/lub uzyskiwanie dostępu do pliku playerglobal.swc,\n\
zgadzasz się na postanowienia i warunki umowy licencyjnej końcowego użytkownika oprogramowania. \n\
\n\
\w dodatku do postanowień licencyjnych licencji Adobe, zgadzasz się również na zobowiązania wynikające z warunków strony trzeciej wymienionych tutaj:\n\
http://www.adobe.com/products/eula/third_party/.\n\
Adobe zaleca zapoznanie się z warunkami strony trzeciej.\n\
\n\
Ta licencja nie jest kompatybilna z licencją Apache v2.\n\
Czy chcesz pobrać i zainstalować playerglobal.swc?

air.prompt.text=\
Apache Flex SDK używa Adobe AIR SDK do tworzenia aplikacji Adobe AIR.\n\
Adobe AIR SDK podlega Umowie Licencyjnej \n\
Adobe AIR SDK dostępnej tutaj:\n\
http://www.adobe.com/products/air/sdk-eula.html.\n\
Ta licencja nie jest kompatybilna z licencją Apache v2.\n\
Czy chcesz pobrać i zainstalować Adobe AIR SDK?

osmf.prompt.text=\
Open Source Media Framework (OSMF) używany przez komponenty video\n\
podlegaja licencji Mozilla Public License Version 1.1.\n\
Mozilla Public License Version 1.1:\n\
\n\
Zawartość pliku (plików) podlega licencji Mozilla Public License Version 1.1.\n\
Nie możesz używać plików poza postanowieniami tej licencji. \n\
Możesz pobrać kopię licencji tutaj:\n\
http://www.mozilla.org/MPL/. \n\
Przez ściąganie, modyfikowanie, rozpowszechnianie, używanie i/lub uzyskiwanie dostępu do pliku (plików), \n\
zgadzasz się z postanowieniami i warunkami umowy licencynjej.\n\
\n\
Czy przeczytałeś warunki umowy licencyjnej MPL1.1 powyżej?

swfobject.prompt.text=\
Apache Flex SDK używa SWFObject podczas budowania aplikacji Adobe Flash.\n\
SWFObject podlega Umowie Licencyjnej \n\
MIT dostępnej tutaj:\n\
http://opensource.org/licenses/mit-license.php.\n\
Ta licencja nie jest kompatybilna z licencją Apache v2.\n\
Czy chcesz pobrać i zainstalować SWFObject?

blazeds.prompt.text=\
Apache Flex opcjonalnie może integrować się z Adobe BlazeDS.\n\
Ta opcja wymaga pliku flex-messaging-common.jar z Adobe Flex SDK.\n\
Umowa licencyjna Adobe SDK na Adobe Flex 4.6 obejmuje ten plik.\n\
Licencja ta nie jest kompatybilna z licencją Apache V2.\n\
\n\
Umowa Licencyjna Adobe Flex SDK:\n\
\n\
Wszystkie pliki zawarte w pobranym pliku Adobe Flex SDK podlegają \n\
umowie licencyjnej Adobe Flex SDK dostępnej tutaj: \n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
Poprzez pobieranie, modyfikowanie, rozpowszechnianie, używanie i/lub uzyskiwanie dostępu do plików w Adobe Flex SDK, \n\
zgadzasz się na postanowienia i warunki umowy licencyjnej końcowego użytkownika oprogramowania.\n\
\n\
W dodatku do postanowień licencyjnych licencji Adobe, zgadzasz się również na zobowiązania wynikające z warunków strony trzeciej wymienionych tutaj: \n\
    http://www.adobe.com/products/eula/third_party/. \n\
Adobe zaleca zapoznanie się z warunkami strony trzeciej.\n\
\n\
Czy chcesz pobrać i zainstalować wybrany plik z Adobe Flex SDK?

fontswf.prompt.text=\
Apache Flex opcjonalnie może integrować się z wbudowanym wsparciem czcionek Adobe.\n\
Ta opcja wymaga kilku paczek czcionek z Adobe Flex SDK.\n\
Umowa licencyjna Adobe SDK na Adobe Flex 4.6 obejmuje te paczki.\n\
Licencja ta nie jest kompatybilna z licencją Apache V2.\n\
\n\
Umowa Licencyjna Adobe Flex SDK:\n\
\n\
Wszystkie pliki zawarte w pobranym pliku Adobe Flex SDK podlegają \n\
umowie licencyjnej Adobe Flex SDK dostępnej tutaj: \n\
    http://www.adobe.com/products/eulas/pdfs/adobe_flex_software_development_kit-combined-20110916_0930.pdf, \n\
Poprzez pobieranie, modyfikowanie, rozpowszechnianie, używanie i/lub uzyskiwanie dostępu do plików w Adobe Flex SDK, \n\
zgadzasz się na postanowienia i warunki umowy licencyjnej końcowego użytkownika oprogramowania.\n\
\n\
W dodatku do postanowień licencyjnych licencji Adobe, zgadzasz się również na zobowiązania wynikające z warunków strony trzeciej wymienionych tutaj: \n\
    http://www.adobe.com/products/eula/third_party/. \n\
Adobe zaleca zapoznanie się z warunkami strony trzeciej.\n\
\n\
Czy chcesz pobrać i zainstalować wybrane archiwum z Adobe Flex SDK?
 
unable.to.find.java=Nie można znaleźć pliku wykonawczego Java. Ustaw zmienną środowiskową JAVA_HOME

install.complete.echo=${basedir} jest teraz kompatybilnym folderem IDE
find.java.echo.pattern=Java jest $${java.executable}
mac.copy.echo.pattern=Kopiowanie plików z $${download.dir}/airsdk/$${srcdir} do $${destdir}

INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC=Ściąganie Adobe Air Runtime Kit dla systemu Mac z: 
INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS=Ściąganie Adobe AIR Runtime Kit dla systemu Windows z:
INFO_FINISHED_UNTARING=Zakończono rozpakowywanie: 
INFO_FINISHED_UNZIPPING=Zakończono rozpakowywanie: 
INFO_INSTALLING_PLAYERGLOBAL_SWC=Instalowanie Adobe Flash Player playerglobal.swc z: 
INFO_INSTALLING_CONFIG_FILES=Instalowanie plików konfiguracyjnych frameworka skonfigurowanych do użytku z IDE
INFO_DOWNLOADING_FILE_FROM=Ściąganie {0} z: {1}
INFO_DOWNLOADED=Ściąganie zakończone
INFO_VALIDATING_FILE=Potwierdzanie pobierania:
