Some checks failed
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 29s
CI / E2E Tests (push) Has been skipped
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 2m42s
Deploy / Build Web Image (push) Failing after 27s
Deploy / Build AI Services Image (push) Failing after 29s
E2E Tests / Playwright E2E (push) Failing after 43s
Deploy / Build API Image (push) Failing after 1m31s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 6s
Security Scanning / Trivy Scan — API Image (push) Failing after 5m35s
Security Scanning / Trivy Scan — AI Services Image (push) Failing after 3m45s
Deploy / Deploy to Staging (push) Has been skipped
Deploy / Smoke Test Staging (push) Has been skipped
Deploy / Deploy to Production (push) Has been skipped
Deploy / Smoke Test Production (push) Has been skipped
Deploy / Rollback Staging (push) Has been skipped
Deploy / Rollback Production (push) Has been skipped
Security Scanning / Trivy Scan — Web Image (push) Failing after 13m51s
Security Scanning / Trivy Filesystem Scan (push) Failing after 14m46s
Security Scanning / Security Gate (push) Has been cancelled
279 lines
11 KiB
Markdown
279 lines
11 KiB
Markdown
# Tài Liệu Frontend GoodGo - Triển Khai i18n & Accessibility
|
|
|
|
## 📚 Mục Lục Tài Liệu
|
|
|
|
Gói này chứa tài liệu toàn diện cho việc triển khai **hỗ trợ i18n next-intl (Tiếng Việt + Tiếng Anh)** và **sửa lỗi accessibility theo WCAG 2.1 AA** trong frontend Next.js của GoodGo Platform (`apps/web`).
|
|
|
|
### 📄 Các Tài Liệu Được Cung Cấp
|
|
|
|
#### 1. **EXPLORATION_SUMMARY.txt** ⭐ BẮT ĐẦU TỪ ĐÂY
|
|
**Đọc trong 15 phút | Tổng quan điều hành**
|
|
|
|
Tóm tắt cấp cao về các phát hiện:
|
|
- Điểm mạnh và khoảng trống chính
|
|
- Tổng quan về tech stack
|
|
- Kiểm kê nội dung (200+ mục cần dịch)
|
|
- Các tệp quan trọng cần cập nhật
|
|
- Kết quả kiểm tra A11y
|
|
- Ước tính thời gian (19-27 giờ)
|
|
|
|
**Phù hợp nhất cho:** Quản lý dự án, các bên liên quan, tổng quan nhanh
|
|
|
|
---
|
|
|
|
#### 2. **docs/audits/FRONTEND_EXPLORATION.md** 📋 TÀI LIỆU THAM KHẢO CHI TIẾT
|
|
**Đọc trong 45 phút | Phân tích toàn diện**
|
|
|
|
Phân tích cực kỳ chi tiết:
|
|
- Cấu trúc thư mục đầy đủ kèm mô tả
|
|
- Toàn bộ 90+ tệp được phân tích
|
|
- Phân tích chi tiết package.json
|
|
- Trạng thái hiện tại của root layout
|
|
- Logic định tuyến middleware
|
|
- Cấu hình Tailwind CSS
|
|
- Vị trí nội dung văn bản (hardcoded)
|
|
- Trạng thái accessibility hiện tại
|
|
- Cấu trúc dữ liệu & enum
|
|
- Thiết lập kiểm thử
|
|
|
|
**Phù hợp nhất cho:** Lập trình viên, kiến trúc sư, lập kế hoạch triển khai
|
|
|
|
---
|
|
|
|
#### 3. **IMPLEMENTATION_QUICK_REFERENCE.md** 🚀 HƯỚNG DẪN KHỞI ĐẦU NHANH
|
|
**Đọc trong 30 phút | Định hướng hành động**
|
|
|
|
Hướng dẫn triển khai tập trung:
|
|
- Các phát hiện chính tổng quan
|
|
- Các điểm vào chiến lược (i18n, A11y, cấu trúc message)
|
|
- Danh sách kiểm tra triển khai 5 giai đoạn
|
|
- Kiểm kê nội dung văn bản theo loại
|
|
- Tệp ưu tiên Quan trọng / Cao / Trung bình
|
|
- Lộ trình ưu tiên A11y
|
|
- Chiến lược kiểm thử
|
|
- Yêu cầu về dependency
|
|
- Cơ hội thắng lợi nhanh
|
|
|
|
**Phù hợp nhất cho:** Trưởng nhóm kỹ thuật, lập kế hoạch sprint, phân chia công việc
|
|
|
|
---
|
|
|
|
#### 4. **FILE_MAPPING_GUIDE.md** 🗂️ KẾ HOẠCH TRIỂN KHAI CHI TIẾT
|
|
**Đọc trong 60 phút | Hướng dẫn từng tệp**
|
|
|
|
Hướng dẫn cập nhật tệp theo từng giai đoạn:
|
|
- **Giai đoạn 1:** Hạ tầng (middleware, root layout, config)
|
|
- **Giai đoạn 2:** Cập nhật core component (layouts, pages)
|
|
- **Giai đoạn 3:** Cập nhật form & validation
|
|
- **Giai đoạn 4:** Cập nhật tiện ích & API
|
|
- **Giai đoạn 5:** Sửa lỗi accessibility
|
|
- **Giai đoạn 6:** Cập nhật thiết lập kiểm thử
|
|
|
|
Mỗi phần bao gồm:
|
|
- Trạng thái hiện tại
|
|
- Các thay đổi cần thực hiện
|
|
- Ví dụ code (pseudo-code)
|
|
- Đánh giá độ phức tạp cụ thể
|
|
- Hướng dẫn thiết lập kiểm thử
|
|
|
|
Được tổ chức theo độ phức tạp của tệp:
|
|
- Đơn giản (5 phút) - 5 tệp
|
|
- Dễ (15-30 phút) - 12 tệp
|
|
- Trung bình (30-60 phút) - 10 tệp
|
|
- Phức tạp (1-2 giờ) - 4 tệp
|
|
- Hạ tầng quan trọng - 3 tệp
|
|
|
|
**Phù hợp nhất cho:** Nhóm triển khai, lập trình viên, viết code thực tế
|
|
|
|
---
|
|
|
|
## 🎯 Cách Sử Dụng Tài Liệu Này
|
|
|
|
### Tình huống 1: Tôi là Quản Lý Dự Án
|
|
1. Đọc **EXPLORATION_SUMMARY.txt** (15 phút)
|
|
2. Chia sẻ timeline và công sức với nhóm
|
|
3. Tham khảo **IMPLEMENTATION_QUICK_REFERENCE.md** để biết định nghĩa từng giai đoạn
|
|
|
|
### Tình huống 2: Tôi là Tech Lead Lập Kế Hoạch Công Việc
|
|
1. Đọc **EXPLORATION_SUMMARY.txt** (15 phút)
|
|
2. Đọc **IMPLEMENTATION_QUICK_REFERENCE.md** (30 phút)
|
|
3. Lướt qua **FILE_MAPPING_GUIDE.md** để hiểu phân bố độ phức tạp
|
|
4. Tạo task sprint dựa trên đánh giá độ phức tạp của từng tệp
|
|
|
|
### Tình huống 3: Tôi là Lập Trình Viên Triển Khai i18n
|
|
1. Xem nhanh **EXPLORATION_SUMMARY.txt** (5 phút)
|
|
2. Đọc sâu các phần liên quan đến task của bạn trong **docs/audits/FRONTEND_EXPLORATION.md**
|
|
3. Dùng **FILE_MAPPING_GUIDE.md** như hướng dẫn từng bước
|
|
4. Tham khảo các ví dụ code và pseudo-code được cung cấp
|
|
|
|
### Tình huống 4: Tôi Đang Triển Khai Sửa Lỗi A11y
|
|
1. Đọc phần A11y trong **EXPLORATION_SUMMARY.txt**
|
|
2. Tham khảo phần A11y trong **IMPLEMENTATION_QUICK_REFERENCE.md**
|
|
3. Dùng Giai đoạn 5 của **FILE_MAPPING_GUIDE.md** để biết các sửa lỗi cụ thể
|
|
4. Kiểm tra danh sách xác nhận trước khi coi là hoàn thành
|
|
|
|
## 🗂️ Tổ Chức Tài Liệu Theo Chủ Đề
|
|
|
|
### Về Triển Khai i18n
|
|
- **EXPLORATION_SUMMARY.txt** → phần "Text Content Requiring Translation"
|
|
- **IMPLEMENTATION_QUICK_REFERENCE.md** → Strategic Entry Points, Giai đoạn 1-2
|
|
- **FILE_MAPPING_GUIDE.md** → Giai đoạn 1-3, phần cấu trúc tệp message
|
|
|
|
### Về Sửa Lỗi Accessibility
|
|
- **EXPLORATION_SUMMARY.txt** → phần "Accessibility Audit Findings"
|
|
- **IMPLEMENTATION_QUICK_REFERENCE.md** → phần A11y Implementation Priority
|
|
- **FILE_MAPPING_GUIDE.md** → Giai đoạn 5, cập nhật component cụ thể
|
|
|
|
### Về Thiết Lập Hạ Tầng
|
|
- **IMPLEMENTATION_QUICK_REFERENCE.md** → Danh sách kiểm tra Giai đoạn 1
|
|
- **FILE_MAPPING_GUIDE.md** → Giai đoạn 1: Infrastructure Setup
|
|
|
|
### Về Kiểm Thử & QA
|
|
- **IMPLEMENTATION_QUICK_REFERENCE.md** → phần Testing Strategy
|
|
- **FILE_MAPPING_GUIDE.md** → Giai đoạn 6: Test Setup Updates, Validation Checklist
|
|
|
|
## 📊 Thống Kê Chính
|
|
|
|
| Chỉ số | Giá trị |
|
|
|--------|---------|
|
|
| Tệp trong apps/web | 90+ |
|
|
| Tệp cần cập nhật | 50-60 |
|
|
| Mục văn bản cần dịch | 200+ |
|
|
| Component cần cập nhật | 35+ |
|
|
| Trang cần cập nhật | 15+ |
|
|
| Lỗi A11y phát hiện | 10+ |
|
|
| Thời gian triển khai ước tính | 19-27 giờ (~3-4 ngày) |
|
|
| Thiết lập i18n hiện tại | Không có (0%) |
|
|
| Độ phủ A11y hiện tại | 60-70% |
|
|
|
|
## ✅ Danh Sách Kiểm Tra Trước Triển Khai
|
|
|
|
Trước khi bắt đầu triển khai:
|
|
- [ ] Xem lại **EXPLORATION_SUMMARY.txt**
|
|
- [ ] Cài đặt gói **next-intl** (`npm install next-intl`)
|
|
- [ ] Phân bổ **3-4 ngày** cho triển khai đầy đủ
|
|
- [ ] Nhóm có kinh nghiệm với Next.js App Router
|
|
- [ ] Có quyền truy cập **axe DevTools** để kiểm thử accessibility
|
|
- [ ] Lập kế hoạch kiểm thử với screen reader (NVDA hoặc JAWS)
|
|
|
|
## 🚀 Khởi Đầu Nhanh
|
|
|
|
### Buổi Sáng Ngày 1
|
|
1. Đọc **EXPLORATION_SUMMARY.txt** (15 phút)
|
|
2. Đọc **IMPLEMENTATION_QUICK_REFERENCE.md** (30 phút)
|
|
3. Cài đặt next-intl: `npm install next-intl`
|
|
4. Tạo tệp cấu hình i18n: `i18n/config.ts`
|
|
5. Tạo tệp message: `public/locales/en.json` và `vi.json`
|
|
|
|
### Buổi Chiều Ngày 1
|
|
6. Bắt đầu với Giai đoạn 1 của **FILE_MAPPING_GUIDE.md**
|
|
7. Cập nhật **middleware.ts** (30-45 phút)
|
|
8. Cập nhật **app/layout.tsx** (30 phút)
|
|
|
|
### Ngày 2
|
|
- Tiếp tục với Giai đoạn 2-3 của **FILE_MAPPING_GUIDE.md**
|
|
- Cập nhật các tệp core layout và page
|
|
- Trích xuất văn bản từ validation
|
|
|
|
### Ngày 3
|
|
- Tiếp tục Giai đoạn 3-4
|
|
- Cập nhật các component còn lại
|
|
- Bắt đầu sửa lỗi A11y
|
|
|
|
### Ngày 4
|
|
- Hoàn thành sửa lỗi A11y
|
|
- Chạy kiểm thử toàn diện
|
|
- Sửa các vấn đề phát hiện được
|
|
|
|
## 📞 Câu Hỏi Trong Khi Triển Khai?
|
|
|
|
Tham khảo các phần cụ thể:
|
|
|
|
**H: Cách cấu trúc tệp message như thế nào?**
|
|
Đ: Xem FILE_MAPPING_GUIDE.md → Giai đoạn 1 → cấu trúc `public/locales/en.json`
|
|
|
|
**H: Tôi cập nhật tệp nào trước?**
|
|
Đ: Xem IMPLEMENTATION_QUICK_REFERENCE.md → Critical Files for i18n
|
|
|
|
**H: Cách thêm focus trapping vào dialog như thế nào?**
|
|
Đ: Xem FILE_MAPPING_GUIDE.md → Giai đoạn 5 → `components/ui/dialog.tsx`
|
|
|
|
**H: Timeline cho công việc này là bao lâu?**
|
|
Đ: Xem EXPLORATION_SUMMARY.txt → phần Implementation Timeline
|
|
|
|
**H: Có những thắng lợi nhanh nào tôi có thể làm ngay không?**
|
|
Đ: Có! Xem IMPLEMENTATION_QUICK_REFERENCE.md → Quick Win Opportunities
|
|
|
|
## 🔍 Chỉ Số Chất Lượng Tài Liệu
|
|
|
|
| Chỉ số | Giá trị |
|
|
|--------|---------|
|
|
| Độ sâu phân tích | Rất kỹ lưỡng |
|
|
| Độ phủ tệp | 100% của app/web |
|
|
| Ví dụ code được cung cấp | Có (40+ đoạn) |
|
|
| Pseudo-code được bao gồm | Có |
|
|
| Đánh giá độ phức tạp | Có (chi tiết) |
|
|
| Độ phủ kiểm thử | Có |
|
|
| Danh sách xác nhận | Có |
|
|
|
|
## 📌 Lưu Ý Quan Trọng
|
|
|
|
1. **Không có i18n hiện tại:** Tất cả đều được hardcode bằng tiếng Việt. Đây là triển khai i18n từ đầu (greenfield).
|
|
|
|
2. **A11y đã được thực hiện một phần:** Nền tảng tốt đã có sẵn (HTML ngữ nghĩa, ARIA label, skip link), nhưng quản lý focus và một số thuộc tính ARIA vẫn còn thiếu.
|
|
|
|
3. **Công nghệ đã sẵn sàng:** Tất cả thư viện cần thiết đã được cài đặt. Đây là dự án tái cấu trúc/bổ sung, không phải thay đổi framework.
|
|
|
|
4. **TypeScript hỗ trợ:** Type safety sẽ phát hiện nhiều vấn đề trong quá trình tái cấu trúc.
|
|
|
|
5. **Kiểm thử rất quan trọng:** Cả hai locale đều cần được kiểm thử kỹ lưỡng.
|
|
|
|
## 📚 Tài Nguyên Bổ Sung
|
|
|
|
Tài liệu tham chiếu:
|
|
- Next.js App Router: cấu trúc thư mục `/app`
|
|
- Thư viện next-intl: cấu hình và thiết lập
|
|
- WCAG 2.1 AA: tiêu chuẩn accessibility
|
|
- Tailwind CSS: phương pháp tạo kiểu
|
|
- Zod: schema validation
|
|
- TypeScript: type safety
|
|
|
|
## 🎓 Lộ Trình Học Tập
|
|
|
|
Nếu bạn mới làm quen với codebase này:
|
|
1. Bắt đầu với **EXPLORATION_SUMMARY.txt** để có cái nhìn tổng quan
|
|
2. Đọc phần "Directory Structure Overview" trong **docs/audits/FRONTEND_EXPLORATION.md**
|
|
3. Hiểu cấu trúc App Router
|
|
4. Xem lại các pattern component hiện tại
|
|
5. Sau đó bắt đầu triển khai với **FILE_MAPPING_GUIDE.md**
|
|
|
|
## 📝 Phiên Bản & Lịch Sử
|
|
|
|
**Phiên bản hiện tại:** 1.0 - Trước khi triển khai
|
|
**Được tạo:** 9 tháng 4, 2026
|
|
**Loại phân tích:** Rất kỹ lưỡng
|
|
**Mức độ tin cậy:** CAO ✅
|
|
**Trạng thái:** Sẵn sàng triển khai
|
|
|
|
---
|
|
|
|
## 🎯 Tiêu Chí Thành Công
|
|
|
|
Triển khai hoàn thành khi:
|
|
- ✅ Cả hai route `/en/*` và `/vi/*` đều hoạt động
|
|
- ✅ Tất cả văn bản hardcoded đến từ tệp message
|
|
- ✅ Metadata thay đổi theo locale
|
|
- ✅ Thông báo validation được dịch
|
|
- ✅ Tất cả enum sử dụng i18n
|
|
- ✅ Focus trap hoạt động trong dialog
|
|
- ✅ Lỗi form được liên kết với aria-describedby
|
|
- ✅ Tất cả nút icon có aria-label
|
|
- ✅ Độ tương phản màu đạt WCAG AA
|
|
- ✅ Điều hướng bằng bàn phím hoạt động
|
|
- ✅ Kiểm thử vượt qua cho cả hai locale
|
|
- ✅ Kiểm tra axe DevTools vượt qua
|
|
|
|
---
|
|
|
|
**Sẵn sàng triển khai? Bắt đầu với EXPLORATION_SUMMARY.txt, sau đó chuyển sang FILE_MAPPING_GUIDE.md** 🚀
|