# Translation of src/library/methods/po/methods.pot to German
# Copyright (C) 2007-2014 The R Foundation
# This file is distributed under the same license as the R package.
# Detlef Steuer <steuer@hsu-hh.de>, 2007-2014.
msgid ""
msgstr ""
"Project-Id-Version: R-3.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-24 10:53-0700\n"
"PO-Revision-Date: 2013-03-12 10:39+0100\n"
"Last-Translator: Detlef Steuer <steuer@hsu-hh.de>\n"
"Language-Team: R-core <R-core@r-project.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;\n"

#: class_support.c:29
msgid "calling the C routine used as an initializer for 'externalptr' objects"
msgstr ""
"Aufruf der C Routine, die als Initialisierer für 'externalptr' Objekte "
"genutzt wird"

#: do_substitute_direct.c:41
msgid "invalid list for substitution"
msgstr "unzulässige Liste für Substitution"

#: methods_list_dispatch.c:151
msgid ""
"could not find the skeleton calls for 'methods' (package detached?): expect "
"very bad things to happen"
msgstr ""
"konnte die Skelettaufrufe für 'methods' nicht finden (Paket entfernt?): "
"erwarte, dass wirklich schlimme Dinge passieren"

#: methods_list_dispatch.c:217
#, c-format
msgid ""
"no \"allMethods\" slot found in object of class \"%s\" used as methods list "
"for function '%s'"
msgstr ""
"kein \"allMethods\" Slot im Objekt der Klasse \"%s\", das als Methodenliste "
"für Funktion '%s' genutzt wird"

#: methods_list_dispatch.c:430
#, c-format
msgid "no generic function definition found for '%s'"
msgstr "keine generische Funktionsdefinition für '%s' gefunden"

#: methods_list_dispatch.c:433
#, c-format
msgid ""
"no generic function definition found for '%s' in the supplied environment"
msgstr ""
"keine generische Funktionsdefinition für '%s' in der angegebenen Umgebung "
"gefunden"

#: methods_list_dispatch.c:468
#, c-format
msgid ""
"invalid generic function object for method selection for function '%s': "
"expected a function or a primitive, got an object of class \"%s\""
msgstr ""
"unzulässiges generisches Funktionsobjekt für die Methodenwahl für Funktion "
"'%s': erwartete eine Funktion oder eine Primitive, bekam Objekt der Klasse "
"\"%s\""

#: methods_list_dispatch.c:483
#, c-format
msgid "no direct or inherited method for function '%s' for this call"
msgstr ""
"keine direkte oder vererbte Methode für Funktion '%s' für diesen Aufruf"

#: methods_list_dispatch.c:513 methods_list_dispatch.c:1062
msgid "invalid object (non-function) used as method"
msgstr "unzulässiges Objekt (keine Funktion) als Methode benutzt"

#: methods_list_dispatch.c:534
#, c-format
msgid "could not find symbol '%s' in frame of call"
msgstr "konnte Symbol '%s' nicht im Rahmen des Aufrufs finden"

#: methods_list_dispatch.c:542
#, c-format
msgid ""
"invalid symbol in checking for missing argument in method dispatch: expected "
"a name, got an object of class \"%s\""
msgstr ""
"unzulässiges Symbol bei der Überprüfung auf fehlende Argumente im "
"Methodendispatch: erwartete einen Namen, bekam Objekt der Klasse \"%s\""

#: methods_list_dispatch.c:545
msgid "use of NULL environment is defunct"
msgstr "Nutzen der NULL Umgebung nicht mehr möglich"

#: methods_list_dispatch.c:549
#, c-format
msgid ""
"invalid environment in checking for missing argument, '%s', in methods "
"dispatch: got an object of class \"%s\""
msgstr ""
"unzulässige Umgebung bei der Überprüfung auf fehlende Argumente, '%s', im "
"Methodendispatch: bekam Objekt der Klasse \"%s\""

#: methods_list_dispatch.c:575
#, c-format
msgid ""
"object of class \"%s\" used as methods list for function '%s' ( no "
"'argument' slot)"
msgstr ""
"Objekt der Klasse \"%s\" als Methodenliste für Funktion '%s' genutzt (kein "
"'argument' Slot)"

#: methods_list_dispatch.c:586
#, c-format
msgid ""
"(in selecting a method for function '%s') '...' and related variables cannot "
"be used for methods dispatch"
msgstr ""
"(bei der Auswahl einer Methode für Funktion '%s') '...' und damit "
"zusammenhängende Variablen können nicht für Methodendispatch gennutzt werden"

