# ralat asas
ErrInvalidParams: 'Permintaan tidak sah: {{ .detail }}'
ErrMcpGatewayArgsParse: 'Format argumen tersuai MCP tidak sah'
ErrMcpGatewayArgsConflict: 'Argumen {{ .name }} diurus oleh 1Panel dan tidak boleh ditetapkan dalam argumen tersuai'
ErrTokenParse: 'Token tidak sah: {{ .detail }}'
ErrInitialPassword: 'Kata laluan asal salah'
ErrInternalServer: 'Ralat pelayan: {{ .detail }}'
ErrRecordExist: 'Rekod sudah wujud'
ErrRecordNotFound: 'Rekod tidak ditemui'
WafLogExport: 'Eksport log WAF'
MonitorLogExport: 'Eksport log pemantauan laman web'
LogExportNoData: 'Tiada log yang sepadan dengan penapis dipilih'
LogExportDiskSpace: 'Ruang tersedia kurang daripada 1 GiB; eksport dihentikan'
LogExportRetentionInvalid: 'Tempoh simpanan rekod eksport mestilah antara 1 hingga 30 hari'
ErrSystemLogKeywordFilterUnsupported: 'Versi sistem semasa tidak menyokong penapisan kata kunci log sistem (memerlukan systemd 237 atau lebih baharu)'
ErrStructTransform: 'Ralat penukaran: {{ .err }}'
ErrNotSupportType: 'Jenis tidak disokong: {{ .name }}'

# AI fail
ErrFileAINotEnabled: 'Carian AI fail dimatikan atau tiada akaun. Dalam Pengurusan Fail, gunakan Akaun AI, aktifkan dan pilih akaun.'
ErrFileAISearchBadPattern: 'Corak carian tidak sah (regex dsb.): {{ .detail }}'
FileAISearchEmptyDir: 'Tiada fail atau direktori di bawah laluan ini (atau semua ditapis).'

# muat turun jauh
ErrWgetRemoteFailed: 'Muat turun jauh gagal atau URL tidak boleh diakses: {{ .detail }}'
ErrWgetInvalidContentType: 'URL jauh tidak mengembalikan fail (mungkin halaman ralat), {{ .detail }}'
ErrWgetProxyNotConfigured: 'Sila konfigurasikan pelayan proksi dalam tetapan panel dahulu'
ErrWgetProxyInvalid: 'Alamat pelayan proksi tidak sah: {{ .detail }}'

# log masuk dan keselamatan
ErrNotLogin: 'Belum log masuk: {{ .detail }}'
ErrPasswordExpired: 'Kata laluan tamat: {{ .detail }}'

# permintaan dan API
ErrProxy: 'Permintaan gagal: {{ .detail }}'
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 }}'
ErrCreateHttpClient: 'Gagal membuat permintaan {{ .err }}'
ErrHttpReqTimeOut: 'Permintaan tamat masa {{ .err }}'
ErrHttpReqFailed: 'Permintaan gagal {{ .err }}'
ErrNoSuchHost: 'Tidak dapat mencari pelayan yang diminta {{ .err }}'
ErrHttpReqNotFound: 'Sumber yang diminta {{ .err }} tidak dapat ditemui'

# lompat pantas
ErrMinQuickJump: 'Tambah sekurang-kurangnya satu pintasan pantas'
ErrMaxQuickJump: 'Maksimum 4 pintasan pantas'

# umum
ErrShutDown: 'Arahan diberhentikan manual'
ErrUsernameIsExist: 'Nama pengguna sudah wujud'
ErrNameIsExist: 'Nama sudah wujud'
ErrDemoEnvironment: 'Tidak tersedia dalam demo'
ErrCmdTimeout: 'Arahan tamat masa'
ErrCmdIllegal: 'Arahan ada aksara tidak sah'
ErrPortExist: 'Port {{ .port }} sudah digunakan oleh {{ .type }} [{{ .name }}]'
TYPE_APP: 'Aplikasi'
TYPE_RUNTIME: 'Persekitaran masa jalan'
TYPE_DOMAIN: 'Nama Domain'
ErrTypePort: 'Format ''Port {{ .name }} tidak betul'''
ErrTypePortRange: 'Julat port perlu antara 1-65535'
Success: 'Kejayaan'
Failed: 'Gagal'
SystemRestart: 'Tugas terganggu kerana sistem mula semula'
ErrGroupIsDefault: 'Kumpulan lalai, tidak boleh dipadamkan'
ErrGroupIsInWebsiteUse: 'Kumpulan sedang digunakan oleh tapak web lain dan tidak boleh dipadamkan.'
Decrypt: 'Dekripsi'

# ejen
ErrAgentAccountBound: 'Akaun terikat kepada ejen'
ErrTerminalAIAccountInUse: 'Akaun model ini sedang digunakan oleh Terminal AI. Tukar akaun dalam tetapan Terminal AI atau nyahaktifkan Terminal AI, kemudian cuba lagi.'
ErrFileAIAccountInUse: 'Akaun model ini sedang digunakan oleh AI pengurusan fail. Tukar akaun dalam tetapannya atau nyahaktifkan AI tersebut, kemudian cuba lagi.'
ErrAgentAccountUnavailable: 'Sambungan akaun tidak tersedia: {{ .err }}'
ErrAgentProviderNotSupported: 'Penyedia ejen tidak disokong'
ErrAgentAccountRequired: 'Pilih akaun ejen terlebih dahulu'
ErrAgentAccountNotVerified: 'Akaun ejen belum disahkan'
ErrAgentAccountModelsRequired: 'Sila konfigur sekurang-kurangnya satu model'
ErrAgentAccountSingleInitialModel: 'Hanya satu model awal boleh dikonfigurasi semasa mencipta akaun'
ErrAgentModelNotInAccount: 'Model tidak dikonfigurasikan dalam akaun yang dipilih'
ErrAgentVerifyModelInUse: 'Model ini digunakan untuk mengesahkan akaun. Pilih model pengesahan lain sebelum memadamkannya'
ErrAgentFallbackModelDuplicate: 'Model fallback tidak boleh berulang'
ErrAgentFallbackModelPrimary: 'Model fallback tidak boleh sama dengan model utama'
ErrAgentModelInUse: 'Masih ada ejen terikat yang menggunakan model ini: {{ .name }}'
ErrAgentBaseURLRequired: 'URL asas diperlukan'
ErrAgentApiKeyRequired: 'Kunci API diperlukan'
ErrAgentComposeRequired: 'Kandungan compose diperlukan'
ErrAgentIDRequired: 'ID ejen diperlukan'
ErrAgentAccountIDRequired: 'ID akaun diperlukan'
ErrAgentLimitReached: 'Edisi Community menyokong sehingga {{ .max }} ejen AI. Naik taraf ke Edisi Business untuk penggunaan tanpa had'
ErrAgentWebsiteBound: 'Ejen ini sudah dipautkan ke laman web'
ErrAgentWebsiteTypeUnsupported: 'Hanya laman web proxy atau statik boleh dipautkan'
ErrAgentWebsiteInUse: 'Laman web ini sudah dipautkan ke ejen lain'
ErrAgentWebsiteUnbindUnsupported: 'Laman web one-click deployment tidak menyokong nyahikat manual'
ErrQwenPawAuthRequest: 'Gagal mengemas kini kelayakan QwenPaw: {{ .err }}'
ErrQwenPawAuthOutOfSync: 'Kelayakan QwenPaw semasa tidak sepadan dengan rekod 1Panel. Tetapkan semula kata laluan QwenPaw atau pulihkan kelayakan dalam fail .env aplikasi'
ErrQwenPawAuthDisabled: 'Pengesahan log masuk belum didayakan dalam QwenPaw'
ErrHermesPairingCodeUnavailable: 'Kod pasangan buat sementara waktu tidak wujud dalam Hermes, mungkin disebabkan masalah rangkaian. Sila cuba lagi sebentar nanti.'
ErrHermesFeishuGroupAllowlistRequiresAllowlist: 'Apabila dasar kumpulan Feishu ialah senarai benarkan, dasar DM tidak boleh menggunakan kod pasangan.'

