# 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.
#
################## WSDL2Code ######################################
wsdl2code.arg1=Usage: WSDL2Java -uri <url or path> : A url or path to a WSDL
wsdl2code.arg2=\t  -o <path>                Specify a directory path for the generated code.
wsdl2code.arg3=\t  -a                       Generate async style code only (Default: off).
wsdl2code.arg4=\t  -s                       Generate sync style code only (Default: off). Takes precedence over -a.
wsdl2code.arg5=\t  -p <pkg1>                Specify a custom package name for the generated code.
wsdl2code.arg6=\t  -l <language>            Valid languages are java and csharp (Default: java).
wsdl2code.arg7=\t  -t                       Generate a test case for the generated code.
wsdl2code.arg8=\t  -ss                      Generate server side code (i.e. skeletons) (Default: off).
wsdl2code.arg9=\t  -sd                      Generate service descriptor (i.e. services.xml). (Default: off). Valid with -ss.
wsdl2code.arg10=\t  -d <databinding>         Valid databinding(s) are adb, xmlbeans, jibx, jaxme and jaxbri (Default: adb).
wsdl2code.arg11=\t  -g                       Generates all the classes. Valid only with -ss.
wsdl2code.arg12=\t  -pn <port_name>          Choose a specific port when there are multiple ports in the wsdl.
wsdl2code.arg13=\t  -sn <service_name>       Choose a specific service when there are multiple services in the wsdl.
wsdl2code.arg14=\t  -u                       Unpacks the databinding classes
wsdl2code.arg15=\t  -r <path>                Specify a repository against which code is generated.
wsdl2code.arg16=\t  -ns2p ns1=pkg1,ns2=pkg2  Specify a custom package name for each namespace specified in the wsdl's schema.
wsdl2code.arg17=\t  -ssi                     Generate an interface for the service implementation (Default: off).
wsdl2code.arg18=\t  -wv                      WSDL Version. Valid Options : 2, 2.0, 1.1
wsdl2code.arg19=\t  -S                      Specify a directory path for generated source
wsdl2code.arg20=\t  -R                      Specify a directory path for generated resources
wsdl2code.arg21=\t  -em                      Specify an external mapping file
wsdl2code.arg22=\t  -f                      Flattens the generated files
wsdl2code.arg23=\t  -uw                      Switch on un-wrapping.
#wsdl2code.arg19=\t  -b                       Generate Axis 1.x backword compatible code

################## prop file loader #################################
propfileload.frameworkMismatch=Number of frameworks and extension names do not match!
propfileload.unknownFramework=Unknown framework specified for default!
propfileload.emitterMissing=No emitters found!
propfileload.unknownDefaultLang=Unknown Language specified for default!
propfileload.generalException=Exception while loading the property file

#################  template resolver #################################
resolver.templateNotFound={0} template not found!

################### Codegen engine ###################################
engine.wsdlParsingException=Error parsing WSDL
engine.invalidWsdlLocation=Invalid WSDL Location
engine.noProperDatabindingException=Unable to use specified databinding!
engine.emitterMissing=Emitter class not found!
engine.wrongEmitter=Non emitter class found!
engine.extensionLoadProblem=Extension class loading problem
engine.extensionInstantiationProblem=Extension class instantiation problem
engine.illegalExtension=Illegal extension!

################### Options ###################################
options.notADirectoryException=The specified output location is not a directory!
options.nomappingFile=Unable to load mapping file!
options.noFile=The specified output location is not a directory!

writer.noLangPropertiesExtension=No language specific properties!!!
writer.templateMissing=template for this writer is not found!

extension.bindingMissing=bindings are not present in the original document
extension.noProperDatabinding=No proper databinding has taken place
extension.invalidWSDL=Invalid WSDL: The WSDL Types Schema does not define a targetNamespace in {0}
extension.additionalSchemaFailure=Additional schema loading failed!!
extension.encodedNotSupported=The use 'encoded' is not supported!
extension.databindingMismatch=The specified databinding frameworks do not match!
extension.unhandledSchemaConstruct=Unhandled schema construct!
extension.unsupportedforunwrapping=Unsupported framework for unwrapping!
extension.unsupportedSchemaFormat=Unsupported Schema format for unwrapping! found {0} but expected {1}

emitter.unknownStyle=Unknown code generation style {0}
emitter.cannotFindBinding=Cannot find a binding!!
emitter.logEntryInterface1=Interface mode is selected.The following items will not be generated
emitter.logEntryInterface2=1. Message Receiver
emitter.logEntryInterface3=2. Stub
emitter.logEntryInterface4=3. CallbackHandler
emitter.logEntryInterface5=4. Test Classes
emitter.logEntryInterface6=5. Databinding Supporters
emitter.coreclassNameError=Cannot form the core class name
emitter.serviceNotFoundError=specified service {0} not found
emitter.endpointNotFoundError=specified end point {0} not found
emitter.noEndpointsFoundError=endpoints not found
emitter.warningMultipleServices=Warning - Multiple services found - picking the first service!
emitter.warningMultipleEndpoints=Warning - Multiple endpoints found - picking the first endpoint!
emitter.switchingMessages=Warning -No services found - switched to the interface mode!
emitter.warningMultiplePorttypes=Warning - Found multiple porttypes - picking the first

# Type mappers
databinding.typemapper.typeunmatched=No type was mapped to the name {0} with namespace {1}
databinding.typemapper.typeunmatched.null=No type can be matched to a null QName!

##################### java2WSDL
java2wsdl.arg1=Usage java2wsdl -cn <fully qualified class name> : class file name
java2wsdl.arg2=-o <output Location> : output file location
java2wsdl.arg3=-cp <class path uri> : list of classpath entries - (urls)
java2wsdl.arg4=-tn <target namespace> : target namespace
java2wsdl.arg5=-tp <target namespace prefix> : target namespace prefix
java2wsdl.arg6=-stn <schema target namespace> : target namespace for schema
java2wsdl.arg7=-stp <schema target namespace prefix> : target namespace prefix for schema
java2wsdl.arg8=-sn <service name> : service name
java2wsdl.arg9=-of <output file name> : output file name for the WSDL

java2wsdl.generalError=An error occured while generating code
java2wsdl.notAFolder=The specivied location {0} is not a folder
java2wsdl.classIsMust=class name must be present!


