Implement Cloudflare custom domain management flow

- Added support for connecting, refreshing, and removing custom domains through Cloudflare.
- Updated API routes and validation schemas to handle new domain actions.
- Refactored domain management logic in the dashboard to accommodate Cloudflare integration.
- Enhanced user experience with clear status messages and DNS instructions for domain setup.
- Updated translations and UI components to reflect new domain management features.
This commit is contained in:
Rotimi Best
2026-03-27 09:12:53 +01:00
parent 3919ff6c2f
commit f3d212f984
23 changed files with 1376 additions and 244 deletions
@@ -311,6 +311,7 @@
"creating_new": "Tạo bản dịch mới không thành công"
},
"exercise": {
"points_required_auto_grade": "Đặt điểm dương cho mỗi câu hỏi trước khi lưu.",
"success": "Đã lưu thành công",
"submission_updated": "Đã cập nhật bài nộp vào",
"error_fetching": "Tìm nạp bài tập không thành công, vui lòng tải lại trang"
@@ -750,6 +751,8 @@
"certificates": {
"title": "Chứng chỉ",
"certificate_settings": "Cài đặt chứng chỉ",
"tab_design": "Thiết kế",
"tab_settings": "Cài đặt",
"theme": "Chọn một chủ đề",
"logo": "Logo thương hiệu",
"to_update": "Để cập nhật hình ảnh thương hiệu của bạn, hãy truy cập",
@@ -1071,6 +1074,9 @@
"finish": "Kết thúc",
"next": "Tiếp theo",
"check": "Kiểm tra",
"auto_graded_badge": "Auto-graded",
"manual_grading_required_badge": "Manual grading required",
"points_required_auto_grade": "Points must be greater than 0 for auto-graded exercises.",
"analytics": {
"submissions": "bài nộp",
"individual": {
@@ -1139,6 +1145,8 @@
"link": "Liên kết"
},
"select_type": "Chọn loại",
"question_type_auto_gradable": "Auto",
"question_type_manual_grading": "Manual",
"premium_question_type": "Nâng cấp để sử dụng loại câu hỏi này"
},
"delete_confirmation": {
@@ -1608,6 +1616,27 @@
"nav_certificates": "Chứng chỉ",
"nav_landing_page": "Trang đích",
"nav_settings": "Cài đặt"
},
"completion": {
"modal": {
"title": "Yêu cầu khóa học đã hoàn tất!",
"subtitle": "Xin chúc mừng — bạn có thể xem và tải xuống chứng chỉ của mình bất kỳ lúc nào.",
"view_certificate": "Xem chứng chỉ",
"later": "Đóng"
}
},
"certification": {
"rules_heading": "Quy tắc chứng nhận",
"deadline_label": "Thời hạn chứng nhận",
"deadline_helper": "Học sinh phải đáp ứng tỷ lệ hoàn thành trước ngày này (giờ địa phương). Để trống không có thời hạn.",
"threshold_label": "Hoàn thành tối thiểu (%)",
"threshold_helper": "Cần có tiến độ kết hợp của bài học và bài tập để đạt được chứng chỉ (0–100). Mặc định là 100%.",
"email_message_label": "Thông báo email chứng nhận",
"email_message_helper": "Thông báo tùy chọn hiển thị trong email khi học sinh đáp ứng yêu cầu. Một liên kết đến trang chứng chỉ luôn được bao gồm.",
"email_message_placeholder": "ví dụ. Chúng tôi tự hào về sự tiến bộ của bạn - hãy tiếp tục học hỏi!"
},
"certificates": {
"progress_hint": "Đã hoàn thành {current}% (cần có {required}% để tải xuống)"
}
},
"courses": {
@@ -1785,7 +1814,20 @@
"refresh": "Làm mới",
"remove": "Xóa",
"custom_favicon": "Biểu tượng yêu thích tùy chỉnh",
"custom_code": "Mã tùy chỉnh"
"custom_code": "Mã tùy chỉnh",
"reconnect": "Kết nối lại miền",
"reconnect_hint": "Kết nối lại miền này để tạo bản ghi thiết lập Cloudflare mới.",
"status_verified": "Đã xác minh",
"status_pending_dns": "DNS đang chờ xử lý",
"status_pending_verification": "Đang chờ xác minh",
"status_reconnect_required": "Yêu cầu kết nối lại",
"status_error": "Cần chú ý",
"status_removed": "Đã xóa",
"verified_description": "Miền tùy chỉnh này đang hoạt động và đã được xác minh.",
"pending_dns_description": "Thêm bản ghi DNS bên dưới, sau đó làm mới xác minh.",
"pending_verification_description": "Bản ghi DNS đã được tìm thấy. Việc cấp hoặc xác thực SSL vẫn đang được tiến hành.",
"reconnect_description": "Miền này cần được kết nối lại thông qua quy trình thiết lập Cloudflare mới.",
"error_description": "Miền tùy chỉnh này tồn tại nhưng quá trình xác minh chưa hoàn tất."
}
},
"quiz": {