Fix relative-time RangeError (#37021)

`navigator.language` can be `undefined` in headless browsers (e.g.
Playwright Firefox), causing `RangeError: invalid language tag:
"undefined"` in `Intl.DateTimeFormat` within the `relative-time` web
component.

Also adds an e2e test that verifies `relative-time` renders correctly
and a shared `assertNoJsError` helper.

Bug is als present in https://github.com/github/relative-time-element
but (incorrectly) masked there.

Fixes: https://github.com/go-gitea/gitea/issues/25324

---------

Co-authored-by: Claude (Opus 4.6) <noreply@anthropic.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
silverwind
2026-03-28 14:10:51 +01:00
committed by GitHub
parent b136a66d12
commit 7492251e7e
7 changed files with 30 additions and 9 deletions

View File

@@ -259,12 +259,12 @@ class RelativeTime extends HTMLElement {
get #lang(): string {
const lang = this.closest('[lang]')?.getAttribute('lang');
if (!lang) return navigator.language;
try {
return new Intl.Locale(lang).toString();
} catch {
return navigator.language;
if (lang) {
try {
return new Intl.Locale(lang).toString();
} catch { /* invalid locale, fall through */ }
}
return navigator.language ?? 'en';
}
get second(): 'numeric' | '2-digit' | undefined {