CHANGES IN CUPS V1.2.11
+ - Fixed the "relaying from" log message (STR #2376)
+ - Updated the launchd support on Mac OS X to better
+ support reconfiguration.
- "make distclean" didn't remove all generated files
(STR #2366)
- Fixed a bug in the advertisement of classes (STR
- Documentation updates (STR #1775, STR #2130, STR #2131,
STR #2263, STR #2356)
+ - The scheduler did not report Bonjour shared printers as
+ remote printers (STR #2384)
- Added new -R and -W options to the cupstestppd program
for greater control over the testing of PPDs.
- Added a new cupsGetServerPPD() function for getting
- Added a new CUPS_GET_PPD operation for getting an
available PPD file on the server (STR #2334)
- CUPS_GET_PPDS now reports multiple ppd-product values
- if the corresponding PPD contains multiple products
- (STR #2334)
+ based on the PPD ModelName and Product strings (STR
+ #2334, STR #2383)
- CUPS_GET_PPDS now reports the PSVersion attributes
from a PPD file in the ppd-psversion attribute
(STR #2334)
+ - CUPS_GET_PPDS now reports the cupsModelNumber attribute
+ from a PPD file in the ppd-model-number attribute (STR
+ #2383)
+ - CUPS_GET_PPDS now reports a driver type string in the
+ ppd-type attribute based on the cupsFax and cupsFilter
+ attributes in a PPD file (STR #2383)
- Added a new printer attribute called "cups-version"
which reports the version of CUPS that is running
(STR #2240)
#
-# "$Id: Makefile 6500 2007-04-30 21:47:48Z mike $"
+# "$Id: Makefile 6513 2007-05-06 23:50:25Z mike $"
#
# Top-level Makefile for the Common UNIX Printing System (CUPS).
#
echo Installing StartupItems files...; \
$(INSTALL_SCRIPT) init/PrintingServices $(BUILDROOT)$(INITDDIR)/PrintingServices; \
$(INSTALL_DATA) init/StartupParameters.plist $(BUILDROOT)$(INITDDIR)/StartupParameters.plist; \
- $(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
+ $(INSTALL_DIR) $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
$(INSTALL_DATA) init/Localizable.strings $(BUILDROOT)$(INITDDIR)/Resources/English.lproj/Localizable.strings; \
elif test "$(INITDDIR)" = "/System/Library/LaunchDaemons"; then \
echo Installing LaunchDaemons configuration files...; \
$(INSTALL_DATA) init/org.cups.cupsd.plist $(BUILDROOT)$(DEFAULT_LAUNCHD_CONF); \
$(INSTALL_DATA) init/org.cups.cups-lpd.plist $(BUILDROOT)/System/Library/LaunchDaemons; \
+ case `uname -r` in \
+ 8.*) \
+ $(INSTALL_DIR) $(BUILDROOT)/System/Library/StartupItems/PrintingServices; \
+ $(INSTALL_SCRIPT) init/PrintingServices.launchd $(BUILDROOT)/System/Library/StartupItems/PrintingServices/PrintingServices; \
+ $(INSTALL_DATA) init/StartupParameters.plist $(BUILDROOT)/System/Library/StartupItems/PrintingServices/StartupParameters.plist; \
+ $(INSTALL_DIR) $(BUILDROOT)/System/Library/StartupItems/PrintingServices/Resources/English.lproj; \
+ $(INSTALL_DATA) init/Localizable.strings $(BUILDROOT)/System/Library/StartupItems/PrintingServices/Resources/English.lproj/Localizable.strings; \
+ ;; \
+ esac \
else \
echo Installing RC script...; \
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
$(RM) $(BUILDROOT)$(INITDDIR)/Resources/English.lproj/Localizable.strings; \
$(RMDIR) $(BUILDROOT)$(INITDDIR)/Resources/English.lproj; \
elif test "$(INITDDIR)" = "/System/Library/LaunchDaemons"; then \
- $(RM) $(BUILDROOT)$(DEFAULT_LAUNCHD_CONF); \
+ $(RM) $(BUILDROOT)$(INITDDIR)/org.cups.cupsd.plist; \
+ $(RM) $(BUILDROOT)$(INITDDIR)/org.cups.cups-lpd.plist; \
+ $(RMDIR) $(BUILDROOT)/System/Library/StartupItems/PrintingServices; \
else \
$(INSTALL_SCRIPT) init/cups.sh $(BUILDROOT)$(INITDDIR)/cups; \
fi \
#
-# End of "$Id: Makefile 6500 2007-04-30 21:47:48Z mike $".
+# End of "$Id: Makefile 6513 2007-05-06 23:50:25Z mike $".
#
dnl
-dnl "$Id: cups-defaults.m4 6431 2007-04-02 14:31:49Z mike $"
+dnl "$Id: cups-defaults.m4 6529 2007-05-08 19:48:20Z mike $"
dnl
dnl Default cupsd configuration settings for the Common UNIX Printing System
dnl (CUPS).
dnl
dnl Default langugages...
-AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es et fr he it ja pl sv" ],
+AC_ARG_WITH(languages, [ --with-languages set installed languages, default="de es et fr he it ja pl sv zh_TW" ],
if test "x$withval" != xno; then
LANGUAGES="$withval"
fi,
- LANGUAGES="de es et fr he it ja pl sv")
+ LANGUAGES="de es et fr he it ja pl sv zh_TW")
AC_SUBST(LANGUAGES)
dnl Default ConfigFilePerm
AC_DEFINE_UNQUOTED(CUPS_DEFAULT_MAX_COPIES, $CUPS_MAX_COPIES)
dnl
-dnl End of "$Id: cups-defaults.m4 6431 2007-04-02 14:31:49Z mike $".
+dnl End of "$Id: cups-defaults.m4 6529 2007-05-08 19:48:20Z mike $".
dnl
/*
- * "$Id: language.c 6489 2007-04-30 17:55:15Z mike $"
+ * "$Id: language.c 6532 2007-05-09 18:54:23Z mike $"
*
* I18N/language support for the Common UNIX Printing System (CUPS).
*
* preference so we have to look it up this way...
*/
- if (!language)
+ if (!language && (language = getenv("LANG")) == NULL)
language = appleLangDefault();
#else
/*
- * End of "$Id: language.c 6489 2007-04-30 17:55:15Z mike $".
+ * End of "$Id: language.c 6532 2007-05-09 18:54:23Z mike $".
*/
Comment[it]=Interfaccia web di CUPS
Name[he]=נהל הדפסות
Comment[he]=ממשק דפדפן של CUPS
+Name[zh_TW]=印表管理
+Comment[zh_TW]=CUPS 網頁介面
#
-# "$Id: Makefile 6431 2007-04-02 14:31:49Z mike $"
+# "$Id: Makefile 6519 2007-05-08 01:55:27Z mike $"
#
# Documentation makefile for the Common UNIX Printing System (CUPS).
#
-# Copyright 1997-2006 by Easy Software Products.
+# Copyright 1997-2007 by Easy Software Products.
#
# These coded instructions, statements, and computer programs are the
# property of Easy Software Products and are protected by Federal
images/button-accept-jobs.gif \
images/button-add-class.gif \
images/button-add-printer.gif \
+ images/button-add-rss-subscription.gif \
images/button-add-this-printer.gif \
images/button-cancel-all-jobs.gif \
images/button-cancel-job.gif \
+ images/button-cancel-subscription.gif \
images/button-change-settings.gif \
images/button-clean-print-heads.gif \
images/button-clear.gif \
images/button-export-samba.gif \
images/button-help.gif \
images/button-hold-job.gif \
+ images/button-list-available-printers.gif \
images/button-manage-classes.gif \
images/button-manage-jobs.gif \
images/button-manage-printers.gif \
<dt>"limit" (integer (1:MAX)):
- <dd>The client OPTIONALLY supplies this attribute limiting the number of
- PPDs that are returned.
+ <dd>The client OPTIONALLY supplies this attribute limiting the number of PPDs that are returned.
<dt>"ppd-make" (text(127)):
- <dd>The client OPTIONALLY supplies a printer manufacturer to select
- which PPDs are returned.
+ <dd>The client OPTIONALLY supplies a printer manufacturer to select which PPDs are returned.
+
+ <dt>"ppd-make-and-model" (text(127)):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a make and model to select which PPDs are returned.
+
+ <dt>"ppd-model-number" (integer):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a model number to select which PPDs are returned.
+
+ <dt>"ppd-natural-language" (naturalLanguage):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a language to select which PPDs are returned.
+
+ <dt>"ppd-product" (text(127)):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a PostScript product string to select which PPDs are returned.
+
+ <dt>"ppd-psversion" (text(127)):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a PostScript version string to select which PPDs are returned.
+
+ <dt>"ppd-type" (type1 keyword):<span class='info'>CUPS 1.3</span>
+
+ <dd>The client OPTIONALLY supplies a driver type to select which PPDs are returned.
<dt>"requested-attributes" (1setOf keyword) :
- <dd>The client OPTIONALLY supplies a set of attribute names and/or
- attribute group names in whose values the requester is interested. If
- the client omits this attribute, the server responds as if this
- attribute had been supplied with a value of 'all'.
+ <dd>The client OPTIONALLY supplies a set of attribute names and/or attribute group names in whose values the requester is interested. If the client omits this attribute, the server responds as if this attribute had been supplied with a value of 'all'. Specify "ppd-make" to get a list of manufacturers.
</dl>
make and model is not specified in the PPD file then the ModelName or
ShortNickName attributes are used instead.
+<h4><a name="ppd-model-number">ppd-model-number (integer)</a><span class="info">CUPS 1.3</span></h4>
+
+<p>The ppd-model-number attribute provides the <tt>cupsModelNumber</tt> value from the PPD file.
+
<h4><a name="ppd-name">ppd-name (name(255))</a></h4>
-<p>The ppd-name attribute specifies the PPD filename on the server
-relative to the model directory. The forward slash (/) is used to
-delineate directories.
+<p>The ppd-name attribute specifies either the PPD filename on the server relative to the model directory or a URI that maps to a specific driver interface in the driver directory. The forward slash (/) is used to delineate directories.
<h4><a name="ppd-natural-language">ppd-natural-language (1setOf naturalLanguage)</a></h4>
<p>The ppd-product attribute specifies the PSVersion attribute values in the PPD file.
+<h4><a name="ppd-type">ppd-type (type1 keyword)</a><span class="info">CUPS 1.3</span></h4>
+
+<p>The ppd-type attribute specifies the type of driver described by the PPD file:</p>
+
+<ul>
+
+ <li><tt>fax</tt> - A facsimile or multi-function device</li>
+
+ <li><tt>pdf</tt> - A PDF printer</li>
+
+ <li><tt>postscript</tt> - A PostScript printer (no filters)</li>
+
+ <li><tt>raster</tt> - A CUPS raster driver</li>
+
+ <li><tt>unknown</tt> - An unknown or hybrid driver</li>
+
+</ul>
+
<h3 class='title'><a name='PRINTER_ATTRIBUTES'>Printer Attributes</a></h3>
</head>
<body>
<!--
- "$Id: spec-ppd.html 6457 2007-04-17 18:40:55Z mike $"
+ "$Id: spec-ppd.html 6534 2007-05-16 17:51:03Z mike $"
CUPS PPD extensions specification for the Common UNIX Printing System (CUPS).
<p>Also see the related <tt>cupsFlipDuplex</tt> attribute.</p>
+<h3>APRemoteQueueID</h3>
+
+<p class='summary'>*APRemoteQueueID: "string"</p>
+
+<p>This string attribute notifies the scheduler that this PPD is for a remote CUPS printer, typically shared via Bonjour.</p>
+
+<p>Example:</p>
+
+<pre class='command'>
+*APRemoteQueueID: "myprinter"
+</pre>
+
<h3>cupsEvenDuplex</h3>
<p class='summary'>*cupsEvenDuplex: boolean</p>
*cupsEvenDuplex: true
</pre>
+<h3>cupsFax</h3>
+
+<p class='summary'>*cupsFax: boolean</p>
+
+<p>This boolean attribute specifies whether the PPD defines a facsimile device. The default is <tt>false</tt>.</p>
+
+<p>Examples:</p>
+
+<pre class='command'>
+*cupsFax: true
+</pre>
+
<h3>cupsFilter</h3>
<p class='summary'>*cupsFilter: "source/type cost program"</p>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>首頁 - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="Common UNIX Printing System @CUPS_VERSION@">
+<TR CLASS="header">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>Common UNIX Printing System @CUPS_VERSION@@CUPS_REVISION@</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="sel" HREF="/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 首頁 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/admin/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 管理 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/classes/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 分類 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/help/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 文件/求助 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/jobs/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 工作 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="unsel" HREF="/printers/"><IMG SRC="/images/tab-left.gif" WIDTH="4"
+HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 印表機 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15"> </TD>
+<TD COLSPAN="2" WIDTH="100%" VALIGN="TOP" CLASS="page">
+
+<H2 CLASS="title">歡迎!</H2>
+
+<P>此處的網頁讓您監看您的印表機和工作,以及
+進行系統管理任務。按下上方任何的分頁頁標或是
+下方的按鈕,以執行某個作業。</P>
+
+<P>
+<A HREF="/help/"><IMG SRC="/images/button-help.gif" CLASS="button" ALT="求助"></A>
+<A HREF="/admin?OP=add-class"><IMG SRC="/images/button-add-class.gif" CLASS="button" ALT="增加分類"></A>
+<A HREF="/admin?OP=add-printer"><IMG SRC="/images/button-add-printer.gif" CLASS="button" ALT="增加印表機"></A>
+<A HREF="/classes"><IMG SRC="/images/button-manage-classes.gif" CLASS="button" ALT="管理分類"></A>
+<A HREF="/jobs"><IMG SRC="/images/button-manage-jobs.gif" CLASS="button" ALT="管理工作"></A>
+<A HREF="/printers"><IMG SRC="/images/button-manage-printers.gif" CLASS="button" ALT="管理印表機"></A>
+<A HREF="/admin"><IMG SRC="/images/button-manage-server.gif" CLASS="button" ALT="管理伺服器"></A>
+</P>
+
+<P><I>如果向您要求使用者名稱與密碼,請輸入
+您的使用者名稱與密碼,或是 "root" 的使用者名稱與密碼。</I></P>
+
+<H2 CLASS="title">關於 CUPS</H2>
+
+<P>
+<IMG SRC="/images/happy.gif" ALIGN="LEFT" WIDTH="196" HEIGHT="144"
+STYLE="padding-right: 10px;" ALT="快樂的電腦與印表機">
+
+<A HREF="http://www.easysw.com/"><IMG SRC="/images/esp-logo.gif"
+ALIGN="RIGHT" WIDTH="110" HEIGHT="68" BORDER="0"
+STYLE="padding-left: 10px; padding-bottom: 10px;"
+ALT="Easy Software Products"></A>
+
+CUPS 提供以 UNIX<SUP>®</SUP> 為基礎的作業系統
+一層具有可攜性的列印介面。它是由 <A HREF="http://www.easysw.com">Easy Software
+Products</a> 為了推動一個標準的列印解決方案所開發與維護。CUPS 是目前用於
+MacOS<SUP>®</SUP> X 與大部份 Linux<SUP>®</SUP> 發行版本的標準列印系統。</P>
+
+<P>CUPS 使用 <A HREF="http://www.pwg.org/ipp/"
+TARGET="_blank"> Internet Printing Protocol ("IPP")</A> 做為
+管理列印工作與佇列的基礎,並且加入瀏覽網路印表機和基於
+PostScript Printer Description ("PPD") 的列印選項,
+以支援真實世界中的列印。<BR CLEAR="ALL"></P>
+
+<H2 CLASS="title">印表機驅動程式與協助</H2>
+
+<P>造訪 CUPS 的官方網站以獲得印表機驅動程式與協助:</P>
+
+<PRE>
+ <A HREF="http://www.cups.org/" TARGET="_blank">www.cups.org</A>
+</PRE>
+
+<P>CUPS 的商業支援與進階版本名為 <A
+HREF="http://www.easysw.com/printpro/">ESP Print Pro</A> 是提供自:</P>
+
+<PRE>
+ <A HREF="http://www.easysw.com/" TARGET="_blank">www.easysw.com</A>
+</PRE>
+
+</TD>
+<TD WIDTH="15"> </TD>
+</TR>
+<TR CLASS="header">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>The Common UNIX Printing System, CUPS, and the CUPS logo are the
+trademark property of <A HREF="http://www.easysw.com">Easy Software
+Products</A>. CUPS is copyright 1997-2007 by Easy Software Products,
+All Rights Reserved.</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
--- /dev/null
+#!/bin/sh
+
+##
+# PrintingServices - a.k.a. CUPS
+##
+
+. /etc/rc.common
+
+StartService ()
+{
+ ConsoleMessage "Starting printing services"
+ launchctl start org.cups.cupsd
+}
+
+StopService ()
+{
+ ConsoleMessage "Stopping printing services"
+ launchctl stop org.cups.cupsd
+}
+
+RestartService ()
+{
+ ConsoleMessage "Restarting printing services"
+ launchctl stop org.cups.cupsd
+ launchctl start org.cups.cupsd
+}
+
+RunService "$1"
--- /dev/null
+#
+# "$Id$"
+#
+# Message catalog template for the Common UNIX Printing System (CUPS).
+#
+# Copyright 2005-2006 by Easy Software Products.
+#
+# These coded instructions, statements, and computer programs are the
+# property of Easy Software Products and are protected by Federal
+# copyright law. Distribution and use rights are outlined in the file
+# "LICENSE.txt" which should have been included with this file. If this
+# file is missing or damaged please contact Easy Software Products
+# at:
+#
+# Attn: CUPS Licensing Information
+# Easy Software Products
+# 44141 Airport View Drive, Suite 204
+# Hollywood, Maryland 20636 USA
+#
+# Voice: (301) 373-9600
+# EMail: cups-info@cups.org
+# WWW: http://www.cups.org
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: cups 1.2.8\n"
+"Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
+"POT-Creation-Date: 2007-01-23 09:19-0500\n"
+"PO-Revision-Date: 2007-02-17 00:00+0800\n"
+"Last-Translator: Wei-Lun Chao <chaoweilun@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@linux.org.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 "Options Installed"
+msgstr "已安裝選項"
+
+msgid "Class"
+msgstr "類別"
+
+msgid "Printer"
+msgstr "印表機"
+
+msgid "Extra"
+msgstr "其他"
+
+msgid "General"
+msgstr "一般"
+
+msgid "Media Size"
+msgstr "媒體大小"
+
+msgid "Media Type"
+msgstr "媒體類型"
+
+msgid "Media Source"
+msgstr "媒體來源"
+
+msgid "Output Mode"
+msgstr "輸出模式"
+
+msgid "Resolution"
+msgstr "解析度"
+
+msgid "Variable"
+msgstr "變數"
+
+msgid "Yes"
+msgstr "是"
+
+msgid "No"
+msgstr "無"
+
+msgid "Auto"
+msgstr "自動"
+
+msgid ""
+"Enter your username and password or the root username and password to access "
+"this page."
+msgstr "輸入您的使用者名稱和密碼,或是系統管理者名稱和密碼,以存取此頁面。"
+
+msgid "You must use a https: URL to access this page."
+msgstr "您必須使用 https:URL 以存取此頁面。"
+
+#, c-format
+msgid "Bad request version number %d.%d!"
+msgstr "不當的請求版本號碼 %d.%d!"
+
+msgid "No attributes in request!"
+msgstr "在請求中沒有任何屬性!"
+
+#, c-format
+msgid "Attribute groups are out of order (%x < %x)!"
+msgstr "屬性群組超出順序 (%x < %x)!"
+
+msgid "Missing required attributes!"
+msgstr "缺少必要的屬性!"
+
+#, c-format
+msgid "%s not supported!"
+msgstr "不支援 %s!"
+
+msgid "The printer or class was not found."
+msgstr "找不到印表機或類別。"
+
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
+msgstr "printer-uri 必須是「ipp://主機名稱/classes/類別名稱」的形式。"
+
+#, c-format
+msgid "The printer-uri \"%s\" contains invalid characters."
+msgstr "printer-uri「%s」內含無效的字元。"
+
+#, c-format
+msgid "A printer named \"%s\" already exists!"
+msgstr "名為的印表機「%s」已經存在!"
+
+#, c-format
+msgid "Attempt to set %s printer-state to bad value %d!"
+msgstr "試圖去設定 %s printer-state 為不當的值 %d!"
+
+#, c-format
+msgid "add_class: Unknown printer-op-policy \"%s\"."
+msgstr "add_class:不明的 printer-op-policy「%s」。"
+
+#, c-format
+msgid "add_class: Unknown printer-error-policy \"%s\"."
+msgstr "add_class:不明的 printer-error-policy「%s」。"
+
+msgid "Unable to allocate memory for file types!"
+msgstr "無法配置用於檔案類型的記憶體!"
+
+#, c-format
+msgid "Character set \"%s\" not supported!"
+msgstr "不支援字元集「%s」!"
+
+#, c-format
+msgid "Language \"%s\" not supported!"
+msgstr "不支援語言「%s」!"
+
+#, c-format
+msgid "The notify-user-data value is too large (%d > 63 octets)!"
+msgstr "notify-user-data 值太大 (%d > 63 個八位元組)!"
+
+msgid ""
+"The notify-lease-duration attribute cannot be used with job subscriptions."
+msgstr "notify-lease-duration 屬性無法與工作預定一起使用。"
+
+msgid ""
+"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
+msgstr "printer-uri 必須是「ipp://主機名稱/printers/印表機名稱」的形式。"
+
+#, c-format
+msgid "A class named \"%s\" already exists!"
+msgstr "名為「%s」的類別已經存在!"
+
+#, c-format
+msgid ""
+"File device URIs have been disabled! To enable, see the FileDevice directive "
+"in \"%s/cupsd.conf\"."
+msgstr ""
+"檔案裝置 URIs 已停用!要啟用的話,參看「%s/cupsd.conf」中的 FileDevice 指令。"
+
+#, c-format
+msgid "Bad device-uri \"%s\"!"
+msgstr "不當的 device-uri「%s」!"
+
+#, c-format
+msgid "Bad port-monitor \"%s\"!"
+msgstr "不當的 port-monitor「%s」!"
+
+#, c-format
+msgid "Bad printer-state value %d!"
+msgstr "不當的 printer-state 值 %d!"
+
+#, c-format
+msgid "Unknown printer-op-policy \"%s\"."
+msgstr "不明的 printer-op-policy「%s」。"
+
+#, c-format
+msgid "Unknown printer-error-policy \"%s\"."
+msgstr "不明的 printer-error-policy「%s」。"
+
+#, c-format
+msgid "Unable to copy interface script - %s!"
+msgstr "無法複製介面命令稿 - %s!"
+
+#, c-format
+msgid "Unable to copy PPD file - %s!"
+msgstr "無法複製 PPD 檔案 - %s!"
+
+msgid "Unable to copy PPD file!"
+msgstr "無法複製 PPD 檔案!"
+
+msgid "Got a printer-uri attribute but no job-id!"
+msgstr "得到 printer-uri 屬性但是沒有 job-id!"
+
+#, c-format
+msgid "Bad job-uri attribute \"%s\"!"
+msgstr "不當的 job-uri 屬性「%s」!"
+
+#, c-format
+msgid "Job #%d doesn't exist!"
+msgstr "工作 #%d 不存在!"
+
+#, c-format
+msgid "Job #%d is not held for authentication!"
+msgstr "工作 #%d 並未被延遲以便驗證!"
+
+#, c-format
+msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
+msgstr "您未被授權去驗證由「%2$s」所擁有的工作 #%1$d!"
+
+msgid "The printer-uri attribute is required!"
+msgstr "printer-uri 屬性為必要的!"
+
+msgid "Missing requesting-user-name attribute!"
+msgstr "缺少 requesting-user-name 屬性!"
+
+#, c-format
+msgid "The printer-uri \"%s\" is not valid."
+msgstr "printer-uri「%s」並非有效。"
+
+#, c-format
+msgid "No active jobs on %s!"
+msgstr "於 %s 無作用中工作!"
+
+#, c-format
+msgid "You are not authorized to delete job #%d owned by \"%s\"!"
+msgstr "您未被授權去刪除由「%2$s」所擁有的工作 #%1$d!"
+
+#, c-format
+msgid "Job #%d is already %s - can't cancel."
+msgstr "工作 #%d 已經 %s - 無法取消。"
+
+msgid "The printer or class is not shared!"
+msgstr "印表機或類別並未共享!"
+
+#, c-format
+msgid "Destination \"%s\" is not accepting jobs."
+msgstr "目的印表機「%s」並未接受工作。"
+
+#, c-format
+msgid "Bad copies value %d."
+msgstr "不當的份數值 %d。"
+
+#, c-format
+msgid "Bad page-ranges values %d-%d."
+msgstr "不當的 page-ranges 值 %d-%d。"
+
+msgid "Too many active jobs."
+msgstr "太多作用中工作。"
+
+msgid "Quota limit reached."
+msgstr "達到配額限制。"
+
+#, c-format
+msgid "Unable to add job for destination \"%s\"!"
+msgstr "無法於目的印表機「%s」加入工作!"
+
+msgid "No subscription attributes in request!"
+msgstr "在請求中沒有訂用屬性!"
+
+msgid "notify-events not specified!"
+msgstr "notify-events 尚未指定!"
+
+#, c-format
+msgid "Job %d not found!"
+msgstr "找不到工作 %d!"
+
+msgid "No default printer"
+msgstr "無預設印表機"
+
+msgid "cups-deviced failed to execute."
+msgstr "cups-deviced 執行失敗。"
+
+msgid "cups-driverd failed to execute."
+msgstr "cups-driverd 執行失敗。"
+
+msgid "No destinations added."
+msgstr "無目的印表機加入。"
+
+#, c-format
+msgid "notify-subscription-id %d no good!"
+msgstr "notify-subscription-id %d 不良!"
+
+#, c-format
+msgid "Job #%s does not exist!"
+msgstr "工作 #%s 不存在!"
+
+#, c-format
+msgid "Job #%d does not exist!"
+msgstr "工作 #%d 不存在!"
+
+msgid "No subscriptions found."
+msgstr "找不到訂用記錄。"
+
+#, c-format
+msgid "Not authorized to hold job #%d owned by \"%s\"!"
+msgstr "未被授權暫停由「%2$s」所擁有的工作 #%1$d!"
+
+#, c-format
+msgid "Job #%d is finished and cannot be altered!"
+msgstr "工作 #%d 已完成而無法改變!"
+
+#, c-format
+msgid "You are not authorized to move job #%d owned by \"%s\"!"
+msgstr "您未被授權移動由「%2$s」所擁有的工作 #%1$d!"
+
+msgid "job-printer-uri attribute missing!"
+msgstr "缺少 job-printer-uri 屬性!"
+
+#, c-format
+msgid "Unsupported compression \"%s\"!"
+msgstr "不支援的壓縮「%s」!"
+
+msgid "No file!?!"
+msgstr "沒有檔案!?!"
+
+#, c-format
+msgid "Could not scan type \"%s\"!"
+msgstr "無法掃描型態「%s」!"
+
+#, c-format
+msgid "Unsupported format '%s/%s'!"
+msgstr "不支援的格式「%s/%s」!"
+
+msgid "Printer not shared!"
+msgstr "印表機未共享!"
+
+#, c-format
+msgid "Too many jobs - %d jobs, max jobs is %d."
+msgstr "太多工作 - %d 項工作,最大工作數為 %d。"
+
+#, c-format
+msgid "Job #%d is not held!"
+msgstr "工作 #%d 並未被延遲!"
+
+#, c-format
+msgid "You are not authorized to release job id %d owned by \"%s\"!"
+msgstr "您未被授權釋出由「%2$s」所擁有的工作識別號 %1$d!"
+
+#, c-format
+msgid "Job #%d is not complete!"
+msgstr "工作 #%d 並未完成!"
+
+#, c-format
+msgid "Job #%d cannot be restarted - no files!"
+msgstr "工作 #%d 無法重新啟動 - 沒有檔案!"
+
+#, c-format
+msgid "You are not authorized to restart job id %d owned by \"%s\"!"
+msgstr "您未被授權重新啟動由「%2$s」所擁有的工作識別號 %1$d!"
+
+#, c-format
+msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
+msgstr "您未被授權發送文件給「%2$s」所擁有的工作 #%1$d!"
+
+#, c-format
+msgid "Bad document-format \"%s\"!"
+msgstr "不當的文件格式「%s」!"
+
+#, c-format
+msgid "You are not authorized to alter job id %d owned by \"%s\"!"
+msgstr "您未被授權改變由「%2$s」所擁有的工作識別號 #%1$d!"
+
+#, c-format
+msgid "%s cannot be changed."
+msgstr "%s 無法變更。"
+
+msgid "Bad job-priority value!"
+msgstr "不當的工作優先值!"
+
+msgid "Job is completed and cannot be changed."
+msgstr "工作已完成而無法變更。"
+
+msgid "Bad job-state value!"
+msgstr "不當的工作狀態值!"
+
+msgid "Job state cannot be changed."
+msgstr "工作狀態無法變更。"
+
+#, c-format
+msgid "Unsupported compression attribute %s!"
+msgstr "不支援的壓縮屬性 %s!"
+
+#, c-format
+msgid "Unsupported format \"%s\"!"
+msgstr "不支援的格式「%s」!"
+
+#, c-format
+msgid "%s is not implemented by the CUPS version of lpc.\n"
+msgstr "%s 並未由 lpc 的 CUPS 版本所實作。\n"
+
+msgid ""
+"Commands may be abbreviated. Commands are:\n"
+"\n"
+"exit help quit status ?\n"
+msgstr ""
+"命令可以為縮寫。 命令是:\n"
+"\n"
+"exit help quit status ?\n"
+
+msgid "help\t\tget help on commands\n"
+msgstr "help\t\t取得對於命令的說明\n"
+
+msgid "status\t\tshow status of daemon and queue\n"
+msgstr "status\t\t顯示守護程式和佇列的狀況\n"
+
+msgid "?Invalid help command unknown\n"
+msgstr "?不明的無效求助命令\n"
+
+#, c-format
+msgid "\tprinter is on device '%s' speed -1\n"
+msgstr "\t印表機位於裝置「%s」速度 -1\n"
+
+msgid "\tqueuing is enabled\n"
+msgstr "\t排隊已啟用\n"
+
+msgid "\tqueuing is disabled\n"
+msgstr "\t排隊已停用\n"
+
+msgid "\tprinting is enabled\n"
+msgstr "\t列印已啟用\n"
+
+msgid "\tprinting is disabled\n"
+msgstr "\t列印已停用\n"
+
+msgid "\tno entries\n"
+msgstr "\t沒有項目\n"
+
+#, c-format
+msgid "\t%d entries\n"
+msgstr "\t%d 個項目\n"
+
+msgid "\tdaemon present\n"
+msgstr "\t守護程式存在\n"
+
+msgid "lpq: Unable to contact server!\n"
+msgstr "lpq:無法連上伺服器!\n"
+
+#, c-format
+msgid "%s: Sorry, no encryption support compiled in!\n"
+msgstr "%s:抱歉,加密支援沒有編譯進去!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s/%s\"!\n"
+msgstr "lpq:不明的目的印表機「%s/%s」!\n"
+
+#, c-format
+msgid "lpq: Unknown destination \"%s\"!\n"
+msgstr "lpq:不明的目的印表機「%s」!\n"
+
+#, c-format
+msgid ""
+"lp: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lp:錯誤 - %s 環境變數指稱到不存在的目的印表機「%s」!\n"
+
+msgid "lpq: error - no default destination available.\n"
+msgstr "lpq:錯誤 - 無預設目的印表機可用。\n"
+
+#, c-format
+msgid "lpq: get-jobs failed: %s\n"
+msgstr "lpq:get-jobs 失敗:%s\n"
+
+msgid ""
+"Rank Owner Pri Job Files Total Size\n"
+msgstr ""
+"等級 擁有人 優先 工作 檔案 總計 大小\n"
+
+msgid "Rank Owner Job File(s) Total Size\n"
+msgstr "等級 擁有人 工作 檔案 總計 大小\n"
+
+#, c-format
+msgid "%s: %-33.33s [job %d localhost]\n"
+msgstr "%s:%-33.33s [工作 %d 本地主機]\n"
+
+#, c-format
+msgid " %-39.39s %.0f bytes\n"
+msgstr " %-39.39s %.0f 位元組\n"
+
+#, c-format
+msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
+msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f 位元組\n"
+
+#, c-format
+msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
+msgstr "%-7s %-7.7s %-7d %-31.31s %.0f 位元組\n"
+
+msgid "no entries\n"
+msgstr "沒有項目\n"
+
+#, c-format
+msgid "lpq: get-printer-attributes failed: %s\n"
+msgstr "lpq:get-printer-attributes 失敗:%s\n"
+
+#, c-format
+msgid "%s is ready\n"
+msgstr "%s 已就緒\n"
+
+#, c-format
+msgid "%s is ready and printing\n"
+msgstr "%s 已就緒並正在列印\n"
+
+#, c-format
+msgid "%s is not ready\n"
+msgstr "%s 並未就緒\n"
+
+msgid "Usage: lpq [-P dest] [-l] [+interval]\n"
+msgstr "用法:lpq [-P 目的印表機] [-l] [+ 間隔]\n"
+
+#, c-format
+msgid "lpr: error - expected value after -%c option!\n"
+msgstr "lpr:錯誤 - 預期 -%c 選項之後有值!\n"
+
+#, c-format
+msgid ""
+"lpr: warning - '%c' format modifier not supported - output may not be "
+"correct!\n"
+msgstr "lpr:警告 - 不支援「%c」格式修飾鍵 - 輸出也許無法正確!\n"
+
+msgid "lpr: error - expected option=value after -o option!\n"
+msgstr "lpr:錯誤 - 預期 -o 選項之後有 option=value!\n"
+
+msgid "lpr: warning - email notification is not currently supported!\n"
+msgstr "lpr:警告 - 目前並未支援以電子郵件通知!\n"
+
+msgid "lpr: error - expected destination after -P option!\n"
+msgstr "lpr:錯誤 - 預期 -P 選項之後有目的印表機!\n"
+
+msgid "lpr: error - expected copy count after -# option!\n"
+msgstr "lpr:錯誤 - 預期 -# 選項之後有複製份數!\n"
+
+#, c-format
+msgid "lpr: error - expected name after -%c option!\n"
+msgstr "lpr:錯誤 - 預期 -%c 選項之後有名稱!\n"
+
+msgid "lpr: error - expected username after -U option!\n"
+msgstr "lpr:錯誤 - 預期 -U 選項之後有使用者名稱!\n"
+
+#, c-format
+msgid "lpr: error - unknown option '%c'!\n"
+msgstr "lpr:錯誤 - 不明的選項「%c」!\n"
+
+#, c-format
+msgid "lpr: error - unable to access \"%s\" - %s\n"
+msgstr "lpr:錯誤 - 無法存取「%s」- %s\n"
+
+#, c-format
+msgid "lpr: error - too many files - \"%s\"\n"
+msgstr "lpr:錯誤 - 太多檔案 -「%s」\n"
+
+#, c-format
+msgid ""
+"lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "lpr:錯誤 - %s 環境變數指稱不存在的目的印表機「%s」!\n"
+
+msgid "lpr: error - no default destination available.\n"
+msgstr "lpr:錯誤 - 無預設目的印表機可用。\n"
+
+msgid "lpr: error - scheduler not responding!\n"
+msgstr "lpr:錯誤 - 排程程式無反應!\n"
+
+#, c-format
+msgid "lpr: error - unable to create temporary file \"%s\" - %s\n"
+msgstr "lpr:錯誤 - 無法建立暫時檔案「%s」- %s\n"
+
+#, c-format
+msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lpr:錯誤 - 無法寫入暫時檔案「%s」- %s\n"
+
+msgid "lpr: error - stdin is empty, so no job has been sent.\n"
+msgstr "lpr:錯誤 - 標準輸入為空,因而無工作發出。\n"
+
+#, c-format
+msgid "lpr: error - unable to print file: %s\n"
+msgstr "lpr:錯誤 - 無法列印檔案:%s\n"
+
+msgid "lprm: Unable to contact server!\n"
+msgstr "lprm:無法連上伺服器!\n"
+
+#, c-format
+msgid "lprm: Unknown destination \"%s\"!\n"
+msgstr "lprm:不明的目的印表機「%s」!\n"
+
+#, c-format
+msgid "lprm: Unknown option '%c'!\n"
+msgstr "lprm:不明的選項「%c」!\n"
+
+msgid "lprm: Job or printer not found!\n"
+msgstr "lprm:工作或印表機找不到!\n"
+
+msgid "lprm: Not authorized to lprm job(s)!\n"
+msgstr "lprm:未被授權以 lprm 移除工作!\n"
+
+#, c-format
+msgid "lprm: You don't own job ID %d!\n"
+msgstr "lprm:您並不擁有工作識別號 %d!\n"
+
+msgid "lprm: Unable to lprm job(s)!\n"
+msgstr "lprm:無法以 lprm 移除工作!\n"
+
+msgid "lprm: Unable to cancel job(s)!\n"
+msgstr "lprm:無法取消工作!\n"
+
+#, c-format
+msgid "%s: Don't know what to do!\n"
+msgstr "%s:不知道要做什麼!\n"
+
+#, c-format
+msgid "%s: Expected server name after -h!\n"
+msgstr "%s:預期 -h 之後有伺服器名稱!\n"
+
+#, c-format
+msgid "%s: Expected reason text after -r!\n"
+msgstr "%s:預期 -r 之後有原因文字!\n"
+
+#, c-format
+msgid "%s: Unknown option '%c'!\n"
+msgstr "%s:不明的選項「%c」!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server: %s\n"
+msgstr "%s:無法連接伺服器:%s\n"
+
+#, c-format
+msgid "%s: Operation failed: %s\n"
+msgstr "%s:作業失敗:%s\n"
+
+msgid "cancel: Error - expected hostname after '-h' option!\n"
+msgstr "取消:錯誤 - 預期「-h」選項之後有主機名稱!\n"
+
+msgid "cancel: Error - expected username after '-u' option!\n"
+msgstr "取消:錯誤 - 預期「-u」選項之後有使用者名稱!\n"
+
+#, c-format
+msgid "cancel: Unknown option '%c'!\n"
+msgstr "取消:不明的選項「%c」!\n"
+
+#, c-format
+msgid "cancel: Unknown destination \"%s\"!\n"
+msgstr "取消:不明的目的印表機「%s」!\n"
+
+msgid "cancel: Unable to contact server!\n"
+msgstr "取消:無法連上伺服器!\n"
+
+#, c-format
+msgid "cancel: %s failed: %s\n"
+msgstr "取消:%s 失敗:%s\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing value on line %d!\n"
+msgstr "cupsaddsmb:在第 %d 列上缺少值!\n"
+
+#, c-format
+msgid "cupsaddsmb: Missing double quote on line %d!\n"
+msgstr "cupsaddsmb:在第 %d 列上缺少雙引號!\n"
+
+#, c-format
+msgid "cupsaddsmb: Bad option + choice on line %d!\n"
+msgstr "cupsaddsmb:在第 %d 列上有不當的選項 + 選擇!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to connect to server \"%s\" for %s - %s\n"
+msgstr "cupsaddsmb:無法連接伺服器「%s」用於 %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - skipping!\n"
+msgstr "cupsaddsmb:沒有用於印表機「%s」的 PPD 檔案- 跳過!\n"
+
+#, c-format
+msgid "cupsaddsmb: get-printer-attributes failed for \"%s\": %s\n"
+msgstr "cupsaddsmb:get-printer-attributes 用於「%s」時失敗:%s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to convert PPD file for %s - %s\n"
+msgstr "cupsaddsmb:無法轉換 PPD 檔案用於 %s - %s\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb:無法複製 Windows 2000 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "cupsaddsmb:無法複製 CUPS 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "cupsaddsmb:無法安裝 Windows 2000 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb:無法複製 Windows 9x 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "cupsaddsmb:無法安裝 Windows 9x 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
+msgstr "cupsaddsmb:無法設定 Windows 印表機驅動程式 (%d)!\n"
+
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+" cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+" -H samba-server Use the named SAMBA server\n"
+" -U samba-user Authenticate using the named SAMBA user\n"
+" -a Export all printers\n"
+" -h cups-server Use the named CUPS server\n"
+" -v Be verbose (show commands)\n"
+msgstr ""
+"用法:cupsaddsmb [選項] 印表機1…印表機N\n"
+" cupsaddsmb [選項] -a\n"
+"\n"
+"選項:\n"
+" -H samba-server 使用被點名的 SAMBA 伺服器\n"
+" -U samba-user 驗證使用被點名的 SAMBA 使用者\n"
+" -a 匯出所有印表機\n"
+" -h cups-server 使用被點名的 CUPS 伺服器\n"
+" -v 詳細輸出 (顯示命令)\n"
+
+msgid "cupstestppd: The -q option is incompatible with the -v option.\n"
+msgstr "cupstestppd:-q 選項與 -v 選項不相容。\n"
+
+msgid "cupstestppd: The -v option is incompatible with the -q option.\n"
+msgstr "cupstestppd:-v 選項與 -q 選項不相容。\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+" **FAIL** Unable to open PPD file - %s\n"
+msgstr ""
+" 失敗\n"
+" ** 失敗 ** 無法開啟 PPD 檔案 - %s\n"
+
+#, c-format
+msgid ""
+" FAIL\n"
+" **FAIL** Unable to open PPD file - %s on line %d.\n"
+msgstr ""
+" 失敗\n"
+" ** 失敗 ** 無法開啟 PPD 檔案 - %s 於第 %d 列。\n"
+
+msgid " REF: Page 42, section 5.2.\n"
+msgstr " 參考:頁面 42, 區段 5.2。\n"
+
+msgid " REF: Page 20, section 3.4.\n"
+msgstr " 參考:頁面 20, 區段 3.4。\n"
+
+msgid " REF: Pages 45-46, section 5.2.\n"
+msgstr " 參考:頁面 45-46, 區段 5.2。\n"
+
+msgid " REF: Pages 42-45, section 5.2.\n"
+msgstr " 參考:頁面 42-45, 區段 5.2。\n"
+
+msgid " REF: Pages 48-49, section 5.2.\n"
+msgstr " 參考:頁面 48-49, 區段 5.2。\n"
+
+msgid " REF: Pages 52-54, section 5.2.\n"
+msgstr " 參考:頁面 52-54, 區段 5.2。\n"
+
+msgid " REF: Page 15, section 3.2.\n"
+msgstr " 參考:頁面 15, 區段 3.2。\n"
+
+msgid " REF: Page 15, section 3.1.\n"
+msgstr " 參考:頁面 15, 區段 3.1。\n"
+
+msgid " REF: Pages 16-17, section 3.2.\n"
+msgstr " 參考:頁面 16-17, 區段 3.2。\n"
+
+msgid " REF: Page 19, section 3.3.\n"
+msgstr " 參考:頁面 19, 區段 3.3。\n"
+
+msgid " REF: Page 27, section 3.5.\n"
+msgstr " 參考:頁面 27, 區段 3.5。\n"
+
+msgid ""
+"\n"
+" DETAILED CONFORMANCE TEST RESULTS\n"
+msgstr ""
+"\n"
+" 詳細的符合性測試結果\n"
+
+#, c-format
+msgid " WARN %s has no corresponding options!\n"
+msgstr " 警告 %s 沒有相應選項!\n"
+
+msgid " FAIL\n"
+msgstr " 失敗\n"
+
+msgid ""
+" **FAIL** REQUIRED DefaultImageableArea\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 必要的 DefaultImageableArea\n"
+" 參考:頁面 102, 區段 5.15。\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD DefaultImageableArea %s!\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 不當的 DefaultImageableArea %s!\n"
+" 參考:頁面 102, 區段 5.15。\n"
+
+msgid " PASS DefaultImageableArea\n"
+msgstr " 略過 DefaultImageableArea\n"
+
+msgid ""
+" **FAIL** REQUIRED DefaultPaperDimension\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 必要的 DefaultPaperDimension\n"
+" 參考:頁面 103, 區段 5.15。\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD DefaultPaperDimension %s!\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 不當的 DefaultPaperDimension %s!\n"
+" 參考:頁面 103, 區段 5.15。\n"
+
+msgid " PASS DefaultPaperDimension\n"
+msgstr " 略過 DefaultPaperDimension\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD Default%s %s\n"
+" REF: Page 40, section 4.5.\n"
+msgstr ""
+" ** 失敗 ** 不當的預設 %s %s\n"
+" 參考:頁面 40, 區段 4.5。\n"
+
+#, c-format
+msgid " PASS Default%s\n"
+msgstr " 略過 預設 %s\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED Default%s\n"
+" REF: Page 40, section 4.5.\n"
+msgstr ""
+" ** 失敗 ** 必要的預設 %s\n"
+" 參考:頁面 40, 區段 4.5。\n"
+
+msgid " PASS FileVersion\n"
+msgstr " 略過 FileVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED FileVersion\n"
+" REF: Page 56, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 FileVersion\n"
+" 參考:頁面 56, 區段 5.3。\n"
+
+msgid " PASS FormatVersion\n"
+msgstr " 略過 FormatVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED FormatVersion\n"
+" REF: Page 56, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 FormatVersion\n"
+" 參考:頁面 56, 區段 5.3。\n"
+
+msgid " PASS LanguageEncoding\n"
+msgstr " 略過 LanguageEncoding\n"
+
+msgid ""
+" **FAIL** REQUIRED LanguageEncoding\n"
+" REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 LanguageEncoding\n"
+" 參考:頁面 56-57, 區段 5.3。\n"
+
+msgid " PASS LanguageVersion\n"
+msgstr " 略過 LanguageVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED LanguageVersion\n"
+" REF: Pages 57-58, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 LanguageVersion\n"
+" 參考:頁面 57-58, 區段 5.3。\n"
+
+msgid ""
+" **FAIL** BAD Manufacturer (should be \"HP\")\n"
+" REF: Page 211, table D.1.\n"
+msgstr ""
+" ** 失敗 ** 不當的製造商(應該是「HP」)\n"
+" 參考:頁面 211, 表格 D.1。\n"
+
+msgid " PASS Manufacturer\n"
+msgstr " 略過 製造商\n"
+
+msgid ""
+" **FAIL** REQUIRED Manufacturer\n"
+" REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的製造商\n"
+" 參考:頁面 58-59, 區段 5.3。\n"
+
+#, c-format
+msgid ""
+" **FAIL** BAD ModelName - \"%c\" not allowed in string.\n"
+" REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 不當的 ModelName -無法允許「%c」在字串中。\n"
+" 參考:頁面 59-60, 區段 5.3。\n"
+
+msgid " PASS ModelName\n"
+msgstr " 略過 ModelName\n"
+
+msgid ""
+" **FAIL** REQUIRED ModelName\n"
+" REF: Pages 59-60, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 ModelName\n"
+" 參考:頁面 59-60, 區段 5.3。\n"
+
+msgid " PASS NickName\n"
+msgstr " 略過 暱稱\n"
+
+msgid ""
+" **FAIL** REQUIRED NickName\n"
+" REF: Page 60, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的暱稱\n"
+" 參考:頁面 60, 區段 5.3。\n"
+
+msgid " PASS PageSize\n"
+msgstr " 略過 PageSize\n"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Pages 99-100, section 5.14.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PageSize\n"
+" 參考:頁面 99-100, 區段 5.14。\n"
+
+msgid " PASS PageRegion\n"
+msgstr " 略過 PageRegion\n"
+
+msgid ""
+" **FAIL** REQUIRED PageRegion\n"
+" REF: Page 100, section 5.14.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PageRegion\n"
+" 參考:頁面 100, 區段 5.14。\n"
+
+msgid " PASS PCFileName\n"
+msgstr " 略過 PCFileName\n"
+
+msgid ""
+" **FAIL** REQUIRED PCFileName\n"
+" REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PCFileName\n"
+" 參考:頁面 61-62, 區段 5.3。\n"
+
+msgid ""
+" **FAIL** BAD Product - not \"(string)\".\n"
+" REF: Page 62, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 不當的產品 - 不是「(字串)」。\n"
+" 參考:頁面 62, 區段 5.3。\n"
+
+msgid " PASS Product\n"
+msgstr " 略過 產品\n"
+
+msgid ""
+" **FAIL** REQUIRED Product\n"
+" REF: Page 62, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的產品\n"
+" 參考:頁面 62, 區段 5.3。\n"
+
+msgid ""
+" **FAIL** BAD PSVersion - not \"(string) int\".\n"
+" REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 不當的 PSVersion - 不是「(字串) int」。\n"
+" 參考:頁面 62-64, 區段 5.3。\n"
+
+msgid " PASS PSVersion\n"
+msgstr " 略過 PSVersion\n"
+
+msgid ""
+" **FAIL** REQUIRED PSVersion\n"
+" REF: Pages 62-64, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PSVersion\n"
+" 參考:頁面 62-64, 區段 5.3。\n"
+
+msgid ""
+" **FAIL** BAD ShortNickName - longer than 31 chars.\n"
+" REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 不當的 ShortNickName - 長度超過 31 個字元。\n"
+" 參考:頁面 64-65, 區段 5.3。\n"
+
+msgid " PASS ShortNickName\n"
+msgstr " 略過 ShortNickName\n"
+
+msgid ""
+" **FAIL** REQUIRED ShortNickName\n"
+" REF: Page 64-65, section 5.3.\n"
+msgstr ""
+" ** 失敗 ** 必要的 ShortNickName\n"
+" 參考:頁面 64-65, 區段 5.3。\n"
+
+msgid ""
+" **FAIL** BAD JobPatchFile attribute in file\n"
+" REF: Page 24, section 3.4.\n"
+msgstr ""
+" ** 失敗 ** 在檔案中不當的 JobPatchFile 屬性\n"
+" 參考:頁面 24, 區段 3.4。\n"
+
+msgid ""
+" **FAIL** REQUIRED PageSize\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 99, section 5.14.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PageSize\n"
+" 參考:頁面 41, 區段 5.\n"
+" 參考:頁面 99, 區段 5.14。\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED ImageableArea for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 102, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 必要的 ImageableArea 用於 PageSize %s\n"
+" 參考:頁面 41, 區段 5.\n"
+" 參考:頁面 102, 區段 5.15。\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED PaperDimension for PageSize %s\n"
+" REF: Page 41, section 5.\n"
+" REF: Page 103, section 5.15.\n"
+msgstr ""
+" ** 失敗 ** 必要的 PaperDimension 用於 PageSize %s\n"
+" 參考:頁面 41, 區段 5.\n"
+" 參考:頁面 103, 區段 5.15。\n"
+
+#, c-format
+msgid ""
+" **FAIL** Bad %s choice %s!\n"
+" REF: Page 84, section 5.9\n"
+msgstr ""
+" ** 失敗 ** 不當的 %s 選擇 %s!\n"
+" 參考:頁面 84, 區段 5.9\n"
+
+#, c-format
+msgid ""
+" **FAIL** REQUIRED %s does not define choice None!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" ** 失敗 ** 必要的 %s 未定義[不]選擇!\n"
+" 參考:頁面 122, 區段 5.17\n"
+
+#, c-format
+msgid ""
+" **FAIL** Bad %s choice %s!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" ** 失敗 ** 不當的 %s 選擇 %s!\n"
+" 參考:頁面 122, 區段 5.17\n"
+
+msgid " PASS\n"
+msgstr " 略過\n"
+
+#, c-format
+msgid ""
+" WARN Duplex option keyword %s should be named Duplex or "
+"JCLDuplex!\n"
+" REF: Page 122, section 5.17\n"
+msgstr ""
+" 警告 雙工選項關鍵字 %s 應該被稱為 Duplex 或 JCLDuplex!\n"
+" 參考:頁面 122, 區段 5.17\n"
+
+msgid " WARN Default choices conflicting!\n"
+msgstr " 警告 預設選擇衝突!\n"
+
+#, c-format
+msgid ""
+" WARN Obsolete PPD version %.1f!\n"
+" REF: Page 42, section 5.2.\n"
+msgstr ""
+" 警告 淘汰的 PPD 版本 %.1f!\n"
+" 參考:頁面 42, 區段 5.2。\n"
+
+msgid ""
+" WARN LanguageEncoding required by PPD 4.3 spec.\n"
+" REF: Pages 56-57, section 5.3.\n"
+msgstr ""
+" 警告 由 PPD 4.3 spec 所需的 LanguageEncoding。\n"
+" 參考:頁面 56-57, 區段 5.3。\n"
+
+msgid ""
+" WARN Manufacturer required by PPD 4.3 spec.\n"
+" REF: Pages 58-59, section 5.3.\n"
+msgstr ""
+" 警告 由 PPD 4.3 spec 所需的製造商。\n"
+" 參考:頁面 58-59, 區段 5.3。\n"
+
+msgid ""
+" WARN PCFileName longer than 8.3 in violation of PPD spec.\n"
+" REF: Pages 61-62, section 5.3.\n"
+msgstr ""
+" 警告 PCFileName 長度超過 8.3 而違反了 PPD 的 spec。\n"
+" 參考:頁面 61-62, 區段 5.3。\n"
+
+msgid ""
+" WARN ShortNickName required by PPD 4.3 spec.\n"
+" REF: Pages 64-65, section 5.3.\n"
+msgstr ""
+" 警告 由 PPD 4.3 spec 所需的 ShortNickName。\n"
+" 參考:頁面 64-65, 區段 5.3。\n"
+
+msgid ""
+" WARN Protocols contains both PJL and BCP; expected TBCP.\n"
+" REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+" 警告 含有 PJL 和 BCP 兩者的協定;預期為 TBCP。\n"
+" 參考:頁面 78-79, 區段 5.7。\n"
+
+msgid ""
+" WARN Protocols contains PJL but JCL attributes are not set.\n"
+" REF: Pages 78-79, section 5.7.\n"
+msgstr ""
+" 警告 協定含有 PJL 但是 JCL 屬性未設定。\n"
+" 參考:頁面 78-79, 區段 5.7。\n"
+
+#, c-format
+msgid ""
+" WARN %s shares a common prefix with %s\n"
+" REF: Page 15, section 3.2.\n"
+msgstr ""
+" 警告 %s 分享共同的 %s 字首\n"
+" 參考:頁面 15, 區段 3.2。\n"
+
+#, c-format
+msgid " %d ERROR%s FOUND\n"
+msgstr " 找到 %d 個錯誤%s\n"
+
+msgid " NO ERRORS FOUND\n"
+msgstr " 沒有找到錯誤\n"
+
+#, c-format
+msgid ""
+" WARN \"%s %s\" conflicts with \"%s %s\"\n"
+" (constraint=\"%s %s %s %s\")\n"
+msgstr ""
+" 警告 「%s %s」與「%s %s」產生衝突\n"
+" (條件約束=「%s %s %s %s」)\n"
+
+msgid ""
+"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[."
+"gz]]\n"
+" program | cupstestppd [-q] [-r] [-v[v]] -\n"
+msgstr ""
+"用法:cupstestppd [-q] [-r] [-v[v]] 檔案名稱1.ppd [.gz] [...檔案名稱N.ppd [."
+"gz]]\n"
+" 程式 | cupstestppd [-q] [-r] [-v[v]] -\n"
+
+msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
+msgstr "lpstat:-W 之後需要「completed」或「not-completed」!\n"
+
+msgid "lpstat: The -b option requires a destination argument.\n"
+msgstr "lpstat: -b 選項需要目的印表機的引數。\n"
+
+msgid "Error: need hostname after '-h' option!\n"
+msgstr "錯誤:「-h」選項之後需要主機名稱!\n"
+
+#, c-format
+msgid "lpstat: Unknown option '%c'!\n"
+msgstr "lpstat:不明的選項「%c」!\n"
+
+#, c-format
+msgid "lpstat: Invalid destination name in list \"%s\"!\n"
+msgstr "lpstat:在表列「%s」中存在無效的目的印表機名稱!\n"
+
+#, c-format
+msgid "lpstat: Unknown destination \"%s\"!\n"
+msgstr "lpstat:不明的目的印表機「%s」!\n"
+
+#, c-format
+msgid "lpstat: Unable to connect to server %s on port %d: %s\n"
+msgstr "lpstat:無法以連接埠 %2$d 連接伺服器 %1$s:%3$s\n"
+
+#, c-format
+msgid "lpstat: get-printers failed: %s\n"
+msgstr "lpstat:get-printers 失敗:%s\n"
+
+#, c-format
+msgid "%s accepting requests since Jan 01 00:00\n"
+msgstr "%s 從 Jan 01 00:00 起接受請求\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s 從 Jan 01 00:00 起無法接受請求 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since Jan 01 00:00\n"
+msgstr "%s/%s 從 Jan 01 00:00 起接受請求\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since Jan 01 00:00 -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s 從 Jan 01 00:00 起無法接受請求 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "lpstat: get-classes failed: %s\n"
+msgstr "lpstat:get-classes 失敗:%s\n"
+
+#, c-format
+msgid "members of class %s:\n"
+msgstr "成員的類別 %s:\n"
+
+#, c-format
+msgid "system default destination: %s/%s\n"
+msgstr "系統預設目的印表機:%s/%s\n"
+
+#, c-format
+msgid "system default destination: %s\n"
+msgstr "系統預設目的印表機:%s\n"
+
+#, c-format
+msgid ""
+"lpstat: error - %s environment variable names non-existent destination \"%s"
+"\"!\n"
+msgstr "lpstat:錯誤 - %s 環境變數指稱不存在的目的印表機「%s」!\n"
+
+msgid "no system default destination\n"
+msgstr "無系統預設目的印表機\n"
+
+#, c-format
+msgid "Output for printer %s is sent to remote printer %s on %s\n"
+msgstr "給印表機 %1$s 的輸出已發送到位於 %3$s 的遠端印表機 %2$s\n"
+
+#, c-format
+msgid "Output for printer %s is sent to %s\n"
+msgstr "給印表機 %s 的輸出已發送到 %s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
+msgstr "給印表機 %1$s/%2$s 的輸出已發送到位於 %4$s 的遠端印表機 %3$s\n"
+
+#, c-format
+msgid "Output for printer %s/%s is sent to %s\n"
+msgstr "給印表機 %s/%s 的輸出已發送到 %s\n"
+
+#, c-format
+msgid "device for %s: %s\n"
+msgstr "裝置用於 %s:%s\n"
+
+#, c-format
+msgid "device for %s/%s: %s\n"
+msgstr "裝置用於 %s/%s:%s\n"
+
+#, c-format
+msgid "lpstat: get-jobs failed: %s\n"
+msgstr "lpstat:get-jobs 失敗:%s\n"
+
+#, c-format
+msgid "\tqueued for %s\n"
+msgstr "\t已加入佇列於 %s\n"
+
+#, c-format
+msgid "printer %s is idle. enabled since %s\n"
+msgstr "印表機 %s 為閒置。從 %s 起已啟用\n"
+
+#, c-format
+msgid "printer %s now printing %s-%d. enabled since %s\n"
+msgstr "印表機 %s 正在列印 %s-%d。從 %s 起已啟用\n"
+
+#, c-format
+msgid "printer %s disabled since %s -\n"
+msgstr "印表機 %s 從 %s 起已停用 -\n"
+
+msgid "\treason unknown\n"
+msgstr "\t原因不詳\n"
+
+msgid ""
+"\tForm mounted:\n"
+"\tContent types: any\n"
+"\tPrinter types: unknown\n"
+msgstr ""
+"\t形式掛載:\n"
+"\t內容類型:任何\n"
+"\t印表機類型:不明\n"
+
+#, c-format
+msgid "\tDescription: %s\n"
+msgstr "\t描述:%s\n"
+
+msgid "\tAlerts:"
+msgstr "\t警示:"
+
+#, c-format
+msgid "\tLocation: %s\n"
+msgstr "\t位置:%s\n"
+
+msgid "\tConnection: remote\n"
+msgstr "\t連接:遠端\n"
+
+#, c-format
+msgid "\tInterface: %s.ppd\n"
+msgstr "\t介面:%s.ppd\n"
+
+msgid "\tConnection: direct\n"
+msgstr "\t連接:直接\n"
+
+#, c-format
+msgid "\tInterface: %s/interfaces/%s\n"
+msgstr "\t介面:%s/介面/%s\n"
+
+#, c-format
+msgid "\tInterface: %s/ppd/%s.ppd\n"
+msgstr "\t介面:%s/ppd/%s.ppd\n"
+
+msgid "\tOn fault: no alert\n"
+msgstr "\t於失誤:無警示\n"
+
+msgid "\tAfter fault: continue\n"
+msgstr "\t失誤之後:繼續\n"
+
+msgid "\tUsers allowed:\n"
+msgstr "\t允許的使用者:\n"
+
+msgid "\tUsers denied:\n"
+msgstr "\t被拒的使用者:\n"
+
+msgid "\t\t(all)\n"
+msgstr "\t\t(所有)\n"
+
+msgid "\tForms allowed:\n"
+msgstr "\t允許的形式:\n"
+
+msgid "\t\t(none)\n"
+msgstr "\t\t(無一)\n"
+
+msgid "\tBanner required\n"
+msgstr "\t需要的橫幅\n"
+
+msgid "\tCharset sets:\n"
+msgstr "\t字元集設定:\n"
+
+msgid "\tDefault pitch:\n"
+msgstr "\t預設間距:\n"
+
+msgid "\tDefault page size:\n"
+msgstr "\t預設頁面大小:\n"
+
+msgid "\tDefault port settings:\n"
+msgstr "\t預設連接埠設定值:\n"
+
+#, c-format
+msgid "printer %s/%s is idle. enabled since %s\n"
+msgstr "印表機 %s/%s 為閒置。從 %s 起已啟用\n"
+
+#, c-format
+msgid "printer %s/%s now printing %s-%d. enabled since %s\n"
+msgstr "印表機 %s/%s 正在列印 %s-%d。從 %s 起已啟用\n"
+
+#, c-format
+msgid "printer %s/%s disabled since %s -\n"
+msgstr "印表機 %s/%s 從 %s 起已停用 -\n"
+
+msgid "scheduler is running\n"
+msgstr "排程程式執行中\n"
+
+msgid "scheduler is not running\n"
+msgstr "排程程式並未執行\n"
+
+#, c-format
+msgid "lpadmin: Unable to connect to server: %s\n"
+msgstr "lpadmin:無法連接伺服器:%s\n"
+
+msgid ""
+"lpadmin: Unable to add a printer to the class:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法加入印表機到類別:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected class name after '-c' option!\n"
+msgstr "lpadmin:「-c」選項之後預期為類別名稱!\n"
+
+msgid "lpadmin: Class name can only contain printable characters!\n"
+msgstr "lpadmin:類別名稱只能包含可列印字元!\n"
+
+msgid "lpadmin: Expected printer name after '-d' option!\n"
+msgstr "lpadmin:「-d」選項之後預期為印表機名稱!\n"
+
+msgid "lpadmin: Printer name can only contain printable characters!\n"
+msgstr "lpadmin:印表機名稱只能包含可列印字元!\n"
+
+msgid "lpadmin: Expected hostname after '-h' option!\n"
+msgstr "lpadmin:「-h」選項之後預期為主機名稱!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定介面命令稿:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected interface after '-i' option!\n"
+msgstr "lpadmin:「-i」選項之後預期為介面!\n"
+
+msgid ""
+"lpadmin: Unable to set the interface script or PPD file:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定介面命令稿或 PPD 檔案:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected model after '-m' option!\n"
+msgstr "lpadmin:「-m」選項之後預期為型號!\n"
+
+msgid "lpadmin: Expected name=value after '-o' option!\n"
+msgstr "lpadmin:「-o」選項之後預期為名稱=值!\n"
+
+msgid "lpadmin: Expected printer after '-p' option!\n"
+msgstr "lpadmin:「-p」選項之後預期為印表機!\n"
+
+msgid ""
+"lpadmin: Unable to remove a printer from the class:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法從類別移除印表機:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected class after '-r' option!\n"
+msgstr "lpadmin:「-r」選項之後預期為類別!\n"
+
+msgid "lpadmin: Expected allow/deny:userlist after '-u' option!\n"
+msgstr "lpadmin:「-u」選項之後預期為允許/拒絕:使用者串列!\n"
+
+#, c-format
+msgid "lpadmin: Unknown allow/deny option \"%s\"!\n"
+msgstr "lpadmin:不明的允許/拒絕選項「%s」!\n"
+
+msgid ""
+"lpadmin: Unable to set the device URI:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定裝置的 URI:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected device URI after '-v' option!\n"
+msgstr "lpadmin:「-v」選項之後預期為裝置的 URI!\n"
+
+msgid "lpadmin: Expected printer or class after '-x' option!\n"
+msgstr "lpadmin:「-x」選項之後預期為印表機或類別!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer description:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定印表機描述:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected description after '-D' option!\n"
+msgstr "lpadmin:「-D」選項之後預期為描述!\n"
+
+msgid "lpadmin: Expected file type(s) after '-I' option!\n"
+msgstr "lpadmin:「-I」選項之後預期為檔案類型!\n"
+
+msgid "lpadmin: Warning - content type list ignored!\n"
+msgstr "lpadmin:警告 - 內容類型表列被忽略!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer location:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定印表機位置:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected location after '-L' option!\n"
+msgstr "lpadmin:「-L」選項之後預期為位置!\n"
+
+msgid ""
+"lpadmin: Unable to set the PPD file:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定 PPD 檔案:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid "lpadmin: Expected PPD after '-P' option!\n"
+msgstr "lpadmin:「-P」選項之後預期為 PPD!\n"
+
+#, c-format
+msgid "lpadmin: Unknown option '%c'!\n"
+msgstr "lpadmin:不明的選項「%c」!\n"
+
+#, c-format
+msgid "lpadmin: Unknown argument '%s'!\n"
+msgstr "lpadmin:不明的引數「%s」!\n"
+
+msgid ""
+"lpadmin: Unable to set the printer options:\n"
+" You must specify a printer name first!\n"
+msgstr ""
+"lpadmin:無法設定印表機選項:\n"
+" 您必須先指定印表機名稱!\n"
+
+msgid ""
+"Usage:\n"
+"\n"
+" lpadmin [-h server] -d destination\n"
+" lpadmin [-h server] -x destination\n"
+" lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n"
+" [-r remove-class] [-v device] [-D description]\n"
+" [-P ppd-file] [-o name=value]\n"
+" [-u allow:user,user] [-u deny:user,user]\n"
+"\n"
+msgstr ""
+"用法:\n"
+"\n"
+" lpadmin [-h 伺服器] -d 目的印表機\n"
+" lpadmin [-h 伺服器] -x 目的印表機\n"
+" lpadmin [-h 伺服器] -p 印表機 [-c 要加入的類別] [-i 介面] [-m 型號]\n"
+" [-r 要移除的類別] [-v 裝置] [-D 描述]\n"
+" [-P PPD-檔案] [-o 名稱=值]\n"
+" [-u allow:使用者,使用者] [-u deny:使用者,使用者]\n"
+"\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file: %s\n"
+msgstr "lpadmin:無法建立暫時檔案:%s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open file \"%s\": %s\n"
+msgstr "lpadmin:無法開啟檔案「%s」:%s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set model) failed: %s\n"
+msgstr "lpadmin:加入印表機 (設定型號) 失敗:%s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set description) failed: %s\n"
+msgstr "lpadmin:加入印表機 (設定描述) 失敗:%s\n"
+
+#, c-format
+msgid "lpadmin: add-printer (set location) failed: %s\n"
+msgstr "lpadmin:加入印表機 (設定位置) 失敗:%s\n"
+
+#, c-format
+msgid "lpadmin: Unable to create temporary file - %s\n"
+msgstr "lpadmin:無法建立暫時檔案 - %s\n"
+
+#, c-format
+msgid "lpadmin: Unable to open PPD file \"%s\" - %s\n"
+msgstr "lpadmin:無法開啟 PPD 檔案「%s」- %s\n"
+
+#, c-format
+msgid "lpadmin: %s failed: %s\n"
+msgstr "lpadmin:%s 失敗:%s\n"
+
+msgid "lp: Expected destination after -d option!\n"
+msgstr "lp:-d 選項之後預期為目的印表機!\n"
+
+msgid "lp: Expected form after -f option!\n"
+msgstr "lp:-f 選項之後預期為形式!\n"
+
+msgid "lp: Expected hostname after -h option!\n"
+msgstr "lp:-h 選項之後預期為主機名稱!\n"
+
+msgid "lp: Expected job ID after -i option!\n"
+msgstr "lp:-i 選項之後預期為工作識別號!\n"
+
+msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "lp:錯誤 - 無法同步列印檔案和改變工作!\n"
+
+msgid "lp: Error - bad job ID!\n"
+msgstr "lp:錯誤 - 不當的工作識別號!\n"
+
+msgid "lp: Expected copies after -n option!\n"
+msgstr "lp:-n 選項之後預期為份數!\n"
+
+msgid "lp: Expected option string after -o option!\n"
+msgstr "lp:-o 選項之後預期為選項字串!\n"
+
+#, c-format
+msgid "lp: Expected priority after -%c option!\n"
+msgstr "lp:-%c 選項之後預期為優先權!\n"
+
+msgid "lp: Priority must be between 1 and 100.\n"
+msgstr "lp:優先權必須在 1 和 100 之間。\n"
+
+msgid "lp: Expected title after -t option!\n"
+msgstr "lp:-t 選項之後預期為標題!\n"
+
+msgid "lp: Expected mode list after -y option!\n"
+msgstr "lp:-y 選項之後預期為模式串列!\n"
+
+msgid "lp: Warning - mode option ignored!\n"
+msgstr "lp:警告 - 模式選項被忽略!\n"
+
+msgid "lp: Expected hold name after -H option!\n"
+msgstr "lp:-H 選項之後預期為延遲名稱!\n"
+
+msgid "lp: Need job ID (-i) before \"-H restart\"!\n"
+msgstr "lp:「-H restart」之前需要工作識別號 (-i)!\n"
+
+msgid "lp: Expected page list after -P option!\n"
+msgstr "lp:-P 選項之後預期為頁面表列!\n"
+
+msgid "lp: Expected character set after -S option!\n"
+msgstr "lp:-S 選項之後預期為字元集!\n"
+
+msgid "lp: Warning - character set option ignored!\n"
+msgstr "lp:警告 - 字元集選項被忽略!\n"
+
+msgid "lp: Expected content type after -T option!\n"
+msgstr "lp:-T 選項之後預期為內容類型!\n"
+
+msgid "lp: Warning - content type option ignored!\n"
+msgstr "lp:警告 - 內容類型選項被忽略!\n"
+
+#, c-format
+msgid "lp: Unknown option '%c'!\n"
+msgstr "lp:不明的選項「%c」!\n"
+
+msgid ""
+"lp: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "lp:錯誤 - 如果提供了檔案或工作識別號,就無法從標準輸入列印!\n"
+
+#, c-format
+msgid "lp: Unable to access \"%s\" - %s\n"
+msgstr "lp:無法存取「%s」- %s\n"
+
+#, c-format
+msgid "lp: Too many files - \"%s\"\n"
+msgstr "lp:太多檔案 -「%s」\n"
+
+msgid "lp: error - no default destination available.\n"
+msgstr "lp:錯誤 - 無預設目的印表機可用。\n"
+
+msgid "lp: error - scheduler not responding!\n"
+msgstr "lp:錯誤 - 排程程式無反應!\n"
+
+#, c-format
+msgid "lp: unable to create temporary file \"%s\" - %s\n"
+msgstr "lp:無法建立暫時檔案「%s」- %s\n"
+
+#, c-format
+msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "lp:錯誤 - 無法寫入到暫時檔案「%s」- %s\n"
+
+msgid "lp: stdin is empty, so no job has been sent.\n"
+msgstr "lp:標準輸入為空,因而沒有發送任何工作。\n"
+
+#, c-format
+msgid "lp: unable to print file: %s\n"
+msgstr "lp:無法列印檔案:%s\n"
+
+#, c-format
+msgid "request id is %s-%d (%d file(s))\n"
+msgstr "請求識別號為 %s-%d (%d 個檔案)\n"
+
+#, c-format
+msgid "lp: restart-job failed: %s\n"
+msgstr "lp:重新啟動工作時失敗:%s\n"
+
+#, c-format
+msgid "lp: set-job-attributes failed: %s\n"
+msgstr "lp:設置工作屬性時失敗:%s\n"
+
+#, c-format
+msgid "lpinfo: Unable to connect to server: %s\n"
+msgstr "lpinfo:無法連接伺服器:%s\n"
+
+#, c-format
+msgid "lpinfo: Unknown option '%c'!\n"
+msgstr "lpinfo:不明的選項「%c」!\n"
+
+#, c-format
+msgid "lpinfo: Unknown argument '%s'!\n"
+msgstr "lpinfo:不明的引數「%s」!\n"
+
+#, c-format
+msgid "lpinfo: cups-get-devices failed: %s\n"
+msgstr "lpinfo:cups 取得裝置時失敗:%s\n"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+msgstr ""
+"裝置:uri = %s\n"
+" 類別 = %s\n"
+" 資訊 = %s\n"
+" 廠商與型號 = %s\n"
+
+#, c-format
+msgid "lpinfo: cups-get-ppds failed: %s\n"
+msgstr "lpinfo:cups 取得 PPD 時失敗:%s\n"
+
+#, c-format
+msgid ""
+"Model: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+msgstr ""
+"型號: 名稱 = %s\n"
+" 自然語言 = %s\n"
+" 廠商與型號 = %s\n"
+
+#, c-format
+msgid "lpmove: Unknown option '%c'!\n"
+msgstr "lpmove:不明的選項「%c」!\n"
+
+#, c-format
+msgid "lpmove: Unknown argument '%s'!\n"
+msgstr "lpmove:不明的引數「%s」!\n"
+
+msgid "Usage: lpmove job dest\n"
+msgstr "用法:lpmove 工作 目的印表機\n"
+
+#, c-format
+msgid "lpmove: Unable to connect to server: %s\n"
+msgstr "lpmove:無法連接伺服器:%s\n"
+
+#, c-format
+msgid "lpmove: move-job failed: %s\n"
+msgstr "lpmove:移動工作時失敗:%s\n"
+
+msgid "lpoptions: Unknown printer or class!\n"
+msgstr "lpoptions:不明的印表機或類別!\n"
+
+msgid "lpoptions: No printers!?!\n"
+msgstr "lpoptions:沒有印表機 !?!\n"
+
+#, c-format
+msgid "lpoptions: Unable to add printer or instance: %s\n"
+msgstr "lpoptions:無法加入印表機或實體:%s\n"
+
+#, c-format
+msgid "lpoptions: Destination %s has no PPD file!\n"
+msgstr "lpoptions:目的印表機 %s 沒有 PPD 檔案!\n"
+
+#, c-format
+msgid "lpoptions: Unable to open PPD file for %s!\n"
+msgstr "lpoptions:無法開啟用於 %s 的 PPD 檔案!\n"
+
+msgid ""
+"Usage: lpoptions [-h server] [-E] -d printer\n"
+" lpoptions [-h server] [-E] [-p printer] -l\n"
+" lpoptions [-h server] [-E] -p printer -o option[=value] ...\n"
+" lpoptions [-h server] [-E] -x printer\n"
+msgstr ""
+"用法:lpoptions [-h 伺服器] [-E] -d 印表機\n"
+" lpoptions [-h 伺服器] [-E] [-p 印表機] -l\n"
+" lpoptions [-h 伺服器] [-E] -p 印表機 -o 選項[=值]…\n"
+" lpoptions [-h 伺服器] [-E] -x 印表機\n"
+
+msgid "lppasswd: Only root can add or delete passwords!\n"
+msgstr "lppasswd:只有 root 可以加入或刪除密碼!\n"
+
+msgid "Enter old password:"
+msgstr "輸入舊的密碼:"
+
+#, c-format
+msgid "lppasswd: Unable to copy password string: %s\n"
+msgstr "lppasswd:無法複製密碼字串:%s\n"
+
+msgid "Enter password:"
+msgstr "輸入密碼:"
+
+msgid "Enter password again:"
+msgstr "再次輸入密碼:"
+
+msgid "lppasswd: Sorry, passwords don't match!\n"
+msgstr "lppasswd:抱歉,密碼不相符!\n"
+
+msgid ""
+"lppasswd: Sorry, password rejected.\n"
+"Your password must be at least 6 characters long, cannot contain\n"
+"your username, and must contain at least one letter and number.\n"
+msgstr ""
+"lppasswd:抱歉,密碼被拒絕。\n"
+" 您的密碼長度必須至少 6 個字元,不可包含\n"
+" 您的使用者名稱,並且必須包含至少一個字母和數字。\n"
+
+msgid "lppasswd: Password file busy!\n"
+msgstr "lppasswd:密碼檔案使用中!\n"
+
+#, c-format
+msgid "lppasswd: Unable to open password file: %s\n"
+msgstr "lppasswd:無法開啟密碼檔案:%s\n"
+
+#, c-format
+msgid "lppasswd: Unable to write to password file: %s\n"
+msgstr "lppasswd:無法寫入密碼檔案:%s\n"
+
+#, c-format
+msgid "lppasswd: user \"%s\" and group \"%s\" do not exist.\n"
+msgstr "lppasswd:使用者「%s」及群組「%s」不存在。\n"
+
+msgid "lppasswd: Sorry, password doesn't match!\n"
+msgstr "lppasswd:抱歉,密碼不相符!\n"
+
+msgid "lppasswd: Password file not updated!\n"
+msgstr "lppasswd:密碼檔案無法更新!\n"
+
+#, c-format
+msgid "lppasswd: failed to backup old password file: %s\n"
+msgstr "lppasswd:備份舊的密碼檔案時失敗:%s\n"
+
+#, c-format
+msgid "lppasswd: failed to rename password file: %s\n"
+msgstr "lppasswd:重新命名密碼檔案時失敗:%s\n"
+
+msgid "Usage: lppasswd [-g groupname]\n"
+msgstr "用法:lppasswd [-g groupname]\n"
+
+msgid ""
+"Usage: lppasswd [-g groupname] [username]\n"
+" lppasswd [-g groupname] -a [username]\n"
+" lppasswd [-g groupname] -x [username]\n"
+msgstr ""
+"用法:lppasswd [-g 群組名稱] [使用者名稱]\n"
+" lppasswd [-g 群組名稱] -a [使用者名稱]\n"
+" lppasswd [-g 群組名稱] -x [使用者名稱]\n"
+
+msgid "Start Printer"
+msgstr "啟動印表機"
+
+msgid "Stop Printer"
+msgstr "停止印表機"
+
+msgid "Start Class"
+msgstr "啟動類別"
+
+msgid "Stop Class"
+msgstr "停止類別"
+
+msgid "Accept Jobs"
+msgstr "接受工作"
+
+msgid "Reject Jobs"
+msgstr "拒絕工作"
+
+msgid "Purge Jobs"
+msgstr "清除工作"
+
+msgid "Set As Default"
+msgstr "設成預設值"
+
+msgid "Administration"
+msgstr "管理"
+
+msgid "Modify Class"
+msgstr "修改類別"
+
+msgid "Add Class"
+msgstr "加入類別"
+
+msgid ""
+"The class name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr ""
+"類別名稱最多只能包含 127 個可列印字元,而且不可包含空格、斜線(/),或井字符號"
+"(#)。"
+
+msgid "Unable to modify class:"
+msgstr "無法修改類別:"
+
+msgid "Unable to add class:"
+msgstr "無法加入類別:"
+
+msgid "Modify Printer"
+msgstr "修改印表機"
+
+msgid "Add Printer"
+msgstr "加入印表機"
+
+msgid ""
+"The printer name may only contain up to 127 printable characters and may not "
+"contain spaces, slashes (/), or the pound sign (#)."
+msgstr ""
+"印表機名稱最多只能包含 127 個可列印字元,而且不可包含空格、斜線(/),或井字符"
+"號(#)。"
+
+msgid "Unable to get list of printer drivers:"
+msgstr "無法取得印表機驅動程式清單:"
+
+msgid "Unable to modify printer:"
+msgstr "無法修改印表機:"
+
+msgid "Unable to add printer:"
+msgstr "無法加入印表機:"
+
+msgid "Set Printer Options"
+msgstr "設定印表機選項"
+
+msgid "Missing form variable!"
+msgstr "缺少形式變數!"
+
+msgid "Unable to get PPD file!"
+msgstr "無法取得 PPD 檔案!"
+
+msgid "Unable to open PPD file:"
+msgstr "無法開啟 PPD 檔案:"
+
+msgid "Banners"
+msgstr "橫幅"
+
+msgid "Starting Banner"
+msgstr "開始橫幅"
+
+msgid "Ending Banner"
+msgstr "結束橫幅"
+
+msgid "Policies"
+msgstr "策略"
+
+msgid "Error Policy"
+msgstr "錯誤時策略"
+
+msgid "Operation Policy"
+msgstr "作業時策略"
+
+msgid "PS Binary Protocol"
+msgstr "PS 二進位協定"
+
+msgid "None"
+msgstr "無一"
+
+msgid "Unable to set options:"
+msgstr "無法設定選項:"
+
+msgid "Change Settings"
+msgstr "變更設定值"
+
+msgid "Unable to change server settings:"
+msgstr "無法變更伺服器設定值:"
+
+msgid "Unable to upload cupsd.conf file:"
+msgstr "無法上傳 cupsd.conf 檔案:"
+
+msgid "Edit Configuration File"
+msgstr "編輯組態檔案"
+
+msgid "Unable to create temporary file:"
+msgstr "無法建立暫時檔案:"
+
+msgid "Unable to access cupsd.conf file:"
+msgstr "無法存取 cupsd.conf 檔案:"
+
+msgid "Unable to edit cupsd.conf files larger than 1MB!"
+msgstr "無法編輯 cupsd.conf 檔案大於 1 MB!"
+
+msgid "Delete Class"
+msgstr "刪除類別"
+
+msgid "Unable to delete class:"
+msgstr "無法刪除類別:"
+
+msgid "Delete Printer"
+msgstr "刪除印表機"
+
+msgid "Unable to delete printer:"
+msgstr "無法刪除印表機:"
+
+msgid "Export Printers to Samba"
+msgstr "匯出印表機到 Samba"
+
+msgid "Unable to fork process!"
+msgstr "無法衍生進程!"
+
+msgid "Unable to connect to server!"
+msgstr "無法連接伺服器!"
+
+msgid "Unable to get printer attributes!"
+msgstr "無法取得印表機屬性!"
+
+msgid "Unable to convert PPD file!"
+msgstr "無法轉換 PPD 檔案!"
+
+msgid "Unable to copy Windows 2000 printer driver files!"
+msgstr "無法複製 Windows 2000 印表機驅動程式檔案!"
+
+msgid "Unable to install Windows 2000 printer driver files!"
+msgstr "無法安裝 Windows 2000 印表機驅動程式檔案!"
+
+msgid "Unable to copy Windows 9x printer driver files!"
+msgstr "無法複製 Windows 9x 印表機驅動程式檔案!"
+
+msgid "Unable to install Windows 9x printer driver files!"
+msgstr "無法安裝 Windows 9x 印表機驅動程式檔案!"
+
+msgid "Unable to set Windows printer driver!"
+msgstr "無法設定 Windows 印表機驅動程式!"
+
+msgid "No printer drivers found!"
+msgstr "找不到印表機驅動程式!"
+
+msgid "Unable to execute cupsaddsmb command!"
+msgstr "無法執行 cupsaddsmb 命令!"
+
+#, c-format
+msgid "cupsaddsmb failed with status %d"
+msgstr "cupsaddsmb 失敗時狀態 %d"
+
+#, c-format
+msgid "cupsaddsmb crashed on signal %d"
+msgstr "cupsaddsmb 當機於信號 %d"
+
+msgid "A Samba username is required to export printer drivers!"
+msgstr "需要 Samba 使用者名稱以匯出印表機驅動程式!"
+
+msgid "A Samba password is required to export printer drivers!"
+msgstr "需要 Samba 密碼以匯出印表機驅動程式!"
+
+msgid "Unable to open cupsd.conf file:"
+msgstr "無法開啟 cupsd.conf 檔案:"
+
+msgid "Unable to change printer:"
+msgstr "無法變更印表機:"
+
+msgid "Set Allowed Users"
+msgstr "設定允許的使用者"
+
+msgid "Unable to get printer attributes:"
+msgstr "無法取得印表機屬性:"
+
+msgid "Set Publishing"
+msgstr "設定發布"
+
+msgid "Unable to change printer-is-shared attribute:"
+msgstr "無法變更印表機分享的屬性:"
+
+msgid "Classes"
+msgstr "類別"
+
+msgid "Unable to get class list:"
+msgstr "無法取得類別表列:"
+
+msgid "Unable to get class status:"
+msgstr "無法取得類別狀況:"
+
+msgid "Move Job"
+msgstr "移動工作"
+
+msgid "Unable to find destination for job!"
+msgstr "無法找到此工作之目的印表機!"
+
+msgid "Move All Jobs"
+msgstr "移動所有工作"
+
+msgid "Unable to move job"
+msgstr "無法移動工作"
+
+msgid "Unable to move jobs"
+msgstr "無法移動工作"
+
+msgid "Print Test Page"
+msgstr "列印測試頁"
+
+msgid "Unable to print test page:"
+msgstr "無法列印測試頁:"
+
+msgid "Jobs"
+msgstr "工作"
+
+msgid "Job operation failed:"
+msgstr "工作失敗:"
+
+msgid "Printers"
+msgstr "印表機"
+
+msgid "Unable to get printer list:"
+msgstr "無法取得印表機表列:"
+
+msgid "Unable to get printer status:"
+msgstr "無法取得印表機狀態:"
+
+msgid "OK"
+msgstr "確定"
+
+msgid "Unable to open PPD file"
+msgstr "無法開啟 PPD 檔案"
+
+msgid "NULL PPD file pointer"
+msgstr "空的 PPD 檔案指標"
+
+msgid "Memory allocation error"
+msgstr "記憶體配置錯誤"
+
+msgid "Missing PPD-Adobe-4.x header"
+msgstr "缺少 PPD-Adobe-4.x 頁首"
+
+msgid "Missing value string"
+msgstr "缺少值字串"
+
+msgid "Internal error"
+msgstr "內部錯誤"
+
+msgid "Bad OpenGroup"
+msgstr "不當的 OpenGroup"
+
+msgid "OpenGroup without a CloseGroup first"
+msgstr "CloseGroup 未先於 OpenGroup 而出現"
+
+msgid "Bad OpenUI/JCLOpenUI"
+msgstr "不當的 OpenUI/JCLOpenUI"
+
+msgid "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first"
+msgstr "CloseUI/JCLCloseUI 未先於 OpenUI/JCLOpenUI 而出現"
+
+msgid "Bad OrderDependency"
+msgstr "不當的 OrderDependency"
+
+msgid "Bad UIConstraints"
+msgstr "不當的 UIConstraints"
+
+msgid "Missing asterisk in column 1"
+msgstr "在第一欄中缺少星號"
+
+msgid "Line longer than the maximum allowed (255 characters)"
+msgstr "列長超過允許的最大值(255 個字元)"
+
+msgid "Illegal control character"
+msgstr "不合法的控制字元"
+
+msgid "Illegal main keyword string"
+msgstr "不合法的主要關鍵字字串"
+
+msgid "Illegal option keyword string"
+msgstr "不合法的選項關鍵字字串"
+
+msgid "Illegal translation string"
+msgstr "不合法的翻譯字串"
+
+msgid "Illegal whitespace character"
+msgstr "不合法的空白字元"
+
+msgid "Bad custom parameter"
+msgstr "不當的自訂參數"
+
+msgid "Unknown"
+msgstr "不明的"
+
+msgid "Custom"
+msgstr "自訂"
+
+msgid "JCL"
+msgstr "工作控制語言(JCL)"
+
+msgid "No authentication information provided!"
+msgstr "未提供任何認證資訊!"
+
+#, c-format
+msgid "Password for %s required to access %s via SAMBA: "
+msgstr "需要 %s 的密碼以透過 SAMBA 存取 %s:"
+
+#, c-format
+msgid "Running command: %s %s -N -U '%s%%%s' -c '%s'\n"
+msgstr "正在執行命令:%s %s -N -U '%s%%%s' -c '%s'\n"
+
+#, c-format
+msgid "cupsaddsmb: Unable to run \"%s\": %s\n"
+msgstr "cupsaddsmb:無法運行「%s」:%s\n"
+
+msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
+msgstr "cupsaddsmb:未安裝任何 Windows 印表機驅動程式!\n"
+
+msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "cupsaddsmb:警告,未安裝任何 Windows 2000 印表機驅動程式!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is already a member of class %s.\n"
+msgstr "lpadmin:印表機 %s 已經是類別 %s 的成員。\n"
+
+msgid "lpadmin: No member names were seen!\n"
+msgstr "lpadmin:未發現任何成員名稱!\n"
+
+#, c-format
+msgid "lpadmin: Printer %s is not a member of class %s.\n"
+msgstr "lpadmin:印表機 %s 並非類別 %s 的成員。\n"
+
+#, c-format
+msgid ""
+"Device: uri = %s\n"
+" class = %s\n"
+" info = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+msgstr ""
+"裝置:uri = %s\n"
+" 類別 = %s\n"
+" 資訊 = %s\n"
+" 廠商與型號 = %s\n"
+" 裝置識別號 = %s\n"
+
+#, c-format
+msgid ""
+"Model: name = %s\n"
+" natural_language = %s\n"
+" make-and-model = %s\n"
+" device-id = %s\n"
+msgstr ""
+"型號: 名稱 = %s\n"
+" 自然語言 = %s\n"
+" 廠商與型號 = %s\n"
+" 裝置識別號 = %s\n"
+
+msgid "Usage: lpmove job/src dest\n"
+msgstr "用法:lpmove 工作/來源 目的印表機\n"
+
+msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
+msgstr "lpstat:-W 之後需要「completed」、「not-completed」或「all」!\n"
+
+#, c-format
+msgid "%s accepting requests since %s\n"
+msgstr "%s 從 %s 開始接受請求\n"
+
+#, c-format
+msgid ""
+"%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s 從 %s 開始無法接受請求 -\n"
+"\t%s\n"
+
+#, c-format
+msgid "%s/%s accepting requests since %s\n"
+msgstr "%s/%s 從 %s 開始接受請求\n"
+
+#, c-format
+msgid ""
+"%s/%s not accepting requests since %s -\n"
+"\t%s\n"
+msgstr ""
+"%s/%s 從 %s 開始無法接受請求 -\n"
+"\t%s\n"
+
+msgid "lpc> "
+msgstr "lpc> "
+
+#, c-format
+msgid "%s: Unable to contact server!\n"
+msgstr "%s:無法連上伺服器!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-U' option!\n"
+msgstr "%s:錯誤 - 「-U」選項之後預期為使用者名稱!\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s/%s\"!\n"
+msgstr "%s:錯誤 - 不明的目的印表機「%s/%s」!\n"
+
+#, c-format
+msgid "%s: Unknown destination \"%s\"!\n"
+msgstr "%s:不明的目的印表機「%s」!\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-h' option!\n"
+msgstr "%s:錯誤 - 「-h」選項之後預期為主機名稱!\n"
+
+#, c-format
+msgid ""
+"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s:錯誤 - %s 環境變數指稱不存在的目的印表機「%s」!\n"
+
+#, c-format
+msgid "%s: error - no default destination available.\n"
+msgstr "%s:錯誤 - 無可用的預設目的印表機。\n"
+
+msgid ""
+"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
+msgstr ""
+"用法:lpq [-P 目的印表機] [-U 使用者名稱] [-h 主機名稱 [:連接埠]] [-l] [+間"
+"隔]\n"
+
+#, c-format
+msgid "%s: Error - expected hostname after '-H' option!\n"
+msgstr "%s:錯誤 - 「-H」選項之後預期為主機名稱!\n"
+
+#, c-format
+msgid "%s: Error - expected value after '-%c' option!\n"
+msgstr "%s:錯誤 - 「-%c」選項之後預期為設定值!\n"
+
+#, c-format
+msgid ""
+"%s: Warning - '%c' format modifier not supported - output may not be "
+"correct!\n"
+msgstr "%s:警告 - 不支援 '%c' 格式修飾鍵 - 輸出可能不正確!\n"
+
+#, c-format
+msgid "%s: error - expected option=value after '-o' option!\n"
+msgstr "%s:錯誤 - 「-o」選項之後預期為選項=值!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-P' option!\n"
+msgstr "%s:錯誤 - 「-P」選項之後預期為目的印表機!\n"
+
+#, c-format
+msgid "%s: Error - expected copy count after '-#' option!\n"
+msgstr "%s:錯誤 - 「-#」選項之後預期為複製份數!\n"
+
+#, c-format
+msgid "%s: Error - expected name after '-%c' option!\n"
+msgstr "%s:錯誤 - 「-%c」選項之後預期為名稱!\n"
+
+#, c-format
+msgid "%s: Error - unknown option '%c'!\n"
+msgstr "%s:錯誤 - 不明的選項「%c」!\n"
+
+#, c-format
+msgid "%s: Error - unable to access \"%s\" - %s\n"
+msgstr "%s:錯誤 - 無法存取「%s」- %s\n"
+
+#, c-format
+msgid "%s: Error - too many files - \"%s\"\n"
+msgstr "%s:錯誤 - 太多檔案 -「%s」\n"
+
+#, c-format
+msgid ""
+"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
+msgstr "%s:錯誤 - %s 環境變數指稱不存在的目的印表機「%s」!\n"
+
+#, c-format
+msgid "%s: Error - no default destination available.\n"
+msgstr "%s:錯誤 - 無可用的預設目的印表機。\n"
+
+#, c-format
+msgid "%s: Error - scheduler not responding!\n"
+msgstr "%s:錯誤 - 排程程式無反應!\n"
+
+#, c-format
+msgid "%s: Error - unable to create temporary file \"%s\" - %s\n"
+msgstr "%s:錯誤 - 無法建立暫時檔案「%s」- %s\n"
+
+#, c-format
+msgid "%s: Error - unable to write to temporary file \"%s\" - %s\n"
+msgstr "%s:錯誤 - 無法寫入暫時檔案「%s」- %s\n"
+
+#, c-format
+msgid "%s: Error - stdin is empty, so no job has been sent.\n"
+msgstr "%s:錯誤 - 標準輸入為空,因而未發送任何工作。\n"
+
+#, c-format
+msgid "%s: Error - unknown destination \"%s\"!\n"
+msgstr "%s:錯誤 - 不明的目的印表機「%s」!\n"
+
+#, c-format
+msgid "%s: Error - expected reason text after '-r' option!\n"
+msgstr "%s:錯誤 - 「-r」選項之後預期為理由文字!\n"
+
+#, c-format
+msgid "%s: Error - expected username after '-u' option!\n"
+msgstr "%s:錯誤 - 「-u」選項之後預期為使用者名稱!\n"
+
+#, c-format
+msgid "%s: %s failed: %s\n"
+msgstr "%s:%s 失敗:%s\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-d' option!\n"
+msgstr "%s:錯誤 - 「-d」選項之後預期為目的印表機!\n"
+
+#, c-format
+msgid "%s: Error - expected form after '-f' option!\n"
+msgstr "%s:錯誤 - 「-f」選項之後預期為形式!\n"
+
+#, c-format
+msgid "%s: Warning - form option ignored!\n"
+msgstr "%s:警告 - 已忽略形式選項!\n"
+
+#, c-format
+msgid "%s: Expected job ID after '-i' option!\n"
+msgstr "%s:「-i」選項之後預期為工作識別號!\n"
+
+#, c-format
+msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
+msgstr "%s:錯誤 - 無法同步列印檔案和改變工作!\n"
+
+#, c-format
+msgid "%s: Error - bad job ID!\n"
+msgstr "%s:錯誤 - 不當的工作識別號!\n"
+
+#, c-format
+msgid "%s: Error - expected copies after '-n' option!\n"
+msgstr "%s:錯誤 - 「-n」選項之後預期為份數!\n"
+
+#, c-format
+msgid "%s: Error - expected option string after '-o' option!\n"
+msgstr "%s:錯誤 - 「-o」選項之後預期為選項字串!\n"
+
+#, c-format
+msgid "%s: Error - expected priority after '-%c' option!\n"
+msgstr "%s:錯誤 - 「-%c」選項之後預期為優先權!\n"
+
+#, c-format
+msgid "%s: Error - priority must be between 1 and 100.\n"
+msgstr "%s:錯誤 - 優先權必須在 1 和 100 之間。\n"
+
+#, c-format
+msgid "%s: Error - expected title after '-t' option!\n"
+msgstr "%s:錯誤 - 「-t」選項之後預期為標題!\n"
+
+#, c-format
+msgid "%s: Error - expected mode list after '-y' option!\n"
+msgstr "%s:錯誤 - 「-y」選項之後預期為模式表列!\n"
+
+#, c-format
+msgid "%s: Warning - mode option ignored!\n"
+msgstr "%s:警告 - 已忽略模式選項!\n"
+
+#, c-format
+msgid "%s: Error - expected hold name after '-H' option!\n"
+msgstr "%s:錯誤 - 「-H」選項之後預期為暫停名稱!\n"
+
+#, c-format
+msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
+msgstr "%s:「-H 重新啟動」之前需要工作識別號(「-i jobid」)!\n"
+
+#, c-format
+msgid "%s: Error - expected page list after '-P' option!\n"
+msgstr "%s:錯誤 - 「-P」選項之後預期為頁面表列!\n"
+
+#, c-format
+msgid "%s: Error - expected character set after '-S' option!\n"
+msgstr "%s:錯誤 - 「-S」選項之後預期為字元集!\n"
+
+#, c-format
+msgid "%s: Warning - character set option ignored!\n"
+msgstr "%s:警告 - 已忽略字元集選項!\n"
+
+#, c-format
+msgid "%s: Error - expected content type after '-T' option!\n"
+msgstr "%s:錯誤 - 「-T」選項之後預期為內容類型!\n"
+
+#, c-format
+msgid "%s: Warning - content type option ignored!\n"
+msgstr "%s:警告 - 已忽略內容類型選項!\n"
+
+#, c-format
+msgid ""
+"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
+msgstr "%s:錯誤 - 如果已提供檔案或工作識別號,就無法從標準輸入列印!\n"
+
+#, c-format
+msgid ""
+"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
+"option!\n"
+msgstr ""
+"%s:錯誤 - 「-W」選項之後需要「completed」、「not-completed」或「all」!\n"
+
+#, c-format
+msgid "%s: Error - expected destination after '-b' option!\n"
+msgstr "%s:錯誤 - 「-b」選項之後預期為目的印表機!\n"
+
+#, c-format
+msgid "%s: Invalid destination name in list \"%s\"!\n"
+msgstr "%s:在表列「%s」中出現無效的目的印表機名稱!\n"
+
+#, c-format
+msgid "%s: Unable to connect to server\n"
+msgstr "%s:無法連接伺服器\n"
+
+msgid "Print Job:"
+msgstr "列印工作:"
+
+msgid "pending"
+msgstr "擱置"
+
+msgid "held"
+msgstr "延遲"
+
+msgid "processing"
+msgstr "處理中"
+
+msgid "stopped"
+msgstr "停止"
+
+msgid "canceled"
+msgstr "取消"
+
+msgid "aborted"
+msgstr "放棄"
+
+msgid "completed"
+msgstr "已完成"
+
+msgid "unknown"
+msgstr "不明"
+
+msgid "untitled"
+msgstr "無標題"
+
+msgid "Printer:"
+msgstr "印表機:"
+
+msgid "idle"
+msgstr "閒置"
+
+msgid "Missing notify-subscription-ids attribute!"
+msgstr "缺少 notify-subscription-ids 屬性!"
+
+msgid "Job subscriptions cannot be renewed!"
+msgstr "工作無法重新訂用!"
+
+msgid "cupsd: Expected config filename after \"-c\" option!\n"
+msgstr "cupsd:「-c」選項之後預期為配置檔案名稱!\n"
+
+msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
+msgstr "cupsd:launchd(8) 的支援未被編譯進來,以正常模式運行。\n"
+
+#, c-format
+msgid "cupsd: Unknown option \"%c\" - aborting!\n"
+msgstr "cupsd:不明的選項「%c」- 放棄中!\n"
+
+#, c-format
+msgid "cupsd: Unknown argument \"%s\" - aborting!\n"
+msgstr "cupsd:不明的引數「%s」- 放棄中!\n"
+
+msgid ""
+"Usage: cupsd [-c config-file] [-f] [-F] [-h] [-l]\n"
+"\n"
+"-c config-file Load alternate configuration file\n"
+"-f Run in the foreground\n"
+"-F Run in the foreground but detach\n"
+"-h Show this usage message\n"
+"-l Run cupsd from launchd(8)\n"
+msgstr ""
+"用法:cupsd [-c 組態檔案] [-f] [-F] [-h] [-l]\n"
+"\n"
+" -c 組態檔案 載入替代的組態檔案\n"
+" -f 在前景中運行\n"
+" -F 在前景中以卸離方式運行\n"
+" -h 顯示此用法訊息\n"
+" -l 從 launchd(8) 運行 cupsd\n"
+
+#, c-format
+msgid " WARN Line %d only contains whitespace!\n"
+msgstr " 警告 列 %d 只含空白!\n"
+
+msgid ""
+" WARN File contains a mix of CR, LF, and CR LF line endings!\n"
+msgstr " 警告 檔案含有混合的 CR、LF 和 CR LF 列尾結束符號!\n"
+
+msgid ""
+" WARN Non-Windows PPD files should use lines ending with only LF, "
+"not CR LF!\n"
+msgstr ""
+" 警告 非 Windows 的 PPD 檔案列結束應該只使用 LF,而非 CR LF!\n"
+
+msgid "Printer Maintenance"
+msgstr "印表機維護"
+
+msgid "Unable to send maintenance job:"
+msgstr "無法發送維護工作:"
+
+#, c-format
+msgid "cupsaddsmb: No PPD file for printer \"%s\" - %s\n"
+msgstr "cupsaddsmb:沒有任何用於印表機「%s」的 PPD 檔案- %s\n"
+
+#, c-format
+msgid " **FAIL** %s %s does not exist!\n"
+msgstr " ** 失敗 ** %s %s 不存在!\n"
+
+#, c-format
+msgid " **FAIL** Bad language \"%s\"!\n"
+msgstr " ** 失敗 ** 不當的語言「%s」!\n"
+
+#, c-format
+msgid " **FAIL** Missing \"%s\" translation string for option %s!\n"
+msgstr " ** 失敗 ** 缺少用於選項 %s 的「%s」翻譯字串!\n"
+
+#, c-format
+msgid ""
+" **FAIL** Default translation string for option %s contains 8-bit "
+"characters!\n"
+msgstr " ** 失敗 ** 預設用於選項 %s 的翻譯字串含有 8-位元字元!\n"
+
+#, c-format
+msgid ""
+" **FAIL** Missing \"%s\" translation string for option %s, choice %s!\n"
+msgstr " ** 失敗 ** 缺少用於選項 %s、選擇 %s 的「%s」翻譯字串!\n"
+
+#, c-format
+msgid ""
+" **FAIL** Default translation string for option %s choice %s contains "
+"8-bit characters!\n"
+msgstr ""
+" ** 失敗 ** 預設用於選項 %s、選擇 %s 的翻譯字串含有 8-位元字元!\n"
+
+#, c-format
+msgid " **FAIL** Bad cupsFilter value \"%s\"!\n"
+msgstr " ** 失敗 ** 不當的 cupsFilter 值「%s」!\n"
+
+msgid "Help"
+msgstr "求助"
+
+#, c-format
+msgid "Missing value on line %d!\n"
+msgstr "第 %d 列缺少設定值!\n"
+
+#, c-format
+msgid "Missing double quote on line %d!\n"
+msgstr "第 %d 列缺少雙引號!\n"
+
+#, c-format
+msgid "Bad option + choice on line %d!\n"
+msgstr "第 %d 列有不當的選項 + 選擇!\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
+msgstr "無法複製 Windows 2000 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!\n"
+msgstr "無法複製 CUPS 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
+msgstr "無法安裝 Windows 2000 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
+msgstr "無法複製 Windows 9x 印表機驅動程式檔案 (%d)!\n"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!\n"
+msgstr "無法安裝 Windows 9x 印表機驅動程式檔案 (%d)!\n"
+
+msgid "No Windows printer drivers are installed!\n"
+msgstr "未安裝任何 Windows 印表機驅動程式!\n"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!\n"
+msgstr "警告,未安裝任何 Windows 2000 印表機驅動程式!\n"
+
+#, c-format
+msgid "Unable to set Windows printer driver (%d)!\n"
+msgstr "無法設定 Windows 印表機驅動程式 (%d)!\n"
+
+msgid ""
+"Usage: cupsaddsmb [options] printer1 ... printerN\n"
+" cupsaddsmb [options] -a\n"
+"\n"
+"Options:\n"
+" -E Encrypt the connection to the server\n"
+" -H samba-server Use the named SAMBA server\n"
+" -U samba-user Authenticate using the named SAMBA user\n"
+" -a Export all printers\n"
+" -h cups-server Use the named CUPS server\n"
+" -v Be verbose (show commands)\n"
+msgstr ""
+"用法:cupsaddsmb [選項] 印表機1…印表機N\n"
+" cupsaddsmb [選項] -a\n"
+"\n"
+" 選項:\n"
+" -E 加密連接到伺服器\n"
+" -H samba-server 使用具名的 SAMBA 伺服器\n"
+" -U samba-user 使用具名的 SAMBA 使用者來驗證\n"
+" -a 匯出所有印表機\n"
+" -h cups-server 使用具名的 CUPS 伺服器\n"
+" -v 詳細的輸出(顯示命令)\n"
+
+#, c-format
+msgid "Unable to copy Windows 2000 printer driver files (%d)!"
+msgstr "無法複製 Windows 2000 印表機驅動程式檔案 (%d)!"
+
+#, c-format
+msgid "Unable to copy CUPS printer driver files (%d)!"
+msgstr "無法複製 CUPS 印表機驅動程式檔案 (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 2000 printer driver files (%d)!"
+msgstr "無法安裝 Windows 2000 印表機驅動程式檔案 (%d)!"
+
+#, c-format
+msgid "Unable to copy Windows 9x printer driver files (%d)!"
+msgstr "無法複製 Windows 9x 印表機驅動程式檔案 (%d)!"
+
+#, c-format
+msgid "Unable to install Windows 9x printer driver files (%d)!"
+msgstr "無法安裝 Windows 9x 印表機驅動程式檔案 (%d)!"
+
+msgid "No Windows printer drivers are installed!"
+msgstr "未安裝任何 Windows 印表機驅動程式!"
+
+msgid "Warning, no Windows 2000 printer drivers are installed!"
+msgstr "警告,未安裝任何 Windows 2000 印表機驅動程式!"
+
+#, c-format
+msgid "open of %s failed: %s"
+msgstr "開啟 %s 時失敗:%s"
+
+#, c-format
+msgid "Running command: %s %s -N -A %s -c '%s'\n"
+msgstr "正在執行命令:%s %s -N -A %s -c「%s」\n"
+
+#, c-format
+msgid "stat of %s failed: %s"
+msgstr "統計 %s 時失敗:%s"
+
+#, c-format
+msgid "Job #%d is already cancelled - can't cancel."
+msgstr "工作 #%d 已經取消 - 無法取消。"
+
+#, c-format
+msgid "Job #%d is already aborted - can't cancel."
+msgstr "工作 #%d 已經放棄 - 無法取消。"
+
+#, c-format
+msgid "Job #%d is already completed - can't cancel."
+msgstr "工作 #%d 已經完成 - 無法取消。"
+
+#, c-format
+msgid ""
+"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
+"s:%d%s</A>."
+msgstr ""
+"您必須使用網址 <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A> 來存取此頁面。"
+
+#, c-format
+msgid "Unsupported format '%s'!"
+msgstr "不支援格式「%s」!"
+
+msgid "FAIL\n"
+msgstr "失敗\n"
+
+#, c-format
+msgid ""
+" Line %d is longer than 255 characters (%d)!\n"
+" REF: Page 25, Line Length\n"
+msgstr ""
+" 列 %d 長度超過 255 個字元 (%d)!\n"
+" 參考:頁面 25, 列長度\n"
+
+msgid ""
+" Missing %!PS-Adobe-3.0 on first line!\n"
+" REF: Page 17, 3.1 Conforming Documents\n"
+msgstr ""
+" 缺少 %!PS-Adobe-3.0 於第一列!\n"
+" 參考:頁面 17, 3.1 符合文件\n"
+
+#, c-format
+msgid ""
+" Bad %%%%Pages: on line %d!\n"
+" REF: Page 43, %%%%Pages:\n"
+msgstr ""
+" 不當的 %%%%Pages:於第 %d 列!\n"
+" 參考:頁面 43, %%%%Pages:\n"
+
+#, c-format
+msgid ""
+" Bad %%%%BoundingBox: on line %d!\n"
+" REF: Page 39, %%%%BoundingBox:\n"
+msgstr ""
+" 不當的 %%%%BoundingBox:於第 %d 列!\n"
+" 參考:頁面 39, %%%%BoundingBox:\n"
+
+#, c-format
+msgid ""
+" Bad %%%%Page: on line %d!\n"
+" REF: Page 53, %%%%Page:\n"
+msgstr ""
+" 不當的 %%%%Page:於第 %d 列!\n"
+" 參考:頁面 53, %%%%Page:\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%BoundingBox: comment!\n"
+" REF: Page 39, %%BoundingBox:\n"
+msgstr ""
+" 缺少或不當的 %%BoundingBox:註釋!\n"
+" 參考:頁面 39, %%BoundingBox:\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%Pages: comment!\n"
+" REF: Page 43, %%Pages:\n"
+msgstr ""
+" 缺少或不當的 %%Pages:註釋!\n"
+" 參考:頁面 43, %%Pages:\n"
+
+#, c-format
+msgid ""
+" Missing %%EndComments comment!\n"
+" REF: Page 41, %%EndComments\n"
+msgstr ""
+" 缺少 %%EndComments 註釋!\n"
+" 參考:頁面 41, %%EndComments\n"
+
+#, c-format
+msgid ""
+" Missing or bad %%Page: comments!\n"
+" REF: Page 53, %%Page:\n"
+msgstr ""
+" 缺少或不當的 %%Page:註釋!\n"
+" 參考:頁面 53, %%Page:\n"
+
+#, c-format
+msgid " Too many %%EndDocument comments!\n"
+msgstr " 太多 %%EndDocument 註釋!\n"
+
+#, c-format
+msgid " Too many %%BeginDocument comments!\n"
+msgstr " 太多 %%BeginDocument 註釋!\n"
+
+#, c-format
+msgid " Saw %d lines that exceeded 255 characters!\n"
+msgstr " 發現 %d 列超出了 255 個字元!\n"
+
+msgid "PASS\n"
+msgstr "略過\n"
+
+msgid " Warning: file contains binary data!\n"
+msgstr " 警告:檔案含有二進位資料!\n"
+
+#, c-format
+msgid " Warning: obsolete DSC version %.1f in file!\n"
+msgstr " 警告:檔案中有過期的 DSC 版本 %.1f!\n"
+
+#, c-format
+msgid " Warning: no %%EndComments comment in file!\n"
+msgstr " 警告:檔案中沒有任何 %%EndComments 註釋!\n"
+
+msgid ""
+"Usage: cupstestdsc [options] filename.ps [... filename.ps]\n"
+" cupstestdsc [options] -\n"
+"\n"
+"Options:\n"
+"\n"
+" -h Show program usage\n"
+"\n"
+" Note: this program only validates the DSC comments, not the PostScript "
+"itself.\n"
+msgstr ""
+"用法:cupstestdsc [選項] 檔案名稱.ps [… 檔案名稱.ps]\n"
+" cupstestdsc [選項] -\n"
+"\n"
+" 選項:\n"
+"\n"
+" -h 顯示程式用法\n"
+"\n"
+" 注意:這個程式只有驗證 DSC 註釋,而不是 PostScript 本身。\n"
+
+#, c-format
+msgid "Password for %s on %s? "
+msgstr "用於 %2$s 上的 %1$s 密碼?"
+
+msgid ""
+" **FAIL** 1284DeviceId must be 1284DeviceID!\n"
+" REF: Page 72, section 5.5\n"
+msgstr ""
+" ** 失敗 ** 1284DeviceId 必須是 1284DeviceID!\n"
+" 參考:頁面 72, 區段 5.5\n"
+
+#, c-format
+msgid "Missing value on line %d!"
+msgstr "第 %d 列缺少設定值!"
+
+#, c-format
+msgid "Missing double quote on line %d!"
+msgstr "第 %d 列缺少雙引號!"
+
+#, c-format
+msgid "Bad option + choice on line %d!"
+msgstr "第 %d 列有不當的選項 + 選擇!"
+
+msgid "Empty PPD file!"
+msgstr "空的 PPD 檔案!"
+
+#, c-format
+msgid "Unable to set Windows printer driver (%d)!"
+msgstr "無法設定 Windows 印表機驅動程式 (%d)!"
+
+#, c-format
+msgid "Unable to run \"%s\": %s\n"
+msgstr "無法運行「%s」:%s\n"
+
+#, c-format
+msgid "Job #%d is already canceled - can't cancel."
+msgstr "工作 #%d 已經取消 - 無法取消。"
+
+#, c-format
+msgid "Bad notify-recipient URI \"%s\"!"
+msgstr "不當的 notify-recipient URI「%s」!"
+
+#, c-format
+msgid "notify-recipient URI \"%s\" uses unknown scheme!"
+msgstr "notify-recipient URI「%s」使用不明的方案!"
+
+#, c-format
+msgid "Bad notify-pull-method \"%s\"!"
+msgstr "不當的 notify-pull-method「%s」!"
+
+#, c-format
+msgid ""
+" **FAIL** %s must be 1284DeviceID!\n"
+" REF: Page 72, section 5.5\n"
+msgstr ""
+" ** 失敗 ** %s 必須是 1284DeviceID!\n"
+" 參考:頁面 72, 區段 5.5\n"
+
+#, c-format
+msgid "lpoptions: Unable to get PPD file for %s: %s\n"
+msgstr "lpoptions:無法取得用於 %s 的 PPD 檔案!:%s\n"
#
-# "$Id: cups.list.in 6480 2007-04-27 18:53:20Z mike $"
+# "$Id: cups.list.in 6529 2007-05-08 19:48:20Z mike $"
#
# ESP Package Manager (EPM) file list for the Common UNIX Printing
# System (CUPS).
%subpackage sv
%description Swedish support
+%subpackage zh
+%description Chinese support
+
%subpackage
f 0644 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po
%subpackage sv
f 0644 root sys $LOCALEDIR/sv/cups_sv.po locale/cups_sv.po
+%subpackage zh
+f 0644 root sys $LOCALEDIR/zh_TW/cups_zh_TW.po locale/cups_zh_TW.po
%subpackage
d 0755 root sys $DATADIR -
%subpackage sv
d 0755 root sys $DATADIR/templates/sv
f 0644 root sys $DATADIR/templates/sv templates/sv/*.tmpl
+%subpackage zh
+d 0755 root sys $DATADIR/templates/zh_TW
+f 0644 root sys $DATADIR/templates/zh_TW templates/zh_TW/*.tmpl
%subpackage
# Config files
f 0644 root sys $DOCDIR/sv doc/sv/*.html
d 0755 root sys $DOCDIR/sv/images -
f 0644 root sys $DOCDIR/sv/images doc/sv/images/*.gif
+%subpackage zh
+d 0755 root sys $DOCDIR/zh_TW
+f 0644 root sys $DOCDIR/zh_TW doc/zh_TW/*.html
+d 0755 root sys $DOCDIR/zh_TW/images -
+f 0644 root sys $DOCDIR/zh_TW/images doc/zh_TW/images/*.gif
%subpackage
# Man pages
# Startup scripts
%system darwin
f 0644 root sys /System/Library/LaunchDaemons/org.cups.cupsd.plist init/org.cups.cupsd.plist
-%postinstall <<EOF
-rm -f /System/Library/StartupItems/PrintingServices/PrintingServices
+d 0755 root sys /System/Library/StartupItems/PrintingServices -
+f 0644 root sys /System/Library/StartupItems/PrintingServices/PrintingServices init/PrintingServices.launchd
+f 0644 root sys /System/Library/StartupItems/PrintingServices/StartupParamters.plist init/StartupParameters.plist
+d 0755 root sys /System/Library/StartupItems/PrintingServices/Resources -
+d 0755 root sys /System/Library/StartupItems/PrintingServices/Resources/English.lproj -
+f 0644 root sys /System/Library/StartupItems/PrintingServices/Resources/English.lproj/Localizable.strings init/Localizable.strings
+%preremove <<EOF
launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
killall cupsd
-sleep 1
+EOF
+%postinstall <<EOF
+launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
+launchctl start org.cups.cupsd
EOF
%subpackage lpd
f 0644 root sys /System/Library/LaunchDaemons/org.cups.cups-lpd.plist init/org.cups.cups-lpd.plist
+%preremove <<EOF
+launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
+EOF
%postinstall <<EOF
rm -f /etc/xinetd.d/cups-lpd
launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
%subpackage
#
-# End of "$Id: cups.list.in 6480 2007-04-27 18:53:20Z mike $".
+# End of "$Id: cups.list.in 6529 2007-05-08 19:48:20Z mike $".
#
#
-# "$Id: cups.spec.in 6431 2007-04-02 14:31:49Z mike $"
+# "$Id: cups.spec.in 6529 2007-05-08 19:48:20Z mike $"
#
# RPM "spec" file for the Common UNIX Printing System (CUPS).
#
Group: System Environment/Daemons
Requires: %{name} = %{epoch}:%{version}
+%package zh
+Summary: Common UNIX Printing System - Chinese support
+Group: System Environment/Daemons
+Requires: %{name} = %{epoch}:%{version}
+
%if %{?_with_php:1}%{!?_with_php:0}
%package php
Summary: Common UNIX Printing System - PHP support
The Common UNIX Printing System provides a portable printing layer for
UNIX® operating systems. This package provides Swedish support.
+%description zh
+The Common UNIX Printing System provides a portable printing layer for
+UNIX® operating systems. This package provides Chinese support.
+
%if %{?_with_php:1}%{!?_with_php:0}
%description php
The Common UNIX Printing System provides a portable printing layer for
/usr/share/cups/templates/sv/*
/usr/share/locale/sv/cups_sv.po
+%files zh
+%defattr(-,root,root)
+%dir /usr/share/doc/cups/zh_TW
+/usr/share/doc/cups/zh_TW/index.html
+%dir /usr/share/doc/cups/zh_TW/images
+/usr/share/doc/cups/zh_TW/images/*
+%dir /usr/share/cups/templates/zh_TW
+/usr/share/cups/templates/zh_TW/*
+/usr/share/locale/zh_TW/cups_zh_TW.po
+
%if %{?_with_php:1}%{!?_with_php:0}
%files php
# PHP
#
-# End of "$Id: cups.spec.in 6431 2007-04-02 14:31:49Z mike $".
+# End of "$Id: cups.spec.in 6529 2007-05-08 19:48:20Z mike $".
#
}
// Tell CUPS pstops filter not to do its own rotation...
- writePSFmt("%%cupsRotation: %d\n", pageRotate);
+ int cups_rotate = 0;
+ int width = (int)ceil(mediaBox->x2 - mediaBox->x1);
+ int height = (int)ceil(mediaBox->y2 - mediaBox->y1);
+ int imgWidth = (int)ceil(cropBox->x2 - cropBox->x1);
+
+ if (width > height && width > imgWidth) cups_rotate = 90;
+
+ writePSFmt("%%cupsRotation: %d\n", cups_rotate);
writePSFmt("%%Producer: xpdf/pdftops %s\n", xpdfVersion);
xref->getDocInfo(&info);
fprintf(stderr, "DEBUG: Page rotate=%d, width=%d, height=%d, imgWidth=%d, imgHeight=%d\n",
state->getRotate(), width, height, imgWidth, imgHeight);
- rotate = (360 - state->getRotate()) % 360;
if (rotate == 0 || rotate == 180) {
if (width > height && width > imgWidth) {
rotate += 90;
/*
- * "$Id: conf.c 6505 2007-05-03 17:44:22Z mike $"
+ * "$Id: conf.c 6518 2007-05-07 22:17:53Z mike $"
*
* Configuration routines for the Common UNIX Printing System (CUPS).
*
if (relay->from.type == AUTH_IP)
snprintf(temp2, sizeof(temp2), "%u.%u.%u.%u/%u.%u.%u.%u",
- relay->from.mask.ip.address[0],
- relay->from.mask.ip.address[1],
- relay->from.mask.ip.address[2],
- relay->from.mask.ip.address[3],
- relay->from.mask.ip.netmask[0],
- relay->from.mask.ip.netmask[1],
- relay->from.mask.ip.netmask[2],
- relay->from.mask.ip.netmask[3]);
+ relay->from.mask.ip.address[0] >> 24,
+ (relay->from.mask.ip.address[0] >> 16) & 255,
+ (relay->from.mask.ip.address[0] >> 8) & 255,
+ relay->from.mask.ip.address[0] & 255,
+ relay->from.mask.ip.netmask[0] >> 24,
+ (relay->from.mask.ip.netmask[0] >> 16) & 255,
+ (relay->from.mask.ip.netmask[0] >> 8) & 255,
+ relay->from.mask.ip.netmask[0] & 255);
else
strlcpy(temp2, relay->from.mask.name.name, sizeof(temp2));
/*
- * End of "$Id: conf.c 6505 2007-05-03 17:44:22Z mike $".
+ * End of "$Id: conf.c 6518 2007-05-07 22:17:53Z mike $".
*/
/*
- * "$Id: cups-driverd.c 6508 2007-05-03 20:07:14Z mike $"
+ * "$Id: cups-driverd.c 6540 2007-05-23 15:25:48Z mike $"
*
* PPD/driver support for the Common UNIX Printing System (CUPS).
*
* Constants...
*/
-#define PPD_SYNC 0x50504433 /* Sync word for ppds.dat (PPD3) */
+#define PPD_SYNC 0x50504434 /* Sync word for ppds.dat (PPD4) */
#define PPD_MAX_LANG 32 /* Maximum languages */
#define PPD_MAX_PROD 8 /* Maximum products */
#define PPD_MAX_VERS 8 /* Maximum versions */
+#define PPD_TYPE_POSTSCRIPT 0 /* PostScript PPD */
+#define PPD_TYPE_PDF 1 /* PDF PPD */
+#define PPD_TYPE_RASTER 2 /* CUPS raster PPD */
+#define PPD_TYPE_FAX 3 /* Facsimile/MFD PPD */
+#define PPD_TYPE_UNKNOWN 4 /* Other/hybrid PPD */
+
+static const char *ppd_types[] =
+{
+ "postscript",
+ "pdf",
+ "raster",
+ "fax",
+ "unknown"
+};
+
/*
* PPD information structures...
{
time_t mtime; /* Modification time */
size_t size; /* Size in bytes */
+ int model_number; /* cupsModelNumber */
+ int type; /* ppd-type */
char name[512], /* PPD name */
languages[PPD_MAX_LANG][6],
/* LanguageVersion/cupsLanguages */
const char *make, const char *make_and_model,
const char *device_id, const char *product,
const char *psversion, time_t mtime,
- size_t size);
+ size_t size, int model_number, int type);
static int cat_ppd(const char *name, int request_id);
static int compare_names(const ppd_info_t *p0,
const ppd_info_t *p1);
const char *product, /* I - Product */
const char *psversion, /* I - PSVersion */
time_t mtime, /* I - Modification time */
- size_t size) /* I - File size */
+ size_t size, /* I - File size */
+ int model_number, /* I - Model number */
+ int type) /* I - Driver type */
{
ppd_info_t *ppd; /* PPD */
char *recommended; /* Foomatic driver string */
memset(ppd, 0, sizeof(ppd_info_t));
- ppd->found = 1;
- ppd->record.mtime = mtime;
- ppd->record.size = size;
+ ppd->found = 1;
+ ppd->record.mtime = mtime;
+ ppd->record.size = size;
+ ppd->record.model_number = model_number;
+ ppd->record.type = type;
strlcpy(ppd->record.name, name, sizeof(ppd->record.name));
strlcpy(ppd->record.languages[0], language,
*language, /* ppd-natural-language option */
*make, /* ppd-make option */
*make_and_model, /* ppd-make-and-model option */
+ *model_number_str, /* ppd-model-number option */
*product, /* ppd-product option */
- *psversion; /* ppd-psversion option */
- int mam_len, /* Length of ppd-make-and-model */
+ *psversion, /* ppd-psversion option */
+ *type_str; /* ppd-type option */
+ int model_number, /* ppd-model-number value */
+ type, /* ppd-type value */
+ mam_len, /* Length of ppd-make-and-model */
device_id_len, /* Length of ppd-device-id */
- send_natural_language, /* Send ppd-natural-language? */
+ send_device_id, /* Send ppd-device-id? */
send_make, /* Send ppd-make? */
send_make_and_model, /* Send ppd-make-and-model? */
+ send_model_number, /* Send ppd-model-number? */
send_name, /* Send ppd-name? */
- send_device_id, /* Send ppd-device-id? */
+ send_natural_language, /* Send ppd-natural-language? */
send_product, /* Send ppd-product? */
send_psversion, /* Send ppd-psversion? */
+ send_type, /* Send ppd-type? */
sent_header; /* Sent the IPP header? */
* Add the raw driver...
*/
- add_ppd("raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0);
+ add_ppd("raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0,
+ PPD_TYPE_UNKNOWN);
/*
* Sort the PPDs by make and model...
* Send IPP attributes...
*/
- num_options = cupsParseOptions(opt, 0, &options);
- requested = cupsGetOption("requested-attributes", num_options, options);
- device_id = cupsGetOption("ppd-device-id", num_options, options);
- language = cupsGetOption("ppd-natural-language", num_options, options);
- make = cupsGetOption("ppd-make", num_options, options);
- make_and_model = cupsGetOption("ppd-make-and-model", num_options, options);
- product = cupsGetOption("ppd-product", num_options, options);
- psversion = cupsGetOption("ppd-psversion", num_options, options);
+ num_options = cupsParseOptions(opt, 0, &options);
+ requested = cupsGetOption("requested-attributes", num_options, options);
+ device_id = cupsGetOption("ppd-device-id", num_options, options);
+ language = cupsGetOption("ppd-natural-language", num_options, options);
+ make = cupsGetOption("ppd-make", num_options, options);
+ make_and_model = cupsGetOption("ppd-make-and-model", num_options, options);
+ model_number_str = cupsGetOption("ppd-model-number", num_options, options);
+ product = cupsGetOption("ppd-product", num_options, options);
+ psversion = cupsGetOption("ppd-psversion", num_options, options);
+ type_str = cupsGetOption("ppd-type", num_options, options);
if (make_and_model)
mam_len = strlen(make_and_model);
else
device_id_len = 0;
+ if (model_number_str)
+ model_number = atoi(model_number_str);
+ else
+ model_number = 0;
+
+ if (type_str)
+ {
+ for (type = 0;
+ type < (int)(sizeof(ppd_types) / sizeof(ppd_types[0]));
+ type ++)
+ if (!strcmp(type_str, ppd_types[type]))
+ break;
+
+ if (type >= (int)(sizeof(ppd_types) / sizeof(ppd_types[0])))
+ {
+ fprintf(stderr, "ERROR: [cups-driverd] Bad ppd-type=\"%s\" ignored!\n",
+ type_str);
+ type_str = NULL;
+ }
+ }
+
if (requested)
fprintf(stderr, "DEBUG: [cups-driverd] requested-attributes=\"%s\"\n",
requested);
if (make_and_model)
fprintf(stderr, "DEBUG: [cups-driverd] ppd-make-and-model=\"%s\"\n",
make_and_model);
+ if (model_number_str)
+ fprintf(stderr, "DEBUG: [cups-driverd] ppd-model-number=\"%s\"\n",
+ model_number_str);
if (product)
fprintf(stderr, "DEBUG: [cups-driverd] ppd-product=\"%s\"\n",
product);
if (psversion)
fprintf(stderr, "DEBUG: [cups-driverd] ppd-psversion=\"%s\"\n",
psversion);
+ if (type_str)
+ fprintf(stderr, "DEBUG: [cups-driverd] ppd-type=\"%s\"\n", type_str);
if (!requested || strstr(requested, "all"))
{
send_name = 1;
send_make = 1;
send_make_and_model = 1;
+ send_model_number = 1;
send_natural_language = 1;
send_device_id = 1;
send_product = 1;
send_psversion = 1;
+ send_type = 1;
}
else
{
strstr(requested, ",ppd-make") != NULL ||
!strcmp(requested, "ppd-make");
send_make_and_model = strstr(requested, "ppd-make-and-model") != NULL;
+ send_model_number = strstr(requested, "ppd-model-number") != NULL;
send_natural_language = strstr(requested, "ppd-natural-language") != NULL;
send_device_id = strstr(requested, "ppd-device-id") != NULL;
send_product = strstr(requested, "ppd-product") != NULL;
send_psversion = strstr(requested, "ppd-psversion") != NULL;
+ send_type = strstr(requested, "ppd-type") != NULL;
}
puts("Content-Type: application/ipp\n");
make_and_model, mam_len))
continue;
+ if (model_number_str && ppd->record.model_number != model_number)
+ continue;
+
if (product)
{
for (j = 0; j < PPD_MAX_PROD; j ++)
continue;
}
+ if (type_str && ppd->record.type != type)
+ continue;
+
/*
* Send this PPD...
*/
cupsdSendIPPString(IPP_TAG_TEXT, "", ppd->record.psversions[j]);
}
+ if (send_type)
+ cupsdSendIPPString(IPP_TAG_KEYWORD, "ppd-type",
+ ppd_types[ppd->record.type]);
+
+ if (send_model_number)
+ cupsdSendIPPInteger(IPP_TAG_INTEGER, "ppd-model-number",
+ ppd->record.model_number);
+
/*
* If we have only requested the ppd-make attribute, then skip
* the remaining PPDs with this make...
device_id[256], /* 1284DeviceID */
product[256], /* Product */
psversion[256]; /* PSVersion */
+ int model_number, /* cupsModelNumber */
+ type; /* ppd-type */
cups_array_t *products, /* Product array */
*psversions, /* PSVersion array */
*cups_languages; /* cupsLanguages array */
device_id[0] = '\0';
lang_encoding[0] = '\0';
strcpy(lang_version, "en");
+ model_number = 0;
+ type = PPD_TYPE_POSTSCRIPT;
while (cupsFileGets(fp, line, sizeof(line)) != NULL)
{
sscanf(line, "%*[^\"]\"%255[^\"]", nick_name);
else if (!strncasecmp(line, "*1284DeviceID:", 14))
sscanf(line, "%*[^\"]\"%255[^\"]", device_id);
- else if (!strncasecmp(line, "*Product:", 9))
+ else if (!strncmp(line, "*Product:", 9))
{
sscanf(line, "%*[^\"]\"(%255[^)]", product);
cupsArrayAdd(products, strdup(product));
}
- else if (!strncasecmp(line, "*PSVersion:", 11))
+ else if (!strncmp(line, "*PSVersion:", 11))
{
sscanf(line, "%*[^\"]\"%255[^\"]", psversion);
cupsArrayAdd(psversions, strdup(psversion));
}
- else if (!strncasecmp(line, "*cupsLanguages:", 15))
+ else if (!strncmp(line, "*cupsLanguages:", 15))
{
char *start; /* Start of language */
}
}
}
+ else if (!strncmp(line, "*cupsFax:", 9))
+ {
+ for (ptr = line + 9; isspace(*ptr & 255); ptr ++);
+
+ if (!strncasecmp(ptr, "true", 4))
+ type = PPD_TYPE_FAX;
+ }
+ else if (!strncmp(line, "*cupsFilter:", 12) &&
+ (type == PPD_TYPE_POSTSCRIPT || type == PPD_TYPE_UNKNOWN))
+ {
+ if (strstr(line + 12, "application/vnd.cups-raster"))
+ type = PPD_TYPE_RASTER;
+ else if (strstr(line + 12, "application/vnd.cups-pdf"))
+ type = PPD_TYPE_PDF;
+ else
+ type = PPD_TYPE_UNKNOWN;
+ }
+ else if (!strncmp(line, "*cupsModelNumber:", 17))
+ sscanf(line, "*cupsModelNumber:%d", &model_number);
else if (!strncmp(line, "*OpenUI", 7))
{
/*
continue;
}
+ if (model_name[0])
+ cupsArrayAdd(products, strdup(model_name));
+
/*
* See if we got a manufacturer...
*/
ppd = add_ppd(name, lang_version, manufacturer, make_model, device_id,
(char *)cupsArrayFirst(products),
(char *)cupsArrayFirst(psversions),
- dent->fileinfo.st_mtime, dent->fileinfo.st_size);
+ dent->fileinfo.st_mtime, dent->fileinfo.st_size,
+ model_number, type);
if (!ppd)
{
memset(ppd, 0, sizeof(ppd_info_t));
- ppd->found = 1;
- ppd->record.mtime = dent->fileinfo.st_mtime;
- ppd->record.size = dent->fileinfo.st_size;
+ ppd->found = 1;
+ ppd->record.mtime = dent->fileinfo.st_mtime;
+ ppd->record.size = dent->fileinfo.st_size;
+ ppd->record.model_number = model_number;
+ ppd->record.type = type;
strlcpy(ppd->record.name, name, sizeof(ppd->record.name));
strlcpy(ppd->record.make, manufacturer, sizeof(ppd->record.make));
device_id[128], /* ppd-device-id */
languages[128], /* ppd-natural-language */
product[128], /* ppd-product */
- psversion[128]; /* ppd-psversion */
+ psversion[128], /* ppd-psversion */
+ type_str[128]; /* ppd-type */
+ int type; /* PPD type */
ppd_info_t *ppd; /* Newly added PPD */
device_id[0] = '\0';
product[0] = '\0';
psversion[0] = '\0';
+ strcpy(type_str, "postscript");
if (sscanf(line, "\"%511[^\"]\"%127s%*[ \t]\"%127[^\"]\""
"%*[ \t]\"%127[^\"]\"%*[ \t]\"%127[^\"]\""
- "%*[ \t]\"%127[^\"]\"%*[ \t]\"%127[^\"]\"",
+ "%*[ \t]\"%127[^\"]\"%*[ \t]\"%127[^\"]\""
+ "%*[ \t]\"%127[^\"]\"",
name, languages, make, make_and_model,
- device_id, product, psversion) < 4)
+ device_id, product, psversion, type_str) < 4)
{
/*
* Bad format; strip trailing newline and write an error message.
if ((start = strchr(languages, ',')) != NULL)
*start++ = '\0';
+ for (type = 0;
+ type < (int)(sizeof(ppd_types) / sizeof(ppd_types[0]));
+ type ++)
+ if (!strcmp(type_str, ppd_types[type]))
+ break;
+
+ if (type >= (int)(sizeof(ppd_types) / sizeof(ppd_types[0])))
+ {
+ fprintf(stderr, "ERROR: [cups-driverd] Bad ppd-type \"%s\" ignored!\n",
+ type_str);
+ type = PPD_TYPE_UNKNOWN;
+ }
+
ppd = add_ppd(name, languages, make, make_and_model, device_id,
- product, psversion, 0, 0);
+ product, psversion, 0, 0, 0, type);
if (!ppd)
{
/*
- * End of "$Id: cups-driverd.c 6508 2007-05-03 20:07:14Z mike $".
+ * End of "$Id: cups-driverd.c 6540 2007-05-23 15:25:48Z mike $".
*/
/*
- * "$Id: dirsvc.c 6483 2007-04-30 17:16:16Z mike $"
+ * "$Id: dirsvc.c 6538 2007-05-17 18:26:05Z mike $"
*
* Directory services routines for the Common UNIX Printing System (CUPS).
*
*/
if (!Browsing || !p->shared ||
- (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ (p->external_type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
return;
/*
cupsdRegisterPrinter(cupsd_printer_t *p)/* I - Printer */
{
if (!Browsing || !BrowseLocalProtocols || !BrowseInterval || !NumBrowsers ||
- (p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
+ (p->external_type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)))
return;
#ifdef HAVE_LIBSLP
for (count = 0, p = (cupsd_printer_t *)cupsArrayFirst(Printers);
count < max_count && p != NULL;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
- if (!(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) &&
+ if (!(p->external_type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) &&
p->shared && p->browse_time < ut)
count ++;
if (!p)
break;
- else if ((p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_IMPLICIT)) ||
+ else if ((p->external_type & (CUPS_PRINTER_REMOTE |
+ CUPS_PRINTER_IMPLICIT)) ||
!p->shared)
continue;
else if (p->browse_time < ut)
/*
- * End of "$Id: dirsvc.c 6483 2007-04-30 17:16:16Z mike $".
+ * End of "$Id: dirsvc.c 6538 2007-05-17 18:26:05Z mike $".
*/
/*
- * "$Id: ipp.c 6508 2007-05-03 20:07:14Z mike $"
+ * "$Id: ipp.c 6541 2007-05-23 20:18:00Z mike $"
*
* IPP routines for the Common UNIX Printing System (CUPS) scheduler.
*
*/
#ifdef __APPLE__
- if (AppleQuotas)
+ if (AppleQuotas && (q = cupsdFindQuota(p, username)) != NULL)
{
/*
* TODO: Define these special page count values as constants!
* Add the CUPS-specific printer-type attribute...
*/
- type = printer->type;
+ type = printer->external_type;
if (printer == DefaultPrinter)
type |= CUPS_PRINTER_DEFAULT;
if (dtype & CUPS_PRINTER_REMOTE)
{
- send_ipp_status(con, CUPS_SEE_OTHER, NULL);
+ con->response->request.status.status_code = CUPS_SEE_OTHER;
ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, dest->uri);
return;
dest = dest->printers[i];
else
{
- send_ipp_status(con, CUPS_SEE_OTHER, NULL);
+ con->response->request.status.status_code = CUPS_SEE_OTHER;
ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, dest->printers[0]->uri);
return;
{
send_ipp_status(con, IPP_NOT_FOUND,
_("The PPD file \"%s\" could not be opened: %s"),
- uri->values[i].string.text, strerror(errno));
+ uri->values[0].string.text, strerror(errno));
return;
}
con->pipe_pid = 0;
- send_ipp_status(con, IPP_OK, NULL);
+ con->response->request.status.status_code = IPP_OK;
}
else
send_ipp_status(con, IPP_NOT_FOUND,
*language, /* ppd-natural-language attribute */
*make, /* ppd-make attribute */
*model, /* ppd-make-and-model attribute */
+ *model_number, /* ppd-model-number attribute */
*product, /* ppd-product attribute */
*psversion, /* ppd-psverion attribute */
+ *type, /* ppd-type attribute */
*requested; /* requested-attributes attribute */
char command[1024], /* cups-driverd command */
options[1024], /* Options to pass to command */
/* Escaped ppd-natural-language string */
make_str[256], /* Escaped ppd-make string */
model_str[256], /* Escaped ppd-make-and-model string */
+ model_number_str[256],
+ /* ppd-model-number string */
product_str[256],
/* Escaped ppd-product string */
psversion_str[256],
/* Escaped ppd-psversion string */
+ type_str[256], /* Escaped ppd-type string */
requested_str[256];
/* String for requested attributes */
* Run cups-driverd command with the given options...
*/
- limit = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER);
- device = ippFindAttribute(con->request, "ppd-device-id", IPP_TAG_TEXT);
- language = ippFindAttribute(con->request, "ppd-natural-language",
- IPP_TAG_LANGUAGE);
- make = ippFindAttribute(con->request, "ppd-make", IPP_TAG_TEXT);
- model = ippFindAttribute(con->request, "ppd-make-and-model",
- IPP_TAG_TEXT);
- product = ippFindAttribute(con->request, "ppd-product", IPP_TAG_TEXT);
- psversion = ippFindAttribute(con->request, "ppd-psversion", IPP_TAG_TEXT);
- requested = ippFindAttribute(con->request, "requested-attributes",
- IPP_TAG_KEYWORD);
+ limit = ippFindAttribute(con->request, "limit", IPP_TAG_INTEGER);
+ device = ippFindAttribute(con->request, "ppd-device-id", IPP_TAG_TEXT);
+ language = ippFindAttribute(con->request, "ppd-natural-language",
+ IPP_TAG_LANGUAGE);
+ make = ippFindAttribute(con->request, "ppd-make", IPP_TAG_TEXT);
+ model = ippFindAttribute(con->request, "ppd-make-and-model",
+ IPP_TAG_TEXT);
+ model_number = ippFindAttribute(con->request, "ppd-model-number",
+ IPP_TAG_INTEGER);
+ product = ippFindAttribute(con->request, "ppd-product", IPP_TAG_TEXT);
+ psversion = ippFindAttribute(con->request, "ppd-psversion", IPP_TAG_TEXT);
+ type = ippFindAttribute(con->request, "ppd-type", IPP_TAG_KEYWORD);
+ requested = ippFindAttribute(con->request, "requested-attributes",
+ IPP_TAG_KEYWORD);
if (requested)
url_encode_attr(requested, requested_str, sizeof(requested_str));
else
model_str[0] = '\0';
+ if (model_number)
+ snprintf(model_number_str, sizeof(model_number_str), "ppd-model-number=%d",
+ model_number->values[0].integer);
+ else
+ model_number_str[0] = '\0';
+
if (product)
url_encode_attr(product, product_str, sizeof(product_str));
else
else
psversion_str[0] = '\0';
+ if (type)
+ url_encode_attr(type, type_str, sizeof(type_str));
+ else
+ type_str[0] = '\0';
+
snprintf(command, sizeof(command), "%s/daemon/cups-driverd", ServerBin);
- snprintf(options, sizeof(options), "list+%d+%d+%s%s%s%s%s%s%s%s%s%s%s%s%s",
+ snprintf(options, sizeof(options),
+ "list+%d+%d+%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
con->request->request.op.request_id,
limit ? limit->values[0].integer : 0,
requested_str,
language ? "%20" : "", language_str,
make ? "%20" : "", make_str,
model ? "%20" : "", model_str,
+ model_number ? "%20" : "", model_number_str,
product ? "%20" : "", product_str,
- psversion ? "%20" : "", psversion_str);
+ psversion ? "%20" : "", psversion_str,
+ type ? "%20" : "", type_str);
if (cupsdSendCommand(con, command, options, 0))
{
char formatted[1024]; /* Formatted errror message */
- if (message)
- {
- va_start(ap, message);
- vsnprintf(formatted, sizeof(formatted),
- _cupsLangString(con->language, message), ap);
- va_end(ap);
+ va_start(ap, message);
+ vsnprintf(formatted, sizeof(formatted),
+ _cupsLangString(con->language, message), ap);
+ va_end(ap);
- cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s: %s",
- ippOpString(con->request->request.op.operation_id),
- ippErrorString(status), formatted);
- }
- else
- cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s",
- ippOpString(con->request->request.op.operation_id),
- ippErrorString(status));
+ cupsdLogMessage(CUPSD_LOG_DEBUG, "%s %s: %s",
+ ippOpString(con->request->request.op.operation_id),
+ ippErrorString(status), formatted);
con->response->request.status.status_code = status;
ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
"attributes-natural-language", NULL, DefaultLanguage);
- if (message)
- ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_TEXT,
- "status-message", NULL, formatted);
+ ippAddString(con->response, IPP_TAG_OPERATION, IPP_TAG_TEXT,
+ "status-message", NULL, formatted);
}
/*
- * End of "$Id: ipp.c 6508 2007-05-03 20:07:14Z mike $".
+ * End of "$Id: ipp.c 6541 2007-05-23 20:18:00Z mike $".
*/
/*
- * "$Id: main.c 6493 2007-04-30 19:33:31Z mike $"
+ * "$Id: main.c 6514 2007-05-07 18:59:25Z mike $"
*
* Scheduler main loop for the Common UNIX Printing System (CUPS).
*
unlink(CUPS_KEEPALIVE);
}
}
-
#endif /* HAVE_LAUNCHD */
/*
- * End of "$Id: main.c 6493 2007-04-30 19:33:31Z mike $".
+ * End of "$Id: main.c 6514 2007-05-07 18:59:25Z mike $".
*/
/*
- * "$Id: printers.c 6501 2007-04-30 21:53:15Z mike $"
+ * "$Id: printers.c 6539 2007-05-23 15:08:29Z mike $"
*
* Printer routines for the Common UNIX Printing System (CUPS).
*
#include <cups/dir.h>
+/*
+ * Currently Bonjour printers that are shared by CUPS servers are added
+ * manually by the user on Mac OS X systems. While these printers *are*
+ * remote queues, the current print dialog will not show them if they
+ * (correctly) have the CUPS_PRINTER_REMOTE bit set. This may change
+ * in future releases, however the code to do this is currently disabled.
+ *
+ * Define BONJOUR_IS_REMOTE to 1 to get the correct behavior...
+ */
+
+#define BONJOUR_IS_REMOTE 0
+
+
/*
* Local functions...
*/
cupsdSetString(&p->product, ppd->product);
#endif /* HAVE_DNSSD */
+#if BONJOUR_IS_REMOTE
+ ppdattr = ppdFindAttr(ppd, "APRemoteQueueID", NULL);
+#endif /* BONJOUR_IS_REMOTE */
+
/*
* Close the PPD and set the type...
*/
ppdClose(ppd);
printer_type = p->type;
+
+#if BONJOUR_IS_REMOTE
+ if (ppdattr)
+ {
+ /*
+ * This is a shared Bonjour printer...
+ */
+
+ printer_type |= CUPS_PRINTER_REMOTE;
+ }
+#endif /* BONJOUR_IS_REMOTE */
}
else if (!access(filename, 0))
{
}
}
+ /*
+ * Save the local printer type value, which may have the CUPS_PRINTER_REMOTE
+ * bit set. We use this value when sending the printer-type attribute to
+ * clients so they know whether the printer is really remote. Doing it
+ * this way prevents the browsing code from timing out hardwired remote
+ * printers...
+ */
+
+ p->external_type = printer_type;
+
/*
* Copy the printer options into a browse attributes string we can re-use.
*/
- if (!(p->type & CUPS_PRINTER_REMOTE))
+ if (!(printer_type & CUPS_PRINTER_REMOTE))
{
const char *valptr; /* Pointer into value */
char *attrptr; /* Pointer into attribute string */
/*
- * End of "$Id: printers.c 6501 2007-04-30 21:53:15Z mike $".
+ * End of "$Id: printers.c 6539 2007-05-23 15:08:29Z mike $".
*/
/*
- * "$Id: printers.h 6433 2007-04-02 21:50:50Z mike $"
+ * "$Id: printers.h 6541 2007-05-23 20:18:00Z mike $"
*
* Printer definitions for the Common UNIX Printing System (CUPS) scheduler.
*
char *reasons[16]; /* printer-state-reasons strings */
time_t state_time; /* Time at this state */
char *job_sheets[2]; /* Banners/job sheets */
- cups_ptype_t type; /* Printer type (color, small, etc.) */
+ cups_ptype_t type, /* Printer type (color, small, etc.) */
+ external_type; /* Printer type that is advertised */
char *browse_attrs; /* Attributes sent with browse data */
time_t browse_expire; /* Expiration time for printer */
time_t browse_time; /* Last time update was sent/received */
extern void cupsdDeletePrinter(cupsd_printer_t *p, int update);
extern cupsd_printer_t *cupsdFindDest(const char *name);
extern cupsd_printer_t *cupsdFindPrinter(const char *name);
+extern cupsd_quota_t *cupsdFindQuota(cupsd_printer_t *p,
+ const char *username);
extern void cupsdFreePrinterUsers(cupsd_printer_t *p);
extern void cupsdFreeQuotas(cupsd_printer_t *p);
extern void cupsdLoadAllPrinters(void);
/*
- * End of "$Id: printers.h 6433 2007-04-02 21:50:50Z mike $".
+ * End of "$Id: printers.h 6541 2007-05-23 20:18:00Z mike $".
*/
/*
- * "$Id: quotas.c 6365 2007-03-19 20:56:57Z mike $"
+ * "$Id: quotas.c 6541 2007-05-23 20:18:00Z mike $"
*
* Quota routines for the Common UNIX Printing System (CUPS).
*
*
* Contents:
*
+ * cupsdFindQuota() - Find a quota record.
* cupsdFreeQuotas() - Free quotas for a printer.
* cupsdUpdateQuota() - Update quota data for the specified printer and user.
* add_quota() - Add a quota record for this printer and user.
* compare_quotas() - Compare two quota records...
- * find_quota() - Find a quota record.
*/
/*
static cupsd_quota_t *add_quota(cupsd_printer_t *p, const char *username);
static int compare_quotas(const cupsd_quota_t *q1,
const cupsd_quota_t *q2);
-static cupsd_quota_t *find_quota(cupsd_printer_t *p, const char *username);
+
+
+/*
+ * 'cupsdFindQuota()' - Find a quota record.
+ */
+
+cupsd_quota_t * /* O - Quota data */
+cupsdFindQuota(
+ cupsd_printer_t *p, /* I - Printer */
+ const char *username) /* I - User */
+{
+ cupsd_quota_t *q, /* Quota data pointer */
+ match; /* Search data */
+
+
+ if (!p || !username)
+ return (NULL);
+
+ strlcpy(match.username, username, sizeof(match.username));
+
+ if ((q = (cupsd_quota_t *)cupsArrayFind(p->quotas, &match)) != NULL)
+ return (q);
+ else
+ return (add_quota(p, username));
+}
/*
if (!p->k_limit && !p->page_limit)
return (NULL);
- if ((q = find_quota(p, username)) == NULL)
+ if ((q = cupsdFindQuota(p, username)) == NULL)
return (NULL);
cupsdLogMessage(CUPSD_LOG_DEBUG,
/*
- * 'find_quota()' - Find a quota record.
- */
-
-static cupsd_quota_t * /* O - Quota data */
-find_quota(cupsd_printer_t *p, /* I - Printer */
- const char *username) /* I - User */
-{
- cupsd_quota_t *q, /* Quota data pointer */
- match; /* Search data */
-
-
- if (!p || !username)
- return (NULL);
-
- strlcpy(match.username, username, sizeof(match.username));
-
- if ((q = (cupsd_quota_t *)cupsArrayFind(p->quotas, &match)) != NULL)
- return (q);
- else
- return (add_quota(p, username));
-}
-
-
-/*
- * End of "$Id: quotas.c 6365 2007-03-19 20:56:57Z mike $".
+ * End of "$Id: quotas.c 6541 2007-05-23 20:18:00Z mike $".
*/
/*
- * "$Id: util.c 5305 2006-03-18 03:05:12Z mike $"
+ * "$Id: util.c 6535 2007-05-16 20:35:05Z mike $"
*
* Mini-daemon utility functions for the Common UNIX Printing System (CUPS).
*
}
-#if 0 /* Not currently used */
/*
* 'cupsdSendIPPInteger()' - Send an integer attribute.
*/
/*
* Send IPP integer value: value tag (1 byte), name length (2 bytes),
- * name string (without nul), and value (4 bytes)...
+ * name string (without nul), value length (2 bytes), and value (4 bytes)...
*/
putchar(value_tag);
fputs(name, stdout);
+ putchar(0);
+ putchar(4);
+
putchar(value >> 24);
putchar(value >> 16);
putchar(value >> 8);
putchar(value);
}
-#endif /* 0 */
/*
/*
- * End of "$Id: util.c 5305 2006-03-18 03:05:12Z mike $".
+ * End of "$Id: util.c 6535 2007-05-16 20:35:05Z mike $".
*/
/*
- * "$Id: cupstestppd.c 6509 2007-05-03 22:58:41Z mike $"
+ * "$Id: cupstestppd.c 6533 2007-05-15 15:54:23Z mike $"
*
* PPD test program for the Common UNIX Printing System (CUPS).
*
* Local functions...
*/
-void check_basics(const char *filename);
-int check_constraints(ppd_file_t *ppd, int errors, int verbose, int warn);
-int check_defaults(ppd_file_t *ppd, int errors, int verbose, int warn);
-int check_filters(ppd_file_t *ppd, const char *root, int errors,
- int verbose, int warn);
-int check_translations(ppd_file_t *ppd, int errors, int verbose, int warn);
-void show_conflicts(ppd_file_t *ppd);
-void usage(void);
-int valid_utf8(const char *s);
+static void check_basics(const char *filename);
+static int check_constraints(ppd_file_t *ppd, int errors, int verbose,
+ int warn);
+static int check_defaults(ppd_file_t *ppd, int errors, int verbose,
+ int warn);
+static int check_filters(ppd_file_t *ppd, const char *root, int errors,
+ int verbose, int warn);
+static int check_translations(ppd_file_t *ppd, int errors, int verbose,\
+ int warn);
+static void show_conflicts(ppd_file_t *ppd);
+static void usage(void);
+static int valid_utf8(const char *s);
/*
* 'check_basics()' - Check for CR LF, mixed line endings, and blank lines.
*/
-void
+static void
check_basics(const char *filename) /* I - PPD file to check */
{
cups_file_t *fp; /* File pointer */
* 'check_constraints()' - Check UIConstraints in the PPD file.
*/
-int /* O - Errors found */
+static int /* O - Errors found */
check_constraints(ppd_file_t *ppd, /* I - PPD file */
int errors, /* I - Errors found */
int verbose, /* I - Verbosity level */
* 'check_defaults()' - Check default option keywords in the PPD file.
*/
-int /* O - Errors found */
+static int /* O - Errors found */
check_defaults(ppd_file_t *ppd, /* I - PPD file */
int errors, /* I - Errors found */
int verbose, /* I - Verbosity level */
* 'check_filters()' - Check filters in the PPD file.
*/
-int /* O - Errors found */
+static int /* O - Errors found */
check_filters(ppd_file_t *ppd, /* I - PPD file */
const char *root, /* I - Root directory */
int errors, /* I - Errors found */
* 'check_translations()' - Check translations in the PPD file.
*/
-int /* O - Errors found */
+static int /* O - Errors found */
check_translations(ppd_file_t *ppd, /* I - PPD file */
int errors, /* I - Errors found */
int verbose, /* I - Verbosity level */
* 'show_conflicts()' - Show option conflicts in a PPD file.
*/
-void
+static void
show_conflicts(ppd_file_t *ppd) /* I - PPD to check */
{
int i, j; /* Looping variables */
* 'usage()' - Show program usage...
*/
-void
+static void
usage(void)
{
_cupsLangPuts(stdout,
* 'valid_utf8()' - Check whether a string contains valid UTF-8 text.
*/
-int /* O - 1 if valid, 0 if not */
+static int /* O - 1 if valid, 0 if not */
valid_utf8(const char *s) /* I - String to check */
{
while (*s)
/*
- * End of "$Id: cupstestppd.c 6509 2007-05-03 22:58:41Z mike $".
+ * End of "$Id: cupstestppd.c 6533 2007-05-15 15:54:23Z mike $".
*/
#
-# "$Id: Makefile 6440 2007-04-03 23:17:17Z mike $"
+# "$Id: Makefile 6521 2007-05-08 02:11:10Z mike $"
#
# Template makefile for the Common UNIX Printing System (CUPS).
#
FILES = \
add-class.tmpl \
add-printer.tmpl \
+ add-rss-subscription.tmpl \
admin.tmpl \
choose-device.tmpl \
choose-make.tmpl \
search.tmpl \
set-printer-options-header.tmpl \
set-printer-options-trailer.tmpl \
+ subscription-added.tmpl \
+ subscription-canceled.tmpl \
test-page.tmpl \
trailer.tmpl \
users.tmpl
#
-# End of "$Id: Makefile 6440 2007-04-03 23:17:17Z mike $".
+# End of "$Id: Makefile 6521 2007-05-08 02:11:10Z mike $".
#
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">加入分類</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">名稱:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">位置:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">描述:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">成員:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-add-class.gif" ALT="加入分類"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">加入新的印表機</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">名稱:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_NAME" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(可能包含任何除了 "/"、"#" 和 space 以外可列印的字元)</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">位置:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(容易理解的位置,像是 "實驗室一")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">描述:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(容易理解的描述,像是 "HP LaserJet with Duplexer")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<TABLE CELLPADDING="0" CELLSPACING="0" WIDTH="100%" SUMMARY="管理任務">
+<TR><TD VALIGN="TOP" NOWRAP>
+
+<H2 CLASS="title">印表機</H2>
+
+<P>
+<A HREF="/admin?op=add-printer"><IMG
+SRC="/images/button-add-printer.gif" ALT="加入印表機" CLASS="button"></A>
+<A HREF="/printers/"><IMG SRC="/images/button-manage-printers.gif"
+ALT="管理印表機" CLASS="button"></A>
+{have_samba?<A HREF="/admin/?op=export-samba"><IMG
+SRC="/images/button-export-samba.gif" ALT="匯出印表機到 Samba"
+CLASS="button"></A>:}
+</P>
+
+{#device_uri=0?:<P><B>找到新的印表機:</B></P><UL>{[device_uri]
+<LI><A HREF="/admin?op=add-printer&{device_options}"><IMG
+SRC="/images/button-add-this-printer.gif" ALT="加入此印表機" CLASS="button"
+ALIGN="MIDDLE"></A>
+{device_make_and_model} ({device_info})</LI>
+}</UL>}
+
+<H2 CLASS="title">分類</H2>
+
+<P>
+<A HREF="/admin?op=add-class"><IMG SRC="/images/button-add-class.gif"
+ALT="加入分類" CLASS="button"></A>
+<A HREF="/classes/"><IMG SRC="/images/button-manage-classes.gif"
+ALT="管理分類" CLASS="button"></A>
+</P>
+
+<H2 CLASS="title">工作</H2>
+
+<P>
+<A HREF="/jobs/"><IMG SRC="/images/button-manage-jobs.gif" ALT="管理
+工作" CLASS="button"></A>
+</P>
+
+</TD><TD> </TD><TD VALIGN="TOP">
+
+<H2 CLASS="title">伺服器</H2>
+
+<P>
+<A HREF="/admin?op=config-server"><IMG
+SRC="/images/button-edit-configuration-file.gif" ALT="編輯配置
+檔案" CLASS="button"></A>
+<A HREF="/admin/log/access_log" TARGET="_blank"><IMG
+SRC="/images/button-view-access-log.gif" ALT="檢視存取記錄"
+CLASS="button"></A>
+<A HREF="/admin/log/error_log" TARGET="_blank"><IMG
+SRC="/images/button-view-error-log.gif" ALT="檢視錯誤記錄"
+CLASS="button"></A>
+<A HREF="/admin/log/page_log" TARGET="_blank"><IMG
+SRC="/images/button-view-page-log.gif" ALT="檢視頁面記錄"
+CLASS="button"></A>
+</P>
+
+{SETTINGS_ERROR?<P>{SETTINGS_MESSAGE}</P>
+<BLOCKQUOTE>{SETTINGS_ERROR}</BLOCKQUOTE>:
+
+<FORM METHOD="POST" ACTION="/admin">
+
+<P><B>基本伺服器設定值:</B></P>
+
+<P><INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_PRINTERS" {?remote_printers}> 顯示其他系統分享的印表機<BR>
+<INPUT TYPE="CHECKBOX" NAME="SHARE_PRINTERS" {?share_printers}> 分享連接到此系統的公開印表機<BR>
+<INPUT TYPE="CHECKBOX" NAME="REMOTE_ADMIN" {?remote_admin}> 允許遠端管理<BR>
+<INPUT TYPE="CHECKBOX" NAME="USER_CANCEL_ANY" {?user_cancel_any}> 允許使用者取消任何工作 (而非只有他們所擁有的)<BR>
+<INPUT TYPE="CHECKBOX" NAME="DEBUG_LOGGING" {?debug_logging}> 儲存除錯資訊以便解決問題</P>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-change-settings.gif" ALT="變更設定值"></P>
+
+</FORM>}
+
+</TD></TR>
+</TABLE>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">{printer_name} 的裝置</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">裝置:</TH>
+<TD>
+<SELECT NAME="DEVICE_URI">
+{[device_uri]<OPTION VALUE="{device_uri}{?device_make_and_model!Unknown?|{device_make_and_model}:}" {?current_device_uri={device_uri}?SELECTED:{current_device_scheme={device_uri}?SELECTED:}}>
+{device_info} {?device_make_and_model!Unknown?({device_make_and_model}):}</OPTION>
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">{printer_name} 的廠牌/製造商</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">廠牌:</TH>
+<TD>
+<SELECT NAME="PPD_MAKE" SIZE="10">
+{[ppd_make]<OPTION VALUE="{ppd_make}" {?current_make={ppd_make}?SELECTED:}>{ppd_make}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD> </TD>
+</TR>
+<TR>
+<TH CLASS="label">或是提供 PPD 檔案:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?加入印表機:修改印表機}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin" ENCTYPE="multipart/form-data">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+<INPUT TYPE="HIDDEN" NAME="BAUDRATE" VALUE="{?baudrate}">
+<INPUT TYPE="HIDDEN" NAME="BITS" VALUE="{?bits}">
+<INPUT TYPE="HIDDEN" NAME="PARITY" VALUE="{?parity}">
+<INPUT TYPE="HIDDEN" NAME="FLOW" VALUE="{?flow}">
+
+<H2 CLASS="title">{printer_name} 的型號/驅動程式</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">型號:</TH>
+<TD>
+<SELECT NAME="PPD_NAME" SIZE="10">
+{[ppd_name]<OPTION VALUE="{ppd_name}" {?current_make_and_model={ppd_make_and_model}?SELECTED:}>{ppd_make_and_model} ({ppd_natural_language})
+}</SELECT>
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">或是提供 PPD 檔案:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="262144"><INPUT
+TYPE="FILE" NAME="PPD_FILE"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-{op}.gif" ALT="{op=add-printer?加入印表機:修改印表機}"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="DEVICE_URI" VALUE="{device_uri}">
+
+<H2 CLASS="title">{printer_name} 的序列埠設定值</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">傳輸速率:</TH>
+<TD><SELECT NAME="BAUDRATE">
+{[baudrates]<OPTION {?baudrate={baudrates}?SELECTED:}>{baudrates}}
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">同位檢查:</TH>
+<TD><SELECT NAME="PARITY">
+<OPTION VALUE="none" {?parity=none?SELECTED:}>無
+<OPTION VALUE="even" {?parity=even?SELECTED:}>偶
+<OPTION VALUE="odd" {?parity=odd?SELECTED:}>奇
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">資料位元:</TH>
+<TD><SELECT NAME="BITS">
+<OPTION {?bits=8?SELECTED:}>8
+<OPTION {?bits=7?SELECTED:}>7
+</SELECT></TD>
+</TR>
+<TR>
+<TH CLASS="label">流程控制:</TH>
+<TD><SELECT NAME="FLOW">
+<OPTION VALUE="none" {?flow=none?SELECTED:}>無
+<OPTION VALUE="soft" {?flow=soft?SELECTED:}>XON/XOFF (軟體)
+<OPTION VALUE="hard" {?flow=hard?SELECTED:}>RTS/CTS (硬體)
+<OPTION VALUE="dtrdsr" {?flow=dtrdsr?SELECTED:}>DTR/DSR (硬體)
+</SELECT></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_LOCATION" VALUE="{?printer_location}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_INFO" VALUE="{?printer_info}">
+<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{?current_make_and_model}">
+
+<H2 CLASS="title">{printer_name} 的裝置 URI</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">裝置 URI:</TH>
+<TD><INPUT TYPE="TEXT" SIZE="60" MAXLENGTH="1024" NAME="DEVICE_URI" VALUE="{device_uri}"></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>範例:
+<PRE>
+ http://hostname:631/ipp/
+ http://hostname:631/ipp/port1
+
+ ipp://hostname/ipp/
+ ipp://hostname/ipp/port1
+
+ lpd://hostname/queue
+
+ socket://hostname
+ socket://hostname:9100
+</PRE>
+
+<P>參看 <A HREF="/help/network.html" TARGET="_blank">"網路
+印表機"</A> 來取得正確的 URI 以用於您的印表機。</P>
+
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>分類 <A HREF="/classes/{printer_name}">{printer_name}</A> 已經成功加入。
--- /dev/null
+<P><B>警告:</B> 您確定要刪除分類
+{printer_name} 嗎?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-class&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-class.gif" ALT="刪除分類"
+CLASS="button"></A></P>
--- /dev/null
+<P>分類 {printer_name} 已經成功刪除。
--- /dev/null
+<H3 CLASS="title">工作</H3>
--- /dev/null
+<P>Class <A HREF="/classes/{printer_name}">{printer_name}</A> 已經
+成功修改。
--- /dev/null
+<P ALIGN="CENTER">{total=0?沒有分類:顯示 {total} 種分類}的 {#printer_name} 。</P>
--- /dev/null
+{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Default Printer):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN=TOP><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/classes.gif" CLASS="button" ALT=""></A></TD>
+<TD VALIGN=TOP><B>描述:</B> {printer_info}<BR>
+<B>位置:</B> {printer_location}<BR>
+<B>分類狀態:</B> {printer_state=3?閒置:{printer_state=4?處理中:已停止}},
+{printer_is_accepting_jobs=0?拒絕工作:接受工作}, {printer_is_shared=0?未:已}公開。
+{?member_uris=?:<BR>成員: {member_uris}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="列印測試頁" CLASS="button"></A>
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-class&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-start-class.gif" ALT="開始分類" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-class&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-stop-class.gif" ALT="停止分類" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="接受工作" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="拒絕工作" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=purge-jobs&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="取消所有工作" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=1&is_class=Y">
+<IMG SRC="/images/button-publish-printer.gif" ALT="公開印表機" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0&is_class=Y">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="不公開印表機" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-class&printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-class.gif" ALT="修改分類" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-class&printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-class.gif" ALT="刪除分類" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-set-as-default.gif" ALT="設為預設" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&printer_name={%printer_name}&is_class=Y">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="設定允許的使用者" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
--- /dev/null
+<SCRIPT TYPE="text/javascript">
+function reset_config()
+{
+ document.cups.CUPSDCONF.value =
+"# Log general information in error_log - change \\"info\\" to \\"debug\\" for\\n" +
+"# troubleshooting...\\n" +
+"LogLevel info\\n" +
+"\\n" +
+"\\n" +
+"# Administrator user group...\\n" +
+"SystemGroup @CUPS_SYSTEM_GROUPS@\\n" +
+"\\n" +
+"\\n" +
+"# Only listen for connections from the local machine.\\n" +
+"Listen 127.0.0.1:@DEFAULT_IPP_PORT@\\n" +
+"@CUPS_LISTEN_DOMAINSOCKET@\\n" +
+"\\n" +
+"\\n" +
+"# Show shared printers on the local network.\\n" +
+"Browsing On\\n" +
+"BrowseOrder allow,deny\\n" +
+"BrowseAllow @LOCAL\\n" +
+"\\n" +
+"\\n" +
+"# Authenticate against system accounts by default...\\n" +
+"DefaultAuthType Basic\\n" +
+"\\n" +
+"# Restrict access to the server...\\n" +
+"<Location />\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Restrict access to the admin pages...\\n" +
+"<Location /admin>\\n" +
+"@ENCRYPTION_REQUIRED@\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Restrict access to configuration files...\\n" +
+"<Location /admin/conf>\\n" +
+" AuthType Basic\\n" +
+" Require user @SYSTEM\\n" +
+" Order allow,deny\\n" +
+" Allow localhost\\n" +
+"</Location>\\n" +
+"\\n" +
+"# Set the default printer/job policies...\\n" +
+"<Policy default>\\n" +
+" # Job-related operations must be done by the owner or an adminstrator...\\n" +
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>\\n" +
+" Require user @OWNER @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" # All administration operations require an adminstrator to authenticate...\\n" +
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\\n" +
+" AuthType Basic\\n" +
+" Require user @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" # Only the owner or an administrator can cancel or authenticate a job...\\n" +
+" <Limit Cancel-Job CUPS-Authenticate-Job>\\n" +
+" Require user @OWNER @SYSTEM\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"\\n" +
+" <Limit All>\\n" +
+" Order deny,allow\\n" +
+" </Limit>\\n" +
+"</Policy>\\n";
+}
+</SCRIPT>
+
+<H2 CLASS="title">伺服器配置檔案</H2>
+
+<FORM NAME="cups" METHOD="POST" ACTION="/admin/">
+
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="config-server">
+
+<TEXTAREA NAME="CUPSDCONF" COLS="80" ROWS="25">{CUPSDCONF}</TEXTAREA>
+
+<P><INPUT TYPE="IMAGE" SRC="/images/button-save-changes.gif"
+ALT="儲存變更"> <A
+HREF="javascript:reset_config();"><IMG
+SRC="/images/button-use-default-config.gif" CLASS="button"
+ALT="使用預設配置檔案"></A></P>
+
+</FORM>
--- /dev/null
+<P>錯誤:</P>
+
+<BLOCKQUOTE>不明的操作 "{op}"!</BLOCKQUOTE>
--- /dev/null
+<P>{?message?{message}:錯誤:}</P>
+
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>{title} - CUPS @CUPS_VERSION@@CUPS_REVISION@</TITLE>
+ <!-- Prevent caching of CGI content -->
+ <META HTTP-EQUIV="Expires" CONTENT="now">
+ <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+ {refresh_page?<META HTTP-EQUIV="Refresh" CONTENT="{refresh_page}">:}
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%" STYLE="height: 100%;" BORDER="0" CELLSPACING="0" CELLPADDING="0" SUMMARY="{title}">
+<TR CLASS="header">
+<TD VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG SRC="/images/top-left.gif" WIDTH="15" HEIGHT="80" ALT=""></TD>
+<TD VALIGN="TOP" WIDTH="55" ROWSPAN="2"><IMG SRC="/images/top-middle.gif" WIDTH="55" HEIGHT="80" ALT=""></TD>
+<TD WIDTH="100%" HEIGHT="60"><H1>{title}</H1></TD>
+<TD ALIGN="RIGHT" VALIGN="TOP" WIDTH="15" ROWSPAN="2"><IMG
+SRC="/images/top-right.gif" WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+<TR CLASS="header"><TD WIDTH="100%" VALIGN="BOTTOM" NOWRAP>
+
+<A CLASS="unsel" HREF="/"><IMG SRC="/images/tab-left.gif"
+WIDTH="4" HEIGHT="4" ALIGN="TOP" BORDER="0"
+ALT=""> 首頁 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=admin?:un}sel" HREF="/admin"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> 管理 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=classes?:un}sel" HREF="/classes/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> 分類 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=help?:un}sel" HREF="/help/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> 文件/求助 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=jobs?:un}sel" HREF="/jobs/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> 工作 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+ <A CLASS="{SECTION=printers?:un}sel" HREF="/printers/"><IMG
+SRC="/images/tab-left.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""> 印表機 <IMG
+SRC="/images/tab-right.gif" WIDTH="4" HEIGHT="4" ALIGN="TOP"
+BORDER="0" ALT=""></A>
+
+</TD></TR>
+<TR CLASS="page">
+<TD WIDTH="15"> </TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="height: 100%;" VALIGN="TOP" CLASS="page">
--- /dev/null
+<FORM ACTION="/help/{?HELPFILE}" METHOD="GET">
+{TOPIC?<INPUT TYPE="HIDDEN" NAME="TOPIC" VALUE="{TOPIC}">:}
+
+<P ALIGN="CENTER"><B>搜尋於
+{HELPTITLE?{HELPTITLE}:{TOPIC?{TOPIC}:所有文件}}:</B> <INPUT
+TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="搜尋">
+<A HREF="/help/{?HELPFILE}{QUERY?{TOPIC??TOPIC={TOPIC}:}:}"><IMG
+SRC="/images/button-clear.gif" ALT="清空" CLASS="button"></A></P>
+
+</FORM>
+
+<!-- Bookmarks -->
+<DIV CLASS="sidebar">
+<H3 CLASS="title">線上說明文件</H3>
+
+<P CLASS="l0"><A HREF="/help/{QUERY??QUERY={QUERY}:}">所有文件</A></P>
+<HR>
+
+{[BMTEXT]<P CLASS="l{BMINDENT}"><A HREF="{BMLINK}">{BMTEXT}</A></P>
+}
+</DIV>
+
+{QUERY?<P>搜尋結果於 {HELPFILE?{HELPTITLE}:{TOPIC?{TOPIC}:所有文件}}\:</P>
+{QTEXT?<UL>
+{[QTEXT]<LI><A HREF="{QLINK}">{QTEXT}</A>{QPTEXT? (in <I><A HREF="{QPLINK}">{QPTEXT}</A></I>):}</LI>}
+{QTEXT?</UL>:}
+:<P>找不到符合者。</P>}
+<HR NOSHADE>:}
+{HELPTITLE?<H1>{HELPTITLE}
+<A HREF="/help/{HELPFILE}?PRINTABLE=YES" TARGET="_blank"><IMG
+SRC="/images/button-view-printable-version.gif" ALT="檢視可列印版本"
+CLASS="button"></A></H1>:<H1>CUPS 說明頁面</H1>
+
+<P>這是 CUPS 線上說明介面。在上方輸入搜尋字詞
+或是按下任何的文件連結以顯示線上說明資訊。</P>
+
+<P>如果您剛接觸 CUPS,請參閱 "<a
+href="overview.html">CUPS 概觀</a>" 頁面。有經驗的使用者
+應該參閱 "<a href="whatsnew.html">CUPS 1.2 有何新功能</a>" 頁面。</P>
+
+<P><A HREF="http://www.cups.org/">CUPS 首頁</A> 也
+提供許多資源,包括使用者論壇、常見問題的回答,
+以及用來提交錯誤報告與功能需求的表格。</P>}
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
+ <TITLE>{HELPTITLE}</TITLE>
+ <LINK REL="STYLESHEET" TYPE="text/css" HREF="/cups-printable.css">
+ <LINK REL="SHORTCUT ICON" HREF="/favicon.ico" TYPE="image/x-icon">
+</HEAD>
+<BODY>
+
+<H1>{HELPTITLE}</H1>
--- /dev/null
+<P><A HREF="{job_printer_uri}">工作 {job_id}</A> 已經取消。
--- /dev/null
+<P><A HREF="{job_printer_uri}">工作 {job_id}</A> 已經延遲列印。
--- /dev/null
+<FORM METHOD="POST" ACTION="/{SECTION}/{job_id?:{printer_name}}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{job_id?<INPUT TYPE="HIDDEN" NAME="JOB_ID" VALUE="{job_id}">:}
+
+<H2 CLASS="title">{job_id?移動工作 {job_id}:移動所有工作}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">新目的地:</TH>
+<TD>
+<SELECT NAME="JOB_PRINTER_URI" SIZE="10">
+{[job_printer_uri]<OPTION VALUE="{job_printer_uri}">{job_printer_name}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-move-job{job_id?:s}.gif" ALT="移動工作"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>{job_id?<A HREF="/jobs/{job_id}">工作 {job_id}</A>:所有工作} 移動至
+<A HREF="{job_printer_uri}">{job_printer_name}</A>。</P>
--- /dev/null
+<P><A HREF="{job_printer_uri}">工作 {job_id}</A> 已經釋出至列印。
--- /dev/null
+<P><A HREF="{job_printer_uri}">工作 {job_id}</A> 已經重新啟動。
--- /dev/null
+<P>{?which_jobs=?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="顯示已完成工作"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="顯示所有工作">:{which_jobs=all?<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=completed"><IMG
+SRC="/images/button-show-completed.gif" CLASS="button" ALT="顯示已完成工作"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="顯示進行中工作">:<A
+HREF="{?printer_name=?/jobs:{printer_uri_supported}}"><IMG
+SRC="/images/button-show-active.gif" CLASS="button" ALT="顯示進行中工作"></A>
+<A HREF="{?printer_name=?/jobs:{printer_uri_supported}}?which_jobs=all"><IMG
+SRC="/images/button-show-all.gif" CLASS="button" ALT="顯示所有工作">}}</A></P>
+
+<P ALIGN="CENTER">{total=0?No jobs:Showing {#job_id} of {total} {?which_jobs=?active:{which_jobs=all?:completed}} job{total=1?:s}}.</P>
--- /dev/null
+{#job_id=0?:
+<TABLE CELLPADDING="0" CELLSPACING="0" CLASS="button" WIDTH="100%" SUMMARY="Job List">
+<TR CLASS="data">
+<TH>ID </TH>
+<TH>名稱 </TH>
+<TH>使用者 </TH>
+<TH>大小 </TH>
+<TH>頁數 </TH>
+<TH>狀態 </TH>
+<TH>控制 </TH>
+</TR>
+
+{[job_id]
+<TR CLASS="data" VALIGN="TOP">
+<TD><A HREF="{job_printer_uri}">{job_printer_name}</A>-{job_id} </TD>
+<TD>{?job_name=?不明:{job_name}} </TD>
+<TD>{job_originating_user_name} </TD>
+<TD>{job_k_octets}k </TD>
+<TD>{job_media_sheets_completed=0?不明:{?job_media_sheets_completed}} </TD>
+<TD>{job_state=3?擱置自<BR>{time_at_creation}:{job_state=4?延遲自<BR>{time_at_creation}:
+{job_state=5?處理自<BR>{time_at_processing}:{job_state=6?停止:
+{job_state=7?取消於<BR>{time_at_completed}:{job_state=8?中斷:完成於<BR>{time_at_completed}}}}}}} </TD>
+<TD>
+{job_preserved>0?
+<A HREF="/jobs/?op=restart-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-restart-job.gif" ALT="重新列印工作" CLASS="button"></A>:}
+{job_state=4?
+<A HREF="/jobs/?op=release-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-release-job.gif" ALT="釋出工作" CLASS="button"></A>:}
+{job_state=3?
+<A HREF="/jobs/?op=hold-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-hold-job.gif" ALT="延遲工作" CLASS="button"></A>:}
+{job_state<7?
+<A HREF="/jobs/?op=cancel-job&job_id={job_id}&job_printer_uri={job_printer_uri}">
+<IMG SRC="/images/button-cancel-job.gif" ALT="取消工作" CLASS="button"></A>
+<A HREF="/jobs/?op=move-job&job_id={job_id}"><IMG
+SRC="/images/button-move-job.gif" ALT="移動工作" CLASS="button"></A>:}
+ </TD>
+</TR>
+}
+</TABLE>
+}
--- /dev/null
+<P>送出維護命令;工作 ID 為 <A HREF="/printers/{printer_name}">
+{printer_name}-{job_id}</A>。</P>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+
+<H2 CLASS="title">修改分類 {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">名稱:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">位置:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">描述:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"></TD>
+</TR>
+<TR>
+<TH CLASS="label">成員:</TH>
+<TD>
+<SELECT NAME="MEMBER_URIS" SIZE="10" MULTIPLE>
+{[member_uris]<OPTION VALUE="{member_uris}" {?member_selected}>{member_names}}
+</SELECT>
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-modify-class.gif" ALT="修改分類"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
+{?device_uri=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_DEVICE_URI" VALUE="{device_uri}">}
+{?printer_make_and_model=?:<INPUT TYPE="HIDDEN" NAME="CURRENT_MAKE_AND_MODEL" VALUE="{printer_make_and_model}">}
+
+<H2 CLASS="title">修改印表機 {printer_name}</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">名稱:</TH>
+<TD><INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">{printer_name}</TD>
+</TR>
+<TR>
+<TH CLASS="label">位置:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_LOCATION" VALUE="{?printer_location}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(容易理解的位置,像是 "實驗室一")</SMALL></TD>
+</TR>
+<TR>
+<TH CLASS="label">描述:</TH>
+<TD><INPUT TYPE="TEXT" NAME="PRINTER_INFO" VALUE="{?printer_info}" SIZE="40" MAXLENGTH="127"><BR>
+<SMALL>(容易理解的描述,像是 "HP LaserJet with Duplexer")</SMALL></TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-continue.gif" ALT="繼續"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD>
+{[choices]<INPUT TYPE="RADIO" NAME="{keyword}" {choices={defchoice}?CHECKED:} VALUE="{choices}">{text}}
+</TD>
+</TR>
--- /dev/null
+<P><B>錯誤:</B> 下列選項之間發生衝突:</P>
+
+<UL>
+{[ckeyword]<LI><A HREF="#{ckeyword}">{ckeytext}</A></LI>
+}</UL>
+
+<P>請變更一或多個選項以解決衝突。</P>
--- /dev/null
+<H2 CLASS="title">{printer_name}: {group}</H2>
+
+<TABLE>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}" MULTIPLE SIZE="10">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
--- /dev/null
+<TR>
+<TH CLASS="label"{conflicted=1? CLASS="conflict":}><A NAME="{keyword}">{keytext}</A>:</TH>
+<TD><SELECT NAME="{keyword}">
+{[choices]<OPTION {choices={defchoice}?SELECTED:} VALUE="{choices}">{text}}
+</SELECT></TD>
+</TR>
--- /dev/null
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-set-printer-options.gif" ALT="設定印表機選項"></TD>
+</TR>
+</TABLE>
--- /dev/null
+<TABLE WIDTH="100%" CLASS="pager" SUMMARY="Paging Bar">
+<TR>
+ <TD WIDTH="33%">{PREVURL?<A HREF="{PREVURL}"><IMG SRC="/images/button-show-previous.gif" ALT="顯示上一個" CLASS="button"></A>: }</TD>
+ <TD WIDTH="34%" ALIGN="CENTER">{ORDER=dec?<A HREF="{THISURL}&ORDER=asc"><IMG SRC="/images/button-sort-ascending.gif" ALT="遞增排序" CLASS="button"></A>:<A HREF="{THISURL}&ORDER=dec"><IMG SRC="/images/button-sort-descending.gif" ALT="遞減排序" CLASS="button"></A>}</TD>
+ <TD WIDTH="33%" ALIGN="RIGHT">{NEXTURL?<A HREF="{NEXTURL}"><IMG SRC="/images/button-show-next.gif" ALT="顯示下一個" CLASS="button"></A>: }</TD>
+</TR>
+</TABLE>
--- /dev/null
+<P>{is_class?分類:印表機} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+現在準備接受工作。</P>
--- /dev/null
+<P>印表機 <A HREF="/printers/{printer_name}">{printer_name}</A> 已經成功
+加入。
--- /dev/null
+<P>印表機 <A HREF="/printers/{printer_name}">{printer_name}</A> 已經
+成功配置。
--- /dev/null
+<P><B>警告:</B> 您確定要刪除印表機 {printer_name} 嗎?</P>
+
+<P ALIGN="CENTER"><A
+HREF="/admin?op=delete-printer&printer_name={printer_name}&confirm=yes"><IMG
+SRC="/images/button-delete-printer.gif" ALT="刪除印表機"
+CLASS="button"></A></P>
--- /dev/null
+<P>{is_class?分類:印表機} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+已被設為伺服器上的預設印表機。</P>
+
+<BLOCKQUOTE><B>注意:</B> 任何經由 <TT>lpoptions</TT> 命令所設定的使用者預設值,
+將會蓋過此一設定值。</BLOCKQUOTE>
--- /dev/null
+<P>印表機 {printer_name} 已經成功刪除。
--- /dev/null
+<H3 CLASS="title">工作</H3>
--- /dev/null
+<P>印表機 <A HREF="/printers/{printer_name}">{printer_name}</A> 已經成功
+修改。
--- /dev/null
+<P>{is_class?分類:印表機} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+的所有工作都已被清除。</P>
--- /dev/null
+<P>{is_class?分類:印表機} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+已不再接受工作。</P>
--- /dev/null
+<P>{is_class?分類:印表機} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+已經啟動。</P>
--- /dev/null
+<P>{is_class?Class:Printer} <A
+HREF="/{is_class?classes:printers}/{printer_name}">{printer_name}</A>
+已經停止。</P>
--- /dev/null
+<P ALIGN="CENTER">{total=0?沒有任何印表機:顯示 {total} 台印表機中的 {#printer_name}}。</P>
--- /dev/null
+{printer_type?:}{#printer_name=0?:
+{[printer_name]
+<H2 CLASS="title"><A HREF="{printer_uri_supported}">{printer_name}</A>{default_name={printer_name}? (Default Printer):}
+{?printer_state_message=?:<SPAN CLASS="message">"{printer_state_message}"</SPAN>}</H2>
+
+<TABLE WIDTH="100%" CLASS="button" CELLSPACING="0" CELLPADDING="0" SUMMARY="{printer_name}">
+<TR>
+<TD VALIGN="TOP"><A HREF="{printer_uri_supported}">
+<IMG SRC="/images/printer-{printer_state=3?idle:{printer_state=4?processing:stopped}}.gif" CLASS="button" ALT=""></A>
+</TD>
+<TD VALIGN="TOP"><B>描述:</B> {printer_info}<BR>
+<B>位置:</B> {printer_location}<BR>
+<B>型號:</B> {printer_make_and_model}<BR>
+<B>狀態:</B> {printer_state=3?閒置:{printer_state=4?處理中:已停止}},
+{printer_is_accepting_jobs=0?正在拒絕工作:正在接受工作}, {printer_is_shared=0?未:} 公開。
+{?device_uri=?:<BR><B>裝置 URI:</B> {device_uri}}
+
+<P>
+<A HREF="{printer_uri_supported}?op=print-test-page">
+<IMG SRC="/images/button-print-test-page.gif" ALT="印表測試頁" CLASS="button"></A>
+{?cupscommand=1?<A HREF="{printer_uri_supported}?op=clean-print-heads">
+<IMG SRC="/images/button-clean-print-heads.gif" ALT="清理列印頭" CLASS="button"></A>
+<A HREF="{printer_uri_supported}?op=print-self-test-page">
+<IMG SRC="/images/button-print-self-test-page.gif" ALT="列印自我測試頁" CLASS="button"></A>:}
+{printer_state=5?
+<A HREF="{admin_uri}?op=start-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-start-printer.gif" ALT="啟動印表機" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=stop-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-stop-printer.gif" ALT="停止印表機" CLASS="button"></A>
+}
+{printer_is_accepting_jobs=0?
+<A HREF="{admin_uri}?op=accept-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-accept-jobs.gif" ALT="接受工作" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=reject-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-reject-jobs.gif" ALT="拒絕工作" CLASS="button"></A>
+}
+<A HREF="{printer_uri_supported}?op=move-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-move-jobs.gif" ALT="移動所有工作" CLASS="button"></A>
+<A HREF="{admin_uri}?op=purge-jobs&printer_name={%printer_name}">
+<IMG SRC="/images/button-cancel-all-jobs.gif" ALT="取消所有工作" CLASS="button"></A>
+{printer_is_shared=0?
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=1">
+<IMG SRC="/images/button-publish-printer.gif" ALT="公開印表機" CLASS="button"></A>
+:
+<A HREF="{admin_uri}?op=set-sharing&printer_name={%printer_name}&shared=0">
+<IMG SRC="/images/button-unpublish-printer.gif" ALT="不公開印表機" CLASS="button"></A>
+}
+<A HREF="{admin_uri}?op=modify-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-modify-printer.gif" ALT="修改印表機" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-printer-options&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-printer-options.gif" ALT="設定印表機選項" CLASS="button"></A>
+<A HREF="{admin_uri}?op=delete-printer&printer_name={%printer_name}">
+<IMG SRC="/images/button-delete-printer.gif" ALT="刪除印表機" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-as-default&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-as-default.gif" ALT="設為預設印表機" CLASS="button"></A>
+<A HREF="{admin_uri}?op=set-allowed-users&printer_name={%printer_name}">
+<IMG SRC="/images/button-set-allowed-users.gif" ALT="設定允許的使用者" CLASS="button"></A>
+</P>
+</TD>
+</TR>
+</TABLE>
+}}
--- /dev/null
+<p>請稍待,伺服器重新啟動中…</p>
--- /dev/null
+<SCRIPT TYPE="text/javascript"><!--
+function select_printers() {
+ var list = document.export_samba.EXPORT_NAME;
+ var sel = document.export_samba.EXPORT_ALL.checked;
+
+ for (i = 0; i < list.length; i ++) {
+ list.options[i].selected = sel;
+ }
+}
+--></SCRIPT>
+
+<FORM METHOD="POST" ACTION="/admin/" NAME="export_samba">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="export-samba">
+
+<H2 CLASS="title">匯出印表機至 Samba</H2>
+
+{error?<P>無法匯出印表機至 Samba\:</P>
+<BLOCKQUOTE>{error}</BLOCKQUOTE>
+<P>參閱 <A HREF="/admin/log/error_log"
+TARGET="_blank">error_log</A> 檔案以獲得更多資訊。</P>:
+<P>此頁允許您匯出印表機至 Samba,以便
+Windows 客戶端可以經由他們桌面上的 <VAR>Network
+Neighborhood</VAR> 或 <VAR>Network Places</VAR> 圖示
+來存取它們。之前您必須安裝 Windows PostScript
+印表機驅動程式,描述請見 <A HREF="/help/man-cupsaddsmb.html"
+TARGET="_blank">cupsaddsmb(8)</A> 說明頁面。</P>}
+
+<TABLE>
+<TR>
+<TH CLASS="label">印表機:</TH>
+<TD>
+<SELECT NAME="EXPORT_NAME" SIZE="10" MULTIPLE>
+{[printer_name]<OPTION VALUE="{printer_name}"{export_all? SELECTED:{printer_export? SELECTED:}}>{printer_name}}
+</SELECT><BR>
+<INPUT TYPE="CHECKBOX" NAME="EXPORT_ALL"{export_all? CHECKED:}
+onChange="select_printers()"> 匯出所有印表機
+</TD>
+</TR>
+<TR>
+<TH CLASS="label">Samba 使用者名稱:</TH>
+<TD><INPUT TYPE="TEXT" NAME="USERNAME" VALUE="{?USERNAME}"> (必要)</TD>
+</TR>
+<TR>
+<TH CLASS="label">Samba 密碼:</TH>
+<TD><INPUT TYPE="PASSWORD" NAME="PASSWORD" VALUE=""> (必要)</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD><INPUT TYPE="IMAGE" SRC="/images/button-export-samba.gif"
+ALT="匯出印表機至 Samba"></TD>
+</TR>
+</TABLE>
+
+</FORM>
--- /dev/null
+<P>印表機成功匯出至 samba。</P>
--- /dev/null
+<FORM ACTION="/{SECTION}/{?SEARCH_DEST}" METHOD="GET">
+{WHICH_JOBS?<INPUT TYPE="HIDDEN" NAME="WHICH_JOBS" VALUE="{WHICH_JOBS}">:}
+{ORDER?<INPUT TYPE="HIDDEN" NAME="ORDER" VALUE="{ORDER}">:}
+
+<P ALIGN="CENTER"><B>搜尋於
+{SEARCH_DEST?{SEARCH_DEST}:{SECTION=classes?分類:{SECTION=jobs?工作:印表機}}}:</B>
+<INPUT TYPE="TEXT" NAME="QUERY" VALUE="{?QUERY}" SIZE="60"> <INPUT
+TYPE="IMAGE" SRC="/images/button-search.gif" ALT="Search">
+<A
+HREF="/{SECTION}/{?SEARCH_DEST}{WHICH_JOBS??WHICH_JOBS={WHICH_JOBS}{ORDER?&ORDER={ORDER}:}:{ORDER??ORDER={ORDER}:}}"><IMG
+SRC="/images/button-clear.gif" ALT="Clear" CLASS="button"></A></P>
+
+</FORM>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{op}">
--- /dev/null
+<P>已送出測試頁;工作 ID 為 <A HREF="/{SECTION}/{printer_name}">
+{printer_name}-{job_id}</A>。</P>
--- /dev/null
+</TD>
+<TD WIDTH="15"> </TD>
+</TR>
+<TR CLASS="trailer">
+<TD VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-left.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+<TD COLSPAN="2" WIDTH="100%" STYLE="padding: 5;">
+
+<P><SMALL>Common UNIX Printing System、CUPS 以及 CUPS 圖標都是
+<A HREF="http://www.easysw.com">Easy Software Products</A>
+的商標財產。CUPS 是 1997-2007 由 Easy Software Products 版權所有,
+保留一切權利。</SMALL></P>
+
+</TD>
+
+<TD ALIGN="RIGHT" VALIGN="BOTTOM" WIDTH="15"><IMG SRC="/images/bottom-right.gif"
+WIDTH="15" HEIGHT="15" ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>
--- /dev/null
+<FORM METHOD="POST" ACTION="/admin">
+<INPUT TYPE="HIDDEN" NAME="OP" VALUE="{OP}">
+<INPUT TYPE="HIDDEN" NAME="PRINTER_NAME" VALUE="{printer_name}">
+{IS_CLASS?<INPUT TYPE="HIDDEN" NAME="IS_CLASS" VALUE="{IS_CLASS}">:}
+
+<H2 CLASS="title">{printer_name} 所允許的使用者</H2>
+
+<TABLE>
+<TR>
+<TH CLASS="label">使用者:</TH>
+<TD>
+<INPUT TYPE='TEXT' NAME='users' SIZE='60' VALUE='{?requesting_user_name_allowed}{?requesting_user_name_denied}'>
+<BR>
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-allowed' {requesting_user_name_allowed?checked:}>允許這些使用者列印
+<INPUT TYPE='RADIO' NAME='type' VALUE='requesting-user-name-denied' {requesting_user_name_denied?checked:}>拒絕這些使用者列印
+</TD>
+</TR>
+<TR>
+<TD></TD>
+<TD>
+<INPUT TYPE="IMAGE" SRC="/images/button-set-allowed-users.gif" ALT="設定允許的使用者">
+</TD>
+</TR>
+</TABLE>
+
+</FORM>
#
# Usage:
#
-# tools/makebuttons locale buttons.txt
+# tools/makebuttons [--font filename] locale buttons.txt
#
# "Locale" is the locale name, either "ll" or "ll_CC" where "ll" is the
# 2-letter language abbreviation and "CC" is the 2-letter ISO country
# "tools/buttons.txt" for inspiration...
#
+# Bitstream Vera font...
+font="fonts/Vera.ttf"
+
+# Colors
+background="#d4d4a4"
+black="#000000"
+green="#009900"
+red="#cc0000"
+standard="#666633"
+
+
+if test "x$1" == x--font; then
+ shift
+ font="$1"
+ shift
+fi
+
if test $# -lt 2; then
- echo Usage: tools/makebuttons locale buttons.txt
+ echo Usage: tools/makebuttons "[--font filename]" locale buttons.txt
exit 1
elif test ! -d tools; then
echo ERROR: You MUST run the makebuttons script from the main CUPS source directory!
fi
-# Bitstream Vera font...
-font="fonts/Vera.ttf"
-
-# Colors
-background="#d4d4a4"
-black="#000000"
-green="#009900"
-red="#cc0000"
-standard="#666633"
-
-
# 'generate_button()' - Create a button image.
#
# Arg 1: button filename (WITH .gif extension!)
txt_h=`identify -format "%h" $tmp_btn`
txt_w=`identify -format "%w" $tmp_btn`
- if test $txt_h -gt 32; then
+ if test $txt_h -gt 40; then
echo "ERROR: 2 lines maximum for the button text"
exit 1
fi
<packaging/WELCOME.rtf >$pkgdir/Resources/Welcome.rtf
cp packaging/installer.tif $pkgdir/Resources/background.tif
-cat >$pkgdir/Resources/preflight <<EOF
+if test -x /bin/launchctl; then
+ cat >$pkgdir/Resources/preflight <<EOF
+#!/bin/sh
+# Tell launchd to reload cupsd...
+launchctl stop org.cups.cups-lpd || exit 0
+launchctl stop org.cups.cupsd || exit 0
+launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
+launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
+EOF
+else
+ cat >$pkgdir/Resources/preflight <<EOF
#!/bin/sh
# Stop any running cupsd processes...
killall cupsd || exit 0
EOF
+fi
+
chmod 755 $pkgdir/Resources/preflight
if test -x /bin/launchctl; then
cat >$pkgdir/Resources/postflight <<EOF
#!/bin/sh
-# Remove old startup item and xinetd config file, we use launchd now...
-rm -f /System/Library/StartupItems/PrintingServices/PrintingServices
+# Remove old xinetd config file, we use launchd now...
rm -f /etc/xinetd.d/cups-lpd
# Tell launchd to reload cupsd...
-launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist || exit 0
-launchctl unload /System/Library/LaunchDaemons/org.cups.cups-lpd.plist || exit 0
launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist
launchctl load /System/Library/LaunchDaemons/org.cups.cupsd-lpd.plist || exit 0
+launchctl start org.cups.cupsd
EOF
else
cat >$pkgdir/Resources/postflight <<EOF