# Traditional Chinese translations for R package.
# Copyright (C) 2005 The R Foundation
# This file is distributed under the same license as the R package.
# 陈斐 <feic@normipaiva.com>, 2006, 12.
# Wei-Lun Chao <bluebat@member.fsf.org>, 2018.
#
msgid ""
msgstr ""
"Project-Id-Version: R 3.5.1\n"
"Report-Msgid-Bugs-To: bugs.r-project.org\n"
"POT-Creation-Date: 2020-03-24 10:13\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"

msgid "invalid value of %s"
msgstr "'%s' 的值無效"

msgid "need at least one argument"
msgstr "至少需要一個引數"

msgid "zero-length inputs cannot be mixed with those of non-zero length"
msgstr "非零長度的輸入和長度為零的輸入不能同時混用"

msgid "dim(X) must have a positive length"
msgstr "dim(X)的長度必須是正數"

msgid "'X' must have named dimnames"
msgstr "'X' 必須具名字的 dimnames"

msgid "not all elements of 'MARGIN' are names of dimensions"
msgstr "'MARGIN' 所有的元素都必須是尺寸的名稱"

msgid "no cluster 'cl' supplied and none is registered"
msgstr "沒有提供 'cl' 集群也沒有註冊"

msgid "not a valid cluster"
msgstr "叢集無效"

msgid "unknown cluster type"
msgstr "未知的集群類型"

msgid "numeric 'names' must be >= 1"
msgstr "數值 'names' 必須 >= 1"

msgid "node of a socket cluster on host %s with pid %d"
msgstr "pid 是 %2$d 的在主機 %1$s 上插座集群的節點"

msgid "Connection setup failed or timed out."
msgstr ""

msgid "PORT must be specified"
msgstr "必須指定 PORT"

msgid "'nnodes' must be >= 1"
msgstr "'nnodes' 必須 >= 1"

msgid "Cluster setup failed."
msgstr ""

msgid "invalid 'child' argument"
msgstr "'child' 引數無效"

msgid "'children' must be a list of processes or a single process"
msgstr "'children' 要麼是行程列表，要麼是一個單一的行程"

msgid "'process' must be of class %s"
msgstr "'process' 的類別必須是 %s"

msgid "'child' must be a valid child process"
msgstr "'child' 必須是有效的子行程"

msgid "'what' must be a character or raw vector"
msgstr "'what' 必須是一個字元或原始向量"

msgid "'mc.cores' must be >= 1"
msgstr "'mc.cores' 必須 >= 1"

msgid "affinity.list and X must have the same length"
msgstr "affinity.list 和 X 必須有同樣的長度"

msgid "%d function calls resulted in an error"
msgstr "%d 個函式呼叫導致錯誤"

msgid "'mc.preschedule' must be false if 'affinity.list' is used"
msgstr "如果使用了 'affinity.list'，'mc.preschedule' 必須為假"

msgid "all scheduled cores encountered errors in user code"
msgstr "使用者程式碼中所有預定的核心都發生錯誤"

msgid "Zero-length inputs cannot be mixed with those of non-zero length"
msgstr "非零長度的輸入和長度為零的輸入不能同時混用"

msgid "invalid 'jobs' argument"
msgstr "'jobs' 引數無效"

msgid "'v' must be a vector"
msgstr "'v' 必須是一個向量"

msgid "some results may be missing, folded or caused an error"
msgstr "有些結果可能沒有，可能被折疊，也可能發生錯誤"

msgid "fork clusters are not supported on Windows"
msgstr "Windows 不支援分叉集群"

msgid "'mc.cores' > 1 is not supported on Windows"
msgstr " Windows 不支援 'mc.cores' > 1"

msgid "Cluster setup failed. %d worker of %d failed to connect."
msgid_plural "Cluster setup failed. %d of %d workers failed to connect."
msgstr[0] ""

msgid "socket cluster with %d nodes on host %s"
msgid_plural "socket cluster with %d nodes on hosts %s"
msgstr[0] "主機 %2$s 上 %1$d 個節點的插座集群"

msgid "%d parallel function call did not deliver a result"
msgid_plural "%d parallel function calls did not deliver results"
msgstr[0] ""

#, fuzzy
msgid ""
"scheduled core %s did not deliver a result, all values of the job will be "
"affected"
msgid_plural ""
"scheduled cores %s did not deliver results, all values of the jobs will be "
"affected"
msgstr[0] "預定內核 %s 的使用者程式碼中發生錯誤，所有作業值都將受到影響"

msgid ""
"scheduled core %s encountered error in user code, all values of the job will "
"be affected"
msgid_plural ""
"scheduled cores %s encountered errors in user code, all values of the jobs "
"will be affected"
msgstr[0] "預定內核 %s 的使用者程式碼中發生錯誤，所有作業值都將受到影響"

msgid "%d parallel job did not deliver a result"
msgid_plural "%d parallel jobs did not deliver results"
msgstr[0] ""
