# ralat asas
ErrInvalidParams: 'Permintaan tidak sah: {{ .detail }}'
ErrTokenParse: 'Token tidak sah: {{ .detail }}'
ErrInitialPassword: 'Kata laluan asal salah'
ErrInternalServer: 'Ralat pelayan: {{ .detail }}'
ErrInternalServerKey: "Ralat dalaman pelayan:"
ErrRecordExist: 'Rekod sudah wujud'
ErrRecordNotFound: 'Rekod tidak ditemui'
ErrStructTransform: 'Ralat penukaran: {{ .detail }}'
ErrNotSupportType: 'Jenis tidak disokong: {{ .name }}'
ErrDemoEnvironment: 'Tidak tersedia dalam demo'
ErrCmdTimeout: 'Arahan tamat masa'
ErrPortInUsed: "Port {{ .name }} telah digunakan"
ErrFileNotFound: "Fail {{ .name }} tidak wujud"
ErrReqFailed: "{{.name}} permintaan gagal: {{ .err }}"

# permintaan dan pintu masuk keselamatan
ErrNoSuchHost: "Pelayan yang diminta tidak dapat ditemui {{ .err }}"
ErrHttpReqNotFound: "Sumber yang diminta tidak dapat ditemui {{ .err }}"
ErrHttpReqFailed: "Permintaan gagal {{ .err }}"
ErrHttpReqTimeOut: "Permintaan telah tamat masa {{ .err }}"
ErrCreateHttpClient: "Gagal mencipta permintaan {{ .err }}"
ErrProxy: 'Permintaan gagal: {{ .detail }}'
ErrProxySetting: "Maklumat pelayan proksi tidak tersedia {{ .err }}, sila periksa dan cuba lagi"
ErrEntrance: "Maklumat pintu masuk keselamatan salah, sila periksa dan cuba lagi"
ErrEntranceFormat: "Pintu masuk keselamatan {{ .name }} tidak disokong buat masa ini. Sila periksa dan cuba lagi"

# log masuk dan keselamatan
ErrNotLogin: 'Belum log masuk: {{ .detail }}'
ErrSessionDataNotFound: "Sesi semasa telah tamat tempoh"
ErrSessionDataFormat: "Format data sesi semasa tidak normal"
ErrPasswordExpired: 'Kata laluan tamat: {{ .detail }}'
ErrLoginLocked: "Terlalu banyak percubaan gagal. Log masuk dikunci sementara selama 5 minit."
ErrApiConfigStatusInvalid: 'API dilumpuhkan: {{ .detail }}'
ErrApiConfigKeyInvalid: 'Kunci API tidak sah: {{ .detail }}'
ErrApiConfigIPInvalid: 'IP tidak dibenarkan: {{ .detail }}'
ErrApiConfigDisable: 'API tidak dibenarkan: {{ .detail }}'
ErrApiConfigKeyTimeInvalid: 'Cap masa tidak sah: {{ .detail }}'
ErrPasskeyDisabled: "Passkey memerlukan HTTPS diaktifkan"
ErrPasskeyNotConfigured: "Tiada Passkey dikonfigurasikan"
ErrPasskeyLimit: "Had Passkey telah dicapai (maksimum 5)"
ErrPasskeySession: "Sesi Passkey telah tamat tempoh atau tidak sah"
ErrPasskeyDuplicate: "Passkey sudah wujud"
ErrPasskeyVerify: "Pengesahan Passkey gagal"
ErrOIDCNotEnabled: "Pengesahan OIDC belum diaktifkan"
ErrOIDCConfigInvalid: "Konfigurasi OIDC tidak sah"
ErrOIDCConfigChanged: "Konfigurasi OIDC telah berubah; mulakan semula pengesahan"
ErrOIDCDiscoveryFailed: "Gagal menemui konfigurasi Provider OIDC"
ErrOIDCIssuerMismatch: "Issuer OIDC tidak sepadan dengan Issuer yang dikonfigurasi"
ErrOIDCUnsupportedPKCE: "Provider OIDC tidak menyokong kaedah PKCE yang diperlukan"
ErrOIDCUnsupportedSigningAlgorithm: "Algoritma tandatangan OIDC tidak disokong"
ErrOIDCInvalidState: "Status log masuk OIDC tidak sah atau telah digunakan"
ErrOIDCLoginExpired: "Permintaan log masuk OIDC telah tamat tempoh; cuba lagi"
ErrOIDCTokenExchange: "Gagal menukar kod kebenaran OIDC"
ErrOIDCTokenValidation: "Gagal mengesahkan Token OIDC"
ErrOIDCUserInfoValidation: "Gagal mengesahkan maklumat pengguna OIDC"
ErrOIDCNameClaimMissing: "Claim nama pengguna OIDC yang dikonfigurasi tiada atau tidak sah"
ErrOIDCNameConflictLocal: "Nama pengguna OIDC bercanggah dengan pengguna tempatan"
ErrOIDCNameConflictLDAP: "Nama pengguna OIDC bercanggah dengan pengguna LDAP"
ErrOIDCNameConflictOIDC: "Nama pengguna OIDC bercanggah dengan identiti OIDC lain"
ErrOIDCDefaultRoleInvalid: "Peranan lalai yang dikonfigurasi untuk OIDC tidak tersedia"
ErrOIDCPrivateAddressDenied: "Alamat Endpoint OIDC tidak dibenarkan oleh dasar keselamatan rangkaian"
ErrOIDCTLSValidation: "Pengesahan sijil TLS OIDC gagal"
ErrOIDCTestExpired: "Ujian pelayar OIDC telah tamat tempoh; jalankan semula ujian"
ErrOIDCLocalCredentialsReadonly: "Nama pengguna dan kata laluan OIDC diurus oleh Provider identiti dan tidak boleh diubah secara tempatan."
ErrOIDCPasswordExpirationUnsupported: "Pengguna OIDC tidak menggunakan dasar tamat tempoh kata laluan tempatan."
ErrOIDCInternal: "Pengesahan OIDC mengalami ralat dalaman. Cuba lagi kemudian."