# sandaran dan tetapan amaran
Localhost: 'Mesin Tempatan'
ErrBackupInUsed: 'Akaun sandaran sedang digunakan oleh tugas'
ErrBackupCheck: 'Ujian sambungan gagal: {{ .err }}'
ErrBackupLocalDelete: 'Tidak boleh padam sandaran tempatan'
ErrBackupLocalCreate: 'Tidak boleh buat sandaran tempatan'
ErrAlertConfigInUse: 'Konfigurasi amaran sedang digunakan dan tidak boleh dipadamkan'
ErrAlertConfigPhoneExist: 'Nombor telefon sudah wujud'

# aplikasi
ErrPortInUsed: 'Port {{ .detail }} sudah diduduki'
ErrAppLimit: 'Bilangan aplikasi yang dipasang telah melebihi had'
ErrNotInstall: 'Aplikasi tidak dipasang'
ErrPortInOtherApp: 'Port {{ .port }} sudah diduduki oleh aplikasi {{ .apps }}'
ErrDbUserNotValid: 'Pangkalan data sedia ada, nama pengguna dan kata laluan tidak sepadan'
ErrMysqlUserUsedByApps: 'Pengguna pangkalan data ini sedang digunakan oleh [{{ .detail }}]; hosnya tidak boleh diubah, dan pengguna ini tidak boleh dipadamkan atau dibatalkan kebenarannya'
ErrUpdateBuWebsite: 'Aplikasi telah berjaya dikemas kini, tetapi pengubahsuaian fail konfigurasi tapak web gagal. Sila semak konfigurasi'
Err1PanelNetworkFailed: 'Pembuatan rangkaian kontena lalai gagal {{ .detail }}'
ErrFileParse: 'Penghuraian fail karang docker aplikasi gagal'
ErrInstallDirNotFound: 'Direktori pemasangan tidak wujud. Jika anda perlu menyahpasang, sila pilih Paksa Nyahpasang'
AppStoreIsUpToDate: 'Gedung aplikasi sudah pun versi terkini'
LocalAppVersionNull: 'Aplikasi ''{{ .name }} tidak disegerakkan ke versi Tidak dapat menambah pada senarai apl'''
LocalAppVersionErr: '{{ .name }} versi penyegerakan {{ .version }} gagal {{ .err }}'
ErrFileNotFound: 'Fail {{ .name }} tidak wujud'
ErrFileParseApp: '{{ .name }} penghuraian fail gagal {{ .err }}'
ErrAppDirNull: 'Folder versi tidak wujud'
LocalAppErr: 'Penyegerakan {{ .name }} aplikasi gagal {{ .err }}'
ErrContainerName: 'Nama kontena sudah wujud'
ErrContainerNotFound: 'Bekas {{ .name }} tidak wujud'
ErrContainerMsg: 'Bekas ''{{ .name }} adalah tidak normal. Sila semak log pada halaman kontena untuk butiran'''
ErrAppBackup: '{{ .name }} sandaran aplikasi gagal {{ .err }}'
ErrVersionTooLow: 'Versi 1Panel semasa terlalu rendah untuk mengemas kini App Store. Sila tingkatkan versi sebelum beroperasi.'
ErrAppNameExist: 'Nama aplikasi sudah wujud'
ErrAppInstallNameExist: 'Nama pemasangan aplikasi {{ .name }} sudah wujud'
AppStoreIsSyncing: 'App Store sedang menyegerak, sila cuba sebentar lagi'
ErrGetCompose: 'Gagal mendapatkan fail docker-compose.yml {{ .detail }}'
ErrComposeProjectNameParse: 'Gagal menghurai nama projek daripada output konfigurasi Docker Compose: {{ .detail }}'
ErrComposeProjectNameEmpty: 'Nama projek tidak dapat diperoleh daripada konfigurasi Docker Compose atau direktori induk fail. Masukkan nama dan cuba lagi.'
ErrComposeNameInvalid: 'Nama projek Compose tidak sah: mesti bermula dengan huruf kecil atau nombor, hanya mengandungi huruf kecil, nombor, tanda sempang dan garis bawah, serta sepanjang 1-256 aksara.'
ErrAppVersionUnavailable: 'Versi aplikasi ini telah dialih keluar daripada perkhidmatan jauh. Sila pilih versi lain dan cuba lagi.'
ErrAppWarn: 'Status tidak normal, sila semak log'
ErrAppParamKey: 'Parameter {{ .name }} medan tidak normal'
ErrAppUpgrade: 'Peningkatan {{ .name }} aplikasi gagal {{ .err }}'
AppRecover: 'Aplikasi tarik balik {{ .name }}'
PullImageStart: 'Mula tarik imej [{{ .name }}]'
PullImageSuccess: 'Tarik imej berjaya'
AppStoreSyncSuccess: 'Penyegerakan App Store berjaya'
SyncAppDetail: 'Segerakkan konfigurasi aplikasi'
AppVersionNotMatch: 'Aplikasi {{ .name }} memerlukan versi 1Panel yang lebih tinggi, melangkau penyegerakan'
MoveSiteDir: 'Perubahan direktori laman web didapati. Perlu memindahkan direktori laman web OpenResty ke {{ .name }}'
MoveSiteDirSuccess: 'Penghijrahan direktori tapak web yang berjaya'
DeleteRuntimePHP: 'Padam masa jalan PHP'
CustomAppStoreFileValid: 'Pakej gedung apl perlu dalam format.tar.gz'
PullImageTimeout: 'Tarik tamat masa imej, sila cuba tingkatkan pecutan imej atau tukar kepada pecutan imej lain'
ErrAppIsDown: 'Status permohonan {{ .name }} tidak normal, sila semak'
ErrCustomApps: 'Ada aplikasi yang dipasang, sila nyahpasangnya dahulu'
ErrCustomRuntimes: 'Terdapat persekitaran masa jalan yang dipasang, sila padamkannya dahulu'
ErrAppVersionDeprecated: 'Aplikasi {{ .name }} tidak sesuai dengan versi 1Panel saat ini, dilewati'
ErrDockerFailed: 'Keadaan Docker tidak normal, sila periksa status perkhidmatan'
ErrDockerComposeCmdNotFound: 'Perintah Docker Compose tidak wujud, sila pasang perintah ini di mesin tuan terlebih dahulu'
UseExistImage: 'Imej sudah wujud, menggunakan imej sedia ada'
UpgradePrepare: 'Sediakan naik taraf aplikasi'
UpgradeStop: 'Hentikan aplikasi asal'
UpgradeWaitReady: 'Tunggu aplikasi sedia'
UpgradeBackupDisabled: 'Sandaran naik taraf dilumpuhkan; perubahan data oleh skrip naik taraf tidak dapat diundur sepenuhnya'
UpgradeRollbackFailed: 'Undur gagal'
ErrDatabaseNotFound: 'Pangkalan data {{ .name }} tidak wujud'

