################################################################################
##
##  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=El elemento ya figura en la lista
alreadyLoading=Cargador - intento para cargar un objeto de carga
alreadyReady=Cargador - intento para cargar un objeto ya cargado
alreadyUnloaded=Cargador - intento para descargar un objeto ya descargado
alreadyUnloading=Cargador - intento para descargar un objeto de descarga
audioIOLoadError=Error de E/S al cargar el archivo de audio
audioSecurityLoadError=Error de seguridad al cargar el archivo de audio
beaconFailureError=Error de la baliza al hacer ping en la URL de su HTTP
compositeTraitNotFound=No se ha encontrado una característica compuesta para la característica dada
contentIOLoadError=Error de E/S al cargar la imagen o el SWF
contentSecurityLoadError=Error de seguridad al cargar la imagen o el SWF
drmAuthenticationFailed=AuthenticationFailed	  SWF debería solicitar al usuario que introduzca de nuevo sus credenciales y que vuelva a intentar adquirir la licencia
drmContentNotYetValid=ContentNotYetValid	  La licencia adquirida no es válida todavía
drmMetadataNotSet=Los metadatos no se han establecido en DRMServices
drmNeedsAuthentication=NeedAuthentication	  La solución consiste en autentificar al usuario y, a continuación, adquirir de nuevo la licencia
f4mParseNoId=Falta la etiqueta Id. del manifiesto
fileStructureInvalid=El archivo posee una estructura no válida
functionMustBeOverridden=Esta función debe anularse
httpIOLoadError=Error de E/S al cargar la URL en HTTP
httpSecurityLoadError=Error de seguridad al cargar la URL en HTTP
iLoaderCantHandleResource=ILoader no puede gestionar el IMediaResource dado
illegalConstructorInvocation=Utilice el método estático de getInstance para obtener una instancia de clase.
invalidLayoutRendererConstructor=No se puede crear la implementación de ILayoutRenderer
invalidParam=Parám. no válido transferido al método
invalidPluginImplementation=Error al cargar el módulo adicional debido a una implementación inadecuada de IPluginInfo o a la ausencia de la misma
invalidPluginVersion=Error al cargar el módulo adicional debido a una incompatibilidad de la versión
invalidSwfASVersion=No se admite el contenido pre-AS3 (AVM1) de carga
invalidURLProtocol=Protocolo de URL no válido
loadedContextNonNull=LoadedContext es no NULL para LoadState.UNINITIALIZED
loadedContextNull=LoadedContext es NULL para LoadState.READY
missingStringResource=No hay ninguna cadena para el recurso {0}
mustSetILoaderForLoad=Debe establecer ILoader en un ILoadable antes de llamar a ILoader.load
mustSetILoaderForUnload=Debe establecer ILoader en un ILoadable antes de llamar a ILoader.unload
namespaceMustBeUnique=La cadena del espacio de nombres debe ser única
namespaceMustEqualGroupNS=La cadena del espacio de nombres debe ser igual que el espacio de nombres del grupo
namespaceMustNotBeEmpty=La cadena del espacio de nombres no debe estar vacía
netConnectionArgumentError=Se ha recibido un error de argumento al intentar establecer una NetConnection
netConnectionAsyncError=Se ha recibido un error asíncrono al intentar establecer una NetConnection
netConnectionFailed=Error en todos los intentos de NetConnection
netConnectionIOError=Se ha recibido un error de E/S al intentar establecer una NetConnection
netConnectionInvalidApp=Intento de conexión a una aplicación no válida
netConnectionRejected=El servidor FMS ha rechazado el intento de conexión
netConnectionSecurityError=Se ha recibido un error de seguridad al intentar establecer una NetConnection
netConnectionTimeout=Se ha agotado el tiempo de espera para establecer una buena NetConnection
noSupportedTrackFound=No se encontró ninguna pista compatible
nullNetStream=NetStream en la característica es NULL
nullParam=Parám. NULL transferido al método
nullScriptPath=La operación requiere que se establezca una ruta de script válida
playFailedNetConnectionFailure=Se ha producido un error en la reproducción debido a un error de NetConnection
playFailedNoSoundChannels=Se ha producido un error en la reproducción debido a que los canales de sonido no se encuentran disponibles
playbackFailed=Error en la reproducción
streamNotFound=No se encontró la secuencia
streamSwitchInvalidIndex=Conmutación dinámica de secuencias - Índice solicitado no válido
streamSwitchStreamNotFound=Conmutación dinámica de secuencias - no se encontró la secuencia
streamSwitchStreamNotInManualMode=Conmutación dinámica de secuencias - la secuencia no se encuentra en modo manual
swfIOLoadError=Error de E/S al cargar el SWF
swfSecurityError=Error de seguridad al cargar el SWF
switchingDownBandwidthInsufficient=El ancho de banda medio no es suficiente para la velocidad de bits de la secuencia actual
switchingDownBufferInsufficient=La longitud del búfer no es suficiente
switchingDownFrameDropUnacceptable=Los fotogramas por segundo medios obtenidos no son válidos para la secuencia actual
switchingDownOther=Conmutación abajo
switchingManual=Conmutación manual
switchingUpBandwidthSufficient=Conmutación arriba dado que el ancho de banda medio es suficiente
switchingUpOther=Conmutación arriba
traitInstanceAlreadyAdded=Ya se ha añadido una instancia de esta clase de característica a este MediaElement
traitNotSupported=MediaPlayer - método llamado en un medio NULL o en un medio que no es *trait*
traitResolverAlreadyAdded=Ya se ha añadido un solucionador de características para el tipo de característica especificado a este MediaElement
traitTypeMismatch=La instancia de la característica especificada es de un tipo inesperado
unsupportedTraitType=No se admite el tipo de la característica especificada