# pengguna dan kebenaran
ErrNoSuchUser: "Maklumat pengguna tidak ditemui, sila semak dan cuba lagi"
ErrToMaster: "Pengguna ini tiada kebenaran untuk melakukan operasi ini pada nod utama, sila semak dan cuba lagi"
ErrToNode: "Pengguna ini tiada kebenaran untuk melakukan operasi ini pada nod ini, sila semak dan cuba lagi"
ErrRBAC: "Kebenaran pengguna tidak mencukupi, operasi ini tidak boleh dilakukan. Sila semak dan cuba lagi"
ErrNoneNode: "Pengguna ini tidak mempunyai sebarang kebenaran nod. Sila hubungi pentadbir atau semak dan cuba lagi"
ErrOnlySuperAdmin: "Hanya super admin boleh menggunakan fungsi ini"
ErrRolePresetCannotDelete: "Peranan pratetap sistem tidak boleh dipadam"
ErrRolePresetCannotUpdate: "Peranan pratetap sistem tidak boleh dikemas kini"
ErrRoleBoundToUser: "Peranan ini sudah terikat kepada pengguna dan tidak boleh dipadam"
ErrRolePresetCannotBind: "Peranan pratetap sistem tidak boleh diberikan kepada pengguna"
ErrNodeAdminMasterForbidden: "Kebenaran Pentadbir Nod tidak boleh ditambah pada nod utama"
ErrSuperAdminCannotDelete: "Pengguna super admin tidak boleh dipadam"
ErrGroupIsDefault: "Kumpulan lalai tidak boleh dihapuskan"
ErrGroupIsInUse: "Kumpulan sedang digunakan dan tidak boleh dipadam."

# lesen
LicenseCheck: 'Periksa sama ada lesen tersedia'
ErrLicenseInUsed: 'Lesen ini telah terikat. Sila periksa dan cuba lagi'
ErrLicenseExpired: 'Lesen ini telah tamat tempoh. Sila periksa dan cuba lagi'
ErrLicense: "Format lesen tidak sah, sila semak dan cuba lagi"
ErrLicenseCheck: "Pengesahan lesen gagal, sila semak dan cuba lagi"
ErrXpackVersion: "Pengesahan lesen gagal, lesen ini terhad kepada versi tertentu, sila semak dan cuba lagi"
ErrLicenseSave: "Gagal menyimpan maklumat lesen {{ .err }}, sila cuba lagi"
ErrLicenseSync: "Penyelarasan maklumat lesen gagal, maklumat lesen tidak ditemui dalam pangkalan data"
ErrLicenseExist: "Rekod lesen ini sudah wujud. Anda boleh terus ke halaman lesen untuk mengikat nod."
ErrXpackNotFound: "Bahagian ini memerlukan Edisi Business. Import lesen di Tetapan Panel > Lesen"
ErrXpackExceptional: "Bahagian ini memerlukan Edisi Business. Segerakkan status lesen di Tetapan Panel > Lesen"
ErrXpackLost: "Lesen telah mencapai had percubaan semula. Pergi ke Tetapan Panel > Lesen dan jalankan penyelarasan manual"
ErrEnterpriseLicenseRequired: "Lesen Edisi Enterprise belum diimport. Sila import lesen terlebih dahulu"
ErrDeviceLost: "Fail yang diperlukan untuk pengesahan lesen hilang, sila semak dan cuba lagi"
ErrDeviceErr: "Persekitaran semasa tidak sepadan dengan persekitaran import lesen. Sila edit lesen dan import semula"
ErrXpackTimeout: "Permintaan tamat masa, sambungan rangkaian mungkin tidak stabil, sila cuba lagi kemudian"
ErrUnbindMaster: "Terdapat nod dalam pengurusan nod, sila keluarkan dahulu dan cuba lagi"
ErrFreeNodeLimit: "Bilangan nod yang boleh ditambah telah mencapai had. Sila beli dan cuba lagi."
ErrNodeBound: "Lesen ini telah diikat dengan nod lain, sila semak dan cuba lagi"
ErrNodeBoundDelete: "Lisensi ini telah diikat dan tidak menyokong operasi penghapusan. Sila semak dan cuba lagi"
ErrNodeBoundLimit: "Nod percuma semasa telah mencapai had, sila semak dan cuba lagi"
ErrLicenseFree: "Nod percuma hanya boleh digunakan apabila lesen terikat dengan betul pada nod. Sila semak dan cuba lagi"
ErrLicenseUnbind: "Lesen ini masih terikat pada nod Edisi Community. Nyahikat di Tetapan Panel > Lesen dan cuba lagi"
ErrLicenseBindCount: "Bilangan nod percuma lesen baharu kurang daripada bilangan nod Edisi Community yang sedang terikat. Sila semak dan cuba lagi"
ErrNoSuchNode: "Maklumat nod tidak ditemui, sila semak dan cuba lagi"
ErrNodeUnbind: "Nod di luar skop lesen dikesan, sila semak dan cuba lagi"
ErrNodeBind: "Nod ini telah diikat dengan lesen, sila semak dan cuba lagi"
ErrNodeLocalRollback: "Nod utama tidak menyokong rollback secara langsung. Jalankan '1pctl restore' secara manual untuk rollback"
ErrIntlLicense: "Versi semasa belum menyokong import lesen edisi antarabangsa. Nantikan"
InvalidRequestBodyType: "Format badan permintaan tidak sah, sila periksa dan pastikan kandungan memenuhi format yang diperlukan sebelum mencuba semula"
InvalidLicenseCodeType: "Format kod lesen yang diberikan tidak sah, sila periksa dan cuba lagi"
LicenseNotFoundType: "Lesen tidak dijumpai, tiada rekod yang sepadan dengan lesen yang diberikan dalam sistem. Sila periksa dan cuba lagi"
LicenseRevokedType: "Lesen yang diminta telah dibatalkan dan tidak boleh digunakan lagi. Sila periksa dan cuba lagi"
LicenseExpiredType: "Lesen telah tamat tempoh. Sila perbaharui atau import semula lesen dalam Tetapan Panel - Bahagian Lesen sebelum mencuba semula"
LicenseProductMismatchType: "Lesen tidak sepadan dengan produk atau perkhidmatan yang diminta"
InvalidAssigneeType: "Maklumat pengguna atau peranti sasaran untuk penugasan lesen tidak sah. Sila periksa dan cuba lagi"
LicenseUsageNotFoundType: "Tiada rekod penggunaan dijumpai. Lesen ini belum diaktifkan atau digunakan. Sila periksa dan cuba lagi"
LicenseUsageLimitExceededType: "Lesen ini sudah terikat pada nod lain. Sila periksa dan cuba lagi"

