################################################################################
##
##  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=Das Objekt ist bereits in der Liste enthalten.
alreadyLoading=Ladeprogramm - Versuch, ein Objekt zu laden, das gerade geladen wird
alreadyReady=Ladeprogramm - Versuch, ein Objekt zu laden, das bereits geladen ist
alreadyUnloaded=Ladeprogramm - Versuch, ein Objekt zu entladen, das bereits entladen ist
alreadyUnloading=Ladeprogramm - Versuch, ein Objekt zu entladen, das gerade entladen wird
audioIOLoadError=E/A-Fehler beim Laden der Audiodatei
audioSecurityLoadError=Sicherheitsfehler beim Laden der Audiodatei
beaconFailureError=Beacon-Fehler: Pingen der HTTP-URL fehlgeschlagen
compositeTraitNotFound=Zur gegebenen Eigenschaft wurde keine zusammengesetzte Eigenschaft gefunden.
contentIOLoadError=E/A-Fehler beim Laden von Grafik oder SWF-Datei
contentSecurityLoadError=Sicherheitsfehler beim Laden von Grafik oder SWF-Datei
drmAuthenticationFailed=AuthenticationFailed	  SWF-Datei muss Benutzer auffordern, Anmeldedaten erneut einzugeben und Lizenzerwerb zu wiederholen
drmContentNotYetValid=ContentNotYetValid	  Die erworbene Lizenz ist noch nicht gültig
drmMetadataNotSet=Metadaten der DRMServices noch nicht festgelegt
drmNeedsAuthentication=NeedAuthentication	  Behebung durch Authentifizierung des Benutzers und Wiederholen des Lizenzerwerbs
f4mParseNoId=Manifest-ID-Tag fehlt
fileStructureInvalid=Datei hat ungültige Struktur
functionMustBeOverridden=Diese Funktion muss außer Kraft gesetzt werden
httpIOLoadError=E/A-Fehler beim Laden von URL über HTTP
httpSecurityLoadError=Sicherheitsfehler beim Laden von URL über HTTP
iLoaderCantHandleResource=ILoader konnte die vorhandene IMediaResource nicht verarbeiten
illegalConstructorInvocation=Verwenden Sie die statische getInstance-Methode, um eine Klasseninstanz zu erhalten.
invalidLayoutRendererConstructor=ILayoutRenderer-Implementierung konnte nicht erstellt werden
invalidParam=Ungültiger Parameter an Methode übergeben
invalidPluginImplementation=Laden des Plug-ins fehlgeschlagen wegen ungültiger oder fehlender Implementierung von IPluginInfo
invalidPluginVersion=Laden des Plug-ins wegen Versionskonflikt fehlgeschlagen
invalidSwfASVersion=Das Laden von Inhalten aus Versionen vor AS3 (AVM1) wird nicht unterstützt
invalidURLProtocol=Ungültiges URL-Protokoll
loadedContextNonNull=LoadedContext ist ungleich null bei LoadState.UNINITIALIZED
loadedContextNull=LoadedContext ist null bei LoadState.READY
missingStringResource=Kein String für Ressource „{0}“.
mustSetILoaderForLoad=ILoader muss vor dem Aufrufen von ILoader.load auf ILoadable gesetzt werden
mustSetILoaderForUnload=ILoader muss vor dem Aufrufen von ILoader.unload auf ILoadable gesetzt werden
namespaceMustBeUnique=Der Namespace-String muss eindeutig sein
namespaceMustEqualGroupNS=Der Namespace-String muss mit dem Gruppen-Namespace identisch sein
namespaceMustNotBeEmpty=Der Namespace-String darf nicht leer sein
netConnectionArgumentError=Argumentfehler erhalten beim Versuch, eine NetConnection aufzubauen
netConnectionAsyncError=Asynchron-Fehler erhalten beim Versuch, eine NetConnection aufzubauen
netConnectionFailed=Alle NetConnection-Versuche sind fehlgeschlagen
netConnectionIOError=E/A-Fehler erhalten beim Versuch, eine NetConnection aufzubauen
netConnectionInvalidApp=Verbindungsversuch zu ungültiger Anwendung
netConnectionRejected=Verbindungsversuch von FMS-Server zurückgewiesen
netConnectionSecurityError=Netzsicherheitsfehler erhalten beim Versuch, eine NetConnection aufzubauen
netConnectionTimeout=Zeitüberschreitung beim Versuch, eine stabile NetConnection aufzubauen
noSupportedTrackFound=Kein unterstützter Track gefunden
nullNetStream=NetStream der Eigenschaft ist null
nullParam=Null-Parameter an Methode übergeben
nullScriptPath=Die Methode erfordert das Festlegen eines gültigen Skriptpfads
playFailedNetConnectionFailure=Wiedergabe aufgrund eines NetConnection-Fehlers fehlgeschlagen
playFailedNoSoundChannels=Wiedergabe fehlgeschlagen, da keine Soundkanäle verfügbar sind
playbackFailed=Wiedergabe fehlgeschlagen
streamNotFound=Stream nicht gefunden
streamSwitchInvalidIndex=Dynamic Stream Switching - Ungültiger Index angefordert
streamSwitchStreamNotFound=Dynamic Stream Switching - Stream nicht gefunden
streamSwitchStreamNotInManualMode=Dynamic Stream Switching - Stream ist nicht im manuellen Modus
swfIOLoadError=E/A-Fehler beim Laden der SWF-Datei
swfSecurityError=Sicherheitsfehler beim Laden der SWF-Datei
switchingDownBandwidthInsufficient=Die durchschnittliche Bandbreite reicht für die Bitrate des aktuellen Stream nicht aus
switchingDownBufferInsufficient=Unzureichende Pufferlänge
switchingDownFrameDropUnacceptable=Anzahl der im aktuellen Stream durchschnittlich übersprungenen Bilder pro Sekunde ist nicht akzeptabel
switchingDownOther=Verringern
switchingManual=Manuelle Einstellung
switchingUpBandwidthSufficient=Erhöhung, da aktuelle Bandbreite ausreicht
switchingUpOther=Erhöhung
traitInstanceAlreadyAdded=Diesem MediaElement wurde bereits eine Instanz dieser Eigenschaftsklasse hinzugefügt
traitNotSupported=MediaPlayer - Methode für null Medien aufgerufen oder für Medien, die *Eigenschaft* nicht entsprechen
traitResolverAlreadyAdded=Diesem MediaElement wurde bereits ein Eigenschafts-Resolver für den angegebenen Eigenschaftstyp hinzugefügt
traitTypeMismatch=Nicht erwarteter Typ der angegebenen Eigenschaftsinstanz
unsupportedTraitType=Der angegebene Eigenschaftstyp wird nicht unterstützt
