# messages.properties
#
# /*******************************************************************************
# * Copyright (c) 2007, 2008 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# *******************************************************************************/

# Comma separated variable
CSC.title=CSV



dc_title_a_exp=Automatisiertes Experiment
dc_source_a_exp=http://wiki.eclipse.org/Running_an_Automated_Experiment (und Referenzen gibt es-in)
dc_desc_a_exp=Automatisiertes Experimente mit einem Nelder-Mead Simplex-Algorithmus, um automatisch den ausgew\u00e4hlten Parameterraum zu erkunden und die beste Anpassung des Modells an die Daten zu finden


# Automatic Experiment view
AUTO.TITLE=Automatisches Experiment
AUTO.TITLELABEL=Automatisiertes Experiment
AUTO.ERROR=Fehler
AUTO.TITLE1=Konvergenz
AUTO.TITLE2=Fehler nach Zeit (Neuester)
AUTO.TITLE3=Fehler nach Zeit (Bester)
AUTO.TITLE4=Ref vs Zeit
AUTO.TITLE5=InCD vs Zeit (Neueste)
AUTO.RUN=Run ausf\u00fchren
AUTO.TIME=Zeit
AUTO.VALUES=Derzeitige Werte
AUTO.CHARTS=Grafik
AUTO.HISTORY=Error Konvergenz
AUTO.ERRORSERIES=Fehler nach Zeit
AUTO.INCIDENCE=Inzidenz
AUTO.AGGREGATESERIES=Inzidenz vs Zeit
AUTO.CONTROLS=Steuerung
AUTO.SETTINGS=Einstellungen
AUTO.PAUSE=Pausieren
AUTO.RESTART=Neustarten
AUTO.RESTART_HEADER=Mit Parametern
AUTO.STOP=Stopp
AUTO.LATEST=Letztes benutzen
AUTO.BEST=Bestes benutzen
AUTO.NOTFOUNDERROR=ERROR_CHART_NOT_FOUND

# Context menu entries
ContextMenu.LinearTimeScale=Lineare Skalierung
ContextMenu.LogTimeScale=Log-Skala
ContextMenu.LinearScaling=Lineare Skalierung
ContextMenu.LogScaling=Log-Skala
ContextMenu.ShowLegend=Show Legend
ContextMenu.HideLegend=Legende ausblenden

#Wizard Messages
WIZ.ALGORITHM=Algorithmus:
ALG.1=Klasse
ALG.2=Erweriterungspunkte k\u00f6nnen nicht initialisiert werden

#Nedler mead algorithm
NM.MAXITERS=Maximale Iterationen
NM.REFERENCE=Refrenzendaten Verzeichnis
NM.REFPICKFOLDER=Ordner w\u00e4hlen
NM.BASESCENARIO=Basis-Szenario
NM.SELECTSCENARIO=Scenario w\u00e4hlen
NM.ERRORFUNCTION=Error-Funktion
NM.PARAMETERS=Parameter
NM.PICKPARAM=W\u00e4hlen Sie einen Parameter
NM.INITIAL=Initial
NM.MIN=Unterer Grenze
NM.MAX=Obere Grenze
NM.STEP=Schritt
NM.BADREFERENCE=G\u00fcltigen Referenz-Ordner angeben
NM.BADBASESCENARIO=G\u00fcltiges Basis-Szenario angeben
NM.BADSTART=Ung\u00fcltiger Anfangswert
NM.BADSTEP=Ung\u00fcltige Schrittweite
NM.PICKSCENARIO=W\u00e4hlen Sie ein Szenario aus dem Projekt
NM.ATLEASTONEPARAM=Sie m\u00fcssen mindestens einen Parameter in der Optimierung anpassen
NM.BADMINMAX=Min-Wert gr\u00f6\u00dfer als max-Wert!
NM.BADMIN=Ung\u00fcltiger Minimalwert
NM.MADMAX=Ung\u00fcltiger Maximalwert
NM.BADMAXITERS=Maximale Iterationen ung\u00fcltig. Geben Sie einen ganzzahligen Wert ein (-1 f\u00fcr kein Maximum)
NM.REINITLABEL=Re-Initialisierung
NM.NO=NO
NM.YES=JA
NM.TOLERANCE=Toleranz
NM.PLUS=+
NM.MINUS=-
NM.REFFOLDERTITLE=W\u00e4hlen Sie einen Referenzordner