#: methods_list_dispatch.c:589
#, c-format
msgid ""
"(in selecting a method for function '%s') the 'environment' argument for "
"dispatch must be an R environment; got an object of class \"%s\""
msgstr ""
"(bei der Auswahl einer Methode für Funktion '%s') das 'environment' Argument "
"für den Dispatch muss eine R Umgebung sein; bekam Objekt der Klasse \"%s\""

#: methods_list_dispatch.c:603 methods_list_dispatch.c:615
#: methods_list_dispatch.c:1008
#, c-format
msgid ""
"error in evaluating the argument '%s' in selecting a method for function "
"'%s': %s"
msgstr ""
"Fehler bei der Auswertung des Argumentes '%s' bei der Methodenauswahl für "
"Funktion '%s': %s"

#: methods_list_dispatch.c:623
#, c-format
msgid "no matching method for function '%s' (argument '%s', with class \"%s\")"
msgstr ""
"kein passende Methode für die Funktion '%s' (Argument '%s', mit Klasse \"%s"
"\")"

#: methods_list_dispatch.c:630
#, c-format
msgid ""
"recursive use of function '%s' in method selection, with no default method"
msgstr ""
"rekursive Benutzung der Funktion '%s' in der Methodenwahl, ohne "
"Standardmethode"

#: methods_list_dispatch.c:701
#, c-format
msgid "error in evaluating a 'primitive' next method: %s"
msgstr "Fehler in der Bestimmung einer 'primitive' next-Methode: %s"

#: methods_list_dispatch.c:801
#, c-format
msgid "'%s' must be a single string (got a character vector of length %d)"
msgstr ""
"\"%s\" muss eine einzelne Zeichenkette sein (bekam Zeichenkettenvektor der "
"Länge %d)"

#: methods_list_dispatch.c:805
#, c-format
msgid "'%s' must be a non-empty string; got an empty string"
msgstr ""
"'%s' muss eine nicht-leere Zeichenkette sein; bekam eine leere Zeichenkette"

#: methods_list_dispatch.c:809
#, c-format
msgid "'%s' must be a single string (got an object of class \"%s\")"
msgstr ""
"'%s' muss eine einzelne Zeichenkette sein (bekam ein Objekt der Klasse \"%s"
"\")"

#: methods_list_dispatch.c:886
msgid "class should be either a character-string name or a class definition"
msgstr ""
"class sollte entweder ein Zeichenkettenname oder eine Klassendefinition sein"

#: methods_list_dispatch.c:966
#, c-format
msgid "failed to get the generic for the primitive \"%s\""
msgstr "bekam keine Generische für die Primitive \"%s\""

#: methods_list_dispatch.c:973
#, c-format
msgid ""
"expected a generic function or a primitive for dispatch, got an object of "
"class \"%s\""
msgstr ""
"erwartete eine generische Funktion oder eine Primitive für den Dispatch, "
"bekam Objekt der Klasse \"%s\""

#~ msgid ""
#~ "in processing 'callNextMethod', found a '...' in the matched call, but no "
#~ "corresponding '...' argument"
#~ msgstr ""
#~ "bei der Verarbeitung von 'callNextMethod' ein '...' im Aufruf gefunden, "
#~ "aber keinnkorrespondierendes '...' Argument"

#~ msgid ""
#~ "S language method selection got an error when called from internal "
#~ "dispatch for function '%s'"
#~ msgstr ""
#~ "S Methodenauswahl ergab einen Fehler, wenn aufgerufen aus dem internen "
#~ "Dispatchfür Funktion '%s'"

#~ msgid ""
#~ "internal error in 'callNextMethod': '.nextMethod' was not assigned in the "
#~ "frame of the method call"
#~ msgstr ""
#~ "interner Fehler in 'callNextMethod': '.NextMethod' wurde im Rahmen der "
#~ "Methodenaufrufs nicht zugewiesen"

#~ msgid ""
#~ "Generic \"%s\" seems not to have been initialized for table dispatch---"
#~ "need to have .SigArgs and .AllMtable assigned in its environment"
#~ msgstr ""
#~ "Generische \"%s\" scheint nicht für den Tabellendispatch initialisiert zu "
#~ "sein --- braucht zugewiesene .SigArgs und .AllMtable in ihrer Umgebung"
