#15 i18n S3 — localize comments slice (+ relative-time rollout, DE/EN)#65
Merged
Conversation
nginx:alpine base drifted to Alpine 3.23 with curl/libcurl 8.19.0-r0 carrying HIGH CVE-2026-5773 and CVE-2026-6276 (fixed 8.20.0-r0), tripping the Trivy HIGH,CRITICAL gate in frontend-docker. Add curl to the existing apk upgrade line (verified locally: 0 HIGH/CRITICAL OS vulns post-upgrade). Environmental base-image fix, unrelated to the S3 i18n change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#15 i18n Full-Rollout — Session 3:
commentssliceLocalizes the issue Comments / Activity area into a new
commentsnamespace (en/de) and performs the master-spec's relative-time rollout — the first real use offormatRelativeTimefromformat.ts.Changes
commentsnamespace (en/de, key-identical) + registered insrc/i18n/index.ts(tabs.*,thread.*,feed.*,activity.*).CommentsActivityTabs— tab labels localized (scanner-blind ternary; map vartrenamed totabKeyto avoid shadowing the hook). Not allowlisted → no allowlist change.CommentThread— all strings viat()incl. the scanner-blind deleteconfirm(); Save/Cancel/pagination-loading reusecommon:*.ActivityFeed—describeActivity→ in-component closure using interpolatedactivity.*keys ({{from}}/{{to}});default:humanized-type fallback preserved.formatTimehelpers (toLocaleDateString + toLocaleTimeString) replaced byformatRelativeTime; no rawtoLocale*remains. Timestamps now render relatively ("2 hours ago" / "vor 2 Stunden"), DE/EN viaIntl.RelativeTimeFormat.CommentThread.tsx+ActivityFeed.tsxremoved (54 → 52).Verification
npm run test:i18n(17/17 scanner self-tests),npm run lint:i18n(scanner: 0 hardcoded strings, 52 allowlisted; en/de parity OK),npm run build(tsc + vite) — all green.Follow-ups (not blocking)
title={formatDateTime(...)}tooltip to keep the absolute timestamp discoverable on hover.Plan:
docs/superpowers/plans/2026-07-15-i18n-s3-comments.md🤖 Generated with Claude Code