# $Id$
# Copyright 2004 The Apache Software Foundation
#
# Licensed 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.
#
# Contains String contants used throughout the Tapestry framework.
# To keep things organized, each key is in two parts:  the simple class name
# and a subkey within the class name.


# Some general messages

service-no-parameters=Service {0} requires no service parameters.
service-single-parameter=Service {0} requires exactly one service parameter.
service-single-context-parameter=Service {0} requires exactly one context parameter.
service-requires-parameters=Service {0} requires at least one service parameter.
service-incorrect-parameter-count=Service {0} requires exactly {1} service parameters.
missing-resource=Could not locate resource {0}.
invalid-field-name=Invalid field name: {0}.
unable-to-resolve-class=Unable to resolve class {0}.
field-not-defined=Field {0} does not exist.
illegal-field-access=Cannot access field {0}.
field-is-instance=Field {0} is an instance variable, not a class variable.
deprecated-component-param=Parameter ''{1}'' of component {0} is deprecated, use parameter ''{2}'' instead.
must-be-wrapped-by-form={1} components must be enclosed by a Form component.
invalid-null-parameter=Parameter ''{0}'' may not be null.
null-value-for-binding=Binding value is null.
no-such-component=Component {0} does not contain a component {1}.
required-parameter=Value for parameter ''{0}'' in component {1} is null, and a non-null value is required.
render-only-property=Property ''{0}'' of {1} may only be accessed while the component is rendering.
unsupported-property=Property ''{1}'' is not supported by {0}.
must-be-contained-by-body={0} components must be contained by a Body component.
illegal-encoding=The encoding ''{0}'' is not recognized.

unable-to-parse-expression=Unable to parse OGNL expression ''{0}'': {1}
unable-to-read-expression=Unable to read OGNL expression ''{0}'' of {1}: {2}
unable-to-write-expression=Unable to update OGNL expression ''{0}'' of {1} to {2}: {3}
is-constant-expression-error=Error evaluating OGNL expression ''{0}'': {1}

unable-to-lookup=Unable to lookup {0}: {1}

# org.apache.tapestry

AbstractComponent.attempt-to-change-container=Attempt to change existing container.
AbstractComponent.attempt-to-change-component-id=Attempt to change existing component id.
AbstractComponent.null-container={0} container is null.
AbstractComponent.attempt-to-change-page=Attempt to change existing containing page.
AbstractComponent.attempt-to-change-spec=Attempt to change existing component specification.

AbstractPage.attempt-to-change-locale=Attempt to change existing locale for a page.
AbstractPage.attempt-to-change-name=Attempt to change existing name for a page.

AbstractMarkupWriter.missing-constructor-parameters=Incomplete parameters to AbstractMarkupWriter constructor.
AbstractMarkupWriter.tag-not-open=A tag must be open before attributes may be set in an IMarkupWriter.

ApplicationServlet.could-not-locate-engine=Could not locate an engine to service this request.
ApplicationServlet.could-not-parse-spec=Unable to parse application specification {0}.
ApplicationServlet.get-app-path-not-overriden=Application servlet {0} does not provide an implementation of method getApplicationServletPath().
ApplicationServlet.no-application-specification=Running application without an application specification.
ApplicationServlet.engine-stateful-without-session=Engine {0} is stateful even though there is no HttpSession.  Discarding the engine. 

BaseComponent.multiple-component-references=Template for component {0} contains multiple references to embedded component {1}.
BaseComponent.unbalanced-close-tags=More closing tags the open tags in template.
BaseComponent.unbalance-open-tags=Not all tags closed in template.
BaseComponent.missing-component-spec-single=Template for component {0} does not reference embedded component:
BaseComponent.missing-component-spec-multi=Template for component {0} does not reference embedded components:
BaseComponent.and=and
BaseComponent.dupe-template-expression=An expression for parameter ''{0}'' of component {1} in the template for {2} conflicts with an existing binding in the specification.
BaseComponent.template-expression-for-informal-parameter=The template for {2} contains an expression for parameter ''{0}'' of component {1}, but {1} does not allow informal parameters.
BaseComponent.template-expression-for-reserved-parameter=The template for {2} contains an expression for parameter ''{0}'' of component {1}, but ''{0}'' is a reserved parameter name.
BaseComponent.dupe-string=A localized string reference for parameter ''{0}'' of component {1} in the template for {2} conflicts with an existing binding in the specification.

