Naruon
+Naruon
메일, 첨부, 일정, 작업을 맥락으로 묶어 판단과 실행으로 연결하는 AI 이메일 워크스페이스입니다.
diff --git a/i18n.js b/i18n.js index 00b81d3..e7faa61 100644 --- a/i18n.js +++ b/i18n.js @@ -17,6 +17,7 @@ const messages = { "nav.forks": "Fork", "nav.references": "참고문헌", "nav.work": "작업", + "nav.opensInNewTab": "(새 창에서 열림)", "nav.skipToContent": "본문으로 건너뛰기", "hero.title": "맥락지혜 연구실", "hero.labName": "Contextual Wisdom Lab", @@ -164,6 +165,7 @@ const messages = { "nav.forks": "Forks", "nav.references": "References", "nav.work": "Work", + "nav.opensInNewTab": "(Opens in a new tab)", "nav.skipToContent": "Skip to main content", "hero.title": "Contextual Wisdom Lab", "hero.labName": "Research Lab", @@ -312,6 +314,7 @@ function preferredLanguage() { // ⚡ Bolt: Cache DOM queries and current state to prevent redundant lookups and layout thrashing let i18nNodes = null; +let i18nTitleNodes = null; let langButtons = null; let metaDesc = null; let ogDesc = null; @@ -361,7 +364,7 @@ function setLanguage(lang) { } // ⚡ Bolt: 기본 언어로 초기 로드 시 불필요한 DOM 텍스트 읽기 및 탐색 생략 (성능 개선) - const isInitialDefault = lang === "ko" && !i18nNodes; + const isInitialDefault = lang === "ko" && !i18nNodes && !i18nTitleNodes; if (!isInitialDefault) { if (!i18nNodes) { @@ -375,6 +378,16 @@ function setLanguage(lang) { node.textContent = newText; } }); + + if (!i18nTitleNodes) { + i18nTitleNodes = document.querySelectorAll("[data-i18n-title]"); + } + i18nTitleNodes.forEach((node) => { + const newText = dict[node.dataset.i18nTitle]; + if (newText && node.getAttribute("title") !== newText) { + node.setAttribute("title", newText); + } + }); } langButtons.forEach((button) => { diff --git a/index.html b/index.html index a2dbbd7..02513ba 100644 --- a/index.html +++ b/index.html @@ -42,7 +42,7 @@ 프로젝트 Fork 작업 - GitHub + GitHub
메일, 첨부, 일정, 작업을 맥락으로 묶어 판단과 실행으로 연결하는 AI 이메일 워크스페이스입니다.
PostgreSQL 스키마를 리버스 엔지니어링하고 ERD와 DDL 공유 흐름으로 관리하는 클라우드 MVP입니다.
곡을 섹션, 역할, 템포, 연습 우선순위로 분석하는 로컬 우선 리허설 앱입니다.
긴 녹음을 메타데이터를 보존한 FLAC/Opus 조각으로 변환하는 Python CLI입니다.
스캔된 일본어 신문 PDF를 기사, 제목, 본문, 이미지 구조의 DOM형 JSON으로 파싱하는 API입니다.
트리 편집, 진행률 계산, CSV/JSON, 주간 Gantt를 지원하는 정적 HTML/CSS/JS WBS 플래너입니다.
바이브코딩 앱을 위한 보안 가드레일입니다. AI 개발 도구 규칙, 정적 점검, 리뷰와 수정 프롬프트를 다룹니다.
MLSIRM/MLS2PLM 모형의 시뮬레이션, 적합, 복원 진단을 빠르게 수행하는 Python/Rust 패키지입니다.
DNSBL 게시 기능을 갖춘 Rust 우선 WAF/IDS/AI SOC 게이트웨이입니다.
Founded by - Seongho Bae. + Seongho Bae. Context into judgment. Judgment into action.
diff --git a/tests/test_i18n_title.py b/tests/test_i18n_title.py new file mode 100644 index 0000000..c4e4d3b --- /dev/null +++ b/tests/test_i18n_title.py @@ -0,0 +1,10 @@ +"""Test i18n title functionality presence.""" + +def test_i18n_title_query_selector_present() -> None: + """Test that data-i18n-title is queried correctly in i18n.js.""" + with open("i18n.js", "r", encoding="utf-8") as f: + content = f.read() + + assert "querySelectorAll(\"[data-i18n-title]\")" in content + assert "getAttribute(\"title\")" in content + assert "setAttribute(\"title\"" in content