# 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.

###############################################################################
#
# Text for exceptions
#
###############################################################################

# Sysinfo, SysInfoWriter, and PropertyNames messages are SIF01.*
SIF01.B=Nale\u017cy skontaktowa\u0107 si\u0119 z obs\u0142ug\u0105 techniczn\u0105.
SIF01.C=Naci\u015bnij klawisz <return>, aby kontynuowa\u0107
SIF01.D=Nie znaleziono informacji o systemie bazy danych Derby!
SIF01.H=<informacje s\u0105 niedost\u0119pne>
SIF01.I=Wyj\u0105tek bezpiecze\u0144stwa: {0}
SIF01.J=NiepowodzenieAktualizacji
SIF01.K=<nie znaleziono nazwy>
SIF01.L=-------------- Informacje o j\u0119zyku Java --------------
SIF01.M=---------- Informacje o bazie danych Derby -----------
SIF01.N=--------------- Informacje licencyjne ----------------
SIF01.P=-------- Informacje o ustawieniach narodowych --------
SIF01.Q=Brak informacji o obs\u0142udze ustawie\u0144 narodowych do raportowania.
SIF01.R=Znaleziono obs\u0142ug\u0119 ustawie\u0144 narodowych: [{0}]
SIF01.S=\t wersja: {0}
SIF01.T=Bie\u017c\u0105ce ustawienia narodowe:
SIF01.U=Nie mo\u017cna przeanalizowa\u0107 \u015bcie\u017cki klasy: {0}
SIF01.V=Nie mo\u017cna uzyska\u0107 dost\u0119pu do domeny ochrony lub \u017ar\u00f3d\u0142a kodu dla klasy {0}: {1}


# VM environment properties.
SIF02.A=Wersja j\u0119zyka Java:                 {0}
SIF02.B=Dostawca j\u0119zyka Java:               {0}
SIF02.C=Katalog domowy dla j\u0119zyka Java:     {0}
SIF02.D=\u015acie\u017cka klasy j\u0119zyka Java:          {0}
SIF02.E=Nazwa systemu operacyjnego:         {0}
SIF02.F=Architektura systemu operacyjnego:  {0}
SIF02.G=Wersja systemu operacyjnego:        {0}
SIF02.H=Nazwa u\u017cytkownika Java:             {0}
SIF02.I=Katalog domowy u\u017cytkownika Java:    {0}
SIF02.J=Katalog u\u017cytkownika Java:           {0}


# ZipInfo messages are SIF03.*
SIF03.C=Wyj\u0105tek bezpiecze\u0144stwa j\u0119zyka Java: {0}

# ZipInfoProperties messages are SIF04.*
SIF04.C=<null>

# ClasspathTester messages are SIF08
SIF08.B=Sprawdzanie obecno\u015bci wszystkich bibliotek zwi\u0105zanych z baz\u0105 danych Derby. Zazwyczaj potrzebne s\u0105 tylko niekt\u00f3re z nich.
SIF08.C=Aby uzyska\u0107 list\u0119 mo\u017cliwych argument\u00f3w, wpisz {0}
SIF08.D=ZNALEZIONO W \u015aCIE\u017bCE KLASY:
SIF08.E=NIE ZNALEZIONO W \u015aCIE\u017bCE KLASY:
SIF08.F=POWODZENIE: W \u015bcie\u017cce klasy znaleziono wszystkie klasy zwi\u0105zane z baz\u0105 danych Derby.
SIF08.H=klasa okre\u015blona przez u\u017cytkownika ({0})
SIF08.I=Biblioteka serwera sieciowego bazy danych Derby ({0})
SIF08.J=Biblioteka mechanizmu wbudowanego bazy danych Derby ({0})
SIF08.L=Biblioteki klienta bazy danych Derby ({0})
SIF08.Q=Biblioteka narz\u0119dzi bazy danych Derby ({0})
SIF08.U=(nie znaleziono {0}).
SIF08.A=SK\u0141ADNIA: {0} dowolnaKlasa{1}