BaseComponentTemplateLoader.dupe-component-id=Component {0} (at {1}) conflicts with a prior declaration in the specification (at {2}).
BaseComponentTemplateLoader.bodyless-component=This component may not have a body.

RedirectServlet.redirect-path=Redirecting to servlet at path {0}.
RedirectServlet.redirecting=Redirecting servlet context URL to {0}.

ResponseOutputStream.content-type-not-set=Content type of response never set.

StaleLinkException.action-mismatch=Action id {0} matched component {1}, not {2}.
StaleLinkException.component-mismatch=Action id {0} does not match component {1}.

Tapestry.even-sized-array=An even-sized array of keys and values is required.
Tapestry.missing-method-invocation=Class {0} overrides method ''{1}'' but does not invoke the super-class implementation.

# org.apache.tapestry.asset

AssetExternalizer.externalize-failure=Could not externalize asset {0} to {1}.
AssetService.exception-report-title=Failure to export asset {0}.
AssetService.checksum-failure=Checksum {0} does not match that of resource {1}.
AssetService.checksum-compute-failure=Failed to compute checksum for resource {1}.

ExternalAsset.resource-missing=Could not access external asset {0}.

# org.apache.tapestry.bean

BeanProvider.bean-not-defined=Component {0} does not define a bean name {1}.
BeanProvider.instantiation-error=Unable to instantiate bean ''{0}'' (for component {1}) as class {2}: {3}
AbstractBeanInitializer.unable-to-set-property=Unable to set property ''{0}'' of {1} to {2}.

# org.apache.tapestry.binding

AbstractBinding.wrong-type=Parameter {0} ({1}) is an instance of {2}, which does not inherit from {3}.
AbstractBinding.wrong-interface=Parameter {0} ({1}) is an instance of {2}, which does not implement interface {3}.
AbstractBinding.read-only-binding=Binding value may not be updated.

ExpressionBinding.unable-to-resolve-expression=Unable to resolve expression ''{0}'' for {1}.
ExpressionBinding.unable-to-update-expression=Unable to update expression ''{0}'' for {1} to {2}.

ListenerBinding.invalid-access=Inappropriate invocation of {0} on instance of ListenerBinding.
ListenerBinding.bsf-exception=Unable to execute listener script "{0}": {1}
ListenerBinding.unable-to-undeclare-bean=Unable to undeclare bean ''{0}'' after executing "{0}".

# org.apache.tapestry.callback

DirectCallback.wrong-type=Component {0} does not implement the IDirect interface.

# org.apache.tapestry.component

Insert.unable-to-format=Unable to format object {0}.
Any.element-not-defined=The Any component is not used in a template and the 'element' property is not bound.

# org.apache.tapestry.param

ParameterManager.no-accessor=Component {0} does not have accessor methods for property {1}.
ParameterManager.property-not-read-write=Property {1} of component {0} is not read-write.
ParameterManager.java-type-not-specified=No Java type was specified for parameter {0} of component {1}.
ParameterManager.type-mismatch=Parameter {0} of component {1} is declared as {2}, but the property is {3}.
ParameterManager.static-initialization-failure=Unable to set property {0} of component {1} from {2}.
ParameterManager.incompatible-direction-and-binding=Parameter {0} of component {1} is direction {2} which is incompatible with {3}.

# org.apache.tapestry.engine