# nod dan kluster
MasterNode: "Nod Induk"
Node: "Nod"
ErrLocalDelete: "Nod tempatan tidak boleh dihapuskan"
ErrMasterDelete: "Tidak dapat menghapus nod utama, sila hapuskan nod perantara dahulu."
ClusterNameIsExist: "Nama kluster sudah wujud."
AppStatusUnHealthy: "Pengambilan status aplikasi tidak normal, sila periksa status nod pemasangan dalam senarai nod."
MasterNodePortNotAvailable: "Pengesahan kesambungan pelabuhan {{ .name }} nod {{ .port }} gagal, sila periksa tetapan firewall/kumpulan keselamatan dan status nod utama."
ClusterMasterNotExist: "Node utama kluster terputus, sila padamkan nod anak."

# mesin maya
ErrVMNotFound: "Mesin maya tidak wujud"
ErrVMAlreadyExists: "Mesin maya sudah wujud"
ErrVMImageAlreadyExists: "Fail imej mesin maya sudah wujud: {{ .detail }}"
ErrVMStoragePathInUse: "Laluan kolam storan sudah digunakan oleh [{{ .name }}]"
ErrVMHelperNotFound: "1panel-kvm tidak ditemui"
ErrVMBridgeManaged: "Nama bridge telah diurus oleh libvirt atau Docker"
ErrVMNetworkInUse: "Rangkaian sedang digunakan dan tidak boleh dipadamkan"
ErrVMStorageInUse: "Kumpulan storan sedang digunakan dan tidak boleh dipadamkan"
ErrVMStorageNameCannotChange: "Nama kumpulan storan tidak boleh diubah"
ErrVMStoragePathCannotChange: "Laluan kumpulan storan tidak boleh diubah"
ErrVMRunning: "Mesin maya sedang berjalan"
ErrVMLibvirtConnect: "Gagal menyambung ke libvirt: {{ .detail }}"
ErrVMPermission: "Tiada kebenaran untuk mengendalikan mesin maya: {{ .detail }}"
ErrVMNetworkNotFound: "Rangkaian mesin maya tidak wujud: {{ .detail }}"
ErrVMInvalidPath: "Laluan mesin maya tidak sah: {{ .detail }}"
ErrVMInvalidInput: "Parameter mesin maya tidak sah: {{ .detail }}"
ErrVMCommandFailed: "Arahan mesin maya gagal: {{ .err }}"
VMCreateTask: "Cipta mesin maya [{{ .name }}]"
VMCreateFromTemplateTask: "Cipta mesin maya [{{ .name }}] daripada templat"
VMUpdateTask: "Kemas kini mesin maya [{{ .name }}]"
VMRenameTask: "Namakan semula mesin maya [{{ .name }}] kepada [{{ .newName }}]"
VMDeleteTask: "Padam mesin maya [{{ .name }}]"
VMTemplateCreateTask: "Simpan mesin maya [{{ .name }}] sebagai templat [{{ .template }}]"
VMTemplateDeleteTask: "Padam templat mesin maya [{{ .name }}]"
VMForceDeleteMetadataOnly: "1panel-kvm tidak ditemui, memadam metadata mesin maya [{{ .name }}] sahaja secara paksa"
VMForceDeleteMetadataAfterLibvirtFailed: "Gagal memadam mesin maya [{{ .name }}] daripada libvirt, memadam metadata secara paksa: {{ .err }}"
VMForceDeleteDiskFailed: "Gagal memadam fail cakera mesin maya [{{ .path }}] secara paksa: {{ .err }}"
VMForceDeleteDiskSuccess: "Fail cakera mesin maya [{{ .path }}] telah dipadam secara paksa"
VMSnapshotCreateTask: "Cipta syot kilat [{{ .snapshot }}] untuk mesin maya [{{ .vm }}]"
VMSnapshotCreateStep: "Cipta syot kilat mesin maya [{{ .snapshot }}]"
VMSnapshotRecoverTask: "Pulihkan syot kilat [{{ .snapshot }}] untuk mesin maya [{{ .vm }}]"
VMSnapshotRecoverStep: "Pulihkan syot kilat mesin maya [{{ .snapshot }}]"
VMSnapshotDeleteTask: "Padam syot kilat [{{ .snapshot }}] untuk mesin maya [{{ .vm }}]"
VMSnapshotDeleteStep: "Padam syot kilat mesin maya [{{ .snapshot }}]"

# aplikasi
CustomAppStoreFileValid: "Pakej stor aplikasi perlu dalam format .tar.gz"
AppBackup: "Sandaran aplikasi"
AppBackupPush: "Pindahkan fail sandaran aplikasi {{.file}} ke nod {{ .name }}"
ErrSourceTargetSame: "Nod sumber dan nod sasaran tidak boleh sama!"
AppInstall: "Pasang aplikasi {{ .name }} pada nod {{ .targetNode }}"
AppInstallCheck: "Semak persekitaran pemasangan aplikasi"

