Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: b575535a2ed847ffa24bfe8952d25e0e
Branch: dev/1-p769b-face-row-time-zh
Base: cc59a97
At: 2026-11-15T01:54:45Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Dedupe (checked before opening): on live main cc59a97cbe72e2b118f3d4d91a4b3c04ffe762e5 the only two places that assemble this copy are the two named below; closed #304/#376 are about the Past row's title number and one-line hover layout, not language; no open issue mentions the Past-row time hover or this title fallback. Related but separate: #3090/PR #3097 (the chip's five state labels) and its issue does not cover either string here.
What happens now
With the window in Chinese, a face-to-face Past rooms row still draws its time in English in two places:
-
The hover on the row's time.
plugins/social/client.jsfaceRowTime()(~:2012on the sha above) builds the tooltip asfull: `${Number.isFinite(ended) ? 'Ended' : 'Started'} ${day} ${hhmm}`where
daycomes from a hardcoded English month table (FACE_MONTHS). It is drawn as thetitleofspan.fs-face-time(~:2075). So hovering an ended row readsEnded Oct 19 14:05, and a row that never ended readsStarted Oct 19 14:05. -
The row title's fallback.
shownFaceTitle()(~:1991-1996) has a branch for a stored past room whose member list carries no owner name: it buildsFace-to-face · Oct 19 14:05with the same hardcoded month table. In a zh window both the kind word and the date stay English.
The chip itself is not part of this: it already goes through tr() in faceChipLabel(), which is #3090/#3097's change.
What is expected
- zh window: the hover reads e.g.
已结束 10月19日 14:05and开始 10月19日 14:05; the title fallback reads面对面 · 10月19日 14:05. - The row's visible text keeps its current shape:
14:05for today, the day for an older row — only its spelling follows the window's language. - English window: unchanged, byte for byte (
Ended Oct 19 14:05,Face-to-face · Oct 19 14:05). - A missing dictionary key falls back to the English word rather than printing a raw key.
Scope
plugins/social/client.js: a locale probe next totr(), a shared day formatter, and the two call sites above.core/src/client/i18n.jsplus the regeneratedcore/client.js: the words this needs (Started;EndedandFace-to-facealready exist) — re-emit throughcore npm run build, do not hand-edit the bundle.patches/ds-bot/0001-core-fixes.patchandpatches/ds-bot/0008-client-bundle.patchre-generated bynode scripts/ds-bot-patches.mjs generate;checkandcanonicalmust stay green.- One new test under
plugins/social/test/that mounts the row with the zh dictionary bound and asserts the words, plus the English negative control. Red first on live main. - Not in scope: the chip labels (
#3090), andscripts/i18n-usage.mjs. Its scan is deliberately lexical (a literalh()child, a literal copy attribute, or an identifier bound once), so copy assembled inside a helper is invisible to it by design; data-flow tracing would add false positives and still would not catch this shape. The gate for computed copy is the mount-and-assert test, which this issue adds.
Sequencing
It edits the same file as #3097, so it waits behind that PR: cut from live main after #3097 merges, re-run the red/green pair on that base, one push.
Tier: T2 (plugins/**).
Written-by: FlyBot Lead
Bot: FlyBot Dev-1
Activity
fix(social): read the face-card time in the interface language (Think…
fix(social): read the face-card time in the interface language (Think…
HugoXK commentedon Nov 15, 2026
Release
Written-by: FlyBot Lead
Released: b575535a2ed847ffa24bfe8952d25e0e
Reason: merged: PR #3099 in main as 6c7c002
At: 2026-11-15T02:40:11Z
fix(social): read the face-card time in the interface language (Think…