# 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"

#: class_support.c:29
msgid "calling the C routine used as an initializer for 'externalptr' objects"
msgstr "呼叫 C 子程式給 'externalptr' 物件進行初始化"

#: do_substitute_direct.c:41
msgid "invalid list for substitution"
msgstr "置換時用的串列發生錯誤"

#: methods_list_dispatch.c:151
msgid ""
"could not find the skeleton calls for 'methods' (package detached?): expect "
"very bad things to happen"
msgstr ""
"沒有能夠為 'methods' 找到骨架呼叫(程式套件被拆離了？) ：接下去很可能會出大錯"

#: methods_list_dispatch.c:217
#, c-format
msgid ""
"no \"allMethods\" slot found in object of class \"%s\" used as methods list "
"for function '%s'"
msgstr ""
"當函式 '%2$s' 方法串列來用的，類別為 \"%1$s\" 的物件缺少 \"allMethods\" 這麼"
"一個槽。"

#: methods_list_dispatch.c:430
#, c-format
msgid "no generic function definition found for '%s'"
msgstr "沒有為 '%s' 找到適用的泛型函式"

#: methods_list_dispatch.c:433
#, c-format
msgid ""
"no generic function definition found for '%s' in the supplied environment"
msgstr "在提供的環境裡 '%s' 沒有同屬函式定義"

#: methods_list_dispatch.c:468
#, c-format
msgid ""
"invalid generic function object for method selection for function '%s': "
"expected a function or a primitive, got an object of class \"%s\""
msgstr ""
"函式 '%s' 方法選擇時其同屬函式物件發生錯誤：需要的是函式或原始函式，得到的卻"
"是類別為 \"%s\" 的物件"

#: methods_list_dispatch.c:483
#, c-format
msgid "no direct or inherited method for function '%s' for this call"
msgstr "呼叫時找不到用於 '%s' 函式的直接或繼承的方法"

#: methods_list_dispatch.c:513 methods_list_dispatch.c:1062
msgid "invalid object (non-function) used as method"
msgstr "當方法用的物件(非函式)發生錯誤"

#: methods_list_dispatch.c:534
#, c-format
msgid "could not find symbol '%s' in frame of call"
msgstr "呼叫框裡找不到 '%s' 這個符號"

#: methods_list_dispatch.c:542
#, c-format
msgid ""
"invalid symbol in checking for missing argument in method dispatch: expected "
"a name, got an object of class \"%s\""
msgstr ""
"方法調度在檢查短少引數時符號發生錯誤：需要的是個名稱，得到的卻是類別為 \"%s"
"\" 的物件"

#: methods_list_dispatch.c:545
msgid "use of NULL environment is defunct"
msgstr "NULL 環境不再有用"

#: methods_list_dispatch.c:549
#, c-format
msgid ""
"invalid environment in checking for missing argument, '%s', in methods "
"dispatch: got an object of class \"%s\""
msgstr "方法調度在檢查短少引數 '%s' 時環境發生錯誤：不需要類別為 \"%s\" 的物件"

#: methods_list_dispatch.c:575
#, c-format
msgid ""
"object of class \"%s\" used as methods list for function '%s' ( no "
"'argument' slot)"
msgstr ""
"函式 '%s' 裡不能把類別為 \"%s\" 的物件當作方法串列來用(沒有 'argument' 這樣一"
"個槽)"

#: methods_list_dispatch.c:586
#, c-format
msgid ""
"(in selecting a method for function '%s') '...' and related variables cannot "
"be used for methods dispatch"
msgstr "(在為 '%s' 函式選擇方法時)'…' 和其他有關的變數不能在方法調度時使用"

#: methods_list_dispatch.c:589
#, c-format
msgid ""
"(in selecting a method for function '%s') the 'environment' argument for "
"dispatch must be an R environment; got an object of class \"%s\""
msgstr ""
"(在為 '%s' 函式選擇方法時) 調度時的 'environment' 引數必須是 R 環境；不需要類"
"別為 \"%s\" 的物件"

#: methods_list_dispatch.c:603 methods_list_dispatch.c:615
#: methods_list_dispatch.c:1008
#, c-format
msgid ""
"error in evaluating the argument '%s' in selecting a method for function "
"'%s': %s"
msgstr "在為 '%2$s' 函式選擇方法時評估 '%1$s' 引數發生錯誤: %3$s "

#: methods_list_dispatch.c:623
#, c-format
msgid "no matching method for function '%s' (argument '%s', with class \"%s\")"
msgstr "找不到與 '%s' 函式符合的方法(引數是 '%s'，類別為 \"%s\")"

#: methods_list_dispatch.c:630
#, c-format
msgid ""
"recursive use of function '%s' in method selection, with no default method"
msgstr "在方法選擇時函式 '%s' 不能有無預設方法的遞迴使用"

#: methods_list_dispatch.c:701
#, c-format
msgid "error in evaluating a 'primitive' next method: %s"
msgstr "評估 'primitive' 其次方法時發生錯誤: %s "

#: methods_list_dispatch.c:801
#, c-format
msgid "'%s' must be a single string (got a character vector of length %d)"
msgstr "'%s' 必須是單一字串(現在它是長度為 %d 的字元向量)"

#: methods_list_dispatch.c:805
#, c-format
msgid "'%s' must be a non-empty string; got an empty string"
msgstr "'%s' 必須是非空字串；現在它是空的字串"

#: methods_list_dispatch.c:809
#, c-format
msgid "'%s' must be a single string (got an object of class \"%s\")"
msgstr "'%s' 必須是單一字串(現在它是類別為 \"%s\" 的物件)"

#: methods_list_dispatch.c:886
msgid "class should be either a character-string name or a class definition"
msgstr "類別必須是字串名稱或類別定義"

#: methods_list_dispatch.c:966
#, c-format
msgid "failed to get the generic for the primitive \"%s\""
msgstr "沒有能夠為原始 \"%s\" 找到同屬函式"

#: methods_list_dispatch.c:973
#, c-format
msgid ""
"expected a generic function or a primitive for dispatch, got an object of "
"class \"%s\""
msgstr "需要的是同屬函式或原始函式，現在得到的卻是類別為 \"%s\" 的物件"