AbstractEngine.unable-to-process-client-request=Unable to process client request.
AbstractEngine.unable-to-present-exception-page=Unable to present exception page.
AbstractEngine.unknown-specification=<Unknown specification>
AbstractEngine.unknown-service=Engine does not implement a service named ''{0}''.
AbstractEngine.unable-to-begin-request=Tapestry unable to begin processing request.
AbstractEngine.unable-to-cleanup-page=Unable to cleanup page {0}.
AbstractEngine.unable-to-instantiate-visit=Unable to instantiate visit object from class {0}.
AbstractEngine.unable-to-instantiate-global=Unable to instantiate global object from class {0}.
AbstractEngine.unable-to-redirect=Unable to redirect to {0}.
AbstractEngine.service-name-mismatch=Class {1} is registered as service {0} but provides service {2} instead.
AbstractEngine.unable-to-instantiate-service=Unable to instantiate class {1} as service {0}.
AbstractEngine.unable-to-find-dispatcher=Unable to find a request dispatcher for local resource ''{0}''.
AbstractEngine.unable-to-forward=Unable to forward to local resource ''{0}''.
AbstractEngine.unable-to-create-cleanup-context=Unable to create an instance of RequestContext to process end-of-session page cleanups.
AbstractEngine.exception-during-cleanup=Exception during post-request cleanup.
AbstractEngine.exception-during-cache-clear=Exception while clearing caches after request.
AbstractEngine.validate-cycle=A validate cycle during page activation was detected: {0}.

ActionService.context-parameters=Service action requires either three or four service contect parameters.
ActionService.action-component-wrong-type=Component {0} does not implement the IAction interface.

DefaultScriptSource.unable-to-parse-script=Unable to parse script {0}.

DefaultSpecificationSource.no-match-for-alias=Could not find a component matching alias {0}.
DefaultSpecificationSource.unable-to-locate-specification=Could not locate resource {0} in the classpath.
DefaultSpecificationSource.unable-to-open-specification=Could not open specification {0}.
DefaultSpecificationSource.unable-to-parse-specification=Could not parse specification {0}.

DefaultTemplateSource.no-template-for-component=Could not find template for component {0} in locale {1}.
DefaultTemplateSource.no-template-for-page=Could not find template for page {0} in locale {1}.
DefaultTemplateSource.unable-to-parse-template=Could not parse template {0}.
DefaultTemplateSource.unable-to-read-template=Could not read template {0}.

DirectService.context-parameters=Service direct requires either three or four service context parameters.
DirectService.component-wrong-type=Component {0} does not implement the IDirect interface.
DirectService.stale-session-exception=Component {0} is stateful, but the HttpSession has expired (or has not yet been created).

EngineServiceLink.unknown-parameter-name=Unknown parameter name ''{0}''.

Namespace.no-such-page=Page ''{0}'' not found in {1}.
Namespace.no-such-component-type=Component ''{0}'' not found in {1}.
Namespace.application-namespace=application namespace
Namespace.framework-namespace=framework namespace
Namespace.nested-namespace=namespace ''{0}''
Namespace.library-id-not-found=Library ''{0}'' not found in {1}.

RequestCycle.invalid-null-name=Parameter name may not be null in RequestCycle.getPage(String).
RequestCycle.form-rewind-failure=Failure to rewind form {0}.

ResourceResolver.unable-to-load-class=Could not load class {0} from {1}: {2}

TagSupportService.service-only=The tagsupport service does not support tag generation.
TagSupportService.null-attribute=Request attribute ''{0}'' is required by the tagsupport service, but the value is null.
TagSupportService.attribute-not-string=Request attribute ''{0}'' is an instance of {1}, not a string.
TagSupportService.attribute-not-array=Request attribute ''{0}'' is an instance of {0}, not an object array.
BaseEngine.recorder-has-uncommited-changes=Could not forget changes to page {0} because the page's recorder has uncommitted changes.
BaseEngine.duplicate-page-recorder=Could not create a second page recorder for page {0}.

ExternalService.page-not-compatible=Page {0} does not implement the IExternalPage interface.

# org.apache.tapestry.enhance

ComponentClassFactory.bad-property-type=Unable to convert ''{0}'' to a property type.
ComponentClassFactory.property-type-mismatch=Unable to enhance class {0} because it contains property ''{1}'' of type {2}, not the expected type {3}.
ComponentClassFactory.non-abstract-read=Unable to enhance class {0} because it implements a non-abstract read method for property ''{1}''.
ComponentClassFactory.non-abstract-write=Unable to enhance class {0} because it implements a non-abstract write method for property ''{1}''.
ComponentClassFactory.unable-to-introspect-class=Unable to introspect properties of class {0}.
ComponentClassFactory.auto-must-be-required=Parameter ''{0}'' must be required or have a default value as it uses direction ''auto''.
ComponentClassFactory.code-generation-error=A code generation error occured while enhancing class {0}.


