feat(members,header): overhaul members page with CV dialog and english-ify navigation

- Rewrite Members page to English: LAB MEMBERS, Prof. Seok-Joo Koh, Active Researchers, and Graduates
- Add ProfessorDetailsDialog component with comprehensive CV modal
- Standardize degree course label mappings (Ph. D., M. S.)
- Translate mobile navigation panel and header aria-labels to English
- Update E2E test suite assertions for the updated members structure
This commit is contained in:
2026-08-21 23:16:06 +09:00
parent 8eabd7a2db
commit 44c21ab59e
5 changed files with 337 additions and 79 deletions
+12 -12
View File
@@ -12,11 +12,11 @@ const NAV_SETTLE_MS = 300; // ms — 라우트 전환 직후 방향 판정 유
// CUSTOMIZATION HOOK: edit nav labels / routes here.
const navItems = [
{ href: "/", ko: "홈", en: "Home", no: "01" },
{ href: "/members", ko: "구성원", en: "Members", no: "02" },
{ href: "/publications", ko: "논문", en: "Publications", no: "03" },
{ href: "/lectures", ko: "강의", en: "Lectures", no: "04" },
{ href: "/standardization", ko: "표준화", en: "Standardization", no: "05" },
{ href: "/", en: "Home", no: "01" },
{ href: "/members", en: "Members", no: "02" },
{ href: "/publications", en: "Publications", no: "03" },
{ href: "/lectures", en: "Lectures", no: "04" },
{ href: "/standardization", en: "Standardization", no: "05" },
];
export default function Header() {
@@ -170,7 +170,7 @@ export default function Header() {
{/* Desktop nav — small caps, wide tracking (visible at >= 1240px) */}
<div className="hidden items-center gap-4 desktop:flex">
<nav className="flex items-center gap-2" aria-label="주 메뉴">
<nav className="flex items-center gap-2" aria-label="Main Navigation">
{navItems.map((item) => {
const active = isActive(item.href);
return (
@@ -206,7 +206,7 @@ export default function Header() {
<button
type="button"
className="inline-flex items-center justify-center border border-ink p-2 text-ink transition hover:bg-ink hover:text-ivory"
aria-label={open ? "메뉴 닫기" : "메뉴 열기"}
aria-label={open ? "Close menu" : "Open menu"}
aria-expanded={open}
aria-controls="mobile-menu"
onClick={() => setOpen((v) => !v)}
@@ -227,7 +227,7 @@ export default function Header() {
<nav
id="mobile-menu"
className="mobile-menu-panel border-t border-ink bg-ivory desktop:hidden"
aria-label="모바일 메뉴"
aria-label="Mobile Navigation"
>
<ul className="container-content flex flex-col py-2">
{navItems.map((item) => {
@@ -252,14 +252,14 @@ export default function Header() {
>
{item.no}
</span>
<span className="headline-ko text-lg">{item.ko}</span>
<span className="font-sans text-base">{item.en}</span>
</span>
<span
className={`text-[0.7rem] font-semibold uppercase tracking-[0.18em] ${
active ? "text-white dark:text-ivory" : "text-ink-mute"
className={`text-xs font-mono ${
active ? "text-white/80 dark:text-ivory/80" : "text-ink-mute"
}`}
>
{item.en}
</span>
</Link>
</li>