# sandaran
ErrBackupInUsed: 'Akaun sandaran sedang digunakan oleh tugas'
ErrBackupCheck: 'Ujian sambungan gagal: {{ .err }}'
ErrBackupLocal: "Akaun sandaran pelayan tempatan tidak menyokong operasi ini"
ErrBackupPublic: "Akaun sandaran ini dikesan tidak awam, sila semak semula dan cuba lagi"
ErrOSSConn: "Tidak dapat mendapatkan versi terkini, sila semak sambungan rangkaian luar pelayan."
MvBackup: "Alihkan data ke direktori sandaran"

# amaran
ErrAlertSync: "Ralat penyinkronan maklumat amaran, sila semak dan cuba lagi"

# gerbang AI
ErrAIProxyUserGroupIsDefault: "Kumpulan pengguna lalai tidak boleh dipadam."
ErrAIProxyUserGroupInUse: "Kumpulan pengguna sedang digunakan dan tidak boleh dipadam."
ErrAIProxyUserGroupExists: "Nama kumpulan pengguna sudah wujud."
ErrAIProxyBackendAccountExists: "Akaun model ini telah diimport ke dalam kolam akaun AI Gateway."
ErrAIProxyModelGroupInUse: "Kumpulan model sedang digunakan dan tidak boleh dipadam."
ErrAIProxyModelGroupExists: "Nama kumpulan model sudah wujud."
ErrAIProxySensitiveGroupInUse: "Kumpulan kata sensitif sedang digunakan dan tidak boleh dipadam."
ErrAIProxySensitiveGroupExists: "Nama kumpulan kata sensitif sudah wujud."
AIProxyContentPolicyViolation: "Maaf, saya tidak dapat memproses permintaan ini kerana kandungannya mungkin tidak mematuhi dasar kandungan. Sila ubah kandungan dan cuba lagi."
AIBenchmarkRun: "Jalankan penanda aras AI"

# tugas
TaskStart: "{{ .name }} tugas bermula [START]"
TaskEnd: "{{ .name }} tugas tamat [COMPLETED]"
TaskFailed: "{{ .name }} tugas gagal"
TaskTimeout: "{{ .name }} tamat masa"
TaskSuccess: "{{ .name }} tugas berjaya"
TaskRetry: "Mula percubaan semula {{ .name }}"
SubTaskSuccess: "{{ .name }} berjaya"
SubTaskFailed: "{{ .name }} gagal: {{ .err }}"
TaskInstall: "Pasang"
TaskUpgrade: "Kemas kini"
TaskSync: 'Selaraskan'
TaskSyncForNode: "Segerakan Data Nod"
TaskBackup: "Sandaran"
TaskPush: "Hantar"
TaskRsync: "Selaraskan"
SuccessStatus: "{{ .name }} berjaya"
FailedStatus: "{{ .name }} gagal {{ .err }}"
Start: "Mula"
SubTask: "Tugas Sub"
Skip: "Abaikan ralat dan teruskan..."
Success: "Berjaya"

# tugas penghalaan pintar get laluan AI
AIProxySmartRouteCreateTask: "Cipta sampel penghalaan pintar get laluan AI"
AIProxySmartRouteCreateSubTask: "Cipta sampel dan jana vektor"
AIProxySmartRouteCreateStart: "Memulakan penciptaan sampel, jumlah {{ .total }}"
AIProxySmartRouteCreateFailed: "[{{ .current }}/{{ .total }}] Penciptaan gagal: type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteCreateSuccess: "[{{ .current }}/{{ .total }}] Berjaya dicipta: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteCreateComplete: "Penciptaan selesai: {{ .success }} berjaya, {{ .failed }} gagal"
AIProxySmartRouteCreateError: "Penciptaan sampel gagal: {{ .failed }} gagal, ralat terakhir"
AIProxySmartRouteRebuildTask: "Bina semula vektor sampel penghalaan pintar get laluan AI"
AIProxySmartRouteRebuildSubTask: "Bina semula vektor sampel"
AIProxySmartRouteEmbeddingRequired: "Endpoint dan model Embedding diperlukan"
AIProxySmartRouteRebuildStart: "Memulakan pembinaan semula vektor sampel, jumlah {{ .total }}"
AIProxySmartRouteRebuildFailed: "[{{ .current }}/{{ .total }}] Pembinaan semula gagal: sampleID={{ .id }} type={{ .type }} label={{ .label }} error={{ .err }}"
AIProxySmartRouteRebuildSuccess: "[{{ .current }}/{{ .total }}] Berjaya dibina semula: sampleID={{ .id }} type={{ .type }} label={{ .label }}"
AIProxySmartRouteRebuildComplete: "Pembinaan semula selesai: {{ .success }} berjaya, {{ .failed }} gagal"
AIProxySmartRouteRebuildError: "Pembinaan semula vektor sampel gagal: {{ .failed }} gagal, ralat terakhir"

