Files
Aislo/ui_template/ui_template_locale_common.ts
T
eomsangdonandClaude Opus 5 9ff360164c refactor(ui): ui_template_locale.ts 700줄 제약 해결 — 배럴 + 사전 4분할
1,230줄이던 ui_template_locale.ts를 얇은 배럴(51줄)로 축소하고,
ui_locales 사전 데이터를 4개 파일로 분리했다.

- ui_template_locale_common.ts (96줄, 60키) — 공통 액션/상태/폼/네비/워크플로우/앱 셸, LocaleEntry 타입 정의
- ui_template_locale_a.ts      (263줄, 141키) — A01~A09 로그인 전 페이지
- ui_template_locale_b1.ts     (430줄, 260키) — B01~B04
- ui_template_locale_b2.ts     (408줄, 253키) — B05~B11

배럴이 4종 사전을 스프레드로 합성하고 LANGUAGES / LanguageCode /
currentLanguageIndex / setLanguage / t / ui_locales / LocaleKey export
시그니처를 그대로 유지하므로, 소비처 13개 이상 파일의 import 수정은 없다.

검증: 분할 전후 714개 키가 값 문자열까지 완전 일치, 파일 간 중복 키 0건,
tsc --noEmit 오류 0건, prettier 5개 파일 모두 unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-02 07:34:21 +09:00

105 lines
5.5 KiB
TypeScript

/* =============================================================================
* ui_template_locale_common.ts
* 다국어 사전 — 공통 문구 (액션/상태/폼/네비게이션/워크플로우 라벨/앱 셸)
*
* 규칙 (frontend.md §3):
* - 모든 UI 문자열은 여기에 [한국어, 영어] 배열로 선(先) 등록.
* - 컴포넌트에서는 ui_locales.키값[currentLanguageIndex] 형태로만 참조.
* - 텍스트 하드코딩 절대 금지.
* - 신규 문구는 해당 섹션 최하단에 추가.
*
* 이 파일은 사전 데이터만 담는다. 합성·언어 전환·t() 헬퍼는 ui_template_locale.ts 참조.
* ========================================================================== */
/** [한국어, 영어] 배열 타입 */
export type LocaleEntry = readonly [ko: string, en: string];
export const ui_locales_common = {
/* ---------------------------------------------------------------------------
* 공통 — 액션 / 버튼
* ------------------------------------------------------------------------ */
Common_Btn_Confirm: ["확인", "Confirm"],
Common_Btn_Cancel: ["취소", "Cancel"],
Common_Btn_Save: ["저장", "Save"],
Common_Btn_Delete: ["삭제", "Delete"],
Common_Btn_Edit: ["수정", "Edit"],
Common_Btn_Add: ["추가", "Add"],
Common_Btn_Close: ["닫기", "Close"],
Common_Btn_Next: ["다음", "Next"],
Common_Btn_Prev: ["이전", "Previous"],
Common_Btn_Submit: ["제출", "Submit"],
Common_Btn_Reset: ["초기화", "Reset"],
Common_Btn_Download: ["다운로드", "Download"],
Common_Btn_Upload: ["업로드", "Upload"],
Common_Btn_Search: ["검색", "Search"],
Common_Btn_Apply: ["적용", "Apply"],
Common_Btn_Retry: ["다시 시도", "Retry"],
/* ---------------------------------------------------------------------------
* 공통 — 상태 / 메시지
* ------------------------------------------------------------------------ */
Common_Status_Loading: ["불러오는 중...", "Loading..."],
Common_Status_Saving: ["저장 중...", "Saving..."],
Common_Status_Processing: ["처리 중...", "Processing..."],
Common_Status_Success: ["완료되었습니다", "Completed"],
Common_Status_Error: ["오류가 발생했습니다", "An error occurred"],
Common_Status_Empty: ["데이터가 없습니다", "No data available"],
Common_Msg_ConfirmDelete: ["정말 삭제하시겠습니까?", "Are you sure you want to delete?"],
Common_Msg_UnsavedChanges: ["저장되지 않은 변경사항이 있습니다", "You have unsaved changes"],
Common_Msg_RequiredField: ["필수 입력 항목입니다", "This field is required"],
Common_Msg_InvalidValue: ["올바르지 않은 값입니다", "Invalid value"],
Workflow_Progress_Title: ["진행단계", "Progress"],
Workflow_Overlay_Collapse: ["패널 접기", "Collapse panel"],
Workflow_Overlay_Expand: ["패널 펼치기", "Expand panel"],
/* ---------------------------------------------------------------------------
* 공통 — 폼 / 검증
* ------------------------------------------------------------------------ */
Common_Form_Placeholder_Search: ["검색어를 입력하세요", "Enter search term"],
Common_Form_Placeholder_Select: ["선택하세요", "Select"],
Common_Validation_NumberRange: ["숫자 범위를 벗어났습니다", "Value out of range"],
Common_Validation_EmailFormat: ["이메일 형식이 올바르지 않습니다", "Invalid email format"],
/* ---------------------------------------------------------------------------
* 글로벌 네비게이션 / 언어
* ------------------------------------------------------------------------ */
Nav_Home: ["홈", "Home"],
Nav_Login: ["로그인", "Login"],
Nav_Logout: ["로그아웃", "Logout"],
Nav_Register: ["회원가입", "Sign up"],
Nav_MyAccount: ["내 계정", "My Account"],
Lang_Korean: ["한국어", "Korean"],
Lang_English: ["영어", "English"],
Theme_Light: ["라이트 모드", "Light mode"],
Theme_Dark: ["다크 모드", "Dark mode"],
/* ---------------------------------------------------------------------------
* 워크플로우 공통 (B04~B09 상단 진행 단계 라벨)
* ------------------------------------------------------------------------ */
WF_Step_Surface: ["전처리", "Preprocess"],
WF_Step_Route: ["종단설계", "Profile Design"],
WF_Step_ProfileCross: ["횡단설계", "Cross Design"],
WF_Step_DesignDetail: ["상세설계", "Detail Design"],
WF_Step_Quantity: ["수량산출", "Quantity"],
WF_Step_Estimation: ["설계도서", "Design Docs"],
WF_State_Stale: ["무효화됨 (하위 단계 변경)", "Stale (invalidated by downstream changes)"],
WF_State_Failed: ["실패", "Failed"],
WF_State_Complete: ["완료", "Complete"],
WF_State_InProgress: ["진행 중", "In Progress"],
WF_State_NotStarted: ["미실행", "Not Started"],
/* ---------------------------------------------------------------------------
* 앱 셸 — 헤더 / 푸터 (공통 네비게이션)
* ------------------------------------------------------------------------ */
App_BrandName: ["AISLO", "AISLO"],
App_Nav_Program: ["프로그램", "Program"],
App_Nav_Company: ["회사소개", "Company"],
App_Nav_News: ["소식", "News"],
App_Nav_Education: ["교육", "Education"],
App_Nav_Support: ["기술지원", "Support"],
App_Footer_Copyright: [
"© 2026 임도설계 및 견적 자동화. All rights reserved.",
"© 2026 Forest Road Design & Estimation. All rights reserved.",
],
} as const satisfies Record<string, LocaleEntry>;