# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2011 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2010 Sun
# Microsystems, Inc. All Rights Reserved.
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.

ConnectionNodeUniqueName={0} [{1} on {2}]
SchemaIsNotSet=Varsay\u0131lan \u015fablon

EXC_InsufficientConnInfo=ba\u011flant\u0131 kurmak i\u00e7in yetersiz bilgi
EXC_CannotEstablishConnection={0}'e {1} kullanarak ba\u011flant\u0131 kurulam\u0131yor ({2})

EXC_CannotOperateWith={0} ile i\u015flem yap\u0131lam\u0131yor
EXC_CannotFindAsText={0} metin olarak bulunam\u0131yor 
EXC_ConnectionError=ba\u011flant\u0131 hatas\u0131; {0}
EXC_DisconnectError=Unable to close connection, cause: {0}
EXC_ConnectionAlreadyExists=ba\u011flant\u0131 halihaz\u0131rda mevcut

# {0}=one of the ERR_UnableTo strings above
# {1}=the exception message
ERR_UnableTo_Detail={0} {1}
# {0}=one of the ERR_UnableTo strings above
ERR_UnableTo_NoDetail= {0} Bu hataya sebep olan istisnai durum mesaj defterine kaydedildi.

# Sql types
#SQL_ARRAY=ARRAY
#SQL_BIGINT=BIGINT
#SQL_BINARY=BINARY
#SQL_BIT=BIT
#SQL_BLOB=BLOB
#SQL_CHAR=CHAR
#SQL_CLOB=CLOB
#SQL_DATE=DATE
#SQL_DECIMAL=DECIMAL
#SQL_DISTINCT=DISTINCT
#SQL_DOUBLE=DOUBLE
#SQL_FLOAT=FLOAT
#SQL_INTEGER=INTEGER
#SQL_JAVA_OBJECT=JAVA_OBJECT
#SQL_LONGVARBINARY=LONGVARBINARY
#SQL_LONGVARCHAR=LONGVARCHAR
#SQL_NUMERIC=NUMERIC
#SQL_REAL=REAL
#SQL_REF=REF
#SQL_SMALLINT=SMALLINT
#SQL_TIME=TIME
#SQL_TIMESTAMP=TIMESTAMP
#SQL_TINYINT=TINYINT
#SQL_VARBINARY=VARBINARY
#SQL_VARCHAR=VARCHAR
#SQL_OTHER=OTHER
#SQL_NULL=NULL
#SQL_STRUCT=STRUCT
#SQL_UNKNOWN=UNKNOWN

# DriverExtendedDeleteImpl
# 0=driver name
# 1=connection name
MSG_ConfirmDeleteDriver=Driver {0} might be in use by connection {1}. Silmek istedi\u011finizden emin misiniz?
# 0=the number of drivers
MSG_ConfirmDeleteDrivers=Some of these {0} drivers are in use by some connections. Are you sure you want to delete them?
MSG_ConfirmDeleteDriverTitle=Nesne Silimini Onayla
MSG_ConfirmDeleteDriversTitle=\u00c7oklu Nesne Silimini Onayla
# UI logging
UI_CONNECT_DB=Veritabanna Ba\u011fland\u0131

# Usage logging
# 0=fully qualified driver class name
USG_DB_CONNECT=Veritaban\u0131na {0} kullanarak ba\u011fland\u0131

# ProgressPanel
MSG_PleaseWait=L\u00fctfen Bekleyiniz
LBL_Cancel=\u0130ptal
MSG_TestFailed={0} ba\u011flant\u0131s\u0131n\u0131n {1} veritaban\u0131na ge\u00e7erli bir ba\u011flant\u0131s\u0131 yok.
EXC_DerbyCreateDatabaseUnicode=Derby a\u011f s\u00fcr\u00fcc\u00fcs\u00fc multibyte karakterleri desteklemedi\u011finden veritaban\u0131 olu\u015fturulamad\u0131.

# Options export
Databases.Options.Export.displayName=Veritabanlar\u0131

DbExtendedDelete_ConfirmationMessage_DeleteObjects=Are you sure you want to delete {0} {1}?
DbExtendedDelete_ConfirmationTitle_DeleteObjects=Confirm {0} Delete
DbExtendedDelete_ConfirmationTitle_Tables={0,choice,1#Table|1<Tables}
DbExtendedDelete_ConfirmationMessage_Tables={0,choice,1#table|1<tables:}
DbExtendedDelete_ConfirmationMessage_Columns={0,choice,1#column|1<columns:}
DbExtendedDelete_ConfirmationTitle_Columns={0,choice,1#Column|1<Columns}
DbExtendedDelete_ConfirmationMessage_Others={0,choice,1#object|1<objects:}
DbExtendedDelete_ConfirmationTitle_Others={0,choice,1#Object|1<Objects}

DatabaseConnectionConvertor.password_description=A password for {0}
DatabaseConnection_PleaseWaitTitle=Connection information
DatabaseConnection_PleaseWaitMessage=Please wait while reading connection information.