EnhancedClassLoader.unable-to-define-class=Unable to define class {0}: {1}

MethodFabricator.no-more-arguments=No more arguments may be added once any local variables are added.

DefaultComponentClassEnhancer.no-impl-for-abstract-method=Method ''{0}'' (declared in {1}) has no implementation in class {2} (or enhanced subclass {3}).


# org.apache.tapestry.event

ObservedChangeEvent.null-property-name=Must specify a non-null propertyName when creating ObservedChangeEvent for {0}.
ObservedChangeEvent.must-be-serializable=Must specify a serializable object as the new value of property when creating an ObservedChangeEvent.

# org.apache.tapestry.form

AbstractFormComponent.must-be-contained-by-form=This component must be contained within a Form.

Form.forms-may-not-nest=Forms may not be nested.
Form.needs-body-for-event-handlers=A Form with event handlers must be enclosed by a Body component.
Form.too-many-ids=Rewind of form {0} expected only {1} form elements, but an additional id was requested by component {2}.
Form.too-few-ids=Rewind of form {0} expected {1} more form elements, starting with id ''{2}''.
Form.id-mismatch=Rewind of form {0} expected allocated id #{1} to be ''{2}'', but was ''{3}'' (requested by component {4}).
Form.encoding-type-contention=Components within Form {0} have requested conflicting encoding types ''{1}'' and ''{2}''.

ListEdit.unable-to-convert-value=Unable to convert {0} to an external string in ListEdit component.
ListEdit.unable-to-convert-string=Unable to convert {0} back into an object in ListEdit component.

FormConditional.unable-to-convert-value=Unable to convert {0} to an external string in FormConditional component.
FormConditional.unable-to-convert-string=Unable to convert {0} back into an object in FormConditional component.

Option.must-be-contained-by-select=Option component must be contained within a Select.

Radio.must-be-contained-by-group=Radio component must be contained within a RadioGroup.

RadioGroup.may-not-nest=RadioGroup components may not be nested.

Select.may-not-nest=Select components may not be nested.

LinkSubmit.may-not-nest=LinkSubmit components may not be nested.

# org.apache.tapestry.html

Body.may-not-nest=Body components may not be nested.
Body.include-classpath-script-only=Unable to include external script {0}: only classpath resources are supported.

InsertText.conversion-error=Error converting text to lines (for InsertText component).

Rollover.must-be-contained-by-body=Rollover components must be contained within a Body component.
Rollover.must-be-contained-by-link=Rollover components must be contained within an ILinkComponent.

Script.must-be-contained-by-body=Script components must be contained within a Body component.

# org.apache.tapestry.contrib.inspector

ShowEngine.could-not-serialize=Could not serialize the application engine.

InspectorButton.must-be-contained-by-body=InspectorButton component must be contained within a Body component.

# org.apache.tapestry.jsp

URLRetriever.unable-to-find-dispatcher=Unable to find request dispatcher for servlet at ''{0}''.
URLRetriever.io-exception=I/O exception messaging servlet {0}: {1}
URLRetriever.servlet-exception=Servlet exception messaging servlet {0}: {1}

AbstractLinkTag.io-exception=I/O exception writing output: {1}

AbstractTapestryTag.unable-to-evaluate-expression=Unable to evaluate OGNL expression ''{0}'': {1}

# org.apache.tapestry.link

GestureLink.missing-service=No engine service name {0}.

AbstractLinkComponent.no-nesting=ILinkComponents may not be nested.
AbstractLinkComponent.events-need-body=A link component with multiple functions for a single event type must be contained within a Body.

# org.apache.tapestry.listener

ListenerMap.object-missing-method=Object {0} does not implement a listener method named ''{1}''.
ListenerMap.unable-to-invoke-method=Unable to invoke method {0} on {1}: {2}

# org.apache.tapestry.multipart

UploadPart.unable-to-open-content-file=Unable to open uploaded file ''{0}''.
UploadPart.write-failure=Error writing uploaded content to {0}: {1}

DefaultMultipartDecoder.unable-to-decode=Unable to decode request: {0}
DefaultMultipartDecoder.encoding-not-set=No encoding has been set for this request.

