# Portuguese translations for R package.
# Copyright (C) 2005 The R Foundation
# This file is distributed under the same license as the R package.
# Fernando Henrique Ferraz P. da Rosa <feferraz@ime.usp.br>, 2005.
msgid ""
msgstr ""
"Project-Id-Version: R 2.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-24 14:56-0700\n"
"PO-Revision-Date: 2011-03-26 08:58-0300\n"
"Last-Translator: Fernando Henrique <pessoal@fernandohrosa.com.br>\n"
"Language-Team: http://www.feferraz.net/br/P/Projeto_Traducao_R_Portugues\n"
"Language: pt_BR\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);\n"
"X-Generator: Pootle 2.0.5\n"

#: Rmd5.c:47
msgid "argument 'files' must be character"
msgstr "argumento 'files' deve ser do tipo caractere"

#: Rmd5.c:63
#, fuzzy, c-format
msgid "md5 failed on file '%ls'"
msgstr "md5 falhou no arquivo '%s'"

#: Rmd5.c:65
#, c-format
msgid "md5 failed on file '%s'"
msgstr "md5 falhou no arquivo '%s'"

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

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

#: getfmts.c:69
msgid "'fmt' must be length 1"
msgstr ""

#: getfmts.c:75
#, c-format
msgid "'fmt' length exceeds maximal format length %d"
msgstr ""

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

#: getfmts.c:136
msgid "at most one asterisk '*' is supported in each conversion specification"
msgstr ""

#: gramLatex.c:2390 gramRd.c:3790
#, c-format
msgid "unable to allocate buffer for long string at line %d"
msgstr ""

#: gramLatex.c:2626 gramRd.c:4335 gramRd.c:4341
#, fuzzy, c-format
msgid "invalid '%s' value"
msgstr "tipo de argumento inválido"

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

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

#: gramRd.c:2949
#, c-format
msgid "At most 4 arguments are allowed for user defined macros."
msgstr ""

#: gramRd.c:2991
#, c-format
msgid "No macro definition for '%s'."
msgstr ""

#: gramRd.c:3053
#, c-format
msgid "Not enough arguments passed to user macro '%s'"
msgstr ""

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

#: gramRd.c:3216
#, c-format
msgid "unable to allocate buffer for long macro at line %d"
msgstr ""

#: gramRd.c:3246
msgid "macros nested too deeply: infinite recursion?"
msgstr ""

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

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

#: gramRd.c:4348
msgid "cannot open the connection"
msgstr ""

#: gramRd.c:4355
msgid "cannot read from this connection"
msgstr ""

#: gramRd.c:4363
msgid "invalid Rd file"
msgstr ""

#: gramRd.c:4382
msgid "'deparseRd' only supports deparsing character elements"
msgstr ""

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

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

#: http.c:32
msgid "invalid bind address specification"
msgstr ""

#: install.c:112 install.c:131 install.c:133
#, fuzzy, c-format
msgid "invalid '%s' argument"
msgstr "tipo de argumento inválido"

#: install.c:162
msgid "write error during file append"
msgstr ""

#: signals.c:42
msgid "pskill() is not supported on this platform"
msgstr ""

#: signals.c:140
msgid "psnice() is not supported on this platform"
msgstr ""

#: text.c:67
msgid "invalid argument type"
msgstr "tipo de argumento inválido"

#: text.c:225 text.c:247
msgid "out of memory"
msgstr "falta de memória"
