<?xml version="1.0" encoding="UTF-8"?>
<!--
    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$ -->
<catalogue xml:lang="en">
  <message key="locator">[ (See position {loc})| (See {#gatherContextInfo})| (No context info available)]</message>
  <message key="imageNotFound">Image not found.[ URI: {uri}.]{{locator}}</message>
  <message key="imageError">Image not available.[ URI: {uri}.] Reason:[ {reason}][ {e}]{{locator}}</message>
  <message key="imageIOError">I/O error while loading image.[ URI: {uri}.][ Reason: {ioe}]{{locator}}</message>
  <message key="ifoNoIntrinsicSize">The intrinsic dimensions of an instream-foreign-object could not be determined.{{locator}}</message>
  <message key="uriError">Error while handling URI: {uri}. Reason: {e}{{locator}}</message>
  <message key="foreignXMLProcessingError">Some XML content will be ignored. Could not render XML in namespace "{namespaceURI}".[ Reason: {e}]</message>
  <message key="foreignXMLNoHandler">Some XML content will be ignored. No handler defined for XML with namespace "{namespaceURI}".</message>
  <message key="imageWritingError">Error while writing an image to the target file.[ Reason: {e}]</message>
  <message key="cannotDeleteTempFile">Temporary file could not be deleted: {tempFile}</message>
  <message key="catalogResolverNotFound">Catalog resolver not found along the classpath</message>
  <message key="catalogResolverNotCreated">Error creating the catalog resolver: {message}</message>
</catalogue>
