#
# 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.Server.Label=Server or IP address
NeoConnectionEditor.DatabaseName.Label=Database name (4.0)
NeoConnectionEditor.Version4.Label=Version 4 database?
NeoConnectionEditor.BoltPort.Label=Bolt 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)