# SSH
ExportIP: 'IP Log Masuk'
ExportArea: 'Lokasi'
ExportPort: 'Nombor port'
ExportAuthMode: 'Kaedah Log Masuk'
ExportUser: 'Pengguna'
ExportStatus: 'Status Log Masuk'
ExportDate: 'Masa'

# fail
ErrFileCanNotRead: 'Fail ini tidak menyokong pratonton'
ErrSensitiveFileRead: 'Membaca fail sensitif tidak dibenarkan'
ErrFileToLarge: 'Fail lebih besar daripada 10M dan tidak boleh dibuka'
ErrPathNotFound: 'Direktori tidak wujud'
ErrMovePathFailed: 'Laluan sasaran tidak boleh mengandungi laluan asal'
ErrLinkPathNotFound: 'Laluan sasaran tidak wujud'
ErrFileIsExist: 'Fail atau folder sudah wujud'
ErrFileUpload: '{{ .name }} gagal memuat naik fail {{ .detail }}'
ErrFileDownloadDir: 'Folder muat turun tidak disokong'
ErrFileSharePath: 'Laluan fail tidak sah atau sasaran bukan fail'
ErrFileShareInvalid: 'Pautan kongsi tidak sah atau telah tamat tempoh'
ErrFileShareExpired: 'Pautan kongsi telah tamat tempoh'
ErrFileSharePassword: 'Kata laluan kongsi tidak betul'
ErrFileShareExhausted: 'Had muat turun untuk kongsi ini telah dicapai'
ErrFileSharePasswordPolicy: 'Kata laluan mestilah sekurang-kurangnya 4 aksara'
ErrFileShareRateLimit: 'Terlalu banyak permintaan, sila cuba lagi kemudian'
ErrCmdNotFound: 'Arahan {{ .name }} tidak wujud, sila pasang arahan ini pada hos dahulu'
ErrSourcePathNotFound: 'Direktori sumber tidak wujud'
ErrFavoriteExist: 'Laluan ini telah digemari'
ErrInvalidChar: 'Aksara haram tidak dibenarkan'
ErrPathNotDelete: 'Direktori yang dipilih tidak boleh dipadamkan'
ErrLogFileToLarge: 'Fail log melebihi 500MB dan tidak boleh dibuka'
FileDropFailed: 'Gagal membersihkan fail {{ .name }}: {{ .err }}'
FileDropSuccess: 'Berjaya membersihkan fail {{ .name }}, {{ .count }} fail dibersihkan, {{ .size }} ruang cakera dibebaskan'
FileDropSum: 'Pembersihan fail selesai, sejumlah {{ .count }} fail dibersihkan, sejumlah {{ .size }} ruang cakera dibebaskan'
ErrBadDecrypt: 'Kata laluan penyahsulitan pakej termampat salah, penyahmampatan gagal, sila periksa dan cuba lagi'

# laman web
ErrAliasIsExist: 'Alias sudah wujud'
ErrBackupMatch: 'Fail sandaran tidak sepadan dengan beberapa data tapak web semasa {{ .detail }}'
ErrBackupExist: 'Bahagian sepadan data sumber dalam fail sandaran tidak wujud {{ .detail }}'
ErrPHPResource: 'Persekitaran operasi tempatan tidak menyokong penukaran'
ErrPathPermission: 'Folder dengan keizinan bukan 1000:1000 telah dikesan dalam direktori indeks, yang mungkin menyebabkan ralat dinafikan Akses pada tapak web. Sila klik butang Simpan di atas'
ErrDomainIsUsed: 'Nama domain telah digunakan oleh tapak web [{{ .name }}]'
ErrDomainFormat: 'Format nama domain {{ .name }} tidak betul'
ErrDefaultAlias: 'lalai ialah kod simpanan, sila gunakan kod lain'
ErrParentWebsite: 'Anda perlu memadamkan subtapak {{ .name }} dahulu'
ErrBuildDirNotFound: 'Direktori binaan tidak wujud'
ErrImageNotExist: 'Imej persekitaran operasi {{ .name }} tidak wujud, sila edit semula persekitaran pengendalian'
ErrProxyIsUsed: 'Pengimbang beban telah digunakan oleh pengganti terbalik, tidak boleh dipadamkan'
ErrSSLValid: 'Fail sijil bermasalah, sila periksa status sijil'
ErrWebsiteDir: 'Sila pilih direktori dalam direktori laman web.'
ErrComposerFileNotFound: 'Fail composer.json tidak wujud'
ErrRuntimeNoPort: 'Persekitaran runtime tidak diset dengan port, sila edit persekitaran runtime terlebih dahulu.'
ErrRuntimeProjectDirContainsCodeDir: 'Direktori runtime mengandungi direktori projek yang dipilih. Sila pilih direktori projek lain dan cipta semula.'
Status: 'Keadaan'
start: 'Mulakan'
stop: 'Berhenti'
restart: 'Mulakan Semula'
kill: 'Hentikan Paksa'
pause: 'Jeda'
unpause: 'Sambung Semula'
remove: 'Padam'
delete: 'Padam'
ErrDefaultWebsite: 'Laman web lalai telah ditetapkan, sila batalkan sebelum menetapkan'
SSL: 'Sijil'
Set: 'Tetapan'

