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

# Translation instructions.
# 1.  Each message line is of the form key=value.
#     Translate the value, DO NOT translate the key.
# 2.  The messages may contain arguments that will be filled in
#     by the runtime.  These are of the form: {0}, {1}, etc.
#     These must appear as is in the message, though the order
#     may be changed to support proper language syntax.
# 3.  If a single quote character is to appear in the resulting
#     message, it must appear in this file as two consecutive
#     single quote characters.
# 4.  Lines beginning with "#" (like this one) are comment lines
#     and may contain translation instructions.  They need not be
#     translated unless your translated file, rather than this file,
#     will serve as a base for other translators.

outboundNoAction=Unable to determine wsa:Action for outbound message
referenceParameterError=An error occurred while attempting to add a reference parameter as a SOAP header.

specificInvalidAddressingHeader=The server failed to process the WS-Addressing header: {0} [Reason]: A header representing a Message Addressing Property is not valid and the message cannot be processed
invalidAddressingHeader=The server failed to process one of the WS-Addressing headers. [Reason]: A header representing a Message Addressing Property is not valid and the message cannot be processed
specificInvalidCardinality=The server received more than one {0} WS-Addressing header
invalidCardinality==The server received more copies of a WS-Addressing header than expected
specificMissingAddressInEPR=A {0} header was expected to be an EPR but did not contain an [address].
missingAddressInEPR=A WS-Addressing header was expected to be an EPR but did not contain an [address].
duplicateMessageID=The server rejected the message because it had a WS-Addressing MessageID which it had processed previously.
actionMismatch=WS-Addressing Fault: The SOAPAction and wsa:Action received by the server did not match.
specificOnlyAnonymousSupported=The {0} header contained a non-anonymous [address] which is not supported by the server.
onlyAnonymousSupported=A WS-Addressing header contained a non-anonymous [address] which is not supported by the server.
specificOnlyNonAnonSupported=The {0} header contained an anonymous [address] which is not supported by the server.
onlyNonAnonSupported=A WS-Addressing header contained an anonymous [address] which is not supported by the server.
specificAddressingHeaderRequired=The {0} header is required when WS-Addressing is in use but was not sent.
addressingHeaderRequired=A WS-Addressing header which is required when WS-Addressing is in use was not sent.
specificDestinationUnreachable=The destination represented by the WS-Addressing To EPR with address {0} cannot be reached.
destinationUnreachable=The destination represented by the WS-Addressing To EPR cannot be reached.
specificActionNotRecognised=The server did not recognise the action which it received: {0}
actionNotRecognised=The server did not recognise the action which it received.

# Spec Fault Strings - DO NOT NLS without contacting developers for advice
spec.FAULT_ACTION_NOT_SUPPORTED_REASON=The [action] cannot be processed at the receiver.
spec.final.FAULT_INVALID_HEADER_REASON=A header representing a Message Addressing Property is not valid and the message cannot be processed
spec.final.FAULT_ADDRESSING_HEADER_REQUIRED_REASON=A required header representing a Message Addressing Property is not present
spec.final.FAULT_ADDRESSING_DESTINATION_UNREACHABLE_REASON=No route can be determined to reach [destination]
spec.submission.FAULT_ADDRESSING_DESTINATION_UNREACHABLE_REASON=No route can be determined to reach the destination role defined by the WS-Addressing To.
spec.submission.FAULT_INVALID_HEADER_REASON=A message information header is not valid and the message cannot be processed. The validity failure can be either structural or semantic, e.g. a [destination] that is not a URI or a [relationship] to a [message id] that was never issued.
spec.submission.FAULT_ADDRESSING_HEADER_REQUIRED_REASON=A required message information header, To, MessageID, or Action, is not present.
        