fix(clients): clarify renewal preview times and estimates (#6662)

* fix(clients): clarify renewal preview times and estimates

The preview rendered RFC3339 strings directly and labeled the server's Local
zone without explaining which clock it represented. Its renewal count also
looked like a record of renewals already performed.

Display readable dates with an explicit UTC offset while preserving the
server's wall time, per-date DST offset and fractional cutoff precision.
Explain the panel/server timezone and read-only preview, and label the
renewal count as estimated allowance consumption in all 13 locales.
Let the first-cutoff button wrap on narrow screens and update the English
and Chinese client documentation plus display/form regression coverage.

This changes presentation only: renewal calculations, stored expiry values,
API payloads and first-use behavior remain unchanged.

* test(clients): remove redundant renewal preview copy checks

The locale-only preview case repeated the Local timezone branch without
covering a distinct behavior. Exact textContent comparisons after matching
the same text with getByText also only pinned constant wording, contrary
to the repository's testing guidance.

Remove that duplicate case, its locale setup and the redundant copy
assertions. Keep the UTC, per-boundary DST offset, fractional precision
and original datetime checks, together with the existing real form-save
tests. Production rendering, translations and renewal behavior are unchanged.

---------

Co-authored-by: JacktheRanger <219502738+JacktheRanger@users.noreply.github.com>
This commit is contained in:
Jack
2026-10-07 16:55:06 +08:00
committed by GitHub
parent b3f1cced70
commit 54d1712544
19 changed files with 194 additions and 35 deletions
+4 -2
View File
@@ -953,11 +953,13 @@
"renewModeMonthly": "Calendar monthly",
"renewWeekday": "Renew on weekday",
"renewScheduleDesc": "Calendar renewal uses midnight in the panel timezone and also resets the client's traffic. Keep independent traffic resets disabled unless an additional reset is intended. Monthly day 1 means valid through the preceding month; day 31 is not the same boundary.",
"renewPreview": "Renewal preview ({zone})",
"renewPreview": "Предпросмотр продления (часовой пояс панели: {zone})",
"renewServerLocal": "Местное время сервера",
"renewPreviewHint": "Даты указаны в часовом поясе панели. Предпросмотр не продлевает клиента.",
"renewAt": "Renewal boundary",
"renewValidThrough": "Valid through",
"renewNextExpiry": "Cutoff after renewal",
"renewPeriods": "Periods charged: {count}",
"renewPeriods": "Будет использовано продлений: {count}",
"renewUnavailable": "The remaining renewal allowances cannot provide a future cutoff.",
"renewFirstUse": "Dates are available after first-use activation. The initial duration is unchanged.",
"renewSetExpiry": "Set first cycle cutoff",