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

# Symbols

# UITextField

truncationIndicator=...

# Developer RTE Section

# Core

multipleChildSets_ClassAndInstance=Flera uppsättningar visuella underordnade har specificerats för denna komponent (komponentdefinition och komponentinstans).
multipleChildSets_ClassAndSubclass=Flera uppsättningar visuella underordnade har specificerats för denna komponent (baskomponentdefinition och härledd komponentdefinition).

# EmbeddedFontRegistry
fontIncompatible=varning: inkompatibelt inbäddat teckensnitt ({0}) har angetts för {1}. Komponenten kräver att det inbäddade teckensnittet deklareras med embedAsCff={2}.

# Repeater

notExecuting=Repeterare körs inte.

# UIComponent

stateUndefined=Odefinierat tillstånd '{0}'.

# UIComponent / WindowedApplication

viewSource=Visa källa
badFile=Filen finns inte.

# Version (FlexVersion)

versionAlreadySet=Kompatibilitetsversionen har redan angetts.
versionAlreadyRead=Kompatibilitetsversionen har redan lästs.

# UIFTETextField

badParameter=Parametern {0} måste vara inom de godkända intervallet.
nullParameter=Parametern {0} får inte vara null.
badIndex=Det angivna indexet är utanför intervallet.
notImplementedInFTETextField="{0}" är inte implementerat i FTETextField.
unsupportedTypeInFTETextField=FTETextField saknar stöd för inställningstyp till "input".

# Generated code for FlexInit
remoteClassMemoryLeak=varning: Klassen {0} har använts vid ett samtal till net.registerClassAlias() i {2}. Det innebär att {1} kommer att läcka. Du kan korrigera det här genom att definiera {0} i programmet på översta nivån.   
