From a1c38e4ab202c3e3de599d3b255332dcd49cb4e0 Mon Sep 17 00:00:00 2001 From: dyzulk <66510723+dyzulk@users.noreply.github.com> Date: Wed, 7 Jan 2026 10:58:15 +0700 Subject: [PATCH] feat: localize all hardcoded strings in Root CA Management and Archive UI --- .../admin/root-ca/RootCaManagementClient.tsx | 16 ++++------ .../admin/ArchiveManagementTable.tsx | 20 ++++++------ src/components/admin/CdnManagementCard.tsx | 26 +++++++-------- src/components/admin/RootCaTable.tsx | 2 +- src/messages/en.json | 32 ++++++++++++++++++- src/messages/id.json | 32 ++++++++++++++++++- 6 files changed, 92 insertions(+), 36 deletions(-) diff --git a/src/app/dashboard/admin/root-ca/RootCaManagementClient.tsx b/src/app/dashboard/admin/root-ca/RootCaManagementClient.tsx index 8da799c..3049c92 100644 --- a/src/app/dashboard/admin/root-ca/RootCaManagementClient.tsx +++ b/src/app/dashboard/admin/root-ca/RootCaManagementClient.tsx @@ -62,25 +62,21 @@ export default function RootCaManagementClient() { setActiveSync(syncKey); try { let endpoint = "/api/admin/ca-certificates/sync-cdn"; - let msg = `Sync successful (Mode: ${mode})`; if (type === 'crt') { endpoint = "/api/admin/ca-certificates/sync-crt"; - msg = `CRT Files Sync successful (${mode})`; } else if (type === 'installers') { endpoint = "/api/admin/ca-certificates/sync-installers"; - msg = `Individual Installers Sync successful (${mode})`; } else if (type === 'bundles') { endpoint = "/api/admin/ca-certificates/sync-bundles"; - msg = "Global Bundles Sync successful"; } const response = await axios.post(endpoint, { mode }); - addToast(response.data.message || msg, "success"); + addToast(response.data.message || t("toast_sync_success"), "success"); mutate(); } catch (err: any) { console.error(err); - addToast(err.response?.data?.message || "Sync failed", "error"); + addToast(err.response?.data?.message || t("toast_sync_failed"), "error"); } finally { setActiveSync(null); } @@ -90,11 +86,11 @@ export default function RootCaManagementClient() { setIsPromoting(true); try { const response = await axios.post(`/api/admin/ca-certificates/${uuid}/promote`); - addToast(response.data.message || "Promoted successfully", "success"); + addToast(response.data.message || t("toast_promote_success"), "success"); mutate(); } catch (err: any) { console.error(err); - addToast(err.response?.data?.message || "Promotion failed", "error"); + addToast(err.response?.data?.message || t("toast_promote_failed"), "error"); } finally { setIsPromoting(false); } @@ -192,8 +188,8 @@ export default function RootCaManagementClient() { {/* Full-width Archive History */} {/* Table Header Controls */}
-

CDN Archive History

+

{t("archive_history_title")}

setSearchTerm(e.target.value)} className="!py-2" @@ -89,10 +89,10 @@ export default function ArchiveManagementTable({ - Version (UUID) + {t("th_version_uuid")} - Family + {t("th_family")} {t("common_name_th")} @@ -104,7 +104,7 @@ export default function ArchiveManagementTable({ {t("validity_th")} - Status + {t("th_status")} {t("actions_th")} @@ -121,12 +121,12 @@ export default function ArchiveManagementTable({ {cert.last_synced_at ? (
- Synced to CDN + {t("status_synced")}
) : (
- Local Only + {t("status_local")}
)}
@@ -181,11 +181,11 @@ export default function ArchiveManagementTable({ onClick={() => onPromote(cert.uuid)} loading={isPromoting} > - Set as Latest + {t("btn_set_latest")} )} {cert.is_latest && ( - Currently Public + {t("status_currently_public")} )} @@ -193,7 +193,7 @@ export default function ArchiveManagementTable({ {filteredAndSortedCertificates.length === 0 && ( - No versions found. + {t("no_archives_found")} )} diff --git a/src/components/admin/CdnManagementCard.tsx b/src/components/admin/CdnManagementCard.tsx index 4deb6f4..2a2fcb2 100644 --- a/src/components/admin/CdnManagementCard.tsx +++ b/src/components/admin/CdnManagementCard.tsx @@ -60,7 +60,7 @@ export default function CdnManagementCard({ onSync, activeSync, disabled }: CdnM )} - {isLoading ? "Syncing..." : "Sync Now"} + {isLoading ? t("syncing_label") : t("sync_now_btn")}
@@ -79,22 +79,22 @@ export default function CdnManagementCard({ onSync, activeSync, disabled }: CdnM @@ -109,22 +109,22 @@ export default function CdnManagementCard({ onSync, activeSync, disabled }: CdnM diff --git a/src/components/admin/RootCaTable.tsx b/src/components/admin/RootCaTable.tsx index bcacd6a..246409a 100644 --- a/src/components/admin/RootCaTable.tsx +++ b/src/components/admin/RootCaTable.tsx @@ -80,7 +80,7 @@ export default function RootCaTable({ {t("type_th")} - Family + {t("th_family")} {t("common_name_th")} diff --git a/src/messages/en.json b/src/messages/en.json index dbfbc58..6f73f60 100644 --- a/src/messages/en.json +++ b/src/messages/en.json @@ -676,7 +676,37 @@ "self_signed": "Self-Signed", "renew_button": "Renew", "no_ca_search": "No CAs matched \"{term}\"", - "no_ca_found": "No Root CA certificates found. Start by initializing the Certification Authority." + "no_ca_found": "No Root CA certificates found. Start by initializing the Certification Authority.", + "archive_history_title": "CDN Archive History", + "archive_search_placeholder": "Search version/CN...", + "th_version_uuid": "Version (UUID)", + "th_family": "Family", + "th_status": "Status", + "status_synced": "Synced to CDN", + "status_local": "Local Only", + "btn_set_latest": "Set as Latest", + "status_currently_public": "Currently Public", + "no_archives_found": "No versions found.", + "archive_management_title": "Version Archives", + "archive_management_desc": "Browse historical versions and promote them back to Latest if needed. This table provides full visibility into your CDN audit trail.", + "toast_sync_success": "Synchronization successful", + "toast_sync_failed": "Synchronization failed", + "toast_promote_success": "Promoted to latest successfully", + "toast_promote_failed": "Failed to promote version", + "syncing_label": "Syncing...", + "sync_now_btn": "Sync Now", + "label_update_crt": "Update CRT Only", + "desc_update_crt": "Only upload public certificate files (.crt, .der).", + "label_update_scripts": "Update Scripts Only", + "desc_update_scripts": "Only update individual installer scripts (.sh, .bat, .mac).", + "label_update_bundles": "Update Global Bundles", + "desc_update_bundles": "Update all-in-one installer packages (Recommended).", + "label_dual_sync": "Dual Sync (Latest & Archive)", + "desc_dual_sync": "Bulk sync to both paths. Safest for data integrity.", + "label_latest_sync": "Latest Sync (Clean URLs)", + "desc_latest_sync": "Only update the primary public links for installers.", + "label_archive_sync": "Archive Sync (Versioned)", + "desc_archive_sync": "Only save permanent archives without changing public links." }, "SmtpTester": { "page_title": "SMTP Tester", diff --git a/src/messages/id.json b/src/messages/id.json index 4ec7601..229396f 100644 --- a/src/messages/id.json +++ b/src/messages/id.json @@ -676,7 +676,37 @@ "self_signed": "Self-Signed", "renew_button": "Perbarui", "no_ca_search": "Tidak ada CA yang cocok dengan \"{term}\"", - "no_ca_found": "Sertifikat Root CA tidak ditemukan. Mulailah dengan menginisialisasi Certification Authority." + "no_ca_found": "Sertifikat Root CA tidak ditemukan. Mulailah dengan menginisialisasi Certification Authority.", + "archive_history_title": "Riwayat Arsip CDN", + "archive_search_placeholder": "Cari versi/CN...", + "th_version_uuid": "Versi (UUID)", + "th_family": "Keluarga", + "th_status": "Status", + "status_synced": "Tersinkronisasi ke CDN", + "status_local": "Hanya Lokal", + "btn_set_latest": "Jadikan Terbaru", + "status_currently_public": "Publik Saat Ini", + "no_archives_found": "Versi tidak ditemukan.", + "archive_management_title": "Arsip Versi", + "archive_management_desc": "Telusuri versi historis dan jadikan kembali sebagai Versi Terbaru jika diperlukan. Tabel ini memberikan visibilitas penuh terhadap jejak audit CDN Anda.", + "toast_sync_success": "Sinkronisasi berhasil", + "toast_sync_failed": "Sinkronisasi gagal", + "toast_promote_success": "Berhasil dijadikan versi terbaru", + "toast_promote_failed": "Gagal menjadikan versi terbaru", + "syncing_label": "Menyinkronkan...", + "sync_now_btn": "Sinkronisasi", + "label_update_crt": "Perbarui CRT Saja", + "desc_update_crt": "Hanya unggah file sertifikat publik (.crt, .der).", + "label_update_scripts": "Perbarui Skrip Saja", + "desc_update_scripts": "Hanya perbarui skrip installer individual (.sh, .bat, .mac).", + "label_update_bundles": "Perbarui Paket Global", + "desc_update_bundles": "Perbarui paket installer sapujagat (Disarankan).", + "label_dual_sync": "Sinkronisasi Ganda (Terbaru & Arsip)", + "desc_dual_sync": "Sinkronisasi massal ke kedua jalur. Paling aman untuk integritas data.", + "label_latest_sync": "Sinkronisasi Terbaru (URL Bersih)", + "desc_latest_sync": "Hanya perbarui link publik utama pendukung installer.", + "label_archive_sync": "Sinkronisasi Arsip (Versi)", + "desc_archive_sync": "Hanya simpan arsip permanen tanpa mengubah link publik." }, "SmtpTester": { "page_title": "Pengetes SMTP",