/* ============================================================================= * ui_template_locale.ts * 다국어 텍스트 배열 방식 관리 파일 (i18n) — 사전 합성 및 조회 헬퍼 * * 규칙 (frontend.md §3): * - 모든 UI 문자열은 사전 파일에 [한국어, 영어] 배열로 선(先) 등록. * - 컴포넌트에서는 ui_locales.키값[currentLanguageIndex] 형태로만 참조. * - 텍스트 하드코딩 절대 금지. * - 신규 문구는 해당 사전 파일의 해당 섹션 최하단에 추가. * * 사전 파일 분할 (700줄 제약): * - ui_template_locale_common.ts : 공통 (액션/상태/폼/네비게이션/워크플로우/앱 셸) * - ui_template_locale_a.ts : A 그룹 (로그인 전 A01~A09) * - ui_template_locale_b1.ts : B 그룹 전반부 (B01~B04) * - ui_template_locale_b2.ts : B 그룹 후반부 (B05~B11) * * 이 파일의 export 시그니처는 분할 이전과 동일하므로 소비처 import 수정은 불필요하다. * ========================================================================== */ import { ui_locales_common } from "./ui_template_locale_common"; import { ui_locales_a } from "./ui_template_locale_a"; import { ui_locales_b1 } from "./ui_template_locale_b1"; import { ui_locales_b2 } from "./ui_template_locale_b2"; import { ui_locales_b3 } from "./ui_template_locale_b3"; /** 지원 언어 인덱스: 0 = 한국어, 1 = 영어 */ export const LANGUAGES = ["ko", "en"] as const; export type LanguageCode = (typeof LANGUAGES)[number]; /** 현재 언어 인덱스 (기본: 한국어). 언어 전환 시 이 값을 갱신. */ export let currentLanguageIndex = 0; /** 언어 전환 헬퍼. code가 유효하면 인덱스 갱신 후 반환. */ export function setLanguage(code: LanguageCode): number { const idx = LANGUAGES.indexOf(code); if (idx >= 0) { currentLanguageIndex = idx; } return currentLanguageIndex; } /** 현재 언어에 맞는 문자열 반환. 키 누락 시 키 자체를 반환(개발 중 탐지용). */ export function t(key: keyof typeof ui_locales): string { const entry = ui_locales[key]; if (!entry) { return String(key); } return entry[currentLanguageIndex] ?? entry[0]; } /** 분할된 사전 4종을 합성한 단일 사전. 키는 파일 간 중복되지 않는다. */ export const ui_locales = { ...ui_locales_common, ...ui_locales_a, ...ui_locales_b1, ...ui_locales_b2, ...ui_locales_b3, } as const; export type LocaleKey = keyof typeof ui_locales;