#
# 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.
################## XSD2java #################################################
schema.usage=XSD2Java [options] <schema file name(s)> <output folder name>
schema.ns2p.argname=namespace=package
schema.ns2p.description=namespace to package mapping
schema.mp.argname=package
schema.mp.description=package for the mapper class
schema.dp.argname=package
schema.dp.description=default package for schemas without namespace
schema.h.description=enable helper mode
schema.p.argname=package
schema.p.description=set package name
schema.compiling=Compiling {0}
schema.locationNotFolder=specified location is not a folder!
schema.compilerexception=Compiler caused an exception

###################Schema compiler ###########################################
schema.unsupportedcontenterror=Unsupported content {0} !
schema.unknowncontenterror=Unknown content!
schema.elementNull=Null element encountered! Please check your schema!
schema.referencedElementNotFound=The referenced element ''{0}'' was not found!
schema.elementWithNoType=Could not find any schema type associated with the Element ''{0}''
schema.emptyName=Missing name attribute! Please check your schema!
################## Options ###################################################
schema.unsupportedvalue=Unsupported value!

################## Java bean writer ###########################################
schema.rootnotfolderexception=Root location needs to be a directory!
schema.notimplementedxception=Not implemented yet
schema.templateLoadException=Error loading the template
schema.templateNotFoundException=template for this writer is not found
schema.typeMissing=Type {0} missing!
schema.docuement.error=Error in creating the document
schema.soapencoding.error={0} is not supported.