# 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: 2016-04-01 10:01-0700\n"
"PO-Revision-Date: 2011-03-26 08:54-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"

#: grid.c:212
#, fuzzy
msgid "cannot clip to rotated viewport"
msgstr "Não é possível cortar sobre uma viewport rotacionada"

#: grid.c:697 grid.c:702 grid.c:792 grid.c:797
#, fuzzy
msgid "cannot pop the top-level viewport ('grid' and 'graphics' output mixed?)"
msgstr ""
"Não é possível mostrar a viewport de nível máximo (saidas gráficas e grid "
"misturadas?) "

#: grid.c:977
msgid "attempt to plot on null device"
msgstr "tentativa de fazer um gráfico no dispositivo nulo"

#: grid.c:1309
#, fuzzy
msgid "there is no layout defined"
msgstr "Não há layout definido"

#: grid.c:1529
#, fuzzy
msgid "polygon edge not found (zero-width or zero-height?)"
msgstr "Limite do polígono não encontrado (largura ou altura zero?)"

#: grid.c:1538
#, fuzzy
msgid "polygon edge not found"
msgstr "Limite do polígono não encontrado"

#: grid.c:1692
#, fuzzy
msgid "require at least two points to draw arrow"
msgstr "Pelo menos dois pontos são necessários para desenhar uma seta"

#: grid.c:2008
#, fuzzy
msgid "non-finite control point in Xspline"
msgstr "Ponto de controle não-finito em Xspline"

#: grid.c:2873
msgid "non-finite x or y in graphics path"
msgstr "valores não-finitos de x ou y no caminho do gráfico"

#: grid.c:2914
msgid "Empty raster"
msgstr ""

#: grid.c:3368
msgid "invalid plotting symbol"
msgstr "simbolo para gráfico inválido"

#: grid.c:3454
#, fuzzy
msgid "unable to clip to rotated rectangle"
msgstr "Não é possível cortar sobre um retângulo rotacionado"

#: layout.c:589
#, fuzzy
msgid "invalid 'layout.pos.row'"
msgstr "layout.pos.row inválido"

#: layout.c:593
#, fuzzy
msgid "invalid 'layout.pos.col'"
msgstr "layout.pos.col inválido"

#: matrix.c:50
msgid "singular transformation matrix"
msgstr "matriz de transformação singular"

#: state.c:170
#, fuzzy
msgid "unable to store 'grid' state.  Too many devices open?"
msgstr ""
"Não foi possível guardar o estado do grid. Muitos dispositivos abertos?"

#: unit.c:260 unit.c:410 unit.c:1210 unit.c:1290 unit.c:1370 unit.c:1450
#, fuzzy
msgid "unimplemented unit function"
msgstr "Função unidade não implementada"

#: unit.c:893 unit.c:1645
#, fuzzy
msgid "invalid unit or unit not yet implemented"
msgstr "Unidade inválida ou unidade ainda não implementada"

#: unit.c:1702 unit.c:1733
msgid "Viewport has zero dimension(s)"
msgstr ""

#: unit.c:1765 unit.c:1780 unit.c:1795 unit.c:1810
msgid "Unsupported unit conversion"
msgstr ""

#: unit.c:1898
msgid "Invalid unit"
msgstr "Unidade inválida"

#: unit.c:1914
#, fuzzy
msgid "'units' must be character"
msgstr "Unidades devem ser do tipo caractere"

#: unit.c:1917
#, fuzzy
msgid "'units' must be of length > 0"
msgstr "Unidades devem ter comprimento > 0"

#: viewport.c:315
#, fuzzy
msgid "non-finite location and/or size for viewport"
msgstr "Localização e/ou tamanhos não finitos para viewport"

#~ msgid "Invalid circle radius (must be non-negative)"
#~ msgstr "Raio de círculo inválido (deve ser não negativo)"
