Phase 002: rebrand to hermes-ui and consolidate i18n to zh/en
Build / build (push) Canceled after 0s
NPM Lockfile Check / npm ci --ignore-scripts (push) Canceled after 0s
Playwright / e2e (push) Canceled after 0s

Removes the ekko / hermes-web-ui branding from the whole tree and drops
eight locale files, so the project presents one name and one language pair.

Data compatibility is deliberate, not accidental: DB filenames, the JWT
audience, and skill manifest ownership all still recognise their pre-rename
values so existing deployments under ~/.hermes-web-ui keep working without a
re-login or a re-injection.

scripts/harness-check.mjs now scans for the legacy strings and fails the
build on any new occurrence, with an explicit allow-list (and reasons) for
the compatibility paths that must keep them.
This commit is contained in:
2026-10-16 11:11:29 +08:00
parent 1e9ea89d86
commit c93e1fe1bd
70 changed files with 1305 additions and 17856 deletions
+9 -21
View File
@@ -4,33 +4,21 @@ import type { SupportedLocale } from './messages'
const saved = localStorage.getItem('hermes_locale')
function normalize(tag: string): SupportedLocale {
return tag.toLowerCase().startsWith('zh') ? 'zh' : 'en'
}
function resolveLocale(saved: string | null): SupportedLocale {
if (saved && (supportedLocales as readonly string[]).includes(saved)) {
return saved as SupportedLocale
}
function normalize(tag: string): SupportedLocale | null {
const lower = tag.toLowerCase()
if (lower.startsWith('zh')) {
const isTraditional =
lower.includes('hant') ||
lower.includes('-tw') ||
lower.includes('-hk') ||
lower.includes('-mo')
return isTraditional ? 'zh-TW' : 'zh'
}
const short = tag.slice(0, 2)
if ((supportedLocales as readonly string[]).includes(tag)) return tag as SupportedLocale
if ((supportedLocales as readonly string[]).includes(short)) return short as SupportedLocale
return null
}
// A locale stored before the zh/en-only consolidation (for example 'zh-TW'
// or 'ja') is no longer supported; remap it instead of dropping to English.
if (saved) return normalize(saved)
for (const lang of navigator.languages) {
const resolved = normalize(lang)
if (resolved) return resolved
}
return 'en'
const preferred = navigator.languages[0]
return preferred ? normalize(preferred) : 'en'
}
function setHtmlLang(locale: SupportedLocale) {