# org.apache.tapestry.pageload

PageLoader.formal-parameters-only=Component {0} allows only formal parameters, binding {1} is not allowed.
PageLoader.required-parameter-not-bound=Required parameter {0} of component {1} is not bound.
PageLoader.unable-to-load-specification=Unable to load component specification.
PageLoader.class-not-component=Class {0} does not implement the IComponent interface.
PageLoader.unable-to-instantiate=Unable to instantiate an instance of class {0}.
PageLoader.page-not-allowed=Component {0} may not implement the IPage interface.
PageLoader.class-not-page=Class {0} does not implement the IPage interface.
PageLoader.unable-to-instantiate-component=Unable to instantiate component {0}: {1}
PageLoader.missing-asset=Unable to locate asset ''{0}'' of component {1} as {2}.
PageLoader.unable-to-initialize-property=Unable to initialize property {0} of {1}: {2}
PageLoader.inherit-informal-invalid-component-formal-only=Component {0} allows only formal parameters, but has inherit-informal-parameters set.
PageLoader.inherit-informal-invalid-container-formal-only=Component {0} allows only formal parameters, but it contains component {1} that has inherit-informal-parameters set.

EstablishDefaultParameterValuesVisitor.parameter-must-have-no-default-value=Parameter {1} of component {0} is required and must not have a default value.

# org.apache.tapestry.parse

TextToken.error-trimming={0}: Failure trimming leading and trailing whitespace.

SpecificationParser.fail-convert-boolean=Could not convert ''{0}'' to boolean.
SpecificationParser.fail-convert-int=Could not convert ''{0}'' to integer.
SpecificationParser.fail-convert-double=Could not convert ''{0}'' to double.
SpecificationParser.fail-convert-long=Could not convert ''{0}'' to long.
SpecificationParser.unexpected-component-public-id=Unexpected component specification with public identifier {0}.
SpecificationParser.unexpected-application-public-id=Unexpected application specification with public identifier {0}.
SpecificationParser.both-type-and-copy-of=Contained component {0} contains both type and copy-of attributes.
SpecificationParser.missing-type-or-copy-of=Contained component {0} does not specify attribute type or copy-of.
SpecificationParser.unable-to-copy=Unable to copy component {0}, which does not exist.
SpecificationParser.invalid-parameter-name=Parameter ''{0}'' is an invalid name.  Parameter names should be valid Java identifiers.
SpecificationParser.invalid-page-name=''{0}'' is not a valid page name.  Page names must start with a letter and consist only of letters, numbers, period, dash and underscore.
SpecificationParser.invalid-component-type=''{0}'' is not a valid component type.  Types must be valid Java identifiers.
SpecificationParser.invalid-property-name=''{0}'' is not a valid JavaBean property name.  Property names must be valid Java identifiers.
SpecificationParser.invalid-bean-name=''{0}'' is not a valid helper bean name.  Helper bean names must be valid Java identifiers.
SpecificationParser.unknown-static-value-type=Unknown <static-value> type: ''{0}''.
SpecificationParser.invalid-component-id=''{0}'' is not a valid component id.  Component ids must be valid Java identifiers.
SpecificationParser.invalid-asset-name=''{0}'' is not a valid asset name.  Asset names must be valid Java identifiers.
SpecificationParser.invalid-service-name=''{0}'' is not a valid service name.  Service names must start with a letter, and contain only letters, numbers, dash, underscore and period.
SpecificationParser.invalid-library-id=''{0}'' is not a valid library id.  Library ids must be valid Java identifiers.
SpecificationParser.invalid-extension-name=''{0}'' is not a valid extension name.  Extension names must start with a letter, and contain only letters, numbers, dash and underscore.
SpecificationParser.invalid-component-type=''{0}'' is not a valid component type.
SpecificationParser.framework-library-id-is-reserved=The library id ''{0}'' is reserved and may not be used.
SpecificationParser.no-attribute-and-body=It is not valid to specify a value for attribute ''{0}'' of <{1}> and provide a value in the body of the element.
SpecificationParser.required-extended-attribute=Element <{0}> does not specify a value for attribute ''{1}'', or contain a body value.
SpecificationParser.error-reading-resource=Unable to read {0}: {1}

