# German translation of src/library/tools/po/tools.pot
# Copyright (C) 2008-2014 The R Foundation
# This file is distributed under the same license as the R package.
# Detlef Steuer <steuer@hsu-hh.de>, 2008-2014.
#
msgid ""
msgstr ""
"Project-Id-Version: R-3.1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-24 14:56-0700\n"
"PO-Revision-Date: 2013-03-11 11:27+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"

#: Rmd5.c:47
msgid "argument 'files' must be character"
msgstr "Argument 'files' muss Zeichenkette sein"

#: Rmd5.c:63
#, fuzzy, c-format
msgid "md5 failed on file '%ls'"
msgstr "md5 für Datei '%s' fehlgeschlagen"

#: Rmd5.c:65
#, c-format
msgid "md5 failed on file '%s'"
msgstr "md5 für Datei '%s' fehlgeschlagen"

#: getfmts.c:61
#, c-format
msgid "only %d arguments are allowed"
msgstr "nur %d Argumente erlaubt"

#: getfmts.c:66
msgid "'fmt' is not a character vector"
msgstr "'fmt' ist kein Zeichenkettenvektor"

#: getfmts.c:69
msgid "'fmt' must be length 1"
msgstr "'fmt' muss Länge 1 haben"

#: getfmts.c:75
#, c-format
msgid "'fmt' length exceeds maximal format length %d"
msgstr "Länge von 'fmt' überschreitet maximale Formatlänge %d"

#: getfmts.c:96
#, c-format
msgid "unrecognised format specification '%s'"
msgstr "nicht erkannte Formatspezifikation '%s'"

#: getfmts.c:136
msgid "at most one asterisk '*' is supported in each conversion specification"
msgstr "höchstens ein Stern '*' in jeder Konversionsspezifikation unterstützt"

#: gramLatex.c:2390 gramRd.c:3790
#, c-format
msgid "unable to allocate buffer for long string at line %d"
msgstr "kann keinen Buffer für lange Zeichenkette in Zeile %d allokieren"

#: gramLatex.c:2626 gramRd.c:4335 gramRd.c:4341
#, c-format
msgid "invalid '%s' value"
msgstr "unzulässiger '%s' Wert"

#: gramRd.c:2411 gramRd.c:2414
#, c-format
msgid "bad markup (extra space?) at %s:%d:%d"
msgstr "schlechte Auszeichnung (Leerstelle zuviel?) bei %s:%d:%d"

#: gramRd.c:2939
#, c-format
msgid "Macro '%s' previously defined."
msgstr "Makro '%s' bereits definiert."

#: gramRd.c:2949
#, c-format
msgid "At most 4 arguments are allowed for user defined macros."
msgstr "Höchstens 4 Argumente für benutzerdefinierte Makros erlaubt."

#: gramRd.c:2991
#, c-format
msgid "No macro definition for '%s'."
msgstr "Keine Makrodefinition für '%s'."

#: gramRd.c:3053
#, fuzzy, c-format
msgid "Not enough arguments passed to user macro '%s'"
msgstr "Höchstens 4 Argumente für benutzerdefinierte Makros erlaubt."

#: gramRd.c:3193 gramRd.c:3197
#, c-format
msgid "newline within quoted string at %s:%d"
msgstr "Zeilenumbruch innerhalb einer Zeichenkette bei %s:%d"

#: gramRd.c:3216
#, c-format
msgid "unable to allocate buffer for long macro at line %d"
msgstr "kann keinen Buffer für langes Makro in Zeile %d allokieren"

#: gramRd.c:3246
msgid "macros nested too deeply: infinite recursion?"
msgstr "Makros zu tief verschachtelt: unendliche Rekursion?"

#: gramRd.c:3652
#, c-format
msgid "Unable to find macro %s"
msgstr "Kann Makro %s nicht finden"

#: gramRd.c:3850
#, c-format
msgid "Unexpected end of input (in %c quoted string opened at %s:%d:%d)"
msgstr "Unerwartetes Ende der Eingabe (in %c Zeichenkette bei %s:%d:%d)"

#: gramRd.c:4348
msgid "cannot open the connection"
msgstr "kann Verbindung nicht öffnen"

#: gramRd.c:4355
msgid "cannot read from this connection"
msgstr "kann aus dieser Verbindung nicht lesen"

#: gramRd.c:4363
msgid "invalid Rd file"
msgstr "ungültige Rd Datei"

#: gramRd.c:4382
msgid "'deparseRd' only supports deparsing character elements"
msgstr "'deparseRd' unterstützt nur das Deparsing von Zeichenkettenelementen"

#: gramRd.c:4385
msgid "bad state"
msgstr "schlechter Zustand"

#: gramRd.c:4398
#, c-format
msgid "bad text mode %d in 'deparseRd'"
msgstr "schlechter Textmode %d in 'deparseRd'"

#: http.c:32
msgid "invalid bind address specification"
msgstr "unzulässige Bindungsadressenspezifikation"

#: install.c:112 install.c:131 install.c:133
#, c-format
msgid "invalid '%s' argument"
msgstr "unzulässiges '%s' Argument"

#: install.c:162
msgid "write error during file append"
msgstr "Schreibfehler während Anhängen an Datei"

#: signals.c:42
msgid "pskill() is not supported on this platform"
msgstr "pskill() auf dieser Plattform nicht unterstützt"

#: signals.c:140
msgid "psnice() is not supported on this platform"
msgstr "psnice() auf dieser Plattform nicht unterstützt"

#: text.c:67
msgid "invalid argument type"
msgstr "unzulässiger Argumenttyp"

#: text.c:225 text.c:247
msgid "out of memory"
msgstr "zu wenig Hauptspeicher"
