From e5525a7f1959630103d3f95c1ebdec0d92d0a1d5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 7 Jul 2025 00:18:43 +0000 Subject: [PATCH 1/4] sync with cpython 52180bfb --- library/multiprocessing.po | 828 +++++++++++++++++++------------------ 1 file changed, 415 insertions(+), 413 deletions(-) diff --git a/library/multiprocessing.po b/library/multiprocessing.po index 77bc4341ef..48c18f3e30 100644 --- a/library/multiprocessing.po +++ b/library/multiprocessing.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-27 07:36+0000\n" +"POT-Creation-Date: 2025-07-07 00:17+0000\n" "PO-Revision-Date: 2018-05-23 16:06+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -1665,60 +1665,62 @@ msgstr "" #: ../../library/multiprocessing.rst:1082 msgid "" -"If *method* is ``None`` then the default context is returned. Otherwise " -"*method* should be ``'fork'``, ``'spawn'``, ``'forkserver'``. :exc:" -"`ValueError` is raised if the specified start method is not available. See :" -"ref:`multiprocessing-start-methods`." +"If *method* is ``None`` then the default context is returned. Note that if " +"the global start method has not been set, this will set it to the default " +"method. Otherwise *method* should be ``'fork'``, ``'spawn'``, " +"``'forkserver'``. :exc:`ValueError` is raised if the specified start method " +"is not available. See :ref:`multiprocessing-start-methods`." msgstr "" -#: ../../library/multiprocessing.rst:1091 +#: ../../library/multiprocessing.rst:1093 msgid "Return the name of start method used for starting processes." msgstr "" -#: ../../library/multiprocessing.rst:1093 +#: ../../library/multiprocessing.rst:1095 msgid "" -"If the start method has not been fixed and *allow_none* is false, then the " -"start method is fixed to the default and the name is returned. If the start " -"method has not been fixed and *allow_none* is true then ``None`` is returned." +"If the global start method has not been set and *allow_none* is ``False``, " +"then the start method is set to the default and the name is returned. If the " +"start method has not been set and *allow_none* is ``True`` then ``None`` is " +"returned." msgstr "" -#: ../../library/multiprocessing.rst:1098 +#: ../../library/multiprocessing.rst:1100 msgid "" "The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'`` or " "``None``. See :ref:`multiprocessing-start-methods`." msgstr "" -#: ../../library/multiprocessing.rst:1105 +#: ../../library/multiprocessing.rst:1107 msgid "" "On macOS, the *spawn* start method is now the default. The *fork* start " "method should be considered unsafe as it can lead to crashes of the " "subprocess. See :issue:`33725`." msgstr "" -#: ../../library/multiprocessing.rst:1111 +#: ../../library/multiprocessing.rst:1113 msgid "" "Set the path of the Python interpreter to use when starting a child process. " "(By default :data:`sys.executable` is used). Embedders will probably need " "to do some thing like ::" msgstr "" -#: ../../library/multiprocessing.rst:1115 +#: ../../library/multiprocessing.rst:1117 msgid "set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))" msgstr "set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))" -#: ../../library/multiprocessing.rst:1117 +#: ../../library/multiprocessing.rst:1119 msgid "before they can create child processes." msgstr "" -#: ../../library/multiprocessing.rst:1119 +#: ../../library/multiprocessing.rst:1121 msgid "Now supported on POSIX when the ``'spawn'`` start method is used." msgstr "" -#: ../../library/multiprocessing.rst:1122 +#: ../../library/multiprocessing.rst:1124 msgid "Accepts a :term:`path-like object`." msgstr "接受一個\\ :term:`類路徑物件 `。" -#: ../../library/multiprocessing.rst:1127 +#: ../../library/multiprocessing.rst:1129 msgid "" "Set a list of module names for the forkserver main process to attempt to " "import so that their already imported state is inherited by forked " @@ -1727,19 +1729,19 @@ msgid "" "process." msgstr "" -#: ../../library/multiprocessing.rst:1133 +#: ../../library/multiprocessing.rst:1135 msgid "" "For this to work, it must be called before the forkserver process has been " "launched (before creating a :class:`Pool` or starting a :class:`Process`)." msgstr "" -#: ../../library/multiprocessing.rst:1136 +#: ../../library/multiprocessing.rst:1138 msgid "" "Only meaningful when using the ``'forkserver'`` start method. See :ref:" "`multiprocessing-start-methods`." msgstr "" -#: ../../library/multiprocessing.rst:1143 +#: ../../library/multiprocessing.rst:1145 msgid "" "Set the method which should be used to start child processes. The *method* " "argument can be ``'fork'``, ``'spawn'`` or ``'forkserver'``. Raises :exc:" @@ -1749,17 +1751,17 @@ msgid "" "then the context is set to the default context." msgstr "" -#: ../../library/multiprocessing.rst:1150 +#: ../../library/multiprocessing.rst:1152 msgid "" "Note that this should be called at most once, and it should be protected " "inside the ``if __name__ == '__main__'`` clause of the main module." msgstr "" -#: ../../library/multiprocessing.rst:1154 +#: ../../library/multiprocessing.rst:1156 msgid "See :ref:`multiprocessing-start-methods`." msgstr "參閱 :ref:`multiprocessing-start-methods`。" -#: ../../library/multiprocessing.rst:1160 +#: ../../library/multiprocessing.rst:1162 msgid "" ":mod:`multiprocessing` contains no analogues of :func:`threading." "active_count`, :func:`threading.enumerate`, :func:`threading.settrace`, :" @@ -1767,75 +1769,75 @@ msgid "" "local`." msgstr "" -#: ../../library/multiprocessing.rst:1167 +#: ../../library/multiprocessing.rst:1169 msgid "Connection Objects" msgstr "" -#: ../../library/multiprocessing.rst:1171 +#: ../../library/multiprocessing.rst:1173 msgid "" "Connection objects allow the sending and receiving of picklable objects or " "strings. They can be thought of as message oriented connected sockets." msgstr "" -#: ../../library/multiprocessing.rst:1174 +#: ../../library/multiprocessing.rst:1176 msgid "" "Connection objects are usually created using :func:`Pipe ` -- see also :ref:`multiprocessing-listeners-clients`." msgstr "" -#: ../../library/multiprocessing.rst:1182 +#: ../../library/multiprocessing.rst:1184 msgid "" "Send an object to the other end of the connection which should be read " "using :meth:`recv`." msgstr "" -#: ../../library/multiprocessing.rst:1185 +#: ../../library/multiprocessing.rst:1187 msgid "" "The object must be picklable. Very large pickles (approximately 32 MiB+, " "though it depends on the OS) may raise a :exc:`ValueError` exception." msgstr "" -#: ../../library/multiprocessing.rst:1190 +#: ../../library/multiprocessing.rst:1192 msgid "" "Return an object sent from the other end of the connection using :meth:" "`send`. Blocks until there is something to receive. Raises :exc:`EOFError` " "if there is nothing left to receive and the other end was closed." msgstr "" -#: ../../library/multiprocessing.rst:1197 +#: ../../library/multiprocessing.rst:1199 msgid "Return the file descriptor or handle used by the connection." msgstr "" -#: ../../library/multiprocessing.rst:1201 +#: ../../library/multiprocessing.rst:1203 msgid "Close the connection." msgstr "" -#: ../../library/multiprocessing.rst:1203 +#: ../../library/multiprocessing.rst:1205 msgid "This is called automatically when the connection is garbage collected." msgstr "" -#: ../../library/multiprocessing.rst:1207 +#: ../../library/multiprocessing.rst:1209 msgid "Return whether there is any data available to be read." msgstr "" -#: ../../library/multiprocessing.rst:1209 +#: ../../library/multiprocessing.rst:1211 msgid "" "If *timeout* is not specified then it will return immediately. If *timeout* " "is a number then this specifies the maximum time in seconds to block. If " "*timeout* is ``None`` then an infinite timeout is used." msgstr "" -#: ../../library/multiprocessing.rst:1213 +#: ../../library/multiprocessing.rst:1215 msgid "" "Note that multiple connection objects may be polled at once by using :func:" "`multiprocessing.connection.wait`." msgstr "" -#: ../../library/multiprocessing.rst:1218 +#: ../../library/multiprocessing.rst:1220 msgid "Send byte data from a :term:`bytes-like object` as a complete message." msgstr "" -#: ../../library/multiprocessing.rst:1220 +#: ../../library/multiprocessing.rst:1222 msgid "" "If *offset* is given then data is read from that position in *buffer*. If " "*size* is given then that many bytes will be read from buffer. Very large " @@ -1843,7 +1845,7 @@ msgid "" "exc:`ValueError` exception" msgstr "" -#: ../../library/multiprocessing.rst:1227 +#: ../../library/multiprocessing.rst:1229 msgid "" "Return a complete message of byte data sent from the other end of the " "connection as a string. Blocks until there is something to receive. Raises :" @@ -1851,19 +1853,19 @@ msgid "" "closed." msgstr "" -#: ../../library/multiprocessing.rst:1232 +#: ../../library/multiprocessing.rst:1234 msgid "" "If *maxlength* is specified and the message is longer than *maxlength* then :" "exc:`OSError` is raised and the connection will no longer be readable." msgstr "" -#: ../../library/multiprocessing.rst:1236 +#: ../../library/multiprocessing.rst:1238 msgid "" "This function used to raise :exc:`IOError`, which is now an alias of :exc:" "`OSError`." msgstr "" -#: ../../library/multiprocessing.rst:1243 +#: ../../library/multiprocessing.rst:1245 msgid "" "Read into *buffer* a complete message of byte data sent from the other end " "of the connection and return the number of bytes in the message. Blocks " @@ -1871,38 +1873,38 @@ msgid "" "nothing left to receive and the other end was closed." msgstr "" -#: ../../library/multiprocessing.rst:1249 +#: ../../library/multiprocessing.rst:1251 msgid "" "*buffer* must be a writable :term:`bytes-like object`. If *offset* is given " "then the message will be written into the buffer from that position. Offset " "must be a non-negative integer less than the length of *buffer* (in bytes)." msgstr "" -#: ../../library/multiprocessing.rst:1254 +#: ../../library/multiprocessing.rst:1256 msgid "" "If the buffer is too short then a :exc:`BufferTooShort` exception is raised " "and the complete message is available as ``e.args[0]`` where ``e`` is the " "exception instance." msgstr "" -#: ../../library/multiprocessing.rst:1258 +#: ../../library/multiprocessing.rst:1260 msgid "" "Connection objects themselves can now be transferred between processes " "using :meth:`Connection.send` and :meth:`Connection.recv`." msgstr "" -#: ../../library/multiprocessing.rst:1262 +#: ../../library/multiprocessing.rst:1264 msgid "" "Connection objects also now support the context management protocol -- see :" "ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the " "connection object, and :meth:`~contextmanager.__exit__` calls :meth:`close`." msgstr "" -#: ../../library/multiprocessing.rst:1266 +#: ../../library/multiprocessing.rst:1268 msgid "For example:" msgstr "舉例來說:" -#: ../../library/multiprocessing.rst:1268 +#: ../../library/multiprocessing.rst:1270 msgid "" ">>> from multiprocessing import Pipe\n" ">>> a, b = Pipe()\n" @@ -1938,14 +1940,14 @@ msgstr "" ">>> arr2\n" "array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])" -#: ../../library/multiprocessing.rst:1291 +#: ../../library/multiprocessing.rst:1293 msgid "" "The :meth:`Connection.recv` method automatically unpickles the data it " "receives, which can be a security risk unless you can trust the process " "which sent the message." msgstr "" -#: ../../library/multiprocessing.rst:1295 +#: ../../library/multiprocessing.rst:1297 msgid "" "Therefore, unless the connection object was produced using :func:`Pipe` you " "should only use the :meth:`~Connection.recv` and :meth:`~Connection.send` " @@ -1953,73 +1955,73 @@ msgid "" "`multiprocessing-auth-keys`." msgstr "" -#: ../../library/multiprocessing.rst:1302 +#: ../../library/multiprocessing.rst:1304 msgid "" "If a process is killed while it is trying to read or write to a pipe then " "the data in the pipe is likely to become corrupted, because it may become " "impossible to be sure where the message boundaries lie." msgstr "" -#: ../../library/multiprocessing.rst:1308 +#: ../../library/multiprocessing.rst:1310 msgid "Synchronization primitives" msgstr "" -#: ../../library/multiprocessing.rst:1312 +#: ../../library/multiprocessing.rst:1314 msgid "" "Generally synchronization primitives are not as necessary in a multiprocess " "program as they are in a multithreaded program. See the documentation for :" "mod:`threading` module." msgstr "" -#: ../../library/multiprocessing.rst:1316 +#: ../../library/multiprocessing.rst:1318 msgid "" "Note that one can also create synchronization primitives by using a manager " "object -- see :ref:`multiprocessing-managers`." msgstr "" -#: ../../library/multiprocessing.rst:1321 +#: ../../library/multiprocessing.rst:1323 msgid "A barrier object: a clone of :class:`threading.Barrier`." msgstr "" -#: ../../library/multiprocessing.rst:1327 +#: ../../library/multiprocessing.rst:1329 msgid "" "A bounded semaphore object: a close analog of :class:`threading." "BoundedSemaphore`." msgstr "" -#: ../../library/multiprocessing.rst:1330 -#: ../../library/multiprocessing.rst:1468 +#: ../../library/multiprocessing.rst:1332 +#: ../../library/multiprocessing.rst:1470 msgid "" "A solitary difference from its close analog exists: its ``acquire`` method's " "first argument is named *block*, as is consistent with :meth:`Lock.acquire`." msgstr "" -#: ../../library/multiprocessing.rst:1334 +#: ../../library/multiprocessing.rst:1336 msgid "" "On macOS, this is indistinguishable from :class:`Semaphore` because " "``sem_getvalue()`` is not implemented on that platform." msgstr "" -#: ../../library/multiprocessing.rst:1339 +#: ../../library/multiprocessing.rst:1341 msgid "A condition variable: an alias for :class:`threading.Condition`." msgstr "" -#: ../../library/multiprocessing.rst:1341 +#: ../../library/multiprocessing.rst:1343 msgid "" "If *lock* is specified then it should be a :class:`Lock` or :class:`RLock` " "object from :mod:`multiprocessing`." msgstr "" -#: ../../library/multiprocessing.rst:1344 -#: ../../library/multiprocessing.rst:1882 +#: ../../library/multiprocessing.rst:1346 +#: ../../library/multiprocessing.rst:1884 msgid "The :meth:`~threading.Condition.wait_for` method was added." msgstr "" -#: ../../library/multiprocessing.rst:1349 +#: ../../library/multiprocessing.rst:1351 msgid "A clone of :class:`threading.Event`." msgstr "" -#: ../../library/multiprocessing.rst:1354 +#: ../../library/multiprocessing.rst:1356 msgid "" "A non-recursive lock object: a close analog of :class:`threading.Lock`. Once " "a process or thread has acquired a lock, subsequent attempts to acquire it " @@ -2030,25 +2032,25 @@ msgid "" "as noted." msgstr "" -#: ../../library/multiprocessing.rst:1362 +#: ../../library/multiprocessing.rst:1364 msgid "" "Note that :class:`Lock` is actually a factory function which returns an " "instance of ``multiprocessing.synchronize.Lock`` initialized with a default " "context." msgstr "" -#: ../../library/multiprocessing.rst:1366 +#: ../../library/multiprocessing.rst:1368 msgid "" ":class:`Lock` supports the :term:`context manager` protocol and thus may be " "used in :keyword:`with` statements." msgstr "" -#: ../../library/multiprocessing.rst:1371 -#: ../../library/multiprocessing.rst:1422 +#: ../../library/multiprocessing.rst:1373 +#: ../../library/multiprocessing.rst:1424 msgid "Acquire a lock, blocking or non-blocking." msgstr "" -#: ../../library/multiprocessing.rst:1373 +#: ../../library/multiprocessing.rst:1375 msgid "" "With the *block* argument set to ``True`` (the default), the method call " "will block until the lock is in an unlocked state, then set it to locked and " @@ -2056,14 +2058,14 @@ msgid "" "that in :meth:`threading.Lock.acquire`." msgstr "" -#: ../../library/multiprocessing.rst:1378 +#: ../../library/multiprocessing.rst:1380 msgid "" "With the *block* argument set to ``False``, the method call does not block. " "If the lock is currently in a locked state, return ``False``; otherwise set " "the lock to a locked state and return ``True``." msgstr "" -#: ../../library/multiprocessing.rst:1382 +#: ../../library/multiprocessing.rst:1384 msgid "" "When invoked with a positive, floating-point value for *timeout*, block for " "at most the number of seconds specified by *timeout* as long as the lock can " @@ -2077,19 +2079,19 @@ msgid "" "acquired or ``False`` if the timeout period has elapsed." msgstr "" -#: ../../library/multiprocessing.rst:1397 +#: ../../library/multiprocessing.rst:1399 msgid "" "Release a lock. This can be called from any process or thread, not only the " "process or thread which originally acquired the lock." msgstr "" -#: ../../library/multiprocessing.rst:1400 +#: ../../library/multiprocessing.rst:1402 msgid "" "Behavior is the same as in :meth:`threading.Lock.release` except that when " "invoked on an unlocked lock, a :exc:`ValueError` is raised." msgstr "" -#: ../../library/multiprocessing.rst:1406 +#: ../../library/multiprocessing.rst:1408 msgid "" "A recursive lock object: a close analog of :class:`threading.RLock`. A " "recursive lock must be released by the process or thread that acquired it. " @@ -2098,20 +2100,20 @@ msgid "" "release it once for each time it has been acquired." msgstr "" -#: ../../library/multiprocessing.rst:1412 +#: ../../library/multiprocessing.rst:1414 msgid "" "Note that :class:`RLock` is actually a factory function which returns an " "instance of ``multiprocessing.synchronize.RLock`` initialized with a default " "context." msgstr "" -#: ../../library/multiprocessing.rst:1416 +#: ../../library/multiprocessing.rst:1418 msgid "" ":class:`RLock` supports the :term:`context manager` protocol and thus may be " "used in :keyword:`with` statements." msgstr "" -#: ../../library/multiprocessing.rst:1424 +#: ../../library/multiprocessing.rst:1426 msgid "" "When invoked with the *block* argument set to ``True``, block until the lock " "is in an unlocked state (not owned by any process or thread) unless the lock " @@ -2124,7 +2126,7 @@ msgid "" "itself." msgstr "" -#: ../../library/multiprocessing.rst:1434 +#: ../../library/multiprocessing.rst:1436 msgid "" "When invoked with the *block* argument set to ``False``, do not block. If " "the lock has already been acquired (and thus is owned) by another process or " @@ -2135,14 +2137,14 @@ msgid "" "a return value of ``True``." msgstr "" -#: ../../library/multiprocessing.rst:1442 +#: ../../library/multiprocessing.rst:1444 msgid "" "Use and behaviors of the *timeout* argument are the same as in :meth:`Lock." "acquire`. Note that some of these behaviors of *timeout* differ from the " "implemented behaviors in :meth:`threading.RLock.acquire`." msgstr "" -#: ../../library/multiprocessing.rst:1449 +#: ../../library/multiprocessing.rst:1451 msgid "" "Release a lock, decrementing the recursion level. If after the decrement " "the recursion level is zero, reset the lock to unlocked (not owned by any " @@ -2152,7 +2154,7 @@ msgid "" "locked and owned by the calling process or thread." msgstr "" -#: ../../library/multiprocessing.rst:1457 +#: ../../library/multiprocessing.rst:1459 msgid "" "Only call this method when the calling process or thread owns the lock. An :" "exc:`AssertionError` is raised if this method is called by a process or " @@ -2161,17 +2163,17 @@ msgid "" "from the implemented behavior in :meth:`threading.RLock.release`." msgstr "" -#: ../../library/multiprocessing.rst:1466 +#: ../../library/multiprocessing.rst:1468 msgid "A semaphore object: a close analog of :class:`threading.Semaphore`." msgstr "" -#: ../../library/multiprocessing.rst:1473 +#: ../../library/multiprocessing.rst:1475 msgid "" "On macOS, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with a " "timeout will emulate that function's behavior using a sleeping loop." msgstr "" -#: ../../library/multiprocessing.rst:1478 +#: ../../library/multiprocessing.rst:1480 msgid "" "Some of this package's functionality requires a functioning shared semaphore " "implementation on the host operating system. Without one, the :mod:" @@ -2180,32 +2182,32 @@ msgid "" "additional information." msgstr "" -#: ../../library/multiprocessing.rst:1486 +#: ../../library/multiprocessing.rst:1488 msgid "Shared :mod:`ctypes` Objects" msgstr "共享的 :mod:`ctypes` 物件" -#: ../../library/multiprocessing.rst:1488 +#: ../../library/multiprocessing.rst:1490 msgid "" "It is possible to create shared objects using shared memory which can be " "inherited by child processes." msgstr "" -#: ../../library/multiprocessing.rst:1493 +#: ../../library/multiprocessing.rst:1495 msgid "" "Return a :mod:`ctypes` object allocated from shared memory. By default the " "return value is actually a synchronized wrapper for the object. The object " "itself can be accessed via the *value* attribute of a :class:`Value`." msgstr "" -#: ../../library/multiprocessing.rst:1497 -#: ../../library/multiprocessing.rst:1584 +#: ../../library/multiprocessing.rst:1499 +#: ../../library/multiprocessing.rst:1586 msgid "" "*typecode_or_type* determines the type of the returned object: it is either " "a ctypes type or a one character typecode of the kind used by the :mod:" "`array` module. *\\*args* is passed on to the constructor for the type." msgstr "" -#: ../../library/multiprocessing.rst:1501 +#: ../../library/multiprocessing.rst:1503 msgid "" "If *lock* is ``True`` (the default) then a new recursive lock object is " "created to synchronize access to the value. If *lock* is a :class:`Lock` " @@ -2215,24 +2217,24 @@ msgid "" "\"process-safe\"." msgstr "" -#: ../../library/multiprocessing.rst:1508 +#: ../../library/multiprocessing.rst:1510 msgid "" "Operations like ``+=`` which involve a read and write are not atomic. So " "if, for instance, you want to atomically increment a shared value it is " "insufficient to just do ::" msgstr "" -#: ../../library/multiprocessing.rst:1512 +#: ../../library/multiprocessing.rst:1514 msgid "counter.value += 1" msgstr "counter.value += 1" -#: ../../library/multiprocessing.rst:1514 +#: ../../library/multiprocessing.rst:1516 msgid "" "Assuming the associated lock is recursive (which it is by default) you can " "instead do ::" msgstr "" -#: ../../library/multiprocessing.rst:1517 +#: ../../library/multiprocessing.rst:1519 msgid "" "with counter.get_lock():\n" " counter.value += 1" @@ -2240,19 +2242,19 @@ msgstr "" "with counter.get_lock():\n" " counter.value += 1" -#: ../../library/multiprocessing.rst:1520 -#: ../../library/multiprocessing.rst:1610 -#: ../../library/multiprocessing.rst:1625 +#: ../../library/multiprocessing.rst:1522 +#: ../../library/multiprocessing.rst:1612 +#: ../../library/multiprocessing.rst:1627 msgid "Note that *lock* is a keyword-only argument." msgstr "" -#: ../../library/multiprocessing.rst:1524 +#: ../../library/multiprocessing.rst:1526 msgid "" "Return a ctypes array allocated from shared memory. By default the return " "value is actually a synchronized wrapper for the array." msgstr "" -#: ../../library/multiprocessing.rst:1527 +#: ../../library/multiprocessing.rst:1529 msgid "" "*typecode_or_type* determines the type of the elements of the returned " "array: it is either a ctypes type or a one character typecode of the kind " @@ -2262,7 +2264,7 @@ msgid "" "initialize the array and whose length determines the length of the array." msgstr "" -#: ../../library/multiprocessing.rst:1534 +#: ../../library/multiprocessing.rst:1536 msgid "" "If *lock* is ``True`` (the default) then a new lock object is created to " "synchronize access to the value. If *lock* is a :class:`Lock` or :class:" @@ -2272,28 +2274,28 @@ msgid "" "safe\"." msgstr "" -#: ../../library/multiprocessing.rst:1541 +#: ../../library/multiprocessing.rst:1543 msgid "Note that *lock* is a keyword only argument." msgstr "" -#: ../../library/multiprocessing.rst:1543 +#: ../../library/multiprocessing.rst:1545 msgid "" "Note that an array of :data:`ctypes.c_char` has *value* and *raw* attributes " "which allow one to use it to store and retrieve strings." msgstr "" -#: ../../library/multiprocessing.rst:1548 +#: ../../library/multiprocessing.rst:1550 msgid "The :mod:`multiprocessing.sharedctypes` module" msgstr ":mod:`multiprocessing.sharedctypes` 模組" -#: ../../library/multiprocessing.rst:1553 +#: ../../library/multiprocessing.rst:1555 msgid "" "The :mod:`multiprocessing.sharedctypes` module provides functions for " "allocating :mod:`ctypes` objects from shared memory which can be inherited " "by child processes." msgstr "" -#: ../../library/multiprocessing.rst:1559 +#: ../../library/multiprocessing.rst:1561 msgid "" "Although it is possible to store a pointer in shared memory remember that " "this will refer to a location in the address space of a specific process. " @@ -2302,11 +2304,11 @@ msgid "" "may cause a crash." msgstr "" -#: ../../library/multiprocessing.rst:1567 +#: ../../library/multiprocessing.rst:1569 msgid "Return a ctypes array allocated from shared memory." msgstr "" -#: ../../library/multiprocessing.rst:1569 +#: ../../library/multiprocessing.rst:1571 msgid "" "*typecode_or_type* determines the type of the elements of the returned " "array: it is either a ctypes type or a one character typecode of the kind " @@ -2316,40 +2318,40 @@ msgid "" "initialize the array and whose length determines the length of the array." msgstr "" -#: ../../library/multiprocessing.rst:1576 +#: ../../library/multiprocessing.rst:1578 msgid "" "Note that setting and getting an element is potentially non-atomic -- use :" "func:`Array` instead to make sure that access is automatically synchronized " "using a lock." msgstr "" -#: ../../library/multiprocessing.rst:1582 +#: ../../library/multiprocessing.rst:1584 msgid "Return a ctypes object allocated from shared memory." msgstr "" -#: ../../library/multiprocessing.rst:1588 +#: ../../library/multiprocessing.rst:1590 msgid "" "Note that setting and getting the value is potentially non-atomic -- use :" "func:`Value` instead to make sure that access is automatically synchronized " "using a lock." msgstr "" -#: ../../library/multiprocessing.rst:1592 +#: ../../library/multiprocessing.rst:1594 msgid "" "Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw`` " "attributes which allow one to use it to store and retrieve strings -- see " "documentation for :mod:`ctypes`." msgstr "" -#: ../../library/multiprocessing.rst:1598 +#: ../../library/multiprocessing.rst:1600 msgid "" "The same as :func:`RawArray` except that depending on the value of *lock* a " "process-safe synchronization wrapper may be returned instead of a raw ctypes " "array." msgstr "" -#: ../../library/multiprocessing.rst:1602 -#: ../../library/multiprocessing.rst:1618 +#: ../../library/multiprocessing.rst:1604 +#: ../../library/multiprocessing.rst:1620 msgid "" "If *lock* is ``True`` (the default) then a new lock object is created to " "synchronize access to the value. If *lock* is a :class:`~multiprocessing." @@ -2359,113 +2361,113 @@ msgid "" "not necessarily be \"process-safe\"." msgstr "" -#: ../../library/multiprocessing.rst:1614 +#: ../../library/multiprocessing.rst:1616 msgid "" "The same as :func:`RawValue` except that depending on the value of *lock* a " "process-safe synchronization wrapper may be returned instead of a raw ctypes " "object." msgstr "" -#: ../../library/multiprocessing.rst:1629 +#: ../../library/multiprocessing.rst:1631 msgid "" "Return a ctypes object allocated from shared memory which is a copy of the " "ctypes object *obj*." msgstr "" -#: ../../library/multiprocessing.rst:1634 +#: ../../library/multiprocessing.rst:1636 msgid "" "Return a process-safe wrapper object for a ctypes object which uses *lock* " "to synchronize access. If *lock* is ``None`` (the default) then a :class:" "`multiprocessing.RLock` object is created automatically." msgstr "" -#: ../../library/multiprocessing.rst:1638 +#: ../../library/multiprocessing.rst:1640 msgid "" "A synchronized wrapper will have two methods in addition to those of the " "object it wraps: :meth:`get_obj` returns the wrapped object and :meth:" "`get_lock` returns the lock object used for synchronization." msgstr "" -#: ../../library/multiprocessing.rst:1642 +#: ../../library/multiprocessing.rst:1644 msgid "" "Note that accessing the ctypes object through the wrapper can be a lot " "slower than accessing the raw ctypes object." msgstr "" -#: ../../library/multiprocessing.rst:1645 +#: ../../library/multiprocessing.rst:1647 msgid "Synchronized objects support the :term:`context manager` protocol." msgstr "" -#: ../../library/multiprocessing.rst:1649 +#: ../../library/multiprocessing.rst:1651 msgid "" "The table below compares the syntax for creating shared ctypes objects from " "shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is " "some subclass of :class:`ctypes.Structure`.)" msgstr "" -#: ../../library/multiprocessing.rst:1654 +#: ../../library/multiprocessing.rst:1656 msgid "ctypes" msgstr "ctypes" -#: ../../library/multiprocessing.rst:1654 +#: ../../library/multiprocessing.rst:1656 msgid "sharedctypes using type" msgstr "" -#: ../../library/multiprocessing.rst:1654 +#: ../../library/multiprocessing.rst:1656 msgid "sharedctypes using typecode" msgstr "" -#: ../../library/multiprocessing.rst:1656 +#: ../../library/multiprocessing.rst:1658 msgid "c_double(2.4)" msgstr "c_double(2.4)" -#: ../../library/multiprocessing.rst:1656 +#: ../../library/multiprocessing.rst:1658 msgid "RawValue(c_double, 2.4)" msgstr "RawValue(c_double, 2.4)" -#: ../../library/multiprocessing.rst:1656 +#: ../../library/multiprocessing.rst:1658 msgid "RawValue('d', 2.4)" msgstr "RawValue('d', 2.4)" -#: ../../library/multiprocessing.rst:1657 +#: ../../library/multiprocessing.rst:1659 msgid "MyStruct(4, 6)" msgstr "MyStruct(4, 6)" -#: ../../library/multiprocessing.rst:1657 +#: ../../library/multiprocessing.rst:1659 msgid "RawValue(MyStruct, 4, 6)" msgstr "RawValue(MyStruct, 4, 6)" -#: ../../library/multiprocessing.rst:1658 +#: ../../library/multiprocessing.rst:1660 msgid "(c_short * 7)()" msgstr "(c_short * 7)()" -#: ../../library/multiprocessing.rst:1658 +#: ../../library/multiprocessing.rst:1660 msgid "RawArray(c_short, 7)" msgstr "RawArray(c_short, 7)" -#: ../../library/multiprocessing.rst:1658 +#: ../../library/multiprocessing.rst:1660 msgid "RawArray('h', 7)" msgstr "RawArray('h', 7)" -#: ../../library/multiprocessing.rst:1659 +#: ../../library/multiprocessing.rst:1661 msgid "(c_int * 3)(9, 2, 8)" msgstr "(c_int * 3)(9, 2, 8)" -#: ../../library/multiprocessing.rst:1659 +#: ../../library/multiprocessing.rst:1661 msgid "RawArray(c_int, (9, 2, 8))" msgstr "RawArray(c_int, (9, 2, 8))" -#: ../../library/multiprocessing.rst:1659 +#: ../../library/multiprocessing.rst:1661 msgid "RawArray('i', (9, 2, 8))" msgstr "RawArray('i', (9, 2, 8))" -#: ../../library/multiprocessing.rst:1663 +#: ../../library/multiprocessing.rst:1665 msgid "" "Below is an example where a number of ctypes objects are modified by a child " "process::" msgstr "" -#: ../../library/multiprocessing.rst:1666 +#: ../../library/multiprocessing.rst:1668 msgid "" "from multiprocessing import Process, Lock\n" "from multiprocessing.sharedctypes import Value, Array\n" @@ -2531,11 +2533,11 @@ msgstr "" " print(s.value)\n" " print([(a.x, a.y) for a in A])" -#: ../../library/multiprocessing.rst:1701 +#: ../../library/multiprocessing.rst:1703 msgid "The results printed are ::" msgstr "" -#: ../../library/multiprocessing.rst:1703 +#: ../../library/multiprocessing.rst:1705 msgid "" "49\n" "0.1111111111111111\n" @@ -2547,11 +2549,11 @@ msgstr "" "HELLO WORLD\n" "[(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]" -#: ../../library/multiprocessing.rst:1714 +#: ../../library/multiprocessing.rst:1716 msgid "Managers" msgstr "" -#: ../../library/multiprocessing.rst:1716 +#: ../../library/multiprocessing.rst:1718 msgid "" "Managers provide a way to create data which can be shared between different " "processes, including sharing over a network between processes running on " @@ -2560,7 +2562,7 @@ msgid "" "proxies." msgstr "" -#: ../../library/multiprocessing.rst:1725 +#: ../../library/multiprocessing.rst:1727 msgid "" "Returns a started :class:`~multiprocessing.managers.SyncManager` object " "which can be used for sharing objects between processes. The returned " @@ -2568,31 +2570,31 @@ msgid "" "will create shared objects and return corresponding proxies." msgstr "" -#: ../../library/multiprocessing.rst:1733 +#: ../../library/multiprocessing.rst:1735 msgid "" "Manager processes will be shutdown as soon as they are garbage collected or " "their parent process exits. The manager classes are defined in the :mod:" "`multiprocessing.managers` module:" msgstr "" -#: ../../library/multiprocessing.rst:1739 +#: ../../library/multiprocessing.rst:1741 msgid "Create a BaseManager object." msgstr "建立一個 BaseManager 物件。" -#: ../../library/multiprocessing.rst:1741 +#: ../../library/multiprocessing.rst:1743 msgid "" "Once created one should call :meth:`start` or ``get_server()." "serve_forever()`` to ensure that the manager object refers to a started " "manager process." msgstr "" -#: ../../library/multiprocessing.rst:1744 +#: ../../library/multiprocessing.rst:1746 msgid "" "*address* is the address on which the manager process listens for new " "connections. If *address* is ``None`` then an arbitrary one is chosen." msgstr "" -#: ../../library/multiprocessing.rst:1747 +#: ../../library/multiprocessing.rst:1749 msgid "" "*authkey* is the authentication key which will be used to check the validity " "of incoming connections to the server process. If *authkey* is ``None`` " @@ -2600,19 +2602,19 @@ msgid "" "it must be a byte string." msgstr "" -#: ../../library/multiprocessing.rst:1752 +#: ../../library/multiprocessing.rst:1754 msgid "" "*serializer* must be ``'pickle'`` (use :mod:`pickle` serialization) or " "``'xmlrpclib'`` (use :mod:`xmlrpc.client` serialization)." msgstr "" -#: ../../library/multiprocessing.rst:1755 +#: ../../library/multiprocessing.rst:1757 msgid "" "*ctx* is a context object, or ``None`` (use the current context). See the :" "func:`get_context` function." msgstr "" -#: ../../library/multiprocessing.rst:1758 +#: ../../library/multiprocessing.rst:1760 msgid "" "*shutdown_timeout* is a timeout in seconds used to wait until the process " "used by the manager completes in the :meth:`shutdown` method. If the " @@ -2620,24 +2622,24 @@ msgid "" "also times out, the process is killed." msgstr "" -#: ../../library/multiprocessing.rst:1763 +#: ../../library/multiprocessing.rst:1765 msgid "Added the *shutdown_timeout* parameter." msgstr "新增 *shutdown_timeout* 參數。" -#: ../../library/multiprocessing.rst:1768 +#: ../../library/multiprocessing.rst:1770 msgid "" "Start a subprocess to start the manager. If *initializer* is not ``None`` " "then the subprocess will call ``initializer(*initargs)`` when it starts." msgstr "" -#: ../../library/multiprocessing.rst:1773 +#: ../../library/multiprocessing.rst:1775 msgid "" "Returns a :class:`Server` object which represents the actual server under " "the control of the Manager. The :class:`Server` object supports the :meth:" "`serve_forever` method::" msgstr "" -#: ../../library/multiprocessing.rst:1777 +#: ../../library/multiprocessing.rst:1779 msgid "" ">>> from multiprocessing.managers import BaseManager\n" ">>> manager = BaseManager(address=('', 50000), authkey=b'abc')\n" @@ -2649,15 +2651,15 @@ msgstr "" ">>> server = manager.get_server()\n" ">>> server.serve_forever()" -#: ../../library/multiprocessing.rst:1782 +#: ../../library/multiprocessing.rst:1784 msgid ":class:`Server` additionally has an :attr:`address` attribute." msgstr "" -#: ../../library/multiprocessing.rst:1786 +#: ../../library/multiprocessing.rst:1788 msgid "Connect a local manager object to a remote manager process::" msgstr "" -#: ../../library/multiprocessing.rst:1788 +#: ../../library/multiprocessing.rst:1790 msgid "" ">>> from multiprocessing.managers import BaseManager\n" ">>> m = BaseManager(address=('127.0.0.1', 50000), authkey=b'abc')\n" @@ -2667,29 +2669,29 @@ msgstr "" ">>> m = BaseManager(address=('127.0.0.1', 50000), authkey=b'abc')\n" ">>> m.connect()" -#: ../../library/multiprocessing.rst:1794 +#: ../../library/multiprocessing.rst:1796 msgid "" "Stop the process used by the manager. This is only available if :meth:" "`start` has been used to start the server process." msgstr "" -#: ../../library/multiprocessing.rst:1797 +#: ../../library/multiprocessing.rst:1799 msgid "This can be called multiple times." msgstr "" -#: ../../library/multiprocessing.rst:1801 +#: ../../library/multiprocessing.rst:1803 msgid "" "A classmethod which can be used for registering a type or callable with the " "manager class." msgstr "" -#: ../../library/multiprocessing.rst:1804 +#: ../../library/multiprocessing.rst:1806 msgid "" "*typeid* is a \"type identifier\" which is used to identify a particular " "type of shared object. This must be a string." msgstr "" -#: ../../library/multiprocessing.rst:1807 +#: ../../library/multiprocessing.rst:1809 msgid "" "*callable* is a callable used for creating objects for this type " "identifier. If a manager instance will be connected to the server using " @@ -2697,14 +2699,14 @@ msgid "" "then this can be left as ``None``." msgstr "" -#: ../../library/multiprocessing.rst:1813 +#: ../../library/multiprocessing.rst:1815 msgid "" "*proxytype* is a subclass of :class:`BaseProxy` which is used to create " "proxies for shared objects with this *typeid*. If ``None`` then a proxy " "class is created automatically." msgstr "" -#: ../../library/multiprocessing.rst:1817 +#: ../../library/multiprocessing.rst:1819 msgid "" "*exposed* is used to specify a sequence of method names which proxies for " "this typeid should be allowed to access using :meth:`BaseProxy." @@ -2715,7 +2717,7 @@ msgid "" "method and whose name does not begin with ``'_'``.)" msgstr "" -#: ../../library/multiprocessing.rst:1826 +#: ../../library/multiprocessing.rst:1828 msgid "" "*method_to_typeid* is a mapping used to specify the return type of those " "exposed methods which should return a proxy. It maps method names to typeid " @@ -2725,22 +2727,22 @@ msgid "" "returned by the method will be copied by value." msgstr "" -#: ../../library/multiprocessing.rst:1833 +#: ../../library/multiprocessing.rst:1835 msgid "" "*create_method* determines whether a method should be created with name " "*typeid* which can be used to tell the server process to create a new shared " "object and return a proxy for it. By default it is ``True``." msgstr "" -#: ../../library/multiprocessing.rst:1837 +#: ../../library/multiprocessing.rst:1839 msgid ":class:`BaseManager` instances also have one read-only property:" msgstr "" -#: ../../library/multiprocessing.rst:1841 +#: ../../library/multiprocessing.rst:1843 msgid "The address used by the manager." msgstr "" -#: ../../library/multiprocessing.rst:1843 +#: ../../library/multiprocessing.rst:1845 msgid "" "Manager objects support the context management protocol -- see :ref:" "`typecontextmanager`. :meth:`~contextmanager.__enter__` starts the server " @@ -2748,121 +2750,121 @@ msgid "" "object. :meth:`~contextmanager.__exit__` calls :meth:`shutdown`." msgstr "" -#: ../../library/multiprocessing.rst:1849 +#: ../../library/multiprocessing.rst:1851 msgid "" "In previous versions :meth:`~contextmanager.__enter__` did not start the " "manager's server process if it was not already started." msgstr "" -#: ../../library/multiprocessing.rst:1854 +#: ../../library/multiprocessing.rst:1856 msgid "" "A subclass of :class:`BaseManager` which can be used for the synchronization " "of processes. Objects of this type are returned by :func:`multiprocessing." "Manager`." msgstr "" -#: ../../library/multiprocessing.rst:1858 +#: ../../library/multiprocessing.rst:1860 msgid "" "Its methods create and return :ref:`multiprocessing-proxy_objects` for a " "number of commonly used data types to be synchronized across processes. This " "notably includes shared lists and dictionaries." msgstr "" -#: ../../library/multiprocessing.rst:1864 +#: ../../library/multiprocessing.rst:1866 msgid "" "Create a shared :class:`threading.Barrier` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1871 +#: ../../library/multiprocessing.rst:1873 msgid "" "Create a shared :class:`threading.BoundedSemaphore` object and return a " "proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1876 +#: ../../library/multiprocessing.rst:1878 msgid "" "Create a shared :class:`threading.Condition` object and return a proxy for " "it." msgstr "" -#: ../../library/multiprocessing.rst:1879 +#: ../../library/multiprocessing.rst:1881 msgid "" "If *lock* is supplied then it should be a proxy for a :class:`threading." "Lock` or :class:`threading.RLock` object." msgstr "" -#: ../../library/multiprocessing.rst:1887 +#: ../../library/multiprocessing.rst:1889 msgid "" "Create a shared :class:`threading.Event` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1891 +#: ../../library/multiprocessing.rst:1893 msgid "" "Create a shared :class:`threading.Lock` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1895 +#: ../../library/multiprocessing.rst:1897 msgid "Create a shared :class:`Namespace` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1899 +#: ../../library/multiprocessing.rst:1901 msgid "Create a shared :class:`queue.Queue` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1903 +#: ../../library/multiprocessing.rst:1905 msgid "" "Create a shared :class:`threading.RLock` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1907 +#: ../../library/multiprocessing.rst:1909 msgid "" "Create a shared :class:`threading.Semaphore` object and return a proxy for " "it." msgstr "" -#: ../../library/multiprocessing.rst:1912 +#: ../../library/multiprocessing.rst:1914 msgid "Create an array and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1916 +#: ../../library/multiprocessing.rst:1918 msgid "" "Create an object with a writable ``value`` attribute and return a proxy for " "it." msgstr "" -#: ../../library/multiprocessing.rst:1923 +#: ../../library/multiprocessing.rst:1925 msgid "Create a shared :class:`dict` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1928 +#: ../../library/multiprocessing.rst:1930 msgid "Create a shared :class:`list` object and return a proxy for it." msgstr "" -#: ../../library/multiprocessing.rst:1930 +#: ../../library/multiprocessing.rst:1932 msgid "" "Shared objects are capable of being nested. For example, a shared container " "object such as a shared list can contain other shared objects which will all " "be managed and synchronized by the :class:`SyncManager`." msgstr "" -#: ../../library/multiprocessing.rst:1937 +#: ../../library/multiprocessing.rst:1939 msgid "A type that can register with :class:`SyncManager`." msgstr "" -#: ../../library/multiprocessing.rst:1939 +#: ../../library/multiprocessing.rst:1941 msgid "" "A namespace object has no public methods, but does have writable attributes. " "Its representation shows the values of its attributes." msgstr "" -#: ../../library/multiprocessing.rst:1942 +#: ../../library/multiprocessing.rst:1944 msgid "" "However, when using a proxy for a namespace object, an attribute beginning " "with ``'_'`` will be an attribute of the proxy and not an attribute of the " "referent:" msgstr "" -#: ../../library/multiprocessing.rst:1946 +#: ../../library/multiprocessing.rst:1948 msgid "" ">>> mp_context = multiprocessing.get_context('spawn')\n" ">>> manager = mp_context.Manager()\n" @@ -2874,18 +2876,18 @@ msgid "" "Namespace(x=10, y='hello')" msgstr "" -#: ../../library/multiprocessing.rst:1959 +#: ../../library/multiprocessing.rst:1961 msgid "Customized managers" msgstr "" -#: ../../library/multiprocessing.rst:1961 +#: ../../library/multiprocessing.rst:1963 msgid "" "To create one's own manager, one creates a subclass of :class:`BaseManager` " "and uses the :meth:`~BaseManager.register` classmethod to register new types " "or callables with the manager class. For example::" msgstr "" -#: ../../library/multiprocessing.rst:1965 +#: ../../library/multiprocessing.rst:1967 msgid "" "from multiprocessing.managers import BaseManager\n" "\n" @@ -2925,23 +2927,23 @@ msgstr "" " print(maths.add(4, 3)) # 印出 7\n" " print(maths.mul(7, 8)) # 印出 56" -#: ../../library/multiprocessing.rst:1986 +#: ../../library/multiprocessing.rst:1988 msgid "Using a remote manager" msgstr "" -#: ../../library/multiprocessing.rst:1988 +#: ../../library/multiprocessing.rst:1990 msgid "" "It is possible to run a manager server on one machine and have clients use " "it from other machines (assuming that the firewalls involved allow it)." msgstr "" -#: ../../library/multiprocessing.rst:1991 +#: ../../library/multiprocessing.rst:1993 msgid "" "Running the following commands creates a server for a single shared queue " "which remote clients can access::" msgstr "" -#: ../../library/multiprocessing.rst:1994 +#: ../../library/multiprocessing.rst:1996 msgid "" ">>> from multiprocessing.managers import BaseManager\n" ">>> from queue import Queue\n" @@ -2961,11 +2963,11 @@ msgstr "" ">>> s = m.get_server()\n" ">>> s.serve_forever()" -#: ../../library/multiprocessing.rst:2003 +#: ../../library/multiprocessing.rst:2005 msgid "One client can access the server as follows::" msgstr "" -#: ../../library/multiprocessing.rst:2005 +#: ../../library/multiprocessing.rst:2007 msgid "" ">>> from multiprocessing.managers import BaseManager\n" ">>> class QueueManager(BaseManager): pass\n" @@ -2985,11 +2987,11 @@ msgstr "" ">>> queue = m.get_queue()\n" ">>> queue.put('hello')" -#: ../../library/multiprocessing.rst:2013 +#: ../../library/multiprocessing.rst:2015 msgid "Another client can also use it::" msgstr "" -#: ../../library/multiprocessing.rst:2015 +#: ../../library/multiprocessing.rst:2017 msgid "" ">>> from multiprocessing.managers import BaseManager\n" ">>> class QueueManager(BaseManager): pass\n" @@ -3011,13 +3013,13 @@ msgstr "" ">>> queue.get()\n" "'hello'" -#: ../../library/multiprocessing.rst:2024 +#: ../../library/multiprocessing.rst:2026 msgid "" "Local processes can also access that queue, using the code from above on the " "client to access it remotely::" msgstr "" -#: ../../library/multiprocessing.rst:2027 +#: ../../library/multiprocessing.rst:2029 msgid "" ">>> from multiprocessing import Process, Queue\n" ">>> from multiprocessing.managers import BaseManager\n" @@ -3057,18 +3059,18 @@ msgstr "" ">>> s = m.get_server()\n" ">>> s.serve_forever()" -#: ../../library/multiprocessing.rst:2049 +#: ../../library/multiprocessing.rst:2051 msgid "Proxy Objects" msgstr "" -#: ../../library/multiprocessing.rst:2051 +#: ../../library/multiprocessing.rst:2053 msgid "" "A proxy is an object which *refers* to a shared object which lives " "(presumably) in a different process. The shared object is said to be the " "*referent* of the proxy. Multiple proxy objects may have the same referent." msgstr "" -#: ../../library/multiprocessing.rst:2055 +#: ../../library/multiprocessing.rst:2057 msgid "" "A proxy object has methods which invoke corresponding methods of its " "referent (although not every method of the referent will necessarily be " @@ -3076,7 +3078,7 @@ msgid "" "its referent can:" msgstr "" -#: ../../library/multiprocessing.rst:2059 +#: ../../library/multiprocessing.rst:2061 msgid "" ">>> mp_context = multiprocessing.get_context('spawn')\n" ">>> manager = mp_context.Manager()\n" @@ -3102,14 +3104,14 @@ msgstr "" ">>> l[2:5]\n" "[4, 9, 16]" -#: ../../library/multiprocessing.rst:2073 +#: ../../library/multiprocessing.rst:2075 msgid "" "Notice that applying :func:`str` to a proxy will return the representation " "of the referent, whereas applying :func:`repr` will return the " "representation of the proxy." msgstr "" -#: ../../library/multiprocessing.rst:2077 +#: ../../library/multiprocessing.rst:2079 msgid "" "An important feature of proxy objects is that they are picklable so they can " "be passed between processes. As such, a referent can contain :ref:" @@ -3117,7 +3119,7 @@ msgid "" "lists, dicts, and other :ref:`multiprocessing-proxy_objects`:" msgstr "" -#: ../../library/multiprocessing.rst:2082 +#: ../../library/multiprocessing.rst:2084 msgid "" ">>> a = manager.list()\n" ">>> b = manager.list()\n" @@ -3129,11 +3131,11 @@ msgid "" "['hello'] ['hello']" msgstr "" -#: ../../library/multiprocessing.rst:2093 +#: ../../library/multiprocessing.rst:2095 msgid "Similarly, dict and list proxies may be nested inside one another::" msgstr "" -#: ../../library/multiprocessing.rst:2095 +#: ../../library/multiprocessing.rst:2097 msgid "" ">>> l_outer = manager.list([ manager.dict() for i in range(2) ])\n" ">>> d_first_inner = l_outer[0]\n" @@ -3157,7 +3159,7 @@ msgstr "" ">>> print(l_outer[1])\n" "{'c': 3, 'z': 26}" -#: ../../library/multiprocessing.rst:2106 +#: ../../library/multiprocessing.rst:2108 msgid "" "If standard (non-proxy) :class:`list` or :class:`dict` objects are contained " "in a referent, modifications to those mutable values will not be propagated " @@ -3168,7 +3170,7 @@ msgid "" "assign the modified value to the container proxy::" msgstr "" -#: ../../library/multiprocessing.rst:2114 +#: ../../library/multiprocessing.rst:2116 msgid "" "# create a list proxy and append a mutable object (a dictionary)\n" "lproxy = manager.list()\n" @@ -3182,20 +3184,20 @@ msgid "" "lproxy[0] = d" msgstr "" -#: ../../library/multiprocessing.rst:2125 +#: ../../library/multiprocessing.rst:2127 msgid "" "This approach is perhaps less convenient than employing nested :ref:" "`multiprocessing-proxy_objects` for most use cases but also demonstrates a " "level of control over the synchronization." msgstr "" -#: ../../library/multiprocessing.rst:2131 +#: ../../library/multiprocessing.rst:2133 msgid "" "The proxy types in :mod:`multiprocessing` do nothing to support comparisons " "by value. So, for instance, we have:" msgstr "" -#: ../../library/multiprocessing.rst:2134 +#: ../../library/multiprocessing.rst:2136 msgid "" ">>> manager.list([1,2,3]) == [1,2,3]\n" "False" @@ -3203,48 +3205,48 @@ msgstr "" ">>> manager.list([1,2,3]) == [1,2,3]\n" "False" -#: ../../library/multiprocessing.rst:2139 +#: ../../library/multiprocessing.rst:2141 msgid "" "One should just use a copy of the referent instead when making comparisons." msgstr "" -#: ../../library/multiprocessing.rst:2143 +#: ../../library/multiprocessing.rst:2145 msgid "Proxy objects are instances of subclasses of :class:`BaseProxy`." msgstr "" -#: ../../library/multiprocessing.rst:2147 +#: ../../library/multiprocessing.rst:2149 msgid "Call and return the result of a method of the proxy's referent." msgstr "" -#: ../../library/multiprocessing.rst:2149 +#: ../../library/multiprocessing.rst:2151 msgid "" "If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::" msgstr "" -#: ../../library/multiprocessing.rst:2151 +#: ../../library/multiprocessing.rst:2153 msgid "proxy._callmethod(methodname, args, kwds)" msgstr "proxy._callmethod(methodname, args, kwds)" -#: ../../library/multiprocessing.rst:2153 +#: ../../library/multiprocessing.rst:2155 msgid "will evaluate the expression ::" msgstr "" -#: ../../library/multiprocessing.rst:2155 +#: ../../library/multiprocessing.rst:2157 msgid "getattr(obj, methodname)(*args, **kwds)" msgstr "getattr(obj, methodname)(*args, **kwds)" -#: ../../library/multiprocessing.rst:2157 +#: ../../library/multiprocessing.rst:2159 msgid "in the manager's process." msgstr "" -#: ../../library/multiprocessing.rst:2159 +#: ../../library/multiprocessing.rst:2161 msgid "" "The returned value will be a copy of the result of the call or a proxy to a " "new shared object -- see documentation for the *method_to_typeid* argument " "of :meth:`BaseManager.register`." msgstr "" -#: ../../library/multiprocessing.rst:2163 +#: ../../library/multiprocessing.rst:2165 msgid "" "If an exception is raised by the call, then is re-raised by :meth:" "`_callmethod`. If some other exception is raised in the manager's process " @@ -3252,17 +3254,17 @@ msgid "" "meth:`_callmethod`." msgstr "" -#: ../../library/multiprocessing.rst:2168 +#: ../../library/multiprocessing.rst:2170 msgid "" "Note in particular that an exception will be raised if *methodname* has not " "been *exposed*." msgstr "" -#: ../../library/multiprocessing.rst:2171 +#: ../../library/multiprocessing.rst:2173 msgid "An example of the usage of :meth:`_callmethod`:" msgstr "" -#: ../../library/multiprocessing.rst:2173 +#: ../../library/multiprocessing.rst:2175 msgid "" ">>> l = manager.list(range(10))\n" ">>> l._callmethod('__len__')\n" @@ -3284,69 +3286,69 @@ msgstr "" "...\n" "IndexError: list index out of range" -#: ../../library/multiprocessing.rst:2187 +#: ../../library/multiprocessing.rst:2189 msgid "Return a copy of the referent." msgstr "" -#: ../../library/multiprocessing.rst:2189 +#: ../../library/multiprocessing.rst:2191 msgid "If the referent is unpicklable then this will raise an exception." msgstr "" -#: ../../library/multiprocessing.rst:2193 +#: ../../library/multiprocessing.rst:2195 msgid "Return a representation of the proxy object." msgstr "" -#: ../../library/multiprocessing.rst:2197 +#: ../../library/multiprocessing.rst:2199 msgid "Return the representation of the referent." msgstr "" -#: ../../library/multiprocessing.rst:2201 +#: ../../library/multiprocessing.rst:2203 msgid "Cleanup" msgstr "" -#: ../../library/multiprocessing.rst:2203 +#: ../../library/multiprocessing.rst:2205 msgid "" "A proxy object uses a weakref callback so that when it gets garbage " "collected it deregisters itself from the manager which owns its referent." msgstr "" -#: ../../library/multiprocessing.rst:2206 +#: ../../library/multiprocessing.rst:2208 msgid "" "A shared object gets deleted from the manager process when there are no " "longer any proxies referring to it." msgstr "" -#: ../../library/multiprocessing.rst:2211 +#: ../../library/multiprocessing.rst:2213 msgid "Process Pools" msgstr "" -#: ../../library/multiprocessing.rst:2216 +#: ../../library/multiprocessing.rst:2218 msgid "" "One can create a pool of processes which will carry out tasks submitted to " "it with the :class:`Pool` class." msgstr "" -#: ../../library/multiprocessing.rst:2221 +#: ../../library/multiprocessing.rst:2223 msgid "" "A process pool object which controls a pool of worker processes to which " "jobs can be submitted. It supports asynchronous results with timeouts and " "callbacks and has a parallel map implementation." msgstr "" -#: ../../library/multiprocessing.rst:2225 +#: ../../library/multiprocessing.rst:2227 msgid "" "*processes* is the number of worker processes to use. If *processes* is " "``None`` then the number returned by :func:`os.process_cpu_count` is used." msgstr "" -#: ../../library/multiprocessing.rst:2228 -#: ../../library/multiprocessing.rst:2792 +#: ../../library/multiprocessing.rst:2230 +#: ../../library/multiprocessing.rst:2794 msgid "" "If *initializer* is not ``None`` then each worker process will call " "``initializer(*initargs)`` when it starts." msgstr "" -#: ../../library/multiprocessing.rst:2231 +#: ../../library/multiprocessing.rst:2233 msgid "" "*maxtasksperchild* is the number of tasks a worker process can complete " "before it will exit and be replaced with a fresh worker process, to enable " @@ -3354,7 +3356,7 @@ msgid "" "which means worker processes will live as long as the pool." msgstr "" -#: ../../library/multiprocessing.rst:2236 +#: ../../library/multiprocessing.rst:2238 msgid "" "*context* can be used to specify the context used for starting the worker " "processes. Usually a pool is created using the function :func:" @@ -3362,13 +3364,13 @@ msgid "" "both cases *context* is set appropriately." msgstr "" -#: ../../library/multiprocessing.rst:2242 +#: ../../library/multiprocessing.rst:2244 msgid "" "Note that the methods of the pool object should only be called by the " "process which created the pool." msgstr "" -#: ../../library/multiprocessing.rst:2246 +#: ../../library/multiprocessing.rst:2248 msgid "" ":class:`multiprocessing.pool` objects have internal resources that need to " "be properly managed (like any other resource) by using the pool as a context " @@ -3376,28 +3378,28 @@ msgid "" "to do this can lead to the process hanging on finalization." msgstr "" -#: ../../library/multiprocessing.rst:2251 +#: ../../library/multiprocessing.rst:2253 msgid "" "Note that it is **not correct** to rely on the garbage collector to destroy " "the pool as CPython does not assure that the finalizer of the pool will be " "called (see :meth:`object.__del__` for more information)." msgstr "" -#: ../../library/multiprocessing.rst:2255 +#: ../../library/multiprocessing.rst:2257 msgid "Added the *maxtasksperchild* parameter." msgstr "新增 *maxtasksperchild* 參數。" -#: ../../library/multiprocessing.rst:2258 +#: ../../library/multiprocessing.rst:2260 msgid "Added the *context* parameter." msgstr "新增 *context* 參數。" -#: ../../library/multiprocessing.rst:2261 +#: ../../library/multiprocessing.rst:2263 msgid "" "*processes* uses :func:`os.process_cpu_count` by default, instead of :func:" "`os.cpu_count`." msgstr "" -#: ../../library/multiprocessing.rst:2267 +#: ../../library/multiprocessing.rst:2269 msgid "" "Worker processes within a :class:`Pool` typically live for the complete " "duration of the Pool's work queue. A frequent pattern found in other systems " @@ -3408,7 +3410,7 @@ msgid "" "ability to the end user." msgstr "" -#: ../../library/multiprocessing.rst:2277 +#: ../../library/multiprocessing.rst:2279 msgid "" "Call *func* with arguments *args* and keyword arguments *kwds*. It blocks " "until the result is ready. Given this blocks, :meth:`apply_async` is better " @@ -3416,14 +3418,14 @@ msgid "" "executed in one of the workers of the pool." msgstr "" -#: ../../library/multiprocessing.rst:2284 +#: ../../library/multiprocessing.rst:2286 msgid "" "A variant of the :meth:`apply` method which returns a :class:" "`~multiprocessing.pool.AsyncResult` object." msgstr "" -#: ../../library/multiprocessing.rst:2287 -#: ../../library/multiprocessing.rst:2318 +#: ../../library/multiprocessing.rst:2289 +#: ../../library/multiprocessing.rst:2320 msgid "" "If *callback* is specified then it should be a callable which accepts a " "single argument. When the result becomes ready *callback* is applied to it, " @@ -3431,60 +3433,60 @@ msgid "" "applied instead." msgstr "" -#: ../../library/multiprocessing.rst:2292 -#: ../../library/multiprocessing.rst:2323 +#: ../../library/multiprocessing.rst:2294 +#: ../../library/multiprocessing.rst:2325 msgid "" "If *error_callback* is specified then it should be a callable which accepts " "a single argument. If the target function fails, then the *error_callback* " "is called with the exception instance." msgstr "" -#: ../../library/multiprocessing.rst:2296 -#: ../../library/multiprocessing.rst:2327 +#: ../../library/multiprocessing.rst:2298 +#: ../../library/multiprocessing.rst:2329 msgid "" "Callbacks should complete immediately since otherwise the thread which " "handles the results will get blocked." msgstr "" -#: ../../library/multiprocessing.rst:2301 +#: ../../library/multiprocessing.rst:2303 msgid "" "A parallel equivalent of the :func:`map` built-in function (it supports only " "one *iterable* argument though, for multiple iterables see :meth:`starmap`). " "It blocks until the result is ready." msgstr "" -#: ../../library/multiprocessing.rst:2305 +#: ../../library/multiprocessing.rst:2307 msgid "" "This method chops the iterable into a number of chunks which it submits to " "the process pool as separate tasks. The (approximate) size of these chunks " "can be specified by setting *chunksize* to a positive integer." msgstr "" -#: ../../library/multiprocessing.rst:2309 +#: ../../library/multiprocessing.rst:2311 msgid "" "Note that it may cause high memory usage for very long iterables. Consider " "using :meth:`imap` or :meth:`imap_unordered` with explicit *chunksize* " "option for better efficiency." msgstr "" -#: ../../library/multiprocessing.rst:2315 +#: ../../library/multiprocessing.rst:2317 msgid "" "A variant of the :meth:`.map` method which returns a :class:" "`~multiprocessing.pool.AsyncResult` object." msgstr "" -#: ../../library/multiprocessing.rst:2332 +#: ../../library/multiprocessing.rst:2334 msgid "A lazier version of :meth:`.map`." msgstr "" -#: ../../library/multiprocessing.rst:2334 +#: ../../library/multiprocessing.rst:2336 msgid "" "The *chunksize* argument is the same as the one used by the :meth:`.map` " "method. For very long iterables using a large value for *chunksize* can " "make the job complete **much** faster than using the default value of ``1``." msgstr "" -#: ../../library/multiprocessing.rst:2339 +#: ../../library/multiprocessing.rst:2341 msgid "" "Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator " "returned by the :meth:`imap` method has an optional *timeout* parameter: " @@ -3492,65 +3494,65 @@ msgid "" "result cannot be returned within *timeout* seconds." msgstr "" -#: ../../library/multiprocessing.rst:2346 +#: ../../library/multiprocessing.rst:2348 msgid "" "The same as :meth:`imap` except that the ordering of the results from the " "returned iterator should be considered arbitrary. (Only when there is only " "one worker process is the order guaranteed to be \"correct\".)" msgstr "" -#: ../../library/multiprocessing.rst:2352 +#: ../../library/multiprocessing.rst:2354 msgid "" "Like :meth:`~multiprocessing.pool.Pool.map` except that the elements of the " "*iterable* are expected to be iterables that are unpacked as arguments." msgstr "" -#: ../../library/multiprocessing.rst:2356 +#: ../../library/multiprocessing.rst:2358 msgid "" "Hence an *iterable* of ``[(1,2), (3, 4)]`` results in ``[func(1,2), " "func(3,4)]``." msgstr "" -#: ../../library/multiprocessing.rst:2363 +#: ../../library/multiprocessing.rst:2365 msgid "" "A combination of :meth:`starmap` and :meth:`map_async` that iterates over " "*iterable* of iterables and calls *func* with the iterables unpacked. " "Returns a result object." msgstr "" -#: ../../library/multiprocessing.rst:2371 +#: ../../library/multiprocessing.rst:2373 msgid "" "Prevents any more tasks from being submitted to the pool. Once all the " "tasks have been completed the worker processes will exit." msgstr "" -#: ../../library/multiprocessing.rst:2376 +#: ../../library/multiprocessing.rst:2378 msgid "" "Stops the worker processes immediately without completing outstanding work. " "When the pool object is garbage collected :meth:`terminate` will be called " "immediately." msgstr "" -#: ../../library/multiprocessing.rst:2382 +#: ../../library/multiprocessing.rst:2384 msgid "" "Wait for the worker processes to exit. One must call :meth:`close` or :meth:" "`terminate` before using :meth:`join`." msgstr "" -#: ../../library/multiprocessing.rst:2385 +#: ../../library/multiprocessing.rst:2387 msgid "" "Pool objects now support the context management protocol -- see :ref:" "`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the pool " "object, and :meth:`~contextmanager.__exit__` calls :meth:`terminate`." msgstr "" -#: ../../library/multiprocessing.rst:2393 +#: ../../library/multiprocessing.rst:2395 msgid "" "The class of the result returned by :meth:`Pool.apply_async` and :meth:`Pool." "map_async`." msgstr "" -#: ../../library/multiprocessing.rst:2398 +#: ../../library/multiprocessing.rst:2400 msgid "" "Return the result when it arrives. If *timeout* is not ``None`` and the " "result does not arrive within *timeout* seconds then :exc:`multiprocessing." @@ -3558,31 +3560,31 @@ msgid "" "exception will be reraised by :meth:`get`." msgstr "" -#: ../../library/multiprocessing.rst:2405 +#: ../../library/multiprocessing.rst:2407 msgid "Wait until the result is available or until *timeout* seconds pass." msgstr "" -#: ../../library/multiprocessing.rst:2409 +#: ../../library/multiprocessing.rst:2411 msgid "Return whether the call has completed." msgstr "" -#: ../../library/multiprocessing.rst:2413 +#: ../../library/multiprocessing.rst:2415 msgid "" "Return whether the call completed without raising an exception. Will raise :" "exc:`ValueError` if the result is not ready." msgstr "" -#: ../../library/multiprocessing.rst:2416 +#: ../../library/multiprocessing.rst:2418 msgid "" "If the result is not ready, :exc:`ValueError` is raised instead of :exc:" "`AssertionError`." msgstr "" -#: ../../library/multiprocessing.rst:2420 +#: ../../library/multiprocessing.rst:2422 msgid "The following example demonstrates the use of a pool::" msgstr "" -#: ../../library/multiprocessing.rst:2422 +#: ../../library/multiprocessing.rst:2424 msgid "" "from multiprocessing import Pool\n" "import time\n" @@ -3610,17 +3612,17 @@ msgid "" "TimeoutError" msgstr "" -#: ../../library/multiprocessing.rst:2447 +#: ../../library/multiprocessing.rst:2449 msgid "Listeners and Clients" msgstr "" -#: ../../library/multiprocessing.rst:2452 +#: ../../library/multiprocessing.rst:2454 msgid "" "Usually message passing between processes is done using queues or by using :" "class:`~Connection` objects returned by :func:`~multiprocessing.Pipe`." msgstr "" -#: ../../library/multiprocessing.rst:2456 +#: ../../library/multiprocessing.rst:2458 msgid "" "However, the :mod:`multiprocessing.connection` module allows some extra " "flexibility. It basically gives a high level message oriented API for " @@ -3629,46 +3631,46 @@ msgid "" "multiple connections at the same time." msgstr "" -#: ../../library/multiprocessing.rst:2465 +#: ../../library/multiprocessing.rst:2467 msgid "" "Send a randomly generated message to the other end of the connection and " "wait for a reply." msgstr "" -#: ../../library/multiprocessing.rst:2468 +#: ../../library/multiprocessing.rst:2470 msgid "" "If the reply matches the digest of the message using *authkey* as the key " "then a welcome message is sent to the other end of the connection. " "Otherwise :exc:`~multiprocessing.AuthenticationError` is raised." msgstr "" -#: ../../library/multiprocessing.rst:2474 +#: ../../library/multiprocessing.rst:2476 msgid "" "Receive a message, calculate the digest of the message using *authkey* as " "the key, and then send the digest back." msgstr "" -#: ../../library/multiprocessing.rst:2477 +#: ../../library/multiprocessing.rst:2479 msgid "" "If a welcome message is not received, then :exc:`~multiprocessing." "AuthenticationError` is raised." msgstr "" -#: ../../library/multiprocessing.rst:2482 +#: ../../library/multiprocessing.rst:2484 msgid "" "Attempt to set up a connection to the listener which is using address " "*address*, returning a :class:`~Connection`." msgstr "" -#: ../../library/multiprocessing.rst:2485 +#: ../../library/multiprocessing.rst:2487 msgid "" "The type of the connection is determined by *family* argument, but this can " "generally be omitted since it can usually be inferred from the format of " "*address*. (See :ref:`multiprocessing-address-formats`)" msgstr "" -#: ../../library/multiprocessing.rst:2489 -#: ../../library/multiprocessing.rst:2524 +#: ../../library/multiprocessing.rst:2491 +#: ../../library/multiprocessing.rst:2526 msgid "" "If *authkey* is given and not ``None``, it should be a byte string and will " "be used as the secret key for an HMAC-based authentication challenge. No " @@ -3677,26 +3679,26 @@ msgid "" "`multiprocessing-auth-keys`." msgstr "" -#: ../../library/multiprocessing.rst:2497 +#: ../../library/multiprocessing.rst:2499 msgid "" "A wrapper for a bound socket or Windows named pipe which is 'listening' for " "connections." msgstr "" -#: ../../library/multiprocessing.rst:2500 +#: ../../library/multiprocessing.rst:2502 msgid "" "*address* is the address to be used by the bound socket or named pipe of the " "listener object." msgstr "" -#: ../../library/multiprocessing.rst:2505 +#: ../../library/multiprocessing.rst:2507 msgid "" "If an address of '0.0.0.0' is used, the address will not be a connectable " "end point on Windows. If you require a connectable end-point, you should use " "'127.0.0.1'." msgstr "" -#: ../../library/multiprocessing.rst:2509 +#: ../../library/multiprocessing.rst:2511 msgid "" "*family* is the type of socket (or named pipe) to use. This can be one of " "the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix " @@ -3710,49 +3712,49 @@ msgid "" "using :func:`tempfile.mkstemp`." msgstr "" -#: ../../library/multiprocessing.rst:2520 +#: ../../library/multiprocessing.rst:2522 msgid "" "If the listener object uses a socket then *backlog* (1 by default) is passed " "to the :meth:`~socket.socket.listen` method of the socket once it has been " "bound." msgstr "" -#: ../../library/multiprocessing.rst:2532 +#: ../../library/multiprocessing.rst:2534 msgid "" "Accept a connection on the bound socket or named pipe of the listener object " "and return a :class:`~Connection` object. If authentication is attempted and " "fails, then :exc:`~multiprocessing.AuthenticationError` is raised." msgstr "" -#: ../../library/multiprocessing.rst:2539 +#: ../../library/multiprocessing.rst:2541 msgid "" "Close the bound socket or named pipe of the listener object. This is called " "automatically when the listener is garbage collected. However it is " "advisable to call it explicitly." msgstr "" -#: ../../library/multiprocessing.rst:2543 +#: ../../library/multiprocessing.rst:2545 msgid "Listener objects have the following read-only properties:" msgstr "" -#: ../../library/multiprocessing.rst:2547 +#: ../../library/multiprocessing.rst:2549 msgid "The address which is being used by the Listener object." msgstr "" -#: ../../library/multiprocessing.rst:2551 +#: ../../library/multiprocessing.rst:2553 msgid "" "The address from which the last accepted connection came. If this is " "unavailable then it is ``None``." msgstr "" -#: ../../library/multiprocessing.rst:2554 +#: ../../library/multiprocessing.rst:2556 msgid "" "Listener objects now support the context management protocol -- see :ref:" "`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the " "listener object, and :meth:`~contextmanager.__exit__` calls :meth:`close`." msgstr "" -#: ../../library/multiprocessing.rst:2561 +#: ../../library/multiprocessing.rst:2563 msgid "" "Wait till an object in *object_list* is ready. Returns the list of those " "objects in *object_list* which are ready. If *timeout* is a float then the " @@ -3761,32 +3763,32 @@ msgid "" "zero timeout." msgstr "" -#: ../../library/multiprocessing.rst:2567 +#: ../../library/multiprocessing.rst:2569 msgid "" "For both POSIX and Windows, an object can appear in *object_list* if it is" msgstr "" -#: ../../library/multiprocessing.rst:2570 +#: ../../library/multiprocessing.rst:2572 msgid "a readable :class:`~multiprocessing.connection.Connection` object;" msgstr "" -#: ../../library/multiprocessing.rst:2571 +#: ../../library/multiprocessing.rst:2573 msgid "a connected and readable :class:`socket.socket` object; or" msgstr "" -#: ../../library/multiprocessing.rst:2572 +#: ../../library/multiprocessing.rst:2574 msgid "" "the :attr:`~multiprocessing.Process.sentinel` attribute of a :class:" "`~multiprocessing.Process` object." msgstr "" -#: ../../library/multiprocessing.rst:2575 +#: ../../library/multiprocessing.rst:2577 msgid "" "A connection or socket object is ready when there is data available to be " "read from it, or the other end has been closed." msgstr "" -#: ../../library/multiprocessing.rst:2578 +#: ../../library/multiprocessing.rst:2580 msgid "" "**POSIX**: ``wait(object_list, timeout)`` almost equivalent ``select." "select(object_list, [], [], timeout)``. The difference is that, if :func:" @@ -3794,7 +3796,7 @@ msgid "" "an error number of ``EINTR``, whereas :func:`wait` will not." msgstr "" -#: ../../library/multiprocessing.rst:2584 +#: ../../library/multiprocessing.rst:2586 msgid "" "**Windows**: An item in *object_list* must either be an integer handle which " "is waitable (according to the definition used by the documentation of the " @@ -3804,18 +3806,18 @@ msgid "" "handles.)" msgstr "" -#: ../../library/multiprocessing.rst:2594 +#: ../../library/multiprocessing.rst:2596 msgid "**Examples**" msgstr "" -#: ../../library/multiprocessing.rst:2596 +#: ../../library/multiprocessing.rst:2598 msgid "" "The following server code creates a listener which uses ``'secret " "password'`` as an authentication key. It then waits for a connection and " "sends some data to the client::" msgstr "" -#: ../../library/multiprocessing.rst:2600 +#: ../../library/multiprocessing.rst:2602 msgid "" "from multiprocessing.connection import Listener\n" "from array import array\n" @@ -3833,13 +3835,13 @@ msgid "" " conn.send_bytes(array('i', [42, 1729]))" msgstr "" -#: ../../library/multiprocessing.rst:2615 +#: ../../library/multiprocessing.rst:2617 msgid "" "The following code connects to the server and receives some data from the " "server::" msgstr "" -#: ../../library/multiprocessing.rst:2618 +#: ../../library/multiprocessing.rst:2620 msgid "" "from multiprocessing.connection import Client\n" "from array import array\n" @@ -3869,13 +3871,13 @@ msgstr "" " print(conn.recv_bytes_into(arr)) # => 8\n" " print(arr) # => array('i', [42, 1729, 0, 0, 0])" -#: ../../library/multiprocessing.rst:2632 +#: ../../library/multiprocessing.rst:2634 msgid "" "The following code uses :func:`~multiprocessing.connection.wait` to wait for " "messages from multiple processes at once::" msgstr "" -#: ../../library/multiprocessing.rst:2635 +#: ../../library/multiprocessing.rst:2637 msgid "" "from multiprocessing import Process, Pipe, current_process\n" "from multiprocessing.connection import wait\n" @@ -3909,23 +3911,23 @@ msgid "" " print(msg)" msgstr "" -#: ../../library/multiprocessing.rst:2670 +#: ../../library/multiprocessing.rst:2672 msgid "Address Formats" msgstr "" -#: ../../library/multiprocessing.rst:2672 +#: ../../library/multiprocessing.rst:2674 msgid "" "An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where " "*hostname* is a string and *port* is an integer." msgstr "" -#: ../../library/multiprocessing.rst:2675 +#: ../../library/multiprocessing.rst:2677 msgid "" "An ``'AF_UNIX'`` address is a string representing a filename on the " "filesystem." msgstr "" -#: ../../library/multiprocessing.rst:2678 +#: ../../library/multiprocessing.rst:2680 msgid "" "An ``'AF_PIPE'`` address is a string of the form :samp:`r'\\\\\\\\\\\\.\\" "\\pipe\\\\\\\\{PipeName}'`. To use :func:`Client` to connect to a named " @@ -3934,17 +3936,17 @@ msgid "" "instead." msgstr "" -#: ../../library/multiprocessing.rst:2683 +#: ../../library/multiprocessing.rst:2685 msgid "" "Note that any string beginning with two backslashes is assumed by default to " "be an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address." msgstr "" -#: ../../library/multiprocessing.rst:2690 +#: ../../library/multiprocessing.rst:2692 msgid "Authentication keys" msgstr "" -#: ../../library/multiprocessing.rst:2692 +#: ../../library/multiprocessing.rst:2694 msgid "" "When one uses :meth:`Connection.recv `, the data received " "is automatically unpickled. Unfortunately unpickling data from an untrusted " @@ -3952,7 +3954,7 @@ msgid "" "use the :mod:`hmac` module to provide digest authentication." msgstr "" -#: ../../library/multiprocessing.rst:2698 +#: ../../library/multiprocessing.rst:2700 msgid "" "An authentication key is a byte string which can be thought of as a " "password: once a connection is established both ends will demand proof that " @@ -3960,7 +3962,7 @@ msgid "" "using the same key does **not** involve sending the key over the connection.)" msgstr "" -#: ../../library/multiprocessing.rst:2704 +#: ../../library/multiprocessing.rst:2706 msgid "" "If authentication is requested but no authentication key is specified then " "the return value of ``current_process().authkey`` is used (see :class:" @@ -3971,17 +3973,17 @@ msgid "" "setting up connections between themselves." msgstr "" -#: ../../library/multiprocessing.rst:2712 +#: ../../library/multiprocessing.rst:2714 msgid "" "Suitable authentication keys can also be generated by using :func:`os." "urandom`." msgstr "" -#: ../../library/multiprocessing.rst:2716 +#: ../../library/multiprocessing.rst:2718 msgid "Logging" msgstr "" -#: ../../library/multiprocessing.rst:2718 +#: ../../library/multiprocessing.rst:2720 msgid "" "Some support for logging is available. Note, however, that the :mod:" "`logging` package does not use process shared locks so it is possible " @@ -3989,27 +3991,27 @@ msgid "" "mixed up." msgstr "" -#: ../../library/multiprocessing.rst:2725 +#: ../../library/multiprocessing.rst:2727 msgid "" "Returns the logger used by :mod:`multiprocessing`. If necessary, a new one " "will be created." msgstr "" -#: ../../library/multiprocessing.rst:2728 +#: ../../library/multiprocessing.rst:2730 msgid "" "When first created the logger has level :const:`logging.NOTSET` and no " "default handler. Messages sent to this logger will not by default propagate " "to the root logger." msgstr "" -#: ../../library/multiprocessing.rst:2732 +#: ../../library/multiprocessing.rst:2734 msgid "" "Note that on Windows child processes will only inherit the level of the " "parent process's logger -- any other customization of the logger will not be " "inherited." msgstr "" -#: ../../library/multiprocessing.rst:2739 +#: ../../library/multiprocessing.rst:2741 msgid "" "This function performs a call to :func:`get_logger` but in addition to " "returning the logger created by get_logger, it adds a handler which sends " @@ -4018,11 +4020,11 @@ msgid "" "``level`` argument." msgstr "" -#: ../../library/multiprocessing.rst:2745 +#: ../../library/multiprocessing.rst:2747 msgid "Below is an example session with logging turned on::" msgstr "" -#: ../../library/multiprocessing.rst:2747 +#: ../../library/multiprocessing.rst:2749 msgid "" ">>> import multiprocessing, logging\n" ">>> logger = multiprocessing.log_to_stderr()\n" @@ -4050,21 +4052,21 @@ msgstr "" "[INFO/MainProcess] sending shutdown message to manager\n" "[INFO/SyncManager-...] manager exiting with exitcode 0" -#: ../../library/multiprocessing.rst:2760 +#: ../../library/multiprocessing.rst:2762 msgid "For a full table of logging levels, see the :mod:`logging` module." msgstr "" -#: ../../library/multiprocessing.rst:2764 +#: ../../library/multiprocessing.rst:2766 msgid "The :mod:`multiprocessing.dummy` module" msgstr ":mod:`multiprocessing.dummy` 模組" -#: ../../library/multiprocessing.rst:2769 +#: ../../library/multiprocessing.rst:2771 msgid "" ":mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` " "but is no more than a wrapper around the :mod:`threading` module." msgstr "" -#: ../../library/multiprocessing.rst:2774 +#: ../../library/multiprocessing.rst:2776 msgid "" "In particular, the ``Pool`` function provided by :mod:`multiprocessing." "dummy` returns an instance of :class:`ThreadPool`, which is a subclass of :" @@ -4072,7 +4074,7 @@ msgid "" "worker threads rather than worker processes." msgstr "" -#: ../../library/multiprocessing.rst:2782 +#: ../../library/multiprocessing.rst:2784 msgid "" "A thread pool object which controls a pool of worker threads to which jobs " "can be submitted. :class:`ThreadPool` instances are fully interface " @@ -4082,18 +4084,18 @@ msgid "" "pool.Pool.terminate` manually." msgstr "" -#: ../../library/multiprocessing.rst:2789 +#: ../../library/multiprocessing.rst:2791 msgid "" "*processes* is the number of worker threads to use. If *processes* is " "``None`` then the number returned by :func:`os.process_cpu_count` is used." msgstr "" -#: ../../library/multiprocessing.rst:2795 +#: ../../library/multiprocessing.rst:2797 msgid "" "Unlike :class:`Pool`, *maxtasksperchild* and *context* cannot be provided." msgstr "" -#: ../../library/multiprocessing.rst:2799 +#: ../../library/multiprocessing.rst:2801 msgid "" "A :class:`ThreadPool` shares the same interface as :class:`Pool`, which is " "designed around a pool of processes and predates the introduction of the :" @@ -4103,7 +4105,7 @@ msgid "" "is not understood by any other libraries." msgstr "" -#: ../../library/multiprocessing.rst:2806 +#: ../../library/multiprocessing.rst:2808 msgid "" "Users should generally prefer to use :class:`concurrent.futures." "ThreadPoolExecutor`, which has a simpler interface that was designed around " @@ -4112,69 +4114,69 @@ msgid "" "`asyncio`." msgstr "" -#: ../../library/multiprocessing.rst:2816 +#: ../../library/multiprocessing.rst:2818 msgid "Programming guidelines" msgstr "" -#: ../../library/multiprocessing.rst:2818 +#: ../../library/multiprocessing.rst:2820 msgid "" "There are certain guidelines and idioms which should be adhered to when " "using :mod:`multiprocessing`." msgstr "" -#: ../../library/multiprocessing.rst:2823 +#: ../../library/multiprocessing.rst:2825 msgid "All start methods" msgstr "" -#: ../../library/multiprocessing.rst:2825 +#: ../../library/multiprocessing.rst:2827 msgid "The following applies to all start methods." msgstr "" -#: ../../library/multiprocessing.rst:2827 +#: ../../library/multiprocessing.rst:2829 msgid "Avoid shared state" msgstr "" -#: ../../library/multiprocessing.rst:2829 +#: ../../library/multiprocessing.rst:2831 msgid "" "As far as possible one should try to avoid shifting large amounts of data " "between processes." msgstr "" -#: ../../library/multiprocessing.rst:2832 +#: ../../library/multiprocessing.rst:2834 msgid "" "It is probably best to stick to using queues or pipes for communication " "between processes rather than using the lower level synchronization " "primitives." msgstr "" -#: ../../library/multiprocessing.rst:2836 +#: ../../library/multiprocessing.rst:2838 msgid "Picklability" msgstr "" -#: ../../library/multiprocessing.rst:2838 +#: ../../library/multiprocessing.rst:2840 msgid "Ensure that the arguments to the methods of proxies are picklable." msgstr "" -#: ../../library/multiprocessing.rst:2840 +#: ../../library/multiprocessing.rst:2842 msgid "Thread safety of proxies" msgstr "" -#: ../../library/multiprocessing.rst:2842 +#: ../../library/multiprocessing.rst:2844 msgid "" "Do not use a proxy object from more than one thread unless you protect it " "with a lock." msgstr "" -#: ../../library/multiprocessing.rst:2845 +#: ../../library/multiprocessing.rst:2847 msgid "" "(There is never a problem with different processes using the *same* proxy.)" msgstr "" -#: ../../library/multiprocessing.rst:2847 +#: ../../library/multiprocessing.rst:2849 msgid "Joining zombie processes" msgstr "" -#: ../../library/multiprocessing.rst:2849 +#: ../../library/multiprocessing.rst:2851 msgid "" "On POSIX when a process finishes but has not been joined it becomes a " "zombie. There should never be very many because each time a new process " @@ -4185,11 +4187,11 @@ msgid "" "explicitly join all the processes that you start." msgstr "" -#: ../../library/multiprocessing.rst:2857 +#: ../../library/multiprocessing.rst:2859 msgid "Better to inherit than pickle/unpickle" msgstr "" -#: ../../library/multiprocessing.rst:2859 +#: ../../library/multiprocessing.rst:2861 msgid "" "When using the *spawn* or *forkserver* start methods many types from :mod:" "`multiprocessing` need to be picklable so that child processes can use " @@ -4199,11 +4201,11 @@ msgid "" "inherit it from an ancestor process." msgstr "" -#: ../../library/multiprocessing.rst:2867 +#: ../../library/multiprocessing.rst:2869 msgid "Avoid terminating processes" msgstr "" -#: ../../library/multiprocessing.rst:2869 +#: ../../library/multiprocessing.rst:2871 msgid "" "Using the :meth:`Process.terminate ` " "method to stop a process is liable to cause any shared resources (such as " @@ -4211,18 +4213,18 @@ msgid "" "become broken or unavailable to other processes." msgstr "" -#: ../../library/multiprocessing.rst:2875 +#: ../../library/multiprocessing.rst:2877 msgid "" "Therefore it is probably best to only consider using :meth:`Process." "terminate ` on processes which never use " "any shared resources." msgstr "" -#: ../../library/multiprocessing.rst:2879 +#: ../../library/multiprocessing.rst:2881 msgid "Joining processes that use queues" msgstr "" -#: ../../library/multiprocessing.rst:2881 +#: ../../library/multiprocessing.rst:2883 msgid "" "Bear in mind that a process that has put items in a queue will wait before " "terminating until all the buffered items are fed by the \"feeder\" thread to " @@ -4231,7 +4233,7 @@ msgid "" "queue to avoid this behaviour.)" msgstr "" -#: ../../library/multiprocessing.rst:2887 +#: ../../library/multiprocessing.rst:2889 msgid "" "This means that whenever you use a queue you need to make sure that all " "items which have been put on the queue will eventually be removed before the " @@ -4240,11 +4242,11 @@ msgid "" "processes will be joined automatically." msgstr "" -#: ../../library/multiprocessing.rst:2893 +#: ../../library/multiprocessing.rst:2895 msgid "An example which will deadlock is the following::" msgstr "" -#: ../../library/multiprocessing.rst:2895 +#: ../../library/multiprocessing.rst:2897 msgid "" "from multiprocessing import Process, Queue\n" "\n" @@ -4259,17 +4261,17 @@ msgid "" " obj = queue.get()" msgstr "" -#: ../../library/multiprocessing.rst:2907 +#: ../../library/multiprocessing.rst:2909 msgid "" "A fix here would be to swap the last two lines (or simply remove the ``p." "join()`` line)." msgstr "" -#: ../../library/multiprocessing.rst:2910 +#: ../../library/multiprocessing.rst:2912 msgid "Explicitly pass resources to child processes" msgstr "" -#: ../../library/multiprocessing.rst:2912 +#: ../../library/multiprocessing.rst:2914 msgid "" "On POSIX using the *fork* start method, a child process can make use of a " "shared resource created in a parent process using a global resource. " @@ -4277,7 +4279,7 @@ msgid "" "for the child process." msgstr "" -#: ../../library/multiprocessing.rst:2917 +#: ../../library/multiprocessing.rst:2919 msgid "" "Apart from making the code (potentially) compatible with Windows and the " "other start methods this also ensures that as long as the child process is " @@ -4286,11 +4288,11 @@ msgid "" "collected in the parent process." msgstr "" -#: ../../library/multiprocessing.rst:2924 +#: ../../library/multiprocessing.rst:2926 msgid "So for instance ::" msgstr "" -#: ../../library/multiprocessing.rst:2926 +#: ../../library/multiprocessing.rst:2928 msgid "" "from multiprocessing import Process, Lock\n" "\n" @@ -4312,11 +4314,11 @@ msgstr "" " for i in range(10):\n" " Process(target=f).start()" -#: ../../library/multiprocessing.rst:2936 +#: ../../library/multiprocessing.rst:2938 msgid "should be rewritten as ::" msgstr "" -#: ../../library/multiprocessing.rst:2938 +#: ../../library/multiprocessing.rst:2940 msgid "" "from multiprocessing import Process, Lock\n" "\n" @@ -4338,25 +4340,25 @@ msgstr "" " for i in range(10):\n" " Process(target=f, args=(lock,)).start()" -#: ../../library/multiprocessing.rst:2948 +#: ../../library/multiprocessing.rst:2950 msgid "Beware of replacing :data:`sys.stdin` with a \"file like object\"" msgstr "" -#: ../../library/multiprocessing.rst:2950 +#: ../../library/multiprocessing.rst:2952 msgid ":mod:`multiprocessing` originally unconditionally called::" msgstr "" -#: ../../library/multiprocessing.rst:2952 +#: ../../library/multiprocessing.rst:2954 msgid "os.close(sys.stdin.fileno())" msgstr "os.close(sys.stdin.fileno())" -#: ../../library/multiprocessing.rst:2954 +#: ../../library/multiprocessing.rst:2956 msgid "" "in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted " "in issues with processes-in-processes. This has been changed to::" msgstr "" -#: ../../library/multiprocessing.rst:2957 +#: ../../library/multiprocessing.rst:2959 msgid "" "sys.stdin.close()\n" "sys.stdin = open(os.open(os.devnull, os.O_RDONLY), closefd=False)" @@ -4364,7 +4366,7 @@ msgstr "" "sys.stdin.close()\n" "sys.stdin = open(os.open(os.devnull, os.O_RDONLY), closefd=False)" -#: ../../library/multiprocessing.rst:2960 +#: ../../library/multiprocessing.rst:2962 msgid "" "Which solves the fundamental issue of processes colliding with each other " "resulting in a bad file descriptor error, but introduces a potential danger " @@ -4374,14 +4376,14 @@ msgid "" "data being flushed to the object multiple times, resulting in corruption." msgstr "" -#: ../../library/multiprocessing.rst:2967 +#: ../../library/multiprocessing.rst:2969 msgid "" "If you write a file-like object and implement your own caching, you can make " "it fork-safe by storing the pid whenever you append to the cache, and " "discarding the cache when the pid changes. For example::" msgstr "" -#: ../../library/multiprocessing.rst:2971 +#: ../../library/multiprocessing.rst:2973 msgid "" "@property\n" "def cache(self):\n" @@ -4399,26 +4401,26 @@ msgstr "" " self._cache = []\n" " return self._cache" -#: ../../library/multiprocessing.rst:2979 +#: ../../library/multiprocessing.rst:2981 msgid "" "For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`" msgstr "" -#: ../../library/multiprocessing.rst:2982 +#: ../../library/multiprocessing.rst:2984 msgid "The *spawn* and *forkserver* start methods" msgstr "" -#: ../../library/multiprocessing.rst:2984 +#: ../../library/multiprocessing.rst:2986 msgid "" "There are a few extra restrictions which don't apply to the *fork* start " "method." msgstr "" -#: ../../library/multiprocessing.rst:2987 +#: ../../library/multiprocessing.rst:2989 msgid "More picklability" msgstr "" -#: ../../library/multiprocessing.rst:2989 +#: ../../library/multiprocessing.rst:2991 msgid "" "Ensure that all arguments to :meth:`Process.__init__` are picklable. Also, " "if you subclass :class:`~multiprocessing.Process` then make sure that " @@ -4426,11 +4428,11 @@ msgid "" "Process.start>` method is called." msgstr "" -#: ../../library/multiprocessing.rst:2994 +#: ../../library/multiprocessing.rst:2996 msgid "Global variables" msgstr "" -#: ../../library/multiprocessing.rst:2996 +#: ../../library/multiprocessing.rst:2998 msgid "" "Bear in mind that if code run in a child process tries to access a global " "variable, then the value it sees (if any) may not be the same as the value " @@ -4438,30 +4440,30 @@ msgid "" "Process.start>` was called." msgstr "" -#: ../../library/multiprocessing.rst:3001 +#: ../../library/multiprocessing.rst:3003 msgid "" "However, global variables which are just module level constants cause no " "problems." msgstr "" -#: ../../library/multiprocessing.rst:3006 +#: ../../library/multiprocessing.rst:3008 msgid "Safe importing of main module" msgstr "" -#: ../../library/multiprocessing.rst:3008 +#: ../../library/multiprocessing.rst:3010 msgid "" "Make sure that the main module can be safely imported by a new Python " "interpreter without causing unintended side effects (such as starting a new " "process)." msgstr "" -#: ../../library/multiprocessing.rst:3012 +#: ../../library/multiprocessing.rst:3014 msgid "" "For example, using the *spawn* or *forkserver* start method running the " "following module would fail with a :exc:`RuntimeError`::" msgstr "" -#: ../../library/multiprocessing.rst:3016 +#: ../../library/multiprocessing.rst:3018 msgid "" "from multiprocessing import Process\n" "\n" @@ -4479,13 +4481,13 @@ msgstr "" "p = Process(target=foo)\n" "p.start()" -#: ../../library/multiprocessing.rst:3024 +#: ../../library/multiprocessing.rst:3026 msgid "" "Instead one should protect the \"entry point\" of the program by using ``if " "__name__ == '__main__':`` as follows::" msgstr "" -#: ../../library/multiprocessing.rst:3027 +#: ../../library/multiprocessing.rst:3029 msgid "" "from multiprocessing import Process, freeze_support, set_start_method\n" "\n" @@ -4509,33 +4511,33 @@ msgstr "" " p = Process(target=foo)\n" " p.start()" -#: ../../library/multiprocessing.rst:3038 +#: ../../library/multiprocessing.rst:3040 msgid "" "(The ``freeze_support()`` line can be omitted if the program will be run " "normally instead of frozen.)" msgstr "" -#: ../../library/multiprocessing.rst:3041 +#: ../../library/multiprocessing.rst:3043 msgid "" "This allows the newly spawned Python interpreter to safely import the module " "and then run the module's ``foo()`` function." msgstr "" -#: ../../library/multiprocessing.rst:3044 +#: ../../library/multiprocessing.rst:3046 msgid "" "Similar restrictions apply if a pool or manager is created in the main " "module." msgstr "" -#: ../../library/multiprocessing.rst:3051 +#: ../../library/multiprocessing.rst:3053 msgid "Examples" msgstr "範例" -#: ../../library/multiprocessing.rst:3053 +#: ../../library/multiprocessing.rst:3055 msgid "Demonstration of how to create and use customized managers and proxies:" msgstr "" -#: ../../library/multiprocessing.rst:3055 +#: ../../library/multiprocessing.rst:3057 msgid "" "from multiprocessing import freeze_support\n" "from multiprocessing.managers import BaseManager, BaseProxy\n" @@ -4629,11 +4631,11 @@ msgid "" " test()\n" msgstr "" -#: ../../library/multiprocessing.rst:3059 +#: ../../library/multiprocessing.rst:3061 msgid "Using :class:`~multiprocessing.pool.Pool`:" msgstr "使用 :class:`~multiprocessing.pool.Pool`:" -#: ../../library/multiprocessing.rst:3061 +#: ../../library/multiprocessing.rst:3063 msgid "" "import multiprocessing\n" "import time\n" @@ -4793,13 +4795,13 @@ msgid "" " test()\n" msgstr "" -#: ../../library/multiprocessing.rst:3065 +#: ../../library/multiprocessing.rst:3067 msgid "" "An example showing how to use queues to feed tasks to a collection of worker " "processes and collect the results:" msgstr "" -#: ../../library/multiprocessing.rst:3068 +#: ../../library/multiprocessing.rst:3070 msgid "" "import time\n" "import random\n" From d7ad39d3db45238c70737b55854887508b55d25f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 7 Jul 2025 01:59:32 +0000 Subject: [PATCH 2/4] sync with cpython bc3390c0 --- library/tarfile.po | 637 +++++++++++++++++++++++---------------------- 1 file changed, 323 insertions(+), 314 deletions(-) diff --git a/library/tarfile.po b/library/tarfile.po index e996b848ab..4c404c9cc5 100644 --- a/library/tarfile.po +++ b/library/tarfile.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-06-27 07:36+0000\n" +"POT-Creation-Date: 2025-07-07 01:58+0000\n" "PO-Revision-Date: 2018-05-23 16:12+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -101,7 +101,8 @@ msgid "action" msgstr "" #: ../../library/tarfile.rst:59 -msgid "``'r' or 'r:*'``" +#, fuzzy +msgid "``'r'`` or ``'r:*'``" msgstr "``'r' 或 'r:*'``" #: ../../library/tarfile.rst:59 @@ -181,8 +182,9 @@ msgid "" msgstr "" #: ../../library/tarfile.rst:88 -msgid "``'a' or 'a:'``" -msgstr "``'a' 或 'a:'``" +#, fuzzy +msgid "``'a'`` or ``'a:'``" +msgstr "``'x'`` 或 ``'x:'``" #: ../../library/tarfile.rst:88 msgid "" @@ -191,38 +193,39 @@ msgid "" msgstr "" #: ../../library/tarfile.rst:91 -msgid "``'w' or 'w:'``" -msgstr "``'w' 或 'w:'``" +#, fuzzy +msgid "``'w'`` or ``'w:'``" +msgstr "``'x'`` 或 ``'x:'``" #: ../../library/tarfile.rst:91 msgid "Open for uncompressed writing." msgstr "" -#: ../../library/tarfile.rst:93 +#: ../../library/tarfile.rst:94 msgid "``'w:gz'``" msgstr "``'w:gz'``" -#: ../../library/tarfile.rst:93 +#: ../../library/tarfile.rst:94 msgid "Open for gzip compressed writing." msgstr "" -#: ../../library/tarfile.rst:95 +#: ../../library/tarfile.rst:96 msgid "``'w:bz2'``" msgstr "``'w:bz2'``" -#: ../../library/tarfile.rst:95 +#: ../../library/tarfile.rst:96 msgid "Open for bzip2 compressed writing." msgstr "" -#: ../../library/tarfile.rst:97 +#: ../../library/tarfile.rst:98 msgid "``'w:xz'``" msgstr "``'w:xz'``" -#: ../../library/tarfile.rst:97 +#: ../../library/tarfile.rst:98 msgid "Open for lzma compressed writing." msgstr "" -#: ../../library/tarfile.rst:100 +#: ../../library/tarfile.rst:101 msgid "" "Note that ``'a:gz'``, ``'a:bz2'`` or ``'a:xz'`` is not possible. If *mode* " "is not suitable to open a certain (compressed) file for reading, :exc:" @@ -230,26 +233,26 @@ msgid "" "method is not supported, :exc:`CompressionError` is raised." msgstr "" -#: ../../library/tarfile.rst:105 +#: ../../library/tarfile.rst:106 msgid "" "If *fileobj* is specified, it is used as an alternative to a :term:`file " "object` opened in binary mode for *name*. It is supposed to be at position 0." msgstr "" -#: ../../library/tarfile.rst:108 +#: ../../library/tarfile.rst:109 msgid "" "For modes ``'w:gz'``, ``'x:gz'``, ``'w|gz'``, ``'w:bz2'``, ``'x:bz2'``, ``'w|" "bz2'``, :func:`tarfile.open` accepts the keyword argument *compresslevel* " "(default ``9``) to specify the compression level of the file." msgstr "" -#: ../../library/tarfile.rst:112 +#: ../../library/tarfile.rst:113 msgid "" "For modes ``'w:xz'`` and ``'x:xz'``, :func:`tarfile.open` accepts the " "keyword argument *preset* to specify the compression level of the file." msgstr "" -#: ../../library/tarfile.rst:115 +#: ../../library/tarfile.rst:116 msgid "" "For special purposes, there is a second format for *mode*: ``'filemode|" "[compression]'``. :func:`tarfile.open` will return a :class:`TarFile` " @@ -263,186 +266,186 @@ msgid "" "random access, see :ref:`tar-examples`. The currently possible modes:" msgstr "" -#: ../../library/tarfile.rst:129 +#: ../../library/tarfile.rst:130 msgid "Mode" msgstr "" -#: ../../library/tarfile.rst:129 +#: ../../library/tarfile.rst:130 msgid "Action" msgstr "" -#: ../../library/tarfile.rst:131 +#: ../../library/tarfile.rst:132 msgid "``'r|*'``" msgstr "``'r|*'``" -#: ../../library/tarfile.rst:131 +#: ../../library/tarfile.rst:132 msgid "Open a *stream* of tar blocks for reading with transparent compression." msgstr "" -#: ../../library/tarfile.rst:134 +#: ../../library/tarfile.rst:135 msgid "``'r|'``" msgstr "``'r|'``" -#: ../../library/tarfile.rst:134 +#: ../../library/tarfile.rst:135 msgid "Open a *stream* of uncompressed tar blocks for reading." msgstr "" -#: ../../library/tarfile.rst:137 +#: ../../library/tarfile.rst:138 msgid "``'r|gz'``" msgstr "``'r|gz'``" -#: ../../library/tarfile.rst:137 +#: ../../library/tarfile.rst:138 msgid "Open a gzip compressed *stream* for reading." msgstr "" -#: ../../library/tarfile.rst:140 +#: ../../library/tarfile.rst:141 msgid "``'r|bz2'``" msgstr "``'r|bz2'``" -#: ../../library/tarfile.rst:140 +#: ../../library/tarfile.rst:141 msgid "Open a bzip2 compressed *stream* for reading." msgstr "" -#: ../../library/tarfile.rst:143 +#: ../../library/tarfile.rst:144 msgid "``'r|xz'``" msgstr "``'r|xz'``" -#: ../../library/tarfile.rst:143 +#: ../../library/tarfile.rst:144 msgid "Open an lzma compressed *stream* for reading." msgstr "" -#: ../../library/tarfile.rst:146 +#: ../../library/tarfile.rst:147 msgid "``'w|'``" msgstr "``'w|'``" -#: ../../library/tarfile.rst:146 +#: ../../library/tarfile.rst:147 msgid "Open an uncompressed *stream* for writing." msgstr "" -#: ../../library/tarfile.rst:148 +#: ../../library/tarfile.rst:149 msgid "``'w|gz'``" msgstr "``'w|gz'``" -#: ../../library/tarfile.rst:148 +#: ../../library/tarfile.rst:149 msgid "Open a gzip compressed *stream* for writing." msgstr "" -#: ../../library/tarfile.rst:151 +#: ../../library/tarfile.rst:152 msgid "``'w|bz2'``" msgstr "``'w|bz2'``" -#: ../../library/tarfile.rst:151 +#: ../../library/tarfile.rst:152 msgid "Open a bzip2 compressed *stream* for writing." msgstr "" -#: ../../library/tarfile.rst:154 +#: ../../library/tarfile.rst:155 msgid "``'w|xz'``" msgstr "``'w|xz'``" -#: ../../library/tarfile.rst:154 +#: ../../library/tarfile.rst:155 msgid "Open an lzma compressed *stream* for writing." msgstr "" -#: ../../library/tarfile.rst:158 ../../library/tarfile.rst:434 +#: ../../library/tarfile.rst:159 ../../library/tarfile.rst:435 msgid "The ``'x'`` (exclusive creation) mode was added." msgstr "" -#: ../../library/tarfile.rst:161 ../../library/tarfile.rst:437 -#: ../../library/tarfile.rst:682 +#: ../../library/tarfile.rst:162 ../../library/tarfile.rst:438 +#: ../../library/tarfile.rst:683 msgid "The *name* parameter accepts a :term:`path-like object`." msgstr "" -#: ../../library/tarfile.rst:164 +#: ../../library/tarfile.rst:165 msgid "The *compresslevel* keyword argument also works for streams." msgstr "" -#: ../../library/tarfile.rst:171 +#: ../../library/tarfile.rst:172 msgid "" "Class for reading and writing tar archives. Do not use this class directly: " "use :func:`tarfile.open` instead. See :ref:`tarfile-objects`." msgstr "" -#: ../../library/tarfile.rst:177 +#: ../../library/tarfile.rst:178 msgid "" "Return :const:`True` if *name* is a tar archive file, that the :mod:" "`tarfile` module can read. *name* may be a :class:`str`, file, or file-like " "object." msgstr "" -#: ../../library/tarfile.rst:180 +#: ../../library/tarfile.rst:181 msgid "Support for file and file-like objects." msgstr "" -#: ../../library/tarfile.rst:184 +#: ../../library/tarfile.rst:185 msgid "The :mod:`tarfile` module defines the following exceptions:" msgstr "" -#: ../../library/tarfile.rst:189 +#: ../../library/tarfile.rst:190 msgid "Base class for all :mod:`tarfile` exceptions." msgstr "" -#: ../../library/tarfile.rst:194 +#: ../../library/tarfile.rst:195 msgid "" "Is raised when a tar archive is opened, that either cannot be handled by " "the :mod:`tarfile` module or is somehow invalid." msgstr "" -#: ../../library/tarfile.rst:200 +#: ../../library/tarfile.rst:201 msgid "" "Is raised when a compression method is not supported or when the data cannot " "be decoded properly." msgstr "" -#: ../../library/tarfile.rst:206 +#: ../../library/tarfile.rst:207 msgid "" "Is raised for the limitations that are typical for stream-like :class:" "`TarFile` objects." msgstr "" -#: ../../library/tarfile.rst:212 +#: ../../library/tarfile.rst:213 msgid "" "Is raised for *non-fatal* errors when using :meth:`TarFile.extract`, but " "only if :attr:`TarFile.errorlevel`\\ ``== 2``." msgstr "" -#: ../../library/tarfile.rst:218 +#: ../../library/tarfile.rst:219 msgid "Is raised by :meth:`TarInfo.frombuf` if the buffer it gets is invalid." msgstr "" -#: ../../library/tarfile.rst:223 +#: ../../library/tarfile.rst:224 msgid "" "Base class for members :ref:`refused ` by filters." msgstr "" -#: ../../library/tarfile.rst:228 +#: ../../library/tarfile.rst:229 msgid "" "Information about the member that the filter refused to extract, as :ref:" "`TarInfo `." msgstr "" -#: ../../library/tarfile.rst:233 +#: ../../library/tarfile.rst:234 msgid "Raised to refuse extracting a member with an absolute path." msgstr "" -#: ../../library/tarfile.rst:237 +#: ../../library/tarfile.rst:238 msgid "Raised to refuse extracting a member outside the destination directory." msgstr "" -#: ../../library/tarfile.rst:241 +#: ../../library/tarfile.rst:242 msgid "Raised to refuse extracting a special file (e.g. a device or pipe)." msgstr "" -#: ../../library/tarfile.rst:245 +#: ../../library/tarfile.rst:246 msgid "Raised to refuse extracting a symbolic link with an absolute path." msgstr "" -#: ../../library/tarfile.rst:249 +#: ../../library/tarfile.rst:250 msgid "" "Raised to refuse extracting a symbolic link pointing outside the destination " "directory." msgstr "" -#: ../../library/tarfile.rst:254 +#: ../../library/tarfile.rst:255 msgid "" "Raised to refuse emulating a link (hard or symbolic) by extracting another " "archive member, when that member would be rejected by the filter location. " @@ -450,124 +453,124 @@ msgid "" "as :attr:`!BaseException.__context__`." msgstr "" -#: ../../library/tarfile.rst:262 +#: ../../library/tarfile.rst:263 msgid "The following constants are available at the module level:" msgstr "" -#: ../../library/tarfile.rst:266 +#: ../../library/tarfile.rst:267 msgid "" "The default character encoding: ``'utf-8'`` on Windows, the value returned " "by :func:`sys.getfilesystemencoding` otherwise." msgstr "" -#: ../../library/tarfile.rst:272 +#: ../../library/tarfile.rst:273 msgid "A regular file :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:276 +#: ../../library/tarfile.rst:277 msgid "A link (inside tarfile) :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:280 +#: ../../library/tarfile.rst:281 msgid "A symbolic link :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:284 +#: ../../library/tarfile.rst:285 msgid "A character special device :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:288 +#: ../../library/tarfile.rst:289 msgid "A block special device :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:292 +#: ../../library/tarfile.rst:293 msgid "A directory :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:296 +#: ../../library/tarfile.rst:297 msgid "A FIFO special device :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:300 +#: ../../library/tarfile.rst:301 msgid "A contiguous file :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:304 +#: ../../library/tarfile.rst:305 msgid "A GNU tar longname :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:308 +#: ../../library/tarfile.rst:309 msgid "A GNU tar longlink :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:312 +#: ../../library/tarfile.rst:313 msgid "A GNU tar sparse file :attr:`~TarInfo.type`." msgstr "" -#: ../../library/tarfile.rst:315 +#: ../../library/tarfile.rst:316 msgid "" "Each of the following constants defines a tar archive format that the :mod:" "`tarfile` module is able to create. See section :ref:`tar-formats` for " "details." msgstr "" -#: ../../library/tarfile.rst:322 +#: ../../library/tarfile.rst:323 msgid "POSIX.1-1988 (ustar) format." msgstr "" -#: ../../library/tarfile.rst:327 +#: ../../library/tarfile.rst:328 msgid "GNU tar format." msgstr "" -#: ../../library/tarfile.rst:332 +#: ../../library/tarfile.rst:333 msgid "POSIX.1-2001 (pax) format." msgstr "" -#: ../../library/tarfile.rst:337 +#: ../../library/tarfile.rst:338 msgid "" "The default format for creating archives. This is currently :const:" "`PAX_FORMAT`." msgstr "" -#: ../../library/tarfile.rst:339 +#: ../../library/tarfile.rst:340 msgid "" "The default format for new archives was changed to :const:`PAX_FORMAT` from :" "const:`GNU_FORMAT`." msgstr "" -#: ../../library/tarfile.rst:346 +#: ../../library/tarfile.rst:347 msgid "Module :mod:`zipfile`" msgstr ":mod:`zipfile` 模組" -#: ../../library/tarfile.rst:347 +#: ../../library/tarfile.rst:348 msgid "Documentation of the :mod:`zipfile` standard module." msgstr "" -#: ../../library/tarfile.rst:349 +#: ../../library/tarfile.rst:350 msgid ":ref:`archiving-operations`" msgstr ":ref:`archiving-operations`" -#: ../../library/tarfile.rst:350 +#: ../../library/tarfile.rst:351 msgid "" "Documentation of the higher-level archiving facilities provided by the " "standard :mod:`shutil` module." msgstr "" -#: ../../library/tarfile.rst:353 +#: ../../library/tarfile.rst:354 msgid "" "`GNU tar manual, Basic Tar Format `_" msgstr "" -#: ../../library/tarfile.rst:354 +#: ../../library/tarfile.rst:355 msgid "Documentation for tar archive files, including GNU tar extensions." msgstr "" -#: ../../library/tarfile.rst:360 +#: ../../library/tarfile.rst:361 msgid "TarFile Objects" msgstr "TarFile 物件" -#: ../../library/tarfile.rst:362 +#: ../../library/tarfile.rst:363 msgid "" "The :class:`TarFile` object provides an interface to a tar archive. A tar " "archive is a sequence of blocks. An archive member (a stored file) is made " @@ -576,7 +579,7 @@ msgid "" "class:`TarInfo` object, see :ref:`tarinfo-objects` for details." msgstr "" -#: ../../library/tarfile.rst:368 +#: ../../library/tarfile.rst:369 msgid "" "A :class:`TarFile` object can be used as a context manager in a :keyword:" "`with` statement. It will automatically be closed when the block is " @@ -585,24 +588,24 @@ msgid "" "be closed. See the :ref:`tar-examples` section for a use case." msgstr "" -#: ../../library/tarfile.rst:374 +#: ../../library/tarfile.rst:375 msgid "Added support for the context management protocol." msgstr "" -#: ../../library/tarfile.rst:379 +#: ../../library/tarfile.rst:380 msgid "" "All following arguments are optional and can be accessed as instance " "attributes as well." msgstr "" -#: ../../library/tarfile.rst:382 +#: ../../library/tarfile.rst:383 msgid "" "*name* is the pathname of the archive. *name* may be a :term:`path-like " "object`. It can be omitted if *fileobj* is given. In this case, the file " "object's :attr:`!name` attribute is used if it exists." msgstr "" -#: ../../library/tarfile.rst:386 +#: ../../library/tarfile.rst:387 msgid "" "*mode* is either ``'r'`` to read from an existing archive, ``'a'`` to append " "data to an existing file, ``'w'`` to create a new file overwriting an " @@ -610,18 +613,18 @@ msgid "" "exist." msgstr "" -#: ../../library/tarfile.rst:390 +#: ../../library/tarfile.rst:391 msgid "" "If *fileobj* is given, it is used for reading or writing data. If it can be " "determined, *mode* is overridden by *fileobj*'s mode. *fileobj* will be used " "from position 0." msgstr "" -#: ../../library/tarfile.rst:396 +#: ../../library/tarfile.rst:397 msgid "*fileobj* is not closed, when :class:`TarFile` is closed." msgstr "" -#: ../../library/tarfile.rst:398 +#: ../../library/tarfile.rst:399 msgid "" "*format* controls the archive format for writing. It must be one of the " "constants :const:`USTAR_FORMAT`, :const:`GNU_FORMAT` or :const:`PAX_FORMAT` " @@ -629,20 +632,20 @@ msgid "" "detected, even if different formats are present in a single archive." msgstr "" -#: ../../library/tarfile.rst:403 +#: ../../library/tarfile.rst:404 msgid "" "The *tarinfo* argument can be used to replace the default :class:`TarInfo` " "class with a different one." msgstr "" -#: ../../library/tarfile.rst:406 +#: ../../library/tarfile.rst:407 msgid "" "If *dereference* is :const:`False`, add symbolic and hard links to the " "archive. If it is :const:`True`, add the content of the target files to the " "archive. This has no effect on systems that do not support symbolic links." msgstr "" -#: ../../library/tarfile.rst:410 +#: ../../library/tarfile.rst:411 msgid "" "If *ignore_zeros* is :const:`False`, treat an empty block as the end of the " "archive. If it is :const:`True`, skip empty (and invalid) blocks and try to " @@ -650,19 +653,19 @@ msgid "" "concatenated or damaged archives." msgstr "" -#: ../../library/tarfile.rst:414 +#: ../../library/tarfile.rst:415 msgid "" "*debug* can be set from ``0`` (no debug messages) up to ``3`` (all debug " "messages). The messages are written to ``sys.stderr``." msgstr "" -#: ../../library/tarfile.rst:417 +#: ../../library/tarfile.rst:418 msgid "" "*errorlevel* controls how extraction errors are handled, see :attr:`the " "corresponding attribute `." msgstr "" -#: ../../library/tarfile.rst:420 +#: ../../library/tarfile.rst:421 msgid "" "The *encoding* and *errors* arguments define the character encoding to be " "used for reading or writing the archive and how conversion errors are going " @@ -670,57 +673,57 @@ msgid "" "ref:`tar-unicode` for in-depth information." msgstr "" -#: ../../library/tarfile.rst:425 +#: ../../library/tarfile.rst:426 msgid "" "The *pax_headers* argument is an optional dictionary of strings which will " "be added as a pax global header if *format* is :const:`PAX_FORMAT`." msgstr "" -#: ../../library/tarfile.rst:428 +#: ../../library/tarfile.rst:429 msgid "" "If *stream* is set to :const:`True` then while reading the archive info " "about files in the archive are not cached, saving memory." msgstr "" -#: ../../library/tarfile.rst:431 ../../library/tarfile.rst:751 +#: ../../library/tarfile.rst:432 ../../library/tarfile.rst:752 msgid "Use ``'surrogateescape'`` as the default for the *errors* argument." msgstr "" -#: ../../library/tarfile.rst:440 +#: ../../library/tarfile.rst:441 msgid "Add the *stream* parameter." msgstr "新增 *stream* 參數。" -#: ../../library/tarfile.rst:445 +#: ../../library/tarfile.rst:446 msgid "" "Alternative constructor. The :func:`tarfile.open` function is actually a " "shortcut to this classmethod." msgstr "" -#: ../../library/tarfile.rst:451 +#: ../../library/tarfile.rst:452 msgid "" "Return a :class:`TarInfo` object for member *name*. If *name* can not be " "found in the archive, :exc:`KeyError` is raised." msgstr "" -#: ../../library/tarfile.rst:456 +#: ../../library/tarfile.rst:457 msgid "" "If a member occurs more than once in the archive, its last occurrence is " "assumed to be the most up-to-date version." msgstr "" -#: ../../library/tarfile.rst:462 +#: ../../library/tarfile.rst:463 msgid "" "Return the members of the archive as a list of :class:`TarInfo` objects. The " "list has the same order as the members in the archive." msgstr "" -#: ../../library/tarfile.rst:468 +#: ../../library/tarfile.rst:469 msgid "" "Return the members as a list of their names. It has the same order as the " "list returned by :meth:`getmembers`." msgstr "" -#: ../../library/tarfile.rst:474 +#: ../../library/tarfile.rst:475 msgid "" "Print a table of contents to ``sys.stdout``. If *verbose* is :const:`False`, " "only the names of the members are printed. If it is :const:`True`, output " @@ -728,18 +731,18 @@ msgid "" "given, it must be a subset of the list returned by :meth:`getmembers`." msgstr "" -#: ../../library/tarfile.rst:479 +#: ../../library/tarfile.rst:480 msgid "Added the *members* parameter." msgstr "新增 *members* 參數。" -#: ../../library/tarfile.rst:485 +#: ../../library/tarfile.rst:486 msgid "" "Return the next member of the archive as a :class:`TarInfo` object, when :" "class:`TarFile` is opened for reading. Return :const:`None` if there is no " "more available." msgstr "" -#: ../../library/tarfile.rst:492 +#: ../../library/tarfile.rst:493 msgid "" "Extract all members from the archive to the current working directory or " "directory *path*. If optional *members* is given, it must be a subset of the " @@ -751,14 +754,14 @@ msgid "" "fail." msgstr "" -#: ../../library/tarfile.rst:500 +#: ../../library/tarfile.rst:501 msgid "" "If *numeric_owner* is :const:`True`, the uid and gid numbers from the " "tarfile are used to set the owner/group for the extracted files. Otherwise, " "the named values from the tarfile are used." msgstr "" -#: ../../library/tarfile.rst:504 +#: ../../library/tarfile.rst:505 msgid "" "The *filter* argument specifies how ``members`` are modified or rejected " "before extraction. See :ref:`tarfile-extraction-filter` for details. It is " @@ -766,7 +769,7 @@ msgid "" "need to support." msgstr "" -#: ../../library/tarfile.rst:512 +#: ../../library/tarfile.rst:513 msgid "" "Never extract archives from untrusted sources without prior inspection. It " "is possible that files are created outside of *path*, e.g. members that have " @@ -774,26 +777,26 @@ msgid "" "\"``." msgstr "" -#: ../../library/tarfile.rst:517 ../../library/tarfile.rst:550 +#: ../../library/tarfile.rst:518 ../../library/tarfile.rst:551 msgid "" "Set ``filter='data'`` to prevent the most dangerous security issues, and " "read the :ref:`tarfile-extraction-filter` section for details." msgstr "" -#: ../../library/tarfile.rst:520 ../../library/tarfile.rst:556 +#: ../../library/tarfile.rst:521 ../../library/tarfile.rst:557 msgid "Added the *numeric_owner* parameter." msgstr "新增 *numeric_owner* 參數。" -#: ../../library/tarfile.rst:523 ../../library/tarfile.rst:559 +#: ../../library/tarfile.rst:524 ../../library/tarfile.rst:560 msgid "The *path* parameter accepts a :term:`path-like object`." msgstr "" -#: ../../library/tarfile.rst:526 ../../library/tarfile.rst:562 -#: ../../library/tarfile.rst:644 +#: ../../library/tarfile.rst:527 ../../library/tarfile.rst:563 +#: ../../library/tarfile.rst:645 msgid "Added the *filter* parameter." msgstr "新增 *filter* 參數。" -#: ../../library/tarfile.rst:532 +#: ../../library/tarfile.rst:533 msgid "" "Extract a member from the archive to the current working directory, using " "its full name. Its file information is extracted as accurately as possible. " @@ -802,27 +805,27 @@ msgid "" "File attributes (owner, mtime, mode) are set unless *set_attrs* is false." msgstr "" -#: ../../library/tarfile.rst:538 +#: ../../library/tarfile.rst:539 msgid "" "The *numeric_owner* and *filter* arguments are the same as for :meth:" "`extractall`." msgstr "" -#: ../../library/tarfile.rst:543 +#: ../../library/tarfile.rst:544 msgid "" "The :meth:`extract` method does not take care of several extraction issues. " "In most cases you should consider using the :meth:`extractall` method." msgstr "" -#: ../../library/tarfile.rst:548 +#: ../../library/tarfile.rst:549 msgid "See the warning for :meth:`extractall`." msgstr "參閱 :meth:`extractall` 的警告。" -#: ../../library/tarfile.rst:553 +#: ../../library/tarfile.rst:554 msgid "Added the *set_attrs* parameter." msgstr "增加 *set_attrs* 參數。" -#: ../../library/tarfile.rst:568 +#: ../../library/tarfile.rst:569 msgid "" "Extract a member from the archive as a file object. *member* may be a " "filename or a :class:`TarInfo` object. If *member* is a regular file or a " @@ -831,17 +834,17 @@ msgid "" "the archive, :exc:`KeyError` is raised." msgstr "" -#: ../../library/tarfile.rst:574 +#: ../../library/tarfile.rst:575 msgid "Return an :class:`io.BufferedReader` object." msgstr "" -#: ../../library/tarfile.rst:577 +#: ../../library/tarfile.rst:578 msgid "" "The returned :class:`io.BufferedReader` object has the :attr:`!mode` " "attribute which is always equal to ``'rb'``." msgstr "" -#: ../../library/tarfile.rst:584 +#: ../../library/tarfile.rst:585 msgid "" "If *errorlevel* is ``0``, errors are ignored when using :meth:`TarFile." "extract` and :meth:`TarFile.extractall`. Nevertheless, they appear as error " @@ -851,39 +854,39 @@ msgid "" "exc:`TarError` exceptions as well." msgstr "" -#: ../../library/tarfile.rst:592 +#: ../../library/tarfile.rst:593 msgid "" "Some exceptions, e.g. ones caused by wrong argument types or data " "corruption, are always raised." msgstr "" -#: ../../library/tarfile.rst:595 +#: ../../library/tarfile.rst:596 msgid "" "Custom :ref:`extraction filters ` should raise :" "exc:`FilterError` for *fatal* errors and :exc:`ExtractError` for *non-fatal* " "ones." msgstr "" -#: ../../library/tarfile.rst:599 +#: ../../library/tarfile.rst:600 msgid "" "Note that when an exception is raised, the archive may be partially " "extracted. It is the user’s responsibility to clean up." msgstr "" -#: ../../library/tarfile.rst:606 +#: ../../library/tarfile.rst:607 msgid "" "The :ref:`extraction filter ` used as a default " "for the *filter* argument of :meth:`~TarFile.extract` and :meth:`~TarFile." "extractall`." msgstr "" -#: ../../library/tarfile.rst:610 +#: ../../library/tarfile.rst:611 msgid "" "The attribute may be ``None`` or a callable. String names are not allowed " "for this attribute, unlike the *filter* argument to :meth:`~TarFile.extract`." msgstr "" -#: ../../library/tarfile.rst:614 +#: ../../library/tarfile.rst:615 msgid "" "If ``extraction_filter`` is ``None`` (the default), calling an extraction " "method without a *filter* argument will raise a ``DeprecationWarning``, and " @@ -891,13 +894,13 @@ msgid "" "dangerous behavior matches previous versions of Python." msgstr "" -#: ../../library/tarfile.rst:620 +#: ../../library/tarfile.rst:621 msgid "" "In Python 3.14+, leaving ``extraction_filter=None`` will cause extraction " "methods to use the :func:`data ` filter by default." msgstr "" -#: ../../library/tarfile.rst:623 +#: ../../library/tarfile.rst:624 msgid "" "The attribute may be set on instances or overridden in subclasses. It also " "is possible to set it on the ``TarFile`` class itself to set a global " @@ -907,7 +910,7 @@ msgid "" "wrapped in :func:`staticmethod` to prevent injection of a ``self`` argument." msgstr "" -#: ../../library/tarfile.rst:633 +#: ../../library/tarfile.rst:634 msgid "" "Add the file *name* to the archive. *name* may be any type of file " "(directory, fifo, symbolic link, etc.). If given, *arcname* specifies an " @@ -920,11 +923,11 @@ msgid "" "ref:`tar-examples` for an example." msgstr "" -#: ../../library/tarfile.rst:647 +#: ../../library/tarfile.rst:648 msgid "Recursion adds entries in sorted order." msgstr "" -#: ../../library/tarfile.rst:653 +#: ../../library/tarfile.rst:654 msgid "" "Add the :class:`TarInfo` object *tarinfo* to the archive. If *tarinfo* " "represents a non zero-size regular file, the *fileobj* argument should be a :" @@ -933,11 +936,11 @@ msgid "" "meth:`gettarinfo`." msgstr "" -#: ../../library/tarfile.rst:660 +#: ../../library/tarfile.rst:661 msgid "*fileobj* must be given for non-zero-sized regular files." msgstr "" -#: ../../library/tarfile.rst:665 +#: ../../library/tarfile.rst:666 msgid "" "Create a :class:`TarInfo` object from the result of :func:`os.stat` or " "equivalent on an existing file. The file is either named by *name*, or " @@ -948,7 +951,7 @@ msgid "" "The name should be a text string." msgstr "" -#: ../../library/tarfile.rst:674 +#: ../../library/tarfile.rst:675 msgid "" "You can modify some of the :class:`TarInfo`’s attributes before you add it " "using :meth:`addfile`. If the file object is not an ordinary file object " @@ -958,21 +961,21 @@ msgid "" "case *arcname* could be a dummy string." msgstr "" -#: ../../library/tarfile.rst:688 +#: ../../library/tarfile.rst:689 msgid "" "Close the :class:`TarFile`. In write mode, two finishing zero blocks are " "appended to the archive." msgstr "" -#: ../../library/tarfile.rst:695 +#: ../../library/tarfile.rst:696 msgid "A dictionary containing key-value pairs of pax global headers." msgstr "" -#: ../../library/tarfile.rst:702 +#: ../../library/tarfile.rst:703 msgid "TarInfo Objects" msgstr "TarInfo 物件" -#: ../../library/tarfile.rst:704 +#: ../../library/tarfile.rst:705 msgid "" "A :class:`TarInfo` object represents one member in a :class:`TarFile`. Aside " "from storing all required attributes of a file (like file type, size, time, " @@ -980,14 +983,14 @@ msgid "" "type. It does *not* contain the file's data itself." msgstr "" -#: ../../library/tarfile.rst:709 +#: ../../library/tarfile.rst:710 msgid "" ":class:`TarInfo` objects are returned by :class:`TarFile`'s methods :meth:" "`~TarFile.getmember`, :meth:`~TarFile.getmembers` and :meth:`~TarFile." "gettarinfo`." msgstr "" -#: ../../library/tarfile.rst:713 +#: ../../library/tarfile.rst:714 msgid "" "Modifying the objects returned by :meth:`~TarFile.getmember` or :meth:" "`~TarFile.getmembers` will affect all subsequent operations on the archive. " @@ -996,82 +999,82 @@ msgid "" "step." msgstr "" -#: ../../library/tarfile.rst:719 +#: ../../library/tarfile.rst:720 msgid "" "Several attributes can be set to ``None`` to indicate that a piece of " "metadata is unused or unknown. Different :class:`TarInfo` methods handle " "``None`` differently:" msgstr "" -#: ../../library/tarfile.rst:723 +#: ../../library/tarfile.rst:724 msgid "" "The :meth:`~TarFile.extract` or :meth:`~TarFile.extractall` methods will " "ignore the corresponding metadata, leaving it set to a default." msgstr "" -#: ../../library/tarfile.rst:725 +#: ../../library/tarfile.rst:726 msgid ":meth:`~TarFile.addfile` will fail." msgstr "" -#: ../../library/tarfile.rst:726 +#: ../../library/tarfile.rst:727 msgid ":meth:`~TarFile.list` will print a placeholder string." msgstr "" -#: ../../library/tarfile.rst:730 +#: ../../library/tarfile.rst:731 msgid "Create a :class:`TarInfo` object." msgstr "" -#: ../../library/tarfile.rst:735 +#: ../../library/tarfile.rst:736 msgid "Create and return a :class:`TarInfo` object from string buffer *buf*." msgstr "" -#: ../../library/tarfile.rst:737 +#: ../../library/tarfile.rst:738 msgid "Raises :exc:`HeaderError` if the buffer is invalid." msgstr "" -#: ../../library/tarfile.rst:742 +#: ../../library/tarfile.rst:743 msgid "" "Read the next member from the :class:`TarFile` object *tarfile* and return " "it as a :class:`TarInfo` object." msgstr "" -#: ../../library/tarfile.rst:748 +#: ../../library/tarfile.rst:749 msgid "" "Create a string buffer from a :class:`TarInfo` object. For information on " "the arguments see the constructor of the :class:`TarFile` class." msgstr "" -#: ../../library/tarfile.rst:755 +#: ../../library/tarfile.rst:756 msgid "A ``TarInfo`` object has the following public data attributes:" msgstr "" -#: ../../library/tarfile.rst:761 +#: ../../library/tarfile.rst:762 msgid "Name of the archive member." msgstr "" -#: ../../library/tarfile.rst:767 +#: ../../library/tarfile.rst:768 msgid "Size in bytes." msgstr "" -#: ../../library/tarfile.rst:773 +#: ../../library/tarfile.rst:774 msgid "" "Time of last modification in seconds since the :ref:`epoch `, as in :" "attr:`os.stat_result.st_mtime`." msgstr "" -#: ../../library/tarfile.rst:778 ../../library/tarfile.rst:789 -#: ../../library/tarfile.rst:821 ../../library/tarfile.rst:832 -#: ../../library/tarfile.rst:843 ../../library/tarfile.rst:854 +#: ../../library/tarfile.rst:779 ../../library/tarfile.rst:790 +#: ../../library/tarfile.rst:822 ../../library/tarfile.rst:833 +#: ../../library/tarfile.rst:844 ../../library/tarfile.rst:855 msgid "" "Can be set to ``None`` for :meth:`~TarFile.extract` and :meth:`~TarFile." "extractall`, causing extraction to skip applying this attribute." msgstr "" -#: ../../library/tarfile.rst:785 +#: ../../library/tarfile.rst:786 msgid "Permission bits, as for :func:`os.chmod`." msgstr "" -#: ../../library/tarfile.rst:795 +#: ../../library/tarfile.rst:796 msgid "" "File type. *type* is usually one of these constants: :const:`REGTYPE`, :" "const:`AREGTYPE`, :const:`LNKTYPE`, :const:`SYMTYPE`, :const:`DIRTYPE`, :" @@ -1080,128 +1083,128 @@ msgid "" "more conveniently, use the ``is*()`` methods below." msgstr "" -#: ../../library/tarfile.rst:805 +#: ../../library/tarfile.rst:806 msgid "" "Name of the target file name, which is only present in :class:`TarInfo` " "objects of type :const:`LNKTYPE` and :const:`SYMTYPE`." msgstr "" -#: ../../library/tarfile.rst:808 +#: ../../library/tarfile.rst:809 msgid "" "For symbolic links (``SYMTYPE``), the *linkname* is relative to the " "directory that contains the link. For hard links (``LNKTYPE``), the " "*linkname* is relative to the root of the archive." msgstr "" -#: ../../library/tarfile.rst:817 +#: ../../library/tarfile.rst:818 msgid "User ID of the user who originally stored this member." msgstr "" -#: ../../library/tarfile.rst:828 +#: ../../library/tarfile.rst:829 msgid "Group ID of the user who originally stored this member." msgstr "" -#: ../../library/tarfile.rst:839 +#: ../../library/tarfile.rst:840 msgid "User name." msgstr "" -#: ../../library/tarfile.rst:850 +#: ../../library/tarfile.rst:851 msgid "Group name." msgstr "" -#: ../../library/tarfile.rst:861 +#: ../../library/tarfile.rst:862 msgid "Header checksum." msgstr "" -#: ../../library/tarfile.rst:867 +#: ../../library/tarfile.rst:868 msgid "Device major number." msgstr "" -#: ../../library/tarfile.rst:873 +#: ../../library/tarfile.rst:874 msgid "Device minor number." msgstr "" -#: ../../library/tarfile.rst:879 +#: ../../library/tarfile.rst:880 msgid "The tar header starts here." msgstr "" -#: ../../library/tarfile.rst:885 +#: ../../library/tarfile.rst:886 msgid "The file's data starts here." msgstr "" -#: ../../library/tarfile.rst:890 +#: ../../library/tarfile.rst:891 msgid "Sparse member information." msgstr "" -#: ../../library/tarfile.rst:896 +#: ../../library/tarfile.rst:897 msgid "" "A dictionary containing key-value pairs of an associated pax extended header." msgstr "" -#: ../../library/tarfile.rst:904 +#: ../../library/tarfile.rst:905 msgid "" "Return a *new* copy of the :class:`!TarInfo` object with the given " "attributes changed. For example, to return a ``TarInfo`` with the group name " "set to ``'staff'``, use::" msgstr "" -#: ../../library/tarfile.rst:908 +#: ../../library/tarfile.rst:909 msgid "new_tarinfo = old_tarinfo.replace(gname='staff')" msgstr "new_tarinfo = old_tarinfo.replace(gname='staff')" -#: ../../library/tarfile.rst:910 +#: ../../library/tarfile.rst:911 msgid "" "By default, a deep copy is made. If *deep* is false, the copy is shallow, i." "e. ``pax_headers`` and any custom attributes are shared with the original " "``TarInfo`` object." msgstr "" -#: ../../library/tarfile.rst:914 +#: ../../library/tarfile.rst:915 msgid "A :class:`TarInfo` object also provides some convenient query methods:" msgstr "" -#: ../../library/tarfile.rst:919 +#: ../../library/tarfile.rst:920 msgid "Return :const:`True` if the :class:`TarInfo` object is a regular file." msgstr "" -#: ../../library/tarfile.rst:924 +#: ../../library/tarfile.rst:925 msgid "Same as :meth:`isfile`." msgstr "" -#: ../../library/tarfile.rst:929 +#: ../../library/tarfile.rst:930 msgid "Return :const:`True` if it is a directory." msgstr "" -#: ../../library/tarfile.rst:934 +#: ../../library/tarfile.rst:935 msgid "Return :const:`True` if it is a symbolic link." msgstr "" -#: ../../library/tarfile.rst:939 +#: ../../library/tarfile.rst:940 msgid "Return :const:`True` if it is a hard link." msgstr "" -#: ../../library/tarfile.rst:944 +#: ../../library/tarfile.rst:945 msgid "Return :const:`True` if it is a character device." msgstr "" -#: ../../library/tarfile.rst:949 +#: ../../library/tarfile.rst:950 msgid "Return :const:`True` if it is a block device." msgstr "" -#: ../../library/tarfile.rst:954 +#: ../../library/tarfile.rst:955 msgid "Return :const:`True` if it is a FIFO." msgstr "" -#: ../../library/tarfile.rst:959 +#: ../../library/tarfile.rst:960 msgid "" "Return :const:`True` if it is one of character device, block device or FIFO." msgstr "" -#: ../../library/tarfile.rst:965 +#: ../../library/tarfile.rst:966 msgid "Extraction filters" msgstr "" -#: ../../library/tarfile.rst:969 +#: ../../library/tarfile.rst:970 msgid "" "The *tar* format is designed to capture all details of a UNIX-like " "filesystem, which makes it very powerful. Unfortunately, the features make " @@ -1211,66 +1214,66 @@ msgid "" "components, or symlinks that affect later members)." msgstr "" -#: ../../library/tarfile.rst:977 +#: ../../library/tarfile.rst:978 msgid "" "In most cases, the full functionality is not needed. Therefore, *tarfile* " "supports extraction filters: a mechanism to limit functionality, and thus " "mitigate some of the security issues." msgstr "" -#: ../../library/tarfile.rst:983 +#: ../../library/tarfile.rst:984 msgid ":pep:`706`" msgstr ":pep:`706`" -#: ../../library/tarfile.rst:984 +#: ../../library/tarfile.rst:985 msgid "Contains further motivation and rationale behind the design." msgstr "" -#: ../../library/tarfile.rst:986 +#: ../../library/tarfile.rst:987 msgid "" "The *filter* argument to :meth:`TarFile.extract` or :meth:`~TarFile." "extractall` can be:" msgstr "" -#: ../../library/tarfile.rst:989 +#: ../../library/tarfile.rst:990 msgid "" "the string ``'fully_trusted'``: Honor all metadata as specified in the " "archive. Should be used if the user trusts the archive completely, or " "implements their own complex verification." msgstr "" -#: ../../library/tarfile.rst:994 +#: ../../library/tarfile.rst:995 msgid "" "the string ``'tar'``: Honor most *tar*-specific features (i.e. features of " "UNIX-like filesystems), but block features that are very likely to be " "surprising or malicious. See :func:`tar_filter` for details." msgstr "" -#: ../../library/tarfile.rst:998 +#: ../../library/tarfile.rst:999 msgid "" "the string ``'data'``: Ignore or block most features specific to UNIX-like " "filesystems. Intended for extracting cross-platform data archives. See :func:" "`data_filter` for details." msgstr "" -#: ../../library/tarfile.rst:1002 +#: ../../library/tarfile.rst:1003 msgid "``None`` (default): Use :attr:`TarFile.extraction_filter`." msgstr "" -#: ../../library/tarfile.rst:1004 +#: ../../library/tarfile.rst:1005 msgid "" "If that is also ``None`` (the default), raise a ``DeprecationWarning``, and " "fall back to the ``'fully_trusted'`` filter, whose dangerous behavior " "matches previous versions of Python." msgstr "" -#: ../../library/tarfile.rst:1008 +#: ../../library/tarfile.rst:1009 msgid "" "In Python 3.14, the ``'data'`` filter will become the default instead. It's " "possible to switch earlier; see :attr:`TarFile.extraction_filter`." msgstr "" -#: ../../library/tarfile.rst:1011 +#: ../../library/tarfile.rst:1012 msgid "" "A callable which will be called for each extracted member with a :ref:" "`TarInfo ` describing the member and the destination path " @@ -1278,27 +1281,27 @@ msgid "" "members)::" msgstr "" -#: ../../library/tarfile.rst:1016 +#: ../../library/tarfile.rst:1017 msgid "filter(member: TarInfo, path: str, /) -> TarInfo | None" msgstr "filter(member: TarInfo, path: str, /) -> TarInfo | None" -#: ../../library/tarfile.rst:1018 +#: ../../library/tarfile.rst:1019 msgid "" "The callable is called just before each member is extracted, so it can take " "the current state of the disk into account. It can:" msgstr "" -#: ../../library/tarfile.rst:1022 +#: ../../library/tarfile.rst:1023 msgid "" "return a :class:`TarInfo` object which will be used instead of the metadata " "in the archive, or" msgstr "" -#: ../../library/tarfile.rst:1024 +#: ../../library/tarfile.rst:1025 msgid "return ``None``, in which case the member will be skipped, or" msgstr "" -#: ../../library/tarfile.rst:1025 +#: ../../library/tarfile.rst:1026 msgid "" "raise an exception to abort the operation or skip the member, depending on :" "attr:`~TarFile.errorlevel`. Note that when extraction is aborted, :meth:" @@ -1306,62 +1309,62 @@ msgid "" "attempt to clean up." msgstr "" -#: ../../library/tarfile.rst:1031 +#: ../../library/tarfile.rst:1032 msgid "Default named filters" msgstr "" -#: ../../library/tarfile.rst:1033 +#: ../../library/tarfile.rst:1034 msgid "" "The pre-defined, named filters are available as functions, so they can be " "reused in custom filters:" msgstr "" -#: ../../library/tarfile.rst:1038 +#: ../../library/tarfile.rst:1039 msgid "Return *member* unchanged." msgstr "" -#: ../../library/tarfile.rst:1040 +#: ../../library/tarfile.rst:1041 msgid "This implements the ``'fully_trusted'`` filter." msgstr "" -#: ../../library/tarfile.rst:1044 +#: ../../library/tarfile.rst:1045 msgid "Implements the ``'tar'`` filter." msgstr "" -#: ../../library/tarfile.rst:1046 +#: ../../library/tarfile.rst:1047 msgid "Strip leading slashes (``/`` and :data:`os.sep`) from filenames." msgstr "" -#: ../../library/tarfile.rst:1047 +#: ../../library/tarfile.rst:1048 msgid "" ":ref:`Refuse ` to extract files with absolute " "paths (in case the name is absolute even after stripping slashes, e.g. ``C:/" "foo`` on Windows). This raises :class:`~tarfile.AbsolutePathError`." msgstr "" -#: ../../library/tarfile.rst:1051 +#: ../../library/tarfile.rst:1052 msgid "" ":ref:`Refuse ` to extract files whose absolute " "path (after following symlinks) would end up outside the destination. This " "raises :class:`~tarfile.OutsideDestinationError`." msgstr "" -#: ../../library/tarfile.rst:1054 +#: ../../library/tarfile.rst:1055 msgid "" "Clear high mode bits (setuid, setgid, sticky) and group/other write bits (:" "const:`~stat.S_IWGRP` | :const:`~stat.S_IWOTH`)." msgstr "" -#: ../../library/tarfile.rst:1057 ../../library/tarfile.rst:1096 +#: ../../library/tarfile.rst:1058 ../../library/tarfile.rst:1097 msgid "Return the modified ``TarInfo`` member." msgstr "" -#: ../../library/tarfile.rst:1061 +#: ../../library/tarfile.rst:1062 msgid "" "Implements the ``'data'`` filter. In addition to what ``tar_filter`` does:" msgstr "" -#: ../../library/tarfile.rst:1064 +#: ../../library/tarfile.rst:1065 msgid "" "Normalize link targets (:attr:`TarInfo.linkname`) using :func:`os.path." "normpath`. Note that this removes internal ``..`` components, which may " @@ -1369,67 +1372,67 @@ msgid "" "traverses symbolic links." msgstr "" -#: ../../library/tarfile.rst:1070 +#: ../../library/tarfile.rst:1071 msgid "" ":ref:`Refuse ` to extract links (hard or soft) " "that link to absolute paths, or ones that link outside the destination." msgstr "" -#: ../../library/tarfile.rst:1073 +#: ../../library/tarfile.rst:1074 msgid "" "This raises :class:`~tarfile.AbsoluteLinkError` or :class:`~tarfile." "LinkOutsideDestinationError`." msgstr "" -#: ../../library/tarfile.rst:1076 +#: ../../library/tarfile.rst:1077 msgid "" "Note that such files are refused even on platforms that do not support " "symbolic links." msgstr "" -#: ../../library/tarfile.rst:1079 +#: ../../library/tarfile.rst:1080 msgid "" ":ref:`Refuse ` to extract device files (including " "pipes). This raises :class:`~tarfile.SpecialFileError`." msgstr "" -#: ../../library/tarfile.rst:1083 +#: ../../library/tarfile.rst:1084 msgid "For regular files, including hard links:" msgstr "" -#: ../../library/tarfile.rst:1085 +#: ../../library/tarfile.rst:1086 msgid "" "Set the owner read and write permissions (:const:`~stat.S_IRUSR` | :const:" "`~stat.S_IWUSR`)." msgstr "" -#: ../../library/tarfile.rst:1087 +#: ../../library/tarfile.rst:1088 msgid "" "Remove the group & other executable permission (:const:`~stat.S_IXGRP` | :" "const:`~stat.S_IXOTH`) if the owner doesn’t have it (:const:`~stat.S_IXUSR`)." msgstr "" -#: ../../library/tarfile.rst:1091 +#: ../../library/tarfile.rst:1092 msgid "" "For other files (directories), set ``mode`` to ``None``, so that extraction " "methods skip applying permission bits." msgstr "" -#: ../../library/tarfile.rst:1093 +#: ../../library/tarfile.rst:1094 msgid "" "Set user and group info (``uid``, ``gid``, ``uname``, ``gname``) to " "``None``, so that extraction methods skip setting it." msgstr "" -#: ../../library/tarfile.rst:1100 +#: ../../library/tarfile.rst:1101 msgid "Link targets are now normalized." msgstr "" -#: ../../library/tarfile.rst:1106 +#: ../../library/tarfile.rst:1107 msgid "Filter errors" msgstr "" -#: ../../library/tarfile.rst:1108 +#: ../../library/tarfile.rst:1109 msgid "" "When a filter refuses to extract a file, it will raise an appropriate " "exception, a subclass of :class:`~tarfile.FilterError`. This will abort the " @@ -1438,11 +1441,11 @@ msgid "" "continue." msgstr "" -#: ../../library/tarfile.rst:1116 +#: ../../library/tarfile.rst:1117 msgid "Hints for further verification" msgstr "" -#: ../../library/tarfile.rst:1118 +#: ../../library/tarfile.rst:1119 msgid "" "Even with ``filter='data'``, *tarfile* is not suited for extracting " "untrusted files without prior inspection. Among other issues, the pre-" @@ -1450,73 +1453,73 @@ msgid "" "additional checks." msgstr "" -#: ../../library/tarfile.rst:1123 +#: ../../library/tarfile.rst:1124 msgid "Here is an incomplete list of things to consider:" msgstr "" -#: ../../library/tarfile.rst:1125 +#: ../../library/tarfile.rst:1126 msgid "" "Extract to a :func:`new temporary directory ` to prevent e." "g. exploiting pre-existing links, and to make it easier to clean up after a " "failed extraction." msgstr "" -#: ../../library/tarfile.rst:1128 +#: ../../library/tarfile.rst:1129 msgid "Disallow symbolic links if you do not need the functionality." msgstr "" -#: ../../library/tarfile.rst:1129 +#: ../../library/tarfile.rst:1130 msgid "" "When working with untrusted data, use external (e.g. OS-level) limits on " "disk, memory and CPU usage." msgstr "" -#: ../../library/tarfile.rst:1131 +#: ../../library/tarfile.rst:1132 msgid "" "Check filenames against an allow-list of characters (to filter out control " "characters, confusables, foreign path separators, etc.)." msgstr "" -#: ../../library/tarfile.rst:1134 +#: ../../library/tarfile.rst:1135 msgid "" "Check that filenames have expected extensions (discouraging files that " "execute when you “click on them”, or extension-less files like Windows " "special device names)." msgstr "" -#: ../../library/tarfile.rst:1136 +#: ../../library/tarfile.rst:1137 msgid "" "Limit the number of extracted files, total size of extracted data, filename " "length (including symlink length), and size of individual files." msgstr "" -#: ../../library/tarfile.rst:1138 +#: ../../library/tarfile.rst:1139 msgid "Check for files that would be shadowed on case-insensitive filesystems." msgstr "" -#: ../../library/tarfile.rst:1140 +#: ../../library/tarfile.rst:1141 msgid "Also note that:" msgstr "" -#: ../../library/tarfile.rst:1142 +#: ../../library/tarfile.rst:1143 msgid "" "Tar files may contain multiple versions of the same file. Later ones are " "expected to overwrite any earlier ones. This feature is crucial to allow " "updating tape archives, but can be abused maliciously." msgstr "" -#: ../../library/tarfile.rst:1146 +#: ../../library/tarfile.rst:1147 msgid "" "*tarfile* does not protect against issues with “live” data, e.g. an attacker " "tinkering with the destination (or source) directory while extraction (or " "archiving) is in progress." msgstr "" -#: ../../library/tarfile.rst:1152 +#: ../../library/tarfile.rst:1153 msgid "Supporting older Python versions" msgstr "" -#: ../../library/tarfile.rst:1154 +#: ../../library/tarfile.rst:1155 msgid "" "Extraction filters were added to Python 3.12, but may be backported to older " "versions as security updates. To check whether the feature is available, use " @@ -1524,18 +1527,18 @@ msgid "" "version." msgstr "" -#: ../../library/tarfile.rst:1159 +#: ../../library/tarfile.rst:1160 msgid "" "The following examples show how to support Python versions with and without " "the feature. Note that setting ``extraction_filter`` will affect any " "subsequent operations." msgstr "" -#: ../../library/tarfile.rst:1163 +#: ../../library/tarfile.rst:1164 msgid "Fully trusted archive::" msgstr "" -#: ../../library/tarfile.rst:1165 +#: ../../library/tarfile.rst:1166 msgid "" "my_tarfile.extraction_filter = (lambda member, path: member)\n" "my_tarfile.extractall()" @@ -1543,13 +1546,13 @@ msgstr "" "my_tarfile.extraction_filter = (lambda member, path: member)\n" "my_tarfile.extractall()" -#: ../../library/tarfile.rst:1168 +#: ../../library/tarfile.rst:1169 msgid "" "Use the ``'data'`` filter if available, but revert to Python 3.11 behavior " "(``'fully_trusted'``) if this feature is not available::" msgstr "" -#: ../../library/tarfile.rst:1171 +#: ../../library/tarfile.rst:1172 msgid "" "my_tarfile.extraction_filter = getattr(tarfile, 'data_filter',\n" " (lambda member, path: member))\n" @@ -1559,19 +1562,19 @@ msgstr "" " (lambda member, path: member))\n" "my_tarfile.extractall()" -#: ../../library/tarfile.rst:1175 +#: ../../library/tarfile.rst:1176 msgid "Use the ``'data'`` filter; *fail* if it is not available::" msgstr "" -#: ../../library/tarfile.rst:1177 +#: ../../library/tarfile.rst:1178 msgid "my_tarfile.extractall(filter=tarfile.data_filter)" msgstr "my_tarfile.extractall(filter=tarfile.data_filter)" -#: ../../library/tarfile.rst:1179 +#: ../../library/tarfile.rst:1180 msgid "or::" msgstr "或: ::" -#: ../../library/tarfile.rst:1181 +#: ../../library/tarfile.rst:1182 msgid "" "my_tarfile.extraction_filter = tarfile.data_filter\n" "my_tarfile.extractall()" @@ -1579,11 +1582,11 @@ msgstr "" "my_tarfile.extraction_filter = tarfile.data_filter\n" "my_tarfile.extractall()" -#: ../../library/tarfile.rst:1184 +#: ../../library/tarfile.rst:1185 msgid "Use the ``'data'`` filter; *warn* if it is not available::" msgstr "" -#: ../../library/tarfile.rst:1186 +#: ../../library/tarfile.rst:1187 msgid "" "if hasattr(tarfile, 'data_filter'):\n" " my_tarfile.extractall(filter='data')\n" @@ -1593,18 +1596,18 @@ msgid "" " my_tarfile.extractall()" msgstr "" -#: ../../library/tarfile.rst:1195 +#: ../../library/tarfile.rst:1196 msgid "Stateful extraction filter example" msgstr "" -#: ../../library/tarfile.rst:1197 +#: ../../library/tarfile.rst:1198 msgid "" "While *tarfile*'s extraction methods take a simple *filter* callable, custom " "filters may be more complex objects with an internal state. It may be useful " "to write these as context managers, to be used like this::" msgstr "" -#: ../../library/tarfile.rst:1201 +#: ../../library/tarfile.rst:1202 msgid "" "with StatefulFilter() as filter_func:\n" " tar.extractall(path, filter=filter_func)" @@ -1612,11 +1615,11 @@ msgstr "" "with StatefulFilter() as filter_func:\n" " tar.extractall(path, filter=filter_func)" -#: ../../library/tarfile.rst:1204 +#: ../../library/tarfile.rst:1205 msgid "Such a filter can be written as, for example::" msgstr "" -#: ../../library/tarfile.rst:1206 +#: ../../library/tarfile.rst:1207 msgid "" "class StatefulFilter:\n" " def __init__(self):\n" @@ -1633,103 +1636,103 @@ msgid "" " print(f'{self.file_count} files extracted')" msgstr "" -#: ../../library/tarfile.rst:1226 +#: ../../library/tarfile.rst:1227 msgid "Command-Line Interface" msgstr "" -#: ../../library/tarfile.rst:1230 +#: ../../library/tarfile.rst:1231 msgid "" "The :mod:`tarfile` module provides a simple command-line interface to " "interact with tar archives." msgstr "" -#: ../../library/tarfile.rst:1233 +#: ../../library/tarfile.rst:1234 msgid "" "If you want to create a new tar archive, specify its name after the :option:" "`-c` option and then list the filename(s) that should be included:" msgstr "" -#: ../../library/tarfile.rst:1236 +#: ../../library/tarfile.rst:1237 msgid "$ python -m tarfile -c monty.tar spam.txt eggs.txt" msgstr "$ python -m tarfile -c monty.tar spam.txt eggs.txt" -#: ../../library/tarfile.rst:1240 +#: ../../library/tarfile.rst:1241 msgid "Passing a directory is also acceptable:" msgstr "" -#: ../../library/tarfile.rst:1242 +#: ../../library/tarfile.rst:1243 msgid "$ python -m tarfile -c monty.tar life-of-brian_1979/" msgstr "$ python -m tarfile -c monty.tar life-of-brian_1979/" -#: ../../library/tarfile.rst:1246 +#: ../../library/tarfile.rst:1247 msgid "" "If you want to extract a tar archive into the current directory, use the :" "option:`-e` option:" msgstr "" -#: ../../library/tarfile.rst:1249 +#: ../../library/tarfile.rst:1250 msgid "$ python -m tarfile -e monty.tar" msgstr "$ python -m tarfile -e monty.tar" -#: ../../library/tarfile.rst:1253 +#: ../../library/tarfile.rst:1254 msgid "" "You can also extract a tar archive into a different directory by passing the " "directory's name:" msgstr "" -#: ../../library/tarfile.rst:1256 +#: ../../library/tarfile.rst:1257 msgid "$ python -m tarfile -e monty.tar other-dir/" msgstr "$ python -m tarfile -e monty.tar other-dir/" -#: ../../library/tarfile.rst:1260 +#: ../../library/tarfile.rst:1261 msgid "For a list of the files in a tar archive, use the :option:`-l` option:" msgstr "" -#: ../../library/tarfile.rst:1262 +#: ../../library/tarfile.rst:1263 msgid "$ python -m tarfile -l monty.tar" msgstr "$ python -m tarfile -l monty.tar" -#: ../../library/tarfile.rst:1268 +#: ../../library/tarfile.rst:1269 msgid "Command-line options" msgstr "命令列選項" -#: ../../library/tarfile.rst:1273 +#: ../../library/tarfile.rst:1274 msgid "List files in a tarfile." msgstr "" -#: ../../library/tarfile.rst:1278 +#: ../../library/tarfile.rst:1279 msgid "Create tarfile from source files." msgstr "" -#: ../../library/tarfile.rst:1283 +#: ../../library/tarfile.rst:1284 msgid "" "Extract tarfile into the current directory if *output_dir* is not specified." msgstr "" -#: ../../library/tarfile.rst:1288 +#: ../../library/tarfile.rst:1289 msgid "Test whether the tarfile is valid or not." msgstr "" -#: ../../library/tarfile.rst:1292 +#: ../../library/tarfile.rst:1293 msgid "Verbose output." msgstr "" -#: ../../library/tarfile.rst:1296 +#: ../../library/tarfile.rst:1297 msgid "" "Specifies the *filter* for ``--extract``. See :ref:`tarfile-extraction-" "filter` for details. Only string names are accepted (that is, " "``fully_trusted``, ``tar``, and ``data``)." msgstr "" -#: ../../library/tarfile.rst:1304 +#: ../../library/tarfile.rst:1305 msgid "Examples" msgstr "範例" -#: ../../library/tarfile.rst:1306 +#: ../../library/tarfile.rst:1307 msgid "How to extract an entire tar archive to the current working directory::" msgstr "" -#: ../../library/tarfile.rst:1308 +#: ../../library/tarfile.rst:1309 msgid "" "import tarfile\n" "tar = tarfile.open(\"sample.tar.gz\")\n" @@ -1741,13 +1744,13 @@ msgstr "" "tar.extractall(filter='data')\n" "tar.close()" -#: ../../library/tarfile.rst:1313 +#: ../../library/tarfile.rst:1314 msgid "" "How to extract a subset of a tar archive with :meth:`TarFile.extractall` " "using a generator function instead of a list::" msgstr "" -#: ../../library/tarfile.rst:1316 +#: ../../library/tarfile.rst:1317 msgid "" "import os\n" "import tarfile\n" @@ -1773,11 +1776,11 @@ msgstr "" "tar.extractall(members=py_files(tar))\n" "tar.close()" -#: ../../library/tarfile.rst:1328 +#: ../../library/tarfile.rst:1329 msgid "How to create an uncompressed tar archive from a list of filenames::" msgstr "" -#: ../../library/tarfile.rst:1330 +#: ../../library/tarfile.rst:1331 msgid "" "import tarfile\n" "tar = tarfile.open(\"sample.tar\", \"w\")\n" @@ -1791,11 +1794,11 @@ msgstr "" " tar.add(name)\n" "tar.close()" -#: ../../library/tarfile.rst:1336 +#: ../../library/tarfile.rst:1337 msgid "The same example using the :keyword:`with` statement::" msgstr "" -#: ../../library/tarfile.rst:1338 +#: ../../library/tarfile.rst:1339 msgid "" "import tarfile\n" "with tarfile.open(\"sample.tar\", \"w\") as tar:\n" @@ -1807,13 +1810,13 @@ msgstr "" " for name in [\"foo\", \"bar\", \"quux\"]:\n" " tar.add(name)" -#: ../../library/tarfile.rst:1343 +#: ../../library/tarfile.rst:1344 msgid "" "How to read a gzip compressed tar archive and display some member " "information::" msgstr "" -#: ../../library/tarfile.rst:1345 +#: ../../library/tarfile.rst:1346 msgid "" "import tarfile\n" "tar = tarfile.open(\"sample.tar.gz\", \"r:gz\")\n" @@ -1829,13 +1832,13 @@ msgid "" "tar.close()" msgstr "" -#: ../../library/tarfile.rst:1357 +#: ../../library/tarfile.rst:1358 msgid "" "How to create an archive and reset the user information using the *filter* " "parameter in :meth:`TarFile.add`::" msgstr "" -#: ../../library/tarfile.rst:1360 +#: ../../library/tarfile.rst:1361 msgid "" "import tarfile\n" "def reset(tarinfo):\n" @@ -1855,17 +1858,17 @@ msgstr "" "tar.add(\"foo\", filter=reset)\n" "tar.close()" -#: ../../library/tarfile.rst:1373 +#: ../../library/tarfile.rst:1374 msgid "Supported tar formats" msgstr "" -#: ../../library/tarfile.rst:1375 +#: ../../library/tarfile.rst:1376 msgid "" "There are three tar formats that can be created with the :mod:`tarfile` " "module:" msgstr "" -#: ../../library/tarfile.rst:1377 +#: ../../library/tarfile.rst:1378 msgid "" "The POSIX.1-1988 ustar format (:const:`USTAR_FORMAT`). It supports filenames " "up to a length of at best 256 characters and linknames up to 100 characters. " @@ -1873,7 +1876,7 @@ msgid "" "supported format." msgstr "" -#: ../../library/tarfile.rst:1382 +#: ../../library/tarfile.rst:1383 msgid "" "The GNU tar format (:const:`GNU_FORMAT`). It supports long filenames and " "linknames, files bigger than 8 GiB and sparse files. It is the de facto " @@ -1881,7 +1884,7 @@ msgid "" "extensions for long names, sparse file support is read-only." msgstr "" -#: ../../library/tarfile.rst:1387 +#: ../../library/tarfile.rst:1388 msgid "" "The POSIX.1-2001 pax format (:const:`PAX_FORMAT`). It is the most flexible " "format with virtually no limits. It supports long filenames and linknames, " @@ -1892,7 +1895,7 @@ msgid "" "*ustar* format. It is the current default format for new archives." msgstr "" -#: ../../library/tarfile.rst:1395 +#: ../../library/tarfile.rst:1396 msgid "" "It extends the existing *ustar* format with extra headers for information " "that cannot be stored otherwise. There are two flavours of pax headers: " @@ -1901,13 +1904,13 @@ msgid "" "in a pax header is encoded in *UTF-8* for portability reasons." msgstr "" -#: ../../library/tarfile.rst:1401 +#: ../../library/tarfile.rst:1402 msgid "" "There are some more variants of the tar format which can be read, but not " "created:" msgstr "" -#: ../../library/tarfile.rst:1404 +#: ../../library/tarfile.rst:1405 msgid "" "The ancient V7 format. This is the first tar format from Unix Seventh " "Edition, storing only regular files and directories. Names must not be " @@ -1916,17 +1919,17 @@ msgid "" "ASCII characters." msgstr "" -#: ../../library/tarfile.rst:1409 +#: ../../library/tarfile.rst:1410 msgid "" "The SunOS tar extended format. This format is a variant of the POSIX.1-2001 " "pax format, but is not compatible." msgstr "" -#: ../../library/tarfile.rst:1415 +#: ../../library/tarfile.rst:1416 msgid "Unicode issues" msgstr "" -#: ../../library/tarfile.rst:1417 +#: ../../library/tarfile.rst:1418 msgid "" "The tar format was originally conceived to make backups on tape drives with " "the main focus on preserving file system information. Nowadays tar archives " @@ -1941,13 +1944,13 @@ msgid "" "It stores non-ASCII metadata using the universal character encoding *UTF-8*." msgstr "" -#: ../../library/tarfile.rst:1429 +#: ../../library/tarfile.rst:1430 msgid "" "The details of character conversion in :mod:`tarfile` are controlled by the " "*encoding* and *errors* keyword arguments of the :class:`TarFile` class." msgstr "" -#: ../../library/tarfile.rst:1432 +#: ../../library/tarfile.rst:1433 msgid "" "*encoding* defines the character encoding to use for the metadata in the " "archive. The default value is :func:`sys.getfilesystemencoding` or " @@ -1956,7 +1959,7 @@ msgid "" "not set appropriately, this conversion may fail." msgstr "" -#: ../../library/tarfile.rst:1438 +#: ../../library/tarfile.rst:1439 msgid "" "The *errors* argument defines how characters are treated that cannot be " "converted. Possible values are listed in section :ref:`error-handlers`. The " @@ -1964,10 +1967,16 @@ msgid "" "system calls, see :ref:`os-filenames`." msgstr "" -#: ../../library/tarfile.rst:1443 +#: ../../library/tarfile.rst:1444 msgid "" "For :const:`PAX_FORMAT` archives (the default), *encoding* is generally not " "needed because all the metadata is stored using *UTF-8*. *encoding* is only " "used in the rare cases when binary pax headers are decoded or when strings " "with surrogate characters are stored." msgstr "" + +#~ msgid "``'a' or 'a:'``" +#~ msgstr "``'a' 或 'a:'``" + +#~ msgid "``'w' or 'w:'``" +#~ msgstr "``'w' 或 'w:'``" From 357c853c1b8957102ae7e93af108309af6a62b3a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 7 Jul 2025 10:50:42 +0000 Subject: [PATCH 3/4] sync with cpython d7bb308e --- howto/logging-cookbook.po | 523 ++++++++++++++----------- library/pyexpat.po | 293 +++++++------- library/random.po | 109 +++--- library/security_warnings.po | 10 +- library/xml.dom.minidom.po | 113 +++--- library/xml.dom.pulldom.po | 59 ++- library/xml.etree.elementtree.po | 553 ++++++++++++++------------- library/xml.po | 370 +++++++++--------- library/xml.sax.po | 63 ++- library/xmlrpc.client.po | 6 +- library/xmlrpc.server.po | 6 +- whatsnew/3.9.po | 632 +++++++++++++++---------------- 12 files changed, 1388 insertions(+), 1349 deletions(-) diff --git a/howto/logging-cookbook.po b/howto/logging-cookbook.po index 725f48933a..2e3b8fe06b 100644 --- a/howto/logging-cookbook.po +++ b/howto/logging-cookbook.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-21 00:13+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 14:36+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -68,8 +68,8 @@ msgid "" "ch = logging.StreamHandler()\n" "ch.setLevel(logging.ERROR)\n" "# create formatter and add it to the handlers\n" -"formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %" -"(message)s')\n" +"formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - " +"%(message)s')\n" "fh.setFormatter(formatter)\n" "ch.setFormatter(formatter)\n" "# add the handlers to the logger\n" @@ -100,8 +100,8 @@ msgid "" "\n" "class Auxiliary:\n" " def __init__(self):\n" -" self.logger = " -"logging.getLogger('spam_application.auxiliary.Auxiliary')\n" +" self.logger = logging.getLogger('spam_application.auxiliary." +"Auxiliary')\n" " self.logger.info('creating an instance of Auxiliary')\n" "\n" " def do_something(self):\n" @@ -163,8 +163,8 @@ msgid "" " time.sleep(0.5)\n" "\n" "def main():\n" -" logging.basicConfig(level=logging.DEBUG, format='%(relativeCreated)6d %" -"(threadName)s %(message)s')\n" +" logging.basicConfig(level=logging.DEBUG, format='%(relativeCreated)6d " +"%(threadName)s %(message)s')\n" " info = {'stop': False}\n" " thread = threading.Thread(target=worker, args=(info,))\n" " thread.start()\n" @@ -241,8 +241,8 @@ msgid "" "ch = logging.StreamHandler()\n" "ch.setLevel(logging.ERROR)\n" "# create formatter and add it to the handlers\n" -"formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %" -"(message)s')\n" +"formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - " +"%(message)s')\n" "ch.setFormatter(formatter)\n" "fh.setFormatter(formatter)\n" "# add the handlers to logger\n" @@ -295,8 +295,8 @@ msgid "" "\n" "# set up logging to file - see previous section for more details\n" "logging.basicConfig(level=logging.DEBUG,\n" -" format='%(asctime)s %(name)-12s %(levelname)-8s %" -"(message)s',\n" +" format='%(asctime)s %(name)-12s %(levelname)-8s " +"%(message)s',\n" " datefmt='%m-%d %H:%M',\n" " filename='/tmp/myapp.log',\n" " filemode='w')\n" @@ -504,9 +504,9 @@ msgid "" "a function which only returns ``True`` if the level of the passed in record " "is at or below the specified level. Note that in this example I have defined " "the ``filter_maker`` in a test script ``main.py`` that I run from the " -"command line, so its module will be ``__main__`` - hence the " -"``__main__.filter_maker`` in the filter configuration. You will need to " -"change that if you define it in a different module." +"command line, so its module will be ``__main__`` - hence the ``__main__." +"filter_maker`` in the filter configuration. You will need to change that if " +"you define it in a different module." msgstr "" #: ../../howto/logging-cookbook.rst:387 @@ -713,13 +713,13 @@ msgstr "" #: ../../howto/logging-cookbook.rst:555 msgid "" -"A common culprit which demonstrates sluggish behaviour is " -"the :class:`SMTPHandler`: sending emails can take a long time, for a number " -"of reasons outside the developer's control (for example, a poorly performing " -"mail or network infrastructure). But almost any network-based handler can " -"block: Even a :class:`SocketHandler` operation may do a DNS query under the " -"hood which is too slow (and this query can be deep in the socket library " -"code, below the Python layer, and outside your control)." +"A common culprit which demonstrates sluggish behaviour is the :class:" +"`SMTPHandler`: sending emails can take a long time, for a number of reasons " +"outside the developer's control (for example, a poorly performing mail or " +"network infrastructure). But almost any network-based handler can block: " +"Even a :class:`SocketHandler` operation may do a DNS query under the hood " +"which is too slow (and this query can be deep in the socket library code, " +"below the Python layer, and outside your control)." msgstr "" #: ../../howto/logging-cookbook.rst:563 @@ -739,12 +739,12 @@ msgstr "" #: ../../howto/logging-cookbook.rst:574 msgid "" "The second part of the solution is :class:`QueueListener`, which has been " -"designed as the counterpart to :class:`QueueHandler`. " -"A :class:`QueueListener` is very simple: it's passed a queue and some " -"handlers, and it fires up an internal thread which listens to its queue for " -"LogRecords sent from ``QueueHandlers`` (or any other source of " -"``LogRecords``, for that matter). The ``LogRecords`` are removed from the " -"queue and passed to the handlers for processing." +"designed as the counterpart to :class:`QueueHandler`. A :class:" +"`QueueListener` is very simple: it's passed a queue and some handlers, and " +"it fires up an internal thread which listens to its queue for LogRecords " +"sent from ``QueueHandlers`` (or any other source of ``LogRecords``, for that " +"matter). The ``LogRecords`` are removed from the queue and passed to the " +"handlers for processing." msgstr "" #: ../../howto/logging-cookbook.rst:582 @@ -792,10 +792,10 @@ msgid "" "Although the earlier discussion wasn't specifically talking about async " "code, but rather about slow logging handlers, it should be noted that when " "logging from async code, network and even file handlers could lead to " -"problems (blocking the event loop) because some logging is done " -"from :mod:`asyncio` internals. It might be best, if any async code is used " -"in an application, to use the above approach for logging, so that any " -"blocking code runs only in the ``QueueListener`` thread." +"problems (blocking the event loop) because some logging is done from :mod:" +"`asyncio` internals. It might be best, if any async code is used in an " +"application, to use the above approach for logging, so that any blocking " +"code runs only in the ``QueueListener`` thread." msgstr "" #: ../../howto/logging-cookbook.rst:619 @@ -817,8 +817,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:634 msgid "" "Let's say you want to send logging events across a network, and handle them " -"at the receiving end. A simple way of doing this is attaching " -"a :class:`SocketHandler` instance to the root logger at the sending end::" +"at the receiving end. A simple way of doing this is attaching a :class:" +"`SocketHandler` instance to the root logger at the sending end::" msgstr "" #: ../../howto/logging-cookbook.rst:638 @@ -851,8 +851,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:662 msgid "" -"At the receiving end, you can set up a receiver using " -"the :mod:`socketserver` module. Here is a basic working example::" +"At the receiving end, you can set up a receiver using the :mod:" +"`socketserver` module. Here is a basic working example::" msgstr "" #: ../../howto/logging-cookbook.rst:665 @@ -936,8 +936,8 @@ msgid "" "\n" "def main():\n" " logging.basicConfig(\n" -" format='%(relativeCreated)5d %(name)-15s %(levelname)-8s %" -"(message)s')\n" +" format='%(relativeCreated)5d %(name)-15s %(levelname)-8s " +"%(message)s')\n" " tcpserver = LogRecordSocketReceiver()\n" " print('About to start TCP server...')\n" " tcpserver.serve_until_stopped()\n" @@ -1070,8 +1070,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:811 msgid "" -"Download `the Gist `__ as a ZIP archive using " -"the :guilabel:`Download ZIP` button." +"Download `the Gist `__ as a ZIP archive using the :" +"guilabel:`Download ZIP` button." msgstr "" #: ../../howto/logging-cookbook.rst:814 @@ -1155,8 +1155,8 @@ msgid "" "is not a good idea because these instances are not garbage collected. While " "this is not a problem in practice, when the number of :class:`Logger` " "instances is dependent on the level of granularity you want to use in " -"logging an application, it could be hard to manage if the number " -"of :class:`Logger` instances becomes effectively unbounded." +"logging an application, it could be hard to manage if the number of :class:" +"`Logger` instances becomes effectively unbounded." msgstr "" #: ../../howto/logging-cookbook.rst:873 @@ -1167,22 +1167,22 @@ msgstr "" msgid "" "An easy way in which you can pass contextual information to be output along " "with logging event information is to use the :class:`LoggerAdapter` class. " -"This class is designed to look like a :class:`Logger`, so that you can " -"call :meth:`debug`, :meth:`info`, :meth:`warning`, :meth:`error`, :meth:`exception`, :meth:`critical` " -"and :meth:`log`. These methods have the same signatures as their " -"counterparts in :class:`Logger`, so you can use the two types of instances " -"interchangeably." +"This class is designed to look like a :class:`Logger`, so that you can call :" +"meth:`debug`, :meth:`info`, :meth:`warning`, :meth:`error`, :meth:" +"`exception`, :meth:`critical` and :meth:`log`. These methods have the same " +"signatures as their counterparts in :class:`Logger`, so you can use the two " +"types of instances interchangeably." msgstr "" #: ../../howto/logging-cookbook.rst:883 msgid "" -"When you create an instance of :class:`LoggerAdapter`, you pass it " -"a :class:`Logger` instance and a dict-like object which contains your " -"contextual information. When you call one of the logging methods on an " -"instance of :class:`LoggerAdapter`, it delegates the call to the underlying " -"instance of :class:`Logger` passed to its constructor, and arranges to pass " -"the contextual information in the delegated call. Here's a snippet from the " -"code of :class:`LoggerAdapter`::" +"When you create an instance of :class:`LoggerAdapter`, you pass it a :class:" +"`Logger` instance and a dict-like object which contains your contextual " +"information. When you call one of the logging methods on an instance of :" +"class:`LoggerAdapter`, it delegates the call to the underlying instance of :" +"class:`Logger` passed to its constructor, and arranges to pass the " +"contextual information in the delegated call. Here's a snippet from the code " +"of :class:`LoggerAdapter`::" msgstr "" #: ../../howto/logging-cookbook.rst:891 @@ -1216,9 +1216,8 @@ msgid "" "use customized strings with your :class:`Formatter` instances which know " "about the keys of the dict-like object. If you need a different method, e.g. " "if you want to prepend or append the contextual information to the message " -"string, you just need to subclass :class:`LoggerAdapter` and " -"override :meth:`~LoggerAdapter.process` to do what you need. Here is a " -"simple example::" +"string, you just need to subclass :class:`LoggerAdapter` and override :meth:" +"`~LoggerAdapter.process` to do what you need. Here is a simple example::" msgstr "" #: ../../howto/logging-cookbook.rst:916 @@ -1267,23 +1266,23 @@ msgstr "" #: ../../howto/logging-cookbook.rst:946 msgid "" -"You can also add contextual information to log output using a user-" -"defined :class:`Filter`. ``Filter`` instances are allowed to modify the " +"You can also add contextual information to log output using a user-defined :" +"class:`Filter`. ``Filter`` instances are allowed to modify the " "``LogRecords`` passed to them, including adding additional attributes which " -"can then be output using a suitable format string, or if needed a " -"custom :class:`Formatter`." +"can then be output using a suitable format string, or if needed a custom :" +"class:`Formatter`." msgstr "" #: ../../howto/logging-cookbook.rst:951 msgid "" "For example in a web application, the request being processed (or at least, " -"the interesting parts of it) can be stored in a threadlocal " -"(:class:`threading.local`) variable, and then accessed from a ``Filter`` to " -"add, say, information from the request - say, the remote IP address and " -"remote user's username - to the ``LogRecord``, using the attribute names " -"'ip' and 'user' as in the ``LoggerAdapter`` example above. In that case, the " -"same format string can be used to get similar output to that shown above. " -"Here's an example script::" +"the interesting parts of it) can be stored in a threadlocal (:class:" +"`threading.local`) variable, and then accessed from a ``Filter`` to add, " +"say, information from the request - say, the remote IP address and remote " +"user's username - to the ``LogRecord``, using the attribute names 'ip' and " +"'user' as in the ``LoggerAdapter`` example above. In that case, the same " +"format string can be used to get similar output to that shown above. Here's " +"an example script::" msgstr "" #: ../../howto/logging-cookbook.rst:960 @@ -1440,8 +1439,8 @@ msgid "" "\n" "# A dummy set of requests which will be used in the simulation - we'll just " "pick\n" -"# from this list randomly. Note that all GET requests are from " -"192.168.2.XXX\n" +"# from this list randomly. Note that all GET requests are from 192.168.2." +"XXX\n" "# addresses, whereas POST requests are from 192.16.3.XXX addresses. Three " "users\n" "# are represented in the sample requests.\n" @@ -1459,8 +1458,8 @@ msgid "" "information\n" "# such as HTTP method, client IP and username\n" "\n" -"formatter = logging.Formatter('%(threadName)-11s %(appName)s %(name)-9s %" -"(user)-6s %(ip)s %(method)-4s %(message)s')\n" +"formatter = logging.Formatter('%(threadName)-11s %(appName)s %(name)-9s " +"%(user)-6s %(ip)s %(method)-4s %(message)s')\n" "\n" "# Create our context variables. These will be filled at the start of " "request\n" @@ -1699,19 +1698,18 @@ msgid "" "this is to have all the processes log to a :class:`~handlers.SocketHandler`, " "and have a separate process which implements a socket server which reads " "from the socket and logs to file. (If you prefer, you can dedicate one " -"thread in one of the existing processes to perform this " -"function.) :ref:`This section ` documents this approach in " -"more detail and includes a working socket receiver which can be used as a " -"starting point for you to adapt in your own applications." +"thread in one of the existing processes to perform this function.) :ref:" +"`This section ` documents this approach in more detail and " +"includes a working socket receiver which can be used as a starting point for " +"you to adapt in your own applications." msgstr "" #: ../../howto/logging-cookbook.rst:1281 msgid "" -"You could also write your own handler which uses " -"the :class:`~multiprocessing.Lock` class from the :mod:`multiprocessing` " -"module to serialize access to the file from your processes. The " -"stdlib :class:`FileHandler` and subclasses do not make use " -"of :mod:`multiprocessing`." +"You could also write your own handler which uses the :class:" +"`~multiprocessing.Lock` class from the :mod:`multiprocessing` module to " +"serialize access to the file from your processes. The stdlib :class:" +"`FileHandler` and subclasses do not make use of :mod:`multiprocessing`." msgstr "" #: ../../howto/logging-cookbook.rst:1288 @@ -1762,8 +1760,8 @@ msgid "" "def listener_configurer():\n" " root = logging.getLogger()\n" " h = logging.handlers.RotatingFileHandler('mptest.log', 'a', 300, 10)\n" -" f = logging.Formatter('%(asctime)s %(processName)-10s %(name)s %" -"(levelname)-8s %(message)s')\n" +" f = logging.Formatter('%(asctime)s %(processName)-10s %(name)s " +"%(levelname)-8s %(message)s')\n" " h.setFormatter(f)\n" " root.addHandler(h)\n" "\n" @@ -1895,8 +1893,8 @@ msgid "" " 'formatters': {\n" " 'detailed': {\n" " 'class': 'logging.Formatter',\n" -" 'format': '%(asctime)s %(name)-15s %(levelname)-8s %" -"(processName)-10s %(message)s'\n" +" 'format': '%(asctime)s %(name)-15s %(levelname)-8s " +"%(processName)-10s %(message)s'\n" " }\n" " },\n" " 'handlers': {\n" @@ -2110,9 +2108,9 @@ msgstr "" msgid "" "When logging was added to the Python standard library, the only way of " "formatting messages with variable content was to use the %-formatting " -"method. Since then, Python has gained two new formatting " -"approaches: :class:`string.Template` (added in Python 2.4) " -"and :meth:`str.format` (added in Python 2.6)." +"method. Since then, Python has gained two new formatting approaches: :class:" +"`string.Template` (added in Python 2.4) and :meth:`str.format` (added in " +"Python 2.6)." msgstr "" #: ../../howto/logging-cookbook.rst:1622 @@ -2123,9 +2121,9 @@ msgid "" "``'%'``, but other possible values are ``'{'`` and ``'$'``, which correspond " "to the other two formatting styles. Backwards compatibility is maintained by " "default (as you would expect), but by explicitly specifying a style " -"parameter, you get the ability to specify format strings which work " -"with :meth:`str.format` or :class:`string.Template`. Here's an example " -"console session to show the possibilities:" +"parameter, you get the ability to specify format strings which work with :" +"meth:`str.format` or :class:`string.Template`. Here's an example console " +"session to show the possibilities:" msgstr "" #: ../../howto/logging-cookbook.rst:1632 @@ -2175,12 +2173,12 @@ msgid "" "logging call (e.g. the ``exc_info`` keyword parameter to indicate that " "traceback information should be logged, or the ``extra`` keyword parameter " "to indicate additional contextual information to be added to the log). So " -"you cannot directly make logging calls using :meth:`str.format` " -"or :class:`string.Template` syntax, because internally the logging package " -"uses %-formatting to merge the format string and the variable arguments. " -"There would be no changing this while preserving backward compatibility, " -"since all logging calls which are out there in existing code will be using %-" -"format strings." +"you cannot directly make logging calls using :meth:`str.format` or :class:" +"`string.Template` syntax, because internally the logging package uses %-" +"formatting to merge the format string and the variable arguments. There " +"would be no changing this while preserving backward compatibility, since all " +"logging calls which are out there in existing code will be using %-format " +"strings." msgstr "" #: ../../howto/logging-cookbook.rst:1677 @@ -2333,10 +2331,10 @@ msgstr "" #: ../../howto/logging-cookbook.rst:1783 msgid "" "Every logging event is represented by a :class:`LogRecord` instance. When an " -"event is logged and not filtered out by a logger's level, " -"a :class:`LogRecord` is created, populated with information about the event " -"and then passed to the handlers for that logger (and its ancestors, up to " -"and including the logger where further propagation up the hierarchy is " +"event is logged and not filtered out by a logger's level, a :class:" +"`LogRecord` is created, populated with information about the event and then " +"passed to the handlers for that logger (and its ancestors, up to and " +"including the logger where further propagation up the hierarchy is " "disabled). Before Python 3.2, there were only two places where this creation " "was done:" msgstr "" @@ -2352,22 +2350,21 @@ msgid "" ":func:`makeLogRecord`, which is called with a dictionary containing " "attributes to be added to the LogRecord. This is typically invoked when a " "suitable dictionary has been received over the network (e.g. in pickle form " -"via a :class:`~handlers.SocketHandler`, or in JSON form via " -"an :class:`~handlers.HTTPHandler`)." +"via a :class:`~handlers.SocketHandler`, or in JSON form via an :class:" +"`~handlers.HTTPHandler`)." msgstr "" #: ../../howto/logging-cookbook.rst:1799 msgid "" -"This has usually meant that if you need to do anything special with " -"a :class:`LogRecord`, you've had to do one of the following." +"This has usually meant that if you need to do anything special with a :class:" +"`LogRecord`, you've had to do one of the following." msgstr "" #: ../../howto/logging-cookbook.rst:1802 msgid "" -"Create your own :class:`Logger` subclass, which " -"overrides :meth:`Logger.makeRecord`, and set it " -"using :func:`~logging.setLoggerClass` before any loggers that you care about " -"are instantiated." +"Create your own :class:`Logger` subclass, which overrides :meth:`Logger." +"makeRecord`, and set it using :func:`~logging.setLoggerClass` before any " +"loggers that you care about are instantiated." msgstr "" #: ../../howto/logging-cookbook.rst:1805 @@ -2412,10 +2409,10 @@ msgstr "" msgid "" "In Python 3.2 and later, :class:`~logging.LogRecord` creation is done " "through a factory, which you can specify. The factory is just a callable you " -"can set with :func:`~logging.setLogRecordFactory`, and interrogate " -"with :func:`~logging.getLogRecordFactory`. The factory is invoked with the " -"same signature as the :class:`~logging.LogRecord` constructor, " -"as :class:`LogRecord` is the default setting for the factory." +"can set with :func:`~logging.setLogRecordFactory`, and interrogate with :" +"func:`~logging.getLogRecordFactory`. The factory is invoked with the same " +"signature as the :class:`~logging.LogRecord` constructor, as :class:" +"`LogRecord` is the default setting for the factory." msgstr "" #: ../../howto/logging-cookbook.rst:1835 @@ -2535,10 +2532,10 @@ msgstr "" #: ../../howto/logging-cookbook.rst:1924 msgid "" "In a similar way to the above section, we can implement a listener and " -"handler using :pypi:`pynng`, which is a Python binding to `NNG `_, billed as a spiritual successor to ZeroMQ. The " -"following snippets illustrate -- you can test them in an environment which " -"has ``pynng`` installed. Just for variety, we present the listener first." +"handler using :pypi:`pynng`, which is a Python binding to `NNG `_, billed as a spiritual successor to ZeroMQ. The following " +"snippets illustrate -- you can test them in an environment which has " +"``pynng`` installed. Just for variety, we present the listener first." msgstr "" #: ../../howto/logging-cookbook.rst:1934 @@ -2636,8 +2633,8 @@ msgid "" "# Make sure the process ID is in the output\n" "logging.basicConfig(level=logging.DEBUG,\n" " handlers=[logging.StreamHandler(), handler],\n" -" format='%(levelname)-8s %(name)10s %(process)6s %" -"(message)s')\n" +" format='%(levelname)-8s %(name)10s %(process)6s " +"%(message)s')\n" "levels = (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR,\n" " logging.CRITICAL)\n" "logger_names = ('myapp', 'myapp.lib1', 'myapp.lib2')\n" @@ -2732,8 +2729,8 @@ msgstr "" msgid "" "Below is an example of a logging configuration dictionary - it's taken from " "the `documentation on the Django project `_. This dictionary is passed " -"to :func:`~config.dictConfig` to put the configuration into effect::" +"stable/topics/logging/#configuring-logging>`_. This dictionary is passed to :" +"func:`~config.dictConfig` to put the configuration into effect::" msgstr "" #: ../../howto/logging-cookbook.rst:2114 @@ -3114,13 +3111,13 @@ msgid "" " 'formatters': {\n" " 'detailed': {\n" " 'class': 'logging.Formatter',\n" -" 'format': '%(asctime)s %(name)-15s %(levelname)-8s %" -"(processName)-10s %(message)s'\n" +" 'format': '%(asctime)s %(name)-15s %(levelname)-8s " +"%(processName)-10s %(message)s'\n" " },\n" " 'simple': {\n" " 'class': 'logging.Formatter',\n" -" 'format': '%(name)-15s %(levelname)-8s %(processName)-10s %" -"(message)s'\n" +" 'format': '%(name)-15s %(levelname)-8s %(processName)-10s " +"%(message)s'\n" " }\n" " },\n" " 'handlers': {\n" @@ -3224,9 +3221,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2465 msgid "" -"Attach a :class:`~logging.Formatter` instance to " -"your :class:`~logging.handlers.SysLogHandler` instance, with a format string " -"such as::" +"Attach a :class:`~logging.Formatter` instance to your :class:`~logging." +"handlers.SysLogHandler` instance, with a format string such as::" msgstr "" #: ../../howto/logging-cookbook.rst:2469 @@ -3394,9 +3390,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2588 msgid "" -"You can then specify, in a logging configuration passed " -"to :func:`dictConfig`, that a logging handler be created by calling this " -"function::" +"You can then specify, in a logging configuration passed to :func:" +"`dictConfig`, that a logging handler be created by calling this function::" msgstr "" #: ../../howto/logging-cookbook.rst:2591 @@ -3500,11 +3495,11 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2678 msgid "" -"Note that this example uses Python 3.3 because that's " -"where :func:`shutil.chown` makes an appearance. This approach should work " -"with any Python version that supports :func:`dictConfig` - namely, Python " -"2.7, 3.2 or later. With pre-3.3 versions, you would need to implement the " -"actual ownership change using e.g. :func:`os.chown`." +"Note that this example uses Python 3.3 because that's where :func:`shutil." +"chown` makes an appearance. This approach should work with any Python " +"version that supports :func:`dictConfig` - namely, Python 2.7, 3.2 or later. " +"With pre-3.3 versions, you would need to implement the actual ownership " +"change using e.g. :func:`os.chown`." msgstr "" #: ../../howto/logging-cookbook.rst:2684 @@ -3570,12 +3565,11 @@ msgid "" "call (e.g. the ``exc_info`` keyword parameter to indicate that traceback " "information should be logged, or the ``extra`` keyword parameter to indicate " "additional contextual information to be added to the log). So you cannot " -"directly make logging calls using :meth:`str.format` " -"or :class:`string.Template` syntax, because internally the logging package " -"uses %-formatting to merge the format string and the variable arguments. " -"There would be no changing this while preserving backward compatibility, " -"since all logging calls which are out there in existing code will be using %-" -"format strings." +"directly make logging calls using :meth:`str.format` or :class:`string." +"Template` syntax, because internally the logging package uses %-formatting " +"to merge the format string and the variable arguments. There would be no " +"changing this while preserving backward compatibility, since all logging " +"calls which are out there in existing code will be using %-format strings." msgstr "" #: ../../howto/logging-cookbook.rst:2733 @@ -3615,8 +3609,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2757 msgid "" -"Refer to the reference documentation on :func:`setLogRecordFactory` " -"and :class:`LogRecord` for more information." +"Refer to the reference documentation on :func:`setLogRecordFactory` and :" +"class:`LogRecord` for more information." msgstr "" #: ../../howto/logging-cookbook.rst:2762 @@ -3626,11 +3620,11 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2764 msgid "" "There is another, perhaps simpler way that you can use {}- and $- formatting " -"to construct your individual log messages. You may recall " -"(from :ref:`arbitrary-object-messages`) that when logging you can use an " -"arbitrary object as a message format string, and that the logging package " -"will call :func:`str` on that object to get the actual format string. " -"Consider the following two classes::" +"to construct your individual log messages. You may recall (from :ref:" +"`arbitrary-object-messages`) that when logging you can use an arbitrary " +"object as a message format string, and that the logging package will call :" +"func:`str` on that object to get the actual format string. Consider the " +"following two classes::" msgstr "" #: ../../howto/logging-cookbook.rst:2789 @@ -3646,8 +3640,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:2797 msgid "" -"Examples of this approach are given below. Firstly, formatting " -"with :meth:`str.format`::" +"Examples of this approach are given below. Firstly, formatting with :meth:" +"`str.format`::" msgstr "" #: ../../howto/logging-cookbook.rst:2800 @@ -3699,13 +3693,13 @@ msgid "" "it might not be obvious at first glance how to do it (hence this recipe). " "Since :class:`~logging.Filter` is the only filter class included in the " "standard library, and it is unlikely to cater to many requirements (it's " -"only there as a base class), you will typically need to define your " -"own :class:`~logging.Filter` subclass with an " -"overridden :meth:`~logging.Filter.filter` method. To do this, specify the " -"``()`` key in the configuration dictionary for the filter, specifying a " -"callable which will be used to create the filter (a class is the most " -"obvious, but you can provide any callable which returns " -"a :class:`~logging.Filter` instance). Here is a complete example::" +"only there as a base class), you will typically need to define your own :" +"class:`~logging.Filter` subclass with an overridden :meth:`~logging.Filter." +"filter` method. To do this, specify the ``()`` key in the configuration " +"dictionary for the filter, specifying a callable which will be used to " +"create the filter (a class is the most obvious, but you can provide any " +"callable which returns a :class:`~logging.Filter` instance). Here is a " +"complete example::" msgstr "" #: ../../howto/logging-cookbook.rst:2845 @@ -3918,14 +3912,14 @@ msgid "" "rendered in an audible rather than a visible format. This is easy to do if " "you have text-to-speech (TTS) functionality available in your system, even " "if it doesn't have a Python binding. Most TTS systems have a command line " -"program you can run, and this can be invoked from a handler " -"using :mod:`subprocess`. It's assumed here that TTS command line programs " -"won't expect to interact with users or take a long time to complete, and " -"that the frequency of logged messages will be not so high as to swamp the " -"user with messages, and that it's acceptable to have the messages spoken one " -"at a time rather than concurrently, The example implementation below waits " -"for one message to be spoken before the next is processed, and this might " -"cause other handlers to be kept waiting. Here is a short example showing the " +"program you can run, and this can be invoked from a handler using :mod:" +"`subprocess`. It's assumed here that TTS command line programs won't expect " +"to interact with users or take a long time to complete, and that the " +"frequency of logged messages will be not so high as to swamp the user with " +"messages, and that it's acceptable to have the messages spoken one at a time " +"rather than concurrently, The example implementation below waits for one " +"message to be spoken before the next is processed, and this might cause " +"other handlers to be kept waiting. Here is a short example showing the " "approach, which assumes that the ``espeak`` TTS package is available::" msgstr "" @@ -4017,9 +4011,9 @@ msgid "" "parameter and attaches a memory handler for the duration of the call to the " "decorated function. The decorator can be additionally parameterised using a " "target handler, a level at which flushing should occur, and a capacity for " -"the buffer (number of records buffered). These default to " -"a :class:`~logging.StreamHandler` which writes to ``sys.stderr``, " -"``logging.ERROR`` and ``100`` respectively." +"the buffer (number of records buffered). These default to a :class:`~logging." +"StreamHandler` which writes to ``sys.stderr``, ``logging.ERROR`` and ``100`` " +"respectively." msgstr "" #: ../../howto/logging-cookbook.rst:3059 @@ -4150,13 +4144,12 @@ msgstr "" #: ../../howto/logging-cookbook.rst:3168 msgid "" "To illustrate how you can send log messages via email, so that a set number " -"of messages are sent per email, you can " -"subclass :class:`~logging.handlers.BufferingHandler`. In the following " -"example, which you can adapt to suit your specific needs, a simple test " -"harness is provided which allows you to run the script with command line " -"arguments specifying what you typically need to send things via SMTP. (Run " -"the downloaded script with the ``-h`` argument to see the required and " -"optional arguments.)" +"of messages are sent per email, you can subclass :class:`~logging.handlers." +"BufferingHandler`. In the following example, which you can adapt to suit " +"your specific needs, a simple test harness is provided which allows you to " +"run the script with command line arguments specifying what you typically " +"need to send things via SMTP. (Run the downloaded script with the ``-h`` " +"argument to see the required and optional arguments.)" msgstr "" #: ../../howto/logging-cookbook.rst:3176 @@ -4179,8 +4172,8 @@ msgid "" " toaddrs = [toaddrs]\n" " self.toaddrs = toaddrs\n" " self.subject = subject\n" -" self.setFormatter(logging.Formatter(\"%(asctime)s %(levelname)-5s %" -"(message)s\"))\n" +" self.setFormatter(logging.Formatter(\"%(asctime)s %(levelname)-5s " +"%(message)s\"))\n" "\n" " def flush(self):\n" " if len(self.buffer) > 0:\n" @@ -4256,10 +4249,10 @@ msgstr "" #: ../../howto/logging-cookbook.rst:3259 msgid "" -"and you can then use the ``UTCFormatter`` in your code instead " -"of :class:`~logging.Formatter`. If you want to do that via configuration, " -"you can use the :func:`~logging.config.dictConfig` API with an approach " -"illustrated by the following complete example::" +"and you can then use the ``UTCFormatter`` in your code instead of :class:" +"`~logging.Formatter`. If you want to do that via configuration, you can use " +"the :func:`~logging.config.dictConfig` API with an approach illustrated by " +"the following complete example::" msgstr "" #: ../../howto/logging-cookbook.rst:3264 @@ -4491,8 +4484,8 @@ msgid "" "Suppose we have a command-line application whose job is to stop, start or " "restart some services. This could be organised for the purposes of " "illustration as a file ``app.py`` that is the main script for the " -"application, with individual commands implemented in ``start.py``, " -"``stop.py`` and ``restart.py``. Suppose further that we want to control the " +"application, with individual commands implemented in ``start.py``, ``stop." +"py`` and ``restart.py``. Suppose further that we want to control the " "verbosity of the application via a command-line argument, defaulting to " "``logging.INFO``. Here's one way that ``app.py`` could be written::" msgstr "" @@ -4532,8 +4525,8 @@ msgid "" " mod = importlib.import_module(options.command)\n" " cmd = getattr(mod, 'command')\n" " except (ImportError, AttributeError):\n" -" print('Unable to find the code for command \\'%s\\'' % " -"options.command)\n" +" print('Unable to find the code for command \\'%s\\'' % options." +"command)\n" " return 1\n" " # Could get fancy here and load configuration from file or dictionary\n" " logging.basicConfig(level=options.log_level,\n" @@ -4685,8 +4678,8 @@ msgstr "" msgid "" "A question that comes up from time to time is about how to log to a GUI " "application. The `Qt `_ framework is a popular cross-" -"platform UI framework with Python bindings using :pypi:`PySide2` " -"or :pypi:`PyQt5` libraries." +"platform UI framework with Python bindings using :pypi:`PySide2` or :pypi:" +"`PyQt5` libraries." msgstr "" #: ../../howto/logging-cookbook.rst:3591 @@ -4897,8 +4890,8 @@ msgid "" " self.start_thread()\n" " self.work_button.clicked.connect(self.worker.start)\n" " # Once started, the button should be disabled\n" -" self.work_button.clicked.connect(lambda : " -"self.work_button.setEnabled(False))\n" +" self.work_button.clicked.connect(lambda : self.work_button." +"setEnabled(False))\n" "\n" " def start_thread(self):\n" " self.worker = Worker()\n" @@ -4975,9 +4968,8 @@ msgid "" "default to use the older :rfc:`3164`, which hails from 2001. When " "``logging`` was added to Python in 2003, it supported the earlier (and only " "existing) protocol at the time. Since RFC5424 came out, as there has not " -"been widespread deployment of it in syslog servers, " -"the :class:`~logging.handlers.SysLogHandler` functionality has not been " -"updated." +"been widespread deployment of it in syslog servers, the :class:`~logging." +"handlers.SysLogHandler` functionality has not been updated." msgstr "" #: ../../howto/logging-cookbook.rst:3848 @@ -5007,8 +4999,8 @@ msgid "" "\n" " def format(self, record):\n" " version = 1\n" -" asctime = " -"datetime.datetime.fromtimestamp(record.created).isoformat()\n" +" asctime = datetime.datetime.fromtimestamp(record.created)." +"isoformat()\n" " m = self.tz_offset.match(time.strftime('%z'))\n" " has_offset = False\n" " if m and time.timezone:\n" @@ -5146,8 +5138,8 @@ msgstr "" #: ../../howto/logging-cookbook.rst:3977 msgid "" -"You could also use ``LoggerWriter`` to redirect ``sys.stdout`` and " -"``sys.stderr`` by doing something like this:" +"You could also use ``LoggerWriter`` to redirect ``sys.stdout`` and ``sys." +"stderr`` by doing something like this:" msgstr "" #: ../../howto/logging-cookbook.rst:3980 @@ -5165,9 +5157,9 @@ msgstr "" #: ../../howto/logging-cookbook.rst:3987 msgid "" "You should do this *after* configuring logging for your needs. In the above " -"example, the :func:`~logging.basicConfig` call does this (using the " -"``sys.stderr`` value *before* it is overwritten by a ``LoggerWriter`` " -"instance). Then, you'd get this kind of result:" +"example, the :func:`~logging.basicConfig` call does this (using the ``sys." +"stderr`` value *before* it is overwritten by a ``LoggerWriter`` instance). " +"Then, you'd get this kind of result:" msgstr "" #: ../../howto/logging-cookbook.rst:3992 @@ -5186,9 +5178,9 @@ msgstr "" #: ../../howto/logging-cookbook.rst:4000 msgid "" -"Of course, the examples above show output according to the format used " -"by :func:`~logging.basicConfig`, but you can use a different formatter when " -"you configure logging." +"Of course, the examples above show output according to the format used by :" +"func:`~logging.basicConfig`, but you can use a different formatter when you " +"configure logging." msgstr "" #: ../../howto/logging-cookbook.rst:4004 @@ -5299,11 +5291,86 @@ msgstr "" "WARNING:demo: 1/0\n" "WARNING:demo:ZeroDivisionError: division by zero" -#: ../../howto/logging-cookbook.rst:4072 +#: ../../howto/logging-cookbook.rst:4069 +msgid "How to uniformly handle newlines in logging output" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4071 +msgid "" +"Usually, messages that are logged (say to console or file) consist of a " +"single line of text. However, sometimes there is a need to handle messages " +"with multiple lines - whether because a logging format string contains " +"newlines, or logged data contains newlines. If you want to handle such " +"messages uniformly, so that each line in the logged message appears " +"uniformly formatted as if it was logged separately, you can do this using a " +"handler mixin, as in the following snippet:" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4079 +msgid "" +"# Assume this is in a module mymixins.py\n" +"import copy\n" +"\n" +"class MultilineMixin:\n" +" def emit(self, record):\n" +" s = record.getMessage()\n" +" if '\\n' not in s:\n" +" super().emit(record)\n" +" else:\n" +" lines = s.splitlines()\n" +" rec = copy.copy(record)\n" +" rec.args = None\n" +" for line in lines:\n" +" rec.msg = line\n" +" super().emit(rec)" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4097 +msgid "You can use the mixin as in the following script:" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4099 +msgid "" +"import logging\n" +"\n" +"from mymixins import MultilineMixin\n" +"\n" +"logger = logging.getLogger(__name__)\n" +"\n" +"class StreamHandler(MultilineMixin, logging.StreamHandler):\n" +" pass\n" +"\n" +"if __name__ == '__main__':\n" +" logging.basicConfig(level=logging.DEBUG, format='%(asctime)s " +"%(levelname)-9s %(message)s',\n" +" handlers = [StreamHandler()])\n" +" logger.debug('Single line')\n" +" logger.debug('Multiple lines:\\nfool me once ...')\n" +" logger.debug('Another single line')\n" +" logger.debug('Multiple lines:\\n%s', 'fool me ...\\ncan\\'t get fooled " +"again')" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4118 +msgid "The script, when run, prints something like:" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4120 +msgid "" +"2025-07-02 13:54:47,234 DEBUG Single line\n" +"2025-07-02 13:54:47,234 DEBUG Multiple lines:\n" +"2025-07-02 13:54:47,234 DEBUG fool me once ...\n" +"2025-07-02 13:54:47,234 DEBUG Another single line\n" +"2025-07-02 13:54:47,234 DEBUG Multiple lines:\n" +"2025-07-02 13:54:47,234 DEBUG fool me ...\n" +"2025-07-02 13:54:47,234 DEBUG can't get fooled again" +msgstr "" + +#: ../../howto/logging-cookbook.rst:4134 msgid "Patterns to avoid" msgstr "" -#: ../../howto/logging-cookbook.rst:4074 +#: ../../howto/logging-cookbook.rst:4136 msgid "" "Although the preceding sections have described ways of doing things you " "might need to do or deal with, it is worth mentioning some usage patterns " @@ -5311,11 +5378,11 @@ msgid "" "The following sections are in no particular order." msgstr "" -#: ../../howto/logging-cookbook.rst:4080 +#: ../../howto/logging-cookbook.rst:4142 msgid "Opening the same log file multiple times" msgstr "" -#: ../../howto/logging-cookbook.rst:4082 +#: ../../howto/logging-cookbook.rst:4144 msgid "" "On Windows, you will generally not be able to open the same file multiple " "times as this will lead to a \"file is in use by another process\" error. " @@ -5323,32 +5390,32 @@ msgid "" "file multiple times. This could be done accidentally, for example by:" msgstr "" -#: ../../howto/logging-cookbook.rst:4087 +#: ../../howto/logging-cookbook.rst:4149 msgid "" "Adding a file handler more than once which references the same file (e.g. by " "a copy/paste/forget-to-change error)." msgstr "" -#: ../../howto/logging-cookbook.rst:4090 +#: ../../howto/logging-cookbook.rst:4152 msgid "" "Opening two files that look different, as they have different names, but are " "the same because one is a symbolic link to the other." msgstr "" -#: ../../howto/logging-cookbook.rst:4093 +#: ../../howto/logging-cookbook.rst:4155 msgid "" "Forking a process, following which both parent and child have a reference to " "the same file. This might be through use of the :mod:`multiprocessing` " "module, for example." msgstr "" -#: ../../howto/logging-cookbook.rst:4097 +#: ../../howto/logging-cookbook.rst:4159 msgid "" "Opening a file multiple times might *appear* to work most of the time, but " "can lead to a number of problems in practice:" msgstr "" -#: ../../howto/logging-cookbook.rst:4100 +#: ../../howto/logging-cookbook.rst:4162 msgid "" "Logging output can be garbled because multiple threads or processes try to " "write to the same file. Although logging guards against concurrent use of " @@ -5357,7 +5424,7 @@ msgid "" "different handler instances which happen to point to the same file." msgstr "" -#: ../../howto/logging-cookbook.rst:4106 +#: ../../howto/logging-cookbook.rst:4168 msgid "" "An attempt to delete a file (e.g. during file rotation) silently fails, " "because there is another reference pointing to it. This can lead to " @@ -5367,17 +5434,17 @@ msgid "" "being supposedly in place." msgstr "" -#: ../../howto/logging-cookbook.rst:4113 +#: ../../howto/logging-cookbook.rst:4175 msgid "" "Use the techniques outlined in :ref:`multiple-processes` to circumvent such " "issues." msgstr "" -#: ../../howto/logging-cookbook.rst:4117 +#: ../../howto/logging-cookbook.rst:4179 msgid "Using loggers as attributes in a class or passing them as parameters" msgstr "" -#: ../../howto/logging-cookbook.rst:4119 +#: ../../howto/logging-cookbook.rst:4181 msgid "" "While there might be unusual cases where you'll need to do this, in general " "there is no point because loggers are singletons. Code can always access a " @@ -5388,13 +5455,13 @@ msgid "" "module (and not the class) is the unit of software decomposition." msgstr "" -#: ../../howto/logging-cookbook.rst:4128 +#: ../../howto/logging-cookbook.rst:4190 msgid "" "Adding handlers other than :class:`~logging.NullHandler` to a logger in a " "library" msgstr "" -#: ../../howto/logging-cookbook.rst:4130 +#: ../../howto/logging-cookbook.rst:4192 msgid "" "Configuring logging by adding handlers, formatters and filters is the " "responsibility of the application developer, not the library developer. If " @@ -5402,11 +5469,11 @@ msgid "" "your loggers other than a :class:`~logging.NullHandler` instance." msgstr "" -#: ../../howto/logging-cookbook.rst:4136 +#: ../../howto/logging-cookbook.rst:4198 msgid "Creating a lot of loggers" msgstr "" -#: ../../howto/logging-cookbook.rst:4138 +#: ../../howto/logging-cookbook.rst:4200 msgid "" "Loggers are singletons that are never freed during a script execution, and " "so creating lots of loggers will use up memory which can't then be freed. " @@ -5417,38 +5484,38 @@ msgid "" "occasionally slightly more fine-grained than that)." msgstr "" -#: ../../howto/logging-cookbook.rst:4149 +#: ../../howto/logging-cookbook.rst:4211 msgid "Other resources" msgstr "其他資源" -#: ../../howto/logging-cookbook.rst:4153 +#: ../../howto/logging-cookbook.rst:4215 msgid "Module :mod:`logging`" msgstr ":mod:`logging` 模組" -#: ../../howto/logging-cookbook.rst:4154 +#: ../../howto/logging-cookbook.rst:4216 msgid "API reference for the logging module." msgstr "" -#: ../../howto/logging-cookbook.rst:4156 +#: ../../howto/logging-cookbook.rst:4218 msgid "Module :mod:`logging.config`" msgstr ":mod:`logging.config` 模組" -#: ../../howto/logging-cookbook.rst:4157 +#: ../../howto/logging-cookbook.rst:4219 msgid "Configuration API for the logging module." msgstr "" -#: ../../howto/logging-cookbook.rst:4159 +#: ../../howto/logging-cookbook.rst:4221 msgid "Module :mod:`logging.handlers`" msgstr ":mod:`logging.handlers` 模組" -#: ../../howto/logging-cookbook.rst:4160 +#: ../../howto/logging-cookbook.rst:4222 msgid "Useful handlers included with the logging module." msgstr "" -#: ../../howto/logging-cookbook.rst:4162 +#: ../../howto/logging-cookbook.rst:4224 msgid ":ref:`Basic Tutorial `" msgstr ":ref:`基礎教學 `" -#: ../../howto/logging-cookbook.rst:4164 +#: ../../howto/logging-cookbook.rst:4226 msgid ":ref:`Advanced Tutorial `" msgstr ":ref:`進階教學 `" diff --git a/library/pyexpat.po b/library/pyexpat.po index b5d6eca3f3..0f59845ba1 100644 --- a/library/pyexpat.po +++ b/library/pyexpat.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-03 11:11+0800\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:08+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -23,12 +23,11 @@ msgstr ":mod:`!xml.parsers.expat` --- 使用 Expat 進行快速 XML 剖析" #: ../../library/pyexpat.rst:21 msgid "" -"The :mod:`pyexpat` module is not secure against maliciously constructed " -"data. If you need to parse untrusted or unauthenticated data see :ref:`xml-" -"vulnerabilities`." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -#: ../../library/pyexpat.rst:28 +#: ../../library/pyexpat.rst:27 msgid "" "The :mod:`xml.parsers.expat` module is a Python interface to the Expat non-" "validating XML parser. The module provides a single extension type, :class:" @@ -39,39 +38,39 @@ msgid "" "in the XML document." msgstr "" -#: ../../library/pyexpat.rst:38 +#: ../../library/pyexpat.rst:37 msgid "" "This module uses the :mod:`pyexpat` module to provide access to the Expat " "parser. Direct use of the :mod:`pyexpat` module is deprecated." msgstr "" -#: ../../library/pyexpat.rst:41 +#: ../../library/pyexpat.rst:40 msgid "This module provides one exception and one type object:" msgstr "" -#: ../../library/pyexpat.rst:46 +#: ../../library/pyexpat.rst:45 msgid "" "The exception raised when Expat reports an error. See section :ref:" "`expaterror-objects` for more information on interpreting Expat errors." msgstr "" -#: ../../library/pyexpat.rst:52 +#: ../../library/pyexpat.rst:51 msgid "Alias for :exc:`ExpatError`." msgstr ":exc:`ExpatError` 的別名。" -#: ../../library/pyexpat.rst:57 +#: ../../library/pyexpat.rst:56 msgid "The type of the return values from the :func:`ParserCreate` function." msgstr "" -#: ../../library/pyexpat.rst:59 +#: ../../library/pyexpat.rst:58 msgid "The :mod:`xml.parsers.expat` module contains two functions:" msgstr "" -#: ../../library/pyexpat.rst:64 +#: ../../library/pyexpat.rst:63 msgid "Returns an explanatory string for a given error number *errno*." msgstr "" -#: ../../library/pyexpat.rst:69 +#: ../../library/pyexpat.rst:68 msgid "" "Creates and returns a new :class:`xmlparser` object. *encoding*, if " "specified, must be a string naming the encoding used by the XML data. " @@ -81,7 +80,7 @@ msgid "" "implicit or explicit encoding of the document." msgstr "" -#: ../../library/pyexpat.rst:76 +#: ../../library/pyexpat.rst:75 msgid "" "Expat can optionally do XML namespace processing for you, enabled by " "providing a value for *namespace_separator*. The value must be a one-" @@ -96,13 +95,13 @@ msgid "" "concatenated without any separator." msgstr "" -#: ../../library/pyexpat.rst:88 +#: ../../library/pyexpat.rst:87 msgid "" "For example, if *namespace_separator* is set to a space character (``' '``) " "and the following document is parsed:" msgstr "" -#: ../../library/pyexpat.rst:91 +#: ../../library/pyexpat.rst:90 msgid "" "\n" "\n" "" -#: ../../library/pyexpat.rst:100 +#: ../../library/pyexpat.rst:99 msgid "" ":attr:`StartElementHandler` will receive the following strings for each " "element::" msgstr "" -#: ../../library/pyexpat.rst:103 +#: ../../library/pyexpat.rst:102 msgid "" "http://default-namespace.org/ root\n" "http://www.python.org/ns/ elem1\n" @@ -134,7 +133,7 @@ msgstr "" "http://www.python.org/ns/ elem1\n" "elem2" -#: ../../library/pyexpat.rst:107 +#: ../../library/pyexpat.rst:106 msgid "" "Due to limitations in the ``Expat`` library used by :mod:`pyexpat`, the :" "class:`xmlparser` instance returned can only be used to parse a single XML " @@ -142,23 +141,23 @@ msgid "" "instances." msgstr "" -#: ../../library/pyexpat.rst:115 +#: ../../library/pyexpat.rst:114 msgid "`The Expat XML Parser `_" msgstr "" -#: ../../library/pyexpat.rst:116 +#: ../../library/pyexpat.rst:115 msgid "Home page of the Expat project." msgstr "" -#: ../../library/pyexpat.rst:122 +#: ../../library/pyexpat.rst:121 msgid "XMLParser Objects" msgstr "XMLParser 物件" -#: ../../library/pyexpat.rst:124 +#: ../../library/pyexpat.rst:123 msgid ":class:`xmlparser` objects have the following methods:" msgstr "" -#: ../../library/pyexpat.rst:129 +#: ../../library/pyexpat.rst:128 msgid "" "Parses the contents of the string *data*, calling the appropriate handler " "functions to process the parsed data. *isfinal* must be true on the final " @@ -167,14 +166,14 @@ msgid "" "time." msgstr "" -#: ../../library/pyexpat.rst:138 +#: ../../library/pyexpat.rst:137 msgid "" "Parse XML data reading from the object *file*. *file* only needs to provide " "the ``read(nbytes)`` method, returning the empty string when there's no more " "data." msgstr "" -#: ../../library/pyexpat.rst:145 +#: ../../library/pyexpat.rst:144 msgid "" "Sets the base to be used for resolving relative URIs in system identifiers " "in declarations. Resolving relative identifiers is left to the application: " @@ -183,20 +182,20 @@ msgid "" "`UnparsedEntityDeclHandler` functions." msgstr "" -#: ../../library/pyexpat.rst:154 +#: ../../library/pyexpat.rst:153 msgid "" "Returns a string containing the base set by a previous call to :meth:" "`SetBase`, or ``None`` if :meth:`SetBase` hasn't been called." msgstr "" -#: ../../library/pyexpat.rst:160 +#: ../../library/pyexpat.rst:159 msgid "" "Returns the input data that generated the current event as a string. The " "data is in the encoding of the entity which contains the text. When called " "while an event handler is not active, the return value is ``None``." msgstr "" -#: ../../library/pyexpat.rst:167 +#: ../../library/pyexpat.rst:166 msgid "" "Create a \"child\" parser which can be used to parse an external parsed " "entity referred to by content parsed by the parent parser. The *context* " @@ -206,7 +205,7 @@ msgid "" "`specified_attributes` set to the values of this parser." msgstr "" -#: ../../library/pyexpat.rst:176 +#: ../../library/pyexpat.rst:175 msgid "" "Control parsing of parameter entities (including the external DTD subset). " "Possible *flag* values are :const:`XML_PARAM_ENTITY_PARSING_NEVER`, :const:" @@ -215,7 +214,7 @@ msgid "" "successful." msgstr "" -#: ../../library/pyexpat.rst:184 +#: ../../library/pyexpat.rst:183 msgid "" "Calling this with a true value for *flag* (the default) will cause Expat to " "call the :attr:`ExternalEntityRefHandler` with :const:`None` for all " @@ -225,13 +224,13 @@ msgid "" "`EndDoctypeDeclHandler` will not be called." msgstr "" -#: ../../library/pyexpat.rst:191 +#: ../../library/pyexpat.rst:190 msgid "" "Passing a false value for *flag* will cancel a previous call that passed a " "true value, but otherwise has no effect." msgstr "" -#: ../../library/pyexpat.rst:194 +#: ../../library/pyexpat.rst:193 msgid "" "This method can only be called before the :meth:`Parse` or :meth:`ParseFile` " "methods are called; calling it after either of those have been called " @@ -239,14 +238,14 @@ msgid "" "``errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]``." msgstr "" -#: ../../library/pyexpat.rst:203 +#: ../../library/pyexpat.rst:202 msgid "" "Calling ``SetReparseDeferralEnabled(False)`` has security implications, as " "detailed below; please make sure to understand these consequences prior to " "using the ``SetReparseDeferralEnabled`` method." msgstr "" -#: ../../library/pyexpat.rst:207 +#: ../../library/pyexpat.rst:206 msgid "" "Expat 2.6.0 introduced a security mechanism called \"reparse deferral\" " "where instead of causing denial of service through quadratic runtime from " @@ -261,7 +260,7 @@ msgid "" "``SetReparseDeferralEnabled(True)`` allows re-enabling reparse deferral." msgstr "" -#: ../../library/pyexpat.rst:220 +#: ../../library/pyexpat.rst:219 msgid "" "Note that :meth:`SetReparseDeferralEnabled` has been backported to some " "prior releases of CPython as a security fix. Check for availability of :" @@ -269,24 +268,24 @@ msgid "" "running across a variety of Python versions." msgstr "" -#: ../../library/pyexpat.rst:229 +#: ../../library/pyexpat.rst:228 msgid "" "Returns whether reparse deferral is currently enabled for the given Expat " "parser instance." msgstr "" -#: ../../library/pyexpat.rst:235 +#: ../../library/pyexpat.rst:234 msgid ":class:`xmlparser` objects have the following attributes:" msgstr ":class:`xmlparser` 物件擁有以下屬性:" -#: ../../library/pyexpat.rst:240 +#: ../../library/pyexpat.rst:239 msgid "" "The size of the buffer used when :attr:`buffer_text` is true. A new buffer " "size can be set by assigning a new integer value to this attribute. When the " "size is changed, the buffer will be flushed." msgstr "" -#: ../../library/pyexpat.rst:248 +#: ../../library/pyexpat.rst:247 msgid "" "Setting this to true causes the :class:`xmlparser` object to buffer textual " "content returned by Expat to avoid multiple calls to the :meth:" @@ -297,14 +296,14 @@ msgid "" "newlines may be chunked too." msgstr "" -#: ../../library/pyexpat.rst:259 +#: ../../library/pyexpat.rst:258 msgid "" "If :attr:`buffer_text` is enabled, the number of bytes stored in the buffer. " "These bytes represent UTF-8 encoded text. This attribute has no meaningful " "interpretation when :attr:`buffer_text` is false." msgstr "" -#: ../../library/pyexpat.rst:266 +#: ../../library/pyexpat.rst:265 msgid "" "Setting this attribute to a non-zero integer causes the attributes to be " "reported as a list rather than a dictionary. The attributes are presented " @@ -314,7 +313,7 @@ msgid "" "is false; it may be changed at any time." msgstr "" -#: ../../library/pyexpat.rst:276 +#: ../../library/pyexpat.rst:275 msgid "" "If set to a non-zero integer, the parser will report only those attributes " "which were specified in the document instance and not those which were " @@ -325,7 +324,7 @@ msgid "" "time." msgstr "" -#: ../../library/pyexpat.rst:284 +#: ../../library/pyexpat.rst:283 msgid "" "The following attributes contain values relating to the most recent error " "encountered by an :class:`xmlparser` object, and will only have correct " @@ -333,26 +332,26 @@ msgid "" "`xml.parsers.expat.ExpatError` exception." msgstr "" -#: ../../library/pyexpat.rst:292 +#: ../../library/pyexpat.rst:291 msgid "Byte index at which an error occurred." msgstr "" -#: ../../library/pyexpat.rst:297 +#: ../../library/pyexpat.rst:296 msgid "" "Numeric code specifying the problem. This value can be passed to the :func:" "`ErrorString` function, or compared to one of the constants defined in the " "``errors`` object." msgstr "" -#: ../../library/pyexpat.rst:304 +#: ../../library/pyexpat.rst:303 msgid "Column number at which an error occurred." msgstr "" -#: ../../library/pyexpat.rst:309 +#: ../../library/pyexpat.rst:308 msgid "Line number at which an error occurred." msgstr "" -#: ../../library/pyexpat.rst:311 +#: ../../library/pyexpat.rst:310 msgid "" "The following attributes contain values relating to the current parse " "location in an :class:`xmlparser` object. During a callback reporting a " @@ -362,19 +361,19 @@ msgid "" "whether there was an associated callback)." msgstr "" -#: ../../library/pyexpat.rst:321 +#: ../../library/pyexpat.rst:320 msgid "Current byte index in the parser input." msgstr "" -#: ../../library/pyexpat.rst:326 +#: ../../library/pyexpat.rst:325 msgid "Current column number in the parser input." msgstr "" -#: ../../library/pyexpat.rst:331 +#: ../../library/pyexpat.rst:330 msgid "Current line number in the parser input." msgstr "" -#: ../../library/pyexpat.rst:333 +#: ../../library/pyexpat.rst:332 msgid "" "Here is the list of handlers that can be set. To set a handler on an :class:" "`xmlparser` object *o*, use ``o.handlername = func``. *handlername* must be " @@ -383,7 +382,7 @@ msgid "" "unless otherwise stated." msgstr "" -#: ../../library/pyexpat.rst:342 +#: ../../library/pyexpat.rst:341 msgid "" "Called when the XML declaration is parsed. The XML declaration is the " "(optional) declaration of the applicable version of the XML recommendation, " @@ -394,7 +393,7 @@ msgid "" "only available with Expat version 1.95.0 or newer." msgstr "" -#: ../../library/pyexpat.rst:353 +#: ../../library/pyexpat.rst:352 msgid "" "Called when Expat begins parsing the document type declaration (``'``." msgstr "" -#: ../../library/pyexpat.rst:470 +#: ../../library/pyexpat.rst:469 msgid "" "Called at the start of a CDATA section. This and :attr:" "`EndCdataSectionHandler` are needed to be able to identify the syntactical " "start and end for CDATA sections." msgstr "" -#: ../../library/pyexpat.rst:477 +#: ../../library/pyexpat.rst:476 msgid "Called at the end of a CDATA section." msgstr "" -#: ../../library/pyexpat.rst:482 +#: ../../library/pyexpat.rst:481 msgid "" "Called for any characters in the XML document for which no applicable " "handler has been specified. This means characters that are part of a " @@ -528,14 +527,14 @@ msgid "" "supplied." msgstr "" -#: ../../library/pyexpat.rst:489 +#: ../../library/pyexpat.rst:488 msgid "" "This is the same as the :func:`DefaultHandler`, but doesn't inhibit " "expansion of internal entities. The entity reference will not be passed to " "the default handler." msgstr "" -#: ../../library/pyexpat.rst:496 +#: ../../library/pyexpat.rst:495 msgid "" "Called if the XML document hasn't been declared as being a standalone " "document. This happens when there is an external subset or a reference to a " @@ -545,7 +544,7 @@ msgid "" "set, no exception is raised by the parser for this condition." msgstr "" -#: ../../library/pyexpat.rst:506 +#: ../../library/pyexpat.rst:505 msgid "" "Called for references to external entities. *base* is the current base, as " "set by a previous call to :meth:`SetBase`. The public and system " @@ -554,7 +553,7 @@ msgid "" "is opaque and should only be used as described below." msgstr "" -#: ../../library/pyexpat.rst:512 +#: ../../library/pyexpat.rst:511 msgid "" "For external entities to be parsed, this handler must be implemented. It is " "responsible for creating the sub-parser using " @@ -564,28 +563,28 @@ msgid "" "`XML_ERROR_EXTERNAL_ENTITY_HANDLING` error, otherwise parsing will continue." msgstr "" -#: ../../library/pyexpat.rst:520 +#: ../../library/pyexpat.rst:519 msgid "" "If this handler is not provided, external entities are reported by the :attr:" "`DefaultHandler` callback, if provided." msgstr "" -#: ../../library/pyexpat.rst:527 +#: ../../library/pyexpat.rst:526 msgid "ExpatError Exceptions" msgstr "ExpatError 例外" -#: ../../library/pyexpat.rst:532 +#: ../../library/pyexpat.rst:531 msgid ":exc:`ExpatError` exceptions have a number of interesting attributes:" msgstr "" -#: ../../library/pyexpat.rst:537 +#: ../../library/pyexpat.rst:536 msgid "" "Expat's internal error number for the specific error. The :data:`errors." "messages ` dictionary maps these error " "numbers to Expat's error messages. For example::" msgstr "" -#: ../../library/pyexpat.rst:541 +#: ../../library/pyexpat.rst:540 msgid "" "from xml.parsers.expat import ParserCreate, ExpatError, errors\n" "\n" @@ -603,36 +602,36 @@ msgstr "" "except ExpatError as err:\n" " print(\"Error:\", errors.messages[err.code])" -#: ../../library/pyexpat.rst:549 +#: ../../library/pyexpat.rst:548 msgid "" "The :mod:`~xml.parsers.expat.errors` module also provides error message " "constants and a dictionary :data:`~xml.parsers.expat.errors.codes` mapping " "these messages back to the error codes, see below." msgstr "" -#: ../../library/pyexpat.rst:556 +#: ../../library/pyexpat.rst:555 msgid "" "Line number on which the error was detected. The first line is numbered " "``1``." msgstr "" -#: ../../library/pyexpat.rst:561 +#: ../../library/pyexpat.rst:560 msgid "" "Character offset into the line where the error occurred. The first column " "is numbered ``0``." msgstr "" -#: ../../library/pyexpat.rst:568 +#: ../../library/pyexpat.rst:567 msgid "Example" msgstr "範例" -#: ../../library/pyexpat.rst:570 +#: ../../library/pyexpat.rst:569 msgid "" "The following program defines three handlers that just print out their " "arguments. ::" msgstr "" -#: ../../library/pyexpat.rst:573 +#: ../../library/pyexpat.rst:572 msgid "" "import xml.parsers.expat\n" "\n" @@ -676,11 +675,11 @@ msgstr "" "More text\n" "\"\"\", 1)" -#: ../../library/pyexpat.rst:594 +#: ../../library/pyexpat.rst:593 msgid "The output from this program is::" msgstr "" -#: ../../library/pyexpat.rst:596 +#: ../../library/pyexpat.rst:595 msgid "" "Start element: parent {'id': 'top'}\n" "Start element: child1 {'name': 'paul'}\n" @@ -704,76 +703,76 @@ msgstr "" "Character data: '\\n'\n" "End element: parent" -#: ../../library/pyexpat.rst:611 +#: ../../library/pyexpat.rst:610 msgid "Content Model Descriptions" msgstr "" -#: ../../library/pyexpat.rst:617 +#: ../../library/pyexpat.rst:616 msgid "" "Content models are described using nested tuples. Each tuple contains four " "values: the type, the quantifier, the name, and a tuple of children. " "Children are simply additional content model descriptions." msgstr "" -#: ../../library/pyexpat.rst:621 +#: ../../library/pyexpat.rst:620 msgid "" "The values of the first two fields are constants defined in the :mod:`xml." "parsers.expat.model` module. These constants can be collected in two " "groups: the model type group and the quantifier group." msgstr "" -#: ../../library/pyexpat.rst:625 +#: ../../library/pyexpat.rst:624 msgid "The constants in the model type group are:" msgstr "" -#: ../../library/pyexpat.rst:631 +#: ../../library/pyexpat.rst:630 msgid "" "The element named by the model name was declared to have a content model of " "``ANY``." msgstr "" -#: ../../library/pyexpat.rst:638 +#: ../../library/pyexpat.rst:637 msgid "" "The named element allows a choice from a number of options; this is used for " "content models such as ``(A | B | C)``." msgstr "" -#: ../../library/pyexpat.rst:645 +#: ../../library/pyexpat.rst:644 msgid "Elements which are declared to be ``EMPTY`` have this model type." msgstr "" -#: ../../library/pyexpat.rst:659 +#: ../../library/pyexpat.rst:658 msgid "" "Models which represent a series of models which follow one after the other " "are indicated with this model type. This is used for models such as ``(A, " "B, C)``." msgstr "" -#: ../../library/pyexpat.rst:662 +#: ../../library/pyexpat.rst:661 msgid "The constants in the quantifier group are:" msgstr "" -#: ../../library/pyexpat.rst:668 +#: ../../library/pyexpat.rst:667 msgid "No modifier is given, so it can appear exactly once, as for ``A``." msgstr "" -#: ../../library/pyexpat.rst:674 +#: ../../library/pyexpat.rst:673 msgid "The model is optional: it can appear once or not at all, as for ``A?``." msgstr "" -#: ../../library/pyexpat.rst:680 +#: ../../library/pyexpat.rst:679 msgid "The model must occur one or more times (like ``A+``)." msgstr "" -#: ../../library/pyexpat.rst:686 +#: ../../library/pyexpat.rst:685 msgid "The model must occur zero or more times, as for ``A*``." msgstr "" -#: ../../library/pyexpat.rst:692 +#: ../../library/pyexpat.rst:691 msgid "Expat error constants" msgstr "" -#: ../../library/pyexpat.rst:696 +#: ../../library/pyexpat.rst:695 msgid "" "The following constants are provided in the :mod:`xml.parsers.expat.errors` " "module. These constants are useful in interpreting some of the attributes " @@ -784,206 +783,206 @@ msgid "" "XML_ERROR_{CONSTANT_NAME}]`." msgstr "" -#: ../../library/pyexpat.rst:704 +#: ../../library/pyexpat.rst:703 msgid "The ``errors`` module has the following attributes:" msgstr "" -#: ../../library/pyexpat.rst:708 +#: ../../library/pyexpat.rst:707 msgid "A dictionary mapping string descriptions to their error codes." msgstr "" -#: ../../library/pyexpat.rst:715 +#: ../../library/pyexpat.rst:714 msgid "A dictionary mapping numeric error codes to their string descriptions." msgstr "" -#: ../../library/pyexpat.rst:725 +#: ../../library/pyexpat.rst:724 msgid "" "An entity reference in an attribute value referred to an external entity " "instead of an internal entity." msgstr "" -#: ../../library/pyexpat.rst:731 +#: ../../library/pyexpat.rst:730 msgid "" "A character reference referred to a character which is illegal in XML (for " "example, character ``0``, or '``�``')." msgstr "" -#: ../../library/pyexpat.rst:737 +#: ../../library/pyexpat.rst:736 msgid "" "An entity reference referred to an entity which was declared with a " "notation, so cannot be parsed." msgstr "" -#: ../../library/pyexpat.rst:743 +#: ../../library/pyexpat.rst:742 msgid "An attribute was used more than once in a start tag." msgstr "" -#: ../../library/pyexpat.rst:751 +#: ../../library/pyexpat.rst:750 msgid "" "Raised when an input byte could not properly be assigned to a character; for " "example, a NUL byte (value ``0``) in a UTF-8 input stream." msgstr "" -#: ../../library/pyexpat.rst:757 +#: ../../library/pyexpat.rst:756 msgid "Something other than whitespace occurred after the document element." msgstr "" -#: ../../library/pyexpat.rst:762 +#: ../../library/pyexpat.rst:761 msgid "" "An XML declaration was found somewhere other than the start of the input " "data." msgstr "" -#: ../../library/pyexpat.rst:767 +#: ../../library/pyexpat.rst:766 msgid "" "The document contains no elements (XML requires all documents to contain " "exactly one top-level element).." msgstr "" -#: ../../library/pyexpat.rst:773 +#: ../../library/pyexpat.rst:772 msgid "Expat was not able to allocate memory internally." msgstr "" -#: ../../library/pyexpat.rst:778 +#: ../../library/pyexpat.rst:777 msgid "A parameter entity reference was found where it was not allowed." msgstr "" -#: ../../library/pyexpat.rst:783 +#: ../../library/pyexpat.rst:782 msgid "An incomplete character was found in the input." msgstr "" -#: ../../library/pyexpat.rst:788 +#: ../../library/pyexpat.rst:787 msgid "" "An entity reference contained another reference to the same entity; possibly " "via a different name, and possibly indirectly." msgstr "" -#: ../../library/pyexpat.rst:794 +#: ../../library/pyexpat.rst:793 msgid "Some unspecified syntax error was encountered." msgstr "" -#: ../../library/pyexpat.rst:799 +#: ../../library/pyexpat.rst:798 msgid "An end tag did not match the innermost open start tag." msgstr "" -#: ../../library/pyexpat.rst:804 +#: ../../library/pyexpat.rst:803 msgid "" "Some token (such as a start tag) was not closed before the end of the stream " "or the next token was encountered." msgstr "" -#: ../../library/pyexpat.rst:810 +#: ../../library/pyexpat.rst:809 msgid "A reference was made to an entity which was not defined." msgstr "" -#: ../../library/pyexpat.rst:815 +#: ../../library/pyexpat.rst:814 msgid "The document encoding is not supported by Expat." msgstr "" -#: ../../library/pyexpat.rst:820 +#: ../../library/pyexpat.rst:819 msgid "A CDATA marked section was not closed." msgstr "" -#: ../../library/pyexpat.rst:828 +#: ../../library/pyexpat.rst:827 msgid "" "The parser determined that the document was not \"standalone\" though it " "declared itself to be in the XML declaration, and the :attr:" "`NotStandaloneHandler` was set and returned ``0``." msgstr "" -#: ../../library/pyexpat.rst:841 +#: ../../library/pyexpat.rst:840 msgid "" "An operation was requested that requires DTD support to be compiled in, but " "Expat was configured without DTD support. This should never be reported by " "a standard build of the :mod:`xml.parsers.expat` module." msgstr "" -#: ../../library/pyexpat.rst:848 +#: ../../library/pyexpat.rst:847 msgid "" "A behavioral change was requested after parsing started that can only be " "changed before parsing has started. This is (currently) only raised by :" "meth:`UseForeignDTD`." msgstr "" -#: ../../library/pyexpat.rst:855 +#: ../../library/pyexpat.rst:854 msgid "An undeclared prefix was found when namespace processing was enabled." msgstr "" -#: ../../library/pyexpat.rst:860 +#: ../../library/pyexpat.rst:859 msgid "" "The document attempted to remove the namespace declaration associated with a " "prefix." msgstr "" -#: ../../library/pyexpat.rst:866 +#: ../../library/pyexpat.rst:865 msgid "A parameter entity contained incomplete markup." msgstr "" -#: ../../library/pyexpat.rst:871 +#: ../../library/pyexpat.rst:870 msgid "The document contained no document element at all." msgstr "" -#: ../../library/pyexpat.rst:876 +#: ../../library/pyexpat.rst:875 msgid "There was an error parsing a text declaration in an external entity." msgstr "" -#: ../../library/pyexpat.rst:881 +#: ../../library/pyexpat.rst:880 msgid "Characters were found in the public id that are not allowed." msgstr "" -#: ../../library/pyexpat.rst:886 +#: ../../library/pyexpat.rst:885 msgid "" "The requested operation was made on a suspended parser, but isn't allowed. " "This includes attempts to provide additional input or to stop the parser." msgstr "" -#: ../../library/pyexpat.rst:892 +#: ../../library/pyexpat.rst:891 msgid "" "An attempt to resume the parser was made when the parser had not been " "suspended." msgstr "" -#: ../../library/pyexpat.rst:897 ../../library/pyexpat.rst:930 -#: ../../library/pyexpat.rst:935 +#: ../../library/pyexpat.rst:896 ../../library/pyexpat.rst:929 +#: ../../library/pyexpat.rst:934 msgid "This should not be reported to Python applications." msgstr "" -#: ../../library/pyexpat.rst:902 +#: ../../library/pyexpat.rst:901 msgid "" "The requested operation was made on a parser which was finished parsing " "input, but isn't allowed. This includes attempts to provide additional " "input or to stop the parser." msgstr "" -#: ../../library/pyexpat.rst:912 +#: ../../library/pyexpat.rst:911 msgid "" "An attempt was made to undeclare reserved namespace prefix ``xml`` or to " "bind it to another namespace URI." msgstr "" -#: ../../library/pyexpat.rst:919 +#: ../../library/pyexpat.rst:918 msgid "" "An attempt was made to declare or undeclare reserved namespace prefix " "``xmlns``." msgstr "" -#: ../../library/pyexpat.rst:924 +#: ../../library/pyexpat.rst:923 msgid "" "An attempt was made to bind the URI of one the reserved namespace prefixes " "``xml`` and ``xmlns`` to another namespace prefix." msgstr "" -#: ../../library/pyexpat.rst:940 +#: ../../library/pyexpat.rst:939 msgid "" "The limit on input amplification factor (from DTD and entities) has been " "breached." msgstr "" -#: ../../library/pyexpat.rst:945 +#: ../../library/pyexpat.rst:944 msgid "Footnotes" msgstr "註解" -#: ../../library/pyexpat.rst:946 +#: ../../library/pyexpat.rst:945 msgid "" "The encoding string included in XML output should conform to the appropriate " "standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not. See https://" @@ -991,14 +990,14 @@ msgid "" "org/assignments/character-sets/character-sets.xhtml." msgstr "" -#: ../../library/pyexpat.rst:26 +#: ../../library/pyexpat.rst:25 msgid "Expat" msgstr "Expat" -#: ../../library/pyexpat.rst:36 +#: ../../library/pyexpat.rst:35 msgid "module" msgstr "module(模組)" -#: ../../library/pyexpat.rst:36 +#: ../../library/pyexpat.rst:35 msgid "pyexpat" msgstr "pyexpat" diff --git a/library/random.po b/library/random.po index b4196649ec..f14f772aef 100644 --- a/library/random.po +++ b/library/random.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-27 00:14+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2025-03-07 19:17+0800\n" "Last-Translator: Dr.XYZ \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -731,7 +731,16 @@ msgstr "" "在子類別中覆寫此方法以自訂 :class:`!Random` 實例的 :meth:`~random." "getrandbits` 行為。" -#: ../../library/random.rst:453 +#: ../../library/random.rst:452 +#, fuzzy +msgid "" +"Override this method in subclasses to customise the :meth:`~random." +"randbytes` behaviour of :class:`!Random` instances." +msgstr "" +"在子類別中覆寫此方法以自訂 :class:`!Random` 實例的 :meth:`~random." +"getrandbits` 行為。" + +#: ../../library/random.rst:458 msgid "" "Class that uses the :func:`os.urandom` function for generating random " "numbers from sources provided by the operating system. Not available on all " @@ -745,11 +754,11 @@ msgstr "" "有效果且被忽略。如果呼叫 :meth:`getstate` 和 :meth:`setstate` 方法會引發 :" "exc:`NotImplementedError`。" -#: ../../library/random.rst:462 +#: ../../library/random.rst:467 msgid "Notes on Reproducibility" msgstr "關於 Reproducibility(復現性)的注意事項" -#: ../../library/random.rst:464 +#: ../../library/random.rst:469 msgid "" "Sometimes it is useful to be able to reproduce the sequences given by a " "pseudo-random number generator. By reusing a seed value, the same sequence " @@ -759,7 +768,7 @@ msgstr "" "有時,能夠重現偽隨機數產生器給出的序列很有用。只要多執行緒未運行,透過重複使" "用種子值,同一序列就應該可以被復現。" -#: ../../library/random.rst:468 +#: ../../library/random.rst:473 msgid "" "Most of the random module's algorithms and seeding functions are subject to " "change across Python versions, but two aspects are guaranteed not to change:" @@ -767,13 +776,13 @@ msgstr "" "大多數隨機 module 的演算法和 seed 設定函式在 Python 版本中可能會發生變化,但" "可以保證兩個方面不會改變:" -#: ../../library/random.rst:471 +#: ../../library/random.rst:476 msgid "" "If a new seeding method is added, then a backward compatible seeder will be " "offered." msgstr "如果增加了新的 seed 設定函式,則將提供向後相容的播種器 (seeder)。" -#: ../../library/random.rst:474 +#: ../../library/random.rst:479 msgid "" "The generator's :meth:`~Random.random` method will continue to produce the " "same sequence when the compatible seeder is given the same seed." @@ -781,15 +790,15 @@ msgstr "" "當相容的播種器被賦予相同的種子時,產生器的 :meth:`~Random.random` 方法將持續" "產生相同的序列。" -#: ../../library/random.rst:480 +#: ../../library/random.rst:485 msgid "Examples" msgstr "範例" -#: ../../library/random.rst:482 +#: ../../library/random.rst:487 msgid "Basic examples::" msgstr "基礎範例: ::" -#: ../../library/random.rst:484 +#: ../../library/random.rst:489 msgid "" ">>> random() # Random float: 0.0 <= x < 1.0\n" "0.37444887175646646\n" @@ -846,11 +855,11 @@ msgstr "" ">>> sample([10, 20, 30, 40, 50], k=4) # 四個無重置的樣本\n" "[40, 10, 50, 30]" -#: ../../library/random.rst:510 +#: ../../library/random.rst:515 msgid "Simulations::" msgstr "模擬: ::" -#: ../../library/random.rst:512 +#: ../../library/random.rst:517 msgid "" ">>> # Six roulette wheel spins (weighted sampling with replacement)\n" ">>> choices(['red', 'black', 'green'], [18, 18, 2], k=6)\n" @@ -897,7 +906,7 @@ msgstr "" ">>> sum(trial() for i in range(10_000)) / 10_000\n" "0.7958" -#: ../../library/random.rst:535 +#: ../../library/random.rst:540 msgid "" "Example of `statistical bootstrapping `_ using resampling with replacement to estimate " @@ -907,7 +916,7 @@ msgstr "" "Bootstrapping_(statistics)>`_\\ 的範例,使用有重置的重新取樣來估計樣本平均數" "的信賴區間: ::" -#: ../../library/random.rst:539 +#: ../../library/random.rst:544 msgid "" "# https://www.thoughtco.com/example-of-bootstrapping-3126155\n" "from statistics import fmean as mean\n" @@ -927,7 +936,7 @@ msgstr "" "print(f'The sample mean of {mean(data):.1f} has a 90% confidence '\n" " f'interval from {means[5]:.1f} to {means[94]:.1f}')" -#: ../../library/random.rst:548 +#: ../../library/random.rst:553 msgid "" "Example of a `resampling permutation test `_ to determine the statistical " @@ -939,7 +948,7 @@ msgstr "" "慰劑之間差異的統計學意義或 `p 值 `_\\ " ": ::" -#: ../../library/random.rst:554 +#: ../../library/random.rst:559 msgid "" "# Example from \"Statistics is Easy\" by Dennis Shasha and Manda Wilson\n" "from statistics import fmean as mean\n" @@ -987,12 +996,12 @@ msgstr "" "print(f'單邊 p 值 {count / n:.4f} 使我們拒絕無效假設')\n" "print(f'即藥物與安慰劑之間沒有差異。')" -#: ../../library/random.rst:575 +#: ../../library/random.rst:580 msgid "" "Simulation of arrival times and service deliveries for a multiserver queue::" msgstr "模擬多伺服器佇列 (queue) 的到達時間與服務交付: ::" -#: ../../library/random.rst:577 +#: ../../library/random.rst:582 msgid "" "from heapq import heapify, heapreplace\n" "from random import expovariate, gauss\n" @@ -1046,7 +1055,7 @@ msgstr "" "print(f'平均等待時間:{mean(waits):.1f} 最大等待時間:{max(waits):.1f}')\n" "print('四分位數:', [round(q, 1) for q in quantiles(waits)])" -#: ../../library/random.rst:604 +#: ../../library/random.rst:609 msgid "" "`Statistics for Hackers `_ a " "video tutorial by `Jake Vanderplas `_ 製作的教" "學影片,僅使用幾個基本概念(包括模擬、取樣、洗牌、交叉驗證)進行統計分析。" -#: ../../library/random.rst:610 +#: ../../library/random.rst:615 msgid "" "`Economics Simulation `_ a simulation of a marketplace by `Peter Norvig `_ a tutorial by `Peter Norvig " @@ -1081,11 +1090,11 @@ msgstr "" "Probability.ipynb>`_\\ 為 `Peter Norvig `_ 的教" "學課程,涵蓋了機率理論的基礎知識與如何模擬以及使用 Python 執行數據分析。" -#: ../../library/random.rst:625 +#: ../../library/random.rst:630 msgid "Recipes" msgstr "使用方案" -#: ../../library/random.rst:627 +#: ../../library/random.rst:632 msgid "" "These recipes show how to efficiently make random selections from the " "combinatoric iterators in the :mod:`itertools` module:" @@ -1093,7 +1102,7 @@ msgstr "" "這些使用方案展示了如何有效地從 :mod:`itertools` 模組的組合疊代器 " "(combinatoric iterators) 中進行隨機選擇:" -#: ../../library/random.rst:630 +#: ../../library/random.rst:635 msgid "" "def random_product(*args, repeat=1):\n" " \"Random selection from itertools.product(*args, **kwds)\"\n" @@ -1149,7 +1158,7 @@ msgstr "" " indices = sorted(random.choices(range(n), k=r))\n" " return tuple(pool[i] for i in indices)" -#: ../../library/random.rst:659 +#: ../../library/random.rst:664 msgid "" "The default :func:`.random` returns multiples of 2⁻⁵³ in the range *0.0 ≤ x " "< 1.0*. All such numbers are evenly spaced and are exactly representable as " @@ -1161,7 +1170,7 @@ msgstr "" "均勻分佈的,並且可以完全表示為 Python float。但是,該間隔中的許多其他可表示" "的 float 不是可能的選擇。 例如 ``0.05954861408025609`` 不是 2⁻⁵³ 的整數倍。" -#: ../../library/random.rst:665 +#: ../../library/random.rst:670 msgid "" "The following recipe takes a different approach. All floats in the interval " "are possible selections. The mantissa comes from a uniform distribution of " @@ -1173,7 +1182,7 @@ msgstr "" "數 < 2⁵³* 範圍內的整數均勻分佈。指數來自幾何分佈,其中小於 *-53* 的指數的出現" "頻率是下一個較大指數的一半。" -#: ../../library/random.rst:673 +#: ../../library/random.rst:678 msgid "" "from random import Random\n" "from math import ldexp\n" @@ -1203,7 +1212,7 @@ msgstr "" " exponent += x.bit_length() - 32\n" " return ldexp(mantissa, exponent)" -#: ../../library/random.rst:687 +#: ../../library/random.rst:692 msgid "" "All :ref:`real valued distributions ` in the " "class will use the new method::" @@ -1211,7 +1220,7 @@ msgstr "" "Class 中的所有\\ :ref:`實數分佈 `\\ 都將使用新方" "法: ::" -#: ../../library/random.rst:690 +#: ../../library/random.rst:695 msgid "" ">>> fr = FullRandom()\n" ">>> fr.random()\n" @@ -1225,7 +1234,7 @@ msgstr "" ">>> fr.expovariate(0.25)\n" "8.87925541791544" -#: ../../library/random.rst:696 +#: ../../library/random.rst:701 msgid "" "The recipe is conceptually equivalent to an algorithm that chooses from all " "the multiples of 2⁻¹⁰⁷⁴ in the range *0.0 ≤ x < 1.0*. All such numbers are " @@ -1238,7 +1247,7 @@ msgstr "" "示的 Python float。(2⁻¹⁰⁷⁴ 是最小為正的非正規化 float,等於 ``math." "ulp(0.0)``)" -#: ../../library/random.rst:705 +#: ../../library/random.rst:710 msgid "" "`Generating Pseudo-random Floating-Point Values `_ a paper by Allen B. Downey describing " @@ -1249,68 +1258,68 @@ msgstr "" "pdf>`_ Allen B. Downey 的一篇論文描述了產生比通常由 :func:`.random` 產生的 " "float 更 fine-grained(細粒的)的方法。" -#: ../../library/random.rst:713 +#: ../../library/random.rst:718 msgid "Command-line usage" msgstr "命令列用法" -#: ../../library/random.rst:717 +#: ../../library/random.rst:722 msgid "The :mod:`!random` module can be executed from the command line." msgstr ":mod:`!random` 模組可以從命令列執行。" -#: ../../library/random.rst:719 +#: ../../library/random.rst:724 msgid "" "python -m random [-h] [-c CHOICE [CHOICE ...] | -i N | -f N] [input ...]" msgstr "" "python -m random [-h] [-c CHOICE [CHOICE ...] | -i N | -f N] [input ...]" -#: ../../library/random.rst:723 +#: ../../library/random.rst:728 msgid "The following options are accepted:" msgstr "接受以下選項:" -#: ../../library/random.rst:729 +#: ../../library/random.rst:734 msgid "Show the help message and exit." msgstr "顯示幫助訊息並退出。" -#: ../../library/random.rst:734 +#: ../../library/random.rst:739 msgid "Print a random choice, using :meth:`choice`." msgstr "列印一個隨機選擇,使用 :meth:`choice`。" -#: ../../library/random.rst:739 +#: ../../library/random.rst:744 msgid "" "Print a random integer between 1 and N inclusive, using :meth:`randint`." msgstr "列印 1 到 N(含)之間的隨機整數,使用 :meth:`randint`。" -#: ../../library/random.rst:744 +#: ../../library/random.rst:749 msgid "" "Print a random floating-point number between 0 and N inclusive, using :meth:" "`uniform`." msgstr "列印 0 到 N(含)之間的隨機浮點數,使用 :meth:`uniform`。" -#: ../../library/random.rst:747 +#: ../../library/random.rst:752 msgid "If no options are given, the output depends on the input:" msgstr "如果未給定選項,則輸出取決於輸入:" -#: ../../library/random.rst:749 +#: ../../library/random.rst:754 msgid "String or multiple: same as :option:`--choice`." msgstr "字串或多個:與 :option:`--choice` 相同。" -#: ../../library/random.rst:750 +#: ../../library/random.rst:755 msgid "Integer: same as :option:`--integer`." msgstr "整數:與 :option:`--integer` 相同。" -#: ../../library/random.rst:751 +#: ../../library/random.rst:756 msgid "Float: same as :option:`--float`." msgstr "浮點數:與 :option:`--float` 相同。" -#: ../../library/random.rst:756 +#: ../../library/random.rst:761 msgid "Command-line example" msgstr "命令列範例" -#: ../../library/random.rst:758 +#: ../../library/random.rst:763 msgid "Here are some examples of the :mod:`!random` command-line interface:" msgstr "以下是 :mod:`!random` 命令列介面的一些範例:" -#: ../../library/random.rst:760 +#: ../../library/random.rst:765 msgid "" "$ # Choose one at random\n" "$ python -m random egg bacon sausage spam \"Lobster Thermidor aux crevettes " @@ -1343,8 +1352,8 @@ msgid "" "3.1942323316565915" msgstr "" "$ # 隨機選擇一個\n" -"$ python -m random egg bacon sausage spam \"Lobster Thermidor aux " -"crevettes with a Mornay sauce\"\n" +"$ python -m random egg bacon sausage spam \"Lobster Thermidor aux crevettes " +"with a Mornay sauce\"\n" "Lobster Thermidor aux crevettes with a Mornay sauce\n" "\n" "$ # 隨機整數\n" @@ -1356,8 +1365,8 @@ msgstr "" "1.7080016272295635\n" "\n" "$ # 使用明確的引數\n" -"$ python -m random --choice egg bacon sausage spam \"Lobster Thermidor " -"aux crevettes with a Mornay sauce\"\n" +"$ python -m random --choice egg bacon sausage spam \"Lobster Thermidor aux " +"crevettes with a Mornay sauce\"\n" "egg\n" "\n" "$ python -m random --integer 6\n" diff --git a/library/security_warnings.po b/library/security_warnings.po index 243d024c02..143942d39b 100644 --- a/library/security_warnings.po +++ b/library/security_warnings.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-23 07:52+0800\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2023-08-21 02:41+0000\n" "Last-Translator: Matt Wang \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -102,8 +102,9 @@ msgstr "" "`" #: ../../library/security_warnings.rst:31 -msgid ":mod:`xml`: :ref:`XML vulnerabilities `" -msgstr ":mod:`xml`::ref:`XML 漏洞 `" +#, fuzzy +msgid ":mod:`xml`: :ref:`XML security `" +msgstr ":mod:`ssl`::ref:`SSL/TLS 安全性注意事項 `" #: ../../library/security_warnings.rst:32 msgid "" @@ -129,5 +130,8 @@ msgstr "" msgid "security considerations" msgstr "security considerations(安全性注意事項)" +#~ msgid ":mod:`xml`: :ref:`XML vulnerabilities `" +#~ msgstr ":mod:`xml`::ref:`XML 漏洞 `" + #~ msgid ":mod:`cgi`: :ref:`CGI security considerations `" #~ msgstr ":mod:`cgi`::ref:`CGI 安全性注意事項 `" diff --git a/library/xml.dom.minidom.po b/library/xml.dom.minidom.po index edf87d6176..3e37dc543d 100644 --- a/library/xml.dom.minidom.po +++ b/library/xml.dom.minidom.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-01 22:24+0800\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:15+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -37,18 +37,17 @@ msgstr "" #: ../../library/xml.dom.minidom.rst:24 msgid "" -"The :mod:`xml.dom.minidom` module is not secure against maliciously " -"constructed data. If you need to parse untrusted or unauthenticated data " -"see :ref:`xml-vulnerabilities`." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -#: ../../library/xml.dom.minidom.rst:29 +#: ../../library/xml.dom.minidom.rst:28 msgid "" "DOM applications typically start by parsing some XML into a DOM. With :mod:" "`xml.dom.minidom`, this is done through the parse functions::" msgstr "" -#: ../../library/xml.dom.minidom.rst:32 +#: ../../library/xml.dom.minidom.rst:31 msgid "" "from xml.dom.minidom import parse, parseString\n" "\n" @@ -60,12 +59,12 @@ msgid "" "dom3 = parseString('Some data some more data')" msgstr "" -#: ../../library/xml.dom.minidom.rst:41 +#: ../../library/xml.dom.minidom.rst:40 msgid "" "The :func:`parse` function can take either a filename or an open file object." msgstr "" -#: ../../library/xml.dom.minidom.rst:46 +#: ../../library/xml.dom.minidom.rst:45 msgid "" "Return a :class:`Document` from the given input. *filename_or_file* may be " "either a file name, or a file-like object. *parser*, if given, must be a " @@ -74,26 +73,26 @@ msgid "" "setting an entity resolver) must have been done in advance." msgstr "" -#: ../../library/xml.dom.minidom.rst:52 +#: ../../library/xml.dom.minidom.rst:51 msgid "" "If you have XML in a string, you can use the :func:`parseString` function " "instead:" msgstr "" -#: ../../library/xml.dom.minidom.rst:58 +#: ../../library/xml.dom.minidom.rst:57 msgid "" "Return a :class:`Document` that represents the *string*. This method creates " "an :class:`io.StringIO` object for the string and passes that on to :func:" "`parse`." msgstr "" -#: ../../library/xml.dom.minidom.rst:61 +#: ../../library/xml.dom.minidom.rst:60 msgid "" "Both functions return a :class:`Document` object representing the content of " "the document." msgstr "" -#: ../../library/xml.dom.minidom.rst:64 +#: ../../library/xml.dom.minidom.rst:63 msgid "" "What the :func:`parse` and :func:`parseString` functions do is connect an " "XML parser with a \"DOM builder\" that can accept parse events from any SAX " @@ -104,7 +103,7 @@ msgid "" "themselves." msgstr "" -#: ../../library/xml.dom.minidom.rst:71 +#: ../../library/xml.dom.minidom.rst:70 msgid "" "You can also create a :class:`Document` by calling a method on a \"DOM " "Implementation\" object. You can get this object either by calling the :" @@ -113,7 +112,7 @@ msgid "" "add child nodes to it to populate the DOM::" msgstr "" -#: ../../library/xml.dom.minidom.rst:77 +#: ../../library/xml.dom.minidom.rst:76 msgid "" "from xml.dom.minidom import getDOMImplementation\n" "\n" @@ -125,7 +124,7 @@ msgid "" "top_element.appendChild(text)" msgstr "" -#: ../../library/xml.dom.minidom.rst:86 +#: ../../library/xml.dom.minidom.rst:85 msgid "" "Once you have a DOM document object, you can access the parts of your XML " "document through its properties and methods. These properties are defined " @@ -134,13 +133,13 @@ msgid "" "document: the one that holds all others. Here is an example program::" msgstr "" -#: ../../library/xml.dom.minidom.rst:92 +#: ../../library/xml.dom.minidom.rst:91 msgid "" "dom3 = parseString(\"Some data\")\n" "assert dom3.documentElement.tagName == \"myxml\"" msgstr "" -#: ../../library/xml.dom.minidom.rst:95 +#: ../../library/xml.dom.minidom.rst:94 msgid "" "When you are finished with a DOM tree, you may optionally call the :meth:" "`unlink` method to encourage early cleanup of the now-unneeded objects. :" @@ -150,28 +149,28 @@ msgid "" "objects in the tree." msgstr "" -#: ../../library/xml.dom.minidom.rst:104 +#: ../../library/xml.dom.minidom.rst:103 msgid "" "`Document Object Model (DOM) Level 1 Specification `_" msgstr "" -#: ../../library/xml.dom.minidom.rst:105 +#: ../../library/xml.dom.minidom.rst:104 msgid "The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`." msgstr "" -#: ../../library/xml.dom.minidom.rst:111 +#: ../../library/xml.dom.minidom.rst:110 msgid "DOM Objects" msgstr "DOM 物件" -#: ../../library/xml.dom.minidom.rst:113 +#: ../../library/xml.dom.minidom.rst:112 msgid "" "The definition of the DOM API for Python is given as part of the :mod:`xml." "dom` module documentation. This section lists the differences between the " "API and :mod:`xml.dom.minidom`." msgstr "" -#: ../../library/xml.dom.minidom.rst:120 +#: ../../library/xml.dom.minidom.rst:119 msgid "" "Break internal references within the DOM so that it will be garbage " "collected on versions of Python without cyclic GC. Even when cyclic GC is " @@ -181,20 +180,20 @@ msgid "" "may be called on child nodes to discard children of that node." msgstr "" -#: ../../library/xml.dom.minidom.rst:127 +#: ../../library/xml.dom.minidom.rst:126 msgid "" "You can avoid calling this method explicitly by using the :keyword:`with` " "statement. The following code will automatically unlink *dom* when the :" "keyword:`!with` block is exited::" msgstr "" -#: ../../library/xml.dom.minidom.rst:131 +#: ../../library/xml.dom.minidom.rst:130 msgid "" "with xml.dom.minidom.parse(datasource) as dom:\n" " ... # Work with dom." msgstr "" -#: ../../library/xml.dom.minidom.rst:138 +#: ../../library/xml.dom.minidom.rst:137 msgid "" "Write XML to the writer object. The writer receives texts but not bytes as " "input, it should have a :meth:`write` method which matches that of the file " @@ -204,13 +203,13 @@ msgid "" "use to terminate newlines." msgstr "" -#: ../../library/xml.dom.minidom.rst:145 +#: ../../library/xml.dom.minidom.rst:144 msgid "" "For the :class:`Document` node, an additional keyword argument *encoding* " "can be used to specify the encoding field of the XML header." msgstr "" -#: ../../library/xml.dom.minidom.rst:148 +#: ../../library/xml.dom.minidom.rst:147 msgid "" "Similarly, explicitly stating the *standalone* argument causes the " "standalone document declarations to be added to the prologue of the XML " @@ -219,24 +218,24 @@ msgid "" "declaration from the document." msgstr "" -#: ../../library/xml.dom.minidom.rst:155 +#: ../../library/xml.dom.minidom.rst:154 msgid "" "The :meth:`writexml` method now preserves the attribute order specified by " "the user." msgstr "" -#: ../../library/xml.dom.minidom.rst:159 ../../library/xml.dom.minidom.rst:180 -#: ../../library/xml.dom.minidom.rst:199 +#: ../../library/xml.dom.minidom.rst:158 ../../library/xml.dom.minidom.rst:179 +#: ../../library/xml.dom.minidom.rst:198 msgid "The *standalone* parameter was added." msgstr "新增 *standalone* 參數。" -#: ../../library/xml.dom.minidom.rst:164 +#: ../../library/xml.dom.minidom.rst:163 msgid "" "Return a string or byte string containing the XML represented by the DOM " "node." msgstr "" -#: ../../library/xml.dom.minidom.rst:167 +#: ../../library/xml.dom.minidom.rst:166 msgid "" "With an explicit *encoding* [1]_ argument, the result is a byte string in " "the specified encoding. With no *encoding* argument, the result is a Unicode " @@ -245,47 +244,47 @@ msgid "" "incorrect, since UTF-8 is the default encoding of XML." msgstr "" -#: ../../library/xml.dom.minidom.rst:174 ../../library/xml.dom.minidom.rst:193 +#: ../../library/xml.dom.minidom.rst:173 ../../library/xml.dom.minidom.rst:192 msgid "The *standalone* argument behaves exactly as in :meth:`writexml`." msgstr "" -#: ../../library/xml.dom.minidom.rst:176 +#: ../../library/xml.dom.minidom.rst:175 msgid "" "The :meth:`toxml` method now preserves the attribute order specified by the " "user." msgstr "" -#: ../../library/xml.dom.minidom.rst:186 +#: ../../library/xml.dom.minidom.rst:185 msgid "" "Return a pretty-printed version of the document. *indent* specifies the " "indentation string and defaults to a tabulator; *newl* specifies the string " "emitted at the end of each line and defaults to ``\\n``." msgstr "" -#: ../../library/xml.dom.minidom.rst:190 +#: ../../library/xml.dom.minidom.rst:189 msgid "" "The *encoding* argument behaves like the corresponding argument of :meth:" "`toxml`." msgstr "" -#: ../../library/xml.dom.minidom.rst:195 +#: ../../library/xml.dom.minidom.rst:194 msgid "" "The :meth:`toprettyxml` method now preserves the attribute order specified " "by the user." msgstr "" -#: ../../library/xml.dom.minidom.rst:205 +#: ../../library/xml.dom.minidom.rst:204 msgid "DOM Example" msgstr "DOM 範例" -#: ../../library/xml.dom.minidom.rst:207 +#: ../../library/xml.dom.minidom.rst:206 msgid "" "This example program is a fairly realistic example of a simple program. In " "this particular case, we do not take much advantage of the flexibility of " "the DOM." msgstr "" -#: ../../library/xml.dom.minidom.rst:210 +#: ../../library/xml.dom.minidom.rst:209 msgid "" "import xml.dom.minidom\n" "\n" @@ -417,23 +416,23 @@ msgstr "" "\n" "handleSlideshow(dom)\n" -#: ../../library/xml.dom.minidom.rst:216 +#: ../../library/xml.dom.minidom.rst:215 msgid "minidom and the DOM standard" msgstr "" -#: ../../library/xml.dom.minidom.rst:218 +#: ../../library/xml.dom.minidom.rst:217 msgid "" "The :mod:`xml.dom.minidom` module is essentially a DOM 1.0-compatible DOM " "with some DOM 2 features (primarily namespace features)." msgstr "" -#: ../../library/xml.dom.minidom.rst:221 +#: ../../library/xml.dom.minidom.rst:220 msgid "" "Usage of the DOM interface in Python is straight-forward. The following " "mapping rules apply:" msgstr "" -#: ../../library/xml.dom.minidom.rst:224 +#: ../../library/xml.dom.minidom.rst:223 msgid "" "Interfaces are accessed through instance objects. Applications should not " "instantiate the classes themselves; they should use the creator functions " @@ -442,14 +441,14 @@ msgid "" "operations." msgstr "" -#: ../../library/xml.dom.minidom.rst:229 +#: ../../library/xml.dom.minidom.rst:228 msgid "" "Operations are used as methods. Since the DOM uses only :keyword:`in` " "parameters, the arguments are passed in normal order (from left to right). " "There are no optional arguments. ``void`` operations return ``None``." msgstr "" -#: ../../library/xml.dom.minidom.rst:233 +#: ../../library/xml.dom.minidom.rst:232 msgid "" "IDL attributes map to instance attributes. For compatibility with the OMG " "IDL language mapping for Python, an attribute ``foo`` can also be accessed " @@ -457,13 +456,13 @@ msgid "" "``readonly`` attributes must not be changed; this is not enforced at runtime." msgstr "" -#: ../../library/xml.dom.minidom.rst:238 +#: ../../library/xml.dom.minidom.rst:237 msgid "" "The types ``short int``, ``unsigned int``, ``unsigned long long``, and " "``boolean`` all map to Python integer objects." msgstr "" -#: ../../library/xml.dom.minidom.rst:241 +#: ../../library/xml.dom.minidom.rst:240 msgid "" "The type ``DOMString`` maps to Python strings. :mod:`xml.dom.minidom` " "supports either bytes or strings, but will normally produce strings. Values " @@ -471,21 +470,21 @@ msgid "" "``null`` value by the DOM specification from the W3C." msgstr "" -#: ../../library/xml.dom.minidom.rst:246 +#: ../../library/xml.dom.minidom.rst:245 msgid "" "``const`` declarations map to variables in their respective scope (e.g. " "``xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE``); they must not be " "changed." msgstr "" -#: ../../library/xml.dom.minidom.rst:249 +#: ../../library/xml.dom.minidom.rst:248 msgid "" "``DOMException`` is currently not supported in :mod:`xml.dom.minidom`. " "Instead, :mod:`xml.dom.minidom` uses standard Python exceptions such as :exc:" "`TypeError` and :exc:`AttributeError`." msgstr "" -#: ../../library/xml.dom.minidom.rst:253 +#: ../../library/xml.dom.minidom.rst:252 msgid "" ":class:`NodeList` objects are implemented using Python's built-in list type. " "These objects provide the interface defined in the DOM specification, but " @@ -494,30 +493,30 @@ msgid "" "recommendations." msgstr "" -#: ../../library/xml.dom.minidom.rst:259 +#: ../../library/xml.dom.minidom.rst:258 msgid "" "The following interfaces have no implementation in :mod:`xml.dom.minidom`:" msgstr "" -#: ../../library/xml.dom.minidom.rst:261 +#: ../../library/xml.dom.minidom.rst:260 msgid ":class:`DOMTimeStamp`" msgstr ":class:`DOMTimeStamp`" -#: ../../library/xml.dom.minidom.rst:263 +#: ../../library/xml.dom.minidom.rst:262 msgid ":class:`EntityReference`" msgstr ":class:`EntityReference`" -#: ../../library/xml.dom.minidom.rst:265 +#: ../../library/xml.dom.minidom.rst:264 msgid "" "Most of these reflect information in the XML document that is not of general " "utility to most DOM users." msgstr "" -#: ../../library/xml.dom.minidom.rst:269 +#: ../../library/xml.dom.minidom.rst:268 msgid "Footnotes" msgstr "註解" -#: ../../library/xml.dom.minidom.rst:270 +#: ../../library/xml.dom.minidom.rst:269 msgid "" "The encoding name included in the XML output should conform to the " "appropriate standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not " diff --git a/library/xml.dom.pulldom.po b/library/xml.dom.pulldom.po index 736f1f62c2..a916117bac 100644 --- a/library/xml.dom.pulldom.po +++ b/library/xml.dom.pulldom.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-01 22:24+0800\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:16+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -40,19 +40,18 @@ msgstr "" #: ../../library/xml.dom.pulldom.rst:24 msgid "" -"The :mod:`xml.dom.pulldom` module is not secure against maliciously " -"constructed data. If you need to parse untrusted or unauthenticated data " -"see :ref:`xml-vulnerabilities`." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -#: ../../library/xml.dom.pulldom.rst:30 +#: ../../library/xml.dom.pulldom.rst:29 msgid "" "The SAX parser no longer processes general external entities by default to " "increase security by default. To enable processing of external entities, " "pass a custom parser instance in::" msgstr "" -#: ../../library/xml.dom.pulldom.rst:34 +#: ../../library/xml.dom.pulldom.rst:33 msgid "" "from xml.dom.pulldom import parse\n" "from xml.sax import make_parser\n" @@ -70,11 +69,11 @@ msgstr "" "parser.setFeature(feature_external_ges, True)\n" "parse(filename, parser=parser)" -#: ../../library/xml.dom.pulldom.rst:43 +#: ../../library/xml.dom.pulldom.rst:42 msgid "Example::" msgstr "範例: ::" -#: ../../library/xml.dom.pulldom.rst:45 +#: ../../library/xml.dom.pulldom.rst:44 msgid "" "from xml.dom import pulldom\n" "\n" @@ -94,49 +93,49 @@ msgstr "" " doc.expandNode(node)\n" " print(node.toxml())" -#: ../../library/xml.dom.pulldom.rst:54 +#: ../../library/xml.dom.pulldom.rst:53 msgid "``event`` is a constant and can be one of:" msgstr "" -#: ../../library/xml.dom.pulldom.rst:56 +#: ../../library/xml.dom.pulldom.rst:55 msgid ":data:`START_ELEMENT`" msgstr ":data:`START_ELEMENT`" -#: ../../library/xml.dom.pulldom.rst:57 +#: ../../library/xml.dom.pulldom.rst:56 msgid ":data:`END_ELEMENT`" msgstr ":data:`END_ELEMENT`" -#: ../../library/xml.dom.pulldom.rst:58 +#: ../../library/xml.dom.pulldom.rst:57 msgid ":data:`COMMENT`" msgstr ":data:`COMMENT`" -#: ../../library/xml.dom.pulldom.rst:59 +#: ../../library/xml.dom.pulldom.rst:58 msgid ":data:`START_DOCUMENT`" msgstr ":data:`START_DOCUMENT`" -#: ../../library/xml.dom.pulldom.rst:60 +#: ../../library/xml.dom.pulldom.rst:59 msgid ":data:`END_DOCUMENT`" msgstr ":data:`END_DOCUMENT`" -#: ../../library/xml.dom.pulldom.rst:61 +#: ../../library/xml.dom.pulldom.rst:60 msgid ":data:`CHARACTERS`" msgstr ":data:`CHARACTERS`" -#: ../../library/xml.dom.pulldom.rst:62 +#: ../../library/xml.dom.pulldom.rst:61 msgid ":data:`PROCESSING_INSTRUCTION`" msgstr ":data:`PROCESSING_INSTRUCTION`" -#: ../../library/xml.dom.pulldom.rst:63 +#: ../../library/xml.dom.pulldom.rst:62 msgid ":data:`IGNORABLE_WHITESPACE`" msgstr ":data:`IGNORABLE_WHITESPACE`" -#: ../../library/xml.dom.pulldom.rst:65 +#: ../../library/xml.dom.pulldom.rst:64 msgid "" "``node`` is an object of type :class:`xml.dom.minidom.Document`, :class:`xml." "dom.minidom.Element` or :class:`xml.dom.minidom.Text`." msgstr "" -#: ../../library/xml.dom.pulldom.rst:68 +#: ../../library/xml.dom.pulldom.rst:67 msgid "" "Since the document is treated as a \"flat\" stream of events, the document " "\"tree\" is implicitly traversed and the desired elements are found " @@ -148,11 +147,11 @@ msgid "" "`DOMEventStream.expandNode` method and switch to DOM-related processing." msgstr "" -#: ../../library/xml.dom.pulldom.rst:80 ../../library/xml.dom.pulldom.rst:85 +#: ../../library/xml.dom.pulldom.rst:79 ../../library/xml.dom.pulldom.rst:84 msgid "Subclass of :class:`xml.sax.handler.ContentHandler`." msgstr "" -#: ../../library/xml.dom.pulldom.rst:90 +#: ../../library/xml.dom.pulldom.rst:89 msgid "" "Return a :class:`DOMEventStream` from the given input. *stream_or_string* " "may be either a file name, or a file-like object. *parser*, if given, must " @@ -162,36 +161,36 @@ msgid "" "done in advance." msgstr "" -#: ../../library/xml.dom.pulldom.rst:97 +#: ../../library/xml.dom.pulldom.rst:96 msgid "" "If you have XML in a string, you can use the :func:`parseString` function " "instead:" msgstr "" -#: ../../library/xml.dom.pulldom.rst:101 +#: ../../library/xml.dom.pulldom.rst:100 msgid "" "Return a :class:`DOMEventStream` that represents the (Unicode) *string*." msgstr "" -#: ../../library/xml.dom.pulldom.rst:105 +#: ../../library/xml.dom.pulldom.rst:104 msgid "Default value for the *bufsize* parameter to :func:`parse`." msgstr "" -#: ../../library/xml.dom.pulldom.rst:107 +#: ../../library/xml.dom.pulldom.rst:106 msgid "" "The value of this variable can be changed before calling :func:`parse` and " "the new value will take effect." msgstr "" -#: ../../library/xml.dom.pulldom.rst:113 +#: ../../library/xml.dom.pulldom.rst:112 msgid "DOMEventStream Objects" msgstr "DOMEventStream 物件" -#: ../../library/xml.dom.pulldom.rst:117 +#: ../../library/xml.dom.pulldom.rst:116 msgid "Support for :meth:`~object.__getitem__` method has been removed." msgstr "" -#: ../../library/xml.dom.pulldom.rst:122 +#: ../../library/xml.dom.pulldom.rst:121 msgid "" "Return a tuple containing *event* and the current *node* as :class:`xml.dom." "minidom.Document` if event equals :data:`START_DOCUMENT`, :class:`xml.dom." @@ -201,11 +200,11 @@ msgid "" "children, unless :func:`expandNode` is called." msgstr "" -#: ../../library/xml.dom.pulldom.rst:132 +#: ../../library/xml.dom.pulldom.rst:131 msgid "Expands all children of *node* into *node*. Example::" msgstr "" -#: ../../library/xml.dom.pulldom.rst:134 +#: ../../library/xml.dom.pulldom.rst:133 msgid "" "from xml.dom import pulldom\n" "\n" diff --git a/library/xml.etree.elementtree.po b/library/xml.etree.elementtree.po index b5a9518fc2..e5b256a1f5 100644 --- a/library/xml.etree.elementtree.po +++ b/library/xml.etree.elementtree.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-24 07:20+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:16+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -41,27 +41,26 @@ msgstr ":mod:`!xml.etree.cElementTree` 模組已被棄用。" #: ../../library/xml.etree.elementtree.rst:25 msgid "" -"The :mod:`xml.etree.ElementTree` module is not secure against maliciously " -"constructed data. If you need to parse untrusted or unauthenticated data " -"see :ref:`xml-vulnerabilities`." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:30 +#: ../../library/xml.etree.elementtree.rst:29 msgid "Tutorial" msgstr "教學" -#: ../../library/xml.etree.elementtree.rst:32 +#: ../../library/xml.etree.elementtree.rst:31 msgid "" "This is a short tutorial for using :mod:`xml.etree.ElementTree` (``ET`` in " "short). The goal is to demonstrate some of the building blocks and basic " "concepts of the module." msgstr "" -#: ../../library/xml.etree.elementtree.rst:37 +#: ../../library/xml.etree.elementtree.rst:36 msgid "XML tree and elements" msgstr "" -#: ../../library/xml.etree.elementtree.rst:39 +#: ../../library/xml.etree.elementtree.rst:38 msgid "" "XML is an inherently hierarchical data format, and the most natural way to " "represent it is with a tree. ``ET`` has two classes for this purpose - :" @@ -72,17 +71,17 @@ msgid "" "sub-elements are done on the :class:`Element` level." msgstr "" -#: ../../library/xml.etree.elementtree.rst:50 +#: ../../library/xml.etree.elementtree.rst:49 msgid "Parsing XML" msgstr "剖析 XML" -#: ../../library/xml.etree.elementtree.rst:52 +#: ../../library/xml.etree.elementtree.rst:51 msgid "" "We'll be using the fictive :file:`country_data.xml` XML document as the " "sample data for this section:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:54 +#: ../../library/xml.etree.elementtree.rst:53 msgid "" "\n" "\n" @@ -132,11 +131,11 @@ msgstr "" " \n" "" -#: ../../library/xml.etree.elementtree.rst:80 +#: ../../library/xml.etree.elementtree.rst:79 msgid "We can import this data by reading from a file::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:82 +#: ../../library/xml.etree.elementtree.rst:81 msgid "" "import xml.etree.ElementTree as ET\n" "tree = ET.parse('country_data.xml')\n" @@ -146,15 +145,15 @@ msgstr "" "tree = ET.parse('country_data.xml')\n" "root = tree.getroot()" -#: ../../library/xml.etree.elementtree.rst:86 +#: ../../library/xml.etree.elementtree.rst:85 msgid "Or directly from a string::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:88 +#: ../../library/xml.etree.elementtree.rst:87 msgid "root = ET.fromstring(country_data_as_string)" msgstr "root = ET.fromstring(country_data_as_string)" -#: ../../library/xml.etree.elementtree.rst:90 +#: ../../library/xml.etree.elementtree.rst:89 msgid "" ":func:`fromstring` parses XML from a string directly into an :class:" "`Element`, which is the root element of the parsed tree. Other parsing " @@ -162,12 +161,12 @@ msgid "" "sure." msgstr "" -#: ../../library/xml.etree.elementtree.rst:94 +#: ../../library/xml.etree.elementtree.rst:93 msgid "" "As an :class:`Element`, ``root`` has a tag and a dictionary of attributes::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:96 +#: ../../library/xml.etree.elementtree.rst:95 msgid "" ">>> root.tag\n" "'data'\n" @@ -179,11 +178,11 @@ msgstr "" ">>> root.attrib\n" "{}" -#: ../../library/xml.etree.elementtree.rst:101 +#: ../../library/xml.etree.elementtree.rst:100 msgid "It also has children nodes over which we can iterate::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:103 +#: ../../library/xml.etree.elementtree.rst:102 msgid "" ">>> for child in root:\n" "... print(child.tag, child.attrib)\n" @@ -199,11 +198,11 @@ msgstr "" "country {'name': 'Singapore'}\n" "country {'name': 'Panama'}" -#: ../../library/xml.etree.elementtree.rst:110 +#: ../../library/xml.etree.elementtree.rst:109 msgid "Children are nested, and we can access specific child nodes by index::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:112 +#: ../../library/xml.etree.elementtree.rst:111 msgid "" ">>> root[0][1].text\n" "'2008'" @@ -211,7 +210,7 @@ msgstr "" ">>> root[0][1].text\n" "'2008'" -#: ../../library/xml.etree.elementtree.rst:118 +#: ../../library/xml.etree.elementtree.rst:117 msgid "" "Not all elements of the XML input will end up as elements of the parsed " "tree. Currently, this module skips over any XML comments, processing " @@ -223,11 +222,11 @@ msgid "" "constructor." msgstr "" -#: ../../library/xml.etree.elementtree.rst:132 +#: ../../library/xml.etree.elementtree.rst:131 msgid "Pull API for non-blocking parsing" msgstr "" -#: ../../library/xml.etree.elementtree.rst:134 +#: ../../library/xml.etree.elementtree.rst:133 msgid "" "Most parsing functions provided by this module require the whole document to " "be read at once before returning any result. It is possible to use an :" @@ -238,7 +237,7 @@ msgid "" "the convenience of fully constructed :class:`Element` objects." msgstr "" -#: ../../library/xml.etree.elementtree.rst:142 +#: ../../library/xml.etree.elementtree.rst:141 msgid "" "The most powerful tool for doing this is :class:`XMLPullParser`. It does " "not require a blocking read to obtain the XML data, and is instead fed with " @@ -246,7 +245,7 @@ msgid "" "XML elements, call :meth:`XMLPullParser.read_events`. Here is an example::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:147 +#: ../../library/xml.etree.elementtree.rst:146 msgid "" ">>> parser = ET.XMLPullParser(['start', 'end'])\n" ">>> parser.feed('sometext')\n" @@ -261,14 +260,14 @@ msgid "" "mytag text= sometext more text" msgstr "" -#: ../../library/xml.etree.elementtree.rst:159 +#: ../../library/xml.etree.elementtree.rst:158 msgid "" "The obvious use case is applications that operate in a non-blocking fashion " "where the XML data is being received from a socket or read incrementally " "from some storage device. In such cases, blocking reads are unacceptable." msgstr "" -#: ../../library/xml.etree.elementtree.rst:163 +#: ../../library/xml.etree.elementtree.rst:162 msgid "" "Because it's so flexible, :class:`XMLPullParser` can be inconvenient to use " "for simpler use-cases. If you don't mind your application blocking on " @@ -278,25 +277,25 @@ msgid "" "memory." msgstr "" -#: ../../library/xml.etree.elementtree.rst:169 +#: ../../library/xml.etree.elementtree.rst:168 msgid "" "Where *immediate* feedback through events is wanted, calling method :meth:" "`XMLPullParser.flush` can help reduce delay; please make sure to study the " "related security notes." msgstr "" -#: ../../library/xml.etree.elementtree.rst:175 +#: ../../library/xml.etree.elementtree.rst:174 msgid "Finding interesting elements" msgstr "" -#: ../../library/xml.etree.elementtree.rst:177 +#: ../../library/xml.etree.elementtree.rst:176 msgid "" ":class:`Element` has some useful methods that help iterate recursively over " "all the sub-tree below it (its children, their children, and so on). For " "example, :meth:`Element.iter`::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:181 +#: ../../library/xml.etree.elementtree.rst:180 msgid "" ">>> for neighbor in root.iter('neighbor'):\n" "... print(neighbor.attrib)\n" @@ -316,7 +315,7 @@ msgstr "" "{'name': 'Costa Rica', 'direction': 'W'}\n" "{'name': 'Colombia', 'direction': 'E'}" -#: ../../library/xml.etree.elementtree.rst:190 +#: ../../library/xml.etree.elementtree.rst:189 msgid "" ":meth:`Element.findall` finds only elements with a tag which are direct " "children of the current element. :meth:`Element.find` finds the *first* " @@ -324,7 +323,7 @@ msgid "" "text content. :meth:`Element.get` accesses the element's attributes::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:195 +#: ../../library/xml.etree.elementtree.rst:194 msgid "" ">>> for country in root.findall('country'):\n" "... rank = country.find('rank').text\n" @@ -344,23 +343,23 @@ msgstr "" "Singapore 4\n" "Panama 68" -#: ../../library/xml.etree.elementtree.rst:204 +#: ../../library/xml.etree.elementtree.rst:203 msgid "" "More sophisticated specification of which elements to look for is possible " "by using :ref:`XPath `." msgstr "" -#: ../../library/xml.etree.elementtree.rst:208 +#: ../../library/xml.etree.elementtree.rst:207 msgid "Modifying an XML File" msgstr "改動 XML 檔案" -#: ../../library/xml.etree.elementtree.rst:210 +#: ../../library/xml.etree.elementtree.rst:209 msgid "" ":class:`ElementTree` provides a simple way to build XML documents and write " "them to files. The :meth:`ElementTree.write` method serves this purpose." msgstr "" -#: ../../library/xml.etree.elementtree.rst:213 +#: ../../library/xml.etree.elementtree.rst:212 msgid "" "Once created, an :class:`Element` object may be manipulated by directly " "changing its fields (such as :attr:`Element.text`), adding and modifying " @@ -368,13 +367,13 @@ msgid "" "example with :meth:`Element.append`)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:218 +#: ../../library/xml.etree.elementtree.rst:217 msgid "" "Let's say we want to add one to each country's rank, and add an ``updated`` " "attribute to the rank element::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:221 +#: ../../library/xml.etree.elementtree.rst:220 msgid "" ">>> for rank in root.iter('rank'):\n" "... new_rank = int(rank.text) + 1\n" @@ -390,12 +389,12 @@ msgstr "" "...\n" ">>> tree.write('output.xml')" -#: ../../library/xml.etree.elementtree.rst:228 -#: ../../library/xml.etree.elementtree.rst:272 +#: ../../library/xml.etree.elementtree.rst:227 +#: ../../library/xml.etree.elementtree.rst:271 msgid "Our XML now looks like this:" msgstr "XML 現在看起來像這樣:" -#: ../../library/xml.etree.elementtree.rst:230 +#: ../../library/xml.etree.elementtree.rst:229 msgid "" "\n" "\n" @@ -445,13 +444,13 @@ msgstr "" " \n" "" -#: ../../library/xml.etree.elementtree.rst:256 +#: ../../library/xml.etree.elementtree.rst:255 msgid "" "We can remove elements using :meth:`Element.remove`. Let's say we want to " "remove all countries with a rank higher than 50::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:259 +#: ../../library/xml.etree.elementtree.rst:258 msgid "" ">>> for country in root.findall('country'):\n" "... # using root.findall() to avoid removal during traversal\n" @@ -462,7 +461,7 @@ msgid "" ">>> tree.write('output.xml')" msgstr "" -#: ../../library/xml.etree.elementtree.rst:267 +#: ../../library/xml.etree.elementtree.rst:266 msgid "" "Note that concurrent modification while iterating can lead to problems, just " "like when iterating and modifying Python lists or dicts. Therefore, the " @@ -470,7 +469,7 @@ msgid "" "only then iterates over the list of matches." msgstr "" -#: ../../library/xml.etree.elementtree.rst:274 +#: ../../library/xml.etree.elementtree.rst:273 msgid "" "\n" "\n" @@ -506,17 +505,17 @@ msgstr "" " \n" "" -#: ../../library/xml.etree.elementtree.rst:294 +#: ../../library/xml.etree.elementtree.rst:293 msgid "Building XML documents" msgstr "" -#: ../../library/xml.etree.elementtree.rst:296 +#: ../../library/xml.etree.elementtree.rst:295 msgid "" "The :func:`SubElement` function also provides a convenient way to create new " "sub-elements for a given element::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:299 +#: ../../library/xml.etree.elementtree.rst:298 msgid "" ">>> a = ET.Element('a')\n" ">>> b = ET.SubElement(a, 'b')\n" @@ -532,11 +531,11 @@ msgstr "" ">>> ET.dump(a)\n" "" -#: ../../library/xml.etree.elementtree.rst:307 +#: ../../library/xml.etree.elementtree.rst:306 msgid "Parsing XML with Namespaces" msgstr "" -#: ../../library/xml.etree.elementtree.rst:309 +#: ../../library/xml.etree.elementtree.rst:308 msgid "" "If the XML input has `namespaces `__, tags and attributes with prefixes in the form ``prefix:" @@ -546,13 +545,13 @@ msgid "" "prefixed tags." msgstr "" -#: ../../library/xml.etree.elementtree.rst:317 +#: ../../library/xml.etree.elementtree.rst:316 msgid "" "Here is an XML example that incorporates two namespaces, one with the prefix " "\"fictional\" and the other serving as the default namespace:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:320 +#: ../../library/xml.etree.elementtree.rst:319 msgid "" "\n" "\n" "" -#: ../../library/xml.etree.elementtree.rst:338 +#: ../../library/xml.etree.elementtree.rst:337 msgid "" "One way to search and explore this XML example is to manually add the URI to " "every tag or attribute in the xpath of a :meth:`~Element.find` or :meth:" "`~Element.findall`::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:342 +#: ../../library/xml.etree.elementtree.rst:341 msgid "" "root = fromstring(xml_text)\n" "for actor in root.findall('{http://people.example.com}actor'):\n" @@ -609,13 +608,13 @@ msgstr "" " for char in actor.findall('{http://characters.example.com}character'):\n" " print(' |-->', char.text)" -#: ../../library/xml.etree.elementtree.rst:349 +#: ../../library/xml.etree.elementtree.rst:348 msgid "" "A better way to search the namespaced XML example is to create a dictionary " "with your own prefixes and use those in the search functions::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:352 +#: ../../library/xml.etree.elementtree.rst:351 msgid "" "ns = {'real_person': 'http://people.example.com',\n" " 'role': 'http://characters.example.com'}\n" @@ -635,11 +634,11 @@ msgstr "" " for char in actor.findall('role:character', ns):\n" " print(' |-->', char.text)" -#: ../../library/xml.etree.elementtree.rst:361 +#: ../../library/xml.etree.elementtree.rst:360 msgid "These two approaches both output::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:363 +#: ../../library/xml.etree.elementtree.rst:362 msgid "" "John Cleese\n" " |--> Lancelot\n" @@ -657,11 +656,11 @@ msgstr "" " |--> Gunther\n" " |--> Commander Clement" -#: ../../library/xml.etree.elementtree.rst:375 +#: ../../library/xml.etree.elementtree.rst:374 msgid "XPath support" msgstr "XPath 支援" -#: ../../library/xml.etree.elementtree.rst:377 +#: ../../library/xml.etree.elementtree.rst:376 msgid "" "This module provides limited support for `XPath expressions `_ for locating elements in a tree. The goal is to support a " @@ -669,19 +668,19 @@ msgid "" "scope of the module." msgstr "" -#: ../../library/xml.etree.elementtree.rst:383 -#: ../../library/xml.etree.elementtree.rst:782 +#: ../../library/xml.etree.elementtree.rst:382 +#: ../../library/xml.etree.elementtree.rst:781 msgid "Example" msgstr "範例" -#: ../../library/xml.etree.elementtree.rst:385 +#: ../../library/xml.etree.elementtree.rst:384 msgid "" "Here's an example that demonstrates some of the XPath capabilities of the " "module. We'll be using the ``countrydata`` XML document from the :ref:" "`Parsing XML ` section::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:389 +#: ../../library/xml.etree.elementtree.rst:388 msgid "" "import xml.etree.ElementTree as ET\n" "\n" @@ -704,35 +703,35 @@ msgid "" "root.findall(\".//neighbor[2]\")" msgstr "" -#: ../../library/xml.etree.elementtree.rst:409 +#: ../../library/xml.etree.elementtree.rst:408 msgid "" "For XML with namespaces, use the usual qualified ``{namespace}tag`` " "notation::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:411 +#: ../../library/xml.etree.elementtree.rst:410 msgid "" "# All dublin-core \"title\" tags in the document\n" "root.findall(\".//{http://purl.org/dc/elements/1.1/}title\")" msgstr "" -#: ../../library/xml.etree.elementtree.rst:416 +#: ../../library/xml.etree.elementtree.rst:415 msgid "Supported XPath syntax" msgstr "" -#: ../../library/xml.etree.elementtree.rst:421 +#: ../../library/xml.etree.elementtree.rst:420 msgid "Syntax" msgstr "語法" -#: ../../library/xml.etree.elementtree.rst:421 +#: ../../library/xml.etree.elementtree.rst:420 msgid "Meaning" msgstr "意義" -#: ../../library/xml.etree.elementtree.rst:423 +#: ../../library/xml.etree.elementtree.rst:422 msgid "``tag``" msgstr "``tag``" -#: ../../library/xml.etree.elementtree.rst:423 +#: ../../library/xml.etree.elementtree.rst:422 msgid "" "Selects all child elements with the given tag. For example, ``spam`` selects " "all child elements named ``spam``, and ``spam/egg`` selects all " @@ -742,133 +741,133 @@ msgid "" "not in a namespace." msgstr "" -#: ../../library/xml.etree.elementtree.rst:432 +#: ../../library/xml.etree.elementtree.rst:431 msgid "Support for star-wildcards was added." msgstr "新增對星號萬用字元的支援。" -#: ../../library/xml.etree.elementtree.rst:435 +#: ../../library/xml.etree.elementtree.rst:434 msgid "``*``" msgstr "``*``" -#: ../../library/xml.etree.elementtree.rst:435 +#: ../../library/xml.etree.elementtree.rst:434 msgid "" "Selects all child elements, including comments and processing instructions. " "For example, ``*/egg`` selects all grandchildren named ``egg``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:439 +#: ../../library/xml.etree.elementtree.rst:438 msgid "``.``" msgstr "``.``" -#: ../../library/xml.etree.elementtree.rst:439 +#: ../../library/xml.etree.elementtree.rst:438 msgid "" "Selects the current node. This is mostly useful at the beginning of the " "path, to indicate that it's a relative path." msgstr "" -#: ../../library/xml.etree.elementtree.rst:443 +#: ../../library/xml.etree.elementtree.rst:442 msgid "``//``" msgstr "``//``" -#: ../../library/xml.etree.elementtree.rst:443 +#: ../../library/xml.etree.elementtree.rst:442 msgid "" "Selects all subelements, on all levels beneath the current element. For " "example, ``.//egg`` selects all ``egg`` elements in the entire tree." msgstr "" -#: ../../library/xml.etree.elementtree.rst:447 +#: ../../library/xml.etree.elementtree.rst:446 msgid "``..``" msgstr "``..``" -#: ../../library/xml.etree.elementtree.rst:447 +#: ../../library/xml.etree.elementtree.rst:446 msgid "" "Selects the parent element. Returns ``None`` if the path attempts to reach " "the ancestors of the start element (the element ``find`` was called on)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:451 +#: ../../library/xml.etree.elementtree.rst:450 msgid "``[@attrib]``" msgstr "``[@attrib]``" -#: ../../library/xml.etree.elementtree.rst:451 +#: ../../library/xml.etree.elementtree.rst:450 msgid "Selects all elements that have the given attribute." msgstr "選擇所有具有給定屬性的元素。" -#: ../../library/xml.etree.elementtree.rst:453 +#: ../../library/xml.etree.elementtree.rst:452 msgid "``[@attrib='value']``" msgstr "``[@attrib='value']``" -#: ../../library/xml.etree.elementtree.rst:453 +#: ../../library/xml.etree.elementtree.rst:452 msgid "" "Selects all elements for which the given attribute has the given value. The " "value cannot contain quotes." msgstr "" -#: ../../library/xml.etree.elementtree.rst:457 +#: ../../library/xml.etree.elementtree.rst:456 msgid "``[@attrib!='value']``" msgstr "``[@attrib!='value']``" -#: ../../library/xml.etree.elementtree.rst:457 +#: ../../library/xml.etree.elementtree.rst:456 msgid "" "Selects all elements for which the given attribute does not have the given " "value. The value cannot contain quotes." msgstr "" -#: ../../library/xml.etree.elementtree.rst:463 +#: ../../library/xml.etree.elementtree.rst:462 msgid "``[tag]``" msgstr "``[tag]``" -#: ../../library/xml.etree.elementtree.rst:463 +#: ../../library/xml.etree.elementtree.rst:462 msgid "" "Selects all elements that have a child named ``tag``. Only immediate " "children are supported." msgstr "" -#: ../../library/xml.etree.elementtree.rst:466 +#: ../../library/xml.etree.elementtree.rst:465 msgid "``[.='text']``" msgstr "``[.='text']``" -#: ../../library/xml.etree.elementtree.rst:466 +#: ../../library/xml.etree.elementtree.rst:465 msgid "" "Selects all elements whose complete text content, including descendants, " "equals the given ``text``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:471 +#: ../../library/xml.etree.elementtree.rst:470 msgid "``[.!='text']``" msgstr "``[.!='text']``" -#: ../../library/xml.etree.elementtree.rst:471 +#: ../../library/xml.etree.elementtree.rst:470 msgid "" "Selects all elements whose complete text content, including descendants, " "does not equal the given ``text``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:477 +#: ../../library/xml.etree.elementtree.rst:476 msgid "``[tag='text']``" msgstr "``[tag='text']``" -#: ../../library/xml.etree.elementtree.rst:477 +#: ../../library/xml.etree.elementtree.rst:476 msgid "" "Selects all elements that have a child named ``tag`` whose complete text " "content, including descendants, equals the given ``text``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:481 +#: ../../library/xml.etree.elementtree.rst:480 msgid "``[tag!='text']``" msgstr "``[tag!='text']``" -#: ../../library/xml.etree.elementtree.rst:481 +#: ../../library/xml.etree.elementtree.rst:480 msgid "" "Selects all elements that have a child named ``tag`` whose complete text " "content, including descendants, does not equal the given ``text``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:487 +#: ../../library/xml.etree.elementtree.rst:486 msgid "``[position]``" msgstr "``[position]``" -#: ../../library/xml.etree.elementtree.rst:487 +#: ../../library/xml.etree.elementtree.rst:486 msgid "" "Selects all elements that are located at the given position. The position " "can be either an integer (1 is the first position), the expression " @@ -876,28 +875,28 @@ msgid "" "position (e.g. ``last()-1``)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:494 +#: ../../library/xml.etree.elementtree.rst:493 msgid "" "Predicates (expressions within square brackets) must be preceded by a tag " "name, an asterisk, or another predicate. ``position`` predicates must be " "preceded by a tag name." msgstr "" -#: ../../library/xml.etree.elementtree.rst:499 -#: ../../library/xml.etree.elementtree.rst:834 +#: ../../library/xml.etree.elementtree.rst:498 +#: ../../library/xml.etree.elementtree.rst:833 msgid "Reference" msgstr "" -#: ../../library/xml.etree.elementtree.rst:504 -#: ../../library/xml.etree.elementtree.rst:839 +#: ../../library/xml.etree.elementtree.rst:503 +#: ../../library/xml.etree.elementtree.rst:838 msgid "Functions" msgstr "函式" -#: ../../library/xml.etree.elementtree.rst:508 +#: ../../library/xml.etree.elementtree.rst:507 msgid "`C14N 2.0 `_ transformation function." msgstr "" -#: ../../library/xml.etree.elementtree.rst:510 +#: ../../library/xml.etree.elementtree.rst:509 msgid "" "Canonicalization is a way to normalise XML output in a way that allows byte-" "by-byte comparisons and digital signatures. It reduces the freedom that XML " @@ -906,7 +905,7 @@ msgid "" "declarations, the ordering of attributes, and ignorable whitespace." msgstr "" -#: ../../library/xml.etree.elementtree.rst:516 +#: ../../library/xml.etree.elementtree.rst:515 msgid "" "This function takes an XML data string (*xml_data*) or a file path or file-" "like object (*from_file*) as input, converts it to the canonical form, and " @@ -915,11 +914,11 @@ msgid "" "should therefore be opened in text mode with ``utf-8`` encoding." msgstr "" -#: ../../library/xml.etree.elementtree.rst:523 +#: ../../library/xml.etree.elementtree.rst:522 msgid "Typical uses::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:525 +#: ../../library/xml.etree.elementtree.rst:524 msgid "" "xml_data = \"...\"\n" "print(canonicalize(xml_data))\n" @@ -939,59 +938,59 @@ msgstr "" "with open(\"c14n_output.xml\", mode='w', encoding='utf-8') as out_file:\n" " canonicalize(from_file=\"inputfile.xml\", out=out_file)" -#: ../../library/xml.etree.elementtree.rst:534 +#: ../../library/xml.etree.elementtree.rst:533 msgid "The configuration *options* are as follows:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:536 +#: ../../library/xml.etree.elementtree.rst:535 msgid "*with_comments*: set to true to include comments (default: false)" msgstr "" -#: ../../library/xml.etree.elementtree.rst:537 +#: ../../library/xml.etree.elementtree.rst:536 msgid "" "*strip_text*: set to true to strip whitespace before and after text content" msgstr "" -#: ../../library/xml.etree.elementtree.rst:538 -#: ../../library/xml.etree.elementtree.rst:540 +#: ../../library/xml.etree.elementtree.rst:537 +#: ../../library/xml.etree.elementtree.rst:539 msgid "(default: false)" msgstr "" -#: ../../library/xml.etree.elementtree.rst:539 +#: ../../library/xml.etree.elementtree.rst:538 msgid "" "*rewrite_prefixes*: set to true to replace namespace prefixes by " "\"n{number}\"" msgstr "" -#: ../../library/xml.etree.elementtree.rst:541 +#: ../../library/xml.etree.elementtree.rst:540 msgid "*qname_aware_tags*: a set of qname aware tag names in which prefixes" msgstr "" -#: ../../library/xml.etree.elementtree.rst:542 -#: ../../library/xml.etree.elementtree.rst:544 +#: ../../library/xml.etree.elementtree.rst:541 +#: ../../library/xml.etree.elementtree.rst:543 msgid "should be replaced in text content (default: empty)" msgstr "" -#: ../../library/xml.etree.elementtree.rst:543 +#: ../../library/xml.etree.elementtree.rst:542 msgid "" "*qname_aware_attrs*: a set of qname aware attribute names in which prefixes" msgstr "" -#: ../../library/xml.etree.elementtree.rst:545 +#: ../../library/xml.etree.elementtree.rst:544 msgid "*exclude_attrs*: a set of attribute names that should not be serialised" msgstr "" -#: ../../library/xml.etree.elementtree.rst:546 +#: ../../library/xml.etree.elementtree.rst:545 msgid "*exclude_tags*: a set of tag names that should not be serialised" msgstr "" -#: ../../library/xml.etree.elementtree.rst:548 +#: ../../library/xml.etree.elementtree.rst:547 msgid "" "In the option list above, \"a set\" refers to any collection or iterable of " "strings, no ordering is expected." msgstr "" -#: ../../library/xml.etree.elementtree.rst:556 +#: ../../library/xml.etree.elementtree.rst:555 msgid "" "Comment element factory. This factory function creates a special element " "that will be serialized as an XML comment by the standard serializer. The " @@ -1000,7 +999,7 @@ msgid "" "representing a comment." msgstr "" -#: ../../library/xml.etree.elementtree.rst:562 +#: ../../library/xml.etree.elementtree.rst:561 msgid "" "Note that :class:`XMLParser` skips over comments in the input instead of " "creating comment objects for them. An :class:`ElementTree` will only contain " @@ -1008,29 +1007,29 @@ msgid "" "class:`Element` methods." msgstr "" -#: ../../library/xml.etree.elementtree.rst:569 +#: ../../library/xml.etree.elementtree.rst:568 msgid "" "Writes an element tree or element structure to sys.stdout. This function " "should be used for debugging only." msgstr "" -#: ../../library/xml.etree.elementtree.rst:572 +#: ../../library/xml.etree.elementtree.rst:571 msgid "" "The exact output format is implementation dependent. In this version, it's " "written as an ordinary XML file." msgstr "" -#: ../../library/xml.etree.elementtree.rst:575 +#: ../../library/xml.etree.elementtree.rst:574 msgid "*elem* is an element tree or an individual element." msgstr "" -#: ../../library/xml.etree.elementtree.rst:577 +#: ../../library/xml.etree.elementtree.rst:576 msgid "" "The :func:`dump` function now preserves the attribute order specified by the " "user." msgstr "" -#: ../../library/xml.etree.elementtree.rst:584 +#: ../../library/xml.etree.elementtree.rst:583 msgid "" "Parses an XML section from a string constant. Same as :func:`XML`. *text* " "is a string containing XML data. *parser* is an optional parser instance. " @@ -1038,7 +1037,7 @@ msgid "" "class:`Element` instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:592 +#: ../../library/xml.etree.elementtree.rst:591 msgid "" "Parses an XML document from a sequence of string fragments. *sequence* is a " "list or other sequence containing XML data fragments. *parser* is an " @@ -1046,7 +1045,7 @@ msgid "" "parser is used. Returns an :class:`Element` instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:602 +#: ../../library/xml.etree.elementtree.rst:601 msgid "" "Appends whitespace to the subtree to indent the tree visually. This can be " "used to generate pretty-printed XML output. *tree* can be an Element or " @@ -1056,13 +1055,13 @@ msgid "" "indentation level as *level*." msgstr "" -#: ../../library/xml.etree.elementtree.rst:614 +#: ../../library/xml.etree.elementtree.rst:613 msgid "" "Check if an object appears to be a valid element object. *element* is an " "element instance. Return ``True`` if this is an element object." msgstr "" -#: ../../library/xml.etree.elementtree.rst:620 +#: ../../library/xml.etree.elementtree.rst:619 msgid "" "Parses an XML section into an element tree incrementally, and reports what's " "going on to the user. *source* is a filename or :term:`file object` " @@ -1080,7 +1079,7 @@ msgid "" "file object if *source* is a filename." msgstr "" -#: ../../library/xml.etree.elementtree.rst:636 +#: ../../library/xml.etree.elementtree.rst:635 msgid "" "Note that while :func:`iterparse` builds the tree incrementally, it issues " "blocking reads on *source* (or the file it names). As such, it's unsuitable " @@ -1088,7 +1087,7 @@ msgid "" "parsing, see :class:`XMLPullParser`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:643 +#: ../../library/xml.etree.elementtree.rst:642 msgid "" ":func:`iterparse` only guarantees that it has seen the \">\" character of a " "starting tag when it emits a \"start\" event, so the attributes are defined, " @@ -1097,25 +1096,25 @@ msgid "" "present." msgstr "" -#: ../../library/xml.etree.elementtree.rst:649 -#: ../../library/xml.etree.elementtree.rst:1522 +#: ../../library/xml.etree.elementtree.rst:648 +#: ../../library/xml.etree.elementtree.rst:1521 msgid "If you need a fully populated element, look for \"end\" events instead." msgstr "" -#: ../../library/xml.etree.elementtree.rst:651 +#: ../../library/xml.etree.elementtree.rst:650 msgid "The *parser* argument." msgstr "*parser* 引數。" -#: ../../library/xml.etree.elementtree.rst:654 -#: ../../library/xml.etree.elementtree.rst:1526 +#: ../../library/xml.etree.elementtree.rst:653 +#: ../../library/xml.etree.elementtree.rst:1525 msgid "The ``comment`` and ``pi`` events were added." msgstr "新增 *context* 與 *check_hostname* 事件。" -#: ../../library/xml.etree.elementtree.rst:657 +#: ../../library/xml.etree.elementtree.rst:656 msgid "Added the :meth:`!close` method." msgstr "" -#: ../../library/xml.etree.elementtree.rst:663 +#: ../../library/xml.etree.elementtree.rst:662 msgid "" "Parses an XML section into an element tree. *source* is a filename or file " "object containing XML data. *parser* is an optional parser instance. If " @@ -1123,7 +1122,7 @@ msgid "" "class:`ElementTree` instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:671 +#: ../../library/xml.etree.elementtree.rst:670 msgid "" "PI element factory. This factory function creates a special element that " "will be serialized as an XML processing instruction. *target* is a string " @@ -1131,7 +1130,7 @@ msgid "" "given. Returns an element instance, representing a processing instruction." msgstr "" -#: ../../library/xml.etree.elementtree.rst:676 +#: ../../library/xml.etree.elementtree.rst:675 msgid "" "Note that :class:`XMLParser` skips over processing instructions in the input " "instead of creating PI objects for them. An :class:`ElementTree` will only " @@ -1139,7 +1138,7 @@ msgid "" "tree using one of the :class:`Element` methods." msgstr "" -#: ../../library/xml.etree.elementtree.rst:684 +#: ../../library/xml.etree.elementtree.rst:683 msgid "" "Registers a namespace prefix. The registry is global, and any existing " "mapping for either the given prefix or the namespace URI will be removed. " @@ -1148,13 +1147,13 @@ msgid "" "all possible." msgstr "" -#: ../../library/xml.etree.elementtree.rst:695 +#: ../../library/xml.etree.elementtree.rst:694 msgid "" "Subelement factory. This function creates an element instance, and appends " "it to an existing element." msgstr "" -#: ../../library/xml.etree.elementtree.rst:698 +#: ../../library/xml.etree.elementtree.rst:697 msgid "" "The element name, attribute names, and attribute values can be either " "bytestrings or Unicode strings. *parent* is the parent element. *tag* is " @@ -1163,7 +1162,7 @@ msgid "" "arguments. Returns an element instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:709 +#: ../../library/xml.etree.elementtree.rst:708 msgid "" "Generates a string representation of an XML element, including all " "subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is " @@ -1175,24 +1174,24 @@ msgid "" "Returns an (optionally) encoded string containing the XML data." msgstr "" -#: ../../library/xml.etree.elementtree.rst:718 -#: ../../library/xml.etree.elementtree.rst:745 -#: ../../library/xml.etree.elementtree.rst:1199 +#: ../../library/xml.etree.elementtree.rst:717 +#: ../../library/xml.etree.elementtree.rst:744 +#: ../../library/xml.etree.elementtree.rst:1198 msgid "Added the *short_empty_elements* parameter." msgstr "新增 *short_empty_elements* 參數。" -#: ../../library/xml.etree.elementtree.rst:721 -#: ../../library/xml.etree.elementtree.rst:748 +#: ../../library/xml.etree.elementtree.rst:720 +#: ../../library/xml.etree.elementtree.rst:747 msgid "Added the *xml_declaration* and *default_namespace* parameters." msgstr "新增 *xml_declaration* 與 *default_namespace* 參數。" -#: ../../library/xml.etree.elementtree.rst:724 +#: ../../library/xml.etree.elementtree.rst:723 msgid "" "The :func:`tostring` function now preserves the attribute order specified by " "the user." msgstr "" -#: ../../library/xml.etree.elementtree.rst:733 +#: ../../library/xml.etree.elementtree.rst:732 msgid "" "Generates a string representation of an XML element, including all " "subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is " @@ -1206,13 +1205,13 @@ msgid "" "join(tostringlist(element)) == tostring(element)``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:751 +#: ../../library/xml.etree.elementtree.rst:750 msgid "" "The :func:`tostringlist` function now preserves the attribute order " "specified by the user." msgstr "" -#: ../../library/xml.etree.elementtree.rst:758 +#: ../../library/xml.etree.elementtree.rst:757 msgid "" "Parses an XML section from a string constant. This function can be used to " "embed \"XML literals\" in Python code. *text* is a string containing XML " @@ -1220,7 +1219,7 @@ msgid "" "class:`XMLParser` parser is used. Returns an :class:`Element` instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:766 +#: ../../library/xml.etree.elementtree.rst:765 msgid "" "Parses an XML section from a string constant, and also returns a dictionary " "which maps from element id:s to elements. *text* is a string containing XML " @@ -1229,11 +1228,11 @@ msgid "" "`Element` instance and a dictionary." msgstr "" -#: ../../library/xml.etree.elementtree.rst:776 +#: ../../library/xml.etree.elementtree.rst:775 msgid "XInclude support" msgstr "" -#: ../../library/xml.etree.elementtree.rst:778 +#: ../../library/xml.etree.elementtree.rst:777 msgid "" "This module provides limited support for `XInclude directives `_, via the :mod:`xml.etree.ElementInclude` helper " @@ -1241,7 +1240,7 @@ msgid "" "element trees, based on information in the tree." msgstr "" -#: ../../library/xml.etree.elementtree.rst:784 +#: ../../library/xml.etree.elementtree.rst:783 msgid "" "Here's an example that demonstrates use of the XInclude module. To include " "an XML document in the current document, use the ``{http://www.w3.org/2001/" @@ -1249,7 +1248,7 @@ msgid "" "and use the **href** attribute to specify the document to include." msgstr "" -#: ../../library/xml.etree.elementtree.rst:786 +#: ../../library/xml.etree.elementtree.rst:785 msgid "" "\n" "\n" @@ -1261,20 +1260,20 @@ msgstr "" " \n" "" -#: ../../library/xml.etree.elementtree.rst:793 +#: ../../library/xml.etree.elementtree.rst:792 msgid "" "By default, the **href** attribute is treated as a file name. You can use " "custom loaders to override this behaviour. Also note that the standard " "helper does not support XPointer syntax." msgstr "" -#: ../../library/xml.etree.elementtree.rst:795 +#: ../../library/xml.etree.elementtree.rst:794 msgid "" "To process this file, load it as usual, and pass the root element to the :" "mod:`xml.etree.ElementTree` module:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:797 +#: ../../library/xml.etree.elementtree.rst:796 msgid "" "from xml.etree import ElementTree, ElementInclude\n" "\n" @@ -1290,14 +1289,14 @@ msgstr "" "\n" "ElementInclude.include(root)" -#: ../../library/xml.etree.elementtree.rst:806 +#: ../../library/xml.etree.elementtree.rst:805 msgid "" "The ElementInclude module replaces the ``{http://www.w3.org/2001/XInclude}" "include`` element with the root element from the **source.xml** document. " "The result might look something like this:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:808 +#: ../../library/xml.etree.elementtree.rst:807 msgid "" "\n" " This is a paragraph.\n" @@ -1307,19 +1306,19 @@ msgstr "" " This is a paragraph.\n" "" -#: ../../library/xml.etree.elementtree.rst:814 +#: ../../library/xml.etree.elementtree.rst:813 msgid "" "If the **parse** attribute is omitted, it defaults to \"xml\". The href " "attribute is required." msgstr "" -#: ../../library/xml.etree.elementtree.rst:816 +#: ../../library/xml.etree.elementtree.rst:815 msgid "" "To include a text document, use the ``{http://www.w3.org/2001/XInclude}" "include`` element, and set the **parse** attribute to \"text\":" msgstr "" -#: ../../library/xml.etree.elementtree.rst:818 +#: ../../library/xml.etree.elementtree.rst:817 msgid "" "\n" "\n" @@ -1331,11 +1330,11 @@ msgstr "" " Copyright (c) .\n" "" -#: ../../library/xml.etree.elementtree.rst:825 +#: ../../library/xml.etree.elementtree.rst:824 msgid "The result might look something like:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:827 +#: ../../library/xml.etree.elementtree.rst:826 msgid "" "\n" " Copyright (c) 2003.\n" @@ -1345,7 +1344,7 @@ msgstr "" " Copyright (c) 2003.\n" "" -#: ../../library/xml.etree.elementtree.rst:845 +#: ../../library/xml.etree.elementtree.rst:844 msgid "" "Default loader. This default loader reads an included resource from disk. " "*href* is a URL. *parse* is for parse mode either \"xml\" or \"text\". " @@ -1356,7 +1355,7 @@ msgid "" "``None`` or raise an exception." msgstr "" -#: ../../library/xml.etree.elementtree.rst:856 +#: ../../library/xml.etree.elementtree.rst:855 msgid "" "This function expands XInclude directives in-place in tree pointed by " "*elem*. *elem* is either the root :class:`~xml.etree.ElementTree.Element` or " @@ -1369,21 +1368,21 @@ msgid "" "malicious content explosion. Pass ``None`` to disable the limitation." msgstr "" -#: ../../library/xml.etree.elementtree.rst:866 +#: ../../library/xml.etree.elementtree.rst:865 msgid "Added the *base_url* and *max_depth* parameters." msgstr "新增 *base_url* 與 *max_depth* 參數。" -#: ../../library/xml.etree.elementtree.rst:873 +#: ../../library/xml.etree.elementtree.rst:872 msgid "Element Objects" msgstr "Element 物件" -#: ../../library/xml.etree.elementtree.rst:881 +#: ../../library/xml.etree.elementtree.rst:880 msgid "" "Element class. This class defines the Element interface, and provides a " "reference implementation of this interface." msgstr "" -#: ../../library/xml.etree.elementtree.rst:884 +#: ../../library/xml.etree.elementtree.rst:883 msgid "" "The element name, attribute names, and attribute values can be either " "bytestrings or Unicode strings. *tag* is the element name. *attrib* is an " @@ -1391,13 +1390,13 @@ msgid "" "additional attributes, given as keyword arguments." msgstr "" -#: ../../library/xml.etree.elementtree.rst:892 +#: ../../library/xml.etree.elementtree.rst:891 msgid "" "A string identifying what kind of data this element represents (the element " "type, in other words)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:899 +#: ../../library/xml.etree.elementtree.rst:898 msgid "" "These attributes can be used to hold additional data associated with the " "element. Their values are usually strings but may be any application-" @@ -1408,11 +1407,11 @@ msgid "" "the XML data" msgstr "" -#: ../../library/xml.etree.elementtree.rst:907 +#: ../../library/xml.etree.elementtree.rst:906 msgid "1234" msgstr "1234" -#: ../../library/xml.etree.elementtree.rst:911 +#: ../../library/xml.etree.elementtree.rst:910 msgid "" "the *a* element has ``None`` for both *text* and *tail* attributes, the *b* " "element has *text* ``\"1\"`` and *tail* ``\"4\"``, the *c* element has " @@ -1420,17 +1419,17 @@ msgid "" "``None`` and *tail* ``\"3\"``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:916 +#: ../../library/xml.etree.elementtree.rst:915 msgid "" "To collect the inner text of an element, see :meth:`itertext`, for example " "``\"\".join(element.itertext())``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:919 +#: ../../library/xml.etree.elementtree.rst:918 msgid "Applications may store arbitrary objects in these attributes." msgstr "" -#: ../../library/xml.etree.elementtree.rst:924 +#: ../../library/xml.etree.elementtree.rst:923 msgid "" "A dictionary containing the element's attributes. Note that while the " "*attrib* value is always a real mutable Python dictionary, an ElementTree " @@ -1439,59 +1438,59 @@ msgid "" "implementations, use the dictionary methods below whenever possible." msgstr "" -#: ../../library/xml.etree.elementtree.rst:930 +#: ../../library/xml.etree.elementtree.rst:929 msgid "The following dictionary-like methods work on the element attributes." msgstr "" -#: ../../library/xml.etree.elementtree.rst:935 +#: ../../library/xml.etree.elementtree.rst:934 msgid "" "Resets an element. This function removes all subelements, clears all " "attributes, and sets the text and tail attributes to ``None``." msgstr "" -#: ../../library/xml.etree.elementtree.rst:941 +#: ../../library/xml.etree.elementtree.rst:940 msgid "Gets the element attribute named *key*." msgstr "" -#: ../../library/xml.etree.elementtree.rst:943 +#: ../../library/xml.etree.elementtree.rst:942 msgid "" "Returns the attribute value, or *default* if the attribute was not found." msgstr "" -#: ../../library/xml.etree.elementtree.rst:948 +#: ../../library/xml.etree.elementtree.rst:947 msgid "" "Returns the element attributes as a sequence of (name, value) pairs. The " "attributes are returned in an arbitrary order." msgstr "" -#: ../../library/xml.etree.elementtree.rst:954 +#: ../../library/xml.etree.elementtree.rst:953 msgid "" "Returns the elements attribute names as a list. The names are returned in " "an arbitrary order." msgstr "" -#: ../../library/xml.etree.elementtree.rst:960 +#: ../../library/xml.etree.elementtree.rst:959 msgid "Set the attribute *key* on the element to *value*." msgstr "" -#: ../../library/xml.etree.elementtree.rst:962 +#: ../../library/xml.etree.elementtree.rst:961 msgid "The following methods work on the element's children (subelements)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:967 +#: ../../library/xml.etree.elementtree.rst:966 msgid "" "Adds the element *subelement* to the end of this element's internal list of " "subelements. Raises :exc:`TypeError` if *subelement* is not an :class:" "`Element`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:974 +#: ../../library/xml.etree.elementtree.rst:973 msgid "" "Appends *subelements* from an iterable of elements. Raises :exc:`TypeError` " "if a subelement is not an :class:`Element`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:982 +#: ../../library/xml.etree.elementtree.rst:981 msgid "" "Finds the first subelement matching *match*. *match* may be a tag name or " "a :ref:`path `. Returns an element instance or " @@ -1500,7 +1499,7 @@ msgid "" "expression into the given namespace." msgstr "" -#: ../../library/xml.etree.elementtree.rst:991 +#: ../../library/xml.etree.elementtree.rst:990 msgid "" "Finds all matching subelements, by tag name or :ref:`path `. Returns a list containing all matching elements in document " @@ -1509,7 +1508,7 @@ msgid "" "expression into the given namespace." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1000 +#: ../../library/xml.etree.elementtree.rst:999 msgid "" "Finds text for the first subelement matching *match*. *match* may be a tag " "name or a :ref:`path `. Returns the text content of the " @@ -1520,13 +1519,13 @@ msgid "" "into the given namespace." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1011 +#: ../../library/xml.etree.elementtree.rst:1010 msgid "" "Inserts *subelement* at the given position in this element. Raises :exc:" "`TypeError` if *subelement* is not an :class:`Element`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1017 +#: ../../library/xml.etree.elementtree.rst:1016 msgid "" "Creates a tree :term:`iterator` with the current element as the root. The " "iterator iterates over this element and all elements below it, in document " @@ -1535,7 +1534,7 @@ msgid "" "structure is modified during iteration, the result is undefined." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1028 +#: ../../library/xml.etree.elementtree.rst:1027 msgid "" "Finds all matching subelements, by tag name or :ref:`path `. Returns an iterable yielding all matching elements in document " @@ -1543,33 +1542,33 @@ msgid "" "name." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1039 +#: ../../library/xml.etree.elementtree.rst:1038 msgid "" "Creates a text iterator. The iterator loops over this element and all " "subelements, in document order, and returns all inner text." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1047 +#: ../../library/xml.etree.elementtree.rst:1046 msgid "" "Creates a new element object of the same type as this element. Do not call " "this method, use the :func:`SubElement` factory function instead." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1053 +#: ../../library/xml.etree.elementtree.rst:1052 msgid "" "Removes *subelement* from the element. Unlike the find\\* methods this " "method compares elements based on the instance identity, not on tag value or " "contents." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1057 +#: ../../library/xml.etree.elementtree.rst:1056 msgid "" ":class:`Element` objects also support the following sequence type methods " "for working with subelements: :meth:`~object.__delitem__`, :meth:`~object." "__getitem__`, :meth:`~object.__setitem__`, :meth:`~object.__len__`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1062 +#: ../../library/xml.etree.elementtree.rst:1061 msgid "" "Caution: Elements with no subelements will test as ``False``. In a future " "release of Python, all elements will test as ``True`` regardless of whether " @@ -1577,7 +1576,7 @@ msgid "" "None`` tests.::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1067 +#: ../../library/xml.etree.elementtree.rst:1066 msgid "" "element = root.find('foo')\n" "\n" @@ -1588,11 +1587,11 @@ msgid "" " print(\"element not found\")" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1075 +#: ../../library/xml.etree.elementtree.rst:1074 msgid "Testing the truth value of an Element emits :exc:`DeprecationWarning`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1078 +#: ../../library/xml.etree.elementtree.rst:1077 msgid "" "Prior to Python 3.8, the serialisation order of the XML attributes of " "elements was artificially made predictable by sorting the attributes by " @@ -1601,7 +1600,7 @@ msgid "" "attributes were originally parsed or created by user code." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1084 +#: ../../library/xml.etree.elementtree.rst:1083 msgid "" "In general, user code should try not to depend on a specific ordering of " "attributes, given that the `XML Information Set \n" " \n" @@ -1750,13 +1749,13 @@ msgstr "" " \n" "" -#: ../../library/xml.etree.elementtree.rst:1219 +#: ../../library/xml.etree.elementtree.rst:1218 msgid "" "Example of changing the attribute \"target\" of every link in first " "paragraph::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1221 +#: ../../library/xml.etree.elementtree.rst:1220 msgid "" ">>> from xml.etree.ElementTree import ElementTree\n" ">>> tree = ElementTree()\n" @@ -1774,11 +1773,11 @@ msgid "" ">>> tree.write(\"output.xhtml\")" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1239 +#: ../../library/xml.etree.elementtree.rst:1238 msgid "QName Objects" msgstr "QName 物件" -#: ../../library/xml.etree.elementtree.rst:1244 +#: ../../library/xml.etree.elementtree.rst:1243 msgid "" "QName wrapper. This can be used to wrap a QName attribute value, in order " "to get proper namespace handling on output. *text_or_uri* is a string " @@ -1788,11 +1787,11 @@ msgid "" "class:`QName` instances are opaque." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1256 +#: ../../library/xml.etree.elementtree.rst:1255 msgid "TreeBuilder Objects" msgstr "TreeBuilder 物件" -#: ../../library/xml.etree.elementtree.rst:1262 +#: ../../library/xml.etree.elementtree.rst:1261 msgid "" "Generic element structure builder. This builder converts a sequence of " "start, data, end, comment and pi method calls to a well-formed element " @@ -1800,14 +1799,14 @@ msgid "" "custom XML parser, or a parser for some other XML-like format." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1267 +#: ../../library/xml.etree.elementtree.rst:1266 msgid "" "*element_factory*, when given, must be a callable accepting two positional " "arguments: a tag and a dict of attributes. It is expected to return a new " "element instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1271 +#: ../../library/xml.etree.elementtree.rst:1270 msgid "" "The *comment_factory* and *pi_factory* functions, when given, should behave " "like the :func:`Comment` and :func:`ProcessingInstruction` functions to " @@ -1817,56 +1816,56 @@ msgid "" "element (but not outside of it)." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1280 +#: ../../library/xml.etree.elementtree.rst:1279 msgid "" "Flushes the builder buffers, and returns the toplevel document element. " "Returns an :class:`Element` instance." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1286 +#: ../../library/xml.etree.elementtree.rst:1285 msgid "" "Adds text to the current element. *data* is a string. This should be " "either a bytestring, or a Unicode string." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1292 +#: ../../library/xml.etree.elementtree.rst:1291 msgid "" "Closes the current element. *tag* is the element name. Returns the closed " "element." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1298 +#: ../../library/xml.etree.elementtree.rst:1297 msgid "" "Opens a new element. *tag* is the element name. *attrs* is a dictionary " "containing element attributes. Returns the opened element." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1304 +#: ../../library/xml.etree.elementtree.rst:1303 msgid "" "Creates a comment with the given *text*. If ``insert_comments`` is true, " "this will also add it to the tree." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1312 +#: ../../library/xml.etree.elementtree.rst:1311 msgid "" "Creates a process instruction with the given *target* name and *text*. If " "``insert_pis`` is true, this will also add it to the tree." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1318 +#: ../../library/xml.etree.elementtree.rst:1317 msgid "" "In addition, a custom :class:`TreeBuilder` object can provide the following " "methods:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1323 +#: ../../library/xml.etree.elementtree.rst:1322 msgid "" "Handles a doctype declaration. *name* is the doctype name. *pubid* is the " "public identifier. *system* is the system identifier. This method does not " "exist on the default :class:`TreeBuilder` class." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1331 +#: ../../library/xml.etree.elementtree.rst:1330 msgid "" "Is called whenever the parser encounters a new namespace declaration, before " "the ``start()`` callback for the opening element that defines it. *prefix* " @@ -1874,14 +1873,14 @@ msgid "" "otherwise. *uri* is the namespace URI." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1340 +#: ../../library/xml.etree.elementtree.rst:1339 msgid "" "Is called after the ``end()`` callback of an element that declared a " "namespace prefix mapping, with the name of the *prefix* that went out of " "scope." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1352 +#: ../../library/xml.etree.elementtree.rst:1351 msgid "" "A `C14N 2.0 `_ writer. Arguments are the " "same as for the :func:`canonicalize` function. This class does not build a " @@ -1889,11 +1888,11 @@ msgid "" "using the *write* function." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1363 +#: ../../library/xml.etree.elementtree.rst:1362 msgid "XMLParser Objects" msgstr "XMLParser 物件" -#: ../../library/xml.etree.elementtree.rst:1368 +#: ../../library/xml.etree.elementtree.rst:1367 msgid "" "This class is the low-level building block of the module. It uses :mod:`xml." "parsers.expat` for efficient, event-based parsing of XML. It can be fed XML " @@ -1904,25 +1903,25 @@ msgid "" "XML file." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1376 +#: ../../library/xml.etree.elementtree.rst:1375 msgid "" "Parameters are now :ref:`keyword-only `. The *html* " "argument is no longer supported." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1383 +#: ../../library/xml.etree.elementtree.rst:1382 msgid "" "Finishes feeding data to the parser. Returns the result of calling the " "``close()`` method of the *target* passed during construction; by default, " "this is the toplevel document element." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1390 +#: ../../library/xml.etree.elementtree.rst:1389 msgid "Feeds data to the parser. *data* is encoded data." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1395 -#: ../../library/xml.etree.elementtree.rst:1473 +#: ../../library/xml.etree.elementtree.rst:1394 +#: ../../library/xml.etree.elementtree.rst:1472 msgid "" "Triggers parsing of any previously fed unparsed data, which can be used to " "ensure more immediate feedback, in particular with Expat >=2.6.0. The " @@ -1932,15 +1931,15 @@ msgid "" "xmlparser.SetReparseDeferralEnabled` for details." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1402 -#: ../../library/xml.etree.elementtree.rst:1480 +#: ../../library/xml.etree.elementtree.rst:1401 +#: ../../library/xml.etree.elementtree.rst:1479 msgid "" "Note that :meth:`flush` has been backported to some prior releases of " "CPython as a security fix. Check for availability of :meth:`flush` using :" "func:`hasattr` if used in code running across a variety of Python versions." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1410 +#: ../../library/xml.etree.elementtree.rst:1409 msgid "" ":meth:`XMLParser.feed` calls *target*\\'s ``start(tag, attrs_dict)`` method " "for each opening tag, its ``end(tag)`` method for each closing tag, and data " @@ -1951,7 +1950,7 @@ msgid "" "of an XML file::" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1418 +#: ../../library/xml.etree.elementtree.rst:1417 msgid "" ">>> from xml.etree.ElementTree import XMLParser\n" ">>> class MaxDepth: # The target object of the parser\n" @@ -1986,11 +1985,11 @@ msgid "" "4" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1454 +#: ../../library/xml.etree.elementtree.rst:1453 msgid "XMLPullParser Objects" msgstr "XMLPullParser 物件" -#: ../../library/xml.etree.elementtree.rst:1458 +#: ../../library/xml.etree.elementtree.rst:1457 msgid "" "A pull parser suitable for non-blocking applications. Its input-side API is " "similar to that of :class:`XMLParser`, but instead of pushing calls to a " @@ -2002,11 +2001,11 @@ msgid "" "If *events* is omitted, only ``\"end\"`` events are reported." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1469 +#: ../../library/xml.etree.elementtree.rst:1468 msgid "Feed the given bytes data to the parser." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1489 +#: ../../library/xml.etree.elementtree.rst:1488 msgid "" "Signal the parser that the data stream is terminated. Unlike :meth:" "`XMLParser.close`, this method always returns :const:`None`. Any events not " @@ -2014,7 +2013,7 @@ msgid "" "`read_events`." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1496 +#: ../../library/xml.etree.elementtree.rst:1495 msgid "" "Return an iterator over the events which have been encountered in the data " "fed to the parser. The iterator yields ``(event, elem)`` pairs, where " @@ -2023,25 +2022,25 @@ msgid "" "follows." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1502 +#: ../../library/xml.etree.elementtree.rst:1501 msgid "``start``, ``end``: the current Element." msgstr "``start``、``end``:目前的 Element。" -#: ../../library/xml.etree.elementtree.rst:1503 +#: ../../library/xml.etree.elementtree.rst:1502 msgid "``comment``, ``pi``: the current comment / processing instruction" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1504 +#: ../../library/xml.etree.elementtree.rst:1503 msgid "" "``start-ns``: a tuple ``(prefix, uri)`` naming the declared namespace " "mapping." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1506 +#: ../../library/xml.etree.elementtree.rst:1505 msgid "``end-ns``: :const:`None` (this may change in a future version)" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1508 +#: ../../library/xml.etree.elementtree.rst:1507 msgid "" "Events provided in a previous call to :meth:`read_events` will not be " "yielded again. Events are consumed from the internal queue only when they " @@ -2050,7 +2049,7 @@ msgid "" "results." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1516 +#: ../../library/xml.etree.elementtree.rst:1515 msgid "" ":class:`XMLPullParser` only guarantees that it has seen the \">\" character " "of a starting tag when it emits a \"start\" event, so the attributes are " @@ -2059,11 +2058,11 @@ msgid "" "be present." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1531 +#: ../../library/xml.etree.elementtree.rst:1530 msgid "Exceptions" msgstr "例外" -#: ../../library/xml.etree.elementtree.rst:1535 +#: ../../library/xml.etree.elementtree.rst:1534 msgid "" "XML parse error, raised by the various parsing methods in this module when " "parsing fails. The string representation of an instance of this exception " @@ -2071,22 +2070,22 @@ msgid "" "following attributes available:" msgstr "" -#: ../../library/xml.etree.elementtree.rst:1542 +#: ../../library/xml.etree.elementtree.rst:1541 msgid "" "A numeric error code from the expat parser. See the documentation of :mod:" "`xml.parsers.expat` for the list of error codes and their meanings." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1547 +#: ../../library/xml.etree.elementtree.rst:1546 msgid "" "A tuple of *line*, *column* numbers, specifying where the error occurred." msgstr "" -#: ../../library/xml.etree.elementtree.rst:1550 +#: ../../library/xml.etree.elementtree.rst:1549 msgid "Footnotes" msgstr "註解" -#: ../../library/xml.etree.elementtree.rst:1551 +#: ../../library/xml.etree.elementtree.rst:1550 msgid "" "The encoding string included in XML output should conform to the appropriate " "standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not. See " diff --git a/library/xml.po b/library/xml.po index d23f35acd4..be63551353 100644 --- a/library/xml.po +++ b/library/xml.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-18 00:04+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2023-08-21 02:16+0000\n" "Last-Translator: Matt Wang \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -34,14 +34,11 @@ msgstr "Python 處理 XML 的介面被歸類於 ``xml`` 套件中。" #: ../../library/xml.rst:20 msgid "" -"The XML modules are not secure against erroneous or maliciously constructed " -"data. If you need to parse untrusted or unauthenticated data see the :ref:" -"`xml-vulnerabilities` and :ref:`defusedxml-package` sections." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -"XML 模組無法抵禦錯誤或惡意建構的資料。如果你需要剖析不受信任或未經身份驗證的" -"資料,請參閱 :ref:`xml-vulnerabilities` 和 :ref:`defusedxml-package` 段落。" -#: ../../library/xml.rst:25 +#: ../../library/xml.rst:23 msgid "" "It is important to note that modules in the :mod:`xml` package require that " "there be at least one SAX-compliant XML parser available. The Expat parser " @@ -52,7 +49,7 @@ msgstr "" "Expat 剖析器包含在 Python 中,所以總是可以使用 :mod:`xml.parsers.expat` 模" "組。" -#: ../../library/xml.rst:30 +#: ../../library/xml.rst:28 msgid "" "The documentation for the :mod:`xml.dom` and :mod:`xml.sax` packages are the " "definition of the Python bindings for the DOM and SAX interfaces." @@ -60,189 +57,73 @@ msgstr "" ":mod:`xml.dom` 和 :mod:`xml.sax` 套件的文件為 DOM 和 SAX 介面的 Python 繫結的" "定義。" -#: ../../library/xml.rst:33 +#: ../../library/xml.rst:31 msgid "The XML handling submodules are:" msgstr "以下是 XML 處理子模組:" -#: ../../library/xml.rst:35 +#: ../../library/xml.rst:33 msgid "" ":mod:`xml.etree.ElementTree`: the ElementTree API, a simple and lightweight " "XML processor" msgstr "" ":mod:`xml.etree.ElementTree`:ElementTree API,一個簡單且輕量級的 XML 處理器" -#: ../../library/xml.rst:40 +#: ../../library/xml.rst:38 msgid ":mod:`xml.dom`: the DOM API definition" msgstr ":mod:`xml.dom`:DOM API 定義" -#: ../../library/xml.rst:41 +#: ../../library/xml.rst:39 msgid ":mod:`xml.dom.minidom`: a minimal DOM implementation" msgstr ":mod:`xml.dom.minidom`:最小的 DOM 實作" -#: ../../library/xml.rst:42 +#: ../../library/xml.rst:40 msgid ":mod:`xml.dom.pulldom`: support for building partial DOM trees" msgstr ":mod:`xml.dom.pulldom`:支援建置部分 DOM 樹" -#: ../../library/xml.rst:46 +#: ../../library/xml.rst:44 msgid ":mod:`xml.sax`: SAX2 base classes and convenience functions" msgstr ":mod:`xml.sax`:SAX2 基底類別和便利函式" -#: ../../library/xml.rst:47 +#: ../../library/xml.rst:45 msgid ":mod:`xml.parsers.expat`: the Expat parser binding" msgstr ":mod:`xml.parsers.expat`:Expat 剖析器繫結" -#: ../../library/xml.rst:53 -msgid "XML vulnerabilities" -msgstr "XML 漏洞" +#: ../../library/xml.rst:52 +msgid "XML security" +msgstr "" -#: ../../library/xml.rst:55 +#: ../../library/xml.rst:54 +#, fuzzy msgid "" -"The XML processing modules are not secure against maliciously constructed " -"data. An attacker can abuse XML features to carry out denial of service " -"attacks, access local files, generate network connections to other machines, " -"or circumvent firewalls." +"An attacker can abuse XML features to carry out denial of service attacks, " +"access local files, generate network connections to other machines, or " +"circumvent firewalls." msgstr "" "XML 處理模組無法抵禦惡意建構的資料。攻擊者可以濫用 XML 功能來執行阻斷服務攻" "擊 (denial of service attack)、存取本地檔案、生成與其他機器的網路連接或繞過防" "火牆。" -#: ../../library/xml.rst:60 -msgid "" -"The following table gives an overview of the known attacks and whether the " -"various modules are vulnerable to them." -msgstr "下表概述了已知的攻擊以及各個模組是否易有漏洞。" - -#: ../../library/xml.rst:64 -msgid "kind" -msgstr "種類" - -#: ../../library/xml.rst:64 -msgid "sax" -msgstr "sax" - -#: ../../library/xml.rst:64 -msgid "etree" -msgstr "etree" - -#: ../../library/xml.rst:64 -msgid "minidom" -msgstr "minidom" - -#: ../../library/xml.rst:64 -msgid "pulldom" -msgstr "pulldom" - -#: ../../library/xml.rst:64 -msgid "xmlrpc" -msgstr "xmlrpc" - -#: ../../library/xml.rst:66 -msgid "billion laughs" -msgstr "十億笑聲 (billion laughs)" - -#: ../../library/xml.rst:66 ../../library/xml.rst:67 -msgid "**Vulnerable** (1)" -msgstr "**脆弱** (1)" - -#: ../../library/xml.rst:67 -msgid "quadratic blowup" -msgstr "二次爆炸 (quadratic blowup)" - -#: ../../library/xml.rst:68 ../../library/xml.rst:106 -msgid "external entity expansion" -msgstr "外部實體擴展 (external entity expansion)" - -#: ../../library/xml.rst:68 ../../library/xml.rst:69 -msgid "Safe (5)" -msgstr "安全 (5)" - -#: ../../library/xml.rst:68 -msgid "Safe (2)" -msgstr "安全 (2)" - -#: ../../library/xml.rst:68 -msgid "Safe (3)" -msgstr "安全 (3)" - -#: ../../library/xml.rst:68 -msgid "Safe (4)" -msgstr "安全 (4)" - -#: ../../library/xml.rst:69 ../../library/xml.rst:111 -msgid "`DTD`_ retrieval" -msgstr "`DTD`_ 檢索" - -#: ../../library/xml.rst:69 ../../library/xml.rst:70 -msgid "Safe" -msgstr "安全" - -#: ../../library/xml.rst:70 ../../library/xml.rst:116 -msgid "decompression bomb" -msgstr "解壓縮炸彈 (decompression bomb)" - -#: ../../library/xml.rst:70 -msgid "**Vulnerable**" -msgstr "**脆弱**" - -#: ../../library/xml.rst:71 ../../library/xml.rst:123 -msgid "large tokens" -msgstr "大型 token" - -#: ../../library/xml.rst:71 -msgid "**Vulnerable** (6)" -msgstr "**脆弱** (6)" - -#: ../../library/xml.rst:74 +#: ../../library/xml.rst:58 +#, fuzzy msgid "" -"Expat 2.4.1 and newer is not vulnerable to the \"billion laughs\" and " -"\"quadratic blowup\" vulnerabilities. Items still listed as vulnerable due " -"to potential reliance on system-provided libraries. Check :const:`!pyexpat." -"EXPAT_VERSION`." +"Expat versions lower that 2.6.0 may be vulnerable to \"billion laughs\", " +"\"quadratic blowup\" and \"large tokens\". Python may be vulnerable if it " +"uses such older versions of Expat as a system-provided library. Check :const:" +"`!pyexpat.EXPAT_VERSION`." msgstr "" "Expat 2.4.1 及更新的版本不易受到「十億笑聲」和「二次爆炸」漏洞的影響。但仍可" "能由於依賴系統提供的函式庫而被列為易受攻擊的項目。請檢查 :const:`!pyexpat." "EXPAT_VERSION`。" -#: ../../library/xml.rst:78 -msgid "" -":mod:`xml.etree.ElementTree` doesn't expand external entities and raises a :" -"exc:`~xml.etree.ElementTree.ParseError` when an entity occurs." -msgstr "" -":mod:`xml.etree.ElementTree` 不會擴展外部實體,並在實體出現時引發 :exc:`~xml." -"etree.ElementTree.ParseError`。" - -#: ../../library/xml.rst:80 -msgid "" -":mod:`xml.dom.minidom` doesn't expand external entities and simply returns " -"the unexpanded entity verbatim." -msgstr ":mod:`xml.dom.minidom` 不會擴展外部實體,只會逐字回傳未擴展的實體。" - -#: ../../library/xml.rst:82 -msgid ":mod:`xmlrpc.client` doesn't expand external entities and omits them." -msgstr ":mod:`xmlrpc.client` 不會擴展外部實體且會忽略它們。" - -#: ../../library/xml.rst:83 -msgid "" -"Since Python 3.7.1, external general entities are no longer processed by " -"default." -msgstr "從 Python 3.7.1 開始,預設情況下不再處理外部通用實體。" - -#: ../../library/xml.rst:85 -msgid "" -"Expat 2.6.0 and newer is not vulnerable to denial of service through " -"quadratic runtime caused by parsing large tokens. Items still listed as " -"vulnerable due to potential reliance on system-provided libraries. Check :" -"const:`!pyexpat.EXPAT_VERSION`." +#: ../../library/xml.rst:63 +msgid ":mod:`xmlrpc` is **vulnerable** to the \"decompression bomb\" attack." msgstr "" -"Expat 2.6.0 及更新版本不易受到剖析大型 token 所導致的二次 runtime 阻斷服務的" -"影響。由於可能依賴系統提供的函式庫,因此仍被列為易受攻擊的項目。請參考 :" -"const:`!pyexpat.EXPAT_VERSION`。" -#: ../../library/xml.rst:92 +#: ../../library/xml.rst:66 msgid "billion laughs / exponential entity expansion" msgstr "十億笑聲 / 指數實體擴展" -#: ../../library/xml.rst:93 +#: ../../library/xml.rst:67 msgid "" "The `Billion Laughs`_ attack -- also known as exponential entity expansion " "-- uses multiple levels of nested entities. Each entity refers to another " @@ -254,11 +135,11 @@ msgstr "" "expansion))使用多層巢狀實體。每個實體多次引用另一個實體,最終的實體定義包含" "一個小字串。指數擴展會產生數 GB 的文本,並消耗大量記憶體和 CPU 時間。" -#: ../../library/xml.rst:99 +#: ../../library/xml.rst:73 msgid "quadratic blowup entity expansion" msgstr "二次爆炸實體擴展" -#: ../../library/xml.rst:100 +#: ../../library/xml.rst:74 msgid "" "A quadratic blowup attack is similar to a `Billion Laughs`_ attack; it " "abuses entity expansion, too. Instead of nested entities it repeats one " @@ -270,25 +151,11 @@ msgstr "" "它不是巢狀實體,而是一遍又一遍地重複一個具有幾千個字元的大型實體。該攻擊不如" "指數擴展那麼有效率,但它不會觸發那些用來防止深度巢狀實體的剖析器對策。" -#: ../../library/xml.rst:107 -msgid "" -"Entity declarations can contain more than just text for replacement. They " -"can also point to external resources or local files. The XML parser accesses " -"the resource and embeds the content into the XML document." -msgstr "" -"實體聲明不僅僅可以包含用於替換的文本,它們還可以指向外部資源或本地檔案。XML " -"剖析器會存取資源並將內容嵌入到 XML 文件中。" - -#: ../../library/xml.rst:112 -msgid "" -"Some XML libraries like Python's :mod:`xml.dom.pulldom` retrieve document " -"type definitions from remote or local locations. The feature has similar " -"implications as the external entity expansion issue." -msgstr "" -"一些 XML 函式庫(例如 Python 的 :mod:`xml.dom.pulldom`)從遠端或本地位置檢索" -"文件類型定義。該功能與外部實體擴展問題具有類似的含義。" +#: ../../library/xml.rst:80 +msgid "decompression bomb" +msgstr "解壓縮炸彈 (decompression bomb)" -#: ../../library/xml.rst:117 +#: ../../library/xml.rst:81 msgid "" "Decompression bombs (aka `ZIP bomb`_) apply to all XML libraries that can " "parse compressed XML streams such as gzipped HTTP streams or LZMA-compressed " @@ -299,7 +166,11 @@ msgstr "" "壓縮的 HTTP 串流或 LZMA 壓縮檔案)的 XML 函式庫。對於攻擊者來說,它可以將傳輸" "的資料量減少三個或更多數量級。" -#: ../../library/xml.rst:124 +#: ../../library/xml.rst:87 +msgid "large tokens" +msgstr "大型 token" + +#: ../../library/xml.rst:88 msgid "" "Expat needs to re-parse unfinished tokens; without the protection introduced " "in Expat 2.6.0, this can lead to quadratic runtime that can be used to cause " @@ -310,27 +181,142 @@ msgstr "" "導致二次 runtime 而導致剖析 XML 的應用程式出現阻斷服務。此問題記錄於 :cve:" "`2023-52425`。" -#: ../../library/xml.rst:129 -msgid "" -"The documentation for :pypi:`defusedxml` on PyPI has further information " -"about all known attack vectors with examples and references." -msgstr "" -"PyPI 上的 :pypi:`defusedxml` 文件包含有關所有已知攻擊媒介 (attack vector) 的" -"更多資訊以及範例和參考資料。" +#~ msgid "" +#~ "The XML modules are not secure against erroneous or maliciously " +#~ "constructed data. If you need to parse untrusted or unauthenticated data " +#~ "see the :ref:`xml-vulnerabilities` and :ref:`defusedxml-package` sections." +#~ msgstr "" +#~ "XML 模組無法抵禦錯誤或惡意建構的資料。如果你需要剖析不受信任或未經身份驗證" +#~ "的資料,請參閱 :ref:`xml-vulnerabilities` 和 :ref:`defusedxml-package` 段" +#~ "落。" -#: ../../library/xml.rst:135 -msgid "The :mod:`!defusedxml` Package" -msgstr ":mod:`!defusedxml` 套件" +#~ msgid "XML vulnerabilities" +#~ msgstr "XML 漏洞" -#: ../../library/xml.rst:137 -msgid "" -":pypi:`defusedxml` is a pure Python package with modified subclasses of all " -"stdlib XML parsers that prevent any potentially malicious operation. Use of " -"this package is recommended for any server code that parses untrusted XML " -"data. The package also ships with example exploits and extended " -"documentation on more XML exploits such as XPath injection." -msgstr "" -":pypi:`defusedxml` 是一個純 Python 套件,其中包含所有標準函式庫中 XML 剖析器" -"的修正版本子類別,可防止任何潛在的惡意操作。當伺服器程式會剖析任何不受信任的 " -"XML 資料時建議使用此套件。該套件還附帶了更多有關 XML 漏洞(例如 XPath 注入)" -"的範例和延伸文件。" +#~ msgid "" +#~ "The following table gives an overview of the known attacks and whether " +#~ "the various modules are vulnerable to them." +#~ msgstr "下表概述了已知的攻擊以及各個模組是否易有漏洞。" + +#~ msgid "kind" +#~ msgstr "種類" + +#~ msgid "sax" +#~ msgstr "sax" + +#~ msgid "etree" +#~ msgstr "etree" + +#~ msgid "minidom" +#~ msgstr "minidom" + +#~ msgid "pulldom" +#~ msgstr "pulldom" + +#~ msgid "xmlrpc" +#~ msgstr "xmlrpc" + +#~ msgid "billion laughs" +#~ msgstr "十億笑聲 (billion laughs)" + +#~ msgid "**Vulnerable** (1)" +#~ msgstr "**脆弱** (1)" + +#~ msgid "quadratic blowup" +#~ msgstr "二次爆炸 (quadratic blowup)" + +#~ msgid "external entity expansion" +#~ msgstr "外部實體擴展 (external entity expansion)" + +#~ msgid "Safe (5)" +#~ msgstr "安全 (5)" + +#~ msgid "Safe (2)" +#~ msgstr "安全 (2)" + +#~ msgid "Safe (3)" +#~ msgstr "安全 (3)" + +#~ msgid "Safe (4)" +#~ msgstr "安全 (4)" + +#~ msgid "`DTD`_ retrieval" +#~ msgstr "`DTD`_ 檢索" + +#~ msgid "Safe" +#~ msgstr "安全" + +#~ msgid "**Vulnerable**" +#~ msgstr "**脆弱**" + +#~ msgid "**Vulnerable** (6)" +#~ msgstr "**脆弱** (6)" + +#~ msgid "" +#~ ":mod:`xml.etree.ElementTree` doesn't expand external entities and raises " +#~ "a :exc:`~xml.etree.ElementTree.ParseError` when an entity occurs." +#~ msgstr "" +#~ ":mod:`xml.etree.ElementTree` 不會擴展外部實體,並在實體出現時引發 :exc:" +#~ "`~xml.etree.ElementTree.ParseError`。" + +#~ msgid "" +#~ ":mod:`xml.dom.minidom` doesn't expand external entities and simply " +#~ "returns the unexpanded entity verbatim." +#~ msgstr ":mod:`xml.dom.minidom` 不會擴展外部實體,只會逐字回傳未擴展的實體。" + +#~ msgid "" +#~ ":mod:`xmlrpc.client` doesn't expand external entities and omits them." +#~ msgstr ":mod:`xmlrpc.client` 不會擴展外部實體且會忽略它們。" + +#~ msgid "" +#~ "Since Python 3.7.1, external general entities are no longer processed by " +#~ "default." +#~ msgstr "從 Python 3.7.1 開始,預設情況下不再處理外部通用實體。" + +#~ msgid "" +#~ "Expat 2.6.0 and newer is not vulnerable to denial of service through " +#~ "quadratic runtime caused by parsing large tokens. Items still listed as " +#~ "vulnerable due to potential reliance on system-provided libraries. Check :" +#~ "const:`!pyexpat.EXPAT_VERSION`." +#~ msgstr "" +#~ "Expat 2.6.0 及更新版本不易受到剖析大型 token 所導致的二次 runtime 阻斷服務" +#~ "的影響。由於可能依賴系統提供的函式庫,因此仍被列為易受攻擊的項目。請參考 :" +#~ "const:`!pyexpat.EXPAT_VERSION`。" + +#~ msgid "" +#~ "Entity declarations can contain more than just text for replacement. They " +#~ "can also point to external resources or local files. The XML parser " +#~ "accesses the resource and embeds the content into the XML document." +#~ msgstr "" +#~ "實體聲明不僅僅可以包含用於替換的文本,它們還可以指向外部資源或本地檔案。" +#~ "XML 剖析器會存取資源並將內容嵌入到 XML 文件中。" + +#~ msgid "" +#~ "Some XML libraries like Python's :mod:`xml.dom.pulldom` retrieve document " +#~ "type definitions from remote or local locations. The feature has similar " +#~ "implications as the external entity expansion issue." +#~ msgstr "" +#~ "一些 XML 函式庫(例如 Python 的 :mod:`xml.dom.pulldom`)從遠端或本地位置檢" +#~ "索文件類型定義。該功能與外部實體擴展問題具有類似的含義。" + +#~ msgid "" +#~ "The documentation for :pypi:`defusedxml` on PyPI has further information " +#~ "about all known attack vectors with examples and references." +#~ msgstr "" +#~ "PyPI 上的 :pypi:`defusedxml` 文件包含有關所有已知攻擊媒介 (attack vector) " +#~ "的更多資訊以及範例和參考資料。" + +#~ msgid "The :mod:`!defusedxml` Package" +#~ msgstr ":mod:`!defusedxml` 套件" + +#~ msgid "" +#~ ":pypi:`defusedxml` is a pure Python package with modified subclasses of " +#~ "all stdlib XML parsers that prevent any potentially malicious operation. " +#~ "Use of this package is recommended for any server code that parses " +#~ "untrusted XML data. The package also ships with example exploits and " +#~ "extended documentation on more XML exploits such as XPath injection." +#~ msgstr "" +#~ ":pypi:`defusedxml` 是一個純 Python 套件,其中包含所有標準函式庫中 XML 剖析" +#~ "器的修正版本子類別,可防止任何潛在的惡意操作。當伺服器程式會剖析任何不受信" +#~ "任的 XML 資料時建議使用此套件。該套件還附帶了更多有關 XML 漏洞(例如 " +#~ "XPath 注入)的範例和延伸文件。" diff --git a/library/xml.sax.po b/library/xml.sax.po index 2e824867ca..ab16d0ece5 100644 --- a/library/xml.sax.po +++ b/library/xml.sax.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-09 00:03+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2016-11-19 00:36+0000\n" "Last-Translator: Liang-Bo Wang \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -36,12 +36,11 @@ msgstr "" #: ../../library/xml.sax.rst:23 msgid "" -"The :mod:`xml.sax` module is not secure against maliciously constructed " -"data. If you need to parse untrusted or unauthenticated data see :ref:`xml-" -"vulnerabilities`." +"If you need to parse untrusted or unauthenticated data, see :ref:`xml-" +"security`." msgstr "" -#: ../../library/xml.sax.rst:29 +#: ../../library/xml.sax.rst:28 msgid "" "The SAX parser no longer processes general external entities by default to " "increase security. Before, the parser created network connections to fetch " @@ -51,11 +50,11 @@ msgid "" "`~xml.sax.handler.feature_external_ges`." msgstr "" -#: ../../library/xml.sax.rst:36 +#: ../../library/xml.sax.rst:35 msgid "The convenience functions are:" msgstr "" -#: ../../library/xml.sax.rst:41 +#: ../../library/xml.sax.rst:40 msgid "" "Create and return a SAX :class:`~xml.sax.xmlreader.XMLReader` object. The " "first parser found will be used. If *parser_list* is provided, it must be " @@ -64,11 +63,11 @@ msgid "" "modules in the default list of parsers." msgstr "" -#: ../../library/xml.sax.rst:47 +#: ../../library/xml.sax.rst:46 msgid "The *parser_list* argument can be any iterable, not just a list." msgstr "" -#: ../../library/xml.sax.rst:53 +#: ../../library/xml.sax.rst:52 msgid "" "Create a SAX parser and use it to parse a document. The document, passed in " "as *filename_or_stream*, can be a filename or a file object. The *handler* " @@ -79,18 +78,18 @@ msgid "" "passed in." msgstr "" -#: ../../library/xml.sax.rst:64 +#: ../../library/xml.sax.rst:63 msgid "" "Similar to :func:`parse`, but parses from a buffer *string* received as a " "parameter. *string* must be a :class:`str` instance or a :term:`bytes-like " "object`." msgstr "" -#: ../../library/xml.sax.rst:68 +#: ../../library/xml.sax.rst:67 msgid "Added support of :class:`str` instances." msgstr "新增 :class:`str` 實例的支援。" -#: ../../library/xml.sax.rst:71 +#: ../../library/xml.sax.rst:70 msgid "" "A typical SAX application uses three kinds of objects: readers, handlers and " "input sources. \"Reader\" in this context is another term for parser, i.e. " @@ -104,7 +103,7 @@ msgid "" "structural and syntactic events from the input data." msgstr "" -#: ../../library/xml.sax.rst:82 +#: ../../library/xml.sax.rst:81 msgid "" "For these objects, only the interfaces are relevant; they are normally not " "instantiated by the application itself. Since Python does not have an " @@ -120,13 +119,13 @@ msgid "" "interfaces are described below." msgstr "" -#: ../../library/xml.sax.rst:95 +#: ../../library/xml.sax.rst:94 msgid "" "In addition to these classes, :mod:`xml.sax` provides the following " "exception classes." msgstr "" -#: ../../library/xml.sax.rst:101 +#: ../../library/xml.sax.rst:100 msgid "" "Encapsulate an XML error or warning. This class can contain basic error or " "warning information from either the XML parser or the application: it can be " @@ -137,7 +136,7 @@ msgid "" "container for information." msgstr "" -#: ../../library/xml.sax.rst:109 +#: ../../library/xml.sax.rst:108 msgid "" "When instantiated, *msg* should be a human-readable description of the " "error. The optional *exception* parameter, if given, should be ``None`` or " @@ -145,11 +144,11 @@ msgid "" "as information." msgstr "" -#: ../../library/xml.sax.rst:113 +#: ../../library/xml.sax.rst:112 msgid "This is the base class for the other SAX exception classes." msgstr "" -#: ../../library/xml.sax.rst:118 +#: ../../library/xml.sax.rst:117 msgid "" "Subclass of :exc:`SAXException` raised on parse errors. Instances of this " "class are passed to the methods of the SAX :class:`~xml.sax.handler." @@ -158,14 +157,14 @@ msgid "" "as the :class:`SAXException` interface." msgstr "" -#: ../../library/xml.sax.rst:128 +#: ../../library/xml.sax.rst:127 msgid "" "Subclass of :exc:`SAXException` raised when a SAX :class:`~xml.sax.xmlreader." "XMLReader` is confronted with an unrecognized feature or property. SAX " "applications and extensions may use this class for similar purposes." msgstr "" -#: ../../library/xml.sax.rst:136 +#: ../../library/xml.sax.rst:135 msgid "" "Subclass of :exc:`SAXException` raised when a SAX :class:`~xml.sax.xmlreader." "XMLReader` is asked to enable a feature that is not supported, or to set a " @@ -173,54 +172,54 @@ msgid "" "applications and extensions may use this class for similar purposes." msgstr "" -#: ../../library/xml.sax.rst:145 +#: ../../library/xml.sax.rst:144 msgid "`SAX: The Simple API for XML `_" msgstr "" -#: ../../library/xml.sax.rst:146 +#: ../../library/xml.sax.rst:145 msgid "" "This site is the focal point for the definition of the SAX API. It provides " "a Java implementation and online documentation. Links to implementations " "and historical information are also available." msgstr "" -#: ../../library/xml.sax.rst:150 +#: ../../library/xml.sax.rst:149 msgid "Module :mod:`xml.sax.handler`" msgstr ":mod:`xml.sax.handler` 模組" -#: ../../library/xml.sax.rst:151 +#: ../../library/xml.sax.rst:150 msgid "Definitions of the interfaces for application-provided objects." msgstr "" -#: ../../library/xml.sax.rst:153 +#: ../../library/xml.sax.rst:152 msgid "Module :mod:`xml.sax.saxutils`" msgstr ":mod:`xml.sax.saxutils` 模組" -#: ../../library/xml.sax.rst:154 +#: ../../library/xml.sax.rst:153 msgid "Convenience functions for use in SAX applications." msgstr "" -#: ../../library/xml.sax.rst:156 +#: ../../library/xml.sax.rst:155 msgid "Module :mod:`xml.sax.xmlreader`" msgstr ":mod:`xml.sax.xmlreader` 模組" -#: ../../library/xml.sax.rst:157 +#: ../../library/xml.sax.rst:156 msgid "Definitions of the interfaces for parser-provided objects." msgstr "" -#: ../../library/xml.sax.rst:163 +#: ../../library/xml.sax.rst:162 msgid "SAXException Objects" msgstr "SAXException 物件" -#: ../../library/xml.sax.rst:165 +#: ../../library/xml.sax.rst:164 msgid "" "The :class:`SAXException` exception class supports the following methods:" msgstr "" -#: ../../library/xml.sax.rst:170 +#: ../../library/xml.sax.rst:169 msgid "Return a human-readable message describing the error condition." msgstr "" -#: ../../library/xml.sax.rst:175 +#: ../../library/xml.sax.rst:174 msgid "Return an encapsulated exception object, or ``None``." msgstr "" diff --git a/library/xmlrpc.client.po b/library/xmlrpc.client.po index 9835d74f1c..c68ea2436e 100644 --- a/library/xmlrpc.client.po +++ b/library/xmlrpc.client.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-04 00:14+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:16+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -37,8 +37,8 @@ msgstr "" #: ../../library/xmlrpc.client.rst:26 msgid "" "The :mod:`xmlrpc.client` module is not secure against maliciously " -"constructed data. If you need to parse untrusted or unauthenticated data " -"see :ref:`xml-vulnerabilities`." +"constructed data. If you need to parse untrusted or unauthenticated data, " +"see :ref:`xml-security`." msgstr "" #: ../../library/xmlrpc.client.rst:32 diff --git a/library/xmlrpc.server.po b/library/xmlrpc.server.po index 7a0eb729b9..3db9476c5d 100644 --- a/library/xmlrpc.server.po +++ b/library/xmlrpc.server.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-11 00:13+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: 2018-05-23 16:16+0000\n" "Last-Translator: Adrian Liaw \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -37,8 +37,8 @@ msgstr "" #: ../../library/xmlrpc.server.rst:22 msgid "" "The :mod:`xmlrpc.server` module is not secure against maliciously " -"constructed data. If you need to parse untrusted or unauthenticated data " -"see :ref:`xml-vulnerabilities`." +"constructed data. If you need to parse untrusted or unauthenticated data, " +"see :ref:`xml-security`." msgstr "" #: ../../includes/wasm-notavail.rst:3 diff --git a/whatsnew/3.9.po b/whatsnew/3.9.po index 0d12d8d64e..2be2bb9af4 100644 --- a/whatsnew/3.9.po +++ b/whatsnew/3.9.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-27 00:14+0000\n" +"POT-Creation-Date: 2025-07-07 10:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: Chinese - TAIWAN (https://github.com/python/python-docs-zh-" @@ -32,8 +32,8 @@ msgstr "Łukasz Langa" #: ../../whatsnew/3.9.rst:45 msgid "" "This article explains the new features in Python 3.9, compared to 3.8. " -"Python 3.9 was released on October 5, 2020. For full details, see " -"the :ref:`changelog `." +"Python 3.9 was released on October 5, 2020. For full details, see the :ref:" +"`changelog `." msgstr "" "本文介紹了 Python 3.9 與 3.8 相比多了哪些新功能。Python 3.9 已於 2020 年 10 " "月 5 日發布。有關完整詳細資訊,請參閱 :ref:`changelog `。" @@ -109,19 +109,19 @@ msgstr "" #: ../../whatsnew/3.9.rst:84 msgid "" -"a number of Python modules (:mod:`!_abc`, :mod:`!audioop`, :mod:`!" -"_bz2`, :mod:`!_codecs`, :mod:`!_contextvars`, :mod:`!_crypt`, :mod:`!" -"_functools`, :mod:`!_json`, :mod:`!" -"_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`, :mod:`time`, :mod:`!" -"_weakref`) now use multiphase initialization as defined by PEP 489;" +"a number of Python modules (:mod:`!_abc`, :mod:`!audioop`, :mod:`!_bz2`, :" +"mod:`!_codecs`, :mod:`!_contextvars`, :mod:`!_crypt`, :mod:`!_functools`, :" +"mod:`!_json`, :mod:`!_locale`, :mod:`math`, :mod:`operator`, :mod:" +"`resource`, :mod:`time`, :mod:`!_weakref`) now use multiphase initialization " +"as defined by PEP 489;" msgstr "" #: ../../whatsnew/3.9.rst:89 msgid "" -"a number of standard library modules (:mod:`!" -"audioop`, :mod:`ast`, :mod:`grp`, :mod:`!_hashlib`, :mod:`pwd`, :mod:`!" -"_posixsubprocess`, :mod:`random`, :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) " -"are now using the stable ABI defined by PEP 384." +"a number of standard library modules (:mod:`!audioop`, :mod:`ast`, :mod:" +"`grp`, :mod:`!_hashlib`, :mod:`pwd`, :mod:`!_posixsubprocess`, :mod:" +"`random`, :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) are now " +"using the stable ABI defined by PEP 384." msgstr "" #: ../../whatsnew/3.9.rst:94 @@ -182,9 +182,9 @@ msgstr "" #: ../../whatsnew/3.9.rst:126 msgid "" "Aliases to :ref:`Abstract Base Classes ` " -"in the :mod:`collections` module, like ``collections.Mapping`` alias " -"to :class:`collections.abc.Mapping`, are kept for one last release for " -"backward compatibility. They will be removed from Python 3.10." +"in the :mod:`collections` module, like ``collections.Mapping`` alias to :" +"class:`collections.abc.Mapping`, are kept for one last release for backward " +"compatibility. They will be removed from Python 3.10." msgstr "" #: ../../whatsnew/3.9.rst:131 @@ -210,8 +210,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:145 msgid "" -"Merge (``|``) and update (``|=``) operators have been added to the built-" -"in :class:`dict` class. Those complement the existing ``dict.update`` and " +"Merge (``|``) and update (``|=``) operators have been added to the built-in :" +"class:`dict` class. Those complement the existing ``dict.update`` and " "``{**d1, **d2}`` methods of merging dictionaries." msgstr "" @@ -237,8 +237,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:158 msgid "" -"See :pep:`584` for a full description. (Contributed by Brandt Bucher " -"in :issue:`36144`.)" +"See :pep:`584` for a full description. (Contributed by Brandt Bucher in :" +"issue:`36144`.)" msgstr "" #: ../../whatsnew/3.9.rst:162 @@ -247,12 +247,12 @@ msgstr "" #: ../../whatsnew/3.9.rst:164 msgid "" -":meth:`str.removeprefix(prefix)` " -"and :meth:`str.removesuffix(suffix)` have been added to " -"easily remove an unneeded prefix or a suffix from a string. Corresponding " -"``bytes``, ``bytearray``, and ``collections.UserString`` methods have also " -"been added. See :pep:`616` for a full description. (Contributed by Dennis " -"Sweeney in :issue:`39939`.)" +":meth:`str.removeprefix(prefix)` and :meth:`str." +"removesuffix(suffix)` have been added to easily remove an " +"unneeded prefix or a suffix from a string. Corresponding ``bytes``, " +"``bytearray``, and ``collections.UserString`` methods have also been added. " +"See :pep:`616` for a full description. (Contributed by Dennis Sweeney in :" +"issue:`39939`.)" msgstr "" #: ../../whatsnew/3.9.rst:172 @@ -329,28 +329,28 @@ msgstr "其他語言更動" #: ../../whatsnew/3.9.rst:218 msgid "" -":func:`__import__` now raises :exc:`ImportError` instead " -"of :exc:`ValueError`, which used to occur when a relative import went past " -"its top-level package. (Contributed by Ngalim Siregar in :issue:`37444`.)" +":func:`__import__` now raises :exc:`ImportError` instead of :exc:" +"`ValueError`, which used to occur when a relative import went past its top-" +"level package. (Contributed by Ngalim Siregar in :issue:`37444`.)" msgstr "" #: ../../whatsnew/3.9.rst:223 msgid "" "Python now gets the absolute path of the script filename specified on the " -"command line (ex: ``python3 script.py``): the ``__file__`` attribute of " -"the :mod:`__main__` module became an absolute path, rather than a relative " -"path. These paths now remain valid after the current directory is changed " -"by :func:`os.chdir`. As a side effect, the traceback also displays the " -"absolute path for :mod:`__main__` module frames in this case. (Contributed " -"by Victor Stinner in :issue:`20443`.)" +"command line (ex: ``python3 script.py``): the ``__file__`` attribute of the :" +"mod:`__main__` module became an absolute path, rather than a relative path. " +"These paths now remain valid after the current directory is changed by :func:" +"`os.chdir`. As a side effect, the traceback also displays the absolute path " +"for :mod:`__main__` module frames in this case. (Contributed by Victor " +"Stinner in :issue:`20443`.)" msgstr "" #: ../../whatsnew/3.9.rst:231 msgid "" "In the :ref:`Python Development Mode ` and in :ref:`debug build " "`, the *encoding* and *errors* arguments are now checked for " -"string encoding and decoding operations. " -"Examples: :func:`open`, :meth:`str.encode` and :meth:`bytes.decode`." +"string encoding and decoding operations. Examples: :func:`open`, :meth:`str." +"encode` and :meth:`bytes.decode`." msgstr "" #: ../../whatsnew/3.9.rst:236 @@ -386,26 +386,25 @@ msgstr "" #: ../../whatsnew/3.9.rst:256 msgid "" -"Parallel running " -"of :meth:`~agen.aclose` / :meth:`~agen.asend` / :meth:`~agen.athrow` is now " -"prohibited, and ``ag_running`` now reflects the actual running status of the " -"async generator. (Contributed by Yury Selivanov in :issue:`30773`.)" +"Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` / :meth:" +"`~agen.athrow` is now prohibited, and ``ag_running`` now reflects the actual " +"running status of the async generator. (Contributed by Yury Selivanov in :" +"issue:`30773`.)" msgstr "" #: ../../whatsnew/3.9.rst:261 msgid "" "Unexpected errors in calling the ``__iter__`` method are no longer masked by " -"``TypeError`` in the :keyword:`in` operator and " -"functions :func:`~operator.contains`, :func:`~operator.indexOf` " -"and :func:`~operator.countOf` of the :mod:`operator` module. (Contributed by " -"Serhiy Storchaka in :issue:`40824`.)" +"``TypeError`` in the :keyword:`in` operator and functions :func:`~operator." +"contains`, :func:`~operator.indexOf` and :func:`~operator.countOf` of the :" +"mod:`operator` module. (Contributed by Serhiy Storchaka in :issue:`40824`.)" msgstr "" #: ../../whatsnew/3.9.rst:267 msgid "" "Unparenthesized lambda expressions can no longer be the expression part in " -"an ``if`` clause in comprehensions and generator expressions. " -"See :issue:`41848` and :issue:`43755` for details." +"an ``if`` clause in comprehensions and generator expressions. See :issue:" +"`41848` and :issue:`43755` for details." msgstr "" #: ../../whatsnew/3.9.rst:273 @@ -419,9 +418,8 @@ msgstr "zoneinfo" #: ../../whatsnew/3.9.rst:278 msgid "" "The :mod:`zoneinfo` module brings support for the IANA time zone database to " -"the standard library. It adds :class:`zoneinfo.ZoneInfo`, a " -"concrete :class:`datetime.tzinfo` implementation backed by the system's time " -"zone data." +"the standard library. It adds :class:`zoneinfo.ZoneInfo`, a concrete :class:" +"`datetime.tzinfo` implementation backed by the system's time zone data." msgstr "" #: ../../whatsnew/3.9.rst:284 @@ -467,10 +465,10 @@ msgstr "graphlib" #: ../../whatsnew/3.9.rst:315 msgid "" -"A new module, :mod:`graphlib`, was added that contains " -"the :class:`graphlib.TopologicalSorter` class to offer functionality to " -"perform topological sorting of graphs. (Contributed by Pablo Galindo, Tim " -"Peters and Larry Hastings in :issue:`17005`.)" +"A new module, :mod:`graphlib`, was added that contains the :class:`graphlib." +"TopologicalSorter` class to offer functionality to perform topological " +"sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and Larry " +"Hastings in :issue:`17005`.)" msgstr "" #: ../../whatsnew/3.9.rst:322 @@ -484,8 +482,8 @@ msgstr "ast" #: ../../whatsnew/3.9.rst:327 msgid "" "Added the *indent* option to :func:`~ast.dump` which allows it to produce a " -"multiline indented output. (Contributed by Serhiy Storchaka " -"in :issue:`37995`.)" +"multiline indented output. (Contributed by Serhiy Storchaka in :issue:" +"`37995`.)" msgstr "" #: ../../whatsnew/3.9.rst:331 @@ -508,22 +506,21 @@ msgstr "asyncio" #: ../../whatsnew/3.9.rst:342 msgid "" -"Due to significant security concerns, the *reuse_address* parameter " -"of :meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. " -"This is because of the behavior of the socket option ``SO_REUSEADDR`` in " -"UDP. For more details, see the documentation for " -"``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine " -"Pitrou, and Yury Selivanov in :issue:`37228`.)" +"Due to significant security concerns, the *reuse_address* parameter of :meth:" +"`asyncio.loop.create_datagram_endpoint` is no longer supported. This is " +"because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For " +"more details, see the documentation for ``loop.create_datagram_endpoint()``. " +"(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in :issue:" +"`37228`.)" msgstr "" #: ../../whatsnew/3.9.rst:349 msgid "" -"Added a " -"new :term:`coroutine` :meth:`~asyncio.loop.shutdown_default_executor` that " -"schedules a shutdown for the default executor that waits on " -"the :class:`~concurrent.futures.ThreadPoolExecutor` to finish closing. " -"Also, :func:`asyncio.run` has been updated to use the new :term:`coroutine`. " -"(Contributed by Kyle Stanley in :issue:`34037`.)" +"Added a new :term:`coroutine` :meth:`~asyncio.loop." +"shutdown_default_executor` that schedules a shutdown for the default " +"executor that waits on the :class:`~concurrent.futures.ThreadPoolExecutor` " +"to finish closing. Also, :func:`asyncio.run` has been updated to use the " +"new :term:`coroutine`. (Contributed by Kyle Stanley in :issue:`34037`.)" msgstr "" #: ../../whatsnew/3.9.rst:355 @@ -536,10 +533,9 @@ msgstr "" msgid "" "Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used " "for running IO-bound functions in a separate thread to avoid blocking the " -"event loop, and essentially works as a high-level version " -"of :meth:`~asyncio.loop.run_in_executor` that can directly take keyword " -"arguments. (Contributed by Kyle Stanley and Yury Selivanov " -"in :issue:`32309`.)" +"event loop, and essentially works as a high-level version of :meth:`~asyncio." +"loop.run_in_executor` that can directly take keyword arguments. (Contributed " +"by Kyle Stanley and Yury Selivanov in :issue:`32309`.)" msgstr "" #: ../../whatsnew/3.9.rst:364 @@ -553,8 +549,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:369 msgid "" ":mod:`asyncio` now raises :exc:`TypeError` when calling incompatible methods " -"with an :class:`ssl.SSLSocket` socket. (Contributed by Ido Michael " -"in :issue:`37404`.)" +"with an :class:`ssl.SSLSocket` socket. (Contributed by Ido Michael in :issue:" +"`37404`.)" msgstr "" #: ../../whatsnew/3.9.rst:374 @@ -573,8 +569,8 @@ msgid "" "Added new options for path manipulation in resulting ``.pyc`` files: " "*stripdir*, *prependdir*, *limit_sl_dest* parameters and -s, -p, -e command " "line options. Added the possibility to specify the option for an " -"optimization level multiple times. (Contributed by Lumír 'Frenzy' Balhar " -"in :issue:`38112`.)" +"optimization level multiple times. (Contributed by Lumír 'Frenzy' Balhar in :" +"issue:`38112`.)" msgstr "" #: ../../whatsnew/3.9.rst:384 @@ -583,11 +579,10 @@ msgstr "concurrent.futures" #: ../../whatsnew/3.9.rst:386 msgid "" -"Added a new *cancel_futures* parameter " -"to :meth:`concurrent.futures.Executor.shutdown` that cancels all pending " -"futures which have not started running, instead of waiting for them to " -"complete before shutting down the executor. (Contributed by Kyle Stanley " -"in :issue:`39349`.)" +"Added a new *cancel_futures* parameter to :meth:`concurrent.futures.Executor." +"shutdown` that cancels all pending futures which have not started running, " +"instead of waiting for them to complete before shutting down the executor. " +"(Contributed by Kyle Stanley in :issue:`39349`.)" msgstr "" #: ../../whatsnew/3.9.rst:392 @@ -612,9 +607,9 @@ msgstr "curses" #: ../../whatsnew/3.9.rst:405 msgid "" -"Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, :func:`curses.get_tabsize`, " -"and :func:`curses.set_tabsize` functions. (Contributed by Anthony Sottile " -"in :issue:`38312`.)" +"Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, :func:" +"`curses.get_tabsize`, and :func:`curses.set_tabsize` functions. (Contributed " +"by Anthony Sottile in :issue:`38312`.)" msgstr "" #: ../../whatsnew/3.9.rst:410 @@ -623,10 +618,10 @@ msgstr "datetime" #: ../../whatsnew/3.9.rst:411 msgid "" -"The :meth:`~datetime.date.isocalendar` of :class:`datetime.date` " -"and :meth:`~datetime.datetime.isocalendar` of :class:`datetime.datetime` " -"methods now returns a :func:`~collections.namedtuple` instead of " -"a :class:`tuple`. (Contributed by Donghee Na in :issue:`24416`.)" +"The :meth:`~datetime.date.isocalendar` of :class:`datetime.date` and :meth:" +"`~datetime.datetime.isocalendar` of :class:`datetime.datetime` methods now " +"returns a :func:`~collections.namedtuple` instead of a :class:`tuple`. " +"(Contributed by Donghee Na in :issue:`24416`.)" msgstr "" #: ../../whatsnew/3.9.rst:417 @@ -646,9 +641,9 @@ msgstr "fcntl" #: ../../whatsnew/3.9.rst:426 msgid "" -"Added constants :const:`~fcntl.F_OFD_GETLK`, :const:`~fcntl.F_OFD_SETLK` " -"and :const:`~fcntl.F_OFD_SETLKW`. (Contributed by Donghee Na " -"in :issue:`38602`.)" +"Added constants :const:`!fcntl.F_OFD_GETLK`, :const:`!fcntl.F_OFD_SETLK` " +"and :const:`!fcntl.F_OFD_SETLKW`. (Contributed by Donghee Na in :issue:" +"`38602`.)" msgstr "" #: ../../whatsnew/3.9.rst:431 @@ -657,10 +652,10 @@ msgstr "ftplib" #: ../../whatsnew/3.9.rst:433 msgid "" -":class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise " -"a :class:`ValueError` if the given timeout for their constructor is zero to " -"prevent the creation of a non-blocking socket. (Contributed by Donghee Na " -"in :issue:`39259`.)" +":class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a :class:" +"`ValueError` if the given timeout for their constructor is zero to prevent " +"the creation of a non-blocking socket. (Contributed by Donghee Na in :issue:" +"`39259`.)" msgstr "" #: ../../whatsnew/3.9.rst:438 @@ -672,15 +667,15 @@ msgid "" "When the garbage collector makes a collection in which some objects " "resurrect (they are reachable from outside the isolated cycles after the " "finalizers have been executed), do not block the collection of all objects " -"that are still unreachable. (Contributed by Pablo Galindo and Tim Peters " -"in :issue:`38379`.)" +"that are still unreachable. (Contributed by Pablo Galindo and Tim Peters in :" +"issue:`38379`.)" msgstr "" #: ../../whatsnew/3.9.rst:445 msgid "" "Added a new function :func:`gc.is_finalized` to check if an object has been " -"finalized by the garbage collector. (Contributed by Pablo Galindo " -"in :issue:`39322`.)" +"finalized by the garbage collector. (Contributed by Pablo Galindo in :issue:" +"`39322`.)" msgstr "" #: ../../whatsnew/3.9.rst:450 @@ -718,8 +713,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:472 msgid "" -"Added option to toggle cursor blink off. (Contributed by Zackery Spytz " -"in :issue:`4603`.)" +"Added option to toggle cursor blink off. (Contributed by Zackery Spytz in :" +"issue:`4603`.)" msgstr "" #: ../../whatsnew/3.9.rst:475 @@ -741,8 +736,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:483 msgid "" "Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). User " -"hooks were previously ignored. (Contributed by Ken Hilton " -"in :issue:`43008`.)" +"hooks were previously ignored. (Contributed by Ken Hilton in :issue:" +"`43008`.)" msgstr "" #: ../../whatsnew/3.9.rst:487 @@ -754,10 +749,10 @@ msgid "" "Rearrange the settings dialog. Split the General tab into Windows and Shell/" "Ed tabs. Move help sources, which extend the Help menu, to the Extensions " "tab. Make space for new options and shorten the dialog. The latter makes " -"the dialog better fit small screens. (Contributed by Terry Jan Reedy " -"in :issue:`40468`.) Move the indent space setting from the Font tab to the " -"new Windows tab. (Contributed by Mark Roseman and Terry Jan Reedy " -"in :issue:`33962`.)" +"the dialog better fit small screens. (Contributed by Terry Jan Reedy in :" +"issue:`40468`.) Move the indent space setting from the Font tab to the new " +"Windows tab. (Contributed by Mark Roseman and Terry Jan Reedy in :issue:" +"`33962`.)" msgstr "" #: ../../whatsnew/3.9.rst:497 @@ -773,11 +768,11 @@ msgstr "imaplib" #: ../../whatsnew/3.9.rst:503 msgid "" ":class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have an optional " -"*timeout* parameter for their constructors. Also, " -"the :meth:`~imaplib.IMAP4.open` method now has an optional *timeout* " -"parameter with this change. The overridden methods " -"of :class:`~imaplib.IMAP4_SSL` and :class:`~imaplib.IMAP4_stream` were " -"applied to this change. (Contributed by Donghee Na in :issue:`38615`.)" +"*timeout* parameter for their constructors. Also, the :meth:`~imaplib.IMAP4." +"open` method now has an optional *timeout* parameter with this change. The " +"overridden methods of :class:`~imaplib.IMAP4_SSL` and :class:`~imaplib." +"IMAP4_stream` were applied to this change. (Contributed by Donghee Na in :" +"issue:`38615`.)" msgstr "" #: ../../whatsnew/3.9.rst:510 @@ -796,10 +791,10 @@ msgstr "importlib" #: ../../whatsnew/3.9.rst:520 msgid "" -"To improve consistency with import " -"statements, :func:`importlib.util.resolve_name` now " -"raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative " -"import attempts. (Contributed by Ngalim Siregar in :issue:`37444`.)" +"To improve consistency with import statements, :func:`importlib.util." +"resolve_name` now raises :exc:`ImportError` instead of :exc:`ValueError` for " +"invalid relative import attempts. (Contributed by Ngalim Siregar in :issue:" +"`37444`.)" msgstr "" #: ../../whatsnew/3.9.rst:525 @@ -828,8 +823,8 @@ msgstr "inspect" #: ../../whatsnew/3.9.rst:539 msgid "" ":attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to " -"regular dict. (Contributed by Inada Naoki in :issue:`36350` " -"and :issue:`39775`.)" +"regular dict. (Contributed by Inada Naoki in :issue:`36350` and :issue:" +"`39775`.)" msgstr "" #: ../../whatsnew/3.9.rst:543 @@ -845,16 +840,16 @@ msgstr "" #: ../../whatsnew/3.9.rst:547 msgid "" "Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`. If " -"present, scope zone ID is available through " -"the :attr:`~ipaddress.IPv6Address.scope_id` attribute. (Contributed by " -"Oleksandr Pavliuk in :issue:`34788`.)" +"present, scope zone ID is available through the :attr:`~ipaddress." +"IPv6Address.scope_id` attribute. (Contributed by Oleksandr Pavliuk in :issue:" +"`34788`.)" msgstr "" #: ../../whatsnew/3.9.rst:551 msgid "" "Starting with Python 3.9.5 the :mod:`ipaddress` module no longer accepts any " -"leading zeros in IPv4 address strings. (Contributed by Christian Heimes " -"in :issue:`36384`)." +"leading zeros in IPv4 address strings. (Contributed by Christian Heimes in :" +"issue:`36384`)." msgstr "" #: ../../whatsnew/3.9.rst:556 @@ -893,9 +888,9 @@ msgstr "multiprocessing" #: ../../whatsnew/3.9.rst:577 msgid "" -"The :class:`multiprocessing.SimpleQueue` class has a " -"new :meth:`~multiprocessing.SimpleQueue.close` method to explicitly close " -"the queue. (Contributed by Victor Stinner in :issue:`30966`.)" +"The :class:`multiprocessing.SimpleQueue` class has a new :meth:" +"`~multiprocessing.SimpleQueue.close` method to explicitly close the queue. " +"(Contributed by Victor Stinner in :issue:`30966`.)" msgstr "" #: ../../whatsnew/3.9.rst:583 @@ -921,9 +916,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:595 msgid "" -"Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) " -"and :const:`os.P_PIDFD` (:issue:`38713`) for process management with file " -"descriptors." +"Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and :const:" +"`os.P_PIDFD` (:issue:`38713`) for process management with file descriptors." msgstr "" #: ../../whatsnew/3.9.rst:599 @@ -950,8 +944,8 @@ msgstr "pathlib" #: ../../whatsnew/3.9.rst:613 msgid "" -"Added :meth:`pathlib.Path.readlink` which acts similarly " -"to :func:`os.readlink`. (Contributed by Girts Folkmanis in :issue:`30618`)" +"Added :meth:`pathlib.Path.readlink` which acts similarly to :func:`os." +"readlink`. (Contributed by Girts Folkmanis in :issue:`30618`)" msgstr "" #: ../../whatsnew/3.9.rst:618 @@ -970,10 +964,10 @@ msgstr "poplib" #: ../../whatsnew/3.9.rst:626 msgid "" -":class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise " -"a :class:`ValueError` if the given timeout for their constructor is zero to " -"prevent the creation of a non-blocking socket. (Contributed by Donghee Na " -"in :issue:`39259`.)" +":class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a :class:" +"`ValueError` if the given timeout for their constructor is zero to prevent " +"the creation of a non-blocking socket. (Contributed by Donghee Na in :issue:" +"`39259`.)" msgstr "" #: ../../whatsnew/3.9.rst:631 @@ -1003,7 +997,7 @@ msgstr "random" #: ../../whatsnew/3.9.rst:647 msgid "" -"Added a new :attr:`random.Random.randbytes` method: generate random bytes. " +"Added a new :meth:`random.Random.randbytes` method: generate random bytes. " "(Contributed by Victor Stinner in :issue:`40286`.)" msgstr "" @@ -1014,8 +1008,8 @@ msgstr "signal" #: ../../whatsnew/3.9.rst:653 msgid "" "Exposed the Linux-specific :func:`signal.pidfd_send_signal` for sending to " -"signals to a process using a file descriptor instead of a pid. " -"(:issue:`38712`)" +"signals to a process using a file descriptor instead of a pid. (:issue:" +"`38712`)" msgstr "" #: ../../whatsnew/3.9.rst:657 @@ -1024,10 +1018,10 @@ msgstr "smtplib" #: ../../whatsnew/3.9.rst:659 msgid "" -":class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise " -"a :class:`ValueError` if the given timeout for their constructor is zero to " -"prevent the creation of a non-blocking socket. (Contributed by Donghee Na " -"in :issue:`39259`.)" +":class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a :class:" +"`ValueError` if the given timeout for their constructor is zero to prevent " +"the creation of a non-blocking socket. (Contributed by Donghee Na in :issue:" +"`39259`.)" msgstr "" #: ../../whatsnew/3.9.rst:663 @@ -1042,9 +1036,9 @@ msgstr "socket" #: ../../whatsnew/3.9.rst:669 msgid "" -"The :mod:`socket` module now exports " -"the :const:`~socket.CAN_RAW_JOIN_FILTERS` constant on Linux 4.1 and greater. " -"(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)" +"The :mod:`socket` module now exports the :const:`~socket." +"CAN_RAW_JOIN_FILTERS` constant on Linux 4.1 and greater. (Contributed by " +"Stefan Tatschner and Zackery Spytz in :issue:`25780`.)" msgstr "" #: ../../whatsnew/3.9.rst:673 @@ -1055,9 +1049,9 @@ msgstr "" #: ../../whatsnew/3.9.rst:676 msgid "" -"The socket module now has the :func:`socket.send_fds` " -"and :func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, " -"Shinya Okano and Victor Stinner in :issue:`28724`.)" +"The socket module now has the :func:`socket.send_fds` and :func:`socket." +"recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya Okano and " +"Victor Stinner in :issue:`28724`.)" msgstr "" #: ../../whatsnew/3.9.rst:682 @@ -1145,11 +1139,10 @@ msgstr "xml" #: ../../whatsnew/3.9.rst:735 msgid "" -"White space characters within attributes are now preserved when " -"serializing :mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer " -"normalized to \"\\n\". This is the result of discussion about how to " -"interpret section 2.11 of XML spec. (Contributed by Mefistotelis " -"in :issue:`39011`.)" +"White space characters within attributes are now preserved when serializing :" +"mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer normalized to " +"\"\\n\". This is the result of discussion about how to interpret section " +"2.11 of XML spec. (Contributed by Mefistotelis in :issue:`39011`.)" msgstr "" #: ../../whatsnew/3.9.rst:743 @@ -1189,8 +1182,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:762 msgid "" "Previously, the bytecode evaluation loop was interrupted at each instruction " -"until the main thread handles signals. (Contributed by Victor Stinner " -"in :issue:`40010`.)" +"until the main thread handles signals. (Contributed by Victor Stinner in :" +"issue:`40010`.)" msgstr "" #: ../../whatsnew/3.9.rst:766 @@ -1208,16 +1201,15 @@ msgstr "" #: ../../whatsnew/3.9.rst:774 msgid "" -"A number of Python builtins " -"(:class:`range`, :class:`tuple`, :class:`set`, :class:`frozenset`, :class:`list`, :class:`dict`) " -"are now sped up by using :pep:`590` vectorcall protocol. (Contributed by " -"Donghee Na, Mark Shannon, Jeroen Demeyer and Petr Viktorin " -"in :issue:`37207`.)" +"A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`, :" +"class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using :" +"pep:`590` vectorcall protocol. (Contributed by Donghee Na, Mark Shannon, " +"Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)" msgstr "" #: ../../whatsnew/3.9.rst:779 msgid "" -"Optimized :func:`~set.difference_update` for the case when the other set is " +"Optimized :meth:`!set.difference_update` for the case when the other set is " "much larger than the base set. (Suggested by Evgeny Kapun with code " "contributed by Michele Orrù in :issue:`8425`.)" msgstr "" @@ -1403,10 +1395,10 @@ msgid "" "These results were generated from the variable access benchmark script at: " "``Tools/scripts/var_access_benchmark.py``. The benchmark script displays " "timings in nanoseconds. The benchmarks were measured on an `Intel® Core™ " -"i7-4960HQ processor `_ running " -"the macOS 64-bit builds found at `python.org `_." +"i7-4960HQ processor `_ running the macOS 64-bit builds found at `python.org `_." msgstr "" #: ../../whatsnew/3.9.rst:853 @@ -1416,8 +1408,8 @@ msgstr "已棄用" #: ../../whatsnew/3.9.rst:855 msgid "" "The distutils ``bdist_msi`` command is now deprecated, use ``bdist_wheel`` " -"(wheel packages) instead. (Contributed by Hugo van Kemenade " -"in :issue:`39586`.)" +"(wheel packages) instead. (Contributed by Hugo van Kemenade in :issue:" +"`39586`.)" msgstr "" #: ../../whatsnew/3.9.rst:859 @@ -1439,9 +1431,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:870 msgid "" -"The Public C API functions :c:func:`!" -"PyParser_SimpleParseStringFlags`, :c:func:`!" -"PyParser_SimpleParseStringFlagsFilename`, :c:func:`!" +"The Public C API functions :c:func:`!PyParser_SimpleParseStringFlags`, :c:" +"func:`!PyParser_SimpleParseStringFlagsFilename`, :c:func:`!" "PyParser_SimpleParseFileFlags` and :c:func:`!PyNode_Compile` are deprecated " "and will be removed in Python 3.10 together with the old parser." msgstr "" @@ -1459,9 +1450,8 @@ msgid "" "The :mod:`random` module currently accepts any hashable type as a possible " "seed value. Unfortunately, some of those types are not guaranteed to have a " "deterministic hash value. After Python 3.9, the module will restrict its " -"seeds " -"to :const:`None`, :class:`int`, :class:`float`, :class:`str`, :class:`bytes`, " -"and :class:`bytearray`." +"seeds to :const:`None`, :class:`int`, :class:`float`, :class:`str`, :class:" +"`bytes`, and :class:`bytearray`." msgstr "" #: ../../whatsnew/3.9.rst:887 @@ -1469,8 +1459,8 @@ msgid "" "Opening the :class:`~gzip.GzipFile` file for writing without specifying the " "*mode* argument is deprecated. In future Python versions it will always be " "opened for reading by default. Specify the *mode* argument for opening it " -"for writing and silencing a warning. (Contributed by Serhiy Storchaka " -"in :issue:`28286`.)" +"for writing and silencing a warning. (Contributed by Serhiy Storchaka in :" +"issue:`28286`.)" msgstr "" #: ../../whatsnew/3.9.rst:893 @@ -1519,17 +1509,17 @@ msgid "" ":mod:`ast` classes ``Suite``, ``Param``, ``AugLoad`` and ``AugStore`` are " "considered deprecated and will be removed in future Python versions. They " "were not generated by the parser and not accepted by the code generator in " -"Python 3. (Contributed by Batuhan Taskaya in :issue:`39639` " -"and :issue:`39969` and Serhiy Storchaka in :issue:`39988`.)" +"Python 3. (Contributed by Batuhan Taskaya in :issue:`39639` and :issue:" +"`39969` and Serhiy Storchaka in :issue:`39988`.)" msgstr "" #: ../../whatsnew/3.9.rst:923 msgid "" "The :c:func:`!PyEval_InitThreads` and :c:func:`!PyEval_ThreadsInitialized` " -"functions are now deprecated and will be removed in Python 3.11. " -"Calling :c:func:`!PyEval_InitThreads` now does nothing. The :term:`GIL` is " -"initialized by :c:func:`Py_Initialize` since Python 3.7. (Contributed by " -"Victor Stinner in :issue:`39877`.)" +"functions are now deprecated and will be removed in Python 3.11. Calling :c:" +"func:`!PyEval_InitThreads` now does nothing. The :term:`GIL` is initialized " +"by :c:func:`Py_Initialize` since Python 3.7. (Contributed by Victor Stinner " +"in :issue:`39877`.)" msgstr "" #: ../../whatsnew/3.9.rst:929 @@ -1541,8 +1531,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:932 msgid "" ":func:`!smtpd.MailmanProxy` is now deprecated as it is unusable without an " -"external module, ``mailman``. (Contributed by Samuel Colvin " -"in :issue:`35800`.)" +"external module, ``mailman``. (Contributed by Samuel Colvin in :issue:" +"`35800`.)" msgstr "" #: ../../whatsnew/3.9.rst:935 @@ -1576,8 +1566,8 @@ msgid "" "removed. These methods are deprecated since Python 3.3. Generally, these " "extensions are not supported or not enabled by NNTP server administrators. " "For ``xgtitle()``, please use :meth:`!nntplib.NNTP.descriptions` or :meth:`!" -"nntplib.NNTP.description` instead. (Contributed by Donghee Na " -"in :issue:`39366`.)" +"nntplib.NNTP.description` instead. (Contributed by Donghee Na in :issue:" +"`39366`.)" msgstr "" #: ../../whatsnew/3.9.rst:963 @@ -1598,9 +1588,9 @@ msgstr "" #: ../../whatsnew/3.9.rst:973 msgid "" "The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have " -"been removed. They were deprecated since Python 3.2. " -"Use :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead. " -"(Contributed by Victor Stinner in :issue:`37392`.)" +"been removed. They were deprecated since Python 3.2. Use :func:`sys." +"getswitchinterval` and :func:`sys.setswitchinterval` instead. (Contributed " +"by Victor Stinner in :issue:`37392`.)" msgstr "" #: ../../whatsnew/3.9.rst:978 @@ -1634,23 +1624,21 @@ msgstr "" #: ../../whatsnew/3.9.rst:996 msgid "" -"Methods ``getchildren()`` and ``getiterator()`` of " -"classes :class:`~xml.etree.ElementTree.ElementTree` " -"and :class:`~xml.etree.ElementTree.Element` in " -"the :mod:`~xml.etree.ElementTree` module have been removed. They were " -"deprecated in Python 3.2. Use ``iter(x)`` or ``list(x)`` instead of " -"``x.getchildren()`` and ``x.iter()`` or ``list(x.iter())`` instead of " -"``x.getiterator()``. (Contributed by Serhiy Storchaka in :issue:`36543`.)" +"Methods ``getchildren()`` and ``getiterator()`` of classes :class:`~xml." +"etree.ElementTree.ElementTree` and :class:`~xml.etree.ElementTree.Element` " +"in the :mod:`~xml.etree.ElementTree` module have been removed. They were " +"deprecated in Python 3.2. Use ``iter(x)`` or ``list(x)`` instead of ``x." +"getchildren()`` and ``x.iter()`` or ``list(x.iter())`` instead of ``x." +"getiterator()``. (Contributed by Serhiy Storchaka in :issue:`36543`.)" msgstr "" #: ../../whatsnew/3.9.rst:1004 msgid "" "The old :mod:`plistlib` API has been removed, it was deprecated since Python " -"3.4. Use " -"the :func:`~plistlib.load`, :func:`~plistlib.loads`, :func:`~plistlib.dump`, " -"and :func:`~plistlib.dumps` functions. Additionally, the *use_builtin_types* " -"parameter was removed, standard :class:`bytes` objects are always used " -"instead. (Contributed by Jon Janzen in :issue:`36409`.)" +"3.4. Use the :func:`~plistlib.load`, :func:`~plistlib.loads`, :func:" +"`~plistlib.dump`, and :func:`~plistlib.dumps` functions. Additionally, the " +"*use_builtin_types* parameter was removed, standard :class:`bytes` objects " +"are always used instead. (Contributed by Jon Janzen in :issue:`36409`.)" msgstr "" #: ../../whatsnew/3.9.rst:1010 @@ -1664,9 +1652,9 @@ msgstr "" #: ../../whatsnew/3.9.rst:1015 msgid "" "``base64.encodestring()`` and ``base64.decodestring()``, aliases deprecated " -"since Python 3.1, have been removed: use :func:`base64.encodebytes` " -"and :func:`base64.decodebytes` instead. (Contributed by Victor Stinner " -"in :issue:`39351`.)" +"since Python 3.1, have been removed: use :func:`base64.encodebytes` and :" +"func:`base64.decodebytes` instead. (Contributed by Victor Stinner in :issue:" +"`39351`.)" msgstr "" #: ../../whatsnew/3.9.rst:1020 @@ -1687,9 +1675,9 @@ msgstr "" #: ../../whatsnew/3.9.rst:1029 msgid "" "The *encoding* parameter of :func:`json.loads` has been removed. As of " -"Python 3.1, it was deprecated and ignored; using it has emitted " -"a :exc:`DeprecationWarning` since Python 3.8. (Contributed by Inada Naoki " -"in :issue:`39377`)" +"Python 3.1, it was deprecated and ignored; using it has emitted a :exc:" +"`DeprecationWarning` since Python 3.8. (Contributed by Inada Naoki in :issue:" +"`39377`)" msgstr "" #: ../../whatsnew/3.9.rst:1034 @@ -1703,18 +1691,18 @@ msgstr "" #: ../../whatsnew/3.9.rst:1039 msgid "" "The :func:`!sys.getcounts` function, the ``-X showalloccount`` command line " -"option and the ``show_alloc_count`` field of the C " -"structure :c:type:`PyConfig` have been removed. They required a special " -"Python build by defining ``COUNT_ALLOCS`` macro. (Contributed by Victor " -"Stinner in :issue:`39489`.)" +"option and the ``show_alloc_count`` field of the C structure :c:type:" +"`PyConfig` have been removed. They required a special Python build by " +"defining ``COUNT_ALLOCS`` macro. (Contributed by Victor Stinner in :issue:" +"`39489`.)" msgstr "" #: ../../whatsnew/3.9.rst:1045 msgid "" "The ``_field_types`` attribute of the :class:`typing.NamedTuple` class has " "been removed. It was deprecated since Python 3.8. Use the " -"``__annotations__`` attribute instead. (Contributed by Serhiy Storchaka " -"in :issue:`40182`.)" +"``__annotations__`` attribute instead. (Contributed by Serhiy Storchaka in :" +"issue:`40182`.)" msgstr "" #: ../../whatsnew/3.9.rst:1050 @@ -1727,8 +1715,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:1054 msgid "" "The :meth:`!asyncio.Task.current_task` and :meth:`!asyncio.Task.all_tasks` " -"have been removed. They were deprecated since Python 3.7 and you can " -"use :func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead. " +"have been removed. They were deprecated since Python 3.7 and you can use :" +"func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead. " "(Contributed by Rémi Lapeyre in :issue:`40967`)" msgstr "" @@ -1756,11 +1744,10 @@ msgstr "Python API 的變更" #: ../../whatsnew/3.9.rst:1075 msgid "" -":func:`__import__` and :func:`importlib.util.resolve_name` now " -"raise :exc:`ImportError` where it previously raised :exc:`ValueError`. " -"Callers catching the specific exception type and supporting both Python 3.9 " -"and earlier versions will need to catch both using ``except (ImportError, " -"ValueError):``." +":func:`__import__` and :func:`importlib.util.resolve_name` now raise :exc:" +"`ImportError` where it previously raised :exc:`ValueError`. Callers catching " +"the specific exception type and supporting both Python 3.9 and earlier " +"versions will need to catch both using ``except (ImportError, ValueError):``." msgstr "" #: ../../whatsnew/3.9.rst:1080 @@ -1771,9 +1758,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:1083 msgid "" -"The :meth:`select.epoll.unregister` method no longer ignores " -"the :const:`~errno.EBADF` error. (Contributed by Victor Stinner " -"in :issue:`39239`.)" +"The :meth:`select.epoll.unregister` method no longer ignores the :const:" +"`~errno.EBADF` error. (Contributed by Victor Stinner in :issue:`39239`.)" msgstr "" #: ../../whatsnew/3.9.rst:1087 @@ -1807,10 +1793,10 @@ msgstr "" #: ../../whatsnew/3.9.rst:1105 msgid "" -":meth:`asyncio.loop.shutdown_default_executor` has been added " -"to :class:`~asyncio.AbstractEventLoop`, meaning alternative event loops that " -"inherit from it should have this method defined. (Contributed by Kyle " -"Stanley in :issue:`34037`.)" +":meth:`asyncio.loop.shutdown_default_executor` has been added to :class:" +"`~asyncio.AbstractEventLoop`, meaning alternative event loops that inherit " +"from it should have this method defined. (Contributed by Kyle Stanley in :" +"issue:`34037`.)" msgstr "" #: ../../whatsnew/3.9.rst:1110 @@ -1834,19 +1820,18 @@ msgid "" "The :func:`logging.getLogger` API now returns the root logger when passed " "the name ``'root'``, whereas previously it returned a non-root logger named " "``'root'``. This could affect cases where user code explicitly wants a non-" -"root logger named ``'root'``, or instantiates a logger using " -"``logging.getLogger(__name__)`` in some top-level module called " -"``'root.py'``. (Contributed by Vinay Sajip in :issue:`37742`.)" +"root logger named ``'root'``, or instantiates a logger using ``logging." +"getLogger(__name__)`` in some top-level module called ``'root.py'``. " +"(Contributed by Vinay Sajip in :issue:`37742`.)" msgstr "" #: ../../whatsnew/3.9.rst:1127 msgid "" -"Division handling of :class:`~pathlib.PurePath` now " -"returns :data:`NotImplemented` instead of raising a :exc:`TypeError` when " -"passed something other than an instance of ``str`` " -"or :class:`~pathlib.PurePath`. This allows creating compatible classes that " -"don't inherit from those mentioned types. (Contributed by Roger Aiudi " -"in :issue:`34775`)." +"Division handling of :class:`~pathlib.PurePath` now returns :data:" +"`NotImplemented` instead of raising a :exc:`TypeError` when passed something " +"other than an instance of ``str`` or :class:`~pathlib.PurePath`. This " +"allows creating compatible classes that don't inherit from those mentioned " +"types. (Contributed by Roger Aiudi in :issue:`34775`)." msgstr "" #: ../../whatsnew/3.9.rst:1133 @@ -1861,11 +1846,11 @@ msgstr "" #: ../../whatsnew/3.9.rst:1141 msgid "" -":func:`codecs.lookup` now normalizes the encoding name the same way " -"as :func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` " -"also converts the name to lower case. For example, ``\"latex+latin1\"`` " -"encoding name is now normalized to ``\"latex_latin1\"``. (Contributed by " -"Jordon Xu in :issue:`37751`.)" +":func:`codecs.lookup` now normalizes the encoding name the same way as :func:" +"`!encodings.normalize_encoding`, except that :func:`codecs.lookup` also " +"converts the name to lower case. For example, ``\"latex+latin1\"`` encoding " +"name is now normalized to ``\"latex_latin1\"``. (Contributed by Jordon Xu " +"in :issue:`37751`.)" msgstr "" #: ../../whatsnew/3.9.rst:1149 @@ -1878,10 +1863,9 @@ msgid "" "with :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their " "type object since Python 3.8. As indicated in the \"Changes in the C API\" " "of Python 3.8, for the vast majority of cases, there should be no side " -"effect but for types that have a " -"custom :c:member:`~PyTypeObject.tp_traverse` function, ensure that all " -"custom ``tp_traverse`` functions of heap-allocated types visit the object's " -"type." +"effect but for types that have a custom :c:member:`~PyTypeObject." +"tp_traverse` function, ensure that all custom ``tp_traverse`` functions of " +"heap-allocated types visit the object's type." msgstr "" #: ../../whatsnew/3.9.rst:1161 @@ -1936,8 +1920,8 @@ msgstr "(更多資訊請見 :issue:`35810` 與 :issue:`40217`。)" msgid "" "The functions ``PyEval_CallObject``, ``PyEval_CallFunction``, " "``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated. " -"Use :c:func:`PyObject_Call` and its variants instead. (See more details " -"in :issue:`29548`.)" +"Use :c:func:`PyObject_Call` and its variants instead. (See more details in :" +"issue:`29548`.)" msgstr "" #: ../../whatsnew/3.9.rst:1204 @@ -1946,9 +1930,9 @@ msgstr "CPython 位元組碼變更" #: ../../whatsnew/3.9.rst:1206 msgid "" -"The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling " -"the :keyword:`assert` statement. Previously, the assert statement would not " -"work correctly if the :exc:`AssertionError` exception was being shadowed. " +"The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling the :" +"keyword:`assert` statement. Previously, the assert statement would not work " +"correctly if the :exc:`AssertionError` exception was being shadowed. " "(Contributed by Zackery Spytz in :issue:`34880`.)" msgstr "" @@ -1985,10 +1969,10 @@ msgstr "建置變更" #: ../../whatsnew/3.9.rst:1225 msgid "" "Added ``--with-platlibdir`` option to the ``configure`` script: name of the " -"platform-specific library directory, stored in the " -"new :data:`sys.platlibdir` attribute. See :data:`sys.platlibdir` attribute " -"for more information. (Contributed by Jan Matějek, Matěj Cepl, Charalampos " -"Stratakis and Victor Stinner in :issue:`1294959`.)" +"platform-specific library directory, stored in the new :data:`sys." +"platlibdir` attribute. See :data:`sys.platlibdir` attribute for more " +"information. (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis " +"and Victor Stinner in :issue:`1294959`.)" msgstr "" #: ../../whatsnew/3.9.rst:1231 @@ -2051,16 +2035,16 @@ msgstr "C API 變更" msgid "" ":pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate a module " "with a class; :c:func:`PyType_GetModule` and :c:func:`PyType_GetModuleState` " -"to retrieve the module and its state; and :c:type:`PyCMethod` " -"and :c:macro:`METH_METHOD` to allow a method to access the class it was " -"defined in. (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)" +"to retrieve the module and its state; and :c:type:`PyCMethod` and :c:macro:" +"`METH_METHOD` to allow a method to access the class it was defined in. " +"(Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)" msgstr "" #: ../../whatsnew/3.9.rst:1280 msgid "" -"Added :c:func:`PyFrame_GetCode` function: get a frame code. " -"Added :c:func:`PyFrame_GetBack` function: get the frame next outer frame. " -"(Contributed by Victor Stinner in :issue:`40421`.)" +"Added :c:func:`PyFrame_GetCode` function: get a frame code. Added :c:func:" +"`PyFrame_GetBack` function: get the frame next outer frame. (Contributed by " +"Victor Stinner in :issue:`40421`.)" msgstr "" #: ../../whatsnew/3.9.rst:1284 @@ -2071,12 +2055,12 @@ msgstr "" #: ../../whatsnew/3.9.rst:1287 msgid "" -"Added :c:func:`PyThreadState_GetInterpreter` " -"and :c:func:`PyInterpreterState_Get` functions to get the interpreter. " -"Added :c:func:`PyThreadState_GetFrame` function to get the current frame of " -"a Python thread state. Added :c:func:`PyThreadState_GetID` function: get the " -"unique identifier of a Python thread state. (Contributed by Victor Stinner " -"in :issue:`39947`.)" +"Added :c:func:`PyThreadState_GetInterpreter` and :c:func:" +"`PyInterpreterState_Get` functions to get the interpreter. Added :c:func:" +"`PyThreadState_GetFrame` function to get the current frame of a Python " +"thread state. Added :c:func:`PyThreadState_GetID` function: get the unique " +"identifier of a Python thread state. (Contributed by Victor Stinner in :" +"issue:`39947`.)" msgstr "" #: ../../whatsnew/3.9.rst:1295 @@ -2118,18 +2102,18 @@ msgstr "" #: ../../whatsnew/3.9.rst:1317 msgid "" -"Added the functions :c:func:`PyObject_GC_IsTracked` " -"and :c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if " -"Python objects are being currently tracked or have been already finalized by " -"the garbage collector respectively. (Contributed by Pablo Galindo Salgado " -"in :issue:`40241`.)" +"Added the functions :c:func:`PyObject_GC_IsTracked` and :c:func:" +"`PyObject_GC_IsFinalized` to the public API to allow to query if Python " +"objects are being currently tracked or have been already finalized by the " +"garbage collector respectively. (Contributed by Pablo Galindo Salgado in :" +"issue:`40241`.)" msgstr "" #: ../../whatsnew/3.9.rst:1323 msgid "" "Added :c:func:`!_PyObject_FunctionStr` to get a user-friendly string " -"representation of a function-like object. (Patch by Jeroen Demeyer " -"in :issue:`37645`.)" +"representation of a function-like object. (Patch by Jeroen Demeyer in :issue:" +"`37645`.)" msgstr "" #: ../../whatsnew/3.9.rst:1327 @@ -2141,21 +2125,20 @@ msgstr "" #: ../../whatsnew/3.9.rst:1335 msgid "" "``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory " -"*tstate* parameter (``PyThreadState*``). (Contributed by Victor Stinner " -"in :issue:`38500`.)" +"*tstate* parameter (``PyThreadState*``). (Contributed by Victor Stinner in :" +"issue:`38500`.)" msgstr "" #: ../../whatsnew/3.9.rst:1339 msgid "" -"Extension " -"modules: :c:member:`~PyModuleDef.m_traverse`, :c:member:`~PyModuleDef.m_clear` " -"and :c:member:`~PyModuleDef.m_free` functions of :c:type:`PyModuleDef` are " -"no longer called if the module state was requested but is not allocated yet. " -"This is the case immediately after the module is created and before the " -"module is executed (:c:data:`Py_mod_exec` function). More precisely, these " -"functions are not called if :c:member:`~PyModuleDef.m_size` is greater than " -"0 and the module state (as returned by :c:func:`PyModule_GetState`) is " -"``NULL``." +"Extension modules: :c:member:`~PyModuleDef.m_traverse`, :c:member:" +"`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free` functions of :c:" +"type:`PyModuleDef` are no longer called if the module state was requested " +"but is not allocated yet. This is the case immediately after the module is " +"created and before the module is executed (:c:data:`Py_mod_exec` function). " +"More precisely, these functions are not called if :c:member:`~PyModuleDef." +"m_size` is greater than 0 and the module state (as returned by :c:func:" +"`PyModule_GetState`) is ``NULL``." msgstr "" #: ../../whatsnew/3.9.rst:1348 @@ -2189,26 +2172,25 @@ msgstr "" #: ../../whatsnew/3.9.rst:1365 msgid "" "The :c:type:`!PyGC_Head` structure is now opaque. It is only defined in the " -"internal C API (``pycore_gc.h``). (Contributed by Victor Stinner " -"in :issue:`40241`.)" +"internal C API (``pycore_gc.h``). (Contributed by Victor Stinner in :issue:" +"`40241`.)" msgstr "" #: ../../whatsnew/3.9.rst:1369 msgid "" -"The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, " -"``PyUnicode_WSTR_LENGTH``, :c:func:`!PyUnicode_FromUnicode`, :c:func:`!" -"PyUnicode_AsUnicode`, ``_PyUnicode_AsUnicode``, and :c:func:`!" -"PyUnicode_AsUnicodeAndSize` are marked as deprecated in C. They have been " -"deprecated by :pep:`393` since Python 3.3. (Contributed by Inada Naoki " -"in :issue:`36346`.)" +"The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``, :c:" +"func:`!PyUnicode_FromUnicode`, :c:func:`!PyUnicode_AsUnicode`, " +"``_PyUnicode_AsUnicode``, and :c:func:`!PyUnicode_AsUnicodeAndSize` are " +"marked as deprecated in C. They have been deprecated by :pep:`393` since " +"Python 3.3. (Contributed by Inada Naoki in :issue:`36346`.)" msgstr "" #: ../../whatsnew/3.9.rst:1376 msgid "" "The :c:func:`Py_FatalError` function is replaced with a macro which logs " "automatically the name of the current function, unless the " -"``Py_LIMITED_API`` macro is defined. (Contributed by Victor Stinner " -"in :issue:`39882`.)" +"``Py_LIMITED_API`` macro is defined. (Contributed by Victor Stinner in :" +"issue:`39882`.)" msgstr "" #: ../../whatsnew/3.9.rst:1381 @@ -2228,10 +2210,10 @@ msgstr "" #: ../../whatsnew/3.9.rst:1388 msgid "" -"The :c:func:`!PyObject_NEW` macro becomes an alias to " -"the :c:macro:`PyObject_New` macro, and the :c:func:`!PyObject_NEW_VAR` macro " -"becomes an alias to the :c:macro:`PyObject_NewVar` macro. They no longer " -"access directly the :c:member:`PyTypeObject.tp_basicsize` member." +"The :c:func:`!PyObject_NEW` macro becomes an alias to the :c:macro:" +"`PyObject_New` macro, and the :c:func:`!PyObject_NEW_VAR` macro becomes an " +"alias to the :c:macro:`PyObject_NewVar` macro. They no longer access " +"directly the :c:member:`PyTypeObject.tp_basicsize` member." msgstr "" #: ../../whatsnew/3.9.rst:1393 @@ -2261,8 +2243,8 @@ msgstr "(更多資訊請見 :issue:`40170`。)" #: ../../whatsnew/3.9.rst:1409 msgid "" "Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of " -"``pyfpe.h`` from the limited C API. (Contributed by Victor Stinner " -"in :issue:`38835`.)" +"``pyfpe.h`` from the limited C API. (Contributed by Victor Stinner in :issue:" +"`38835`.)" msgstr "" #: ../../whatsnew/3.9.rst:1413 @@ -2279,8 +2261,8 @@ msgstr "" #: ../../whatsnew/3.9.rst:1422 msgid "" -"``PyThreadState_DeleteCurrent()`` (Contributed by Joannah Nanjekye " -"in :issue:`37878`.)" +"``PyThreadState_DeleteCurrent()`` (Contributed by Joannah Nanjekye in :issue:" +"`37878`.)" msgstr "" #: ../../whatsnew/3.9.rst:1424 @@ -2437,8 +2419,8 @@ msgid "" "``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, " "``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``, " "``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``, " -"``PyNoArgsFunction``. (Contributed by Pablo Galindo Salgado " -"in :issue:`39372`.)" +"``PyNoArgsFunction``. (Contributed by Pablo Galindo Salgado in :issue:" +"`39372`.)" msgstr "" #: ../../whatsnew/3.9.rst:1490 @@ -2447,9 +2429,8 @@ msgstr "Python 3.9.1 中顯著的變更" #: ../../whatsnew/3.9.rst:1495 msgid "" -"The behavior of :class:`typing.Literal` was changed to conform " -"with :pep:`586` and to match the behavior of static type checkers specified " -"in the PEP." +"The behavior of :class:`typing.Literal` was changed to conform with :pep:" +"`586` and to match the behavior of static type checkers specified in the PEP." msgstr "" #: ../../whatsnew/3.9.rst:1498 @@ -2532,14 +2513,13 @@ msgid "" "``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of " "``(int, str, str)``; previously this was ``([int, str], str)``. To allow " "this change, :class:`types.GenericAlias` can now be subclassed, and a " -"subclass will be returned when subscripting " -"the :class:`collections.abc.Callable` type. Code which accesses the " -"arguments via :func:`typing.get_args` or ``__args__`` need to account for " -"this change. A :exc:`DeprecationWarning` may be emitted for invalid forms " -"of parameterizing :class:`collections.abc.Callable` which may have passed " -"silently in Python 3.9.1. This :exc:`DeprecationWarning` will become " -"a :exc:`TypeError` in Python 3.10. (Contributed by Ken Jin " -"in :issue:`42195`.)" +"subclass will be returned when subscripting the :class:`collections.abc." +"Callable` type. Code which accesses the arguments via :func:`typing." +"get_args` or ``__args__`` need to account for this change. A :exc:" +"`DeprecationWarning` may be emitted for invalid forms of parameterizing :" +"class:`collections.abc.Callable` which may have passed silently in Python " +"3.9.1. This :exc:`DeprecationWarning` will become a :exc:`TypeError` in " +"Python 3.10. (Contributed by Ken Jin in :issue:`42195`.)" msgstr "" #: ../../whatsnew/3.9.rst:1552 ../../whatsnew/3.9.rst:1577 @@ -2549,14 +2529,13 @@ msgstr "urllib.parse" #: ../../whatsnew/3.9.rst:1554 msgid "" "Earlier Python versions allowed using both ``;`` and ``&`` as query " -"parameter separators in :func:`urllib.parse.parse_qs` " -"and :func:`urllib.parse.parse_qsl`. Due to security concerns, and to " -"conform with newer W3C recommendations, this has been changed to allow only " -"a single separator key, with ``&`` as the default. This change also " -"affects :func:`!cgi.parse` and :func:`!cgi.parse_multipart` as they use the " -"affected functions internally. For more details, please see their respective " -"documentation. (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin " -"in :issue:`42967`.)" +"parameter separators in :func:`urllib.parse.parse_qs` and :func:`urllib." +"parse.parse_qsl`. Due to security concerns, and to conform with newer W3C " +"recommendations, this has been changed to allow only a single separator key, " +"with ``&`` as the default. This change also affects :func:`!cgi.parse` and :" +"func:`!cgi.parse_multipart` as they use the affected functions internally. " +"For more details, please see their respective documentation. (Contributed by " +"Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.)" msgstr "" #: ../../whatsnew/3.9.rst:1565 @@ -2579,12 +2558,11 @@ msgstr "Python 3.9.5 中顯著的變更" #: ../../whatsnew/3.9.rst:1579 msgid "" "The presence of newline or tab characters in parts of a URL allows for some " -"forms of attacks. Following the WHATWG specification that " -"updates :rfc:`3986`, ASCII newline ``\\n``, ``\\r`` and tab ``\\t`` " -"characters are stripped from the URL by the parser in :mod:`urllib.parse` " -"preventing such attacks. The removal characters are controlled by a new " -"module level variable ``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. " -"(See :gh:`88048`)" +"forms of attacks. Following the WHATWG specification that updates :rfc:" +"`3986`, ASCII newline ``\\n``, ``\\r`` and tab ``\\t`` characters are " +"stripped from the URL by the parser in :mod:`urllib.parse` preventing such " +"attacks. The removal characters are controlled by a new module level " +"variable ``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :gh:`88048`)" msgstr "" #: ../../whatsnew/3.9.rst:1587 From ff54fed21e9ac3c8335d5a405a21b11be94ca97d Mon Sep 17 00:00:00 2001 From: Matt Wang Date: Mon, 7 Jul 2025 20:46:21 +0800 Subject: [PATCH 4/4] fix: resolve fuzzy entries --- c-api/frame.po | 2 +- c-api/init.po | 4 +- c-api/init_config.po | 12 +-- c-api/sys.po | 2 +- howto/enum.po | 4 +- howto/logging-cookbook.po | 2 + library/asyncio-task.po | 2 +- library/bdb.po | 4 +- library/bz2.po | 2 +- library/codecs.po | 2 +- library/datetime.po | 4 +- library/dbm.po | 2 +- library/difflib.po | 75 ++++++++++++-- library/dis.po | 28 +++--- library/doctest.po | 10 +- library/fileinput.po | 2 +- library/gettext.po | 2 +- library/language.po | 2 +- library/mimetypes.po | 2 +- library/optparse.po | 14 +-- library/os.po | 14 +-- library/platform.po | 2 +- library/py_compile.po | 2 +- library/pyexpat.po | 21 ++-- library/random.po | 3 +- library/runpy.po | 2 +- library/security_warnings.po | 5 +- library/stdtypes.po | 49 ++++++++-- library/string.po | 8 +- library/struct.po | 2 +- library/sys.po | 2 +- library/tarfile.po | 84 +++++++++------- library/test.po | 2 +- library/token.po | 102 ++++++++++---------- library/tracemalloc.po | 2 +- library/turtle.po | 2 +- library/unittest.po | 8 +- library/xml.dom.minidom.po | 40 ++++++-- library/xml.dom.pulldom.po | 29 ++++-- library/xml.etree.elementtree.po | 28 +++++- library/xml.po | 161 ++----------------------------- library/xml.sax.po | 6 +- library/zipapp.po | 5 +- library/zipimport.po | 2 +- 44 files changed, 391 insertions(+), 367 deletions(-) diff --git a/c-api/frame.po b/c-api/frame.po index da34208fb5..1bbe0b32c7 100644 --- a/c-api/frame.po +++ b/c-api/frame.po @@ -42,7 +42,7 @@ msgstr "" #: ../../c-api/frame.rst:20 msgid "See also :ref:`Reflection `." -msgstr "" +msgstr "另請參閱 :ref:`Reflection `。" #: ../../c-api/frame.rst:24 msgid "" diff --git a/c-api/init.po b/c-api/init.po index eaedaa945b..5d46190f3e 100644 --- a/c-api/init.po +++ b/c-api/init.po @@ -981,7 +981,7 @@ msgstr "" #: ../../c-api/init.rst:736 msgid "See also the :c:var:`Py_Version` constant." -msgstr "" +msgstr "另請參閱 :c:var:`Py_Version` 常數。" #: ../../c-api/init.rst:743 msgid "" @@ -2453,7 +2453,7 @@ msgstr "" #: ../../c-api/init.rst:2016 msgid "See also the :func:`sys.setprofile` function." -msgstr "" +msgstr "另請參閱 :func:`sys.setprofile` 函式。" #: ../../c-api/init.rst:2018 ../../c-api/init.rst:2025 #: ../../c-api/init.rst:2044 ../../c-api/init.rst:2051 diff --git a/c-api/init_config.po b/c-api/init_config.po index 3397a5853b..434dd0394e 100644 --- a/c-api/init_config.po +++ b/c-api/init_config.po @@ -810,7 +810,7 @@ msgstr "預設值:``NULL``。" #: ../../c-api/init_config.rst:580 msgid "See also the :c:member:`~PyConfig.orig_argv` member." -msgstr "" +msgstr "另請參閱 :c:member:`~PyConfig.orig_argv` 成員。" #: ../../c-api/init_config.rst:584 msgid "" @@ -1108,7 +1108,7 @@ msgstr "" #: ../../c-api/init_config.rst:791 msgid "See also the :c:member:`~PyConfig.filesystem_errors` member." -msgstr "" +msgstr "另請參閱 :c:member:`~PyConfig.filesystem_errors` 成員。" #: ../../c-api/init_config.rst:795 msgid "" @@ -1141,11 +1141,11 @@ msgstr "``\"surrogateescape\"``" #: ../../c-api/init_config.rst:808 msgid "``\"surrogatepass\"`` (only supported with the UTF-8 encoding)" -msgstr "" +msgstr "``\"surrogatepass\"``\\ (僅支援 UTF-8 編碼)" #: ../../c-api/init_config.rst:810 msgid "See also the :c:member:`~PyConfig.filesystem_encoding` member." -msgstr "" +msgstr "另請參閱 :c:member:`~PyConfig.filesystem_encoding` 成員。" #: ../../c-api/init_config.rst:815 msgid "Randomized hash function seed." @@ -1159,7 +1159,7 @@ msgstr "" #: ../../c-api/init_config.rst:820 msgid "Set by the :envvar:`PYTHONHASHSEED` environment variable." -msgstr "" +msgstr "由 :envvar:`PYTHONHASHSEED` 環境變數設定。" #: ../../c-api/init_config.rst:822 msgid "" @@ -1174,7 +1174,7 @@ msgstr "" #: ../../c-api/init_config.rst:830 msgid "Set by the :envvar:`PYTHONHOME` environment variable." -msgstr "" +msgstr "由 :envvar:`PYTHONHOME` 環境變數設定。" #: ../../c-api/init_config.rst:834 ../../c-api/init_config.rst:964 #: ../../c-api/init_config.rst:984 ../../c-api/init_config.rst:1073 diff --git a/c-api/sys.po b/c-api/sys.po index 9037d85432..79a6fb3f3f 100644 --- a/c-api/sys.po +++ b/c-api/sys.po @@ -371,7 +371,7 @@ msgstr "" #: ../../c-api/sys.rst:314 msgid "See also :c:func:`PySys_AuditTuple`." -msgstr "" +msgstr "請參閱 :c:func:`PySys_AuditTuple`。" #: ../../c-api/sys.rst:320 msgid "" diff --git a/howto/enum.po b/howto/enum.po index 924ee16d8a..92490f02e6 100644 --- a/howto/enum.po +++ b/howto/enum.po @@ -1515,7 +1515,7 @@ msgstr "" #: ../../howto/enum.rst:806 msgid ":class:`IntFlag` members can also be iterated over::" -msgstr "" +msgstr ":class:`IntFlag` 成員也可以被疊代:" #: ../../howto/enum.rst:808 msgid "" @@ -1627,7 +1627,7 @@ msgstr "" #: ../../howto/enum.rst:866 msgid ":class:`Flag` members can also be iterated over::" -msgstr "" +msgstr ":class:`Flag` 成員也可以被疊代:" #: ../../howto/enum.rst:868 msgid "" diff --git a/howto/logging-cookbook.po b/howto/logging-cookbook.po index 2e3b8fe06b..bb686c54de 100644 --- a/howto/logging-cookbook.po +++ b/howto/logging-cookbook.po @@ -5135,6 +5135,8 @@ msgid "" "INFO:demo:An INFO message\n" "DEBUG:demo:A DEBUG message" msgstr "" +"INFO:demo:An INFO message\n" +"DEBUG:demo:A DEBUG message" #: ../../howto/logging-cookbook.rst:3977 msgid "" diff --git a/library/asyncio-task.po b/library/asyncio-task.po index 65aa9231e1..9d69ab5503 100644 --- a/library/asyncio-task.po +++ b/library/asyncio-task.po @@ -1603,7 +1603,7 @@ msgstr "" #: ../../library/asyncio-task.rst:1189 msgid "Added support for the :mod:`contextvars` module." -msgstr "" +msgstr "新增對 :mod:`contextvars` 模組的支援。" #: ../../library/asyncio-task.rst:1195 msgid "" diff --git a/library/bdb.po b/library/bdb.po index 5f1e59843e..3dcb927100 100644 --- a/library/bdb.po +++ b/library/bdb.po @@ -124,11 +124,11 @@ msgstr "" #: ../../library/bdb.rst:77 msgid ":class:`Breakpoint` instances have the following attributes:" -msgstr "" +msgstr ":class:`Breakpoint` 實例有以下屬性:" #: ../../library/bdb.rst:81 msgid "File name of the :class:`Breakpoint`." -msgstr "" +msgstr ":class:`Breakpoint` 的檔案名稱。" #: ../../library/bdb.rst:85 msgid "Line number of the :class:`Breakpoint` within :attr:`file`." diff --git a/library/bz2.po b/library/bz2.po index 9424d42055..f0ec58fb6a 100644 --- a/library/bz2.po +++ b/library/bz2.po @@ -154,7 +154,7 @@ msgstr "" #: ../../library/bz2.rst:94 msgid ":class:`BZ2File` also provides the following methods and attributes:" -msgstr "" +msgstr ":class:`BZ2File` 也提供了以下方法和屬性:" #: ../../library/bz2.rst:98 msgid "" diff --git a/library/codecs.po b/library/codecs.po index 0079868039..c7f61788ff 100644 --- a/library/codecs.po +++ b/library/codecs.po @@ -2298,7 +2298,7 @@ msgstr "" #: ../../library/codecs.rst:1315 msgid "``cp65001`` is now an alias to ``utf_8``." -msgstr "" +msgstr "``cp65001`` 現在是 ``utf_8`` 的別名。" #: ../../library/codecs.rst:1320 msgid "Python Specific Encodings" diff --git a/library/datetime.po b/library/datetime.po index 7497e0bffb..5078659845 100644 --- a/library/datetime.po +++ b/library/datetime.po @@ -1394,7 +1394,7 @@ msgstr "" #: ../../library/datetime.rst:882 msgid "Constructor:" -msgstr "" +msgstr "建構函式:" #: ../../library/datetime.rst:886 msgid "" @@ -1433,7 +1433,7 @@ msgstr "``0 <= microsecond < 1000000``," #: ../../library/datetime.rst:897 ../../library/datetime.rst:1775 msgid "``fold in [0, 1]``." -msgstr "" +msgstr "``fold in [0, 1]``。" #: ../../library/datetime.rst:901 ../../library/datetime.rst:1342 #: ../../library/datetime.rst:1920 diff --git a/library/dbm.po b/library/dbm.po index 473658aa90..e6eb743921 100644 --- a/library/dbm.po +++ b/library/dbm.po @@ -237,7 +237,7 @@ msgstr "" #: ../../library/dbm.rst:148 msgid ":mod:`dbm.sqlite3` --- SQLite backend for dbm" -msgstr "" +msgstr ":mod:`dbm.sqlite3` --- dbm 的 SQLite 後端" #: ../../library/dbm.rst:156 msgid "**Source code:** :source:`Lib/dbm/sqlite3.py`" diff --git a/library/difflib.po b/library/difflib.po index f637faac83..c0d1130505 100644 --- a/library/difflib.po +++ b/library/difflib.po @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2024, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: @@ -471,7 +471,7 @@ msgstr "" #: ../../library/difflib.rst:399 msgid ":class:`SequenceMatcher` objects have the following methods:" -msgstr "" +msgstr ":class:`SequenceMatcher` 物件有以下方法:" #: ../../library/difflib.rst:403 msgid "Set the two sequences to be compared." @@ -590,7 +590,7 @@ msgstr "``'replace'``" #: ../../library/difflib.rst:498 msgid "``a[i1:i2]`` should be replaced by ``b[j1:j2]``." -msgstr "" +msgstr "``a[i1:i2]`` 應該被替換為 ``b[j1:j2]``。" #: ../../library/difflib.rst:501 msgid "``'delete'``" @@ -598,7 +598,7 @@ msgstr "``'delete'``" #: ../../library/difflib.rst:501 msgid "``a[i1:i2]`` should be deleted. Note that ``j1 == j2`` in this case." -msgstr "" +msgstr "``a[i1:i2]`` 應該被刪除。請注意,在這種情況下 ``j1 == j2``。" #: ../../library/difflib.rst:504 msgid "``'insert'``" @@ -781,7 +781,7 @@ msgstr "" #: ../../library/difflib.rst:649 msgid "The :class:`Differ` class has this constructor:" -msgstr "" +msgstr ":class:`Differ` 類別有這個建構函式:" #: ../../library/difflib.rst:655 msgid "" @@ -867,7 +867,7 @@ msgstr "" #: ../../library/difflib.rst:757 msgid "A command-line interface to difflib" -msgstr "" +msgstr "difflib 的命令列介面" #: ../../library/difflib.rst:759 msgid "" @@ -940,6 +940,69 @@ msgid "" "if __name__ == '__main__':\n" " main()\n" msgstr "" +"\"\"\" Command line interface to difflib.py providing diffs in four " +"formats:\n" +"\n" +"* ndiff: lists every line and highlights interline changes.\n" +"* context: highlights clusters of changes in a before/after format.\n" +"* unified: highlights clusters of changes in an inline format.\n" +"* html: generates side by side comparison with change highlights.\n" +"\n" +"\"\"\"\n" +"\n" +"import sys, os, difflib, argparse\n" +"from datetime import datetime, timezone\n" +"\n" +"def file_mtime(path):\n" +" t = datetime.fromtimestamp(os.stat(path).st_mtime,\n" +" timezone.utc)\n" +" return t.astimezone().isoformat()\n" +"\n" +"def main():\n" +"\n" +" parser = argparse.ArgumentParser()\n" +" parser.add_argument('-c', action='store_true', default=False,\n" +" help='Produce a context format diff (default)')\n" +" parser.add_argument('-u', action='store_true', default=False,\n" +" help='Produce a unified format diff')\n" +" parser.add_argument('-m', action='store_true', default=False,\n" +" help='Produce HTML side by side diff '\n" +" '(can use -c and -l in conjunction)')\n" +" parser.add_argument('-n', action='store_true', default=False,\n" +" help='Produce a ndiff format diff')\n" +" parser.add_argument('-l', '--lines', type=int, default=3,\n" +" help='Set number of context lines (default 3)')\n" +" parser.add_argument('fromfile')\n" +" parser.add_argument('tofile')\n" +" options = parser.parse_args()\n" +"\n" +" n = options.lines\n" +" fromfile = options.fromfile\n" +" tofile = options.tofile\n" +"\n" +" fromdate = file_mtime(fromfile)\n" +" todate = file_mtime(tofile)\n" +" with open(fromfile) as ff:\n" +" fromlines = ff.readlines()\n" +" with open(tofile) as tf:\n" +" tolines = tf.readlines()\n" +"\n" +" if options.u:\n" +" diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, " +"fromdate, todate, n=n)\n" +" elif options.n:\n" +" diff = difflib.ndiff(fromlines, tolines)\n" +" elif options.m:\n" +" diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile," +"tofile,context=options.c,numlines=n)\n" +" else:\n" +" diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, " +"fromdate, todate, n=n)\n" +"\n" +" sys.stdout.writelines(diff)\n" +"\n" +"if __name__ == '__main__':\n" +" main()\n" #: ../../library/difflib.rst:764 msgid "ndiff example" diff --git a/library/dis.po b/library/dis.po index e1585fde13..e2b3b3abee 100644 --- a/library/dis.po +++ b/library/dis.po @@ -504,7 +504,7 @@ msgstr "" #: ../../library/dis.rst:397 msgid "Python Bytecode Instructions" -msgstr "" +msgstr "Python 位元組碼指令" #: ../../library/dis.rst:399 msgid "" @@ -514,7 +514,7 @@ msgstr "" #: ../../library/dis.rst:404 msgid "Details for a bytecode operation" -msgstr "" +msgstr "位元組碼操作的詳細資訊" #: ../../library/dis.rst:408 msgid "" @@ -524,7 +524,7 @@ msgstr "" #: ../../library/dis.rst:414 msgid "human readable name for operation" -msgstr "" +msgstr "操作的可讀名稱" #: ../../library/dis.rst:419 msgid "" @@ -544,7 +544,7 @@ msgstr "" #: ../../library/dis.rst:435 msgid "alias for :data:`arg`" -msgstr "" +msgstr ":data:`arg` 的別名。" #: ../../library/dis.rst:439 msgid "resolved arg value (if any), otherwise ``None``" @@ -634,7 +634,7 @@ msgstr "" #: ../../library/dis.rst:533 msgid "**General instructions**" -msgstr "" +msgstr "**一般指令**" #: ../../library/dis.rst:535 msgid "" @@ -723,11 +723,11 @@ msgstr "" #: ../../library/dis.rst:615 msgid "Implements ``STACK[-1] = -STACK[-1]``." -msgstr "" +msgstr "實作 ``STACK[-1] = -STACK[-1]``。" #: ../../library/dis.rst:620 msgid "Implements ``STACK[-1] = not STACK[-1]``." -msgstr "" +msgstr "實作 ``STACK[-1] = not STACK[-1]``。" #: ../../library/dis.rst:622 ../../library/dis.rst:1318 #: ../../library/dis.rst:1334 @@ -736,11 +736,11 @@ msgstr "" #: ../../library/dis.rst:628 msgid "Implements ``STACK[-1] = ~STACK[-1]``." -msgstr "" +msgstr "實作 ``STACK[-1] = ~STACK[-1]``。" #: ../../library/dis.rst:633 msgid "Implements ``STACK[-1] = iter(STACK[-1])``." -msgstr "" +msgstr "實作 ``STACK[-1] = iter(STACK[-1])``。" #: ../../library/dis.rst:638 msgid "" @@ -1658,11 +1658,11 @@ msgstr "" #: ../../library/dis.rst:1507 ../../library/dis.rst:1531 msgid "``self`` or ``NULL``" -msgstr "" +msgstr "``self`` 或 ``NULL``" #: ../../library/dis.rst:1508 ../../library/dis.rst:1532 msgid "The remaining positional arguments" -msgstr "" +msgstr "剩餘的位置引數" #: ../../library/dis.rst:1510 msgid "``argc`` is the total of the positional arguments, excluding ``self``." @@ -2316,9 +2316,3 @@ msgstr "built-in function(內建函式)" #: ../../library/dis.rst:1602 msgid "slice" msgstr "slice(切片)" - -#~ msgid "or:" -#~ msgstr "或:" - -#~ msgid "``self``" -#~ msgstr "``self``" diff --git a/library/doctest.po b/library/doctest.po index e23645d07a..1e8a7c2bce 100644 --- a/library/doctest.po +++ b/library/doctest.po @@ -2034,7 +2034,7 @@ msgstr "" #: ../../library/doctest.rst:1383 msgid ":class:`DocTestFinder` defines the following method:" -msgstr "" +msgstr ":class:`DocTestFinder` 定義了以下方法:" #: ../../library/doctest.rst:1388 msgid "" @@ -2107,7 +2107,7 @@ msgstr "" #: ../../library/doctest.rst:1435 msgid ":class:`DocTestParser` defines the following methods:" -msgstr "" +msgstr ":class:`DocTestParser` 定義了以下方法:" #: ../../library/doctest.rst:1440 msgid "" @@ -2218,7 +2218,7 @@ msgstr "" #: ../../library/doctest.rst:1528 msgid ":class:`DocTestRunner` defines the following methods:" -msgstr "" +msgstr ":class:`DocTestRunner` 定義了以下方法:" #: ../../library/doctest.rst:1533 msgid "" @@ -2343,7 +2343,7 @@ msgstr "" #: ../../library/doctest.rst:1637 msgid ":class:`OutputChecker` defines the following methods:" -msgstr "" +msgstr ":class:`OutputChecker` 定義了以下方法:" #: ../../library/doctest.rst:1641 msgid "" @@ -2682,7 +2682,7 @@ msgstr "" #: ../../library/doctest.rst:1863 msgid ":exc:`UnexpectedException` defines the following attributes:" -msgstr "" +msgstr ":exc:`UnexpectedException` 定義了以下屬性:" #: ../../library/doctest.rst:1878 msgid "" diff --git a/library/fileinput.po b/library/fileinput.po index 92b59172fd..6c58733102 100644 --- a/library/fileinput.po +++ b/library/fileinput.po @@ -67,7 +67,7 @@ msgstr "" #: ../../library/fileinput.rst:35 msgid ":exc:`IOError` used to be raised; it is now an alias of :exc:`OSError`." -msgstr "" +msgstr ":exc:`IOError` 曾經被引發;現在它是一個 :exc:`OSError` 的別名。" #: ../../library/fileinput.rst:38 msgid "" diff --git a/library/gettext.po b/library/gettext.po index c7634d5d75..dd2bec9239 100644 --- a/library/gettext.po +++ b/library/gettext.po @@ -227,7 +227,7 @@ msgstr "" #: ../../library/gettext.rst:169 msgid ":exc:`IOError` used to be raised, it is now an alias of :exc:`OSError`." -msgstr "" +msgstr ":exc:`IOError` 曾經被引發,現在它是一個 :exc:`OSError` 的別名。" #: ../../library/gettext.rst:172 msgid "*codeset* parameter is removed." diff --git a/library/language.po b/library/language.po index faf9fb5c18..bed2481ca4 100644 --- a/library/language.po +++ b/library/language.po @@ -28,7 +28,7 @@ msgid "" "bytecode disassembly, and various other facilities." msgstr "" "Python 提供了許多模組來協助處理 Python 語言。這些模組支援標記化、剖析、語法分" -"析、位元碼反組譯,以及其他各種設施。" +"析、位元組碼反組譯,以及其他各種設施。" #: ../../library/language.rst:11 msgid "These modules include:" diff --git a/library/mimetypes.po b/library/mimetypes.po index fe246b5824..ca3ae2b140 100644 --- a/library/mimetypes.po +++ b/library/mimetypes.po @@ -83,7 +83,7 @@ msgstr "" #: ../../library/mimetypes.rst:54 msgid "Added support for *url* being a :term:`path-like object`." -msgstr "" +msgstr "新增 *url* 做為 :term:`path-like object` 的支援。" #: ../../library/mimetypes.rst:57 msgid "" diff --git a/library/optparse.po b/library/optparse.po index b23b142f75..f759497dfe 100644 --- a/library/optparse.po +++ b/library/optparse.po @@ -1598,7 +1598,7 @@ msgstr "" #: ../../library/optparse.rst:922 msgid "``usage`` (default: ``\"%prog [options]\"``)" -msgstr "" +msgstr "``usage``\\ (預設值:``\"%prog [options]\"``)" #: ../../library/optparse.rst:923 msgid "" @@ -1611,7 +1611,7 @@ msgstr "" #: ../../library/optparse.rst:929 msgid "``option_list`` (default: ``[]``)" -msgstr "" +msgstr "``option_list``\\ (預設值:``[]``)" #: ../../library/optparse.rst:930 msgid "" @@ -1632,7 +1632,7 @@ msgstr "" #: ../../library/optparse.rst:939 msgid "``version`` (default: ``None``)" -msgstr "" +msgstr "``version``\\ (預設值:``None``)" #: ../../library/optparse.rst:940 msgid "" @@ -1644,7 +1644,7 @@ msgstr "" #: ../../library/optparse.rst:945 msgid "``conflict_handler`` (default: ``\"error\"``)" -msgstr "" +msgstr "``conflict_handler``\\ (預設值:``\"error\"``)" #: ../../library/optparse.rst:946 msgid "" @@ -1654,7 +1654,7 @@ msgstr "" #: ../../library/optparse.rst:950 msgid "``description`` (default: ``None``)" -msgstr "" +msgstr "``description``\\ (預設值:``None``)" #: ../../library/optparse.rst:951 msgid "" @@ -1677,7 +1677,7 @@ msgstr "" #: ../../library/optparse.rst:961 msgid "``add_help_option`` (default: ``True``)" -msgstr "" +msgstr "``add_help_option``\\ (預設值:``True``)" #: ../../library/optparse.rst:962 msgid "" @@ -1697,7 +1697,7 @@ msgstr "" #: ../../library/optparse.rst:969 msgid "``epilog`` (default: ``None``)" -msgstr "" +msgstr "``epilog``\\ (預設值:``None``)" #: ../../library/optparse.rst:970 msgid "A paragraph of help text to print after the option help." diff --git a/library/os.po b/library/os.po index b2f2e44c90..2b236a1956 100644 --- a/library/os.po +++ b/library/os.po @@ -3150,7 +3150,7 @@ msgstr "" #: ../../library/os.rst:2840 msgid "Added support for :ref:`file descriptors ` on Unix." -msgstr "" +msgstr "新增對 Unix 上的\\ :ref:`檔案描述器 `\\ 的支援。" #: ../../library/os.rst:2846 msgid "" @@ -5946,7 +5946,7 @@ msgstr "" #: ../../library/os.rst:5234 msgid "Added :data:`CLD_KILLED` and :data:`CLD_STOPPED` values." -msgstr "" +msgstr "新增 :data:`CLD_KILLED` 和 :data:`CLD_STOPPED` 值。" #: ../../library/os.rst:5240 msgid "Convert a wait status to an exit code." @@ -5954,7 +5954,7 @@ msgstr "" #: ../../library/os.rst:5242 msgid "On Unix:" -msgstr "" +msgstr "在 Unix 上:" #: ../../library/os.rst:5244 msgid "" @@ -5973,7 +5973,7 @@ msgstr "" #: ../../library/os.rst:5251 msgid "Otherwise, raise a :exc:`ValueError`." -msgstr "" +msgstr "否則,引發 :exc:`ValueError`。" #: ../../library/os.rst:5253 msgid "On Windows, return *status* shifted right by 8 bits." @@ -6069,7 +6069,7 @@ msgstr "" #: ../../library/os.rst:5351 msgid "Interface to the scheduler" -msgstr "" +msgstr "排程器介面" #: ../../library/os.rst:5353 msgid "" @@ -6104,11 +6104,11 @@ msgstr "" #: ../../library/os.rst:5383 msgid "A First In First Out scheduling policy." -msgstr "" +msgstr "先進先出排程策略。" #: ../../library/os.rst:5387 msgid "A round-robin scheduling policy." -msgstr "" +msgstr "輪轉排程策略。" #: ../../library/os.rst:5391 msgid "" diff --git a/library/platform.po b/library/platform.po index d7f235e812..8abe17dd5e 100644 --- a/library/platform.po +++ b/library/platform.po @@ -402,7 +402,7 @@ msgstr "" #: ../../library/platform.rst:263 msgid "``system`` is the OS name; either ``'iOS'`` or ``'iPadOS'``." -msgstr "" +msgstr "``system`` 是 OS 名稱;可能是 ``'iOS'`` 或 ``'iPadOS'``。" #: ../../library/platform.rst:264 msgid "``release`` is the iOS version number as a string (e.g., ``'17.2'``)." diff --git a/library/py_compile.po b/library/py_compile.po index 19828595ae..c7c02a8446 100644 --- a/library/py_compile.po +++ b/library/py_compile.po @@ -169,7 +169,7 @@ msgstr "" #: ../../library/py_compile.rst:131 msgid "Command-Line Interface" -msgstr "" +msgstr "命令列介面" #: ../../library/py_compile.rst:133 msgid "" diff --git a/library/pyexpat.po b/library/pyexpat.po index 0f59845ba1..e9a5a8b571 100644 --- a/library/pyexpat.po +++ b/library/pyexpat.po @@ -25,7 +25,7 @@ msgstr ":mod:`!xml.parsers.expat` --- 使用 Expat 進行快速 XML 剖析" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/pyexpat.rst:27 msgid "" @@ -46,7 +46,7 @@ msgstr "" #: ../../library/pyexpat.rst:40 msgid "This module provides one exception and one type object:" -msgstr "" +msgstr "這個模組提供一個例外和一個型別物件:" #: ../../library/pyexpat.rst:45 msgid "" @@ -64,11 +64,11 @@ msgstr "" #: ../../library/pyexpat.rst:58 msgid "The :mod:`xml.parsers.expat` module contains two functions:" -msgstr "" +msgstr ":mod:`xml.parsers.expat` 模組包含兩個函式:" #: ../../library/pyexpat.rst:63 msgid "Returns an explanatory string for a given error number *errno*." -msgstr "" +msgstr "回傳一個給定錯誤編號 *errno* 的解釋字串。" #: ../../library/pyexpat.rst:68 msgid "" @@ -122,6 +122,7 @@ msgid "" ":attr:`StartElementHandler` will receive the following strings for each " "element::" msgstr "" +":attr:`StartElementHandler` 將會收到每個元素的以下字串: ::" #: ../../library/pyexpat.rst:102 msgid "" @@ -143,11 +144,11 @@ msgstr "" #: ../../library/pyexpat.rst:114 msgid "`The Expat XML Parser `_" -msgstr "" +msgstr "`Expat XML 剖析器 `_" #: ../../library/pyexpat.rst:115 msgid "Home page of the Expat project." -msgstr "" +msgstr "Expat 專案的首頁。" #: ../../library/pyexpat.rst:121 msgid "XMLParser Objects" @@ -155,7 +156,7 @@ msgstr "XMLParser 物件" #: ../../library/pyexpat.rst:123 msgid ":class:`xmlparser` objects have the following methods:" -msgstr "" +msgstr ":class:`xmlparser` 物件擁有以下方法:" #: ../../library/pyexpat.rst:128 msgid "" @@ -517,7 +518,7 @@ msgstr "" #: ../../library/pyexpat.rst:476 msgid "Called at the end of a CDATA section." -msgstr "" +msgstr "在 CDATA 區塊結束時呼叫。" #: ../../library/pyexpat.rst:481 msgid "" @@ -677,7 +678,7 @@ msgstr "" #: ../../library/pyexpat.rst:593 msgid "The output from this program is::" -msgstr "" +msgstr "這個程式的輸出是: ::" #: ../../library/pyexpat.rst:595 msgid "" @@ -770,7 +771,7 @@ msgstr "" #: ../../library/pyexpat.rst:691 msgid "Expat error constants" -msgstr "" +msgstr "Expat 錯誤常數" #: ../../library/pyexpat.rst:695 msgid "" diff --git a/library/random.po b/library/random.po index f14f772aef..beb245217d 100644 --- a/library/random.po +++ b/library/random.po @@ -732,13 +732,12 @@ msgstr "" "getrandbits` 行為。" #: ../../library/random.rst:452 -#, fuzzy msgid "" "Override this method in subclasses to customise the :meth:`~random." "randbytes` behaviour of :class:`!Random` instances." msgstr "" "在子類別中覆寫此方法以自訂 :class:`!Random` 實例的 :meth:`~random." -"getrandbits` 行為。" +"randbytes` 行為。" #: ../../library/random.rst:458 msgid "" diff --git a/library/runpy.po b/library/runpy.po index 3b338bcfc3..3ff8f9771d 100644 --- a/library/runpy.po +++ b/library/runpy.po @@ -137,7 +137,7 @@ msgstr "" #: ../../library/runpy.rst:87 msgid "Added ``__cached__`` global variable (see :pep:`3147`)." -msgstr "" +msgstr "新增 ``__cached__`` 全域變數(請參閱 :pep:`3147`)。" #: ../../library/runpy.rst:90 msgid "" diff --git a/library/security_warnings.po b/library/security_warnings.po index 143942d39b..498084b77a 100644 --- a/library/security_warnings.po +++ b/library/security_warnings.po @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2023, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: @@ -102,9 +102,8 @@ msgstr "" "`" #: ../../library/security_warnings.rst:31 -#, fuzzy msgid ":mod:`xml`: :ref:`XML security `" -msgstr ":mod:`ssl`::ref:`SSL/TLS 安全性注意事項 `" +msgstr ":mod:`xml`::ref:`XML 安全性 `" #: ../../library/security_warnings.rst:32 msgid "" diff --git a/library/stdtypes.po b/library/stdtypes.po index 47a6ffbbe8..0c11bd015b 100644 --- a/library/stdtypes.po +++ b/library/stdtypes.po @@ -2626,6 +2626,12 @@ msgid "" ">>> 'Python'.center(4)\n" "'Python'" msgstr "" +">>> 'Python'.center(10)\n" +"' Python '\n" +">>> 'Python'.center(10, '-')\n" +"'--Python--'\n" +">>> 'Python'.center(4)\n" +"'Python'" #: ../../library/stdtypes.rst:1672 msgid "" @@ -2653,6 +2659,16 @@ msgid "" ">>> 'spam, spam, spam'.count('')\n" "17" msgstr "" +">>> 'spam, spam, spam'.count('spam')\n" +"3\n" +">>> 'spam, spam, spam'.count('spam', 5)\n" +"2\n" +">>> 'spam, spam, spam'.count('spam', 5, 10)\n" +"1\n" +">>> 'spam, spam, spam'.count('eggs')\n" +"0\n" +">>> 'spam, spam, spam'.count('')\n" +"17" #: ../../library/stdtypes.rst:1692 msgid "Return the string encoded to :class:`bytes`." @@ -2688,6 +2704,11 @@ msgid "" ">>> encoded_str_to_bytes\n" "b'Python'" msgstr "" +">>> encoded_str_to_bytes = 'Python'.encode()\n" +">>> type(encoded_str_to_bytes)\n" +"\n" +">>> encoded_str_to_bytes\n" +"b'Python'" #: ../../library/stdtypes.rst:1717 ../../library/stdtypes.rst:3045 msgid "Added support for keyword arguments." @@ -2719,10 +2740,18 @@ msgid "" ">>> 'Python is amazing'.endswith('is', 0, 9)\n" "True" msgstr "" +">>> 'Python'.endswith('on')\n" +"True\n" +">>> 'a tuple of suffixes'.endswith(('at', 'in'))\n" +"False\n" +">>> 'a tuple of suffixes'.endswith(('at', 'es'))\n" +"True\n" +">>> 'Python is amazing'.endswith('is', 0, 9)\n" +"True" #: ../../library/stdtypes.rst:1742 msgid "See also :meth:`startswith` and :meth:`removesuffix`." -msgstr "" +msgstr "另請參閱 :meth:`startswith` 和 :meth:`removesuffix`。" #: ../../library/stdtypes.rst:1747 msgid "" @@ -2741,7 +2770,6 @@ msgid "" msgstr "" #: ../../library/stdtypes.rst:1760 -#, fuzzy msgid "" ">>> '01\\t012\\t0123\\t01234'.expandtabs()\n" "'01 012 0123 01234'\n" @@ -2751,10 +2779,13 @@ msgid "" "01 012\n" "0123 01234" msgstr "" -">>> b'01\\t012\\t0123\\t01234'.expandtabs()\n" -"b'01 012 0123 01234'\n" -">>> b'01\\t012\\t0123\\t01234'.expandtabs(4)\n" -"b'01 012 0123 01234'" +">>> '01\\t012\\t0123\\t01234'.expandtabs()\n" +"'01 012 0123 01234'\n" +">>> '01\\t012\\t0123\\t01234'.expandtabs(4)\n" +"'01 012 0123 01234'\n" +">>> print('01\\t012\\n0123\\t01234'.expandtabs(4))\n" +"01 012\n" +"0123 01234" #: ../../library/stdtypes.rst:1771 msgid "" @@ -3283,6 +3314,12 @@ msgid "" ">>> \" foo \".split(maxsplit=0)\n" "['foo ']" msgstr "" +">>> \"\".split(None, 0)\n" +"[]\n" +">>> \" \".split(None, 0)\n" +"[]\n" +">>> \" foo \".split(maxsplit=0)\n" +"['foo ']" #: ../../library/stdtypes.rst:2198 msgid "" diff --git a/library/string.po b/library/string.po index 5c7082916c..c488a87a64 100644 --- a/library/string.po +++ b/library/string.po @@ -422,7 +422,7 @@ msgid "" "define how the format specification is to be interpreted." msgstr "" "「格式規格」在格式字串 (format string) 中包含的替換欄位中使用,以定義各個值如" -"何被呈現(請參考 :ref:`formatstrings` 和 :ref:`f-strings`\\ )。它們也能夠直" +"何被呈現(請參考 :ref:`formatstrings` 和 :ref:`f-strings`)。它們也能夠直" "接傳遞給內建的 :func:`format` 函式。每個可格式化型別 (formattable type) 可以" "定義格式規格如何被直譯。" @@ -573,7 +573,7 @@ msgstr "" #: ../../library/string.rst:402 msgid "Added the ``'z'`` option (see also :pep:`682`)." -msgstr "新增 ``'z'`` 選項(請見 :pep:`682`\\ )。" +msgstr "新增 ``'z'`` 選項(請見 :pep:`682`)。" #: ../../library/string.rst:407 msgid "" @@ -655,11 +655,11 @@ msgstr "" #: ../../library/string.rst:462 msgid "Added the ``','`` option (see also :pep:`378`)." -msgstr "新增 ``','`` 選項(請見 :pep:`378`\\ )。" +msgstr "新增 ``','`` 選項(請見 :pep:`378`)。" #: ../../library/string.rst:465 msgid "Added the ``'_'`` option (see also :pep:`515`)." -msgstr "新增 ``'_'`` 選項(請見 :pep:`515`\\ )。" +msgstr "新增 ``'_'`` 選項(請見 :pep:`515`)。" #: ../../library/string.rst:468 msgid "" diff --git a/library/struct.po b/library/struct.po index 690def85aa..b24bc454b8 100644 --- a/library/struct.po +++ b/library/struct.po @@ -618,7 +618,7 @@ msgstr "" #: ../../library/struct.rst:291 msgid "Added use of the :meth:`~object.__index__` method for non-integers." -msgstr "" +msgstr "新增對非整數使用 :meth:`~object.__index__` 方法的支援。" #: ../../library/struct.rst:295 msgid "" diff --git a/library/sys.po b/library/sys.po index b4321d66db..07e572cfeb 100644 --- a/library/sys.po +++ b/library/sys.po @@ -1559,7 +1559,7 @@ msgstr "" #: ../../library/sys.rst:1247 msgid "See also the :exc:`PythonFinalizationError` exception." -msgstr "" +msgstr "另請參閱 :exc:`PythonFinalizationError` 例外。" #: ../../library/sys.rst:1253 msgid "" diff --git a/library/tarfile.po b/library/tarfile.po index 4c404c9cc5..8d4ea43807 100644 --- a/library/tarfile.po +++ b/library/tarfile.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001-2022, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: +# Adrian Liaw , 2018 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" @@ -68,7 +68,7 @@ msgstr "" #: ../../library/tarfile.rst:36 msgid "Added support for :mod:`lzma` compression." -msgstr "" +msgstr "新增對 :mod:`lzma` 壓縮的支援。" #: ../../library/tarfile.rst:39 msgid "" @@ -91,19 +91,20 @@ msgid "" "*mode* has to be a string of the form ``'filemode[:compression]'``, it " "defaults to ``'r'``. Here is a full list of mode combinations:" msgstr "" +"*mode* 必須是 ``'filemode[:compression]'`` 形式的字串,預設為 ``'r'``。以下是所有可" +"能的模式組合:" #: ../../library/tarfile.rst:57 msgid "mode" -msgstr "" +msgstr "模式" #: ../../library/tarfile.rst:57 msgid "action" -msgstr "" +msgstr "操作" #: ../../library/tarfile.rst:59 -#, fuzzy msgid "``'r'`` or ``'r:*'``" -msgstr "``'r' 或 'r:*'``" +msgstr "``'r'`` 或 ``'r:*'``" #: ../../library/tarfile.rst:59 msgid "Open for reading with transparent compression (recommended)." @@ -123,7 +124,7 @@ msgstr "``'r:gz'``" #: ../../library/tarfile.rst:65 msgid "Open for reading with gzip compression." -msgstr "" +msgstr "開啟以讀取 gzip 壓縮。" #: ../../library/tarfile.rst:67 msgid "``'r:bz2'``" @@ -131,7 +132,7 @@ msgstr "``'r:bz2'``" #: ../../library/tarfile.rst:67 msgid "Open for reading with bzip2 compression." -msgstr "" +msgstr "開啟以讀取 bzip2 壓縮。" #: ../../library/tarfile.rst:69 msgid "``'r:xz'``" @@ -139,7 +140,7 @@ msgstr "``'r:xz'``" #: ../../library/tarfile.rst:69 msgid "Open for reading with lzma compression." -msgstr "" +msgstr "開啟以讀取 lzma 壓縮。" #: ../../library/tarfile.rst:71 msgid "``'x'`` or ``'x:'``" @@ -182,9 +183,8 @@ msgid "" msgstr "" #: ../../library/tarfile.rst:88 -#, fuzzy msgid "``'a'`` or ``'a:'``" -msgstr "``'x'`` 或 ``'x:'``" +msgstr "``'a'`` 或 ``'a:'``" #: ../../library/tarfile.rst:88 msgid "" @@ -193,9 +193,8 @@ msgid "" msgstr "" #: ../../library/tarfile.rst:91 -#, fuzzy msgid "``'w'`` or ``'w:'``" -msgstr "``'x'`` 或 ``'x:'``" +msgstr "``'w'`` 或 ``'w:'``" #: ../../library/tarfile.rst:91 msgid "Open for uncompressed writing." @@ -207,7 +206,7 @@ msgstr "``'w:gz'``" #: ../../library/tarfile.rst:94 msgid "Open for gzip compressed writing." -msgstr "" +msgstr "開啟以用於 gzip 壓縮寫入。" #: ../../library/tarfile.rst:96 msgid "``'w:bz2'``" @@ -215,7 +214,7 @@ msgstr "``'w:bz2'``" #: ../../library/tarfile.rst:96 msgid "Open for bzip2 compressed writing." -msgstr "" +msgstr "開啟以用於 bzip2 壓縮寫入。" #: ../../library/tarfile.rst:98 msgid "``'w:xz'``" @@ -223,7 +222,7 @@ msgstr "``'w:xz'``" #: ../../library/tarfile.rst:98 msgid "Open for lzma compressed writing." -msgstr "" +msgstr "開啟以用於 lzma 壓縮寫入。" #: ../../library/tarfile.rst:101 msgid "" @@ -268,11 +267,11 @@ msgstr "" #: ../../library/tarfile.rst:130 msgid "Mode" -msgstr "" +msgstr "模式" #: ../../library/tarfile.rst:130 msgid "Action" -msgstr "" +msgstr "操作" #: ../../library/tarfile.rst:132 msgid "``'r|*'``" @@ -465,7 +464,7 @@ msgstr "" #: ../../library/tarfile.rst:273 msgid "A regular file :attr:`~TarInfo.type`." -msgstr "" +msgstr "一個普通檔案 :attr:`~TarInfo.type`。" #: ../../library/tarfile.rst:277 msgid "A link (inside tarfile) :attr:`~TarInfo.type`." @@ -516,15 +515,15 @@ msgstr "" #: ../../library/tarfile.rst:323 msgid "POSIX.1-1988 (ustar) format." -msgstr "" +msgstr "POSIX.1-1988 (ustar) 格式。" #: ../../library/tarfile.rst:328 msgid "GNU tar format." -msgstr "" +msgstr "GNU tar 格式。" #: ../../library/tarfile.rst:333 msgid "POSIX.1-2001 (pax) format." -msgstr "" +msgstr "POSIX.1-2001 (pax) 格式。" #: ../../library/tarfile.rst:338 msgid "" @@ -544,7 +543,7 @@ msgstr ":mod:`zipfile` 模組" #: ../../library/tarfile.rst:348 msgid "Documentation of the :mod:`zipfile` standard module." -msgstr "" +msgstr ":mod:`zipfile` 標準模組的文件。" #: ../../library/tarfile.rst:350 msgid ":ref:`archiving-operations`" @@ -590,7 +589,7 @@ msgstr "" #: ../../library/tarfile.rst:375 msgid "Added support for the context management protocol." -msgstr "" +msgstr "新增對情境管理協定的支援。" #: ../../library/tarfile.rst:380 msgid "" @@ -687,7 +686,7 @@ msgstr "" #: ../../library/tarfile.rst:432 ../../library/tarfile.rst:752 msgid "Use ``'surrogateescape'`` as the default for the *errors* argument." -msgstr "" +msgstr "使用 ``'surrogateescape'`` 作為 *errors* 引數的預設值。" #: ../../library/tarfile.rst:441 msgid "Add the *stream* parameter." @@ -1173,11 +1172,11 @@ msgstr "" #: ../../library/tarfile.rst:930 msgid "Return :const:`True` if it is a directory." -msgstr "" +msgstr "如果它是一個目錄,則回傳 :const:`True`。" #: ../../library/tarfile.rst:935 msgid "Return :const:`True` if it is a symbolic link." -msgstr "" +msgstr "如果它是一個符號連結,則回傳 :const:`True`。" #: ../../library/tarfile.rst:940 msgid "Return :const:`True` if it is a hard link." @@ -1185,20 +1184,20 @@ msgstr "" #: ../../library/tarfile.rst:945 msgid "Return :const:`True` if it is a character device." -msgstr "" +msgstr "如果它是一個字元裝置,則回傳 :const:`True`。" #: ../../library/tarfile.rst:950 msgid "Return :const:`True` if it is a block device." -msgstr "" +msgstr "如果它是一個區塊裝置,則回傳 :const:`True`。" #: ../../library/tarfile.rst:955 msgid "Return :const:`True` if it is a FIFO." -msgstr "" +msgstr "如果它是一個 FIFO,則回傳 :const:`True`。" #: ../../library/tarfile.rst:960 msgid "" "Return :const:`True` if it is one of character device, block device or FIFO." -msgstr "" +msgstr "如果它是一個字元裝置、區塊裝置或 FIFO,則回傳 :const:`True`。" #: ../../library/tarfile.rst:966 msgid "Extraction filters" @@ -1595,6 +1594,12 @@ msgid "" " warn_the_user('Extracting may be unsafe; consider updating Python')\n" " my_tarfile.extractall()" msgstr "" +"if hasattr(tarfile, 'data_filter'):\n" +" my_tarfile.extractall(filter='data')\n" +"else:\n" +" # 當不再需要時移除它\n" +" warn_the_user('Extracting may be unsafe; consider updating Python')\n" +" my_tarfile.extractall()" #: ../../library/tarfile.rst:1196 msgid "Stateful extraction filter example" @@ -1635,10 +1640,23 @@ msgid "" " def __exit__(self, *exc_info):\n" " print(f'{self.file_count} files extracted')" msgstr "" +"class StatefulFilter:\n" +" def __init__(self):\n" +" self.file_count = 0\n" +"\n" +" def __enter__(self):\n" +" return self\n" +"\n" +" def __call__(self, member, path):\n" +" self.file_count += 1\n" +" return member\n" +"\n" +" def __exit__(self, *exc_info):\n" +" print(f'{self.file_count} files extracted')" #: ../../library/tarfile.rst:1227 msgid "Command-Line Interface" -msgstr "" +msgstr "命令列介面" #: ../../library/tarfile.rst:1231 msgid "" diff --git a/library/test.po b/library/test.po index e0fe8b9e31..77d4a423c3 100644 --- a/library/test.po +++ b/library/test.po @@ -501,7 +501,7 @@ msgstr "" #: ../../library/test.rst:378 msgid "See also the :data:`HAVE_DOCSTRINGS` variable." -msgstr "" +msgstr "另請參閱 :data:`HAVE_DOCSTRINGS` 變數。" #: ../../library/test.rst:383 msgid "" diff --git a/library/token.po b/library/token.po index 372ad403c3..120e3cfe6e 100644 --- a/library/token.po +++ b/library/token.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001-2022, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: +# Adrian Liaw , 2018 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" @@ -241,195 +241,195 @@ msgstr "" #: ../../library/token-list.inc:10 msgid "``\"(\"``" -msgstr "" +msgstr "``\"(\"``" #: ../../library/token-list.inc:12 msgid "``\")\"``" -msgstr "" +msgstr "``\")\"``" #: ../../library/token-list.inc:14 msgid "``\"[\"``" -msgstr "" +msgstr "``\"[\"``" #: ../../library/token-list.inc:16 msgid "``\"]\"``" -msgstr "" +msgstr "``\"]\"``" #: ../../library/token-list.inc:18 msgid "``\":\"``" -msgstr "" +msgstr "``\":\"``" #: ../../library/token-list.inc:20 msgid "``\",\"``" -msgstr "" +msgstr "``\",\"``" #: ../../library/token-list.inc:22 msgid "``\";\"``" -msgstr "" +msgstr "``\";\"``" #: ../../library/token-list.inc:24 msgid "``\"+\"``" -msgstr "" +msgstr "``\"+\"``" #: ../../library/token-list.inc:26 msgid "``\"-\"``" -msgstr "" +msgstr "``\"-\"``" #: ../../library/token-list.inc:28 msgid "``\"*\"``" -msgstr "" +msgstr "``\"*\"``" #: ../../library/token-list.inc:30 msgid "``\"/\"``" -msgstr "" +msgstr "``\"/\"``" #: ../../library/token-list.inc:32 msgid "``\"|\"``" -msgstr "" +msgstr "``\"|\"``" #: ../../library/token-list.inc:34 msgid "``\"&\"``" -msgstr "" +msgstr "``\"&\"``" #: ../../library/token-list.inc:36 msgid "``\"<\"``" -msgstr "" +msgstr "``\"<\"``" #: ../../library/token-list.inc:38 msgid "``\">\"``" -msgstr "" +msgstr "``\">\"``" #: ../../library/token-list.inc:40 msgid "``\"=\"``" -msgstr "" +msgstr "``\"=\"``" #: ../../library/token-list.inc:42 msgid "``\".\"``" -msgstr "" +msgstr "``\".\"``" #: ../../library/token-list.inc:44 msgid "``\"%\"``" -msgstr "" +msgstr "``\"%\"``" #: ../../library/token-list.inc:46 msgid "``\"{\"``" -msgstr "" +msgstr "``\"{\"``" #: ../../library/token-list.inc:48 msgid "``\"}\"``" -msgstr "" +msgstr "``\"}\"``" #: ../../library/token-list.inc:50 msgid "``\"==\"``" -msgstr "" +msgstr "``\"==\"``" #: ../../library/token-list.inc:52 msgid "``\"!=\"``" -msgstr "" +msgstr "``\"!=\"``" #: ../../library/token-list.inc:54 msgid "``\"<=\"``" -msgstr "" +msgstr "``\"<=\"``" #: ../../library/token-list.inc:56 msgid "``\">=\"``" -msgstr "" +msgstr "``\">=\"``" #: ../../library/token-list.inc:58 msgid "``\"~\"``" -msgstr "" +msgstr "``\"~\"``" #: ../../library/token-list.inc:60 msgid "``\"^\"``" -msgstr "" +msgstr "``\"^\"``" #: ../../library/token-list.inc:62 msgid "``\"<<\"``" -msgstr "" +msgstr "``\"<<\"``" #: ../../library/token-list.inc:64 msgid "``\">>\"``" -msgstr "" +msgstr "``\">>\"``" #: ../../library/token-list.inc:66 msgid "``\"**\"``" -msgstr "" +msgstr "``\"**\"``" #: ../../library/token-list.inc:68 msgid "``\"+=\"``" -msgstr "" +msgstr "``\"+=\"``" #: ../../library/token-list.inc:70 msgid "``\"-=\"``" -msgstr "" +msgstr "``\"-=\"``" #: ../../library/token-list.inc:72 msgid "``\"*=\"``" -msgstr "" +msgstr "``\"*=\"``" #: ../../library/token-list.inc:74 msgid "``\"/=\"``" -msgstr "" +msgstr "``\"/=\"``" #: ../../library/token-list.inc:76 msgid "``\"%=\"``" -msgstr "" +msgstr "``\"%=\"``" #: ../../library/token-list.inc:78 msgid "``\"&=\"``" -msgstr "" +msgstr "``\"&=\"``" #: ../../library/token-list.inc:80 msgid "``\"|=\"``" -msgstr "" +msgstr "``\"|=\"``" #: ../../library/token-list.inc:82 msgid "``\"^=\"``" -msgstr "" +msgstr "``\"^=\"``" #: ../../library/token-list.inc:84 msgid "``\"<<=\"``" -msgstr "" +msgstr "``\"<<=\"``" #: ../../library/token-list.inc:86 msgid "``\">>=\"``" -msgstr "" +msgstr "``\">>=\"``" #: ../../library/token-list.inc:88 msgid "``\"**=\"``" -msgstr "" +msgstr "``\"**=\"``" #: ../../library/token-list.inc:90 msgid "``\"//\"``" -msgstr "" +msgstr "``\"//\"``" #: ../../library/token-list.inc:92 msgid "``\"//=\"``" -msgstr "" +msgstr "``\"//=\"``" #: ../../library/token-list.inc:94 msgid "``\"@\"``" -msgstr "" +msgstr "``\"@\"``" #: ../../library/token-list.inc:96 msgid "``\"@=\"``" -msgstr "" +msgstr "``\"@=\"``" #: ../../library/token-list.inc:98 msgid "``\"->\"``" -msgstr "" +msgstr "``\"->\"``" #: ../../library/token-list.inc:100 msgid "``\"...\"``" -msgstr "" +msgstr "``\"...\"``" #: ../../library/token-list.inc:102 msgid "``\":=\"``" -msgstr "" +msgstr "``\":=\"``" #: ../../library/token-list.inc:104 msgid "``\"!\"``" -msgstr "" +msgstr "``\"!\"``" #: ../../library/token.rst:193 msgid "The following non-token constants are provided:" @@ -469,7 +469,7 @@ msgstr "" #: ../../library/token.rst:225 msgid "Added :data:`EXCLAMATION`." -msgstr "" +msgstr "新增 :data:`EXCLAMATION`。" #: ../../library/token.rst:228 msgid "Removed :data:`!AWAIT` and :data:`!ASYNC` tokens again." diff --git a/library/tracemalloc.po b/library/tracemalloc.po index 8ce369cc18..aa9a9baf2b 100644 --- a/library/tracemalloc.po +++ b/library/tracemalloc.po @@ -956,7 +956,7 @@ msgstr "" #: ../../library/tracemalloc.rst:623 msgid "See also the :class:`StatisticDiff` class." -msgstr "" +msgstr "另請參閱 :class:`StatisticDiff` 類別。" #: ../../library/tracemalloc.rst:627 msgid "Number of memory blocks (``int``)." diff --git a/library/turtle.po b/library/turtle.po index ef88f69b8e..037a2eacaa 100644 --- a/library/turtle.po +++ b/library/turtle.po @@ -2902,7 +2902,7 @@ msgstr "" #: ../../library/turtle.rst:1969 msgid "See also the RawTurtle/Turtle method :func:`speed`." -msgstr "" +msgstr "另請參閱 RawTurtle/Turtle 的 :func:`speed` 方法。" #: ../../library/turtle.rst:1977 msgid "" diff --git a/library/unittest.po b/library/unittest.po index 6940a80894..110f6e1d74 100644 --- a/library/unittest.po +++ b/library/unittest.po @@ -266,8 +266,8 @@ msgid "" "provides a command-line interface to the test script. When run from the " "command line, the above script produces an output that looks like this::" msgstr "" -"最後將顯示一個簡單的方法去執行測試 :func:`unittest.main` 提供一個命令執行列介" -"面測試腳本。當透過命令執行列執行,輸出結果將會像是: ::" +"最後將顯示一個簡單的方法去執行測試 :func:`unittest.main` 提供一個命令列介" +"面測試腳本。當透過命令列執行,輸出結果將會像是: ::" #: ../../library/unittest.rst:133 msgid "" @@ -329,14 +329,14 @@ msgstr "" #: ../../library/unittest.rst:163 msgid "Command-Line Interface" -msgstr "命令執行列介面 (Command-Line Interface)" +msgstr "命令列介面" #: ../../library/unittest.rst:165 msgid "" "The unittest module can be used from the command line to run tests from " "modules, classes or even individual test methods::" msgstr "" -"單元測試模組可以透過命令執行列執行測試模組,物件甚至個別的測試方法: ::" +"單元測試模組可以透過命令列執行測試模組,物件甚至個別的測試方法: ::" #: ../../library/unittest.rst:168 msgid "" diff --git a/library/xml.dom.minidom.po b/library/xml.dom.minidom.po index 3e37dc543d..ee2ea5fccb 100644 --- a/library/xml.dom.minidom.po +++ b/library/xml.dom.minidom.po @@ -1,5 +1,4 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001-2022, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: @@ -39,7 +38,7 @@ msgstr "" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/xml.dom.minidom.rst:28 msgid "" @@ -58,11 +57,19 @@ msgid "" "\n" "dom3 = parseString('Some data some more data')" msgstr "" +"from xml.dom.minidom import parse, parseString\n" +"\n" +"dom1 = parse('c:\\\\temp\\\\mydata.xml') # 以檔名來剖析 XML 檔案\n" +"\n" +"datasource = open('c:\\\\temp\\\\mydata.xml')\n" +"dom2 = parse(datasource) # 剖析開啟的檔案\n" +"\n" +"dom3 = parseString('Some data some more data')" #: ../../library/xml.dom.minidom.rst:40 msgid "" "The :func:`parse` function can take either a filename or an open file object." -msgstr "" +msgstr ":func:`parse` 函式可以接受一個檔案名稱或開啟的檔案物件。" #: ../../library/xml.dom.minidom.rst:45 msgid "" @@ -78,6 +85,7 @@ msgid "" "If you have XML in a string, you can use the :func:`parseString` function " "instead:" msgstr "" +"如果你有一個字串中的 XML,你可以使用 :func:`parseString` 函式來代替:" #: ../../library/xml.dom.minidom.rst:57 msgid "" @@ -90,7 +98,7 @@ msgstr "" msgid "" "Both functions return a :class:`Document` object representing the content of " "the document." -msgstr "" +msgstr "這兩個函式都會回傳一個 :class:`Document` 物件,表示文件的內容。" #: ../../library/xml.dom.minidom.rst:63 msgid "" @@ -123,6 +131,14 @@ msgid "" "text = newdoc.createTextNode('Some textual content.')\n" "top_element.appendChild(text)" msgstr "" +"from xml.dom.minidom import getDOMImplementation\n" +"\n" +"impl = getDOMImplementation()\n" +"\n" +"newdoc = impl.createDocument(None, \"some_tag\", None)\n" +"top_element = newdoc.documentElement\n" +"text = newdoc.createTextNode('Some textual content.')\n" +"top_element.appendChild(text)" #: ../../library/xml.dom.minidom.rst:85 msgid "" @@ -138,6 +154,8 @@ msgid "" "dom3 = parseString(\"Some data\")\n" "assert dom3.documentElement.tagName == \"myxml\"" msgstr "" +"dom3 = parseString(\"Some data\")\n" +"assert dom3.documentElement.tagName == \"myxml\"" #: ../../library/xml.dom.minidom.rst:94 msgid "" @@ -154,10 +172,12 @@ msgid "" "`Document Object Model (DOM) Level 1 Specification `_" msgstr "" +"`Document Object Model (DOM) Level 1 Specification `_" #: ../../library/xml.dom.minidom.rst:104 msgid "The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`." -msgstr "" +msgstr "W3C 對 :mod:`xml.dom.minidom` DOM 支援 的建議。" #: ../../library/xml.dom.minidom.rst:110 msgid "DOM Objects" @@ -192,6 +212,8 @@ msgid "" "with xml.dom.minidom.parse(datasource) as dom:\n" " ... # Work with dom." msgstr "" +"with xml.dom.minidom.parse(datasource) as dom:\n" +" ... # 使用 dom。" #: ../../library/xml.dom.minidom.rst:137 msgid "" @@ -252,7 +274,7 @@ msgstr "" msgid "" "The :meth:`toxml` method now preserves the attribute order specified by the " "user." -msgstr "" +msgstr "現在 :meth:`toxml` 方法會保留使用者指定的屬性順序。" #: ../../library/xml.dom.minidom.rst:185 msgid "" @@ -418,7 +440,7 @@ msgstr "" #: ../../library/xml.dom.minidom.rst:215 msgid "minidom and the DOM standard" -msgstr "" +msgstr "minidom 和 DOM 標準" #: ../../library/xml.dom.minidom.rst:217 msgid "" @@ -514,7 +536,7 @@ msgstr "" #: ../../library/xml.dom.minidom.rst:268 msgid "Footnotes" -msgstr "註解" +msgstr "註腳" #: ../../library/xml.dom.minidom.rst:269 msgid "" diff --git a/library/xml.dom.pulldom.po b/library/xml.dom.pulldom.po index a916117bac..bc91d5c066 100644 --- a/library/xml.dom.pulldom.po +++ b/library/xml.dom.pulldom.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001-2022, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: +# Adrian Liaw , 2018 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" @@ -42,7 +42,7 @@ msgstr "" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/xml.dom.pulldom.rst:29 msgid "" @@ -95,7 +95,7 @@ msgstr "" #: ../../library/xml.dom.pulldom.rst:53 msgid "``event`` is a constant and can be one of:" -msgstr "" +msgstr "``event`` 是一個常數,可以是以下其中一個:" #: ../../library/xml.dom.pulldom.rst:55 msgid ":data:`START_ELEMENT`" @@ -149,7 +149,7 @@ msgstr "" #: ../../library/xml.dom.pulldom.rst:79 ../../library/xml.dom.pulldom.rst:84 msgid "Subclass of :class:`xml.sax.handler.ContentHandler`." -msgstr "" +msgstr ":class:`xml.sax.handler.ContentHandler` 的子類別。" #: ../../library/xml.dom.pulldom.rst:89 msgid "" @@ -170,7 +170,7 @@ msgstr "" #: ../../library/xml.dom.pulldom.rst:100 msgid "" "Return a :class:`DOMEventStream` that represents the (Unicode) *string*." -msgstr "" +msgstr "回傳一個表示 (Unicode) *string* 的 :class:`DOMEventStream`。" #: ../../library/xml.dom.pulldom.rst:104 msgid "Default value for the *bufsize* parameter to :func:`parse`." @@ -188,7 +188,7 @@ msgstr "DOMEventStream 物件" #: ../../library/xml.dom.pulldom.rst:116 msgid "Support for :meth:`~object.__getitem__` method has been removed." -msgstr "" +msgstr "已移除對 :meth:`~object.__getitem__` 方法的支援。" #: ../../library/xml.dom.pulldom.rst:121 msgid "" @@ -202,7 +202,7 @@ msgstr "" #: ../../library/xml.dom.pulldom.rst:131 msgid "Expands all children of *node* into *node*. Example::" -msgstr "" +msgstr "展開 *node* 的所有子節點到 *node*。範例: ::" #: ../../library/xml.dom.pulldom.rst:133 msgid "" @@ -220,3 +220,16 @@ msgid "" "text
and more

'\n" " print(node.toxml())" msgstr "" +"from xml.dom import pulldom\n" +"\n" +"xml = 'Foo

Some text

and more

'\n" +"doc = pulldom.parseString(xml)\n" +"for event, node in doc:\n" +" if event == pulldom.START_ELEMENT and node.tagName == 'p':\n" +" # 以下陳述式只會印出 '

'\n" +" print(node.toxml())\n" +" doc.expandNode(node)\n" +" # 以下陳述式會印出包含所有子節點的節點 '

Some " +"text

and more

'\n" +" print(node.toxml())" diff --git a/library/xml.etree.elementtree.po b/library/xml.etree.elementtree.po index e5b256a1f5..bfd50c500c 100644 --- a/library/xml.etree.elementtree.po +++ b/library/xml.etree.elementtree.po @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2024, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: @@ -43,7 +43,7 @@ msgstr ":mod:`!xml.etree.cElementTree` 模組已被棄用。" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/xml.etree.elementtree.rst:29 msgid "Tutorial" @@ -259,6 +259,17 @@ msgid "" "end\n" "mytag text= sometext more text" msgstr "" +">>> parser = ET.XMLPullParser(['start', 'end'])\n" +">>> parser.feed('sometext')\n" +">>> list(parser.read_events())\n" +"[('start', )]\n" +">>> parser.feed(' more text')\n" +">>> for event, elem in parser.read_events():\n" +"... print(event)\n" +"... print(elem.tag, 'text=', elem.text)\n" +"...\n" +"end\n" +"mytag text= sometext more text" #: ../../library/xml.etree.elementtree.rst:158 msgid "" @@ -460,6 +471,13 @@ msgid "" "...\n" ">>> tree.write('output.xml')" msgstr "" +">>> for country in root.findall('country'):\n" +"... # 使用 root.findall() 來避免在遍歷時移除\n" +"... rank = int(country.find('rank').text)\n" +"... if rank > 50:\n" +"... root.remove(country)\n" +"...\n" +">>> tree.write('output.xml')" #: ../../library/xml.etree.elementtree.rst:266 msgid "" @@ -507,7 +525,7 @@ msgstr "" #: ../../library/xml.etree.elementtree.rst:293 msgid "Building XML documents" -msgstr "" +msgstr "建立 XML 文件" #: ../../library/xml.etree.elementtree.rst:295 msgid "" @@ -717,7 +735,7 @@ msgstr "" #: ../../library/xml.etree.elementtree.rst:415 msgid "Supported XPath syntax" -msgstr "" +msgstr "支援的 XPath 語法" #: ../../library/xml.etree.elementtree.rst:420 msgid "Syntax" @@ -1112,7 +1130,7 @@ msgstr "新增 *context* 與 *check_hostname* 事件。" #: ../../library/xml.etree.elementtree.rst:656 msgid "Added the :meth:`!close` method." -msgstr "" +msgstr "新增 :meth:`!close` 方法。" #: ../../library/xml.etree.elementtree.rst:662 msgid "" diff --git a/library/xml.po b/library/xml.po index be63551353..9793de3e4f 100644 --- a/library/xml.po +++ b/library/xml.po @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2024, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: @@ -36,7 +36,7 @@ msgstr "Python 處理 XML 的介面被歸類於 ``xml`` 套件中。" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/xml.rst:23 msgid "" @@ -90,34 +90,31 @@ msgstr ":mod:`xml.parsers.expat`:Expat 剖析器繫結" #: ../../library/xml.rst:52 msgid "XML security" -msgstr "" +msgstr "XML 安全性" #: ../../library/xml.rst:54 -#, fuzzy msgid "" "An attacker can abuse XML features to carry out denial of service attacks, " "access local files, generate network connections to other machines, or " "circumvent firewalls." msgstr "" -"XML 處理模組無法抵禦惡意建構的資料。攻擊者可以濫用 XML 功能來執行阻斷服務攻" -"擊 (denial of service attack)、存取本地檔案、生成與其他機器的網路連接或繞過防" -"火牆。" +"攻擊者可以濫用 XML 功能來執行阻斷服務攻擊 (denial of service attack)、存取本地檔案" +"、生成與其他機器的網路連接或繞過防火牆。" #: ../../library/xml.rst:58 -#, fuzzy msgid "" "Expat versions lower that 2.6.0 may be vulnerable to \"billion laughs\", " "\"quadratic blowup\" and \"large tokens\". Python may be vulnerable if it " "uses such older versions of Expat as a system-provided library. Check :const:" "`!pyexpat.EXPAT_VERSION`." msgstr "" -"Expat 2.4.1 及更新的版本不易受到「十億笑聲」和「二次爆炸」漏洞的影響。但仍可" -"能由於依賴系統提供的函式庫而被列為易受攻擊的項目。請檢查 :const:`!pyexpat." -"EXPAT_VERSION`。" +"Expat 低於 2.6.0 的版本容易受到「十億笑聲」、「二次爆炸」與「大型 token」的影響。" +"Python 也可能因為使用這些系統提供的舊版 Expat 而易受攻擊。請檢查 :const:" +"`!pyexpat.EXPAT_VERSION`。" #: ../../library/xml.rst:63 msgid ":mod:`xmlrpc` is **vulnerable** to the \"decompression bomb\" attack." -msgstr "" +msgstr ":mod:`xmlrpc` 容易受到「解壓縮炸彈」攻擊。" #: ../../library/xml.rst:66 msgid "billion laughs / exponential entity expansion" @@ -180,143 +177,3 @@ msgstr "" "Expat 需要重新剖析未完成的 token;如果沒有 Expat 2.6.0 中引入的保護,這可能會" "導致二次 runtime 而導致剖析 XML 的應用程式出現阻斷服務。此問題記錄於 :cve:" "`2023-52425`。" - -#~ msgid "" -#~ "The XML modules are not secure against erroneous or maliciously " -#~ "constructed data. If you need to parse untrusted or unauthenticated data " -#~ "see the :ref:`xml-vulnerabilities` and :ref:`defusedxml-package` sections." -#~ msgstr "" -#~ "XML 模組無法抵禦錯誤或惡意建構的資料。如果你需要剖析不受信任或未經身份驗證" -#~ "的資料,請參閱 :ref:`xml-vulnerabilities` 和 :ref:`defusedxml-package` 段" -#~ "落。" - -#~ msgid "XML vulnerabilities" -#~ msgstr "XML 漏洞" - -#~ msgid "" -#~ "The following table gives an overview of the known attacks and whether " -#~ "the various modules are vulnerable to them." -#~ msgstr "下表概述了已知的攻擊以及各個模組是否易有漏洞。" - -#~ msgid "kind" -#~ msgstr "種類" - -#~ msgid "sax" -#~ msgstr "sax" - -#~ msgid "etree" -#~ msgstr "etree" - -#~ msgid "minidom" -#~ msgstr "minidom" - -#~ msgid "pulldom" -#~ msgstr "pulldom" - -#~ msgid "xmlrpc" -#~ msgstr "xmlrpc" - -#~ msgid "billion laughs" -#~ msgstr "十億笑聲 (billion laughs)" - -#~ msgid "**Vulnerable** (1)" -#~ msgstr "**脆弱** (1)" - -#~ msgid "quadratic blowup" -#~ msgstr "二次爆炸 (quadratic blowup)" - -#~ msgid "external entity expansion" -#~ msgstr "外部實體擴展 (external entity expansion)" - -#~ msgid "Safe (5)" -#~ msgstr "安全 (5)" - -#~ msgid "Safe (2)" -#~ msgstr "安全 (2)" - -#~ msgid "Safe (3)" -#~ msgstr "安全 (3)" - -#~ msgid "Safe (4)" -#~ msgstr "安全 (4)" - -#~ msgid "`DTD`_ retrieval" -#~ msgstr "`DTD`_ 檢索" - -#~ msgid "Safe" -#~ msgstr "安全" - -#~ msgid "**Vulnerable**" -#~ msgstr "**脆弱**" - -#~ msgid "**Vulnerable** (6)" -#~ msgstr "**脆弱** (6)" - -#~ msgid "" -#~ ":mod:`xml.etree.ElementTree` doesn't expand external entities and raises " -#~ "a :exc:`~xml.etree.ElementTree.ParseError` when an entity occurs." -#~ msgstr "" -#~ ":mod:`xml.etree.ElementTree` 不會擴展外部實體,並在實體出現時引發 :exc:" -#~ "`~xml.etree.ElementTree.ParseError`。" - -#~ msgid "" -#~ ":mod:`xml.dom.minidom` doesn't expand external entities and simply " -#~ "returns the unexpanded entity verbatim." -#~ msgstr ":mod:`xml.dom.minidom` 不會擴展外部實體,只會逐字回傳未擴展的實體。" - -#~ msgid "" -#~ ":mod:`xmlrpc.client` doesn't expand external entities and omits them." -#~ msgstr ":mod:`xmlrpc.client` 不會擴展外部實體且會忽略它們。" - -#~ msgid "" -#~ "Since Python 3.7.1, external general entities are no longer processed by " -#~ "default." -#~ msgstr "從 Python 3.7.1 開始,預設情況下不再處理外部通用實體。" - -#~ msgid "" -#~ "Expat 2.6.0 and newer is not vulnerable to denial of service through " -#~ "quadratic runtime caused by parsing large tokens. Items still listed as " -#~ "vulnerable due to potential reliance on system-provided libraries. Check :" -#~ "const:`!pyexpat.EXPAT_VERSION`." -#~ msgstr "" -#~ "Expat 2.6.0 及更新版本不易受到剖析大型 token 所導致的二次 runtime 阻斷服務" -#~ "的影響。由於可能依賴系統提供的函式庫,因此仍被列為易受攻擊的項目。請參考 :" -#~ "const:`!pyexpat.EXPAT_VERSION`。" - -#~ msgid "" -#~ "Entity declarations can contain more than just text for replacement. They " -#~ "can also point to external resources or local files. The XML parser " -#~ "accesses the resource and embeds the content into the XML document." -#~ msgstr "" -#~ "實體聲明不僅僅可以包含用於替換的文本,它們還可以指向外部資源或本地檔案。" -#~ "XML 剖析器會存取資源並將內容嵌入到 XML 文件中。" - -#~ msgid "" -#~ "Some XML libraries like Python's :mod:`xml.dom.pulldom` retrieve document " -#~ "type definitions from remote or local locations. The feature has similar " -#~ "implications as the external entity expansion issue." -#~ msgstr "" -#~ "一些 XML 函式庫(例如 Python 的 :mod:`xml.dom.pulldom`)從遠端或本地位置檢" -#~ "索文件類型定義。該功能與外部實體擴展問題具有類似的含義。" - -#~ msgid "" -#~ "The documentation for :pypi:`defusedxml` on PyPI has further information " -#~ "about all known attack vectors with examples and references." -#~ msgstr "" -#~ "PyPI 上的 :pypi:`defusedxml` 文件包含有關所有已知攻擊媒介 (attack vector) " -#~ "的更多資訊以及範例和參考資料。" - -#~ msgid "The :mod:`!defusedxml` Package" -#~ msgstr ":mod:`!defusedxml` 套件" - -#~ msgid "" -#~ ":pypi:`defusedxml` is a pure Python package with modified subclasses of " -#~ "all stdlib XML parsers that prevent any potentially malicious operation. " -#~ "Use of this package is recommended for any server code that parses " -#~ "untrusted XML data. The package also ships with example exploits and " -#~ "extended documentation on more XML exploits such as XPath injection." -#~ msgstr "" -#~ ":pypi:`defusedxml` 是一個純 Python 套件,其中包含所有標準函式庫中 XML 剖析" -#~ "器的修正版本子類別,可防止任何潛在的惡意操作。當伺服器程式會剖析任何不受信" -#~ "任的 XML 資料時建議使用此套件。該套件還附帶了更多有關 XML 漏洞(例如 " -#~ "XPath 注入)的範例和延伸文件。" diff --git a/library/xml.sax.po b/library/xml.sax.po index ab16d0ece5..84e8592adb 100644 --- a/library/xml.sax.po +++ b/library/xml.sax.po @@ -1,8 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001-2022, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: +# Liang-Bo Wang , 2016 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" @@ -38,7 +38,7 @@ msgstr "" msgid "" "If you need to parse untrusted or unauthenticated data, see :ref:`xml-" "security`." -msgstr "" +msgstr "如果你需要剖析不受信任或未經驗證的資料,請參閱 :ref:`xml-security`。" #: ../../library/xml.sax.rst:28 msgid "" diff --git a/library/zipapp.po b/library/zipapp.po index 02fc69d0ea..d8c15093bb 100644 --- a/library/zipapp.po +++ b/library/zipapp.po @@ -1,7 +1,8 @@ -# Copyright (C) 2001-2024, Python Software Foundation +# Copyright (C) 2001-2025, Python Software Foundation # This file is distributed under the same license as the Python package. # # Translators: +# Adrian Liaw , 2018 msgid "" msgstr "" "Project-Id-Version: Python 3.13\n" @@ -57,7 +58,7 @@ msgstr "" #: ../../library/zipapp.rst:40 msgid "Command-Line Interface" -msgstr "命令執行列介面" +msgstr "命令列介面" #: ../../library/zipapp.rst:42 msgid "" diff --git a/library/zipimport.po b/library/zipimport.po index f338c8d147..45836ce278 100644 --- a/library/zipimport.po +++ b/library/zipimport.po @@ -164,7 +164,7 @@ msgstr "" #: ../../library/zipimport.rst:118 msgid ":exc:`IOError` used to be raised, it is now an alias of :exc:`OSError`." -msgstr "" +msgstr ":exc:`IOError` 曾經被引發,現在它是一個 :exc:`OSError` 的別名。" #: ../../library/zipimport.rst:124 msgid "" pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy