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

# DataGridAccImpl
rowMofN = Rad %1 av %2
sortedAscending = Sortert
sortedDescending = Sortert synkende
sortLevel = Nivå %1

# DataGroup
cannotDisplayVisualElement=DataGroup kan ikke vise visuelle elementer direkte, med mindre elementene er visningsobjekter og implementerer IVisualElement.
unableToCreateRenderer=Kunne ikke opprette en elementgjengiver for {0}.
addChildDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på addChild() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
addChildAtDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på addChildAt() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
removeChildDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på removeChild() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
removeChildAtDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på removeChildAt() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
setChildIndexDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på setChildIndex() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
swapChildrenDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på swapChildren() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
swapChildrenAtDataGroupError=DataGroup håndterer sine egne visningsobjekter, og du bør ikke kalle på swapChildrenAt() direkte. Du kan legge til, fjerne eller bytte om på elementer ved å endre dataProvider.
	
# Application
viewSource=Vis kilde

# VideoPlayer
videoPlayerVideoDisplayAccName=Videospiller
videoPlayerPlayButtonAccName=Spill av, Pause
videoPlayerScrubBarAccName=Skrubb
videoPlayerMuteButtonAccName=Ikke dempet, Dempet
videoPlayerVolumeBarAccName=Volum
videoPlayerFullScreenButtonAccName=Fullskjerm

# SkinnableComponent
skinNotFound=Finner ikke skall for {0}.
requiredSkinPartNotFound=Finner ikke påkrevd skalldel {0}.

# SkinnableComponent, Group
addChildError=addChild() er ikke tilgjengelig i denne klassen. Bruk i stedet addElement(), eller endre skallet hvis du har et.
addChildAtError=addChildAt() er ikke tilgjengelig i denne klassen. Bruk i stedet addElementAt(), eller endre skallet hvis du har et.
removeChildError=removeChild() er ikke tilgjengelig i denne klassen. Bruk i stedet removeElement(), eller endre skallet hvis du har et.
removeChildAtError=removeChildAt() er ikke tilgjengelig i denne klassen. Bruk i stedet removeElementAt(), eller endre skallet hvis du har et.
setChildIndexError=setChildIndex() er ikke tilgjengelig i denne klassen. Bruk i stedet setElementIndex(), eller endre skallet hvis du har et.
swapChildrenError=swapChildren() er ikke tilgjengelig i denne klassen. Bruk i stedet swapElements(), eller endre skallet hvis du har et.
swapChildrenAtError=swapChildrenAt() er ikke tilgjengelig i denne klassen. Bruk i stedet swapElementsAt(), eller endre skallet hvis du har et.

# HGroup, VGroup
layoutReadOnly=Du kan ikke endre oppsettet for denne klassen.  Den er skrivebeskyttet.

# Scroller
elementNotFoundInScroller={0} finnes ikke i denne Scroller.
operationNotSupported=Denne operasjonen støttes ikke.
operationSupportedForOneAxisOnly=Denne operasjonen støttes kun enten ved loddrett eller vannrett rulling, ikke begge deler.
operationRequiresViewportLayout=Denne operasjonen krever at visningsporten har en layout.
operationRequiresSnappingMode=For denne operasjonen må scrollSnappingMode være satt til noe annet enn NONE.  

# Group
cannotAddYourselfAsYourChild=Kan ikke legge til et element som en underordnet av seg selv.
elementNotFoundInGroup={0} finnes ikke i denne gruppen.
mxmlElementNoMultipleParents=MXML-elementet {0} kan bare ha én overordnet.
scaleGridGroupError=ScaleGrid-egenskaper kan ikke angis for denne gruppen, da minst ett underordnet element er et DisplayObject.

# Scroller, Group
indexOutOfRange=Indeks {0} er utenfor rekkevidde.

# DisplayLayer
objectNotFoundInDisplayLayer={0} finnes ikke i denne DisplayLayer.

# Slider
sliderPageUpAccName=Bla opp
sliderPageDownAccName=Bla ned
sliderPageLeftAccName=Bla til venstre
sliderPageRightAccName=Bla til høyre
sliderPositionAccName=Plassering

# Spinner
spinnerLessAccName=Mindre
spinnerMoreAccName=Mer

# ToggleSwitch
toggleSwitchSelectedLabel=ON
toggleSwitchUnselectedLabel=OFF

# StyleableTextField
styleSheetError=Denne metoden eller egenskapen kan ikke brukes på et tekstfelt med et stilark.

# FormItem
formItemRequired=Påkrevd
