From 5e319482240b169fd62772f9e5380250b11615ba Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 22 Oct 2026 20:10:52 +0900 Subject: [PATCH] =?UTF-8?q?refactor(512-2=20=EC=82=AC=EC=A0=84=20=EB=82=98?= =?UTF-8?q?=EB=88=94):=20ui=5Ftemplate=5Flocale=5Fb2.ts=201031=20=EC=A4=84?= =?UTF-8?q?=20=E2=86=92=20B05~B07=20586=20=EC=A4=84=20=C2=B7=20B08~B11=20?= =?UTF-8?q?=EC=B9=B8=EC=9D=80=20=EC=83=88=20ui=5Ftemplate=5Flocale=5Fb5.ts?= =?UTF-8?q?=20449=20=EC=A4=84=EB=A1=9C=20=EA=B7=B8=EB=8C=80=EB=A1=9C=20?= =?UTF-8?q?=EB=97=8C=20=C2=B7=20=ED=95=A9=EC=84=B1=20=EC=82=AC=EC=A0=84?= =?UTF-8?q?=EC=97=90=20=ED=95=9C=20=EC=A4=84=20=C2=B7=20=ED=82=A4=20585=20?= =?UTF-8?q?=EA=B0=9C=20=C2=B7=20=EA=B0=92=20=EA=B7=B8=EB=8C=80=EB=A1=9C=20?= =?UTF-8?q?=C2=B7=20=EC=82=AC=EC=A0=84=20=EC=9D=BD=EB=8A=94=20=EC=8B=9C?= =?UTF-8?q?=ED=97=98=20=EC=85=8B=20=EC=9E=90=EB=A6=AC=20=EB=A7=9E=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- .../tester/test_171_1_manual_input_label.py | 2 +- resources/tester/test_472_3_calc_registry.py | 1 + .../tester/test_506_3_b07_cad_cleanup.py | 2 +- ui_template/ui_template_locale.ts | 5 +- ui_template/ui_template_locale_b2.ts | 440 +---------------- ui_template/ui_template_locale_b5.ts | 449 ++++++++++++++++++ 6 files changed, 457 insertions(+), 442 deletions(-) create mode 100644 ui_template/ui_template_locale_b5.ts diff --git a/resources/tester/test_171_1_manual_input_label.py b/resources/tester/test_171_1_manual_input_label.py index 9cd4645bc..5d57a1643 100644 --- a/resources/tester/test_171_1_manual_input_label.py +++ b/resources/tester/test_171_1_manual_input_label.py @@ -16,7 +16,7 @@ SPOTS = { "B09_Estimation/B09_Estimation_Sangeun.py": ['"수기 줄" if'], "B09_Estimation/B09_Estimation_UI_Tabs_Base.ts": ["견적 단가는 수기 입력"], "B09_Estimation/B09_Estimation_UI_Tabs_Total.ts": ['"수기 입력"'], - "ui_template/ui_template_locale_b2.ts": [ + "ui_template/ui_template_locale_b5.ts": [ # B08~B11 칸 = b5(512-2 나눔) "수량 원천: 수기 입력(직접비)", "수량 원천: 수기 입력 공종", ], diff --git a/resources/tester/test_472_3_calc_registry.py b/resources/tester/test_472_3_calc_registry.py index c7addd471..4812d13dd 100644 --- a/resources/tester/test_472_3_calc_registry.py +++ b/resources/tester/test_472_3_calc_registry.py @@ -80,6 +80,7 @@ SESSION_PULLS = ( "ui_template/ui_template_locale_b2.ts", "ui_template/ui_template_locale_b3.ts", "ui_template/ui_template_locale_b4.ts", + "ui_template/ui_template_locale_b5.ts", "ui_template/ui_template_locale_common.ts", "ui_template/ui_template_locale_m1.ts", "ui_template/ui_template_locale_m2.ts", diff --git a/resources/tester/test_506_3_b07_cad_cleanup.py b/resources/tester/test_506_3_b07_cad_cleanup.py index 747e63775..f7fba88a9 100644 --- a/resources/tester/test_506_3_b07_cad_cleanup.py +++ b/resources/tester/test_506_3_b07_cad_cleanup.py @@ -46,7 +46,7 @@ def test_6b_host_save_클래스_없음(): def test_4_2_안_쓰는_글_없음(): - locale = _read(ROOT / "ui_template" / "ui_template_locale_b2.ts") + locale = _read(ROOT / "ui_template" / "ui_template_locale_b5.ts") # B08 칸 = b5(512-2 나눔) for key in ( "B08_Quantity_Side_Pending", "B08_Quantity_Btn_Confirm", diff --git a/ui_template/ui_template_locale.ts b/ui_template/ui_template_locale.ts index a285a8a60..51b1be1e4 100644 --- a/ui_template/ui_template_locale.ts +++ b/ui_template/ui_template_locale.ts @@ -12,7 +12,8 @@ * - ui_template_locale_common.ts : 공통 (액션/상태/폼/네비게이션/워크플로우/앱 셸) * - ui_template_locale_a.ts : A 그룹 (로그인 전 A01~A09) * - ui_template_locale_b1.ts : B 그룹 전반부 (B01~B04) - * - ui_template_locale_b2.ts : B 그룹 후반부 (B05~B11) + * - ui_template_locale_b2.ts : B 그룹 후반부 (B05~B07) + * - ui_template_locale_b5.ts : B 그룹 끝 (B08~B11) * * 이 파일의 export 시그니처는 분할 이전과 동일하므로 소비처 import 수정은 불필요하다. * ========================================================================== */ @@ -24,6 +25,7 @@ import { ui_locales_a } from "./ui_template_locale_a"; import { ui_locales_b1 } from "./ui_template_locale_b1"; import { ui_locales_b2 } from "./ui_template_locale_b2"; import { ui_locales_b3 } from "./ui_template_locale_b3"; +import { ui_locales_b5 } from "./ui_template_locale_b5"; import { ui_locales_m1 } from "./ui_template_locale_m1"; import { ui_locales_m2 } from "./ui_template_locale_m2"; @@ -60,6 +62,7 @@ export const ui_locales = { ...ui_locales_b1, ...ui_locales_b2, ...ui_locales_b3, + ...ui_locales_b5, ...ui_locales_m1, ...ui_locales_m2, } as const; diff --git a/ui_template/ui_template_locale_b2.ts b/ui_template/ui_template_locale_b2.ts index eee26456c..4cada153b 100644 --- a/ui_template/ui_template_locale_b2.ts +++ b/ui_template/ui_template_locale_b2.ts @@ -1,6 +1,6 @@ /* ============================================================================= * ui_template_locale_b2.ts - * 다국어 사전 — B 그룹 후반부 (B05_Profile ~ B11_Status) + * 다국어 사전 — B 그룹 후반부 (B05_Profile ~ B07_DesignDetail) · B08~B11 은 `ui_template_locale_b5.ts` * * 워크플로우 진행 단계 라벨은 ui_template_locale_common.ts 의 WF_Step_* 키를 * 재사용한다 (중복 등록 방지). @@ -546,444 +546,6 @@ export const ui_locales_b2 = { "이 장은 측점 여러 개를 담습니다. 지반·계획 정보는 측점 도면에서 봅니다.", "This sheet holds several stations. Ground and plan details live on each station drawing.", ], - - /* --- B08_Quantity 수량 산출 --- */ - B08_Quantity_Title: ["수량산출", "Quantity"], - B08_Quantity_Tab_Earthwork: ["토공", "Earthwork"], - B08_Quantity_Grid_Loading: ["토적표를 만드는 중입니다…", "Building the earthwork table…"], - B08_Quantity_Grid_Empty: [ - "측점 단면적이 아직 없습니다. 횡단 설계를 먼저 마치세요.", - "No cross-section areas yet. Finish the cross-section design first.", - ], - B08_Quantity_Grid_Failed: [ - "토적표를 불러오지 못했습니다.", - "Failed to load the earthwork table.", - ], - B08_Quantity_Tab_Summary: ["토공집계", "Earthwork Summary"], - B08_Quantity_Tab_Haul: ["운반거리", "Haul Distance"], - B08_Quantity_Tab_StructureSummary: ["구조물 집계표", "Structure Summary"], - B08_Quantity_Tab_UnitQuantity: ["구조물 원단위", "Structure Unit Quantity"], - B08_Quantity_Tab_Material: ["자재총괄", "Material Summary"], - B08_Quantity_Tab_Preparation: ["준비공·사방공", "Preparation & Erosion Control"], - B08_Quantity_Side_Method_Label: ["시공법", "Method"], - B08_Quantity_Method_Unset: ["안 정함", "Not set"], - B08_Quantity_Method_Ripping: ["긁어내기(암절취)", "Ripping"], - B08_Quantity_Method_Blasting: ["터뜨리기(발파암)", "Blasting"], - B08_Quantity_Placing_NotApplied: [ - "콘크리트 물량이 「콘크리트 타설」 공종으로 견적에 넘어갑니다.", - "The placing method changes this work item's unit price — concrete volume is handed over as a placing work item.", - ], - B08_Quantity_Side_Topsoil: ["표토제거", "Topsoil Removal"], - B08_Quantity_Side_Topsoil_Label: ["표토 두께(m)", "Topsoil thickness (m)"], - B08_Quantity_Side_TopsoilTarget_Label: ["표토제거 대상", "Topsoil removal target"], - B08_Quantity_TopsoilTarget_RoadAndCut: [ - "노면 + 절토 사면 (기본 · 법 문언)", - "Road surface + cut slope (default · law)", - ], - B08_Quantity_TopsoilTarget_RoadOnly: ["노면만", "Road surface only"], - B08_Quantity_Side_TopsoilTarget_Hint: [ - "기본 근거: 산림자원법 시행규칙 별표2 Ⅰ.2.차.(6) 「노면·절토대상지에 있는 … 표토는 전량 제거한 후 … 운반하고 쌓아두어야 한다」 — 성토 사면은 「제거·정리」라 대상 밖. 노면만: 실무 영월 한 건(1m당 3.34㎡)이 노면만 셈 — 한 건이라 기본으로 삼지 않고 고를 수 있게 둠(면적 약 3배 차이)", - "Default basis: the forest-road rule names road surface and cut areas; fill slopes are only cleared. Road-only follows one field case (Yeongwol, 3.34 ㎡ per m) — selectable, not the default (about 3× area difference)", - ], - B08_Quantity_Unset_Placeholder: ["안 정함", "Not set"], - // ── 확정 3차(2026-09-09) 로 정한 값들 — **화면에 칸으로 세우고 근거를 보인다.** - // 사용자 지시: 「값을 코드에 박고 끝내지 말 것 · 대신 페이지에 남길 것」. - B08_Quantity_Side_Structure: ["구조물·사토", "Structures & Spoil"], - B08_Quantity_Side_BenchCut_Label: ["층따기 길이(m)", "Bench cut length (m)"], - B08_Quantity_Side_BenchCut_Hint: [ - "면적 × 이 값 = ㎥ — 비우면 층따기 줄이 막힙니다(확정 2차 ①)", - "Area × this = ㎥ — blank keeps the bench-cut row blocked", - ], - B08_Quantity_Side_BenchCut_Suggest: [ - "층따기 표준치수 — 최소 높이 토사 500 mm 이상 · 암반 400 mm 이상 · 폭 1 m 이상(기계 작업을 할 때는 3 m 이상). 근거: KDS 44 30 00 도로토공 2.3.4 (4) ② 「기초지반의 종류에 따른 층따기의 표준치수」", - "Bench cut standard dimensions — minimum height: soil ≥ 500 mm · rock ≥ 400 mm · width ≥ 1 m (≥ 3 m for machine work). Basis: KDS 44 30 00 Road Earthwork 2.3.4 (4) ②", - ], - B08_Quantity_Side_Rubble_Label: ["기초잡석 두께(m)", "Rubble base thickness (m)"], - B08_Quantity_Side_Rubble_Hint: [ - "폭은 버림 폭과 같음(KCS 34 50 05) · 두께 0.2m 는 사용자 확정 3차 ② — 품셈 12-25 는 두께를 정하지 않음", - "Width equals the blinding width (KCS 34 50 05); 0.2 m thickness is a user decision — the standard gives none", - ], - B08_Quantity_Side_SpoilDistance_Label: ["사토장까지 거리(m)", "Distance to spoil site (m)"], - B08_Quantity_Side_SpoilDistance_Hint: [ - "사토장을 노선에 놓으면 그 측점까지 거리가 계산되어 이 값은 안 씁니다 — 안 놓았을 때의 대체값입니다", - "Used only until a spoil site is placed on the route — then the distance is computed from that station", - ], - B08_Quantity_Side_Water_Label: ["구조물터파기 용수", "Structure trench water"], - B08_Quantity_Water_Dry: ["육상(용수 없음)", "Dry"], - B08_Quantity_Water_Wet: ["용수", "Wet"], - B08_Quantity_Water_Unset: ["안 정함(줄이 막힘)", "Not set (row blocked)"], - B08_Quantity_Side_Water_Hint: [ - "⚠ 「육상」은 통상값이고 사용자 확정이 아닙니다(확정 3차 ④) — 품셈 9-13 의 18구분이 이 값으로 갈립니다", - "⚠ “Dry” is a customary default, not a user decision — it selects one of the 18 sub-items", - ], - B08_Quantity_Side_SeedSpray_Label: ["초류종자살포 비탈면 토질", "Seed spray slope soil"], - B08_Quantity_SeedSpray_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], - B08_Quantity_Side_SeedSpray_Hint: [ - "품셈 5-24 씨앗뿜어붙이기가 5-24-1 기계/일반 · 5-24-2 기계/마사토 둘로 갈림 — 제안값 없음, 안 고르면 내역 줄이 입력 사유로 섭니다", - "Pumsem 5-24 splits into general / decomposed-granite soil — no suggestion; unset leaves the bill row with an input reason", - ], - B08_Quantity_Side_RootRemoval_Label: ["제근 굴착기 크기", "Root removal excavator size"], - B08_Quantity_RootRemoval_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], - B08_Quantity_RootRemoval_Suggest: ["제안(비우면 안 정함):", "Suggested (blank = not set):"], - B08_Quantity_RootRemoval_FillSuggested: ["제안값 넣기", "Fill suggested"], - B08_Quantity_Side_StandVolume_Label: ["임목축적 등급", "Stand volume class"], - B08_Quantity_StandVolume_Unset: ["안 정함(줄이 막힘)", "Not set (row blocked)"], - B08_Quantity_StandVolume_Low: ["소림(30~60㎥/㏊)", "Low (30–60 ㎥/ha)"], - B08_Quantity_StandVolume_Mid: ["중림(60~90㎥/㏊)", "Mid (60–90 ㎥/ha)"], - B08_Quantity_StandVolume_High: ["밀림(90㎥/㏊ 이상)", "High (90+ ㎥/ha)"], - B08_Quantity_Side_StandVolume_Hint: [ - "제근(품셈 9-21)이 이 등급으로 갈립니다 — ⚠ 본수가 아니라 축적이고, 산림조사부·영림계획에서 옮겨 적는 값입니다", - "Root removal (9-21) splits by this class — stand volume, not tree count; copied from the forest survey", - ], - B08_Quantity_Side_Chipping: ["임목파쇄", "Wood Chipping"], - B08_Quantity_Chipping_Label: ["임목파쇄를 셀 것인가", "Count wood chipping"], - B08_Quantity_Chipping_Off: ["안 셈(기본)", "No (default)"], - B08_Quantity_Chipping_On: ["셈", "Yes"], - B08_Quantity_Chipping_Volume: ["파쇄 부피(㎥)", "Chipping volume (㎥)"], - B08_Quantity_Side_Chipping_Hint: [ - "기본은 안 셉니다(확정 5차 5번) — 현장에 따라 필요하면 켜세요. ⚠ 켜도 부피를 넣어야 값이 섭니다(실무는 부피로 셈)", - "Off by default — turn on per site. Volume must be entered for the row to carry a quantity", - ], - B08_Quantity_Side_TreeWaste: ["임목폐기물", "Tree Waste"], - B08_Quantity_TreeWaste_Stems: ["표본지 1,000㎡당 본수", "Stems per 1,000 ㎡ (sample plot)"], - B08_Quantity_TreeWaste_Dbh: ["평균 흉고직경(㎝)", "Mean DBH (cm)"], - B08_Quantity_TreeWaste_Height: ["평균 수고(m)", "Mean tree height (m)"], - B08_Quantity_TreeWaste_UnitWeight: ["단위체적중량(㎏/㎥)", "Unit weight (kg/㎥)"], - B08_Quantity_Side_TreeWaste_Hint: [ - "현장 조사값 넷을 넣으면 준비공 「임목폐기물 처리」가 톤으로 섭니다. 산식: 지상부 WA = 0.5 × 3.14 × (흉고직경/2)² × 수고 × (1+0.3) × 단위체적중량 × 본수 · 본수 = 1,000㎡당 본수 × 벌목·지장목제거 면적 — 환경친화적인 도로건설 지침 부록1 · 한국건설기술연구원(2012) 3.2. 단위체적중량 참고: 소나무·침엽수 1,210~1,250 · 단풍·산벚 1,250~1,300 · 느티 1,300~1,340 · 상수리·졸참 1,340 이상(조경설계요람). 기본값 없음 — 수종·임분마다 다름", - "Enter the four field-survey values to raise the tree-waste row in tonnes. WA = 0.5 × 3.14 × (DBH/2)² × height × 1.3 × unit weight × stems (road guideline appendix 1, KICT 2012). No defaults — values differ by species and stand", - ], - B08_Quantity_TreeWaste_RootMethod: ["뿌리부 산정법", "Root estimate"], - B08_Quantity_TreeWaste_RootRatio: [ - "분배비 WA × 15/85 (기본)", - "Share ratio WA × 15/85 (default)", - ], - B08_Quantity_TreeWaste_RootBall: ["뿌리분 체적 × 1,300㎏/㎥", "Root-ball volume × 1,300 kg/㎥"], - B08_Quantity_TreeWaste_RootBallDiameter: [ - "뿌리분 직경 D(m, 흉고직경 아님) — 체적법만", - "Root-ball diameter D (m, not DBH) — volume method", - ], - B08_Quantity_TreeWaste_Root_Hint: [ - "환경친화적인 도로건설 지침 부록1 이 두 방법을 둡니다. 분배비(기본): 뿌리 15 : 지상 85(일반 수목류, 한국건설기술연구원 2012). 뿌리분 체적: V = πD²(D/2 + RH2/3) = 0.3927D³ · 뿌리분 중량 = V × 1,300㎏/㎥ × 본수. ⚠ 지침은 D 를 「뿌리분의 직경(DBH, m)」으로 적어 흉고직경인지 뿌리분 직경인지 갈리지 않음 — 흉고직경으로 두지 않고 따로 받습니다. 참고: 실무 실정보고(한 현장)는 뿌리 14 : 86 · 0.65톤/㎥ 를 씀", - "Road guideline appendix 1 gives two methods: share ratio 15:85 (default), or root-ball volume 0.3927·D³ × 1,300 kg/㎥ × stems. The guideline labels D ambiguously, so it is entered separately", - ], - B08_Quantity_TreeWaste_Price: ["처리단가(원/톤) — 수동", "Disposal price (KRW/t) — manual"], - B08_Quantity_TreeWaste_Price_Hint: [ - "⚠ 공표 단가 없음(한국건설자원협회 중간처리단가 미확보) — 넣으면 금액이 서되 「미확정」으로 셉니다(빨간 테두리). 비목은 경비 — 원가계산서 폐기물처리비 줄로 가고 일반관리비·이윤 밑수에 듭니다(예정가격작성기준 제19조③18호)", - "No published price — a manual price raises the amount as unconfirmed (red outline). Cost category is expense, inside the overhead and profit bases", - ], - B08_Quantity_TreeWaste_Separate: ["분리발주", "Separate disposal contract"], - B08_Quantity_TreeWaste_Separate_Off: ["분리발주 아님(기본)", "No (default)"], - B08_Quantity_TreeWaste_Separate_On: ["분리발주", "Yes"], - B08_Quantity_TreeWaste_Separate_Hint: [ - "⚠ 임목폐기물은 분리발주 대상 아님(환경부 질의회신 — 임목폐기물처리 실정보고 p4 · 건설폐기물 업무처리지침: 건설폐기물 아닌 사업장 일반폐기물) — 기본 꺼짐으로 원가계산서 경비에 듭니다. 이 칸은 다른 건설폐기물(위탁처리 100톤 이상 분리발주 대상)이 생길 때 쓰는 칸 — 켜면 총원가 밖에 서고 총공사비에만 더합니다. 5톤 이상은 배출자 신고 대상(폐기물관리법 시행령 제2조8호)", - "Tree waste is not subject to separate ordering (Ministry of Environment reply; classified as business general waste) — off by default, inside the expense category. Use this switch for other construction waste (100 t or more). When on, it sits outside total cost. 5 t or more requires a discharge report", - ], - B08_Quantity_Side_FaceDressing: ["면고르기", "Face dressing"], - B08_Quantity_FaceDressing_Cut: ["절토면 토질", "Cut face soil"], - B08_Quantity_FaceDressing_Fill: ["성토면 시공·토질", "Fill face method·soil"], - B08_Quantity_FaceDressing_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], - B08_Quantity_FaceDressing_FillArea: ["성토면 면적(㎡)", "Fill face area (㎡)"], - B08_Quantity_FaceDressing_CutArea: ["절토면 면적(㎡)", "Cut face area (㎡)"], - B08_Quantity_FaceDressing_Area_Placeholder: ["파종 면적 그대로", "Same as seeding area"], - B08_Quantity_FaceDressing_Suggest: ["제안(비우면 안 정함):", "Suggested (blank = not set):"], - B08_Quantity_FaceDressing_FillSuggested: ["제안값 넣기", "Fill suggested"], - B08_Quantity_Side_FaceDressing_Hint: [ - "품셈 9-19-1 원문 표 두 벌(절토면 토질 6 · 성토면 시공·토질) — 제안값 없음, 안 고르면 내역 줄이 입력 사유로 섭니다. 면적은 비우면 초류종자살포 면적(× 반영률) 그대로 · 넣으면 그 값으로 덮어씀", - "Standard estimate 9-19-1 tables (cut face soil · fill face method/soil) — no suggested value; unset leaves the bill row with an input reason. Area left blank uses the seeding area (× ratio); a value overrides it", - ], - B08_Quantity_Side_SubgradeCompaction: ["노체다짐", "Subgrade Compaction"], - B08_Quantity_SubgradeCompaction_Label: ["노체다짐을 셀 것인가", "Count subgrade compaction"], - B08_Quantity_Side_SubgradeCompaction_Hint: [ - "기본은 안 셉니다 — 근거: 산림품셈 9-16-2 [주]⑤ 「대규모 성토지로서 층다짐이 필요한 경우 적용한다」. 켜면 토공집계에 「노체다짐」 줄이 성토량(㎥)으로 섭니다. [주]③ 굴착기+진동롤러 조합 중 굴착기는 성토(포설) 줄이 이미 셉니다", - "Off by default — forest standard 9-16-2 note ⑤ applies it only to large fills needing layer compaction. When on, a compaction row equal to the fill volume is added; the excavator of the note ③ pairing is already in the fill (spreading) row", - ], - B08_Quantity_Side_Frame: ["규준틀 개소당 재료", "Batter Board Materials (per unit)"], - B08_Quantity_Side_Frame_Hint: [ - "⚠ 채워진 값은 실무 관측값(제안값)이고 법정 기준이 아닙니다 — 품셈 11-2·11-3 [주]④ 는 「재료량은 설계수량에 따른다」로만 둡니다. 손율은 원문값(비탈 50% · 수평 80%)", - "Pre-filled values are field observations, not a legal standard — the standard only says “per design quantity”", - ], - B08_Quantity_Frame_Square: ["각재 50×50 (㎥/개소)", "Square timber (㎥/ea)"], - B08_Quantity_Frame_Board: ["판재 T12 (㎥/개소)", "Board T12 (㎥/ea)"], - B08_Quantity_Frame_Nail: ["못 (㎏/개소)", "Nails (㎏/ea)"], - B08_Quantity_Side_Ancillary: ["부대시설 개소", "Ancillary Facilities"], - B08_Quantity_Side_Ancillary_Hint: [ - "개소를 넣어야 줄이 섭니다 — 원문이 배치 간격을 정하지 않아 연장÷500 같은 산식을 쓰지 않습니다(확정 13)", - "Counts are design input — the source sets no spacing rule, so no formula is used", - ], - B08_Quantity_Ancillary_national_point_sign: ["국가지점번호판(개소)", "National point signs"], - B08_Quantity_Ancillary_guide_sign: ["임도 안내판(개소)", "Guide signs"], - B08_Quantity_Ancillary_gate: ["차단기(개소)", "Gates"], - B08_Quantity_Ancillary_site_container: ["가설창고(개소)", "Site containers"], - B08_Quantity_Ancillary_flood_supplies: ["수방대책 자재(식)", "Flood supplies (set)"], - B08_Quantity_Side_TopsoilHaul_Label: ["표토 운반거리(m)", "Topsoil haul distance (m)"], - B08_Quantity_Side_TopsoilHaul_Hint: [ - "⚠ 별표2 는 표토를 「전량 제거한 후 최고 홍수위보다 높은 장소로 운반하고 쌓아두어야」로 정합니다 — 거리를 넣으면 운반 줄이 섭니다. 표토제거는 노면 + 절토 사면 ㎡ 로 서고, 두께는 운반 부피(㎡ × 두께)에만 씁니다. 제거 품(9-15-2)에 20m 압토가 들어 있어 운반은 20m 를 넘는 몫만 셉니다", - "The law requires hauling and stockpiling removed topsoil — enter the distance to raise that row. Removal counts road surface + cut slope in ㎡; thickness only sizes the haul volume. The removal rate already includes a 20 m push, so only the excess is hauled", - ], - B08_Quantity_Side_Placing: ["콘크리트 타설", "Concrete Placing"], - B08_Quantity_Side_Placing_Label: ["타설 방식", "Method"], - B08_Quantity_Placing_Unset: ["안 정함(기본값 사용)", "Not set (default)"], - B08_Quantity_Placing_Current: ["적용 중", "In use"], - B08_Quantity_Placing_Default_Tag: ["기본값 — 확인 필요", "default — needs review"], - B08_Quantity_Placing_Hint: ["참고 단가(B09 산출):", "Reference unit price (from B09):"], - B08_Quantity_Placing_Ready: ["레디믹스트", "Ready-mixed"], - B08_Quantity_Placing_Machine: ["기계비빔", "Machine-mixed"], - B08_Quantity_Placing_Hand: ["인력비빔", "Hand-mixed"], - B08_Quantity_Placing_Default_Notice: [ - "⚠ 기본값 「레디믹스트」로 계산 중 — 아직 안 정한 값입니다. 타설 방식에 따라 단가가 갈립니다.", - "⚠ Using the default (ready-mixed) — not yet decided. Unit prices differ by method.", - ], - B08_Quantity_Material_Failed: [ - "자재총괄을 불러오지 못했습니다.", - "Failed to load the material summary.", - ], - B08_Quantity_Haul_Missing: [ - "운반계획이 아직 없습니다. 노선설계에서 [확정]을 누르면 만들어집니다.", - "No haul plan yet. Press [Confirm] on the profile design to build it.", - ], - B08_Quantity_Haul_Excluded: ["내역 제외", "Not billed"], - B08_Quantity_Side_Ratios: ["반영률(%)", "Application ratios (%)"], - /* 반영률 항목 이름 — 서버 키를 사람이 읽는 말로. 거창 실무 시트 문구를 따른다. */ - B08_Quantity_Ratio_FillCompaction: ["성토면다짐", "Fill slope compaction"], - B08_Quantity_Ratio_SeedFill: ["초류종자살포(성토면)", "Seed spray (fill)"], - B08_Quantity_Ratio_SeedCut: ["초류종자살포(절토면)", "Seed spray (cut)"], - B08_Quantity_Ratio_TreeRemoval: ["지장목제거", "Obstacle removal"], - B08_Quantity_Side_RockSet: ["암 갈래 세트", "Rock class set"], - B08_Quantity_Side_RockRatios: [ - "암 갈래 구성비(%) — 암 총량 기준", - "Rock class split (%) of rock volume", - ], - B08_Quantity_Btn_Save: ["저장", "Save"], - B08_Quantity_Save_Success: ["산출 조건을 저장했습니다.", "Calculation settings saved."], - B08_Quantity_Save_Failed: ["산출 조건을 저장하지 못했습니다.", "Failed to save the settings."], - B08_Quantity_Unsaved: ["저장하지 않은 변경이 있습니다.", "You have unsaved changes."], - B08_Quantity_Side_Method: ["산출법", "Method"], - B08_Quantity_Side_Method_Value: ["평균단면적법", "Average end area"], - B08_Quantity_Side_Factors: ["토량환산계수(다짐)", "Conversion factors (compacted)"], - B08_Quantity_Factor_Reach: [ - "이 계수는 유토곡선·운반표·기초단가에도 같이 닿습니다.", - "These factors also feed the mass-haul curve, haul table and basis units.", - ], - B08_Quantity_Factor_Default: ["기본값", "Default"], - B08_Quantity_Side_HaulLimits: ["운반장비 거리 경계", "Haul equipment distance limits"], - B08_Quantity_Side_DozerLimit_Label: ["도쟈 한계거리(m)", "Dozer haul limit (m)"], - B08_Quantity_Side_FreeHaul: ["종무대(바꾸지 않음)", "Free haul (fixed)"], - B08_Quantity_Side_HaulLimits_Reach: [ - "유토곡선 운반 배분(무대·도쟈·덤프)에 닿습니다 — 바꾼 뒤 종횡단에서 다시 저장해야 운반표가 따라옵니다.", - "Feeds the mass-haul split (free/dozer/dump) — re-save the profile/cross sections for the haul table to follow.", - ], - B08_Quantity_Factor_Range: ["품셈 범위", "Standard range"], - B08_Quantity_Factor_OutOfRange: [ - "품셈 범위 밖입니다 — 사유를 적어 주세요(토질시험 값일 수 있습니다).", - "Outside the standard range — please note why (it may be a soil-test value).", - ], - B08_Quantity_Factor_Reason: ["사유", "Reason"], - B08_Quantity_Factor_Pumsem: ["품셈 체적변화율(C)", "Standard volume-change (C)"], - - /* --- B09_Estimation 원가계산 --- */ - B09_Estimation_Title: ["원가계산", "Cost Estimate"], - B09_Estimation_Tab_CostSheet: ["공사원가계산서", "Cost Statement"], - B09_Estimation_Tab_Boq: ["설계내역서", "Bill of Quantities"], - B09_Estimation_Boq_Total: ["내역서 합계", "Bill total"], - B09_Estimation_PB_Empty: [ - "설계내역서를 먼저 불러오면 단가산출서가 섭니다.", - "Load the bill first and the price-basis sheets appear.", - ], - B09_Estimation_PB_Pick: ["왼쪽에서 산출서를 고르세요.", "Pick a sheet on the left."], - B09_Estimation_PB_Ref: ["참조", "Refers to"], - B09_Estimation_Mat_Contractor: ["사급 자재 (도급 재료비)", "Contractor-supplied (in the bill)"], - B09_Estimation_Mat_Owner: [ - "관급 자재 — 총원가 밖 별도 표기", - "Owner-supplied — listed outside the total cost", - ], - B09_Estimation_Mat_Unknown: [ - "관급·사급이 안 갈린 것 — 어느 합계에도 안 넣습니다", - "Supply type undecided — excluded from both totals", - ], - B09_Estimation_Mat_None: [ - "이 프로젝트에는 자재 줄이 없습니다 — 구조물이 없거나 자재가 안 나온 상태입니다.", - "This project has no material rows yet.", - ], - B09_Estimation_Mat_Empty: [ - "설계내역서를 먼저 불러오면 자재대가 섭니다.", - "Load the bill first and the material sheet appears.", - ], - B09_Estimation_Boq_Precision: [ - "수량 표시는 소수 2자리, 계산은 전정밀 — 표시값끼리 곱하면 끝자리가 다릅니다.", - "Quantities are shown to 2 decimals but computed at full precision — multiplying the shown values gives a slightly different last digit.", - ], - B09_Estimation_Boq_Excluded: [ - "검산용 줄 — 수량만 보이고 금액을 매기지 않습니다", - "Check rows — quantity only, never priced", - ], - B09_Estimation_Boq_NotOurs: [ - "여기서 세지 않는 줄 (다른 표에 있거나 이 노선에 없음)", - "Counted elsewhere or not present on this route", - ], - B09_Estimation_Boq_NeedsInput: [ - "입력하면 풀리는 것 (설계 화면에서 값을 고르면 금액이 섭니다)", - "Waiting on input — pick the value on the design screen and the amount appears", - ], - B09_Estimation_Boq_NeedsWork: [ - "우리가 만들어야 하는 것 (원단위·전개식 없음)", - "Needs build — unit data or formula is missing", - ], - B09_Estimation_Boq_Missing: [ - "금액을 못 세운 줄 — 0 으로 안 채웁니다", - "Rows without an amount — shown as-is, not zero-filled", - ], - B09_Estimation_Boq_Materials: ["자재 (별도 벌)", "Materials (separate set)"], - B09_Estimation_Boq_NoMaterialPrice: [ - "사급 자재 단가가 아직 없어 자재비가 빠져 있습니다 — 지금 합계는 모자란 값입니다.", - "Contractor-supplied material prices are missing, so material cost is absent — this total is short.", - ], - B09_Estimation_Boq_Load: ["B08 수량 불러오기", "Load B08 quantities"], - B09_Estimation_Boq_Failed: [ - "B08 인계 자료를 받지 못했습니다.", - "Could not load the B08 handoff.", - ], - B09_Estimation_Tab_UnitPrice: ["일위대가", "Unit Price"], - B09_Estimation_Tab_PriceBasis: ["단가산출근거", "Price Basis"], - B09_Estimation_Tab_Machine: ["중기", "Equipment"], - B09_Estimation_Tab_Duration: ["공사기간", "Duration"], - B09_Estimation_Tab_Supply: ["관급·사급", "Supplied Materials"], - B09_Estimation_Tab_BaseData: ["기초자료", "Base Data"], - B09_Estimation_Tab_DesignDoc: ["설계서 구성", "Design Document Set"], - B09_Estimation_Tab_BasisSheet: ["산출기초", "Calculation Basis"], - B09_Estimation_Group_Condition: ["공사 조건", "Project Conditions"], - B09_Estimation_Group_RateVersion: ["요율 판", "Rate Edition"], - B09_Estimation_Group_Supplied: ["관급자재", "Owner-Supplied"], - B09_Estimation_Group_Profit: ["이윤 조정", "Profit Adjustment"], - B09_Estimation_Field_DirectMaterial: ["직접재료비", "Direct Material"], - B09_Estimation_Field_DirectLabor: ["직접노무비", "Direct Labor"], - B09_Estimation_Field_DirectExpense: ["직접경비", "Direct Expense"], - B09_Estimation_Field_Duration: ["공사기간(일)", "Duration (days)"], - B09_Estimation_Field_WorkType: ["공종", "Work Type"], - B09_Estimation_Field_OwnerMaterial: ["순자재대", "Net Material"], - B09_Estimation_Field_ProcurementFee: ["조달수수료", "Procurement Fee"], - B09_Estimation_Field_ProfitAdjust: ["조정액", "Adjustment"], - B09_Estimation_Field_TargetContract: ["목표 도급공사비", "Target Contract"], - B09_Estimation_Btn_Recalc: ["재계산", "Recalculate"], - B09_Estimation_Btn_Confirm: ["확정", "Confirm"], - B09_Estimation_Col_Item: ["비목", "Item"], - B09_Estimation_Col_Amount: ["금액", "Amount"], - B09_Estimation_Col_Rate: ["요율", "Rate"], - B09_Estimation_Col_Basis: ["산출근거", "Basis"], - B09_Estimation_Col_Note: ["비고", "Note"], - B09_Estimation_Adopted: ["채택", "Adopted"], - B09_Estimation_NotAdopted: ["미채택", "Not adopted"], - B09_Estimation_Suggest_Adjust: [ - "목표 도급공사비를 맞추려면 이윤을 이만큼 깎아야 합니다 — 적용하려면 조정액에 직접 넣으세요.", - "To hit the target contract amount, profit must be reduced by this much — enter it in Adjustment to apply.", - ], - B09_Estimation_Calc_Failed: ["원가계산에 실패했습니다.", "Cost calculation failed."], - B09_Estimation_Confirm_Success: [ - "원가계산 단계를 확정했습니다.", - "Cost estimate stage confirmed.", - ], - B09_Estimation_Confirm_Failed: [ - "원가계산 단계 확정에 실패했습니다.", - "Failed to confirm the cost estimate stage.", - ], - B09_Estimation_Tab_Pending: ["준비 중", "Coming soon"], - B09_Estimation_UP_List: ["일위대가 목록표", "Unit Price Index"], - B09_Estimation_UP_Detail: ["일위대가표", "Unit Price Sheet"], - B09_Estimation_UP_Pick: ["목록에서 항목을 고르세요.", "Pick an item from the index."], - B09_Estimation_UP_Drill: ["펼쳐 보기", "Open"], - B09_Estimation_Col_Name: ["명칭", "Name"], - B09_Estimation_Col_Spec: ["규격", "Spec"], - B09_Estimation_Col_Unit: ["단위", "Unit"], - B09_Estimation_Col_Qty: ["수량", "Qty"], - B09_Estimation_Col_Source: ["원천", "Source"], - B09_Estimation_Col_Material: ["재료비", "Material"], - B09_Estimation_Col_Labor: ["노무비", "Labor"], - B09_Estimation_Col_Expense: ["경비", "Expense"], - B09_Estimation_Col_Total: ["합계", "Total"], - B09_Estimation_UP_SumOk: ["합계 = 재료+노무+경비 일치", "Total = M+L+E ✓"], - B09_Estimation_UP_SumBad: ["⚠ 합계가 재료+노무+경비와 다릅니다", "⚠ Total ≠ M+L+E"], - B09_Estimation_UP_RoundGap: [ - "행별로 0.1원 미만을 버려 합계 끝자리가 다릅니다 (정상). 자르기 전 합계:", - "Rows are floored to 0.1 KRW, so the total's last digit differs (expected). Unrounded total:", - ], - B09_Estimation_Group_Quantity: ["수량", "Quantities"], - B09_Estimation_Field_Quantities: [ - "공종별 수량 (한 줄에 「공종코드=수량」)", - 'Quantities (one "code=qty" per line)', - ], - B09_Estimation_Src_Manual: ["수량 원천: 수기 입력(직접비)", "Source: manual direct costs"], - B09_Estimation_Src_Quantities: [ - "수량 원천: 수기 입력 공종 수량 × 일위대가", - "Source: manual quantities × unit prices", - ], - B09_Estimation_Missing_UP: [ - "수량은 있는데 단가가 없는 공종 — 총액에서 빠졌습니다:", - "Quantities without a unit price — excluded from the total:", - ], - B09_Estimation_UP_Load_Failed: ["일위대가를 못 불러왔습니다.", "Failed to load unit prices."], - - /* --- B10_Payment 결재 --- */ - B10_Payment_Title: ["결재", "Payment"], - B10_Payment_Subtitle: [ - "세금계산서 발행과 계좌 입금 절차를 확인하세요.", - "Review the tax invoice and bank transfer process.", - ], - B10_Payment_Invoice_Title: ["세금계산서 발행 요청", "Tax Invoice Request"], - B10_Payment_Invoice_Description: [ - "사업자 정보와 발행 금액은 견적 확정 후 연결됩니다.", - "Business details and the invoice amount will be linked after the estimate is finalized.", - ], - B10_Payment_Invoice_Request: ["발행 요청", "Request Invoice"], - B10_Payment_Invoice_Status: ["요청 전", "Not Requested"], - B10_Payment_Deposit_Title: ["계좌 입금 안내", "Bank Transfer Guide"], - B10_Payment_Deposit_Account: ["입금 계좌", "Deposit Account"], - B10_Payment_Deposit_Amount: ["입금 금액", "Deposit Amount"], - B10_Payment_Deposit_Pending: ["견적 확정 후 표시", "Shown after estimate confirmation"], - B10_Payment_Deposit_Note: [ - "입금 확인 후 설계문서와 DWG 다운로드가 허용됩니다.", - "Design documents and DWG downloads are enabled after the deposit is confirmed.", - ], - - /* --- B11_Status 상태 출력 --- */ - B11_Status_Title: ["처리 상태", "Status"], - B11_Status_Subtitle: [ - "결재·문서 생성 상태를 확인하고 결과물을 내려받으세요.", - "Check payment and document status, and download results.", - ], - // 자료 준비 화면 (대시보드 → 작업 화면 진입 시 3D·등고선 선적재) - B11_Loading_Title: ["자료 준비 중", "Preparing data"], - B11_Loading_Subtitle: ["잠시만 기다려 주세요.", "This will take a moment."], - B11_Loading_Message: [ - "작업 화면에서 바로 쓸 수 있도록 3D 지표면과 등고선을 준비합니다.", - "Loading the 3D surface and contours so the workspace opens instantly.", - ], - B11_Loading_Start: ["자료를 준비하는 중…", "Preparing data…"], - B11_Loading_NoProject: [ - "프로젝트가 선택되지 않았습니다. 대시보드에서 프로젝트를 먼저 고르세요.", - "No project selected. Choose a project on the dashboard first.", - ], - B11_Loading_Failed: [ - "자료를 준비하지 못했습니다. 분석 결과나 저장 경로에 문제가 있을 수 있습니다. 담당자에게 연락해 주세요.", - "Could not prepare the data. The analysis result or storage path may be broken. Please contact support.", - ], - B11_Loading_NoSurface: [ - "아직 확정된 지표면이 없습니다. 필수 파일을 올리면 지표면 분석이 자동으로 진행되고, 끝나면 이 화면이 자료를 준비합니다.", - "No confirmed surface yet. Upload the required files — the surface analysis runs automatically, and this screen prepares the data once it finishes.", - ], - B11_Loading_Btn_FileInput: ["파일 입력", "File input"], - B11_Loading_Btn_Continue: ["계속", "Continue"], - B11_Loading_Btn_Dashboard: ["대시보드", "Dashboard"], - B11_Status_Flow_Title: ["결재 진행 상태", "Payment Progress"], - B11_Status_Step_Request: ["발행 요청", "Invoice Requested"], - B11_Status_Step_Issue: ["세금계산서 발행", "Invoice Issued"], - B11_Status_Step_Deposit: ["입금 확인", "Deposit Confirmed"], - B11_Status_Step_Complete: ["완료", "Complete"], - B11_Status_NotStarted: ["시작 전", "Not Started"], - B11_Status_Download_Title: ["결과물 다운로드", "Result Downloads"], - B11_Status_Download_Description: [ - "입금 확인이 완료되면 설계문서와 DWG 다운로드가 활성화됩니다.", - "Design document and DWG downloads are enabled after deposit confirmation.", - ], B06_Std_Note_Rock: ["암", "Rock"], B06_Std_Note_Paved: ["포장", "Paved"], B05_Drainage_Btn_Propose: ["자동 제안", "Auto suggest"], diff --git a/ui_template/ui_template_locale_b5.ts b/ui_template/ui_template_locale_b5.ts new file mode 100644 index 000000000..bd4c5f6ed --- /dev/null +++ b/ui_template/ui_template_locale_b5.ts @@ -0,0 +1,449 @@ +/* ============================================================================= + * ui_template_locale_b5.ts + * 다국어 사전 — B 그룹 끝 (B08_Quantity ~ B11_Status) + * + * b2 가 700줄을 넘어 B08~B11 칸을 그대로 뗌. 신규 문구는 해당 섹션 최하단에 추가. + * 이 파일은 사전 데이터만 담는다. 합성·언어 전환·t() 헬퍼는 ui_template_locale.ts 참조. + * ========================================================================== */ + +import type { LocaleEntry } from "./ui_template_locale_common"; + +export const ui_locales_b5 = { + /* --- B08_Quantity 수량 산출 --- */ + B08_Quantity_Title: ["수량산출", "Quantity"], + B08_Quantity_Tab_Earthwork: ["토공", "Earthwork"], + B08_Quantity_Grid_Loading: ["토적표를 만드는 중입니다…", "Building the earthwork table…"], + B08_Quantity_Grid_Empty: [ + "측점 단면적이 아직 없습니다. 횡단 설계를 먼저 마치세요.", + "No cross-section areas yet. Finish the cross-section design first.", + ], + B08_Quantity_Grid_Failed: [ + "토적표를 불러오지 못했습니다.", + "Failed to load the earthwork table.", + ], + B08_Quantity_Tab_Summary: ["토공집계", "Earthwork Summary"], + B08_Quantity_Tab_Haul: ["운반거리", "Haul Distance"], + B08_Quantity_Tab_StructureSummary: ["구조물 집계표", "Structure Summary"], + B08_Quantity_Tab_UnitQuantity: ["구조물 원단위", "Structure Unit Quantity"], + B08_Quantity_Tab_Material: ["자재총괄", "Material Summary"], + B08_Quantity_Tab_Preparation: ["준비공·사방공", "Preparation & Erosion Control"], + B08_Quantity_Side_Method_Label: ["시공법", "Method"], + B08_Quantity_Method_Unset: ["안 정함", "Not set"], + B08_Quantity_Method_Ripping: ["긁어내기(암절취)", "Ripping"], + B08_Quantity_Method_Blasting: ["터뜨리기(발파암)", "Blasting"], + B08_Quantity_Placing_NotApplied: [ + "콘크리트 물량이 「콘크리트 타설」 공종으로 견적에 넘어갑니다.", + "The placing method changes this work item's unit price — concrete volume is handed over as a placing work item.", + ], + B08_Quantity_Side_Topsoil: ["표토제거", "Topsoil Removal"], + B08_Quantity_Side_Topsoil_Label: ["표토 두께(m)", "Topsoil thickness (m)"], + B08_Quantity_Side_TopsoilTarget_Label: ["표토제거 대상", "Topsoil removal target"], + B08_Quantity_TopsoilTarget_RoadAndCut: [ + "노면 + 절토 사면 (기본 · 법 문언)", + "Road surface + cut slope (default · law)", + ], + B08_Quantity_TopsoilTarget_RoadOnly: ["노면만", "Road surface only"], + B08_Quantity_Side_TopsoilTarget_Hint: [ + "기본 근거: 산림자원법 시행규칙 별표2 Ⅰ.2.차.(6) 「노면·절토대상지에 있는 … 표토는 전량 제거한 후 … 운반하고 쌓아두어야 한다」 — 성토 사면은 「제거·정리」라 대상 밖. 노면만: 실무 영월 한 건(1m당 3.34㎡)이 노면만 셈 — 한 건이라 기본으로 삼지 않고 고를 수 있게 둠(면적 약 3배 차이)", + "Default basis: the forest-road rule names road surface and cut areas; fill slopes are only cleared. Road-only follows one field case (Yeongwol, 3.34 ㎡ per m) — selectable, not the default (about 3× area difference)", + ], + B08_Quantity_Unset_Placeholder: ["안 정함", "Not set"], + // ── 확정 3차(2026-09-09) 로 정한 값들 — **화면에 칸으로 세우고 근거를 보인다.** + // 사용자 지시: 「값을 코드에 박고 끝내지 말 것 · 대신 페이지에 남길 것」. + B08_Quantity_Side_Structure: ["구조물·사토", "Structures & Spoil"], + B08_Quantity_Side_BenchCut_Label: ["층따기 길이(m)", "Bench cut length (m)"], + B08_Quantity_Side_BenchCut_Hint: [ + "면적 × 이 값 = ㎥ — 비우면 층따기 줄이 막힙니다(확정 2차 ①)", + "Area × this = ㎥ — blank keeps the bench-cut row blocked", + ], + B08_Quantity_Side_BenchCut_Suggest: [ + "층따기 표준치수 — 최소 높이 토사 500 mm 이상 · 암반 400 mm 이상 · 폭 1 m 이상(기계 작업을 할 때는 3 m 이상). 근거: KDS 44 30 00 도로토공 2.3.4 (4) ② 「기초지반의 종류에 따른 층따기의 표준치수」", + "Bench cut standard dimensions — minimum height: soil ≥ 500 mm · rock ≥ 400 mm · width ≥ 1 m (≥ 3 m for machine work). Basis: KDS 44 30 00 Road Earthwork 2.3.4 (4) ②", + ], + B08_Quantity_Side_Rubble_Label: ["기초잡석 두께(m)", "Rubble base thickness (m)"], + B08_Quantity_Side_Rubble_Hint: [ + "폭은 버림 폭과 같음(KCS 34 50 05) · 두께 0.2m 는 사용자 확정 3차 ② — 품셈 12-25 는 두께를 정하지 않음", + "Width equals the blinding width (KCS 34 50 05); 0.2 m thickness is a user decision — the standard gives none", + ], + B08_Quantity_Side_SpoilDistance_Label: ["사토장까지 거리(m)", "Distance to spoil site (m)"], + B08_Quantity_Side_SpoilDistance_Hint: [ + "사토장을 노선에 놓으면 그 측점까지 거리가 계산되어 이 값은 안 씁니다 — 안 놓았을 때의 대체값입니다", + "Used only until a spoil site is placed on the route — then the distance is computed from that station", + ], + B08_Quantity_Side_Water_Label: ["구조물터파기 용수", "Structure trench water"], + B08_Quantity_Water_Dry: ["육상(용수 없음)", "Dry"], + B08_Quantity_Water_Wet: ["용수", "Wet"], + B08_Quantity_Water_Unset: ["안 정함(줄이 막힘)", "Not set (row blocked)"], + B08_Quantity_Side_Water_Hint: [ + "⚠ 「육상」은 통상값이고 사용자 확정이 아닙니다(확정 3차 ④) — 품셈 9-13 의 18구분이 이 값으로 갈립니다", + "⚠ “Dry” is a customary default, not a user decision — it selects one of the 18 sub-items", + ], + B08_Quantity_Side_SeedSpray_Label: ["초류종자살포 비탈면 토질", "Seed spray slope soil"], + B08_Quantity_SeedSpray_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], + B08_Quantity_Side_SeedSpray_Hint: [ + "품셈 5-24 씨앗뿜어붙이기가 5-24-1 기계/일반 · 5-24-2 기계/마사토 둘로 갈림 — 제안값 없음, 안 고르면 내역 줄이 입력 사유로 섭니다", + "Pumsem 5-24 splits into general / decomposed-granite soil — no suggestion; unset leaves the bill row with an input reason", + ], + B08_Quantity_Side_RootRemoval_Label: ["제근 굴착기 크기", "Root removal excavator size"], + B08_Quantity_RootRemoval_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], + B08_Quantity_RootRemoval_Suggest: ["제안(비우면 안 정함):", "Suggested (blank = not set):"], + B08_Quantity_RootRemoval_FillSuggested: ["제안값 넣기", "Fill suggested"], + B08_Quantity_Side_StandVolume_Label: ["임목축적 등급", "Stand volume class"], + B08_Quantity_StandVolume_Unset: ["안 정함(줄이 막힘)", "Not set (row blocked)"], + B08_Quantity_StandVolume_Low: ["소림(30~60㎥/㏊)", "Low (30–60 ㎥/ha)"], + B08_Quantity_StandVolume_Mid: ["중림(60~90㎥/㏊)", "Mid (60–90 ㎥/ha)"], + B08_Quantity_StandVolume_High: ["밀림(90㎥/㏊ 이상)", "High (90+ ㎥/ha)"], + B08_Quantity_Side_StandVolume_Hint: [ + "제근(품셈 9-21)이 이 등급으로 갈립니다 — ⚠ 본수가 아니라 축적이고, 산림조사부·영림계획에서 옮겨 적는 값입니다", + "Root removal (9-21) splits by this class — stand volume, not tree count; copied from the forest survey", + ], + B08_Quantity_Side_Chipping: ["임목파쇄", "Wood Chipping"], + B08_Quantity_Chipping_Label: ["임목파쇄를 셀 것인가", "Count wood chipping"], + B08_Quantity_Chipping_Off: ["안 셈(기본)", "No (default)"], + B08_Quantity_Chipping_On: ["셈", "Yes"], + B08_Quantity_Chipping_Volume: ["파쇄 부피(㎥)", "Chipping volume (㎥)"], + B08_Quantity_Side_Chipping_Hint: [ + "기본은 안 셉니다(확정 5차 5번) — 현장에 따라 필요하면 켜세요. ⚠ 켜도 부피를 넣어야 값이 섭니다(실무는 부피로 셈)", + "Off by default — turn on per site. Volume must be entered for the row to carry a quantity", + ], + B08_Quantity_Side_TreeWaste: ["임목폐기물", "Tree Waste"], + B08_Quantity_TreeWaste_Stems: ["표본지 1,000㎡당 본수", "Stems per 1,000 ㎡ (sample plot)"], + B08_Quantity_TreeWaste_Dbh: ["평균 흉고직경(㎝)", "Mean DBH (cm)"], + B08_Quantity_TreeWaste_Height: ["평균 수고(m)", "Mean tree height (m)"], + B08_Quantity_TreeWaste_UnitWeight: ["단위체적중량(㎏/㎥)", "Unit weight (kg/㎥)"], + B08_Quantity_Side_TreeWaste_Hint: [ + "현장 조사값 넷을 넣으면 준비공 「임목폐기물 처리」가 톤으로 섭니다. 산식: 지상부 WA = 0.5 × 3.14 × (흉고직경/2)² × 수고 × (1+0.3) × 단위체적중량 × 본수 · 본수 = 1,000㎡당 본수 × 벌목·지장목제거 면적 — 환경친화적인 도로건설 지침 부록1 · 한국건설기술연구원(2012) 3.2. 단위체적중량 참고: 소나무·침엽수 1,210~1,250 · 단풍·산벚 1,250~1,300 · 느티 1,300~1,340 · 상수리·졸참 1,340 이상(조경설계요람). 기본값 없음 — 수종·임분마다 다름", + "Enter the four field-survey values to raise the tree-waste row in tonnes. WA = 0.5 × 3.14 × (DBH/2)² × height × 1.3 × unit weight × stems (road guideline appendix 1, KICT 2012). No defaults — values differ by species and stand", + ], + B08_Quantity_TreeWaste_RootMethod: ["뿌리부 산정법", "Root estimate"], + B08_Quantity_TreeWaste_RootRatio: [ + "분배비 WA × 15/85 (기본)", + "Share ratio WA × 15/85 (default)", + ], + B08_Quantity_TreeWaste_RootBall: ["뿌리분 체적 × 1,300㎏/㎥", "Root-ball volume × 1,300 kg/㎥"], + B08_Quantity_TreeWaste_RootBallDiameter: [ + "뿌리분 직경 D(m, 흉고직경 아님) — 체적법만", + "Root-ball diameter D (m, not DBH) — volume method", + ], + B08_Quantity_TreeWaste_Root_Hint: [ + "환경친화적인 도로건설 지침 부록1 이 두 방법을 둡니다. 분배비(기본): 뿌리 15 : 지상 85(일반 수목류, 한국건설기술연구원 2012). 뿌리분 체적: V = πD²(D/2 + RH2/3) = 0.3927D³ · 뿌리분 중량 = V × 1,300㎏/㎥ × 본수. ⚠ 지침은 D 를 「뿌리분의 직경(DBH, m)」으로 적어 흉고직경인지 뿌리분 직경인지 갈리지 않음 — 흉고직경으로 두지 않고 따로 받습니다. 참고: 실무 실정보고(한 현장)는 뿌리 14 : 86 · 0.65톤/㎥ 를 씀", + "Road guideline appendix 1 gives two methods: share ratio 15:85 (default), or root-ball volume 0.3927·D³ × 1,300 kg/㎥ × stems. The guideline labels D ambiguously, so it is entered separately", + ], + B08_Quantity_TreeWaste_Price: ["처리단가(원/톤) — 수동", "Disposal price (KRW/t) — manual"], + B08_Quantity_TreeWaste_Price_Hint: [ + "⚠ 공표 단가 없음(한국건설자원협회 중간처리단가 미확보) — 넣으면 금액이 서되 「미확정」으로 셉니다(빨간 테두리). 비목은 경비 — 원가계산서 폐기물처리비 줄로 가고 일반관리비·이윤 밑수에 듭니다(예정가격작성기준 제19조③18호)", + "No published price — a manual price raises the amount as unconfirmed (red outline). Cost category is expense, inside the overhead and profit bases", + ], + B08_Quantity_TreeWaste_Separate: ["분리발주", "Separate disposal contract"], + B08_Quantity_TreeWaste_Separate_Off: ["분리발주 아님(기본)", "No (default)"], + B08_Quantity_TreeWaste_Separate_On: ["분리발주", "Yes"], + B08_Quantity_TreeWaste_Separate_Hint: [ + "⚠ 임목폐기물은 분리발주 대상 아님(환경부 질의회신 — 임목폐기물처리 실정보고 p4 · 건설폐기물 업무처리지침: 건설폐기물 아닌 사업장 일반폐기물) — 기본 꺼짐으로 원가계산서 경비에 듭니다. 이 칸은 다른 건설폐기물(위탁처리 100톤 이상 분리발주 대상)이 생길 때 쓰는 칸 — 켜면 총원가 밖에 서고 총공사비에만 더합니다. 5톤 이상은 배출자 신고 대상(폐기물관리법 시행령 제2조8호)", + "Tree waste is not subject to separate ordering (Ministry of Environment reply; classified as business general waste) — off by default, inside the expense category. Use this switch for other construction waste (100 t or more). When on, it sits outside total cost. 5 t or more requires a discharge report", + ], + B08_Quantity_Side_FaceDressing: ["면고르기", "Face dressing"], + B08_Quantity_FaceDressing_Cut: ["절토면 토질", "Cut face soil"], + B08_Quantity_FaceDressing_Fill: ["성토면 시공·토질", "Fill face method·soil"], + B08_Quantity_FaceDressing_Unset: ["안 정함(금액 안 섬)", "Not set (no amount)"], + B08_Quantity_FaceDressing_FillArea: ["성토면 면적(㎡)", "Fill face area (㎡)"], + B08_Quantity_FaceDressing_CutArea: ["절토면 면적(㎡)", "Cut face area (㎡)"], + B08_Quantity_FaceDressing_Area_Placeholder: ["파종 면적 그대로", "Same as seeding area"], + B08_Quantity_FaceDressing_Suggest: ["제안(비우면 안 정함):", "Suggested (blank = not set):"], + B08_Quantity_FaceDressing_FillSuggested: ["제안값 넣기", "Fill suggested"], + B08_Quantity_Side_FaceDressing_Hint: [ + "품셈 9-19-1 원문 표 두 벌(절토면 토질 6 · 성토면 시공·토질) — 제안값 없음, 안 고르면 내역 줄이 입력 사유로 섭니다. 면적은 비우면 초류종자살포 면적(× 반영률) 그대로 · 넣으면 그 값으로 덮어씀", + "Standard estimate 9-19-1 tables (cut face soil · fill face method/soil) — no suggested value; unset leaves the bill row with an input reason. Area left blank uses the seeding area (× ratio); a value overrides it", + ], + B08_Quantity_Side_SubgradeCompaction: ["노체다짐", "Subgrade Compaction"], + B08_Quantity_SubgradeCompaction_Label: ["노체다짐을 셀 것인가", "Count subgrade compaction"], + B08_Quantity_Side_SubgradeCompaction_Hint: [ + "기본은 안 셉니다 — 근거: 산림품셈 9-16-2 [주]⑤ 「대규모 성토지로서 층다짐이 필요한 경우 적용한다」. 켜면 토공집계에 「노체다짐」 줄이 성토량(㎥)으로 섭니다. [주]③ 굴착기+진동롤러 조합 중 굴착기는 성토(포설) 줄이 이미 셉니다", + "Off by default — forest standard 9-16-2 note ⑤ applies it only to large fills needing layer compaction. When on, a compaction row equal to the fill volume is added; the excavator of the note ③ pairing is already in the fill (spreading) row", + ], + B08_Quantity_Side_Frame: ["규준틀 개소당 재료", "Batter Board Materials (per unit)"], + B08_Quantity_Side_Frame_Hint: [ + "⚠ 채워진 값은 실무 관측값(제안값)이고 법정 기준이 아닙니다 — 품셈 11-2·11-3 [주]④ 는 「재료량은 설계수량에 따른다」로만 둡니다. 손율은 원문값(비탈 50% · 수평 80%)", + "Pre-filled values are field observations, not a legal standard — the standard only says “per design quantity”", + ], + B08_Quantity_Frame_Square: ["각재 50×50 (㎥/개소)", "Square timber (㎥/ea)"], + B08_Quantity_Frame_Board: ["판재 T12 (㎥/개소)", "Board T12 (㎥/ea)"], + B08_Quantity_Frame_Nail: ["못 (㎏/개소)", "Nails (㎏/ea)"], + B08_Quantity_Side_Ancillary: ["부대시설 개소", "Ancillary Facilities"], + B08_Quantity_Side_Ancillary_Hint: [ + "개소를 넣어야 줄이 섭니다 — 원문이 배치 간격을 정하지 않아 연장÷500 같은 산식을 쓰지 않습니다(확정 13)", + "Counts are design input — the source sets no spacing rule, so no formula is used", + ], + B08_Quantity_Ancillary_national_point_sign: ["국가지점번호판(개소)", "National point signs"], + B08_Quantity_Ancillary_guide_sign: ["임도 안내판(개소)", "Guide signs"], + B08_Quantity_Ancillary_gate: ["차단기(개소)", "Gates"], + B08_Quantity_Ancillary_site_container: ["가설창고(개소)", "Site containers"], + B08_Quantity_Ancillary_flood_supplies: ["수방대책 자재(식)", "Flood supplies (set)"], + B08_Quantity_Side_TopsoilHaul_Label: ["표토 운반거리(m)", "Topsoil haul distance (m)"], + B08_Quantity_Side_TopsoilHaul_Hint: [ + "⚠ 별표2 는 표토를 「전량 제거한 후 최고 홍수위보다 높은 장소로 운반하고 쌓아두어야」로 정합니다 — 거리를 넣으면 운반 줄이 섭니다. 표토제거는 노면 + 절토 사면 ㎡ 로 서고, 두께는 운반 부피(㎡ × 두께)에만 씁니다. 제거 품(9-15-2)에 20m 압토가 들어 있어 운반은 20m 를 넘는 몫만 셉니다", + "The law requires hauling and stockpiling removed topsoil — enter the distance to raise that row. Removal counts road surface + cut slope in ㎡; thickness only sizes the haul volume. The removal rate already includes a 20 m push, so only the excess is hauled", + ], + B08_Quantity_Side_Placing: ["콘크리트 타설", "Concrete Placing"], + B08_Quantity_Side_Placing_Label: ["타설 방식", "Method"], + B08_Quantity_Placing_Unset: ["안 정함(기본값 사용)", "Not set (default)"], + B08_Quantity_Placing_Current: ["적용 중", "In use"], + B08_Quantity_Placing_Default_Tag: ["기본값 — 확인 필요", "default — needs review"], + B08_Quantity_Placing_Hint: ["참고 단가(B09 산출):", "Reference unit price (from B09):"], + B08_Quantity_Placing_Ready: ["레디믹스트", "Ready-mixed"], + B08_Quantity_Placing_Machine: ["기계비빔", "Machine-mixed"], + B08_Quantity_Placing_Hand: ["인력비빔", "Hand-mixed"], + B08_Quantity_Placing_Default_Notice: [ + "⚠ 기본값 「레디믹스트」로 계산 중 — 아직 안 정한 값입니다. 타설 방식에 따라 단가가 갈립니다.", + "⚠ Using the default (ready-mixed) — not yet decided. Unit prices differ by method.", + ], + B08_Quantity_Material_Failed: [ + "자재총괄을 불러오지 못했습니다.", + "Failed to load the material summary.", + ], + B08_Quantity_Haul_Missing: [ + "운반계획이 아직 없습니다. 노선설계에서 [확정]을 누르면 만들어집니다.", + "No haul plan yet. Press [Confirm] on the profile design to build it.", + ], + B08_Quantity_Haul_Excluded: ["내역 제외", "Not billed"], + B08_Quantity_Side_Ratios: ["반영률(%)", "Application ratios (%)"], + /* 반영률 항목 이름 — 서버 키를 사람이 읽는 말로. 거창 실무 시트 문구를 따른다. */ + B08_Quantity_Ratio_FillCompaction: ["성토면다짐", "Fill slope compaction"], + B08_Quantity_Ratio_SeedFill: ["초류종자살포(성토면)", "Seed spray (fill)"], + B08_Quantity_Ratio_SeedCut: ["초류종자살포(절토면)", "Seed spray (cut)"], + B08_Quantity_Ratio_TreeRemoval: ["지장목제거", "Obstacle removal"], + B08_Quantity_Side_RockSet: ["암 갈래 세트", "Rock class set"], + B08_Quantity_Side_RockRatios: [ + "암 갈래 구성비(%) — 암 총량 기준", + "Rock class split (%) of rock volume", + ], + B08_Quantity_Btn_Save: ["저장", "Save"], + B08_Quantity_Save_Success: ["산출 조건을 저장했습니다.", "Calculation settings saved."], + B08_Quantity_Save_Failed: ["산출 조건을 저장하지 못했습니다.", "Failed to save the settings."], + B08_Quantity_Unsaved: ["저장하지 않은 변경이 있습니다.", "You have unsaved changes."], + B08_Quantity_Side_Method: ["산출법", "Method"], + B08_Quantity_Side_Method_Value: ["평균단면적법", "Average end area"], + B08_Quantity_Side_Factors: ["토량환산계수(다짐)", "Conversion factors (compacted)"], + B08_Quantity_Factor_Reach: [ + "이 계수는 유토곡선·운반표·기초단가에도 같이 닿습니다.", + "These factors also feed the mass-haul curve, haul table and basis units.", + ], + B08_Quantity_Factor_Default: ["기본값", "Default"], + B08_Quantity_Side_HaulLimits: ["운반장비 거리 경계", "Haul equipment distance limits"], + B08_Quantity_Side_DozerLimit_Label: ["도쟈 한계거리(m)", "Dozer haul limit (m)"], + B08_Quantity_Side_FreeHaul: ["종무대(바꾸지 않음)", "Free haul (fixed)"], + B08_Quantity_Side_HaulLimits_Reach: [ + "유토곡선 운반 배분(무대·도쟈·덤프)에 닿습니다 — 바꾼 뒤 종횡단에서 다시 저장해야 운반표가 따라옵니다.", + "Feeds the mass-haul split (free/dozer/dump) — re-save the profile/cross sections for the haul table to follow.", + ], + B08_Quantity_Factor_Range: ["품셈 범위", "Standard range"], + B08_Quantity_Factor_OutOfRange: [ + "품셈 범위 밖입니다 — 사유를 적어 주세요(토질시험 값일 수 있습니다).", + "Outside the standard range — please note why (it may be a soil-test value).", + ], + B08_Quantity_Factor_Reason: ["사유", "Reason"], + B08_Quantity_Factor_Pumsem: ["품셈 체적변화율(C)", "Standard volume-change (C)"], + + /* --- B09_Estimation 원가계산 --- */ + B09_Estimation_Title: ["원가계산", "Cost Estimate"], + B09_Estimation_Tab_CostSheet: ["공사원가계산서", "Cost Statement"], + B09_Estimation_Tab_Boq: ["설계내역서", "Bill of Quantities"], + B09_Estimation_Boq_Total: ["내역서 합계", "Bill total"], + B09_Estimation_PB_Empty: [ + "설계내역서를 먼저 불러오면 단가산출서가 섭니다.", + "Load the bill first and the price-basis sheets appear.", + ], + B09_Estimation_PB_Pick: ["왼쪽에서 산출서를 고르세요.", "Pick a sheet on the left."], + B09_Estimation_PB_Ref: ["참조", "Refers to"], + B09_Estimation_Mat_Contractor: ["사급 자재 (도급 재료비)", "Contractor-supplied (in the bill)"], + B09_Estimation_Mat_Owner: [ + "관급 자재 — 총원가 밖 별도 표기", + "Owner-supplied — listed outside the total cost", + ], + B09_Estimation_Mat_Unknown: [ + "관급·사급이 안 갈린 것 — 어느 합계에도 안 넣습니다", + "Supply type undecided — excluded from both totals", + ], + B09_Estimation_Mat_None: [ + "이 프로젝트에는 자재 줄이 없습니다 — 구조물이 없거나 자재가 안 나온 상태입니다.", + "This project has no material rows yet.", + ], + B09_Estimation_Mat_Empty: [ + "설계내역서를 먼저 불러오면 자재대가 섭니다.", + "Load the bill first and the material sheet appears.", + ], + B09_Estimation_Boq_Precision: [ + "수량 표시는 소수 2자리, 계산은 전정밀 — 표시값끼리 곱하면 끝자리가 다릅니다.", + "Quantities are shown to 2 decimals but computed at full precision — multiplying the shown values gives a slightly different last digit.", + ], + B09_Estimation_Boq_Excluded: [ + "검산용 줄 — 수량만 보이고 금액을 매기지 않습니다", + "Check rows — quantity only, never priced", + ], + B09_Estimation_Boq_NotOurs: [ + "여기서 세지 않는 줄 (다른 표에 있거나 이 노선에 없음)", + "Counted elsewhere or not present on this route", + ], + B09_Estimation_Boq_NeedsInput: [ + "입력하면 풀리는 것 (설계 화면에서 값을 고르면 금액이 섭니다)", + "Waiting on input — pick the value on the design screen and the amount appears", + ], + B09_Estimation_Boq_NeedsWork: [ + "우리가 만들어야 하는 것 (원단위·전개식 없음)", + "Needs build — unit data or formula is missing", + ], + B09_Estimation_Boq_Missing: [ + "금액을 못 세운 줄 — 0 으로 안 채웁니다", + "Rows without an amount — shown as-is, not zero-filled", + ], + B09_Estimation_Boq_Materials: ["자재 (별도 벌)", "Materials (separate set)"], + B09_Estimation_Boq_NoMaterialPrice: [ + "사급 자재 단가가 아직 없어 자재비가 빠져 있습니다 — 지금 합계는 모자란 값입니다.", + "Contractor-supplied material prices are missing, so material cost is absent — this total is short.", + ], + B09_Estimation_Boq_Load: ["B08 수량 불러오기", "Load B08 quantities"], + B09_Estimation_Boq_Failed: [ + "B08 인계 자료를 받지 못했습니다.", + "Could not load the B08 handoff.", + ], + B09_Estimation_Tab_UnitPrice: ["일위대가", "Unit Price"], + B09_Estimation_Tab_PriceBasis: ["단가산출근거", "Price Basis"], + B09_Estimation_Tab_Machine: ["중기", "Equipment"], + B09_Estimation_Tab_Duration: ["공사기간", "Duration"], + B09_Estimation_Tab_Supply: ["관급·사급", "Supplied Materials"], + B09_Estimation_Tab_BaseData: ["기초자료", "Base Data"], + B09_Estimation_Tab_DesignDoc: ["설계서 구성", "Design Document Set"], + B09_Estimation_Tab_BasisSheet: ["산출기초", "Calculation Basis"], + B09_Estimation_Group_Condition: ["공사 조건", "Project Conditions"], + B09_Estimation_Group_RateVersion: ["요율 판", "Rate Edition"], + B09_Estimation_Group_Supplied: ["관급자재", "Owner-Supplied"], + B09_Estimation_Group_Profit: ["이윤 조정", "Profit Adjustment"], + B09_Estimation_Field_DirectMaterial: ["직접재료비", "Direct Material"], + B09_Estimation_Field_DirectLabor: ["직접노무비", "Direct Labor"], + B09_Estimation_Field_DirectExpense: ["직접경비", "Direct Expense"], + B09_Estimation_Field_Duration: ["공사기간(일)", "Duration (days)"], + B09_Estimation_Field_WorkType: ["공종", "Work Type"], + B09_Estimation_Field_OwnerMaterial: ["순자재대", "Net Material"], + B09_Estimation_Field_ProcurementFee: ["조달수수료", "Procurement Fee"], + B09_Estimation_Field_ProfitAdjust: ["조정액", "Adjustment"], + B09_Estimation_Field_TargetContract: ["목표 도급공사비", "Target Contract"], + B09_Estimation_Btn_Recalc: ["재계산", "Recalculate"], + B09_Estimation_Btn_Confirm: ["확정", "Confirm"], + B09_Estimation_Col_Item: ["비목", "Item"], + B09_Estimation_Col_Amount: ["금액", "Amount"], + B09_Estimation_Col_Rate: ["요율", "Rate"], + B09_Estimation_Col_Basis: ["산출근거", "Basis"], + B09_Estimation_Col_Note: ["비고", "Note"], + B09_Estimation_Adopted: ["채택", "Adopted"], + B09_Estimation_NotAdopted: ["미채택", "Not adopted"], + B09_Estimation_Suggest_Adjust: [ + "목표 도급공사비를 맞추려면 이윤을 이만큼 깎아야 합니다 — 적용하려면 조정액에 직접 넣으세요.", + "To hit the target contract amount, profit must be reduced by this much — enter it in Adjustment to apply.", + ], + B09_Estimation_Calc_Failed: ["원가계산에 실패했습니다.", "Cost calculation failed."], + B09_Estimation_Confirm_Success: [ + "원가계산 단계를 확정했습니다.", + "Cost estimate stage confirmed.", + ], + B09_Estimation_Confirm_Failed: [ + "원가계산 단계 확정에 실패했습니다.", + "Failed to confirm the cost estimate stage.", + ], + B09_Estimation_Tab_Pending: ["준비 중", "Coming soon"], + B09_Estimation_UP_List: ["일위대가 목록표", "Unit Price Index"], + B09_Estimation_UP_Detail: ["일위대가표", "Unit Price Sheet"], + B09_Estimation_UP_Pick: ["목록에서 항목을 고르세요.", "Pick an item from the index."], + B09_Estimation_UP_Drill: ["펼쳐 보기", "Open"], + B09_Estimation_Col_Name: ["명칭", "Name"], + B09_Estimation_Col_Spec: ["규격", "Spec"], + B09_Estimation_Col_Unit: ["단위", "Unit"], + B09_Estimation_Col_Qty: ["수량", "Qty"], + B09_Estimation_Col_Source: ["원천", "Source"], + B09_Estimation_Col_Material: ["재료비", "Material"], + B09_Estimation_Col_Labor: ["노무비", "Labor"], + B09_Estimation_Col_Expense: ["경비", "Expense"], + B09_Estimation_Col_Total: ["합계", "Total"], + B09_Estimation_UP_SumOk: ["합계 = 재료+노무+경비 일치", "Total = M+L+E ✓"], + B09_Estimation_UP_SumBad: ["⚠ 합계가 재료+노무+경비와 다릅니다", "⚠ Total ≠ M+L+E"], + B09_Estimation_UP_RoundGap: [ + "행별로 0.1원 미만을 버려 합계 끝자리가 다릅니다 (정상). 자르기 전 합계:", + "Rows are floored to 0.1 KRW, so the total's last digit differs (expected). Unrounded total:", + ], + B09_Estimation_Group_Quantity: ["수량", "Quantities"], + B09_Estimation_Field_Quantities: [ + "공종별 수량 (한 줄에 「공종코드=수량」)", + 'Quantities (one "code=qty" per line)', + ], + B09_Estimation_Src_Manual: ["수량 원천: 수기 입력(직접비)", "Source: manual direct costs"], + B09_Estimation_Src_Quantities: [ + "수량 원천: 수기 입력 공종 수량 × 일위대가", + "Source: manual quantities × unit prices", + ], + B09_Estimation_Missing_UP: [ + "수량은 있는데 단가가 없는 공종 — 총액에서 빠졌습니다:", + "Quantities without a unit price — excluded from the total:", + ], + B09_Estimation_UP_Load_Failed: ["일위대가를 못 불러왔습니다.", "Failed to load unit prices."], + + /* --- B10_Payment 결재 --- */ + B10_Payment_Title: ["결재", "Payment"], + B10_Payment_Subtitle: [ + "세금계산서 발행과 계좌 입금 절차를 확인하세요.", + "Review the tax invoice and bank transfer process.", + ], + B10_Payment_Invoice_Title: ["세금계산서 발행 요청", "Tax Invoice Request"], + B10_Payment_Invoice_Description: [ + "사업자 정보와 발행 금액은 견적 확정 후 연결됩니다.", + "Business details and the invoice amount will be linked after the estimate is finalized.", + ], + B10_Payment_Invoice_Request: ["발행 요청", "Request Invoice"], + B10_Payment_Invoice_Status: ["요청 전", "Not Requested"], + B10_Payment_Deposit_Title: ["계좌 입금 안내", "Bank Transfer Guide"], + B10_Payment_Deposit_Account: ["입금 계좌", "Deposit Account"], + B10_Payment_Deposit_Amount: ["입금 금액", "Deposit Amount"], + B10_Payment_Deposit_Pending: ["견적 확정 후 표시", "Shown after estimate confirmation"], + B10_Payment_Deposit_Note: [ + "입금 확인 후 설계문서와 DWG 다운로드가 허용됩니다.", + "Design documents and DWG downloads are enabled after the deposit is confirmed.", + ], + + /* --- B11_Status 상태 출력 --- */ + B11_Status_Title: ["처리 상태", "Status"], + B11_Status_Subtitle: [ + "결재·문서 생성 상태를 확인하고 결과물을 내려받으세요.", + "Check payment and document status, and download results.", + ], + // 자료 준비 화면 (대시보드 → 작업 화면 진입 시 3D·등고선 선적재) + B11_Loading_Title: ["자료 준비 중", "Preparing data"], + B11_Loading_Subtitle: ["잠시만 기다려 주세요.", "This will take a moment."], + B11_Loading_Message: [ + "작업 화면에서 바로 쓸 수 있도록 3D 지표면과 등고선을 준비합니다.", + "Loading the 3D surface and contours so the workspace opens instantly.", + ], + B11_Loading_Start: ["자료를 준비하는 중…", "Preparing data…"], + B11_Loading_NoProject: [ + "프로젝트가 선택되지 않았습니다. 대시보드에서 프로젝트를 먼저 고르세요.", + "No project selected. Choose a project on the dashboard first.", + ], + B11_Loading_Failed: [ + "자료를 준비하지 못했습니다. 분석 결과나 저장 경로에 문제가 있을 수 있습니다. 담당자에게 연락해 주세요.", + "Could not prepare the data. The analysis result or storage path may be broken. Please contact support.", + ], + B11_Loading_NoSurface: [ + "아직 확정된 지표면이 없습니다. 필수 파일을 올리면 지표면 분석이 자동으로 진행되고, 끝나면 이 화면이 자료를 준비합니다.", + "No confirmed surface yet. Upload the required files — the surface analysis runs automatically, and this screen prepares the data once it finishes.", + ], + B11_Loading_Btn_FileInput: ["파일 입력", "File input"], + B11_Loading_Btn_Continue: ["계속", "Continue"], + B11_Loading_Btn_Dashboard: ["대시보드", "Dashboard"], + B11_Status_Flow_Title: ["결재 진행 상태", "Payment Progress"], + B11_Status_Step_Request: ["발행 요청", "Invoice Requested"], + B11_Status_Step_Issue: ["세금계산서 발행", "Invoice Issued"], + B11_Status_Step_Deposit: ["입금 확인", "Deposit Confirmed"], + B11_Status_Step_Complete: ["완료", "Complete"], + B11_Status_NotStarted: ["시작 전", "Not Started"], + B11_Status_Download_Title: ["결과물 다운로드", "Result Downloads"], + B11_Status_Download_Description: [ + "입금 확인이 완료되면 설계문서와 DWG 다운로드가 활성화됩니다.", + "Design document and DWG downloads are enabled after deposit confirmation.", + ], +} as const satisfies Record;