# tugas kelompok ejen
BatchInstallAgent: "Pasang ejen secara pukal"
DispatchAgentInstallTasks: "Hantar tugas pemasangan ejen"
BatchUpgradeAgent: "Naik taraf ejen secara pukal"
DispatchAgentUpgradeTasks: "Hantar tugas naik taraf ejen"
BatchAgentInstallDispatchFailed: "Nod {{ .node }} gagal menghantar tugas pemasangan {{ .agentType }} Message: {{ .err }}"
BatchAgentInstallSubmitted: "Nod {{ .node }} berjaya menghantar tugas pemasangan {{ .agentType }}!"
BatchAgentUpgradeDispatchFailed: "Nod {{ .node }} gagal menghantar tugas naik taraf {{ .agentType }} Message: {{ .err }}"
BatchAgentUpgradeAlreadyLatest: "Nod {{ .node }} {{ .agent }} sudah pada versi sasaran, dilangkau"
BatchAgentUpgradeSubmitted: "Nod {{ .node }} berjaya menghantar tugas naik taraf {{ .agent }}!"
BatchAgentUpgradeFailed: "Nod {{ .node }} gagal menghantar tugas naik taraf {{ .agent }} Message: {{ .err }}"
BatchInstallAgentSkill: "Hantar Skill secara pukal"
DispatchAgentSkillInstallTasks: "Hantar tugas pemasangan Skill"
BatchAgentSkillDispatchFailed: "Nod {{ .node }} gagal menghantar {{ .skill }} ke {{ .target }} Message: {{ .err }}"
BatchAgentNoAgentsFound: "Nod {{ .node }} tidak menemui ejen {{ .agentType }}, dilangkau"
BatchAgentSkillSkipped: "Nod {{ .node }} {{ .agent }} dilangkau Message: {{ .msg }}"
BatchAgentSkillInstallSubmitted: "Nod {{ .node }} berjaya menghantar tugas pemasangan {{ .skill }} ke {{ .agent }}!"
BatchAgentSkillInstallFailed: "Nod {{ .node }} gagal menghantar tugas pemasangan {{ .skill }} ke {{ .agent }} Message: {{ .err }}"
BatchAgentOperateDispatchFailed: "Nod {{ .node }} gagal menghantar tugas {{ .operate }} {{ .agentType }} Message: {{ .err }}"
BatchAgentOperateSkipped: "Nod {{ .node }} {{ .agent }} dilangkau Message: {{ .msg }}"
BatchAgentOperateSubmitted: "Nod {{ .node }} berjaya menghantar tugas {{ .operate }} {{ .agent }}!"
BatchAgentOperateFailed: "Nod {{ .node }} gagal menghantar tugas {{ .operate }} {{ .agent }} Message: {{ .err }}"
BatchStartAgent: "Mula ejen secara pukal"
DispatchAgentStartTasks: "Hantar tugas mula ejen"
BatchStopAgent: "Henti ejen secara pukal"
DispatchAgentStopTasks: "Hantar tugas henti ejen"
BatchRestartAgent: "Mula semula ejen secara pukal"
DispatchAgentRestartTasks: "Hantar tugas mula semula ejen"
BatchDeleteAgent: "Padam ejen secara pukal"
DispatchAgentDeleteTasks: "Hantar tugas padam ejen"
AgentOperateStart: "Mula"
AgentOperateStop: "Henti"
AgentOperateRestart: "Mula semula"
AgentOperateDelete: "Padam"

# tugas aplikasi dan kemahiran
PushAppInstallTaskToNode: "Hantar tugas pemasangan aplikasi ke nod [{{ .name }}]"
AppInstallTask: "Tugas pemasangan aplikasi"
PushAppFailed: "Gagal menghantar tugas pemasangan aplikasi"
SkillHubInstallTask: "Pasang kemahiran [{{ .name }}]"
SkillHubInstallToTarget: "Pasang kemahiran [{{ .name }}] ke sasaran [{{ .target }}]"

# pustaka skrip
ScriptLibrary: "Pustaka Skrip"
RemoteScriptLibrary: "Pustaka Skrip Jauh"
ScriptSyncSkip: "Pustaka skrip semasa sudah versi terkini"
DownloadData: "Muat turun fail pustaka skrip data.yaml"
DownloadPackage: "Muat turun pakej pustaka skrip"
AnalyticCompletion: "Analisis selesai, sedang menyegerakkan ke pangkalan data..."

# penyegerakan nod
SyncNode: "Selaraskan data ke nod {{ .name }}"
LocalName: "Nama 'local' hanya digunakan untuk pengenalpastian tempatan sistem"
SyncPackageData: "Pakej data segerak"
SyncPackageEncrypt: "Enkripsi pakej data"
SyncRequest: "Permintaan API segerak nod"
SyncFailedRetry: "Segerakan data nod tamat masa (percubaan ke-{{ .index }}), mencuba semula..."
SyncFailed: "Segerakan gagal, sila segerakkan secara manual dalam senarai nod"
SyncSystemProxy: "Tetapan Proksi Sistem"
SyncScripts: "Pustaka Skrip"
SyncBackupAccounts: "Akaun Sandaran"
SyncAlertSetting: "Tetapan Amaran"
SyncCustomApp: "Aplikasi Tersuai"
SyncLanguage: "Bahasa Sistem"
SyncEdition: "Wilayah Operasi"

# naik taraf nod
NodeUpgrade: "Naik taraf node {{ .name }}"
UpgradeCheck: "Periksa kemas kini nod"
UpgradeCheckLocal: "Nod tempatan tidak menyokong peningkatan kelompok, dilangkau..."
UpgradeCheckLatest: "Nod sudah versi terkini, dilangkau..."
NewSSHClient: "Memulakan sambungan SSH"
BackupBeforeUpgrade: "Menyandarkan data sebelum naik taraf"
UploadUpgradeFile: "Sebarkan fail naik taraf"
RestartAfterUpgrade: "Mulakan perkhidmatan selepas naik taraf"
LoadAutoUpgradeNodesFailed: "Gagal memuatkan nod naik taraf automatik, ralat: {{ .err }}"
AutoUpgradeNodes: "Nod naik taraf automatik: {{ .nodes }}"
UpdateAutoUpgradeNodesStatusFailed: "Gagal mengemas kini status nod naik taraf automatik, ralat: {{ .err }}"

