# 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.
AlfrescoBfsiOutputConnector.Server=localhost
AlfrescoBfsiOutputConnector.BfsiParametersTab=Bfsi Output Parameters

AlfrescoBfsiOutputConnector.DropFolder=Drop Folder Configuration
AlfrescoBfsiOutputConnector.DropFolderColon=DropFolder:
AlfrescoBfsiOutputConnector.TheDropFolderMustNotBeNull=The dropfolder must not be null

AlfrescoBfsiOutputConnector.UsernameColon=Username:
AlfrescoBfsiOutputConnector.PasswordColon=Password:
AlfrescoBfsiOutputConnector.ProtocolColon=Protocol:
AlfrescoBfsiOutputConnector.ServerColon=Server:
AlfrescoBfsiOutputConnector.PortColon=Port:
AlfrescoBfsiOutputConnector.PathColon=Path:



AlfrescoBfsiOutputConnector.CreateTimestampTreeColon=Create Timestamp Tree:
AlfrescoBfsiOutputConnector.CreateTimestampTreeEquals=createTimestampTree=



AlfrescoBfsiOutputConnector.TheUsernameMustNotBeNull=The username must not be null
AlfrescoBfsiOutputConnector.ThePasswordMustNotBeNull=The password must not be null
AlfrescoBfsiOutputConnector.ServerNameMustNotBeNull=Server name must be not null
AlfrescoBfsiOutputConnector.ServerNameCantContainSlash=Server name can't contain the character '/'
AlfrescoBfsiOutputConnector.ThePortMustNotBeNull=The port must be not null
AlfrescoBfsiOutputConnector.TheProtocolMustNotBeNull=The Protocol must be not null
AlfrescoBfsiOutputConnector.TheServerPortMustBeValidInteger=The server port must be a valid integer
AlfrescoBfsiOutputConnector.PathMustNotBeNull=Path must be not null



AlfrescoBfsiOutputConnector.ParametersColon=Parameters:
AlfrescoBfsiOutputConnector.UsernameEquals=username=
AlfrescoBfsiOutputConnector.PasswordEquals=password=
AlfrescoBfsiOutputConnector.ProtocolEquals=protocol=
AlfrescoBfsiOutputConnector.ServerEquals=server=
AlfrescoBfsiOutputConnector.PortEquals=port=
AlfrescoBfsiOutputConnector.PathEquals=path=




