65d8d0f7bd
Show the newest news article whose language matches the wallet's active locale, falling back to the newest English article when none exists. Language detection per article, in priority order: 1. An event language tag: NIP-32-style ["l","<code>","ISO-639-1"] or the bare ["l","<code>"] / ["lang","<code>"] (code is the tag's 2nd element), extracted in handle_news and persisted on NewsItem.lang. 2. A trailing "[xx]" marker on the title (case-insensitive, xx = ISO 639-1 two letters), e.g. "2026-07-05 Welcome to Goblin [de]". 3. No marker anywhere = English. Selection happens at the data layer (news_latest): the store stays language-agnostic (still newest-per-d-tag, cap 8, edit-in-place). Among all cached articles, filter by detected language, take the newest by created_at; the "[xx]" marker is stripped from the displayed title. The app locale is folded to its ISO 639-1 primary for matching (zh-CN -> zh). The GOBLIN_FAKE_NEWS debug hook now injects an English + German sample so the panel selection can be screenshotted per locale. Unit tests: tag detection (both shapes), title-suffix detect + strip, no-marker-means-English, zh-CN folding, locale match + English fallback, newest-within-language-slice.