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

# AbstractOperation
cannotResetOperationName = Navnet på en handling kan ikke nulstilles
cannotResetService = Tjenesten for en handling kan ikke nulstilles

# AbstractService
operationsNotAllowedInService = Handlinger kan ikke tildeles en RPC-tjeneste ({0})

# HTTPService
invalidResultFormat = Ugyldigt resultFormat '{0}': De gyldige formater er [{1}, {2}, {3}, {4}, {5}]
xmlEncodeReturnNull = xmlEncode har returneret null
xmlEncodeReturnNoXMLNode = xmlEncode har ikke returneret XMLNode
urlNotSpecified = Der skal være angivet en URL med useProxy indstillet til falsk.
xmlDecodeReturnNull = xmlDecode har returneret null
defaultDecoderFailed = Standarddekoderen kan ikke afkode resultatet

# mxml.HTTPService
unknownProtocol = Ukendt protokol '{0}'
pendingCallExists = Der er gjort forsøg på at foretage et opkald, mens et andet opkald venter. Ret indstillingerne for samtidige opkald, eller undgå flere opkald.

# mxml.RemoteObject
noListenerForEvent = Der er modtaget en hændelse, som mangler definition af lyttefunktion. Tilføj en lyttefunktion for hændelsen. {0}

# SOAPDecoder
soapVersionMismatch = Anmodningsimplementeringers version: {0}, Svarimplementeringers version {1}

# SOAPEncoder
missingInputParameter = Array af inputargumenter har ingen påkrævet parameter på position {0}
missingInputParameterWithName = Den påkrævede parameter '{0}' blev ikke fundet i inputargumenterne.
tooFewInputParameters = For få parametre - mindst {0} forventes, men {1} blev fundet
unexpectedInputParameter = Uventet parameter '{0}' blev fundet i inputargumenterne.

# WSDLDocument
wsdlDefinitionsNotFirst = Definitioner skal være det første element i et WSDL-dokument
##faultyWSDLFormat

# WSDLParser
noBaseWSDLAddress = Relativ WSDL-import kan ikke fortolkes uden fuldt kvalificeret basisadresse.
noBaseWSDLAddress.details = Angiv placeringen af WSDL-dokumentet for webtjenesten.
noServiceElement = WSDL kunne ikke indlæses
noServiceElement.details = Ingen <wsdl:service>-elementer blev fundet i WSDL på {0}.
unrecognizedNamespace = WSDL-parser har intet registreret dokument for navneområdet '{0}'
unrecognizedPortTypeName = WSDL-parser kunne ikke finde en porttype med navnet '{0}' i navneområdet '{1}'
overloadedOperation = WSDL indeholder en overbelastet handling ({0}) - denne metode understøttes ikke i øjeblikket.
unrecognizedMessageName = WSDL-parser kunne ikke finde en meddelelse med navnet '{0}' i navneområdet '{1}'
badElement = Elementet {0}:{1} kan ikke fortolkes
badType = Typen {0} kan ikke fortolkes

unexpectedException = Kørselsundtagelse {0}
unableToLoadWSDL = WSDL kan ikke indlæses. Hvis den er online, skal du kontrollere URI og/eller format af WSDL ({0})
faultyWSDLFormat = Forkert WSDL-format
##wsdlDefinitionsNotFirst
unrecognizedBindingName = WSDL-parser kunne ikke finde en binding med navnet '{0}' i navneområdet '{1}'

# mxml.WebService
##unknownProtocol
##noListenerForEvent

# SchemaContext
unknownSchemaType = Ukendt system for skematype
unknownSchemaVersion = Ukendt skemaversion
badSchemaNode = Skemanoden er ugyldig
noBaseSchemaAddress = Relativ skemaimport kan ikke fortolkes uden fuldt kvalificeret basisadresse.
unexpectedSchemaException = Der er opstået fejl under import af skema: {0}
errorWhileLoadingFromParent = Der er opstået en fejl under indlæsningen af importeret skema fra overordnet placering: {0}
unknownSchemaElement = Ukendt element: {0}
cannotFindType = Kan ikke finde typen for: {0}

# AbstractInvoker
cannotConnectToDestination = Der kan ikke oprettes forbindelse til '{0}'

# remoting.mxml.Operation
##pendingCallExists

# soap.Operation
invalidSoapResultFormat = Ugyldigt resultFormat '{0}'. De gyldige formater er 'object', 'xml' og 'e4x'
noListenerForHeader = Der er ingen lyttefunktion til header {0}

# WebService
mustSpecifyWSDLLocation = Du skal angive WSDL-placeringen med useProxy indstillet til falsk.
destinationOrWSDLNotSpecified = Der skal være angivet en destination og/eller WSDL.
noSuchServiceInWSDL = Den ønskede tjeneste '{0}' blev ikke fundet i WSDL-filen.
noServices = Der er ingen gyldige tjenester i WSDL-filen.
noSuchService = Tjenesten '{0}' blev ikke fundet
noPortsInWSDL = Der er ingen gyldige porte i WSDL-filen for tjenesten {0}.
multiplePortsFound = Der er ikke angivet en gyldig port. Ingen standardport kan vælges, da der er flere porte i WSDL-filen.
noServiceAndPort = Ingen tilsvarende port blev fundet (tjeneste = '{0}', port = '{1}')

# soap.mxml.Operation
##pendingCallExists
