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

# Retrieved from 
# var rb:Dictionary = OSMFStrings.resourceDict;
# var keys:Vector.<String> = new Vector.<String>();
# 
# for (var i in rb)
# {
#     keys.push(i);
# }
# 
# keys.sort(function (a:String, b:String):int 
# {
#     return a.localeCompare(b);
# });
# 
# for (var j:int = 0; j < keys.length; j++)
# {
#     trace(keys[j] + "=" + rb[keys[j]]);
# }

alreadyListed=Objektet finns redan i listan
alreadyLoading=Loader: försök att läsa in ett loader-objekt
alreadyReady=Loader: försök att läsa in ett loader-objekt som redan lästs in
alreadyUnloaded=Loader: försök att stänga ett objekt som redan har stängts
alreadyUnloading=Loader: försök att stänga ett objekt som håller på att stängas
audioIOLoadError=I/O-fel när ljudfilen skulle läsas in
audioSecurityLoadError=Säkerhetsfel inträffade när ljudfilen skulle läsas in
beaconFailureError=Beacon kunde inte skicka ping till motsvarande HTTP-adress.
compositeTraitNotFound=Det saknas sammansatt egenskap för egenskapen.
contentIOLoadError=I/O-fel inträffade när avbildningen eller swf-filen skulle läsas in
contentSecurityLoadError=Säkerhetsfel inträffade när avbildningen eller swf-filen skulle läsas in
drmAuthenticationFailed=AuthenticationFailed	 SWF ska uppmana användaren att ange användaruppgifterna på nytt och försöka hämta licensen på nytt
drmContentNotYetValid=ContentNotYetValid	  Den hämtade licensen är ännu inte giltig
drmMetadataNotSet=Metadata har inte ställts in för DRMServices
drmNeedsAuthentication=NeedAuthentication	  Lösningen är att autentisera användaren och därefter hämta licensen
f4mParseNoId=Id-taggen saknas i manifestet
fileStructureInvalid=Filens struktur är ogiltig
functionMustBeOverridden=Den här funktionen måste åsidosättas
httpIOLoadError=I/O-fel när adressen skulle läsas in via HTTP
httpSecurityLoadError=Säkerhetsfel inträffade när adressen skulle läsas in via HTTP
iLoaderCantHandleResource=ILoader kan inte hantera angiven IMediaResource
illegalConstructorInvocation=Hämta en klassinstans vi den statiska getInstance-metoden.
invalidLayoutRendererConstructor=Det går inte att konstruera ILayoutRenderer-implementeringen
invalidParam=Felaktig parameter överfördes till metoden
invalidPluginImplementation=Det gick inte att läsa in plugin-programmet på grund av att implementeringen av IPluginInfo är ogiltig eller saknas
invalidPluginVersion=Det gick inte att läsa in plugin-programmet på grund av versionskonflikt
invalidSwfASVersion=Det finns inget stöd för att läsa in innehåll med äldre version än AS3 (AVM1)
invalidURLProtocol=Ogiltigt URL-protokoll
loadedContextNonNull=LoadedContext är inte null för LoadState.UNINITIALIZED
loadedContextNull=LoadedContext är null för LoadState.READY
missingStringResource=Sträng saknas för resurs {0}
mustSetILoaderForLoad=ILoader måste anges för via ILoadable innan ILoader.load kan anropas
mustSetILoaderForUnload=ILoader måste anges via ILoadable innan ILoader.unload anropas
namespaceMustBeUnique=Namnområdessträngen måste vara unik
namespaceMustEqualGroupNS=Namnområdesområdet måste motsvara gruppnamnområdet
namespaceMustNotBeEmpty=Namnområdessträngen måste anges
netConnectionArgumentError=Argumentfel uppstod när NetConnection skulle upprättas
netConnectionAsyncError=Async-fel uppstod när NetConnection skulle upprättas
netConnectionFailed=Alla NetConnection-försök misslyckades
netConnectionIOError=Async-fel uppstod när NetConnection skulle upprättas
netConnectionInvalidApp=Försöker ansluta till ett ogiltigt program
netConnectionRejected=FMS-servern nekade anslutningsförsöket
netConnectionSecurityError=Nätsäkerhetsfel uppstod när NetConnection skulle upprättas
netConnectionTimeout=Timeout uppstod vid försök att upprätta en stabil NetConnection
noSupportedTrackFound=Inget spår som stöds upptäcktes
nullNetStream=NetStream för egenskap är null
nullParam=Null-parameter överfördes till metoden
nullScriptPath=Åtgärden kräver att en giltig skriptsökväg har angetts
playFailedNetConnectionFailure=Uppspelning misslyckades på grund av NetConnection-fel
playFailedNoSoundChannels=Uppspelning misslyckades på grund av att det saknas ljudkanaler
playbackFailed=Uppspelning misslyckades
streamNotFound=Strömmen hittades inte
streamSwitchInvalidIndex=Dynamisk strömväxling: felaktigt index har begärts
streamSwitchStreamNotFound=Dynamisk strömväxling: strömmen hittades inte
streamSwitchStreamNotInManualMode=Dynamisk strömväxling: strömmen är inte i manuellt läge
swfIOLoadError=I/O-fel när swf-filen skulle läsas in
swfSecurityError=Säkerhetsfel inträffade när SWF-filen skulle läsas in
switchingDownBandwidthInsufficient=Den genomsnittliga bandbredden är lägre än strömmens bithastighet
switchingDownBufferInsufficient=Bufferten är inte tillräckligt stor
switchingDownFrameDropUnacceptable=Det genomsnittliga antalet bildrutor som utelämnats är oacceptabelt för den aktuella strömmen
switchingDownOther=Nedväxling
switchingManual=Manuell växling
switchingUpBandwidthSufficient=Uppväxling sker eftersom den genomsnittliga bandbredden är tillräcklig
switchingUpOther=Uppväxling
traitInstanceAlreadyAdded=En instans av den här egenskapsklassen har redan lagts till i detta MediaElement.
traitNotSupported=MediaPlayer: metod anropades för null-medium eller för medier som saknar egenskap
traitResolverAlreadyAdded=Egenskapsmatchning för den angivna egenskapstypen har redan lagts till i detta MediaElement
traitTypeMismatch=Den angivna egenskapsinstansen tillhör en oväntad typ
unsupportedTraitType=Den angivna egenskapstypen stöds inte