# sijil SSL
ErrSSLCannotDelete: 'Sijil {{ .name }} sedang digunakan oleh tapak web dan tidak boleh dipadamkan'
ErrAccountCannotDelete: 'Akaun dikaitkan dengan sijil dan tidak boleh dipadamkan'
ErrSSLApply: 'Pembaharuan sijil berjaya, muat semula openresty gagal, sila semak konfigurasi'
ErrEmailIsExist: 'Peti mel sudah wujud'
ErrSSLKeyNotFound: 'Fail kunci peribadi tidak wujud'
ErrSSLCertificateNotFound: 'Fail sijil tidak wujud'
ErrSSLKeyFormat: 'Pengesahan fail kunci peribadi gagal'
ErrSSLCertificateFormat: 'Format fail sijil tidak betul, sila gunakan format pem'
ErrEabKidOrEabHmacKeyCannotBlank: 'EabKid atau EabHmacKey tidak boleh kosong'
ErrOpenrestyNotFound: 'Mod HTTP memerlukan OpenResty dipasang terlebih dahulu'
ApplySSLStart: 'Mula memohon sijil, nama domain [{{ .domain }}] kaedah permohonan [{{ .type }}]'
dnsAccount: 'DNS automatik'
dnsManual: 'Manual DNS'
http: 'HTTP'
ApplySSLFailed: 'Permohonan untuk sijil [{{ .domain }}] gagal, {{ .detail }}'
ApplySSLSuccess: 'Berjaya memohon sijil [{{ .domain }}]'
DNSAccountName: 'Akaun DNS [{{ .name }}] vendor [{{ .type }}]'
PushDirLog: 'Sijil ditolak ke direktori [{{ .path }}] {{ .status }}'
ErrDeleteCAWithSSL: 'Organisasi semasa mempunyai sijil yang telah dikeluarkan dan tidak boleh dipadamkan.'
ErrDeleteWithPanelSSL: 'Konfigurasi SSL Panel menggunakan sijil ini dan tidak boleh dipadamkan'
ErrDefaultCA: 'Pihak berkuasa lalai tidak boleh dipadamkan'
ApplyWebSiteSSLLog: 'Mula memperbaharui sijil tapak web {{ .name }}'
ErrUpdateWebsiteSSL: '{{ .name }} kemas kini sijil tapak web gagal: {{ .err }}'
ApplyWebSiteSSLSuccess: 'Berjaya kemas kini sijil tapak web'
ErrExecShell: 'Gagal melaksanakan skrip {{ .err }}'
ExecShellStart: 'Mula melaksanakan skrip'
ExecShellSuccess: 'Pelaksanaan skrip berjaya'
StartUpdateSystemSSL: 'Mula mengemas kini sijil sistem'
UpdateSystemSSLSuccess: 'Berjaya kemas kini sijil sistem'
ErrWildcardDomain: 'Tidak dapat memohon sijil nama domain kad bebas dalam mod HTTP'
ErrApplySSLCanNotDelete: 'Sertifikat {{ .name }} yang sedang diajukan tidak dapat dihapus, sila cuba lagi kemudian.'
StartPushSSLToNode: 'Mula menolak sijil ke nod'
PushSSLToNodeFailed: 'Gagal menolak sijil ke nod: {{ .err }}'
PushSSLToNodeSuccess: 'Berjaya menolak sijil ke nod'

# MySQL
ErrUserIsExist: 'Pengguna semasa sudah wujud, sila masukkan semula'
ErrDatabaseIsExist: 'Pangkalan data semasa sudah wujud, sila masukkan semula'
ErrExecTimeOut: 'Pelaksanaan SQL tamat masa, sila semak pangkalan data'
ErrRemoteExist: 'Pangkalan data jauh sudah wujud dengan nama ini, sila ubah suainya dan cuba lagi'
ErrLocalExist: 'Nama sudah wujud dalam pangkalan data tempatan, sila ubah suai dan cuba lagi'
RemoteBackup: 'Untuk menyandarkan pangkalan data jauh, perkhidmatan pangkalan data bekas tempatan perlu dimulakan terlebih dahulu menggunakan imej {{ .name }}, sila tunggu...'
RemoteRecover: 'Untuk memulihkan pangkalan data jauh, perkhidmatan pangkalan data bekas tempatan perlu dimulakan terlebih dahulu menggunakan imej {{ .name }}, sila tunggu...'
Arg: 'Hujah'

# Redis
ErrTypeOfRedis: 'Jenis fail pemulihan tidak sepadan dengan kaedah kegigihan semasa, sila ubah suai dan cuba lagi'

