/* ============================================================================= * M01_MasterData_UI_Logic_Text.ts * 로직 화면 글자 — [한국어, 영어] · 공용 사전과 같은 모양 · 창끼리 공용 사전 줄이 겹치지 않게 따로 둠 * ========================================================================== */ import { currentLanguageIndex } from "@ui/ui_template_locale"; const TEXT = { Title: ["일위대가 로직", "Unit-cost logic"], List_Search: ["이름 찾기", "Search name"], List_AllBooks: ["원문 모두", "All sources"], List_AllChapters: ["장 모두", "All chapters"], List_BlockedOnly: ["막힘만", "Blocked only"], List_Count: ["{n} 개", "{n} items"], List_Blocked: ["막힘", "Blocked"], List_Edited: ["고침", "Edited"], List_New: ["새것", "New"], List_Deleted: ["지움", "Deleted"], Bar_New: ["로직 새로 만들기", "New logic"], Bar_Delete: ["로직 지우기", "Delete logic"], Bar_Save: ["저장", "Save"], Bar_Discard: ["고친 것 버리기", "Discard edits"], Bar_Pending: ["저장 안 한 로직 {n} 개", "{n} unsaved logics"], Empty: ["왼쪽 목록에서 로직을 고르세요", "Pick a logic from the list"], Head_File: ["파일", "File"], Head_Key: ["열쇠", "Key"], Head_Name: ["이름", "Name"], Head_Unit: ["결과단위", "Result unit"], Head_Source: ["출처", "Source"], Head_Owner: ["소유", "Owner"], Head_Note: ["비고", "Note"], Head_Blocked: ["막힌 까닭", "Why blocked"], Inputs_Title: ["설계에서 받을 값", "Values from design"], Inputs_Unit: ["단위", "Unit"], Inputs_Choices: ["고르기(쉼표로)", "Choices (comma)"], Inputs_Range: ["범위", "Range"], Ho_Title: ["호표", "Unit-cost lines"], Ho_Kind: ["종류", "Kind"], Ho_Element: ["요소", "Element"], Ho_Name: ["이름·규격", "Name · spec"], Ho_Unit: ["단위", "Unit"], Ho_Qty: ["수량", "Qty"], Ho_Price: ["단가", "Unit price"], Ho_Amount: ["금액", "Amount"], Ho_Cost: ["비목", "Cost item"], Ho_Pick: ["찾기", "Find"], Ho_PickTable: ["표", "Table"], Ho_QtyNumber: ["수", "Number"], Ho_QtyTable: ["표 찾기", "Table lookup"], Ho_QtyFormula: ["식", "Formula"], Ho_PriceLater: ["계산 때", "At calc"], Ho_Missing: ["없는 요소", "Missing element"], Middle_Title: ["중간 값", "Intermediate values"], Result_Title: ["결과 식(돈 아닌 로직)", "Result formula (non-money)"], Extra_Title: ["덧줄", "Extra lines"], Rounding: ["끝수", "Rounding"], Formula: ["식", "Formula"], AddRow: ["줄 더하기", "Add line"], DeleteRow: ["줄 지우기", "Delete line"], Calc_Title: ["시험 계산", "Test calculation"], Calc_Run: ["계산", "Calculate"], Calc_NoInputs: ["받을 값 없음", "No inputs"], Calc_Draft: ["고친 줄로 계산(저장 전)", "Using unsaved edits"], Calc_Stopped: ["멈춤", "Stopped"], Calc_Result: ["결과", "Result"], Calc_Sum: ["계", "Total"], Pick_Title: ["요소 찾기", "Find element"], Pick_Search: ["이름·열쇠", "Name · key"], Pick_Total: ["{n} 개 중 앞 100 개", "first 100 of {n}"], Pick_Close: ["닫기", "Close"], Save_Done: ["저장했음", "Saved"], Save_Stale: [ "그 사이 파일이 바뀜 — 고친 것을 버리고 다시 여세요: {v}", "Files changed meanwhile — discard and reopen: {v}", ], Save_Errors: ["검사에 걸려 저장 안 함", "Check failed — nothing saved"], Save_Failed: ["저장 못 함", "Save failed"], Save_Nothing: ["고친 것 없음", "Nothing to save"], Load_Failed: ["불러오지 못함", "Load failed"], Confirm_Delete: [ "로직 「{v}」 을 지울까요? [저장] 때 파일에서 빠짐", "Delete logic “{v}”? Removed on save", ], Confirm_Discard: ["고친 것을 모두 버릴까요?", "Discard all edits?"], Confirm_Leave: [ "저장 안 한 로직이 있음 — 다른 로직을 열어도 고친 것은 남음", "Unsaved logics stay in the draft", ], New_Key: ["새 로직", "New logic"], } as const satisfies Record; export type TextKey = keyof typeof TEXT; /** 공용 `t()` 와 같은 뜻 — `{n}`·`{v}` 는 채움 */ export function tx(key: TextKey, fill: Record = {}): string { const entry = TEXT[key]; const text: string = entry[currentLanguageIndex as 0 | 1] ?? entry[0]; return text.replace(/\{(\w+)\}/g, (m, k: string) => (k in fill ? String(fill[k]) : m)); }