#
# 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.xsdarg1=Argument1 - Source schema file name
schema.xsdarg2=Argument2 - Output folder name
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.