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

# Animation
startValContainsNonNums=Le tableau startValue contient des valeurs autres que des nombres : vous devez fournir un interpolateur à Animation.
endValContainsNonNums=Le tableau endValue contient des valeurs autres que des nombres : vous devez fournir un interpolateur personnalisé à Animation.

# ArrayInterpolator
arraysNotOfEqualLength=Les tableaux de début et de fin doivent être de longueur équivalente.

# Constant
accDecWithinRange=(accélération + ralentissement) doit se situer dans la plage [0,1].

# AnimateInstance
illegalPropValue=Valeur de propriété illégale : {0}.
propNotPropOrStyle=La propriété {0} n’est pas une propriété ou un style pour l’objet {1} : {2}.

# AnimateShaderTransition
cannotOperateOn=AnimateShaderTransition fonctionne uniquement dans des instances IUIComponent et GraphicElement.

# NumberInterpolator
cannotCalculateValue=L’interpolateur ne peut pas calculer de valeurs interpolées si les valeurs de startValue ({0}) ou endValue ({1}) ne sont pas des nombres.