# bekas
ErrInUsed: '{{ .detail }} sedang digunakan dan tidak boleh dipadam'
ErrObjectInUsed: 'Objek ini sedang digunakan dan tidak boleh dipadam'
ErrObjectBeDependent: 'Imej ini digantungkan oleh imej lain dan tidak boleh dipadam'
ErrPortRules: 'Nombor port tidak sepadan, sila masukkan semula'
ErrPgImagePull: 'Tarikh imej tamat masa, sila konfigurasikan pecutan imej atau tarik imej {{ .name }} secara manual dan cuba lagi'
PruneHelper: 'Pembersihan ini {{ .name }} membebaskan ruang cakera {{ .size }}'
ImageRemoveHelper: 'Padam imej {{ .name }}, membebaskan {{ .size }} ruang cakera'
BuildCache: 'Cache binaan'
Volume: 'Jilid storan'
Network: 'Rangkaian'
PruneStart: 'Pembersihan sedang dijalankan, sila tunggu...'
ContainerBackupPrepare: 'Sediakan ruang kerja sandaran kontena'
ContainerBackupStop: 'Hentikan kontena sebelum sandaran'
ContainerBackupInspect: 'Sandarkan inspect dan rangkaian kontena'
ContainerBackupMounts: 'Sandarkan mount kontena'
ContainerBackupMeta: 'Tulis metadata sandaran kontena'
ContainerBackupStart: 'Mulakan kontena selepas sandaran'
ContainerRecoverPrepare: 'Sediakan ruang kerja pemulihan kontena'
ContainerRecoverExtract: 'Ekstrak arkib sandaran kontena'
ContainerRecoverParse: 'Muat metadata sandaran kontena'
ContainerRecoverCreate: 'Cipta semula kontena'
ContainerRecoverMounts: 'Pulihkan mount kontena'
ContainerRecoverStart: 'Mulakan kontena dipulihkan'
ContainerRecoverCleanup: 'Bersihkan ruang kerja pemulihan kontena'
ComposeBackupPrepare: 'Sediakan ruang kerja sandaran compose'
ComposeBackupStop: 'Hentikan compose sebelum sandaran'
ComposeBackupFiles: 'Sandarkan fail compose'
ComposeBackupContainers: 'Sandarkan kontena compose'
ComposeBackupMeta: 'Tulis metadata sandaran compose'
ComposeBackupStart: 'Mulakan compose selepas sandaran'
ComposeBackupCleanup: 'Bersihkan ruang kerja sandaran compose'
ComposeRecoverPrepare: 'Sediakan ruang kerja pemulihan compose'
ComposeRecoverExtract: 'Ekstrak arkib sandaran compose'
ComposeRecoverMeta: 'Muat metadata sandaran compose'
ComposeRecoverMetaLogName: 'Metadata pemulihan compose: nama={{ .name }}'
ComposeRecoverMetaLogPath: 'Metadata pemulihan compose: laluanSandaran={{ .backupPath }} laluanSasaran={{ .targetDir }}'
ComposeRecoverMetaLogCount: 'Metadata pemulihan compose: fail={{ .files }} kontena={{ .containers }}'
ComposeRecoverFiles: 'Pulihkan fail compose'
ComposeRecoverContainers: 'Pulihkan kontena compose'
ComposeRecoverRecord: 'Simpan rekod compose'
ComposeRecoverCleanup: 'Bersihkan ruang kerja pemulihan compose'

# runtime
ErrFileNotExist: 'Fail {{ .detail }} tidak wujud Sila semak integriti fail sumber'
ErrImageBuildErr: 'Pembinaan imej gagal'
ErrImageExist: 'Imej sudah wujud Sila ubah nama imej.'
ErrDelWithWebsite: 'Persekitaran pengendalian sudah dikaitkan dengan tapak web dan tidak boleh dipadamkan'
ErrRuntimeStart: 'Permulaan gagal'
ErrPackageJsonNotFound: 'fail package.json tidak wujud'
ErrScriptsNotFound: 'Item konfigurasi skrip tidak ditemui dalam package.json'
ErrContainerNameNotFound: 'Tidak dapat mendapatkan nama kontena, sila semak fail.env'
ErrNodeModulesNotFound: 'Folder node_modules tidak wujud Sila edit persekitaran masa jalan atau tunggu persekitaran masa jalan berjaya dimulakan'
ErrContainerNameIsNull: 'Nama kontena tidak wujud'
ErrPHPPortIsDefault: 'Port 9000 ialah port lalai. Sila tukar dan cuba lagi'
ErrPHPRuntimePortFailed: 'Port {{ .name }} sudah digunakan oleh runtime semasa. Sila tukar dan cuba lagi'

# alat
ErrConfigNotFound: 'Fail konfigurasi tidak wujud'
ErrConfigParse: 'Format fail konfigurasi tidak betul'
ErrConfigIsNull: 'Fail konfigurasi tidak boleh kosong'
ErrConfigDirNotFound: 'Direktori berjalan tidak wujud'
ErrConfigAlreadyExist: 'Fail konfigurasi dengan nama yang sama sudah wujud'
ErrUserFindErr: 'Pengguna {{ .name }} carian gagal {{ .err }}'

# tugas cron
CutWebsiteLogSuccess: '{{ .name }} log tapak web berjaya dipotong, laluan sandaran {{ .path }}'
HandleShell: 'Laksanakan skrip {{ .name }}'
HandleCurl: 'Akses URL {{ .name }}'
HandleNtpSync: 'Penyegerakan masa sistem'
HandleSystemClean: 'Pembersihan cache sistem'
SystemLog: 'Log Sistem'
CutWebsiteLog: 'Putar Log Laman Web'
FileOrDir: 'Direktori / Fail'
UploadFile: 'Muat naik fail sandaran {{ .file }} ke {{ .backup }}'
Upload: 'Muat Naik'
IgnoreBackupErr: 'Sandaran gagal, ralat: {{ .detail }}, abaikan ralat ini...'
IgnoreUploadErr: 'Muat naik gagal, ralat: {{ .detail }}, abaikan ralat ini...'
LoadBackupFailed: 'Gagal mendapatkan sambungan akaun sandaran, ralat: {{ .detail }}'
InExecuting: 'Tugas semasa sedang dilaksanakan, jangan ulangi pelaksanaan'
NoSuchResource: 'Tiada kandungan sandaran ditemui dalam pangkalan data, dilangkau...'
CleanLog: 'Bersihkan log'
CleanLogByName: 'Bersihkan log {{ .name }}'
WafIpGroupNotFound: 'Kumpulan IP WAF tidak ditemui. Sila pergi ke [Ciri Lanjutan - WAF - Senarai Hitam/Putih - Kumpulan IP] untuk menambah kumpulan IP melalui kaedah muat turun jauh.'

# kotak alat
ErrNotExistUser: 'Pengguna semasa tidak wujud, sila ubah suai dan cuba lagi'
ErrBanAction: 'Tetapan gagal. Perkhidmatan {{ .name }} semasa tidak tersedia. Sila semak dan cuba lagi'
ErrClamdscanNotFound: 'Arahan clamdscan tidak dikesan, sila rujuk dokumentasi untuk memasangnya'
TaskSwapSet: 'Tetapkan Swap'
SetSwap: 'Tetapkan Swap {{ .path }} - {{ .size }}'
CreateSwap: 'Buat Fail Swap'
FormatSwap: 'Format Fail Swap'
EnableSwap: 'Dayakan Swap'

# perlindungan ubah suai
CleanTamperSetting: 'Bersihkan tetapan perlindungan sejarah'
SetTamperWithRules: 'Mulakan perlindungan direktori mengikut peraturan'
ProtectDir: 'Lindungi direktori {{ .name }}'
IgnoreFile: 'Lindungi fail {{ .name }}'
TamperSetSuccessful: 'Tetapan perlindungan selesai, mula memantau direktori berikut:'