ValidatePublicIdRule.no-public-id=Document {0} does not define a public id.

TemplateParser.comment-not-ended=Comment on line {0} did not end.
TemplateParser.unclosed-tag=Tag <{0}> on line {1} is never closed.
TemplateParser.unclosed-unknown-tag=Tag on line {1} is never closed.
TemplateParser.missing-attribute-value=Tag <{0}> on line {1} is missing a value for attribute {2}.
TemplateParser.content-block-may-not-be-ignored=Tag <{0}> on line {1} is the template content, and may not be in an ignored block.
TemplateParser.content-block-may-not-be-empty=Tag <{0}> on line {1} is the template content, and may not be empty.
TemplateParser.unknown-component-id=Tag <{0}> on line {1} references unknown component id ''{2}''.
TemplateParser.component-may-not-be-ignored=Tag <{0}> on line {1} is a dynamic component, and may not appear inside an ignored block.
TemplateParser.nested-ignore=Tag <{0}> on line {1} should be ignored, but is already inside an ignored block (ignored blocks may not be nested).
TemplateParser.incomplete-close-tag=Incomplete close tag on line {0}.
TemplateParser.improperly-nested-close-tag=Closing tag </{0}> on line {1} is improperly nested with tag <{2}> on line {3}.
TemplateParser.unmatched-close-tag=Closing tag </{0}> on line {1} does not have a matching open tag.
TemplateParser.component-id-invalid=Tag <{0}> on line {1} contains an invalid jwcid ''{2}''.
TemplateParser.duplicate-tag-attribute=Tag <{0}> on line {1} contains more than one ''{2}'' attribute.


TextToken.range-error={0}: out of range for template length {1}.
TemplateToken.may-not-render={0} tokens may not render.

# org.apache.tapestry.record

PageRecorder.change-after-lock=Page recorder for page {0} is locked after a commit(), but received a change to property {1} of component {2}.
PageRecorder.unable-to-persist=Unable to persist property {0} of component {1} as {2}.
PageRecorder.null-property-name=A change event for component {0} failed to specify the name of the updated property.
PageRecorder.unable-to-rollback=Unable to set property {0} of component {1} to {2}: {3}

# org.apache.tapestry.resource

ContextResourceLocation.unable-to-reference-context-path=Unable to reference context path ''{0}''.


# org.apache.tapestry.script

ScriptParser.unknown-public-id=Script uses unknown public indentifier {0}.
ScriptParser.invalid-key=''{0}'' is not a valid key.  Symbol keys must be valid Java identifiers.
ScriptParser.unable-to-resolve-class=''{0}'' is not a resolvable class name.

InputSymbolToken.required=Script symbol ''{0}'' is required, but not specified.
InputSymbolToken.wrong-type=Script symbol ''{0}'' is {1}, not {2}.

# org.apache.tapestry.spec

LibrarySpecification.duplicate-child-namespace-id=A child namespace with id ''{0}'' already exists.
LibrarySpecification.duplicate-page-name=A page named ''{0}'' already exists in this namespace.
LibrarySpecification.duplicate-component-alias=A component alias ''{0}'' already exists in this namespace.
LibrarySpecification.duplicate-service-name=A service named ''{0}'' already exists in this namespace.
LibrarySpecification.duplicate-extension-name=An extension named ''{0}'' already exists in this namespace.
LibrarySpecification.no-such-extension=No extension named ''{0}'' exists in this namespace.
LibrarySpecification.extension-does-not-implement-interface=Extension ''{0}'' (class {1}) does not implement interface {2}.
LibrarySpecification.extension-not-a-subclass=Extension ''{0}'' (class {1}) does not inherit from class {2}.

ComponentSpecification.duplicate-asset={0}: already contains asset ''{1}''.
ComponentSpecification.duplicate-component={0}: already contains component ''{1}''.
ComponentSpecification.duplicate-parameter={0}: already contains parameter ''{1}''.
ComponentSpecification.duplicate-bean={0}: already contains bean definition for ''{1}''.
ComponentSpecification.duplicate-property-specification={0}: already contains property specification for property ''{1}''.

