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

## Developer RTE Section

missingStringResource=Aucune chaîne pour la ressource {0}

# Core errors

invalidFlowElementConstruct=Tentative de construction d'une sous-classe FlowElement non valide
invalidSplitAtPosition=Le paramètre passé à splitAtPosition n'est pas valide.
badMXMLChildrenArgument=L'élément du type {0} passé à mxmlChildren n'est pas correct.
badReplaceChildrenIndex=L'index vers FlowGroupElement.replaceChildren est en dehors de la plage.
invalidChildType=Le type de NewElement ne lui permet pas d'en être le parent.
badRemoveChild=L'enfant à supprimer n'a pas été trouvé.
invalidSplitAtIndex=Le paramètre passé à splitAtIndex n'est pas valide.
badShallowCopyRange=Plage incorrecte dans shallowCopy
badSurrogatePairCopy=Copie de la moitié uniquement d'une paire de substitution dans SpanElement.shallowCopy
invalidReplaceTextPositions=Les positions passées à SpanElement.replaceText ne sont pas valides.
invalidSurrogatePairSplit=Fractionnement non valide d'une paire de substitution
badPropertyValue=La propriété {0} valeur {1} est en dehors de la plage.

# Selection/editing

illegalOperation=Tentative interdite d'exécuter l'opération {0}

# Shared import errors

unexpectedXMLElementInSpan=Elément inattendu {0} dans un bloc
unexpectedNamespace=Espace de noms inattendu {0}
unknownElement=Elément inconnu {0}
unknownAttribute=L'attribut {0} n'est pas autorisé dans l'élément {1}.

# TEXT_FIELD_HTML_FORMAT import errors

malformedTag=Balise {0} mal formée
malformedMarkup=Balisage {0} mal formé

# TEXT_LAYOUT_FORMAT import errors

missingTextFlow=Aucun TextFlow à analyser
expectedExactlyOneTextLayoutFormat=Un et un seul TextLayoutFormat attendu dans {0}	