# WAF
ErrScope: 'Mengubah suai konfigurasi ini tidak disokong'
ErrStateChange: 'Perubahan keadaan gagal'
ErrRuleExist: 'Peraturan sudah wujud'
ErrRuleNotExist: 'Peraturan tidak wujud'
ErrParseIP: 'Format IP salah'
ErrDefaultIP: 'default ialah nama simpanan, sila tukar kepada nama lain'
ErrGroupInUse: 'Kumpulan IP digunakan oleh senarai hitam/senarai putih dan tidak boleh dipadamkan'
ErrIPGroupAclUse: 'Kumpulan IP digunakan oleh peraturan tersuai tapak web {{ .name }}, tidak boleh dipadamkan'
ErrIPGroupOriginProtectionUse: 'Kumpulan IP digunakan oleh perlindungan origin CDN laman web {{ .name }}'
ErrOriginProtectionIPGroupRequired: 'Pilih sekurang-kurangnya satu kumpulan IP yang tidak kosong sebelum mengaktifkan perlindungan origin'
ErrOriginProtectionIPGroupInvalid: 'Kumpulan IP {{ .name }} tidak wujud atau kosong'
ErrGroupExist: 'Nama kumpulan IP sudah wujud'
ErrIPRange: 'Julat IP salah'
ErrIPExist: 'IP sudah wujud'
urlDefense: 'Peraturan URL'
urlHelper: 'URL Terlarang'
dirFilter: 'Penapis direktori'
xss: 'XSS'
phpExec: 'Pelaksanaan skrip PHP'
oneWordTrojan: 'Trojan satu baris'
appFilter: 'Gunakan penapisan direktori berbahaya'
webShell: 'Webshell'
args: 'Peraturan parameter'
protocolFilter: 'Penapisan protokol'
javaFilter: 'Penapis fail berbahaya Java'
scannerFilter: 'Penapis pengimbas'
escapeFilter: 'penapis melarikan diri'
customRule: 'Peraturan tersuai'
httpMethod: 'Penapisan kaedah HTTP'
fileExt: 'Sekatan muat naik fail'
defaultIpBlack: 'Kumpulan IP berniat jahat'
cookie: 'Peraturan Kuki'
urlBlack: 'senarai hitam URL'
uaBlack: 'Senarai hitam Ejen Pengguna'
attackCount: 'Had kekerapan serangan'
fileExtCheck: 'Sekatan muat naik fail'
geoRestrict: 'Sekatan akses serantau'
unknownWebsite: 'Akses nama domain yang tidak dibenarkan'
notFoundCount: '404 Had Kadar'
headerDefense: 'Peraturan header'
defaultUaBlack: 'Peraturan Ejen Pengguna'
methodWhite: 'Peraturan HTTP'
captcha: 'pengesahan mesin manusia'
fiveSeconds: 'pengesahan 5 saat'
vulnCheck: 'Peraturan tambahan'
acl: 'Peraturan tersuai'
sql: 'suntikan SQL'
cc: 'Had kekerapan akses'
defaultUrlBlack: 'Peraturan URL'
sqlInject: 'Suntikan SQL'
ErrDBNotExist: 'Pangkalan data tidak wujud'
allow: 'membenarkan'
deny: 'menafikan'
OpenrestyNotFound: 'OpenResty tidak dipasang'
remoteIpIsNull: 'Senarai IP kosong'
OpenrestyVersionErr: 'Versi OpenResty terlalu lama. Naik taraf ke 1.27.1.2-2-2-focal'
ErrFileTooLarge: 'Fail melebihi 1 MB dan tidak boleh dimuat naik'

# tugas
TaskStart: '{{ .name }} Task mula [MULA]'
TaskEnd: '{{ .name }} Task selesai [SELESAI]'
TaskFailed: 'tugas {{ .name }} gagal'
TaskTimeout: '{{ .name }} tamat masa'
TaskSuccess: '{{ .name }} Task berjaya'
TaskRetry: 'Mulakan {{ .name }} cuba semula'
SubTaskSuccess: '{{ .name }} berjaya'
SubTaskFailed: '{{ .name }} gagal: {{ .err }}'
TaskInstall: 'Pasang'
TaskUninstall: 'Nyahpasang'
TaskCreate: 'Buat'
TaskDelete: 'Padam'
TaskUpgrade: 'Naik taraf'
TaskUpdate: 'Kemas kini'
AgentPluginInstall: 'Pasang pemalam'
AgentPluginEnable: 'Aktifkan pemalam'
AgentPluginDisable: 'Nyahaktifkan pemalam'
AgentPluginUpdate: 'Kemas kini pemalam'
AgentPluginUninstall: 'Nyahpasang pemalam'
TaskRestart: 'Mulakan semula'
TaskProtect: 'Lindungi'
TaskBackup: 'Sandaran'
TaskRecover: 'Pulihkan'
TaskRollback: 'Pulangkan semula'
TaskPull: 'Tarik'
TaskCommit: 'Komit'
TaskBuild: 'Bina'
TaskPush: 'Hantar'
TaskClean: 'Pembersihan'
TaskHandle: 'Laksanakan'
TaskImport: 'Import data'
TaskExport: 'Eksport'
Website: 'Laman web'
App: 'Aplikasi'
Runtime: 'Persekitaran masa jalan'
Database: 'Pangkalan Data'
ConfigFTP: 'Buat pengguna FTP {{ .name }}'
ConfigOpenresty: 'Buat fail konfigurasi OpenResty'
InstallAppSuccess: 'Aplikasi {{ .name }} berjaya dipasang'
ConfigRuntime: 'Konfigurasikan persekitaran masa jalan'
ConfigApp: 'Aplikasi Konfigurasi'
SuccessStatus: '{{ .name }} berjaya'
FailedStatus: '{{ .name }} gagal {{ .err }}'
HandleLink: 'Kendalikan persatuan aplikasi'
HandleDatabaseApp: 'Mengendalikan parameter aplikasi'
ExecShell: 'Laksanakan skrip {{ .name }}'
PullImage: 'Tarik imej'
Start: 'Mula'
Run: 'Mula'
Stop: 'Berhenti'
Image: 'Cermin'
Compose: 'Orkestrasi'
Container: 'Bekas'
AppLink: 'Aplikasi Terpaut'
EnableSSL: 'Dayakan HTTPS'
AppStore: 'Kedai aplikasi'
TaskSync: 'Segerakkan'
LocalApp: 'Aplikasi Tempatan'
SubTask: 'Subtugas'
RuntimeExtension: 'Sambungan Persekitaran Runtime'
TaskIsExecuting: 'Tugas sedang berjalan'
CustomAppstore: 'Gudang aplikasi tersuai'
TaskExec: 'Laksanakan'
TaskBatch: 'Operasi Batch'
FileConvert: 'Penukaran Format Fail'

