Skip to content

Commit a7bb0be

Browse files
committed
Translate new/fuzzy entries from upstream sync (cpython e47e1015)
After rebasing onto upstream/cron/sync/3.14, re-translated the 57 new/fuzzy entries across 12 files (turtle, uuid, ssl, optparse, threadsafety, slice, etc.). turtle.po was re-based on upstream's restructured version since earlier translations no longer applied. Also clarified the `\\ ` escaping rule in CLAUDE.md. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LFYa52QAiGWbzJf8uwaj1Y
1 parent e7a8356 commit a7bb0be

13 files changed

Lines changed: 132 additions & 45 deletions

File tree

‎CLAUDE.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ make progress # Check translation progress
3434
### reST Syntax
3535
- Preserve `:mod:`, `:func:`, `:class:`, `:term:`, `:ref:`, `:pep:` roles
3636
- Use `\\ ` as zero-width separator when Chinese precedes reST syntax
37+
- `\\ ` before full-width punctuation is only needed for *opening* marks ((「『) touching a role/literal close; closing marks (。,:;!?」』)、) need no escape. For `*emphasis*` followed by an opening mark, use a real space instead
3738
- `\\ ` is also required when a role/literal/emphasis close is immediately followed by an
3839
**opening** full-width punctuation mark (`(`, `「`, `『`) — confirmed by corpus-wide grep:
3940
~1 unescaped vs ~473 escaped occurrences. Example: `` :class:`Widget`\\ ( ``.

‎builtins/threadsafety.po‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,12 +573,15 @@ msgid ""
573573
":meth:`set.update` and :meth:`set.union` lock both objects only when the "
574574
"other operand is a :class:`set`, :class:`frozenset`, or :class:`dict`."
575575
msgstr ""
576+
":meth:`set.update` 和 :meth:`set.union` 僅在另一個運算元為 :class:`set`、:"
577+
"class:`frozenset` 或 :class:`dict` 時,才會鎖定兩個物件。"
576578

577579
#: ../../builtins/threadsafety.rst:412
578580
msgid ""
579581
":meth:`set.intersection` and :meth:`set.difference` always try to lock all "
580582
"objects."
581583
msgstr ""
584+
":meth:`set.intersection` 和 :meth:`set.difference` 總是會嘗試鎖定所有物件。"
582585

583586
#: ../../builtins/threadsafety.rst:415
584587
msgid ":meth:`set.symmetric_difference` tries to lock both objects."
@@ -595,12 +598,16 @@ msgid ""
595598
":meth:`set.difference_update` and :meth:`set.intersection_update` try to "
596599
"lock all objects one-by-one."
597600
msgstr ""
601+
":meth:`set.difference_update` 和 :meth:`set.intersection_update` 會嘗試逐一鎖"
602+
"定所有物件。"
598603

599604
#: ../../builtins/threadsafety.rst:422
600605
msgid ""
601606
":meth:`set.symmetric_difference_update` only locks the arguments if it is of "
602607
"type :class:`set`, :class:`frozenset`, or :class:`dict`."
603608
msgstr ""
609+
":meth:`set.symmetric_difference_update` 僅在引數的型別為 :class:`set`、:"
610+
"class:`frozenset` 或 :class:`dict` 時,才會鎖定該引數。"
604611

605612
#: ../../builtins/threadsafety.rst:425
606613
msgid "The following methods always try to lock both objects:"

‎c-api/slice.po‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ msgid ""
8282
msgstr "之前 *slice* 的參數型別是 ``PySliceObject*`` 。"
8383

8484
#: ../../c-api/slice.rst:51
85-
#, fuzzy
8685
msgid ""
8786
"Usable replacement for :c:func:`PySlice_GetIndices`. Retrieve the start, "
8887
"stop, and step indices from the slice object *slice* assuming a sequence of "
@@ -92,7 +91,8 @@ msgid ""
9291
msgstr ""
9392
"可用來取代 :c:func:`PySlice_GetIndices`。從假設序列長度為 *length* 的 slice "
9493
"物件 *slice* 擷取開始、停止和步長索引,並將 slice 的長度存入 *slicelength*。"
95-
"超出範圍的索引會被剪切,剪切方式與一般切片的處理方式一致。"
94+
"超出範圍的索引會被剪切,剪切方式與一般切片的處理方式一致。*length* 不得為負"
95+
"數。"
9696

9797
#: ../../c-api/slice.rst:58
9898
msgid "Return ``0`` on success and ``-1`` on error with an exception set."
@@ -189,6 +189,8 @@ msgid ""
189189
"*length* must not be negative. *step* must not be zero and must not be less "
190190
"than ``-PY_SSIZE_T_MAX``, as guaranteed by :c:func:`PySlice_Unpack`."
191191
msgstr ""
192+
"*length* 不得為負數。*step* 不得為零,且不得小於 ``-PY_SSIZE_T_MAX``,此條件"
193+
"由 :c:func:`PySlice_Unpack` 保證。"
192194

193195
#: ../../c-api/slice.rst:116
194196
msgid ""

‎howto/free-threading-python.po‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ msgid ""
141141
"the GIL. See :ref:`threadsafety` for the guarantees provided by built-in "
142142
"types."
143143
msgstr ""
144+
"CPython 的自由執行緒 (free-threaded) 建置版本旨在於 Python 層級提供與預設啟"
145+
"用 GIL 的建置版本相似的執行緒安全行為。:class:`dict`、:class:`list` 和 :"
146+
"class:`set` 等內建型別使用內部鎖來防止並行修改,其行為與 GIL 相似。關於內建型"
147+
"別所提供的保證,請參閱 :ref:`threadsafety`。"
144148

145149
#: ../../howto/free-threading-python.rst:86
146150
msgid ""

‎library/asyncio-eventloop.po‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,8 @@ msgid ""
983983
"Raises a ``ValueError`` if ``ssl.check_hostname`` is ``True`` and "
984984
"``server_hostname`` is not supplied."
985985
msgstr ""
986+
"如果 ``ssl.check_hostname`` 為 ``True`` 且未提供 ``server_hostname``,則會引"
987+
"發 ``ValueError``。"
986988

987989
#: ../../library/asyncio-eventloop.rst:601
988990
msgid ""

‎library/asyncio-stream.po‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,8 @@ msgstr ""
520520
"當寫入緩衝區低於最高標記位 (high watermark) 時,:meth:`drain` 會立即回傳,而"
521521
"不會讓出控制權給事件迴圈。因此,重複呼叫 ``write()`` 後接著呼叫 ``await "
522522
"drain()`` 的程式碼可能會阻止其他 Task 執行。為了避免阻塞行為,請明確使用 "
523-
"``await asyncio.sleep(0)``\\ (請見 :func:`asyncio.sleep`)讓出控制權給事"
524-
"件迴圈。"
523+
"``await asyncio.sleep(0)``\\ (請見 :func:`asyncio.sleep`)讓出控制權給事件迴"
524+
"圈。"
525525

526526
#: ../../library/asyncio-stream.rst:399
527527
msgid "Upgrade an existing stream-based connection to TLS."
@@ -560,6 +560,8 @@ msgid ""
560560
"Raises a ``ValueError`` if ``sslcontext.check_hostname`` is ``True`` and "
561561
"``server_hostname`` is not supplied."
562562
msgstr ""
563+
"如果 ``sslcontext.check_hostname`` 為 ``True`` 且未提供 ``server_hostname``,"
564+
"則會引發 ``ValueError``。"
563565

564566
#: ../../library/asyncio-stream.rst:428
565567
msgid ""

‎library/ctypes.po‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3324,6 +3324,8 @@ msgid ""
33243324
"Note that if the Python interpreter is statically linked, this will be "
33253325
"``None``, as ``dlopen`` is not possible in this case."
33263326
msgstr ""
3327+
"請注意,如果 Python 直譯器是靜態連結的,則此值會是 ``None``,因為在這種情況下"
3328+
"無法使用 ``dlopen``。"
33273329

33283330
#: ../../library/ctypes.rst:1809 ../../library/ctypes.rst:1811
33293331
msgid ""

‎library/optparse.po‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,25 @@ msgstr "標準函式庫包含三個命令列引數剖析函式庫:"
3737
msgid ""
3838
":mod:`getopt`: a module that closely mirrors the procedural C ``getopt`` API."
3939
msgstr ""
40+
":mod:`getopt`:一個高度貼近程序式 (procedural) C ``getopt`` API 的模組。"
4041

4142
#: ../../library/optparse.rst:22
4243
msgid ""
4344
":mod:`!optparse`: a declarative replacement for ``getopt`` that provides "
4445
"equivalent functionality without requiring each application to implement its "
4546
"own procedural option parsing logic."
4647
msgstr ""
48+
":mod:`!optparse`:``getopt`` 的宣告式 (declarative) 替代方案,提供同等的功"
49+
"能,且不需要每個應用程式自行實作程序式的選項剖析邏輯。"
4750

4851
#: ../../library/optparse.rst:25
4952
msgid ""
5053
":mod:`argparse`: a more opinionated alternative to ``optparse`` that "
5154
"provides more functionality by default, at the expense of reduced "
5255
"application flexibility in controlling exactly how arguments are processed."
5356
msgstr ""
57+
":mod:`argparse`:一個更具主見 (opinionated) 的 ``optparse`` 替代方案,預設提"
58+
"供更多功能,代價是降低了應用程式對引數處理方式的控制彈性。"
5459

5560
#: ../../library/optparse.rst:29
5661
msgid ""

‎library/ssl.po‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2449,6 +2449,9 @@ msgid ""
24492449
"1.3 HelloRetryRequest) is dispatched to the new context's *sni_callback*, if "
24502450
"it has one; the original callback is not called again for that connection."
24512451
msgstr ""
2452+
"如果回呼函式將新的情境指派給 :attr:`SSLSocket.context`,同一連線上後續的任何 "
2453+
"ClientHello 訊息(例如在 TLS 1.3 HelloRetryRequest 之後)都會被分派給新情境"
2454+
"的 *sni_callback* (如果有的話);原本的回呼函式不會再為該連線被呼叫。"
24522455

24532456
#: ../../library/ssl.rst:1730
24542457
msgid ""
@@ -2490,6 +2493,8 @@ msgid ""
24902493
"ClientHello messages on the connection are dispatched to the new context's "
24912494
"*sni_callback*."
24922495
msgstr ""
2496+
"回呼函式指派新的 :attr:`SSLSocket.context` 之後,該連線上後續的 ClientHello "
2497+
"訊息會被分派給新情境的 *sni_callback*。"
24932498

24942499
#: ../../library/ssl.rst:1761
24952500
msgid ""
@@ -2654,6 +2659,10 @@ msgid ""
26542659
"check_hostname` is enabled but no *server_hostname* is given, since there "
26552660
"would be no name to match the peer's certificate against."
26562661
msgstr ""
2662+
"*server_side*、*server_hostname* 和 *session* 參數的意義與 :meth:`SSLContext."
2663+
"wrap_socket` 中相同,且以相同方式驗證:特別是當 :attr:`~SSLContext."
2664+
"check_hostname` 已啟用但未提供 *server_hostname* 時,會引發 :exc:"
2665+
"`ValueError`,因為此時沒有可用來比對對等端憑證的名稱。"
26572666

26582667
#: ../../library/ssl.rst:1889
26592668
msgid ""
@@ -2669,6 +2678,10 @@ msgid ""
26692678
"*server_hostname* was accepted, and verified the certificate chain but never "
26702679
"the peer's identity."
26712680
msgstr ""
2681+
"*server_side*、*server_hostname* 和 *session* 參數現在會以與 :meth:"
2682+
"`SSLContext.wrap_socket` 相同的方式驗證。先前,啟用 :attr:`~SSLContext."
2683+
"check_hostname` 但未提供 *server_hostname* 的情境會被接受,且只會驗證憑證鏈,"
2684+
"而不會驗證對等端的身分。"
26722685

26732686
#: ../../library/ssl.rst:1902
26742687
msgid ""

0 commit comments

Comments
 (0)