Files
Aislo/ui_template/ui_template_locale_a.ts
T
eomsangdonandClaude Fable 5 ec9943417c feat(B07,B09): B07_Quantity 셸 페이지 신설 + B09_Estimation 접두사 정리 + 단계 순서 반영
- B09_wf6_Estimation -> B09_Estimation (폴더·파일·라우트 키/슬러그)
- B07_Quantity_UI_Page.ts 신설: 워크플로우 셸 + 좌측 [확정] 버튼
  (renderPendingWorkflow에 leftPanel 옵션 추가로 공용 셸 재사용)
- B07_Quantity_Router.py 신설: POST /api/projects/{id}/quantity/confirm
  -> complete_stage(4) 전이만 수행(본문 미구현), main.py 등록
- STAGE_KEYS 재정의: FILE_INPUT/PREPROCESS/PROFILE/SECTION/QUANTITY/DESIGN_DETAIL/ESTIMATION
- 스텝바 라벨·아이콘 4↔5 스왑(수량산출이 4차, 상세설계가 5차), A02 소개 문구 스왑
- 라우터 테이블에 b07-quantity 등록(플레이스홀더 제거), locale 키 5종 추가

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 10:15:07 +09:00

278 lines
16 KiB
TypeScript

/* =============================================================================
* ui_template_locale_a.ts
* 다국어 사전 — A 그룹 (로그인 전 페이지 A01~A09)
*
* 이 파일은 사전 데이터만 담는다. 합성·언어 전환·t() 헬퍼는 ui_template_locale.ts 참조.
* ========================================================================== */
import type { LocaleEntry } from "./ui_template_locale_common";
export const ui_locales_a = {
/* ---------------------------------------------------------------------------
* 페이지 타이틀 (신규 문구는 아래에 계속 추가)
* ------------------------------------------------------------------------ */
A01_Home_Title: ["임도 설계 및 견적 자동화", "Forest Road Design & Estimation"],
A06_Login_Title: ["로그인", "Login"],
A07_Register_Title: ["회원가입", "Sign up"],
/* --- A01_Home 상세 --- */
/* 단계를 늘어놓는 문구는 진행단계 이름(WF_Step_*)과 같은 말을 쓴다(2026-08-01 사용자 지시). */
A01_Home_Hero_Subtitle: [
"LAS 지형 데이터부터 종단설계·횡단설계, 수량산출, 설계도서까지 한 번에.",
"From LAS terrain data to profile and cross design, quantities, and design documents — all in one.",
],
A01_Home_Hero_CtaPrimary: ["지금 시작하기", "Get Started"],
A01_Home_Hero_CtaSecondary: ["프로그램 살펴보기", "Explore Features"],
A01_Home_News_SectionTitle: ["최신 소식", "Latest News"],
A01_Home_News_Tag: ["공지", "Notice"],
A01_Home_Features_SectionTitle: ["주요 기능", "Key Features"],
A01_Home_Feature1_Title: ["3D 지형 분석", "3D Terrain Analysis"],
A01_Home_Feature1_Desc: [
"LAS 포인트클라우드를 브라우저에서 3D 메쉬로 시각화합니다.",
"Visualize LAS point clouds as 3D meshes in the browser.",
],
A01_Home_Feature2_Title: ["최적 경로 설계", "Optimal Route Design"],
A01_Home_Feature2_Desc: [
"경사도와 제약조건을 반영한 최적 임도 경로를 계산합니다.",
"Compute optimal forest road routes with slope and constraints.",
],
A01_Home_Feature3_Title: ["견적 자동화", "Automated Estimation"],
A01_Home_Feature3_Desc: [
"수량 산출과 견적서를 Excel / PDF로 자동 생성합니다.",
"Auto-generate quantity takeoffs and estimates as Excel / PDF.",
],
/* --- A02_ProgDetail 프로그램 상세 --- */
A02_ProgDetail_Title: ["프로그램 상세 안내", "Program Overview"],
A02_ProgDetail_Hero_Subtitle: [
"LAS 스캔 데이터 한 벌로 임도 설계 전 과정을 자동화하는 6단계 워크플로우.",
"A 6-stage workflow that automates the entire forest road design process from a single LAS scan.",
],
A02_ProgDetail_Hero_Cta: ["무료로 시작하기", "Start for Free"],
A02_ProgDetail_Workflow_SectionTitle: ["6단계 설계 워크플로우", "6-Stage Design Workflow"],
/* 단계 이름은 진행단계 오버레이(WF_Step_*)와 같은 말을 쓴다 — 소개 페이지와 실제 화면의
단계 이름이 다르면 사용자가 같은 단계인지 알 수 없다(2026-08-01 사용자 지시). */
A02_ProgDetail_Step1_Title: ["1. 전처리", "1. Preprocess"],
A02_ProgDetail_Step1_Desc: [
"LAS 포인트클라우드에서 지면점을 필터링하고 15종 지표면 모델을 생성합니다.",
"Filter ground points from the LAS point cloud and generate 15 surface models.",
],
A02_ProgDetail_Step2_Title: ["2. 종단설계", "2. Profile Design"],
A02_ProgDetail_Step2_Desc: [
"경사·곡선반경·회피구역을 반영해 최적 임도 노선을 자동 탐색합니다.",
"Auto-search optimal routes reflecting grade, curve radius, and avoidance zones.",
],
A02_ProgDetail_Step3_Title: ["3. 횡단설계", "3. Cross Design"],
A02_ProgDetail_Step3_Desc: [
"확정 노선을 따라 종단면과 횡단면을 자동 추출합니다.",
"Automatically extract longitudinal and cross sections along the confirmed route.",
],
A02_ProgDetail_Step4_Title: ["4. 수량산출", "4. Quantity"],
A02_ProgDetail_Step4_Desc: [
"토공량과 구조물 수량을 자동 계산합니다.",
"Automatically calculate earthwork volumes and structure quantities.",
],
A02_ProgDetail_Step5_Title: ["5. 상세설계", "5. Detail Design"],
A02_ProgDetail_Step5_Desc: [
"구조물, 배수, 절·성토 등 세부 설계 요소를 편집합니다.",
"Edit detailed design elements such as structures, drainage, and cut/fill.",
],
A02_ProgDetail_Step6_Title: ["6. 설계도서", "6. Design Docs"],
A02_ProgDetail_Step6_Desc: [
"견적서와 설계도서를 Excel / DWG / PDF로 출력합니다.",
"Export estimates and design documents as Excel / DWG / PDF.",
],
A02_ProgDetail_Tech_SectionTitle: ["핵심 기술", "Core Technology"],
A02_ProgDetail_Tech1_Title: ["브라우저 3D 엔진", "Browser 3D Engine"],
A02_ProgDetail_Tech1_Desc: [
"설치 없이 웹 브라우저에서 대용량 지형을 실시간 렌더링합니다.",
"Render large terrains in real time in the browser with no installation.",
],
A02_ProgDetail_Tech2_Title: ["공간 분석 엔진", "Spatial Analysis Engine"],
A02_ProgDetail_Tech2_Desc: [
"PostGIS 기반 공간 연산으로 정밀한 지형·경로 분석을 수행합니다.",
"Perform precise terrain and route analysis with PostGIS spatial operations.",
],
A02_ProgDetail_Tech3_Title: ["단계별 결과 저장", "Stage-based Persistence"],
A02_ProgDetail_Tech3_Desc: [
"각 단계 계산 결과를 영구 저장해 언제든 이어서 작업할 수 있습니다.",
"Persist each stage's results so you can resume work anytime.",
],
/* --- A03_CompDetail 회사 상세 --- */
A03_CompDetail_Title: ["회사 소개", "About Us"],
A03_CompDetail_Hero_Subtitle: [
"임업 엔지니어링과 공간정보 기술로 산림 인프라의 미래를 설계합니다.",
"Designing the future of forest infrastructure with forestry engineering and geospatial technology.",
],
A03_CompDetail_Mission_SectionTitle: ["미션", "Our Mission"],
A03_CompDetail_Mission_Body: [
"복잡하고 반복적인 임도 설계 과정을 자동화하여, 설계자가 판단과 창의에 집중할 수 있도록 돕습니다.",
"We automate the complex, repetitive forest road design process so engineers can focus on judgment and creativity.",
],
A03_CompDetail_Value_SectionTitle: ["핵심 가치", "Core Values"],
A03_CompDetail_Value1_Title: ["정밀함", "Precision"],
A03_CompDetail_Value1_Desc: [
"실측 데이터에 기반한 신뢰할 수 있는 설계 결과를 추구합니다.",
"We pursue reliable design results grounded in measured data.",
],
A03_CompDetail_Value2_Title: ["효율", "Efficiency"],
A03_CompDetail_Value2_Desc: [
"수작업 시간을 획기적으로 줄여 설계 생산성을 높입니다.",
"We dramatically cut manual work to boost design productivity.",
],
A03_CompDetail_Value3_Title: ["지속가능성", "Sustainability"],
A03_CompDetail_Value3_Desc: [
"환경 영향을 최소화하는 친환경 노선 설계를 지향합니다.",
"We aim for eco-friendly route designs that minimize environmental impact.",
],
A03_CompDetail_Contact_SectionTitle: ["연락처", "Contact"],
A03_CompDetail_Contact_Email: ["이메일: contact@forestroad.kr", "Email: contact@forestroad.kr"],
/* --- A04_NewsHistory 최신소식 및 개선 이력 --- */
A04_NewsHistory_Title: ["최신 소식 & 개선 이력", "News & Changelog"],
A04_NewsHistory_Hero_Subtitle: [
"제품 업데이트와 개선 사항을 시간순으로 확인하세요.",
"Track product updates and improvements in chronological order.",
],
A04_NewsHistory_Tag_Feature: ["기능", "Feature"],
A04_NewsHistory_Tag_Fix: ["개선", "Fix"],
A04_NewsHistory_Tag_Notice: ["공지", "Notice"],
A04_NewsHistory_Empty: ["등록된 소식이 없습니다.", "No news available."],
/* --- A05_EduDetail 교육 상세 --- */
A05_EduDetail_Title: ["교육 안내", "Training & Education"],
A05_EduDetail_Hero_Subtitle: [
"프로그램을 처음 접하는 분도 빠르게 익힐 수 있는 단계별 교육 과정.",
"Step-by-step courses that help newcomers get up to speed quickly.",
],
A05_EduDetail_Course_SectionTitle: ["교육 과정", "Courses"],
A05_EduDetail_Course1_Title: ["기초 과정", "Beginner Course"],
A05_EduDetail_Course1_Desc: [
"데이터 업로드부터 첫 지표면 분석까지 기본 흐름을 익힙니다.",
"Learn the basic flow from data upload to your first surface analysis.",
],
A05_EduDetail_Course2_Title: ["실무 과정", "Practical Course"],
A05_EduDetail_Course2_Desc: [
"실제 프로젝트로 경로 설계와 종횡단 생성을 실습합니다.",
"Practice route design and cross-section generation with real projects.",
],
A05_EduDetail_Course3_Title: ["심화 과정", "Advanced Course"],
A05_EduDetail_Course3_Desc: [
"수량 산출과 견적 자동화, 문서 출력까지 완성합니다.",
"Master quantity takeoff, estimation automation, and document export.",
],
A05_EduDetail_Cta: ["교육 문의하기", "Request Training"],
/* --- A06_Login 로그인 --- */
A06_Login_Subtitle: ["계정에 로그인하세요.", "Sign in to your account."],
A06_Login_Field_Email: ["이메일", "Email"],
A06_Login_Field_Email_Placeholder: ["이메일을 입력하세요", "Enter your email"],
A06_Login_Field_Password: ["비밀번호", "Password"],
A06_Login_Field_Password_Placeholder: ["비밀번호를 입력하세요", "Enter your password"],
A06_Login_Submit: ["로그인", "Sign in"],
A06_Login_ToRegister: ["계정이 없으신가요? 회원가입", "No account? Sign up"],
A06_Login_Error_Required: [
"이메일과 비밀번호를 모두 입력하세요.",
"Please enter both email and password.",
],
A06_Login_Error_Email: ["이메일 형식이 올바르지 않습니다.", "Invalid email format."],
A06_Login_Field_Otp: ["이메일 인증 코드", "Email verification code"],
A06_Login_Field_Otp_Placeholder: ["6자리 코드를 입력하세요", "Enter the 6-digit code"],
A06_Login_Verify: ["인증하고 로그인", "Verify and sign in"],
A06_Login_OtpSent: ["인증 코드를 이메일로 발송했습니다.", "A verification code was emailed."],
A06_Login_OtpResend: ["인증 코드 재발송", "Resend verification code"],
A06_Login_OtpResendCountdown: ["{seconds}초 후 재발송", "Resend in {seconds}s"],
A06_Login_OtpBack: ["이메일/비밀번호 다시 입력", "Re-enter email/password"],
A06_Login_Success: ["로그인되었습니다.", "Signed in."],
A06_Login_Error_Request: ["로그인 요청에 실패했습니다.", "Sign-in request failed."],
/* --- A07_Register 회원가입 --- */
A07_Register_Subtitle: ["새 계정을 만드세요.", "Create a new account."],
A07_Register_Field_Company: ["회사명", "Company"],
A07_Register_Field_Company_Placeholder: ["회사명을 입력하세요", "Enter your company"],
A07_Register_Field_Name: ["이름", "Name"],
A07_Register_Field_Name_Placeholder: ["이름을 입력하세요", "Enter your name"],
A07_Register_Field_Email: ["이메일", "Email"],
A07_Register_Field_Email_Placeholder: ["이메일을 입력하세요", "Enter your email"],
A07_Register_Field_Password: ["비밀번호", "Password"],
A07_Register_Field_Password_Placeholder: ["8자 이상 입력하세요", "At least 8 characters"],
A07_Register_Field_PasswordConfirm: ["비밀번호 확인", "Confirm password"],
A07_Register_Field_PasswordConfirm_Placeholder: [
"비밀번호를 다시 입력하세요",
"Re-enter password",
],
A07_Register_Field_Position: ["직급", "Position"],
A07_Register_Field_Position_Placeholder: ["예) 과장, 대리, 사원", "e.g., Manager, Deputy, Staff"],
A07_Register_Field_Phone: ["전화번호", "Phone number"],
A07_Register_Field_Phone_Placeholder: ["010-1234-5678", "010-1234-5678"],
A07_Register_Submit: ["회원가입", "Sign up"],
A07_Register_ToLogin: ["이미 계정이 있으신가요? 로그인", "Already have an account? Sign in"],
A07_Register_Error_Required: [
"모든 필수 항목을 입력하세요.",
"Please fill in all required fields.",
],
A07_Register_Error_Email: ["이메일 형식이 올바르지 않습니다.", "Invalid email format."],
A07_Register_Error_Password: [
"비밀번호는 8자 이상이어야 합니다.",
"Password must be at least 8 characters.",
],
A07_Register_Error_PasswordMismatch: [
"비밀번호와 확인 비밀번호가 일치하지 않습니다.",
"Passwords do not match.",
],
A07_Register_Field_AccountType: ["가입 유형", "Account type"],
A07_Register_Type_Master: ["새 회사 등록", "Register a new company"],
A07_Register_Type_Member: ["기존 회사 참여", "Join an existing company"],
A07_Register_Field_CompanyId: ["회사 번호", "Company ID"],
A07_Register_Field_CompanyId_Placeholder: ["검색 결과의 회사 번호", "Company ID from search"],
A07_Register_Terms: ["이용약관에 동의합니다.", "I agree to the Terms of Service."],
A07_Register_Privacy: ["개인정보 처리방침에 동의합니다.", "I agree to the Privacy Policy."],
A07_Register_Marketing: [
"마케팅 정보 수신에 동의합니다. (선택)",
"I agree to marketing messages (optional).",
],
A07_Register_Field_Otp: ["이메일 인증 코드", "Email verification code"],
A07_Register_Verify: ["이메일 인증 완료", "Complete email verification"],
A07_Register_OtpSent: ["가입 인증 코드를 발송했습니다.", "Registration code sent."],
A07_Register_Success: ["가입 절차가 완료되었습니다.", "Registration completed."],
A07_Register_Error_Terms: ["필수 약관에 동의하세요.", "Agree to the required terms."],
A07_Register_Error_Request: ["회원가입 요청에 실패했습니다.", "Registration request failed."],
/* --- A08_Support 기술지원 요청 --- */
A08_Support_Title: ["기술지원 요청", "Technical Support"],
A08_Support_Subtitle: [
"문제나 문의사항을 남겨 주시면 신속히 답변드리겠습니다.",
"Leave your issue or inquiry and we'll respond promptly.",
],
A08_Support_Field_Name: ["이름", "Name"],
A08_Support_Field_Name_Placeholder: ["이름을 입력하세요", "Enter your name"],
A08_Support_Field_Email: ["이메일", "Email"],
A08_Support_Field_Email_Placeholder: ["회신 받을 이메일", "Email for reply"],
A08_Support_Field_Phone: ["연락처", "Phone"],
A08_Support_Field_Phone_Placeholder: ["연락 가능한 전화번호 (선택)", "Contact number (optional)"],
A08_Support_Field_Subject: ["제목", "Subject"],
A08_Support_Field_Subject_Placeholder: ["문의 제목", "Inquiry subject"],
A08_Support_Field_Message: ["문의 내용", "Message"],
A08_Support_Field_Message_Placeholder: [
"문의 내용을 자세히 적어주세요",
"Describe your inquiry in detail",
],
A08_Support_Submit: ["문의 보내기", "Send Inquiry"],
A08_Support_Success: [
"문의가 접수되었습니다. 곧 연락드리겠습니다.",
"Your inquiry has been received. We'll be in touch soon.",
],
A08_Support_Error_Required: ["모든 항목을 입력하세요.", "Please fill in all fields."],
A08_Support_Error_Email: ["이메일 형식이 올바르지 않습니다.", "Invalid email format."],
/* --- A09_Security 보안 및 약관 --- */
A09_Security_Title: ["보안 및 약관", "Security and Terms"],
A09_Security_Version: ["약관 버전", "Terms version"],
A09_Security_Terms: ["서비스 이용약관", "Terms of Service"],
A09_Security_Privacy: ["개인정보 처리방침", "Privacy Policy"],
A09_Security_Policy: ["세션 보안정책", "Session Security Policy"],
} as const satisfies Record<string, LocaleEntry>;