# tugas - ClamAV
Clamscan: 'Imbas {{ .name }}'
TaskScan: 'Imbas'

# tugas - AI
OllamaModelPull: 'Tarik model Ollama {{ .name }}'
OllamaModelSize: 'Dapatkan saiz model Ollama {{ .name }}'
AIBenchmarkRun: "Jalankan penanda aras AI"

# tugas - syot kilat
Snapshot: 'Syot kilat'
SnapDBInfo: 'Tulis maklumat pangkalan data 1Panel'
SnapCopy: 'Salin fail & direktori {{ .name }}'
SnapNewDB: 'Mulakan sambungan {{ .name }} pangkalan data'
SnapDeleteOperationLog: 'Padam log operasi'
SnapDeleteLoginLog: 'Padam log akses'
SnapDeleteMonitor: 'Padamkan data pemantauan'
SnapRemoveSystemIP: 'Alih keluar IP sistem'
SnapBaseInfo: 'Tulis maklumat asas 1Panel'
SnapInstallAppImageEmpty: 'Tiada imej aplikasi dipilih, dilangkau...'
SnapInstallApp: 'Sandaran aplikasi terpasang 1Panel'
SnapDockerSave: 'Mampatkan aplikasi yang dipasang'
SnapLocalBackup: 'Sandaran 1Panel direktori sandaran tempatan'
SnapCompressBackup: 'Mampatkan direktori sandaran tempatan'
SnapPanelData: 'Sandaran direktori data 1Panel'
SnapCompressPanel: 'Direktori Data Mampat'
SnapWebsite: 'Sandaran direktori tapak web 1Panel'
SnapCloseDBConn: 'Tutup sambungan pangkalan data'
SnapCompress: 'Buat fail syot kilat'
SnapCompressFile: 'Mampatkan fail syot kilat'
SnapCheckCompress: 'Semak fail mampatan syot kilat'
SnapCompressSize: 'Saiz fail syot kilat {{ .name }}'
SnapUpload: 'Muat naik fail syot kilat'
SnapUploadTo: 'Muat naik fail syot kilat ke {{ .name }}'
SnapUploadRes: 'Muat naik fail syot kilat ke {{ .name }}'
SnapshotRecover: 'Pulihkan syot kilat'
RecoverDownload: 'Muat turun fail syot kilat'
Download: 'Muat turun'
RecoverDownloadAccount: 'Dapatkan syot kilat muat turun akaun sandaran {{ .name }}'
RecoverDecompress: 'Nyahmampatkan fail termampat syot kilat'
Decompress: 'Penyahmampatan'
BackupBeforeRecover: 'Sandarkan data berkaitan sistem sebelum syot kilat'
ReadJson: 'Baca fail Json dalam petikan'
ReadJsonPath: 'Dapatkan laluan fail Json dalam petikan'
ReadJsonContent: 'Baca fail Json'
ReadJsonMarshal: 'Pemprosesan melarikan diri Json'
RecoverApp: 'Pulihkan apl yang dipasang'
RecoverWebsite: 'Pulihkan direktori tapak web'
RecoverAppImage: 'Pulihkan sandaran imej syot kilat'
RecoverCompose: 'Pulihkan kandungan komposer lain'
RecoverComposeList: 'Dapatkan semua komposer untuk dipulihkan'
RecoverComposeItem: 'Pulihkan orkestrasi {{ .name }}'
RecoverAppEmpty: 'Tiada sandaran imej aplikasi ditemui dalam fail syot kilat'
RecoverBaseData: 'Pulihkan data asas dan fail'
RecoverDaemonJsonEmpty: 'Kedua-dua fail syot kilat dan mesin semasa tidak mempunyai fail daemon.json konfigurasi bekas'
RecoverDaemonJson: 'Pulihkan fail daemon.json konfigurasi bekas'
RecoverDBData: 'Pulihkan data pangkalan data'
RecoverBackups: 'Pulihkan direktori sandaran tempatan'
RecoverPanelData: 'Direktori data pemulihan'

# tugas - bekas
ContainerImagePull: 'Tarik imej bekas {{ .name }}'
ContainerRemoveOld: 'Alih keluar bekas asal {{ .name }}'
ContainerImageCheck: 'Periksa sama ada imej ditarik seperti biasa'
ContainerLoadInfo: 'Dapatkan maklumat bekas asas'
ContainerRecreate: 'Kemas kini kontena gagal, kini mula memulihkan bekas asal'
ContainerCreate: 'Buat bekas baharu {{ .name }}'
ContainerCreateFailed: 'Penciptaan bekas gagal, padamkan bekas yang gagal'
ContainerStartCheck: 'Periksa sama ada bekas telah dimulakan'
ContainerAcquireLock: 'Tunggu kunci operasi bekas {{ .name }}'
ContainerUpgradeItem: 'Naik taraf bekas {{ .name }}'
ContainerUpgradeSummary: 'Ringkaskan hasil naik taraf bekas'
ContainerCleanupWarning: 'Kemas kini berjaya tetapi bekas sandaran {{ .name }} tidak dapat dialih keluar. Selepas memastikan bekas baharu berfungsi, alih keluar bekas sandaran secara manual. Ralat: {{ .err }}'
ContainerStopOld: 'Hentikan bekas asal {{ .name }}'
ContainerRenameOld: 'Namakan semula bekas asal {{ .name }} untuk pemulihan'
ContainerDisconnectOld: 'Lepaskan alamat rangkaian bekas asal {{ .name }}'
ContainerCreateReplacement: 'Cipta bekas ganti {{ .name }}'
ContainerStartReplacement: 'Mulakan bekas ganti {{ .name }}'
ContainerWaitReplacement: 'Periksa kesediaan bekas ganti {{ .name }}'
ContainerRollbackRestartOld: 'Mulakan semula bekas asal {{ .name }}'
ContainerRollbackRemoveReplacement: 'Alih keluar bekas ganti yang gagal {{ .name }}'
ContainerRollbackRenameOld: 'Pulihkan nama bekas asal {{ .name }}'
ContainerRollbackReconnectOld: 'Pulihkan rangkaian bekas asal {{ .name }}'

# tugas - imej
ImageBuild: 'Membina Imej'
ImagePull: 'Tarik imej'
ImageRepoAuthFromDB: 'Dapatkan maklumat pengesahan repositori daripada pangkalan data'
ImagePush: 'Tolak imej'
ImageRenameTag: 'Ubah suai teg imej'
ImageNewTag: 'Teg imej baharu {{ .name }}'
ComposeCreate: 'Buat gubahan'