# tambah nod
MasterData: "Data Nod Master"
LoadSftpClient: "Dapatkan Klien SFTP"
PackageMasterData: "Hasilkan pakej sandaran nod master"
UploadBackup: "Muat naik data sandaran"
TaskAddNode: "Tambah nod"
LoadNodeArch: "Dapatkan maklumat seni bina nod"
LoadNodeArchDetail: "Mengesan seni bina nod induk: {{ .local }}, seni bina nod anak: {{ .node }}"
LoadNodeUpgradeDetail: "Menggunakan direktori pemasangan sejarah versi v1: {{ .baseDir }}, port mendengar perkhidmatan: {{ .port }}"
SyncAgentBaseInfo: "Sinkronkan maklumat asas nod"
GenerateSSLInfo: "Cipta maklumat SSL nod"
ConnInfoNotMatch: "Maklumat sambungan tidak sepadan"
MakeAgentPackage: "Cipta pakej pemasangan nod"
SendAgent: "Muat naik pakej pemasangan nod"
StartService: "Mulakan perkhidmatan"
NoBackupNode: "Nod sandaran kosong. Sila pilih nod sandaran untuk disimpan dan cuba lagi"

# penyegerakan fail dan imej nod
LocalNodeIpFailed: "Gagal mendapatkan IP nod induk. Edit nod induk dan tambahkan alamat IP serta maklumat pengesahan SSH."
HandlePrivateKey: "Kendalikan kunci peribadi nod"
HandlePublicKey: "Kendalikan kunci awam nod"
ExchangeFile: "Mulakan penyegerakan {{ .sourcePath }} dari nod {{ .source }} ke nod {{ .dest }}:{{ .destPath }}"
NodeFile: "Fail nod"
ImageSyncTaskName: "Segerakkan {{ .count }} imej"
SSLSyncTaskName: "Segerakkan {{ .count }} sijil"
AppSyncTaskName: "Segerakkan aplikasi {{ .name }}"
SSLSyncToNode: "Hantar sijil [{{ .cert }}] ke nod [{{ .node }}]"
ImageSyncSave: "Simpan imej {{ .image }}"
ImageSyncSaveTags: "Simpan tag imej {{ .tags }}"
ImageSyncToNode: "Segerakkan imej {{ .image }} ke nod {{ .node }}"
ImageSyncLoad: "Muatkan imej {{ .image }} pada nod {{ .node }}"
ImageSyncClean: "Bersihkan fail sementara imej {{ .image }}"
ImageSyncNoTag: "Imej {{ .image }} tidak mempunyai tag dan akan disimpan menggunakan ID imej"
ImageSyncFrontendTagsIgnored: "Tiada tag ditemui untuk imej {{ .image }} pada nod sumber. Tag frontend telah diabaikan."
ImageSyncHandlePrivateKey: "Kendalikan kunci peribadi nod penyegerakan imej"
ImageSyncHandlePublicKey: "Kendalikan kunci awam nod penyegerakan imej"
ImageSyncTransfer: "Mulakan pemindahan fail sementara imej: {{ .source }}:{{ .sourcePath }} -> {{ .dest }}:{{ .destPath }}"

# baris perintah
SudoHelper: "Sila gunakan {{ .cmd }} atau tukar ke pengguna root"
UsernameNeed: "Edisi Enterprise mesti menentukan --username"
DBConnErr: "Ralat: Gagal memulakan sambungan pangkalan data, {{ .err }}"
SystemVersion: "Versi: "
SystemMode: "Mod: "

# baris perintah - aplikasi
AppVersion: "Versi aplikasi"
AppCommands: "Arahan berkaitan aplikasi"
AppInit: "Inisialisasi aplikasi"
AppKeyVal: "Kunci aplikasi (hanya menyokong bahasa Inggeris)"
AppCreateFileErr: "Gagal mencipta fail {{ .name }} {{ .err }}"
AppCreateDirErr: "Gagal mencipta folder {{ .name }} {{ .err }}"
AppMissKey: "Kunci aplikasi hilang, gunakan -k untuk menetapkan"
AppMissVersion: "Versi aplikasi hilang, gunakan -v untuk menetapkan"
AppVersionExist: "Versi sudah wujud"
AppCreateSuccessful: "Ciptaan berjaya"
AppWriteErr: "Penulisan fail {{ .name }} gagal {{ .err }}"

# baris perintah - IP dengar
ListenIPCommands: "Tukar IP mendengar"
ListenIPv4: "Mendengar pada IPv4"
ListenIPv6: "Mendengar pada IPv6"
ListenChangeSuccessful: "Tukar berjaya Kini mendengar pada {{ .value }}"

# baris perintah - tetapan semula
ResetCommands: "Tetapkan semula maklumat sistem"
ResetMFA: "Batal pengesahan dua faktor 1Panel"
ResetHttps: "Batal log masuk HTTPS 1Panel"
ResetEntrance: "Batal pintu masuk keselamatan 1Panel"
ResetIPs: "Batal sekatan IP yang dibenarkan 1Panel"
ResetDomain: "Batal pengikatan domain 1Panel"
ResetPasskey: "Kosongkan passkey 1Panel"

# baris perintah - pengguna
UserList: "Dapatkan senarai pengguna 1Panel"
UserTableName: "Nama"
UserTableMFAStatus: "Status MFA"
UserTableSuperAdmin: "Pentadbir Super"
UserTableCreatedAt: "Dicipta Pada"
UserEmptyList: "Tiada pengguna ditemui"
UserInfo: "Dapatkan maklumat panel"
UserInfoAddr: "Alamat panel: "
UserInfoPassHelp: "Petua: Untuk menukar kata laluan, anda boleh menjalankan arahan: "

# baris perintah - pulih
RestoreCommands: "Rollback perkhidmatan dan data 1Panel"
RestoreNoSuchFile: "Tiada fail rollback ditemui"
RestoreStep1: "(1/5) Memulakan rollback perkhidmatan dan data 1Panel daripada direktori {{ .name }}..."
RestoreStep2: "(2/5) Rollback binari 1Panel berjaya"
RestoreStep3: "(3/5) Rollback skrip 1Panel berjaya"
RestoreStep4: "(4/5) Rollback perkhidmatan 1Panel berjaya"
RestoreStep5: "(5/5) Rollback data 1Panel berjaya"
RestoreSuccessful: "Rollback berjaya. Dikembalikan ke {{ .version }}. Perkhidmatan sedang dimulakan semula..."

