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
@@ -59,7 +59,7 @@

맥락지혜 연구실

구슬이 서 말이어도 꿰어야 보배이듯, 문서, 메일, 로그, 회의록을 맥락 안에서 엮어 사람이 무엇을 결정하고 무엇을 실행할지 보이게 하는 AI 의사결정 지원 시스템을 연구하고 만듭니다.

- GitHub 보기 + GitHub 보기 DIKW 보기
@@ -254,19 +254,19 @@

참고문헌

  1. Ackoff, R. L. (1989). From data to wisdom. Journal of Applied Systems Analysis, 16(1), 3-9. - https://faculty.ung.edu/kmelton/documents/datawisdom.pdf + https://faculty.ung.edu/kmelton/documents/datawisdom.pdf
  2. Baskarada, S., & Koronios, A. (2013). Data, information, knowledge, wisdom (DIKW): A semiotic theoretical and empirical exploration of the hierarchy and its quality dimension. Australasian Journal of Information Systems, 18(1). - https://doi.org/10.3127/ajis.v18i1.748 + https://doi.org/10.3127/ajis.v18i1.748
  3. Frické, M. (2009). The knowledge pyramid: A critique of the DIKW hierarchy. Journal of Information Science, 35(2), 131-142. - https://doi.org/10.1177/0165551508094050 + https://doi.org/10.1177/0165551508094050
  4. Brienza, J. P., Kung, F. Y. H., Santos, H. C., Bobocel, D. R., & Grossmann, I. (2018). Wisdom, bias, and balance: Toward a process-sensitive measurement of wisdom-related cognition. Journal of Personality and Social Psychology, 115(6), 1093-1126. - https://doi.org/10.1037/pspp0000171 + https://doi.org/10.1037/pspp0000171
@@ -327,39 +327,39 @@

공개 프로젝트

-

Naruon

+

Naruon

메일, 첨부, 일정, 작업을 맥락으로 묶어 판단과 실행으로 연결하는 AI 이메일 워크스페이스입니다.

-

pg-erd-cloud

+

pg-erd-cloud

PostgreSQL 스키마를 리버스 엔지니어링하고 ERD와 DDL 공유 흐름으로 관리하는 클라우드 MVP입니다.

-

BandScope

+

BandScope

곡을 섹션, 역할, 템포, 연습 우선순위로 분석하는 로컬 우선 리허설 앱입니다.

-

codec-carver

+

codec-carver

긴 녹음을 메타데이터를 보존한 FLAC/Opus 조각으로 변환하는 Python CLI입니다.

-

newsdom-api

+

newsdom-api

스캔된 일본어 신문 PDF를 기사, 제목, 본문, 이미지 구조의 DOM형 JSON으로 파싱하는 API입니다.

-

scopeweave

+

scopeweave

트리 편집, 진행률 계산, CSV/JSON, 주간 Gantt를 지원하는 정적 HTML/CSS/JS WBS 플래너입니다.

-

VibeSec

+

VibeSec

바이브코딩 앱을 위한 보안 가드레일입니다. AI 개발 도구 규칙, 정적 점검, 리뷰와 수정 프롬프트를 다룹니다.

-

fast-mlsirm

+

fast-mlsirm

MLSIRM/MLS2PLM 모형의 시뮬레이션, 적합, 복원 진단을 빠르게 수행하는 Python/Rust 패키지입니다.

-

waf-ids-ai-soc

+

waf-ids-ai-soc

DNSBL 게시 기능을 갖춘 Rust 우선 WAF/IDS/AI SOC 게이트웨이입니다.

@@ -431,7 +431,7 @@

연구에서 제품으로

>

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