- 화면: 왼쪽 로직 목록(원문·장·이름 찾기·막힘) / 가운데 머리·받을 값·호표·중간 값·덧줄·끝수 / 오른쪽 시험 계산 - 고친 것은 캐시에 쌓고 [저장] 한 번에 · [고친 것 버리기] · 줄 더하기·지우기 · 로직 새로 만들기·지우기 - 진입은 mountM01Logic(host) — 공용 진입 파일(sub_laptop_3 몫)이 한 줄로 붙임 - 서버: 로직 하나에 단가 자동(prices) · 요소 찾기(GET /elements) · 저장 전 시험 계산(calc 에 row·file) - 계약 문서 갱신 · 시험 1개 더함(9개 통과) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
100 lines
4.4 KiB
TypeScript
100 lines
4.4 KiB
TypeScript
/* =============================================================================
|
|
* 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<string, readonly [string, string]>;
|
|
|
|
export type TextKey = keyof typeof TEXT;
|
|
|
|
/** 공용 `t()` 와 같은 뜻 — `{n}`·`{v}` 는 채움 */
|
|
export function tx(key: TextKey, fill: Record<string, string | number> = {}): 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));
|
|
}
|