################################################################################
##
##  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=Array startValue innehåller inte bara siffror: du måste ange en anpassad Interpolator till Animation.
endValContainsNonNums=Array endValue innehåller inte bara siffror: du måste ange en anpassad Interpolator till Animation.

# ArrayInterpolator
arraysNotOfEqualLength=Start- och slutarrayer måste vara lika långa.

# Constant
accDecWithinRange=(acceleration + deceleration) måste vara inom intervallet [0,1].

# AnimateInstance
illegalPropValue=Felaktigt egenskapsvärde: {0}.
propNotPropOrStyle=Egenskap {0} är varken en egenskap eller en stil som hör till objekt {1}: {2}.

# AnimateShaderTransition
cannotOperateOn=AnimateShaderTransition fungerar endast tillsammans med IUIComponent- och GraphicElement-instanser.

# NumberInterpolator
cannotCalculateValue=startValue ({0}) eller endValue ({1}) måste vara tal annars kan inte Interpolator beräkna interpolerade värden.