# tugas - laman web
BackupNginxConfig: 'Fail konfigurasi OpenResty tapak web sandaran'
CompressFileSuccess: 'Mampatkan direktori berjaya, dimampatkan ke {{ .name }}'
CompressDir: 'Direktori mampatan'
DeCompressFile: 'Nyahmampatkan fail {{ .name }}'
ErrCheckValid: 'Pengesahan fail sandaran gagal, {{ .name }}'
Rollback: 'Undur'
websiteDir: 'Direktori Laman Web'
RecoverFailedStartRollBack: 'Pemulihan gagal, mulakan rollback'
AppBackupFileIncomplete: 'Fail sandaran tidak lengkap dan tidak mempunyai fail app.json atau app.tar.gz'
AppAttributesNotMatch: 'Jenis atau nama aplikasi tidak sepadan'

# amaran
ErrAlertMethodNotSupported: 'Versi ini tidak menyokong kaedah amaran ini'
ErrAlertSync: 'Ralat penyegerakan maklumat penggera, sila semak dan cuba lagi'

# tugas - runtime
ErrInstallExtension: 'Tugas pemasangan sudah sedang berjalan, silakan tunggu tugas selesai'

# templat mel amaran
PanelAlertTitle: 'Notifikasi Amaran Panel'
TestAlertTitle: 'E-mel Ujian - Sahkan Sambungan E-mel'
TestAlert: 'Ini adalah e-mel ujian untuk mengesahkan konfigurasi penghantaran e-mel anda betul.'
LicenseExpirationAlert: 'Panel {{ .node }}{{ .ip }} Anda, lesen akan tamat tempoh dalam {{ .day }} hari. Sila log masuk ke panel untuk butiran lanjut.'
CronJobFailedAlert: 'Panel {{ .node }}{{ .ip }} Anda, tugas jadual {{ .name }} gagal dilaksanakan. Sila log masuk ke panel untuk butiran lanjut.'
ClamAlert: 'Panel {{ .node }}{{ .ip }} Anda, tugas imbasan virus mengesan {{ .num }} fail yang dijangkiti. Sila log masuk ke panel untuk butiran lanjut.'
WebSiteAlert: 'Panel {{ .node }}{{ .ip }} Anda, {{ .num }} laman web akan tamat tempoh dalam {{ .day }} hari. Sila log masuk ke panel untuk butiran lanjut.'
SSLAlert: 'Panel {{ .node }}{{ .ip }} Anda, {{ .num }} sijil SSL akan tamat tempoh dalam {{ .day }} hari. Sila log masuk ke panel untuk butiran lanjut.'
DiskUsedAlert: 'Panel {{ .node }}{{ .ip }} Anda, penggunaan cakera {{ .name }} telah mencapai {{ .used }}. Sila log masuk ke panel untuk butiran lanjut.'
ResourceAlert: 'Panel {{ .node }}{{ .ip }} Anda, kadar penggunaan purata {{ .name }} dalam tempoh {{ .time }} minit ialah {{ .used }}. Sila log masuk ke panel untuk butiran lanjut.'
PanelVersionAlert: 'Panel {{ .node }}{{ .ip }} Anda, versi panel terkini tersedia untuk dinaik taraf. Sila log masuk ke panel untuk butiran lanjut.'
PanelPwdExpirationAlert: 'Panel {{ .node }}{{ .ip }} Anda, kata laluan panel akan tamat tempoh dalam {{ .day }} hari. Sila log masuk ke panel untuk butiran lanjut.'
CommonAlert: 'Panel {{ .node }}{{ .ip }} Anda, {{ .msg }}. Sila log masuk ke panel untuk butiran lanjut.'
NodeExceptionAlert: 'Panel {{ .node }}{{ .ip }} Anda, {{ .num }} nod tidak normal. Sila log masuk ke panel untuk butiran lanjut.'
LicenseExceptionAlert: 'Panel {{ .node }}{{ .ip }} Anda, {{ .num }} lesen tidak normal. Sila log masuk ke panel untuk butiran lanjut.'
SSHAndPanelLoginAlert: 'Panel {{ .node }}{{ .ip }} Anda, log masuk {{ .name }} dari {{ .loginIp }} tidak normal. Sila log masuk ke panel untuk butiran lanjut.'

# cakera
DeviceNotFound: 'Peranti {{ .name }} tidak ditemui'
DeviceIsMounted: 'Peranti {{ .name }} telah dikaitkan, sila nyahkaitkan terlebih dahulu'
PartitionDiskErr: 'Gagal membahagikan, {{ .err }}'
FormatDiskErr: 'Gagal memformat cakera, {{ .err }}'
MountDiskErr: 'Gagal mengkaitkan cakera, {{ .err }}'
XfsNotFound: 'Sistem fail xfs tidak dikesan, sila pasang xfsprogs terlebih dahulu'

# terminal
TerminalAIBlockedRiskyCommand: 'Perintah berisiko telah disekat: {{ .command }}'
TerminalAIThinking: 'AI sedang berfikir...'
TerminalAIReadyToExecute: 'Pemikiran selesai, tekan Enter untuk jalankan (tempoh: {{ .duration }}, token: {{ .tokens }})'
TerminalAIRequestFailed: 'Permintaan AI gagal: {{ .err }}'

# gerbang AI
ErrAIProxyServiceNotInstalled: 'Perkhidmatan {{ .name }} belum dipasang'
ErrAIProxyModelAccountNotFound: 'Akaun model {{ .id }} tidak ditemui'
ErrAIProxyModelMapRequired: 'Medan ini wajib diisi.'
ErrAIProxyModelMapInvalid: 'Pemetaan model mestilah objek JSON yang sah: {{ .err }}'
ErrAIProxyModelMapEmpty: 'Pemetaan model tidak boleh kosong'
ErrAIProxyModelMapEmptyExternalModel: 'Pemetaan model mengandungi model permintaan kosong'
ErrAIProxyModelMapEmptyUpstreamModel: 'Model upstream untuk {{ .model }} tidak boleh kosong'
AIProxyUserFallback: 'Pengguna dipadam (ID: {{ .id }})'
AIProviderBailian: 'Alibaba Cloud Model Studio'
AIProviderBailianCodingPlan: 'Alibaba Cloud Model Studio Coding Plan'
AIProviderArk: 'Volcengine Ark'
AIProviderArkCodingPlan: 'Volcengine Ark Coding Plan'
