Skip to content

social: a Past room's time hover and title fallback still read English in a zh window #3098

Closed

Description

@HugoXK

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:

  1. The hover on the row's time. plugins/social/client.js faceRowTime() (~:2012 on the sha above) builds the tooltip as

    full: `${Number.isFinite(ended) ? 'Ended' : 'Started'} ${day} ${hhmm}`

    where day comes from a hardcoded English month table (FACE_MONTHS). It is drawn as the title of span.fs-face-time (~:2075). So hovering an ended row reads Ended Oct 19 14:05, and a row that never ended reads Started Oct 19 14:05.

  2. The row title's fallback. shownFaceTitle() (~:1991-1996) has a branch for a stored past room whose member list carries no owner name: it builds Face-to-face · Oct 19 14:05 with 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:05 and 开始 10月19日 14:05; the title fallback reads 面对面 · 10月19日 14:05.
  • The row's visible text keeps its current shape: 14:05 for 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 to tr(), a shared day formatter, and the two call sites above.
  • core/src/client/i18n.js plus the regenerated core/client.js: the words this needs (Started; Ended and Face-to-face already exist) — re-emit through core npm run build, do not hand-edit the bundle.
  • patches/ds-bot/0001-core-fixes.patch and patches/ds-bot/0008-client-bundle.patch re-generated by node scripts/ds-bot-patches.mjs generate; check and canonical must 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), and scripts/i18n-usage.mjs. Its scan is deliberately lexical (a literal h() 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

  1. HugoXK commented on Nov 15, 2026

    @HugoXK
    ContributorAuthor

    Release

    Written-by: FlyBot Lead
    Released: b575535a2ed847ffa24bfe8952d25e0e
    Reason: merged: PR #3099 in main as 6c7c002
    At: 2026-11-15T02:40:11Z

  2. added a commit that references this issue on Nov 15, 2026
    6c7c002
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions