Files
Aislo/A00_Common/spreadsheet/spreadsheet_text.ts
T
eomsangdonandClaude Sonnet 5 74b6937bc0 feat(spreadsheet): 도구 모음 단위 기호 골라 넣기
- [단위 ▾] 단추 → 자주 쓰는 기호 판(넓이·부피·길이 · 무게·부피(액체) · 개수 ·
  속도·각도·비율 · 연산·비교로 무리 지음) · 최근 쓴 것 앞(localStorage, 최대 8개)
- 누르면 편집 중이면 커서 자리에 끼워 넣고(D 편집기 textarea 캐럿 위치) · 아니면
  고른 칸 글 끝에 붙임(ctx.dispatch 라 되돌리기 짝 그대로)
- 체크박스로 「숫자 형식으로 붙이기」 고르면 값은 그대로 두고 형식만
  0"㎡" 처럼 단위를 붙임(기존 형식 끝 따옴표 단위는 새 것으로 교체)
- e_harness.ts 에 편집 중 커서 갈래를 시험할 숨은 textarea + __setEditing 시험
  전용 걸이 더함
- ORCA 실 엔진 확인 — 칸 글 끝 붙이기(터파기 계산서 → …㎡) · 형식 붙이기(12.5 값
  그대로 · 형식 0"㎡") · 편집 중 커서 자리 끼우기(f|oo → fkgoo, 캐럿 이동) · 최근
  목록 순서·중복 제거(개 본 개 식 → 식·개·본) 모두 확인

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeeQRLknEpP4SFjVkjDWDs
2026-09-28 12:08:26 +09:00

111 lines
4.9 KiB
TypeScript

/* =============================================================================
* spreadsheet_text.ts (주인 E)
* 도구 모음 · 시트 탭 · 우클릭 메뉴 · 클립보드 글자 — [한국어, 영어].
* ⚠ `@ui/ui_template_locale` 를 안 씀 — `currentLanguageIndex` 하나만 필요해도 그 파일이
* 앱 전체 사전(a · b1~4 · common · m1 · m2, 압축 뒤 약 45 KB)을 통째로 끌고 와 화면 예산(28 KB)을
* 넘김(2026-09-27 브레인 지시). 자기 언어 상태를 따로 둠 — `setSpreadsheetLanguage` 로만 바꿈.
* ========================================================================== */
let currentLanguageIndex = 0;
/** 앱 전역 언어 토글과 맞추고 싶으면 D(`spreadsheet.ts`) 가 부름 — 안 부르면 한국어 기본. */
export function setSpreadsheetLanguage(index: 0 | 1): void {
currentLanguageIndex = index;
}
const TEXT = {
Undo: ["되돌리기", "Undo"],
Redo: ["다시", "Redo"],
FontName: ["글꼴", "Font"],
FontSize: ["크기", "Size"],
Bold: ["굵게", "Bold"],
Italic: ["기울임", "Italic"],
Underline: ["밑줄", "Underline"],
Strike: ["취소선", "Strikethrough"],
TextColor: ["글자색", "Text color"],
FillColor: ["채움색", "Fill color"],
ColorClear: ["지움", "Clear"],
HAlign: ["가로 정렬", "Horizontal align"],
VAlign: ["세로 정렬", "Vertical align"],
Align_general: ["일반", "General"],
Align_left: ["왼쪽", "Left"],
Align_center: ["가운데", "Center"],
Align_right: ["오른쪽", "Right"],
Align_distributed: ["균등 분할", "Distributed"],
Align_centerContinuous: ["선택 영역 가운데", "Center across"],
VAlign_top: ["위", "Top"],
VAlign_center: ["가운데", "Middle"],
VAlign_bottom: ["아래", "Bottom"],
Wrap: ["줄 바꿈", "Wrap text"],
Merge: ["병합", "Merge"],
Unmerge: ["병합 해제", "Unmerge"],
Border: ["테두리", "Border"],
Border_none: ["없음", "None"],
Border_all: ["모두", "All"],
Border_outer: ["바깥", "Outer"],
Border_top: ["위", "Top"],
Border_bottom: ["아래", "Bottom"],
Border_left: ["왼", "Left"],
Border_right: ["오른", "Right"],
BorderLine: ["선", "Line"],
BorderColor: ["색", "Color"],
NumberFormat: ["숫자 형식", "Number format"],
NumberFormat_general: ["일반", "General"],
NumberFormat_integer: ["정수 0", "Integer"],
NumberFormat_decimal2: ["소수 0.00", "Decimal 0.00"],
NumberFormat_thousands: ["천 단위 #,##0", "Thousands"],
NumberFormat_thousands2: ["천 단위 #,##0.00", "Thousands 0.00"],
NumberFormat_percent: ["백분율 0%", "Percent"],
NumberFormat_accounting: ["회계", "Accounting"],
NumberFormat_text: ["글자 @", "Text"],
NumberFormat_hint: [
"이름 골라 쓰거나 엑셀 형식 코드를 바로 침",
"Pick a preset or type an Excel format code",
],
SheetAdd: ["시트 더하기", "Add sheet"],
SheetRename: ["이름 바꾸기", "Rename"],
SheetDelete: ["지우기", "Delete"],
SheetDuplicate: ["복사", "Duplicate"],
SheetRenamePrompt: ["새 시트 이름", "New sheet name"],
SheetDeleteConfirm: [
"이 시트를 지울까요? 되돌릴 수 없습니다.",
"Delete this sheet? This cannot be undone.",
],
SheetDeleteLastError: ["마지막 시트는 지울 수 없음", "Cannot delete the last sheet"],
SheetHide: ["숨기기", "Hide"],
SheetUnhideMenu: ["숨긴 시트 보이기", "Show hidden sheets"],
MenuCut: ["잘라내기", "Cut"],
MenuCopy: ["복사", "Copy"],
MenuPasteHint: ["Ctrl+V 를 쓸 것", "Use Ctrl+V"],
MenuInsertRow: ["행 넣기", "Insert row"],
MenuDeleteRow: ["행 지우기", "Delete row"],
MenuInsertCol: ["열 넣기", "Insert column"],
MenuDeleteCol: ["열 지우기", "Delete column"],
MenuHide: ["숨기기", "Hide"],
MenuUnhide: ["숨김 취소", "Unhide"],
MenuClearContent: ["내용 지우기", "Clear content"],
MenuClearFormat: ["서식 지우기", "Clear format"],
MenuMerge: ["병합", "Merge"],
MenuUnmerge: ["병합 해제", "Unmerge"],
MenuCommentInsert: ["메모 삽입", "Insert comment"],
MenuCommentEdit: ["메모 편집", "Edit comment"],
MenuCommentDelete: ["메모 삭제", "Delete comment"],
ClipboardPasteFailed: ["붙여넣기를 읽지 못함", "Could not read paste content"],
ClipboardMergeBlocked: [
"병합된 셀의 일부를 바꿀 수 없습니다",
"Can't change part of a merged cell",
],
Unit: ["단위", "Unit"],
UnitGroup_area: ["넓이·부피·길이", "Area · volume · length"],
UnitGroup_weight: ["무게·부피(액체)", "Weight · liquid volume"],
UnitGroup_count: ["개수", "Count"],
UnitGroup_rate: ["속도·각도·비율", "Speed · angle · rate"],
UnitGroup_op: ["연산·비교", "Operators"],
UnitRecent: ["최근 씀", "Recently used"],
UnitAsFormat: ["숫자 형식으로 붙이기", "Attach as number format"],
} as const;
export function st(key: keyof typeof TEXT): string {
return TEXT[key][currentLanguageIndex] ?? TEXT[key][0];
}