ExtensionSpecification.duplicate-property={0}: already contains property configuration for ''{1}''.
ExtensionSpecification.bad-class=Unable to locate class {0}.

Direction.IN=in
Direction.FORM=form
Direction.CUSTOM=custom
Direction.AUTO=auto

# org.apache.tapestry.util

AdaptorRegistry.duplicate-registration=A registration for class {0} already exists.
AdaptorRegistry.adaptor-not-found=Could not find an adaptor for class {0}.

JanitorThread.interval-locked=The interval for this janitor thread is locked.
JanitorThread.illegal-interval=The interval for a janitor thread may not be less than 1 millisecond.

MultiKey.null-keys=Must pass in non-empty array of keys.
MultiKey.first-element-may-not-be-null=First element of keys may not be null.
MultiKey.no-keys=No keys for this MultiKey.

Pool.unable-to-instantiate-instance=Unable to instantiate new instance of class {0}.


# org.apache.tapestry.util.io

DataSqueezer.short-prefix=The adaptor prefix must contain at least one character.
DataSqueezer.null-class=The dataClass may not be null.
DataSqueezer.null-adaptor=The adaptor may not be null.
DataSqueezer.prefix-out-of-range=DataSqueezer prefix must be in the range ''!'' to ''z''.
DataSqueezer.adaptor-prefix-taken=An adaptor for prefix ''{0}'' is already registered.

SerializableAdaptor.class-not-found=Class {0} not found.
SerializableAdaptor.unable-to-convert=Cannot convert {0} into a modified Base64 character.
SerializableAdaptor.unable-to-interpret-char=Cannot interpret ''{0}'' as a modified Base64 character.

ComponentAddressAdaptor.no-separator=Invalid ComponentAddress encoding -- separator not present

# org.apache.tapestry.util.prop

PropertyFinder.unable-to-introspect-class=Unable to instrospect properties of class {0}.

OgnlUtils.unable-to-update-expression=Unable to update expression ''{0}'' of {1} to {2}.
OgnlUtils.unable-to-read-expression=Unable to read expression ''{0}'' of {1}.
OgnlUtils.unable-to-parse-expression=Unable to parse expression ''{0}''.

# org.apache.tapestry.util.xml

AbstractDocumentParser.incorrect-document-type=Incorrect document type; expected {0} but received {1}.
AbstractDocumentParser.unable-to-parse=Unable to parse {0}: {1}
AbstractDocumentParser.unable-to-read=Error reading {0}: {1}
AbstractDocumentParser.unable-to-construct-builder=Unable to construct DocumentBuilder: {0}
AbstractDocumentParser.invalid-identifier={0} is not a valid identifier (in element {1}).
AbstractDocumentParser.missing-resource=Resource at {0} does not exist.
AbstractDocumentParser.unknown-public-id=Document {0} has an unexpected public id of ''{1}''.

RuleDrivenParser.no-rule-for-element=No rule is defined for parsing element ''{0}''.
RuleDrivenParser.resource-missing=Unable to find resource {0}.
RuleDrivenParser.unable-to-open-resource=Unable to open resource {0}.
RuleDrivenParser.parse-error=Unable to parse {0}: {1}

# org.apache.tapestry.valid

FieldLabel.no-display-name=Display name not specified and not provided by field {0}.
FieldLabel.must-be-contained-by-form=This component must be contained within a Form.
FieldLabel.no-delegate=No IValidationDelegate is available to ValidField {0}; it is specified as the delegate parameter of Form {1}.

ValidField.no-delegate=No IValidationDelegate is available to ValidField {0}; it is specified as the delegate parameter of Form {1}.
ValidField.must-be-contained-by-body=A ValidField using client-side validation must be enclosed by a Body component.

NumberValidator.unknown-type=Unknown value type {0}.
NumberValidator.no-adaptor-for-field=Unable to provide validation for field {0} (value type {1}).

PatternValidator.pattern-match-error=Unable to match pattern {0} for field {1}.

# org.apache.tapestry.wml

Card.cards-may-not-nest=Cards may not be nested.
Postfield.must-be-contained-by-go=This postfield must be contained within a Go.

# org.apache.tapestry.contrib.components

When.must-be-contained-by-choose=When component must be contained within a Choose.