# baris perintah - kemas kini
UpdateCommands: "Kemas kini maklumat panel"
UpdateUser: "Kemas kini maklumat pengguna"
UpdatePassword: "Kemas kini kata laluan pengguna"
UpdatePort: "Kemas kini port panel"
UpdateUserNull: "Ralat: Pengguna kosong"
UpdateUserBlank: "Ralat: Pengguna mengandungi ruang kosong"
UpdateUserFormat: "Ralat: Format pengguna tidak sah Hanya menyokong huruf Inggeris, Cina, nombor, dan _, dengan panjang 3-30 aksara"
UpdateUserErr: "Ralat: Gagal mengemas kini pengguna, {{ .err }}"
UpdateSuccessful: "Kemas kini berjaya"
UpdateUserResult: "Pengguna: {{ .name }}"
UpdatePasswordRead: "Ralat: Gagal membaca maklumat kata laluan pengguna, {{ .err }}"
UpdatePasswordNull: "Ralat: Kata laluan pengguna kosong"
UpdateUPasswordBlank: "Ralat: Kata laluan pengguna mengandungi ruang kosong"
UpdatePasswordFormat: "Ralat: Kata laluan pengguna hanya menyokong huruf, nombor, dan aksara khas (@#$%*_,.?), dengan panjang 8-30 aksara."
UpdatePasswordLen: "Ralat: Sila masukkan kata laluan lebih panjang daripada 6 aksara"
UpdatePasswordRe: "Sahkan kata laluan:"
UpdatePasswordErr: "Ralat: Gagal mengemas kini kata laluan pengguna, {{ .err }}"
UpdatePasswordSame: "Ralat: Kedua-dua kata laluan tidak sepadan, sila semak dan cuba lagi"
UpdatePasswordResult: "Kata laluan pengguna: {{ .name }}"
UpdatePortFormat: "Ralat: Nombor port yang dimasukkan mesti antara 1 hingga 65535"
UpdatePortUsed: "Ralat: Nombor port sudah digunakan, sila semak dan cuba lagi"
UpdatePortErr: "Ralat: Gagal mengemas kini port panel, {{ .err }}"
UpdatePortResult: "Port Panel: {{ .name }}"
UpdatePortFirewallAdd: "Gagal menambah peraturan port firewall, {{ .err }}, sila tambah port {{ .name }} secara manual ke dalam peraturan firewall."
UpdatePortFirewallDel: "Ralat: Gagal memadam port firewall, {{ .err }}"
UpdatePortFirewallReload: "Gagal memuat semula firewall, {{ .err }}, sila muat semula firewall secara manual."

# aplikasi mudah alih
ErrVerifyToken: "Ralat pengesahan token, sila tetapkan semula dan imbas semula"
ErrInvalidToken: "Token tidak sah, sila tetapkan semula dan imbas semula"
ErrExpiredToken: "Token telah tamat tempoh, sila tetapkan semula dan imbas semula"

# eksport perintah
Name: "Nama"
Command: "Arahan"

