- 정본 `resources/master_template/구조물옵션그룹.json` = {type_id: [{id, 이름, 옵션[]}]} · 빈 그룹 됨
- 길 GET · PUT /api/m02/structure-option-groups(시스템 관리자) · 검사(없는 종류 · 키 · 겹침 · 옵션 두 그룹 422 · 낡은 판 409)
- /api/projects/structure-types 종류마다 groups(차례 · 이름 · 옵션) · 깨진 표 = 그룹 없음
- 옵션 보이기 화면 = 그룹 목록(이름 · 위로 · 아래로 · 지우기 · 추가) + 옵션 줄 「들어갈 자리」(본체 · 그룹)
- 좌측 「구조물 옵션 보이기」 = 시스템 관리자만
- 시험 test_m02_structure_option_groups.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MPcuokNm1ZR2kqgGGDfaJA
75 lines
3.8 KiB
TypeScript
75 lines
3.8 KiB
TypeScript
/* =============================================================================
|
||
* M02_SO_Text.ts
|
||
* 좌측 「구조물 옵션 보이기」 줄 · 상세 화면(보이기 · 그룹) 글자 — [한국어, 영어]
|
||
* ========================================================================== */
|
||
|
||
import { currentLanguageIndex } from "@ui/ui_template_locale";
|
||
|
||
const TEXT = {
|
||
Title: ["구조물 옵션 보이기", "Structure options shown"],
|
||
Row: ["종류마다 그룹 · 보일 옵션 정하기", "Groups and shown options per type"],
|
||
Screen: ["구조물 옵션 보이기 · 그룹", "Structure options · groups"],
|
||
Note: [
|
||
"체크한 옵션만 B05 · B06 구조물 폼에 보임 — 옵션 정의 · 이미 넣은 값은 그대로 · 처음은 모두 보임",
|
||
"Only checked options appear in the B05 · B06 forms — definitions and stored values stay",
|
||
],
|
||
GroupHead: ["그룹", "Groups"],
|
||
GroupNote: [
|
||
"그룹 하나 = 프로젝트 B05 · B06 폼의 보조 컨테이너 하나(제목 = 그룹 이름) · 그 안에서 구조물 조합 항목을 따로 지정 · 옵션이 없어도 연결됨 · 그룹에 안 넣은 옵션은 본체",
|
||
"One group = one sub-container in the B05 · B06 form (title = group name) with its own structure combo · works without options · ungrouped options stay in the main body",
|
||
],
|
||
GroupAdd: ["그룹 추가", "Add group"],
|
||
GroupName: ["그룹 이름", "Group name"],
|
||
GroupNew: ["새 그룹 {value}", "New group {value}"],
|
||
GroupUp: ["위로", "Up"],
|
||
GroupDown: ["아래로", "Down"],
|
||
GroupDel: ["지우기", "Delete"],
|
||
GroupDelAsk: [
|
||
"그룹 「{value}」 을 지움 — 그 옵션은 본체로 돌아감 · 프로젝트에 이미 지정한 조합은 값만 남음",
|
||
"Delete group “{value}” — its options return to the main body; project links keep their values",
|
||
],
|
||
GroupCount: ["옵션 {value}", "{value} options"],
|
||
GroupNone: [
|
||
"그룹 없음 — 모든 옵션이 본체 · 집계 항목 하나",
|
||
"No groups — all options in the main body",
|
||
],
|
||
GroupTag: ["그룹 {value}", "{value} groups"],
|
||
Main: ["본체", "Main body"],
|
||
OptionHead: ["옵션 — 보이기 · 들어갈 자리", "Options — shown · container"],
|
||
NoOptionKind: [
|
||
"이 종류는 옵션이 없음 — 그룹만 만들 수 있음(그룹마다 조합 연결)",
|
||
"No options — groups only (each links a combo)",
|
||
],
|
||
NameBad: [
|
||
"그룹 이름은 1~40자 · 같은 종류 안에서 겹치면 안 됨",
|
||
"Group names: 1–40 chars, unique",
|
||
],
|
||
Group: ["{value}군", "Group {value}"],
|
||
Hidden: ["숨김 {value}", "{value} hidden"],
|
||
Off: ["안 쓰는 종류", "Not offered"],
|
||
NoOption: ["옵션 없음", "No options"],
|
||
Pick: ["왼쪽에서 구조물 종류를 고름", "Pick a structure type on the left"],
|
||
Detail: ["B06 전용", "B06 only"],
|
||
Required: ["필수", "Required"],
|
||
RequiredTip: [
|
||
"필수 옵션 — 숨기면 폼에 안 나오고 필수로도 안 침(저장이 안 막힘)",
|
||
"Required — when hidden it is not shown and not enforced",
|
||
],
|
||
Save: ["저장", "Save"],
|
||
ShowAll: ["모두 보임", "Show all"],
|
||
Saved: ["저장함", "Saved"],
|
||
Stale: [
|
||
"그 사이 옵션 표시가 바뀜 — 새로 받았으니 다시 고쳐 주세요",
|
||
"Changed meanwhile — reloaded, please edit again",
|
||
],
|
||
Load_Failed: ["옵션 표시를 못 받음 — {value}", "Could not load option display — {value}"],
|
||
Failed: ["옵션 표시를 못 저장함 — {value}", "Could not save option display — {value}"],
|
||
} as const satisfies Record<string, readonly [string, string]>;
|
||
|
||
export type OptionsTextKey = keyof typeof TEXT;
|
||
|
||
export function to(key: OptionsTextKey, value = ""): string {
|
||
const entry = TEXT[key];
|
||
return (entry[currentLanguageIndex as 0 | 1] ?? entry[0]).replace("{value}", value);
|
||
}
|