# Traditional Chinese translations for R package.
# Copyright (C) 2006 The R Foundation
# This file is distributed under the same license as the R package.
# 陈斐 <feic@normipaiva.com>, 2005, 07.
# Wei-Lun Chao <bluebat@member.fsf.org>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: R 3.5.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-24 10:53-0700\n"
"PO-Revision-Date: 2018-09-16 23:38+0800\n"
"Last-Translator: Wei-Lun Chao <bluebat@member.fsf.org>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: gpar.c:473
msgid "updateGContext must only be called after initGContext"
msgstr ""

#: grid.c:212
msgid "cannot clip to rotated viewport"
msgstr "無法修剪至旋轉的視窗中"

#: grid.c:697 grid.c:702 grid.c:792 grid.c:797
msgid "cannot pop the top-level viewport ('grid' and 'graphics' output mixed?)"
msgstr "無法彈到最上層的視窗('grid' 和 'graphics' 輸出有混合？)"

#: grid.c:979
msgid "attempt to plot on null device"
msgstr "不能在無效裝置上畫圖"

#: grid.c:1400
msgid "there is no layout defined"
msgstr "需要設定版面設置"

#: grid.c:1620
msgid "polygon edge not found (zero-width or zero-height?)"
msgstr "找不到多邊形的邊(零寬度或是零高度？)"

#: grid.c:1629
msgid "polygon edge not found"
msgstr "找不到多邊形的邊"

#: grid.c:1783
msgid "require at least two points to draw arrow"
msgstr "至少需要兩點才能畫一個箭頭"

#: grid.c:2102
msgid "non-finite control point in Xspline"
msgstr "Xspline 裡不能有無限值的控制點"

#: grid.c:2982
msgid "non-finite x or y in graphics path"
msgstr "圖形路徑裡 x 或 y 的值非限定"

#: grid.c:3026
msgid "Empty raster"
msgstr "空的柵格"

#: grid.c:3509
msgid "invalid plotting symbol"
msgstr "圖畫符號值無效"

#: grid.c:3597
msgid "unable to clip to rotated rectangle"
msgstr "無法修剪到旋轉的長方形上"

#: layout.c:600
msgid "invalid 'layout.pos.row'"
msgstr "'layout.pos.row' 的值無效"

#: layout.c:604
msgid "invalid 'layout.pos.col'"
msgstr "'layout.pos.col' 的值無效"

#: matrix.c:50
msgid "singular transformation matrix"
msgstr "奇異轉換矩陣"

#: state.c:170
msgid "unable to store 'grid' state.  Too many devices open?"
msgstr "無法保留 'grid' 的狀況。是不是因為您開啟了太多的裝置？"

#: unit.c:65
msgid "Cannot create unit scalar from 0-length unit vector"
msgstr ""

#: unit.c:789 unit.c:1288
msgid "invalid unit or unit not yet implemented"
msgstr "要麼不明的單元，要麼這個單位目前沒有被實作"

#: unit.c:1345 unit.c:1376
msgid "Viewport has zero dimension(s)"
msgstr "檢視區的維度不可為零"

#: unit.c:1408 unit.c:1423 unit.c:1438 unit.c:1453
msgid "Unsupported unit conversion"
msgstr "不支援的單元轉換"

#: unit.c:1545
msgid "Invalid unit"
msgstr "單元無效"

#: unit.c:1560
msgid "'units' must be character"
msgstr "'units' 必須是字元"

#: unit.c:1563
msgid "'units' must be of length > 0"
msgstr "'units' 的長度必須大於零"

#: unit.c:1574
msgid ""
"data must be either NULL, have length 1, or match the length of the final "
"unit vector"
msgstr ""

#: unit.c:1586
msgid "no string supplied for 'strwidth/height' unit"
msgstr ""

#: unit.c:1590
msgid "no 'grob' supplied for 'grobwidth/height' unit"
msgstr ""

#: unit.c:1608
msgid "'gPath' must have depth 1 in 'grobwidth/height' units"
msgstr ""

#: unit.c:1613
msgid "non-NULL value supplied for plain unit"
msgstr ""

#: unit.c:1666 unit.c:1700 unit.c:1749
msgid "old version of unit class is no longer allowed"
msgstr ""

#: unit.c:1672
msgid "object is not coercible to a unit"
msgstr ""

#: unit.c:1698
msgid "object is not a unit"
msgstr ""

#: unit.c:1830
msgid "units can only be multiplied with numerics and integers"
msgstr ""

#: viewport.c:315
msgid "non-finite location and/or size for viewport"
msgstr "檢視區的位置或大小不能是無限的"

#~ msgid "unimplemented unit function"
#~ msgstr "單元函式目前沒有實作"