# LDAP
ErrLDAPConnectionTest: "Ujian sambungan LDAP gagal. Semak alamat pelayan, akaun pengikatan dan tetapan rangkaian."
ErrLDAPLoginTest: "Ujian log masuk LDAP gagal. Semak nama pengguna dan kata laluan."
LDAPConnectionTestSuccess: "Ujian sambungan LDAP berjaya."
ErrLDAPDirectorySearch: "Gagal membaca pengguna LDAP. Semak tetapan sambungan dan carian."
ErrLDAPConfigLoad: "Gagal memuatkan konfigurasi LDAP."
ErrLDAPConfigSave: "Gagal menyimpan konfigurasi LDAP."
ErrLDAPURLInvalid: "Alamat pelayan LDAP mesti menggunakan ldap:// atau ldaps:// dan mengandungi hos yang sah."
ErrLDAPBindDNRequired: "DN pengikatan diperlukan."
ErrLDAPBindPasswordRequired: "Kata laluan pengikatan diperlukan."
ErrLDAPUserOURequired: "OU pengguna diperlukan."
ErrLDAPConnectTimeoutRange: "Had masa sambungan mestilah antara 1 hingga 120 saat."
ErrLDAPSearchPageSizeRange: "Saiz halaman pertanyaan LDAP mestilah antara 1 hingga 10000."
ErrLDAPResultPageSizeRange: "Saiz halaman hasil tidak boleh melebihi 200."
ErrLDAPAttributeMapOnlyName: "Pemetaan atribut hanya menyokong medan name."
ErrLDAPNameAttributeRequired: "Atribut LDAP yang dipetakan kepada name diperlukan."
ErrLDAPAttributeNameInvalid: "Pemetaan atribut mengandungi nama atribut LDAP yang tidak sah."
ErrLDAPUserFilterRequired: "Penapis pengguna diperlukan."
ErrLDAPUserFilterInvalid: "Penapis pengguna bukan penapis LDAP yang sah."
ErrLDAPAttributeMapObject: "Pemetaan atribut mestilah objek JSON yang sah."
ErrLDAPImportModeInvalid: "Mod import mestilah pengguna terpilih atau semua pengguna."
ErrLDAPImportSelectionRequired: "Pilih sekurang-kurangnya seorang pengguna LDAP untuk diimport."
ErrLDAPImportSelectionInvalid: "Pengguna LDAP yang dipilih tidak sah atau tidak lagi wujud. Baca semula direktori."
ErrLDAPConfigChanged: "Konfigurasi LDAP telah berubah. Baca semula direktori dan pratonton import sekali lagi."
ErrLDAPRoleRequired: "Pilih peranan untuk pengguna LDAP baharu."
ErrLDAPImportPlanIncomplete: "Pelan import LDAP yang tidak lengkap tidak boleh dilaksanakan."
ErrLDAPQueryTokenInvalid: "Hasil pertanyaan LDAP telah tamat tempoh. Baca semula direktori."
ErrLDAPPlanTokenInvalid: "Pratonton import LDAP telah tamat tempoh. Pratonton semula import."
ErrLDAPOperationFailed: "Operasi LDAP gagal. Cuba lagi."
ErrLDAPEntryIdentityMissing: "Entri LDAP tiada ID stabil atau nama pengguna."
ErrLDAPDuplicateExternalID: "LDAP mengembalikan ID pengguna yang berulang."
ErrLDAPUsernameConflict: "Nama pengguna telah digunakan oleh pengguna lain."
ErrLDAPUsernameSourceConflict: "Nama pengguna telah digunakan oleh pengguna tempatan atau sumber pengesahan lain."
ErrLDAPUsernameConcurrentConflict: "Nama pengguna telah diambil oleh pengguna lain semasa import."
ErrLDAPLocalCredentialsReadonly: "Nama pengguna dan kata laluan LDAP diurus oleh LDAP dan tidak boleh diubah secara tempatan."
ErrLDAPPasswordExpirationUnsupported: "Pengguna LDAP tidak menggunakan dasar tamat tempoh kata laluan tempatan."
ErrLDAPSyncSourceDisabled: "Dayakan AD/LDAP sebelum mendayakan atau menjalankan penyegerakan."
ErrLDAPSyncConfigSave: "Gagal menyimpan tetapan penyegerakan LDAP."
ErrLDAPSyncSchedule: "Gagal mengemas kini jadual penyegerakan LDAP."
ErrLDAPSyncCronInvalid: "Masukkan ungkapan Cron lima medan yang sah."
ErrLDAPSyncWeekdayInvalid: "Pilih hari dalam minggu yang sah."
ErrLDAPSyncCronRequired: "Masukkan ungkapan Cron."
ErrLDAPSyncScheduleTypeInvalid: "Pilih jenis jadual penyegerakan yang sah."
ErrLDAPSyncTimeInvalid: "Masukkan masa pelaksanaan yang sah."
ErrLDAPSyncRunning: "Tugas penyegerakan LDAP sedang berjalan."
ErrLDAPSyncDirectoryIncomplete: "LDAP mengembalikan hasil pertanyaan penuh yang tidak lengkap. Tiada status pengguna diubah."
ErrLDAPSyncFailed: "Penyegerakan pengguna LDAP gagal."
LDAPSyncSuccess: "Penyegerakan pengguna LDAP berjaya diselesaikan."
ErrSAML2NotEnabled: "Pengesahan SAML2 tidak didayakan."
ErrSAML2ConfigInvalid: "Konfigurasi SAML2 tidak sah."
ErrSAML2ConfigChanged: "Konfigurasi SAML2 telah berubah. Mulakan pengesahan sekali lagi."
ErrSAML2PanelOriginMissing: "Masukkan URL awam 1Panel yang sah dan hanya mengandungi skema, hos serta port pilihan."
ErrSAML2MetadataInvalid: "Metadata IdP tiada atau tidak sah."
ErrSAML2MetadataURLInvalid: "URL metadata IdP atau titik akhir dalam metadata tidak dibenarkan."
ErrSAML2MetadataFetch: "Gagal memuatkan metadata IdP."
ErrSAML2MetadataCertificate: "Metadata IdP tidak mengandungi sijil tandatangan yang boleh digunakan."
ErrSAML2KeyPairInvalid: "Kunci peribadi dan sijil SP tidak sah atau tidak sepadan."
ErrSAML2NameAttributeMissing: "Atribut nama pengguna SAML2 yang dikonfigurasikan tiada atau tidak sah."
ErrSAML2DefaultRoleInvalid: "Peranan lalai yang dikonfigurasikan untuk SAML2 tidak tersedia."
ErrSAML2SLOUnavailable: "IdP tidak menyediakan perkhidmatan Single Logout yang disokong."
ErrSAML2TestExpired: "Ujian SAML2 telah tamat tempoh. Jalankan sekali lagi."
ErrSAML2LoginExpired: "Permintaan log masuk SAML2 telah tamat tempoh. Cuba lagi."
ErrSAML2InvalidState: "Keadaan log masuk SAML2 tidak sah atau telah digunakan."
ErrSAML2RequestBuild: "Gagal membina permintaan SAML2."
ErrSAML2ResponseInvalid: "Respons SAML2 tidak sah."
ErrSAML2SignatureInvalid: "Tandatangan SAML2 tidak sah."
ErrSAML2Replay: "Mesej SAML2 telah digunakan."
ErrSAML2NameIDMissing: "NameID SAML2 tiada atau tidak sah."
ErrSAML2SessionIndexMissing: "SessionIndex SAML2 tiada atau tidak sah."
ErrSAML2NameConflictLocal: "Nama pengguna SAML2 bercanggah dengan pengguna setempat."
ErrSAML2NameConflictLDAP: "Nama pengguna SAML2 bercanggah dengan pengguna LDAP."
ErrSAML2NameConflictOIDC: "Nama pengguna SAML2 bercanggah dengan pengguna OIDC."
ErrSAML2NameConflictSAML2: "Nama pengguna SAML2 bercanggah dengan identiti SAML2 lain."
ErrSAML2Internal: "Ralat dalaman berlaku semasa pengesahan SAML2. Cuba lagi kemudian."
ErrSAML2LogoutExpired: "Permintaan log keluar SAML2 telah tamat tempoh."
ErrSAML2LogoutInvalid: "Mesej log keluar SAML2 tidak sah."
ErrSAML2LocalCredentialsReadonly: "Nama pengguna dan kata laluan SAML2 diurus oleh penyedia identiti dan tidak boleh diubah secara setempat."
ErrSAML2PasswordExpirationUnsupported: "Pengguna SAML2 tidak menggunakan dasar tamat tempoh kata laluan setempat."
