#
# 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.
#
#
NeoConnectionEditor.Name.Label=Connection name
NeoConnectionEditor.Automatic.Label=Automatic?
NeoConnectionEditor.Automatic.Tooltip=Asks the driver to automatically determine protocol options like encryption and routing.
NeoConnectionEditor.Server.Label=Server or IP address
NeoConnectionEditor.DatabaseName.Label=Database name
NeoConnectionEditor.Version4.Label=Version 4 database?
NeoConnectionEditor.DatabasePort.Label=Database port
NeoConnectionEditor.BrowserPort.Label=Browser Port
NeoConnectionEditor.Routing.Label=Use routing, neo4j:// protocol?
NeoConnectionEditor.Policy.Label=Routing Policy
NeoConnectionEditor.UserName.Label=Username
NeoConnectionEditor.Password.Label=Password
NeoConnectionEditor.Encryption.Label=Use encryption?
NeoConnectionEditor.TrustAllCertificates.Label=Trust all certificates?
NeoConnectionEditor.URLs.Label=Manual URLs
NeoConnectionEditor.URLColumn.Label=URL
NeoConnectionEditor.ConnectionLivenessCheckTimeout.Label=Connection liveness Check Timeout (ms)
NeoConnectionEditor.MaxConnectionLifetime.Label=Maximum connection lifetime (ms)
NeoConnectionEditor.MaxConnectionPoolSize.Label=Maximum pool size
NeoConnectionEditor.ConnectionAcquisitionTimeout.Label=Connection aquisition time (ms)
NeoConnectionEditor.ConnectionTimeout.Label=Connection timeout (ms)
NeoConnectionEditor.MaxTransactionRetryTime.Label=Maximum transaction retry time (ms)

