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

attribute.missing = \
{0}:{1}\n\
The attribute "{3}" of the element <{2}> is required

attribute.malformed = \
{0}:{1}\n\
The attribute "{3}" of the element <{2}> is invalid

attribute.not.animatable = \
{0}:{1}\n\
The attribute "{4}" of the element <{3}> is not animatable

type.not.animatable = \
{0}:{1}\n\
The attribute "{4}" of the element <{3}> cannot be animated with the \
<{5}> element

length.negative = \
{0}:{1}\n\
The attribute "{3}" of the element <{2}> cannot be negative

css.length.negative = \
{0}:{1}\n\
The CSS property "{3}" found on the element <{2}> cannot be negative

css.uri.badTarget = \
{0}:{1}\n\
The URI "{3}"\n\
for a CSS property found on the element <{2}> is invalid

xlink.href.circularDependencies = \
{0}:{1}\n\
A circular dependency has been detected on the element <{2}> for the URI:\n\
"{3}"

uri.malformed = \
{0}:{1}\n\
The URI "{3}"\n\
specified on the element <{2}> is invalid

uri.badTarget = \
{0}:{1}\n\
Cannot find the referenced element:\n\
"{3}"\n\
specified on the element <{2}> - may be a problem of ''id''

uri.io = \
{0}:{1}\n\
An I/O error occured while processing the URI:\n\
"{3}"\n\
specified on the element <{2}>

uri.unsecure = \
{0}:{1}\n\
A security exception occured while processing the URI:\n\
"{3}"\n\
specified on the element <{2}>

uri.referenceDocument = \
{0}:{1}\n\
The URI "{3}"\n\
specified on the element <{2}> references an entire document. \n\
This is illegal: The element <{2}> must reference an element\n\
inside a document.

uri.image.invalid = \
{0}:{1}\n\
The URI "{3}"\n\
specified on the element <{2}> is invalid

uri.image.broken = \
{0}:{1}\n\
The URI "{3}"\n\
on element <{2}> can''t be opened because:\n\
{4}

uri.image.error = \
The URI can''t be opened:\n\
{0}

##########################################################################
# Messages for DefaultScriptSecurity
##########################################################################

DefaultScriptSecurity.error.cannot.access.document.url = \
Could not access the current document URL when trying to load script file {0}. Script will not be loaded as it is not possible to verify it comes from the same location as the document.

DefaultScriptSecurity.error.script.from.different.url = \
The document references a script file ({0}) which comes from different location than the document itself. This is not allowed with the current security settings and that script will not be loaded.

EmbededScriptSecurity.error.script.not.embeded = \
The document references a script file ({0}) which is not embeded in the document. This is not allowed with the current security settings and that script will not be loaded.

EmbededExternalResourceSecurity.error.external.resource.not.embeded = \
The document references a resource ({0}) which is not embeded in the document. This is not allowed with the current security settings and that resource cannot be loaded.

NoLoadScriptSecurity.error.no.script.of.type.allowed = \
Scripts of type ({0}) cannot be loaded and executed with the current security settings.

DefaultExternalResourceSecurity.error.cannot.access.document.url = \
Could not access the current document URL when trying to load an external resource {0}. The external resource will not be loaded as it is not possible to verify it comes from the same location as the document.

DefaultExternalResourceSecurity.error.external.resource.from.different.url = \
The document references a external resource ({0}) which comes from different location than the document itself. This is not allowed for security reasons and that resource will not be loaded.

NoLoadExternalResourceSecurity.error.no.external.resource.allowed = \
The security settings do not allow any external resources to be referenced from the document

##########################################################################
# Messages for BaseScriptingEnvironment
##########################################################################

BaseScriptingEnvironment.constant.inline.script.description = \
Inline {1} {0}:{2}

BaseScriptingEnvironment.constant.event.script.description = \
Event attribute {0}:{2} {1}

SVG12ScriptingEnvironment.constant.handler.script.description = \
Handler {0}:{3} {1} {2}
