feat(WEB): QMS 검사 모달 개선, 전자결재/생산대시보드/템플릿 기능 수정

- QMS: InspectionModal/InspectionModalV2 개선, mockData 정리
- 전자결재: DocumentCreate 기능 수정
- 생산대시보드: ProductionDashboard 개선
- 템플릿: IntegratedDetailTemplate/UniversalListPage 기능 수정
- 문서: i18n 가이드 업데이트, 문서뷰어 아키텍처 계획 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-03 09:09:05 +09:00
parent ca6247286a
commit f0987127eb
10 changed files with 578 additions and 230 deletions

View File

@@ -6,6 +6,154 @@
---
## 적용 현황 분석 (2026-02-03 기준)
### 인프라 상태: 완비
| 항목 | 상태 | 설명 |
|------|------|------|
| 라이브러리 | `next-intl` ^4.4.0 | 설치 및 설정 완료 |
| 지원 언어 | ko, en, ja | 3개 locale |
| 번역 파일 | `src/messages/{ko,en,ja}.json` | 13개 네임스페이스, ~215개 키 |
| 미들웨어 | `src/middleware.ts` | locale 라우팅 + 인증 통합 완료 |
| Provider | `[locale]/layout.tsx` | `NextIntlClientProvider` 정상 |
| URL 라우팅 | `localePrefix: 'as-needed'` | ko는 URL 생략, en/ja는 prefix |
### 실제 적용 현황: 극히 일부만 적용
**`useTranslations` 사용 중인 파일: 3개 (전체의 ~1% 미만)**
| 파일 | 사용 네임스페이스 |
|------|-------------------|
| `src/components/auth/LoginPage.tsx` | auth, common, validation |
| `src/components/auth/SignupPage.tsx` | auth, signup, validation |
| `src/app/[locale]/layout.tsx` | Provider 설정만 |
**하드코딩된 한국어가 있는 파일: ~1,131개**
### 영역별 하드코딩 현황
| 영역 | 파일 수 | 주요 내용 |
|------|---------|----------|
| `business/` (건설) | ~171 | 계약, 입찰, 견적, 기성, 현장관리, 노무, 단가 |
| `items/` (품목) | ~101 | 품목마스터, BOM, 폼, 동적 품목관리 |
| `accounting/` (회계) | ~69 | 거래처, 입출금, 매출, 매입, 어음, 카드 |
| `settings/` (설정) | ~59 | 계정, 권한, 팝업, 구독, 회사정보, 직급, 휴가정책 |
| `hr/` (인사) | ~45 | 직원, 근태, 휴가, 급여, 카드, 부서 |
| `production/` (생산) | ~38 | 작업지시, 작업일지, 검사, 작업자화면 |
| `ui/` (공통 UI) | ~26 | file-list, confirm-dialog, error-card, inputs 등 |
| `approval/` (결재) | ~26 | 결재 워크플로우, 문서생성, 상세 |
| `quotes/` (견적) | ~21 | 견적 등록, 관리, 문서, 계산 |
| `outbound/` (출고) | ~21 | 출고증, 배차차량 |
| `quality/` (품질) | ~13 | 제품검사, 수입검사 |
| 기타 (dashboard, board 등) | ~541 | 대시보드, 게시판, CRM 등 |
### 하드코딩 유형 분류
**1. Config 파일 (~47개)** - 페이지 타이틀, 설명, 라벨
```typescript
// 예: vehicleDispatchConfig.ts
title: '배차차량 상세',
description: '배차차량 정보를 조회합니다',
backLabel: '목록',
```
**2. JSX 직접 텍스트** - 버튼, 라벨, placeholder
```tsx
<Button>삭제</Button>
placeholder="거래처명"
<Label>비고</Label>
```
**3. 토스트/알림 메시지**
```typescript
toast.success('저장되었습니다');
toast.error('삭제에 실패했습니다');
```
**4. 상태/상수 정의 (types.ts)**
```typescript
export const STATUS_LABELS = { draft: '작성대기', completed: '작성완료' };
export const FREIGHT_COST_LABELS = { prepaid: '선불', collect: '착불' };
```
**5. 로딩/에러 상태**
```typescript
if (isLoading) return <div>로딩 ...</div>; // 79+ 인스턴스
```
**6. Mock 데이터 (~7개)**
```typescript
siteName: '위브 청라',
orderCustomer: '두산건설(주)',
```
### 번역 파일 동기화 상태
| 비교 | 상태 | 이슈 |
|------|------|------|
| ko ↔ en | 동기화 완료 | 231줄 일치 |
| ko ↔ ja | 1건 누락 | `auth.loggingIn` 키 없음 (ja.json) |
### 현재 번역 파일 네임스페이스
```
common : ~25개 키 (기본 UI 액션)
auth : ~63개 키 (로그인, 회원가입, 역할, 직급)
signup : ~14개 키 (업종, 회사규모)
navigation : ~10개 키 (메인 메뉴)
dashboard : ~10개 키 (대시보드 위젯)
inventory : ~15개 키 (재고관리)
finance : ~11개 키 (회계)
hr : ~14개 키 (인사)
crm : ~8개 키 (고객관리)
settings : ~13개 키 (설정)
errors : ~7개 키 (에러 메시지)
validation : ~6개 키 (폼 유효성)
messages : ~8개 키 (성공/실패 알림)
```
### 작업 규모 (전체 적용 시)
| 작업 항목 | 수량 | 비고 |
|-----------|------|------|
| 번역 키 추출 대상 파일 | ~1,131개 | 반복적 패턴 작업 |
| 추가 필요 번역 키 (추정) | ~3,000~5,000개 | 3개 언어 동기화 필요 |
| Config 파일 전환 | ~47개 | 패턴 동일, 일괄 처리 가능 |
| 공통 UI 컴포넌트 | ~26개 | 영향 범위 넓음 (전체 앱) |
| 비즈니스 컴포넌트 | ~1,000+개 | 단순 반복이나 양 많음 |
### 단계별 적용 계획 (권장)
**Phase 1: 공통 기반** - 효과 가장 큼
- 공통 UI 컴포넌트 26개 (confirm-dialog, error-card, inputs 등)
- 공통 라벨 (저장, 삭제, 취소, 검색, 로딩 중... 등)
- "로딩 중..." 같은 반복 문자열 일괄 처리
- 이것만 해도 전체 앱에 영향
**Phase 2: Config 파일** - 기계적 작업
- 47개 config 파일의 title/description/label
- 패턴이 동일해서 일괄 처리 가능
**Phase 3: 영역별 비즈니스 컴포넌트**
- accounting (69개) → hr (45개) → production (38개) → ...
- 영역당 번역 네임스페이스 1개씩 추가
- business/ (171개)가 가장 큰 덩어리
**Phase 4: 나머지 + 검증**
- 누락 확인, 빌드 테스트
- 실제 언어 전환 테스트 (ko → en → ja)
- ja.json `auth.loggingIn` 누락 수정
### 즉시 수정 필요 사항
1. **ja.json 누락 키**: `auth.loggingIn` 추가 필요
- ko: `"loggingIn": "로그인 중..."`
- en: `"loggingIn": "Logging in..."`
- ja: (누락) → `"loggingIn": "ログイン中..."` 추가
---
## 📦 설치된 패키지
```json
@@ -697,6 +845,7 @@ export default function ClientComponent() {
| 날짜 | 버전 | 변경 내용 |
|-----|------|---------|
| 2025-11-06 | 1.0.0 | 초기 i18n 설정 구현 (ko, en, ja 지원) |
| 2026-02-03 | 1.1.0 | 전체 프로젝트 다국어 적용 현황 분석 추가 (하드코딩 현황, 단계별 적용 계획) |
---