################################################################################
##
##  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=Kohde on jo luetteloitu
alreadyLoading=Lataaja - yritetään ladata kohdetta, jota ladataan parhaillaan
alreadyReady=Lataaja - yritetään ladata kohdetta, joka on jo ladattu
alreadyUnloaded=Lataaja - yritetään poistaa latausta, joka on jo poistettu
alreadyUnloading=Lataaja - yritetään poistaa latausta, jota poistetaan parhaillaan
audioIOLoadError=I/O-virhe äänitiedostoa ladattaessa
audioSecurityLoadError=Suojausvirhe äänitiedostoa ladattaessa
beaconFailureError=Jäljitteen HTTP URL -osoitteen lähettäminen tiedustelupakettina ei onnistunut
compositeTraitNotFound=Annetulle ominaisuudelle ei löydetty yhdistelmäominaisuutta
contentIOLoadError=I/O-virhe kuva- tai SWF-tiedostoa ladattaessa
contentSecurityLoadError=Suojausvirhe kuva- tai SWF-tiedostoa ladattaessa
drmAuthenticationFailed=AuthenticationFailed	  SWF-tiedoston tulee pyytää käyttäjää antamaan valtuustiedot ja hakemaan lisenssiä uudelleen
drmContentNotYetValid=ContentNotYetValid	  Saatu lisenssi ei ole vielä voimassa
drmMetadataNotSet=Kohteelle DRMServices ei ole määritetty metadataa
drmNeedsAuthentication=NeedAuthentication	  Käyttäjätunnus on vahvistettava ja lisenssiä on haettava uudelleen
f4mParseNoId=Luettelosta puuttuu id-tunniste
fileStructureInvalid=Tiedoston rakenne on virheellinen
functionMustBeOverridden=Tämä toiminto tulee ohittaa
httpIOLoadError=I/O-virhe URL-osoitteen lataamisessa HTTP:n välityksellä
httpSecurityLoadError=Suojausvirhe URL-osoitteen lataamisessa HTTP:n välityksellä
iLoaderCantHandleResource=ILoader ei voi käsitellä annettua IMediaResource-kohdetta
illegalConstructorInvocation=Luokan esiintymä hankitaan käyttämällä staattista getInstance-menetelmää
invalidLayoutRendererConstructor=ILayoutRenderer-toteutusta ei voi luoda
invalidParam=Menetelmään on välitetty virheellinen parametri
invalidPluginImplementation=Laajennus epäonnistui, koska IPluginInfo-tiedot ovat puutteelliset tai virheelliset
invalidPluginVersion=Laajennuksen lataaminen epäonnistui, koska versiot eivät sovi yhteen
invalidSwfASVersion=Pre-AS3 (AVM1) -sisällön lataamista ei tueta
invalidURLProtocol=Virheellinen URL-protokolla
loadedContextNonNull=LoadedContext on muu kuin null-arvo kohteessa LoadState.EI ALUSTETTU
loadedContextNull=LoadedContext on null kohteessa LoadState.VALMIS
missingStringResource=Ei merkkijonoa resurssille {0}
mustSetILoaderForLoad=ILoader on asetettava ILoadable-tilaan ennen kuin otetaan yhteys kohteeseen ILoader.load
mustSetILoaderForUnload=ILoader on asetettava ILoadable-tilaan ennen kuin otetaan yhteys kohteeseen ILoader.unload
namespaceMustBeUnique=Nimitilan merkkijonon tulee olla yksilöllinen
namespaceMustEqualGroupNS=Nimitilan merkkijonon tulee olla yhtenevä ryhmän nimitilan kanssa
namespaceMustNotBeEmpty=Nimitilan merkkijono ei voi olla tyhjä
netConnectionArgumentError=NetConnection-yhteyden luomisessa tapahtui argumenttivirhe
netConnectionAsyncError=NetConnection-yhteyden luomisessa tapahtui synkronointivirhe
netConnectionFailed=Kaikki NetConnection-yhteyden luomisyritykset epäonnistuivat
netConnectionIOError=NetConnection-yhteyden luomisessa tapahtui IO-virhe
netConnectionInvalidApp=Yhteyttä yritetään muodostaa väärään sovellukseen
netConnectionRejected=FMS-palvelin torjui yhteydenoton
netConnectionSecurityError=NetConnection-yhteyden luomisessa tapahtui verkon suojausvirhe
netConnectionTimeout=Onnistuneen NetConnection-yhteyden luominen päättyi aikakatkaisuun
noSupportedTrackFound=Tuettua uraa ei löytynyt
nullNetStream=Ominaisuuden NetStream on null
nullParam=Menetelmään on välitetty null-parametri
nullScriptPath=Operaation määrittämiseen tarvitaan kelvollinen komentosarjapolku
playFailedNetConnectionFailure=Toisto epäonnistui NetConnection-yhteysvirheen vuoksi
playFailedNoSoundChannels=Toisto epäonnistui, sillä äänikanavat eivät ole käytössä
playbackFailed=Toisto epäonnistui
streamNotFound=Virtausta ei löydy
streamSwitchInvalidIndex=Dynaaminen virtausvalinta - pyydetty indeksi on virheellinen
streamSwitchStreamNotFound=Dynaaminen virtausvalinta - virtausta ei löydy
streamSwitchStreamNotInManualMode=Dynaaminen virtausvalinta - virtaus ei ole manuaalisessa tilassa
swfIOLoadError=I/O-virhe SWF-tiedostoa ladattaessa
swfSecurityError=Suojausvirhe SWF-tiedostoa ladattaessa
switchingDownBandwidthInsufficient=Keskimääräinen kaistanleveys ei riitä nykyisen virtauksen bittinopeudelle
switchingDownBufferInsufficient=Puskurin pituus ei riitä
switchingDownFrameDropUnacceptable=Keskimääräinen ohitettujen kuvien määrä sekuntia kohden ei vastaa nykyisen virtauksen vaatimuksia
switchingDownOther=Alhaisemman arvon valinta
switchingManual=Manuaalinen valinta
switchingUpBandwidthSufficient=Korkeamman arvon valitseminen, kun keskimääräinen kaistanleveys on riittävä
switchingUpOther=Korkeamman arvon valitseminen
traitInstanceAlreadyAdded=Tämän ominaisuusluokan esiintymä on jo lisätty tähän MediaElement-kohteeseen
traitNotSupported=MediaPlayer - menetelmää käytetty null-arvon mediaan tai mediaan, joka ei ole *ominaisuus*
traitResolverAlreadyAdded=Määritellyn ominaisuustyypin ominaisuusratkaisin on jo lisätty tähän MediaElement-kohteeseen
traitTypeMismatch=Määritelty ominaisuuden esiintymä on tyypiltään epätavallinen
unsupportedTraitType=Määriteltyä ominaisuustyyppiä ei tueta
