libre-webui 0.39.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/dist/persistence/extensionTypes.d.ts +2 -0
- package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.js.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +6 -0
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +7 -0
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/routes/email.d.ts.map +1 -1
- package/backend/dist/routes/email.js +51 -1
- package/backend/dist/routes/email.js.map +1 -1
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +6 -1
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/services/agentCliService.d.ts.map +1 -1
- package/backend/dist/services/agentCliService.js +1 -0
- package/backend/dist/services/agentCliService.js.map +1 -1
- package/backend/dist/services/emailService.d.ts +17 -3
- package/backend/dist/services/emailService.d.ts.map +1 -1
- package/backend/dist/services/emailService.js +73 -11
- package/backend/dist/services/emailService.js.map +1 -1
- package/backend/dist/services/pluginCredentialsService.d.ts +3 -0
- package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
- package/backend/dist/services/pluginCredentialsService.js +18 -5
- package/backend/dist/services/pluginCredentialsService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +9 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +31 -14
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/workRuntimeService.d.ts +5 -0
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +243 -84
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/utils/emailMarkdown.js +3 -3
- package/backend/dist/utils/emailMarkdown.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.d.ts +7 -0
- package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +49 -1
- package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/artifact-runtime/mermaid.js +366 -366
- package/frontend/dist/assets/index-DLfU_qNT.js +75 -0
- package/frontend/dist/assets/index-DtS3qhdq.css +2 -0
- package/frontend/dist/assets/xterm-B1njb2Cr.css +1 -0
- package/frontend/dist/index.html +27 -26
- package/frontend/dist/js/ArtifactContainer-BjzltfdU.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-Ddpy2O_v.js → ArtifactDemoPage-DWua6xj9.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-CdsAqv8H.js → ArtifactSandboxFrame-CR9ghP0A.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-DX2nL3AS.js +1 -0
- package/frontend/dist/js/AutomationModal-DZe-C2jN.js +1 -0
- package/frontend/dist/js/AutomationsPage-CrCcnTyk.js +1 -0
- package/frontend/dist/js/AvatarUpload-nPS0QHod.js +1 -0
- package/frontend/dist/js/Button-Dh2UJA-B.js +1 -0
- package/frontend/dist/js/CalendarPage-D2WiWglM.js +1 -0
- package/frontend/dist/js/ChannelsPage-COp2T8FQ.js +1 -0
- package/frontend/dist/js/ChatPage-CUfAlpdt.js +14 -0
- package/frontend/dist/js/ConnectModels-emc3dv4A.js +1 -0
- package/frontend/dist/js/EvaluationsPage-CbyeDkz_.js +2 -0
- package/frontend/dist/js/FirstTimeSetup-C4ffQRMN.js +1 -0
- package/frontend/dist/js/GalleryPage-D4Ci_3dv.js +1 -0
- package/frontend/dist/js/HomePage-C3IhEERN.js +1 -0
- package/frontend/dist/js/LanguageSwitcher-BQqDJPwm.js +1 -0
- package/frontend/dist/js/ModelManagerModals-DhY8Rme6.js +1 -0
- package/frontend/dist/js/NotesPage-j812I1BN.js +3 -0
- package/frontend/dist/js/PasswordStrengthMeter-BSEtQBJp.js +1 -0
- package/frontend/dist/js/PersonasPage--YWoThqF.js +13 -0
- package/frontend/dist/js/PluginUsagePage-CZiMdmjI.js +1 -0
- package/frontend/dist/js/{RichMessageContent-BfYbVBFz.js → RichMessageContent-BLI0hhzR.js} +2 -2
- package/frontend/dist/js/RichMessageContent-BXv5baJ_.js +1 -0
- package/frontend/dist/js/SettingsModal-C6aVzSI-.js +19 -0
- package/frontend/dist/js/SettingsToggle-CkLLtFbz.js +1 -0
- package/frontend/dist/js/ShareDialog-DQskc17d.js +1 -0
- package/frontend/dist/js/StrandsPage-DENhVKcz.js +1 -0
- package/frontend/dist/js/SystemPage-C86ypXG4.js +1 -0
- package/frontend/dist/js/UserManagementPanel-D1CS0KPn.js +1 -0
- package/frontend/dist/js/WhatsNewModal-B31A_UQY.js +1 -0
- package/frontend/dist/js/WorkPage-DEXBL5J7.js +7 -0
- package/frontend/dist/js/api-DRAKhdz7.js +1 -0
- package/frontend/dist/js/{api-BrHW-VGd.js → api-Dcz1G4Ib.js} +4 -2
- package/frontend/dist/js/{appNavigation-B6xYIgLi.js → appNavigation-C5A9BF_G.js} +1 -1
- package/frontend/dist/js/appStore-0_qlwS8f.js +2 -0
- package/frontend/dist/js/appVersion-D5lk_2zb.js +1 -0
- package/frontend/dist/js/ar-BZntyucf.js +2 -0
- package/frontend/dist/js/authStore-C4dzH1NY.js +1 -0
- package/frontend/dist/js/{authStore-DjAsRpNL.js → authStore-COgKeTRv.js} +3 -3
- package/frontend/dist/js/bn-BDCaFQu-.js +2 -0
- package/frontend/dist/js/chatStore-CVTbkZyb.js +3 -0
- package/frontend/dist/js/{client-DppLngAs.js → client-jaxZzn-I.js} +2 -2
- package/frontend/dist/js/{composerStyles-C83jssgZ.js → composerStyles-BEx0XAp6.js} +1 -1
- package/frontend/dist/js/{config-4_s8hdqO.js → config-Da1yh9sC.js} +1 -1
- package/frontend/dist/js/confirmStore-CKkUtP9c.js +1 -0
- package/frontend/dist/js/cs-BCmN--jQ.js +2 -0
- package/frontend/dist/js/da-B895dAyV.js +2 -0
- package/frontend/dist/js/de-B0ZhC0dm.js +2 -0
- package/frontend/dist/js/es-D7eaw4_W.js +2 -0
- package/frontend/dist/js/{evaluationsApi-DyuW7IJ_.js → evaluationsApi-BwaxBVpl.js} +1 -1
- package/frontend/dist/js/fr-DsB0gLW4.js +2 -0
- package/frontend/dist/js/hi-CLeU3ung.js +2 -0
- package/frontend/dist/js/id-Cdq6tOTi.js +2 -0
- package/frontend/dist/js/is-DJ1tHaAT.js +2 -0
- package/frontend/dist/js/it-9K1R4CeT.js +2 -0
- package/frontend/dist/js/ja-BYP_3M5M.js +2 -0
- package/frontend/dist/js/ko-CNtjlaDm.js +2 -0
- package/frontend/dist/js/liveAnnouncerStore-B6mS-JWC.js +1 -0
- package/frontend/dist/js/messageCodeStyles-D3cWF9XO.js +2 -0
- package/frontend/dist/js/ms-A_IVO_qt.js +2 -0
- package/frontend/dist/js/nl-CrKWO3ea.js +2 -0
- package/frontend/dist/js/pl-BrpSuyDP.js +2 -0
- package/frontend/dist/js/pt-BHbpB5BM.js +2 -0
- package/frontend/dist/js/ru-DzLsS9zY.js +2 -0
- package/frontend/dist/js/{strandsApi-BFbeEpAY.js → strandsApi-COxSPh_5.js} +1 -1
- package/frontend/dist/js/sv-VU2CjzNj.js +2 -0
- package/frontend/dist/js/{teamEventStream-DsAS6P4m.js → teamEventStream-RNJYm84u.js} +1 -1
- package/frontend/dist/js/th-DV2hNXXc.js +2 -0
- package/frontend/dist/js/tr-DvVZ9jxF.js +2 -0
- package/frontend/dist/js/ui-CI0OdG9q.js +2 -0
- package/frontend/dist/js/ui-vendor-6S05F84J.js +1 -0
- package/frontend/dist/js/uk-MFFDRo2m.js +2 -0
- package/frontend/dist/js/useChat-BSkqxHnH.js +13 -0
- package/frontend/dist/js/useDictation-D9whH12W.js +1 -0
- package/frontend/dist/js/vi-CfZ-U8Cw.js +2 -0
- package/frontend/dist/js/{work-CdbmBok5.js → work-C7MYlv5S.js} +1 -1
- package/frontend/dist/js/{workModels-BM2Zyiba.js → workAnnouncements-CAsI8P7c.js} +1 -1
- package/frontend/dist/js/workApi-BJfbaV6k.js +1 -0
- package/frontend/dist/js/{workApi-UPxumrEF.js → workApi-Ck8nTlJn.js} +1 -1
- package/frontend/dist/js/zh-CTl_raYa.js +2 -0
- package/package.json +3 -2
- package/plugins/codex-oauth.json +1 -0
- package/frontend/dist/assets/index-D99DS5c6.js +0 -57
- package/frontend/dist/assets/index-Dz1JufgZ.css +0 -1
- package/frontend/dist/assets/xterm-B8QFf3JU.css +0 -1
- package/frontend/dist/js/ArtifactContainer-Cn7X9HGm.js +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-cVd9X80o.js +0 -1
- package/frontend/dist/js/AutomationModal-B4UaWjkk.js +0 -1
- package/frontend/dist/js/AutomationsPage-huCrvLUp.js +0 -1
- package/frontend/dist/js/AvatarUpload-CG-w6Mpt.js +0 -1
- package/frontend/dist/js/Button-j68Q8KVh.js +0 -1
- package/frontend/dist/js/CalendarPage-CZXT1w99.js +0 -1
- package/frontend/dist/js/ChannelsPage-DbtdHnSL.js +0 -1
- package/frontend/dist/js/ChatPage-BZE65kiq.js +0 -14
- package/frontend/dist/js/ConnectModels-DD4bLgdq.js +0 -1
- package/frontend/dist/js/EvaluationsPage-Dq53LaXd.js +0 -2
- package/frontend/dist/js/FirstTimeSetup-BoJIfuQT.js +0 -1
- package/frontend/dist/js/GalleryPage-DKwqeB2A.js +0 -1
- package/frontend/dist/js/HomePage-C8bCJfls.js +0 -1
- package/frontend/dist/js/LanguageSwitcher-B_YyU5JG.js +0 -1
- package/frontend/dist/js/ModelManagerModals-BzjZ-QwL.js +0 -1
- package/frontend/dist/js/NotesPage-CnaAp_w_.js +0 -3
- package/frontend/dist/js/PasswordStrengthMeter-DI4RDv67.js +0 -1
- package/frontend/dist/js/PersonasPage-CH3GUKph.js +0 -13
- package/frontend/dist/js/PluginUsagePage-d54K2gAj.js +0 -1
- package/frontend/dist/js/RichMessageContent-CDxxs3Tt.js +0 -1
- package/frontend/dist/js/SettingsModal-BvtJcvow.js +0 -19
- package/frontend/dist/js/SettingsToggle-DrJ0Bapi.js +0 -1
- package/frontend/dist/js/ShareDialog-DaSxkTKS.js +0 -1
- package/frontend/dist/js/StrandsPage-BQwz0mWq.js +0 -1
- package/frontend/dist/js/SystemPage-BqNZoFxR.js +0 -1
- package/frontend/dist/js/UserManagementPanel-C3T1ReJJ.js +0 -1
- package/frontend/dist/js/WhatsNewModal-CLcU2Ugk.js +0 -1
- package/frontend/dist/js/WorkPage-BpjGn--1.js +0 -8
- package/frontend/dist/js/api-K_hhqPdx.js +0 -1
- package/frontend/dist/js/appStore-DkRdQQeY.js +0 -2
- package/frontend/dist/js/appVersion-BVtSqLVj.js +0 -1
- package/frontend/dist/js/ar-XTZGEtBr.js +0 -2
- package/frontend/dist/js/authStore-DBS6Kbvh.js +0 -1
- package/frontend/dist/js/bn-JiK7ZWmy.js +0 -2
- package/frontend/dist/js/chatStore-DpVxt9VX.js +0 -3
- package/frontend/dist/js/cs-D8ju18CO.js +0 -2
- package/frontend/dist/js/da-BJWcAoUc.js +0 -2
- package/frontend/dist/js/de-CLJLmy69.js +0 -2
- package/frontend/dist/js/es-BvqHEL-3.js +0 -2
- package/frontend/dist/js/fr-B8ZoZomI.js +0 -2
- package/frontend/dist/js/goober.modern-BaHbaW3_.js +0 -1
- package/frontend/dist/js/hi-AzJLALo-.js +0 -2
- package/frontend/dist/js/id-DZYGQhvC.js +0 -2
- package/frontend/dist/js/is-Da_kvtzW.js +0 -2
- package/frontend/dist/js/it-B90zSlqn.js +0 -2
- package/frontend/dist/js/ja-DU_K1GOr.js +0 -2
- package/frontend/dist/js/ko-DicfoO-e.js +0 -2
- package/frontend/dist/js/messageCodeStyles-CuQPkfEK.js +0 -2
- package/frontend/dist/js/ms-CfH7wjUY.js +0 -2
- package/frontend/dist/js/nl-ELlOz-B3.js +0 -2
- package/frontend/dist/js/pl-33dayyUk.js +0 -2
- package/frontend/dist/js/pt-aIXSQPCT.js +0 -2
- package/frontend/dist/js/ru-BSvGtBtW.js +0 -2
- package/frontend/dist/js/sv-B7KOz81W.js +0 -2
- package/frontend/dist/js/th-DgpjGxvA.js +0 -2
- package/frontend/dist/js/tr-BQTbl2h-.js +0 -2
- package/frontend/dist/js/ui-Aq8MP7Ph.js +0 -2
- package/frontend/dist/js/ui-vendor-DVTj_sKN.js +0 -1
- package/frontend/dist/js/uk-JLymloot.js +0 -2
- package/frontend/dist/js/useChat-D3ZAGz70.js +0 -10
- package/frontend/dist/js/useDictation-B6l8QzeM.js +0 -1
- package/frontend/dist/js/vi-BXdLOJ8q.js +0 -2
- package/frontend/dist/js/workApi-D1xtiG3Q.js +0 -1
- package/frontend/dist/js/zh-gdUf9sXa.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={common:{provider:`Nhà cung cấp`,agent:`Tác nhân`,loading:`Đang tải...`,save:`Lưu`,saving:`Đang lưu...`,cancel:`Hủy`,delete:`Xóa`,edit:`Chỉnh sửa`,close:`Đóng`,back:`Quay lại`,next:`Tiếp theo`,confirm:`Xác nhận`,error:`Lỗi`,success:`Thành công`,warning:`Cảnh báo`,or:`hoặc`,optional:`tùy chọn`,enabled:`Đã bật`,disabled:`Đã tắt`,on:`Bật`,off:`Tắt`,yes:`Có`,no:`Không`,search:`Tìm kiếm`,noResults:`Không tìm thấy kết quả`,retry:`Thử lại`,refresh:`Làm mới`,download:`Tải xuống`,upload:`Tải lên`,export:`Xuất`,import:`Nhập`,reset:`Đặt lại`,apply:`Áp dụng`,clear:`Xóa`,all:`Tất cả`,none:`Không có`,default:`Mặc định`,custom:`Tùy chỉnh`,remove:`Xóa`,home:`Trang chủ`,more:`Nhiều`,reasoning:`Lý luận`,skipToContent:`Chuyển đến nội dung`},brand:{name:`Libre WebUI`,shortName:`Libre`},appInitialization:{ollamaUnavailable:`Dịch vụ Ollama không khả dụng. Vẫn có thể sử dụng các mô hình plugin.`,backendConnectionFailed:`Không thể kết nối với dịch vụ backend`,connecting:`Đang kết nối tới backend… ({{attempt}}/{{total}})`,startingUp:`Đang khởi động…`,backendUnreachableHint:`Hãy đảm bảo backend đang chạy, rồi thử lại.`},auth:{login:{title:`Chào mừng trở lại`,subtitle:`Đăng nhập vào tài khoản của bạn để tiếp tục`,username:`Tên người dùng`,usernamePlaceholder:`Nhập tên người dùng`,password:`Mật khẩu`,passwordPlaceholder:`Nhập mật khẩu`,signIn:`Đăng nhập`,signingIn:`Đang đăng nhập...`,noAccount:`Chưa có tài khoản?`,signUpHere:`Đăng ký tại đây`,loginSuccess:`Đăng nhập thành công!`,loginFailed:`Đăng nhập thất bại`,checkCredentials:`Đăng nhập thất bại. Vui lòng kiểm tra thông tin đăng nhập.`,approvalPending:`Tài khoản của bạn đang chờ quản trị viên phê duyệt.`,enterBoth:`Vui lòng nhập cả tên người dùng và mật khẩu`,githubSuccess:`Đăng nhập GitHub thành công!`,githubFailed:`Xác thực GitHub thất bại`,githubVerifyFailed:`Không thể xác minh xác thực GitHub`,verificationFailed:`Xác minh bảo mật thất bại. Hãy tải lại trang và thử lại.`},signup:{title:`Tạo tài khoản`,subtitle:`Đăng ký tài khoản mới`,username:`Tên người dùng`,usernamePlaceholder:`Chọn tên người dùng`,email:`Email`,emailPlaceholder:`email@example.com`,password:`Mật khẩu`,passwordPlaceholder:`Chọn mật khẩu`,confirmPassword:`Xác nhận mật khẩu`,confirmPasswordPlaceholder:`Xác nhận mật khẩu của bạn`,createAccount:`Tạo tài khoản`,creatingAccount:`Đang tạo tài khoản...`,hasAccount:`Đã có tài khoản?`,signInHere:`Đăng nhập tại đây`,signupSuccess:`Tạo tài khoản thành công!`,approvalPending:`Đã nhận đăng ký. Quản trị viên phải phê duyệt tài khoản của bạn.`,awaitingApproval:`Đang chờ phê duyệt`,awaitingApprovalDescription:`Tài khoản của bạn đã được tạo, nhưng quản trị viên phải kích hoạt nó trước khi bạn có thể đăng nhập.`,backToSignIn:`Quay lại đăng nhập`,signupFailed:`Đăng ký thất bại`,tryAgain:`Đăng ký thất bại. Vui lòng thử lại.`,usernameRequired:`Tên người dùng và mật khẩu là bắt buộc`,passwordMismatch:`Mật khẩu không khớp`},logout:{button:`Đăng xuất`,success:`Đăng xuất thành công`},oauth:{continueWith:`Tiếp tục với {{provider}}`,connectingTo:`Đang kết nối đến {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`,loginSuccess:`Đăng nhập OAuth thành công!`,completionFailed:`Không thể hoàn tất xác thực OAuth`,verificationFailed:`Không thể xác minh xác thực OAuth`,authenticationFailed:`Xác thực OAuth thất bại`},checkingAuth:`Đang kiểm tra xác thực...`,welcome:`Chào mừng`,noEmail:`Chưa cung cấp email`,role:`Vai trò`,id:`ID`,userId:`ID người dùng`,signInDescription:`Đăng nhập bằng tài khoản GitHub để tiếp tục`,signInWithGitHub:`Đăng nhập bằng GitHub`,jwtActive:`Xác thực JWT đang hoạt động`,jwtDescription:`Xác thực dựa trên JWT với GitHub OAuth`,github:`GitHub`,provider:`Nhà cung cấp`,tagline:`Ngăn xếp AI của bạn nên trả lời bạn.`,selfHosted:`Tự lưu trữ · Apache 2.0`,highlights:{local:{title:`Ưu tiên cục bộ`,body:`Các cuộc trò chuyện và tệp của bạn vẫn nằm trên máy bạn đang chạy ứng dụng này.`},providers:{title:`Bất kỳ nhà cung cấp nào`,body:`Mô hình cục bộ thông qua Ollama, cộng với các nhà cung cấp từ xa mà bạn chọn thêm.`},work:{title:`Công việc cô lập`,body:`Cấp cho mô hình một không gian làm việc sandbox với tệp, terminal và bản xem trước.`}},oidc:{defaultProviderName:`Đăng nhập một lần`},mfa:{sectionTitle:`Xác thực hai bước`,sectionDescription:`Bảo vệ tài khoản của bạn bằng ứng dụng xác thực và khóa truy cập.`,totpTitle:`Ứng dụng xác thực`,totpEnabledHint:`Đã bật. Mã khôi phục chưa dùng: {{count}}`,totpDisabledHint:`Thêm bước thứ hai vào đăng nhập bằng mật khẩu với mã dùng một lần.`,enableButton:`Bật`,disableButton:`Tắt`,activateButton:`Xác nhận`,regenerateCodes:`Mã khôi phục mới`,confirmWithCode:`Xác nhận bằng mã từ ứng dụng của bạn hoặc mã khôi phục`,enabled:`Xác thực hai bước đã được bật.`,disabled:`Xác thực hai bước đã bị tắt.`,invalidCode:`Mã đó không hợp lệ.`,enrollFailed:`Không thể bắt đầu thiết lập.`,challengeExpired:`Yêu cầu đăng nhập đã hết hạn. Vui lòng đăng nhập lại.`,setupTitle:`Thiết lập xác thực hai bước`,setupSubtitle:`Hệ thống này yêu cầu bước đăng nhập thứ hai. Thêm khóa bí mật vào ứng dụng xác thực để tiếp tục.`,verifyTitle:`Nhập mã của bạn`,verifyHint:`Nhập mã 6 chữ số từ ứng dụng xác thực, hoặc mã khôi phục.`,secretHint:`Thêm khóa bí mật này vào ứng dụng xác thực, sau đó xác nhận bằng mã hiện tại.`,openAuthenticator:`Mở trong ứng dụng xác thực`,codeLabel:`Mã 6 chữ số`,codeOrRecoveryLabel:`Mã hoặc mã khôi phục`,codePlaceholder:`123456`,verifyButton:`Xác minh`,backToSignIn:`Quay lại đăng nhập`,recoveryCodesTitle:`Mã khôi phục`,recoveryCodesHint:`Lưu các mã này ở nơi an toàn. Mỗi mã cho phép đăng nhập một lần nếu bạn mất ứng dụng xác thực.`,recoveryCodesSaved:`Tôi đã lưu mã khôi phục`,recoveryCodesRegenerated:`Đã tạo mã khôi phục mới. Mã cũ không còn hiệu lực.`},passkeys:{sectionTitle:`Khóa truy cập`,sectionDescription:`Đăng nhập không cần mật khẩu bằng khóa màn hình thiết bị hoặc khóa bảo mật.`,addButton:`Thêm khóa truy cập`,empty:`Chưa có khóa truy cập.`,unnamed:`Khóa truy cập`,createdAt:`Đã thêm`,lastUsedAt:`Dùng lần cuối`,removeButton:`Xóa khóa truy cập`,registered:`Đã thêm khóa truy cập.`,registerFailed:`Không thể thêm khóa truy cập.`,removed:`Đã xóa khóa truy cập.`,removeFailed:`Không thể xóa khóa truy cập.`,signInButton:`Đăng nhập bằng khóa truy cập`,signInFailed:`Đăng nhập bằng khóa truy cập thất bại.`,removeConfirmTitle:`Xóa khóa truy cập này?`,removeConfirmDescription:`"{{name}}" sẽ không dùng để đăng nhập được nữa. Bạn có thể đăng ký lại sau.`},password:{show:`Hiện mật khẩu`,hide:`Ẩn mật khẩu`,showConfirmation:`Hiện mật khẩu xác nhận`,hideConfirmation:`Ẩn mật khẩu xác nhận`}},setup:{welcome:{title:`Chào mừng đến với Libre WebUI`,subtitle:`Hãy bắt đầu`,description:`Thiết lập phiên bản Libre WebUI của bạn chỉ trong vài bước`,createAdmin:`Tạo tài khoản quản trị`,features:{secure:{title:`An toàn & Riêng tư`,description:`Cuộc trò chuyện của bạn được lưu trên thiết bị của bạn`},fast:{title:`Nhanh & Phản hồi tốt`,description:`Tối ưu hóa cho tốc độ và hiệu suất`},openSource:{title:`Mã nguồn mở`,description:`Phần mềm miễn phí và mã nguồn mở`}}},admin:{title:`Tạo tài khoản quản trị`,subtitle:`Thiết lập quản trị viên`,description:`Tạo tài khoản quản trị đầu tiên cho phiên bản Libre WebUI của bạn`,usernamePlaceholder:`Nhập tên người dùng quản trị`,passwordPlaceholder:`Nhập mật khẩu (ít nhất 12 ký tự)`,confirmPlaceholder:`Xác nhận mật khẩu của bạn`,creating:`Đang tạo...`,createAdmin:`Tạo quản trị viên`,success:`Tạo tài khoản quản trị thành công!`,failed:`Không thể tạo tài khoản quản trị`,approvalUnexpected:`Không thể kích hoạt quản trị viên ban đầu. Vui lòng thử lại.`,fillAllFields:`Vui lòng điền tất cả các trường`,note:`Đây sẽ là tài khoản quản trị chính cho phiên bản Libre WebUI của bạn`},encryptionKey:{title:`Lưu khóa mã hóa của bạn`,subtitle:`Quan trọng: Lưu khóa này`,description:`Khóa mã hóa này bảo vệ dữ liệu nhạy cảm của bạn. Lưu trữ nó một cách an toàn - bạn sẽ cần nó nếu bạn cần khôi phục cơ sở dữ liệu.`,warning:`Cảnh báo`,warningText:`Nếu bạn mất khóa này và cần khôi phục cơ sở dữ liệu, dữ liệu được mã hóa của bạn (khóa API, tùy chọn) sẽ không thể khôi phục.`,label:`Khóa mã hóa của bạn`,loading:`Đang tải...`,copyToClipboard:`Sao chép vào clipboard`,copied:`Đã sao chép khóa mã hóa vào clipboard!`,copyFailed:`Không thể sao chép khóa vào clipboard`,envNote:`Khóa này cũng được lưu trong tệp backend/.env của bạn dưới dạng ENCRYPTION_KEY`,acknowledgment:`Tôi đã lưu khóa mã hóa của tôi ở nơi an toàn và hiểu rằng việc mất nó có thể dẫn đến mất dữ liệu.`,confirmRequired:`Vui lòng xác nhận rằng bạn đã lưu khóa mã hóa`,continue:`Tiếp tục đến Libre WebUI`,loadFailed:`Không thể tải khóa mã hóa. Hãy thử lại để tiếp tục.`},connectModels:{title:`Kết nối mô hình của bạn`,subtitle:`Cục bộ hoặc đám mây — chọn bất cứ thứ gì bạn đang dùng. Bạn luôn có thể thay đổi điều này sau.`}},chat:JSON.parse(`{"greeting":{"morning":"Chào buổi sáng","afternoon":"Chào buổi chiều","evening":"Chào buổi tối","night":"Chúc ngủ ngon"},"followUp":"Tiếp tục","welcome":{"helpToday":"Tôi có thể giúp gì cho bạn hôm nay?","helpTonight":"Tôi có thể giúp gì cho bạn tối nay?","variety":{"create":{"title":"Chúng ta sẽ tạo gì đây?","subtitle":"Bắt đầu từ một ý nghĩ, bản phác thảo hay bài toán mãi chưa gỡ được."},"explore":{"title":"Ta nên bắt đầu từ đâu?","subtitle":"Hãy mang đến câu hỏi bạn vẫn luôn trăn trở."},"imagine":{"title":"Bạn đang hình dung điều gì?","subtitle":"Chúng ta có thể cùng nhau tạo hình cho nó."},"focus":{"title":"Điều gì đáng để bạn tập trung?","subtitle":"Hãy làm rõ bước tiếp theo."},"untangle":{"title":"Điều gì đang rối?","subtitle":"Cứ cho tôi xem phiên bản lộn xộn trước."},"momentum":{"title":"Khi bạn sẵn sàng, ta bắt đầu.","subtitle":"Tiếp tục một ý tưởng, kế hoạch hay mạch suy nghĩ còn dang dở."},"open":{"title":"Bạn đang nghĩ gì?","subtitle":"Một ý nghĩ nhỏ hay dự án đầy tham vọng đều được."},"challenge":{"title":"Chúng ta cần giải quyết gì?","subtitle":"Hãy cho tôi biết điều gì vẫn chưa ổn."},"draft":{"title":"Hãy bắt đầu từ đâu đó.","subtitle":"Chưa cần phải trau chuốt."},"possibility":{"title":"Điều này có thể trở thành gì?","subtitle":"Cho tôi xem những nguyên liệu thô."},"unexpected":{"title":"Hãy tạo một điều bất ngờ.","subtitle":"Cho tôi một giới hạn, một tâm trạng hay ý tưởng còn dang dở."}}},"input":{"placeholder":"Gửi tin nhắn","messagePlaceholder":"Tin nhắn...","attachImages":"Đính kèm hình ảnh","attachments":"Tệp đính kèm và tính năng nâng cao","sendMessage":"Gửi tin nhắn","stopGeneration":"Dừng tạo","menu":{"uploadImages":"Tải ảnh lên","attachDocument":"Đính kèm tài liệu","attachWebpage":"Đính kèm trang web","structuredOutput":"Đầu ra có cấu trúc","attach":"Đính kèm","documentAttached":"Đã đính kèm tài liệu","webpageAttached":"Đã đính kèm trang web","attachFailed":"Không thể đính kèm","attachKnowledge":"Đính kèm kiến thức","noCollections":"Chưa có bộ sưu tập nào — tạo trong Cài đặt → Tài liệu"},"voiceInput":"Nhập bằng giọng nói","voiceStop":"Dừng nghe","transcriptionSource":"Nguồn nhận dạng giọng nói","browserSpeech":"Dịch vụ nhận dạng giọng nói của trình duyệt","providerTranscriptionDisclosure":"Ghi âm và gửi âm thanh đến {{provider}} để chuyển thành văn bản","webSearchOn":"Tìm kiếm web đang bật — trả lời dùng kết quả trực tiếp","webSearchOff":"Tìm trên web cho tin nhắn này","toolsOn":"Công cụ đang bật — mô hình có thể gọi các công cụ đã được phê duyệt","toolsOff":"Cho phép mô hình gọi công cụ trong tin nhắn này","thinkingOn":"Suy luận đang bật ({{level}})","thinkingOff":"Suy luận trước khi trả lời","thinkingUpdateFailed":"Không thể cập nhật cài đặt suy luận"},"session":{"new":"Cuộc trò chuyện mới","work":"Công việc","chat":"Trò chuyện","private":"Riêng tư","incognito":"Trò chuyện ẩn danh","privateMode":"Chế độ riêng tư","privateDescription":"Cuộc trò chuyện này sẽ không được lưu","privateTooltip":"Bắt đầu cuộc trò chuyện riêng tư sẽ không được lưu","deleteConfirm":"Bạn có chắc chắn muốn xóa cuộc trò chuyện này?","generatingTitle":"Đang tạo tiêu đề","noChats":"Chưa có cuộc trò chuyện nào","createFirst":"Tạo cuộc trò chuyện đầu tiên của bạn ở trên","chats":"Cuộc trò chuyện","renameChat":"Đổi tên cuộc trò chuyện","openNewTab":"Mở trong thẻ mới","pinChat":"Ghim","unpinChat":"Bỏ ghim","deleteChat":"Xóa cuộc trò chuyện","archiveChat":"Lưu trữ cuộc trò chuyện","groups":{"pinned":"Đã ghim","today":"Hôm nay","yesterday":"Hôm qua","previous7Days":"7 ngày qua","previous30Days":"30 ngày qua","older":"Cũ hơn"},"folder":{"new":"Thư mục mới","namePlaceholder":"Tên thư mục","move":"Chuyển vào thư mục","remove":"Gỡ khỏi thư mục","delete":"Xóa thư mục","deleteConfirm":"Xóa thư mục này? Các cuộc trò chuyện bên trong vẫn giữ nguyên.","rename":"Đổi tên thư mục"},"shareChat":"Chia sẻ cuộc trò chuyện…"},"persona":{"applied":"Đã áp dụng persona","label":"Persona","loadFailed":"Không tải được chi tiết persona","removeFailed":"Không thể xóa persona"},"model":{"updated":"Đã cập nhật mô hình","noModels":"Không có mô hình nào","noModelsDescription":"Không có mô hình nào. Hãy đảm bảo Ollama đang chạy và đã cài đặt các mô hình.","pullCommand":"ollama pull llama3.2:3b","noModelsTooltip":"Không có mô hình nào. Vui lòng đảm bảo Ollama đang chạy và các mô hình đã được cài đặt.","selectBeforePrivateChat":"Chọn một mô hình khả dụng trước khi bắt đầu trò chuyện riêng tư","selectBeforeSending":"Chọn một mô hình khả dụng trước khi gửi","selectBeforeRegenerating":"Chọn một mô hình khả dụng trước khi tạo lại","connectDescription":"Chưa có mô hình nào được kết nối. Hãy chọn một nguồn bên dưới — một môi trường chạy cục bộ, máy chủ riêng của bạn, hoặc một API đám mây — và bạn sẽ trò chuyện được trong chưa đầy một phút."},"footer":{"disclaimer":"LLM có thể mắc lỗi - hãy xác minh thông tin quan trọng","images":"{{count}} hình ảnh","images_plural":"{{count}} hình ảnh","structuredOutput":"Đầu ra có cấu trúc"},"mediaUpload":{"dropImagesHere":"Thả hình ảnh vào đây hoặc","supportedFormats":"Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 10MB mỗi file)","browse":"duyệt","unsupportedFileType":"Loại tệp không được hỗ trợ: {{name}}","maxImagesAllowed":"Cho phép tối đa {{count}} hình ảnh","imageTooLarge":"Hình ảnh {{name}} quá lớn (tối đa 10MB)","readFailed":"Không thể đọc {{name}}","uploadAlt":"Tải lên {{number}}","removeImage":"Xóa hình ảnh {{number}}","addMore":"Thêm hình ảnh ({{count}}/{{max}})","uploading":"Đang tải lên","removeDocument":"Xóa {{name}}"},"structuredOutput":{"title":"Định dạng phản hồi","none":"Không có (Ngôn ngữ tự nhiên)","noneDescription":"Phản hồi ngôn ngữ tự nhiên mặc định","json":"JSON","jsonDescription":"Định dạng JSON có cấu trúc","list":"Danh sách","listDescription":"Mảng các mục","summary":"Tóm tắt","summaryDescription":"Tóm tắt tài liệu với các điểm chính","analysis":"Phân tích","analysisDescription":"Phân tích có cấu trúc với ưu/nhược điểm","custom":"Schema tùy chỉnh","customDescription":"Định nghĩa JSON schema của riêng bạn","customSchema":"JSON schema tùy chỉnh","schemaPreview":"Xem trước Schema","applySchema":"Áp dụng Schema","cancel":"Hủy","enabled":"Đã bật đầu ra có cấu trúc"},"controls":{"title":"Điều khiển trò chuyện","systemPrompt":"Prompt hệ thống","systemPromptPlaceholder":"Hướng dẫn chỉ áp dụng cho cuộc trò chuyện này…","advancedParams":"Tham số nâng cao","advancedParamsDescription":"Ghi đè cho cuộc trò chuyện này. Ô trống dùng giá trị mặc định chung.","fromModel":"từ mô hình","fromModelHint":"Giá trị này đến từ cài đặt do chính mô hình đề xuất.","contextCapped":"Ngữ cảnh giới hạn ở {{context}} trong {{trained}} mà mô hình được huấn luyện, để vẫn tải được.","saved":"Đã lưu điều khiển","saveFailed":"Không thể lưu điều khiển","params":{"temperature":"Nhiệt độ","topP":"Top P","topK":"Top K","minP":"Min P","maxTokens":"Số token tối đa","repeatPenalty":"Phạt lặp lại","seed":"Seed","contextLength":"Độ dài ngữ cảnh"},"thinking":"Suy luận","thinkingDescription":"Mức độ mô hình suy luận trước khi trả lời. Mô hình không suy luận sẽ bỏ qua.","compaction":"Nén ngữ cảnh","compactionDescription":"Khi máy chủ nén các cuộc trò chuyện dài, cuộc trò chuyện này có thể đứng ngoài và giữ toàn bộ lịch sử.","compactionDefault":"Mặc định của máy chủ","compactionOff":"Tắt cho cuộc trò chuyện này"},"message":{"sources":"Nguồn","copyFailed":"Không thể sao chép vào bộ nhớ tạm"},"toasts":{"chatCreated":"Đã tạo cuộc trò chuyện mới","createFailed":"Không tạo được phiên","loadFailed":"Không tải được phiên","chatDeleted":"Đã xóa cuộc trò chuyện","deleteFailed":"Không xóa được cuộc trò chuyện","deleteSessionFailed":"Không xóa được phiên","historyCleared":"Đã xóa toàn bộ lịch sử trò chuyện","historyClearFailed":"Không xóa được lịch sử trò chuyện","titleUpdated":"Đã cập nhật tiêu đề cuộc trò chuyện","updateFailed":"Không cập nhật được phiên","noValidSession":"Không có phiên trò chuyện hợp lệ. Vui lòng tạo hoặc chọn cuộc trò chuyện.","sessionNotFound":"Không tìm thấy phiên hoặc phiên không hợp lệ. Vui lòng chọn hoặc tạo phiên trò chuyện hợp lệ.","noModelProvider":"Không có nhà cung cấp mô hình nào khả dụng","modelUnavailable":"Mô hình đã chọn \\"{{model}}\\" không khả dụng từ {{provider}}. Hãy kích hoạt lại nhà cung cấp đó hoặc chọn mô hình khác.","modelSwitched":"Đã chuyển sang {{model}} (mô hình trước không còn khả dụng)","modelsLoadFailed":"Không tải được mô hình","modelUpdated":"Đã cập nhật mô hình cho cuộc trò chuyện hiện tại","modelUpdateFailed":"Không cập nhật được mô hình của phiên","titlePreviewFallback":"Không thể tạo tiêu đề; đang dùng bản xem trước tin nhắn","titleGenerated":"Đã tạo tiêu đề cuộc trò chuyện","titleGenerationFailed":"Không thể tạo tiêu đề cuộc trò chuyện","sessionNotFoundRedirect":"Không tìm thấy phiên. Đang tạo phiên mới...","comparisonError":"{{model}}: {{error}}","generationFailed":"quá trình tạo thất bại","comparisonFailed":"so sánh thất bại","sendFailed":"Không thể gửi tin nhắn","noMessageToRegenerate":"Không có tin nhắn nào để tạo lại","regenerateFailed":"Không thể tạo lại tin nhắn","messageNotFound":"Không tìm thấy tin nhắn","branchSwitched":"Đã chuyển sang biến thể {{number}}","branchSelectFailed":"Không thể chọn nhánh","editFailed":"Không thể chỉnh sửa tin nhắn","toolDecisionFailed":"Không thể ghi lại quyết định của công cụ","archiveFailed":"Không thể lưu trữ cuộc trò chuyện này"},"documents":{"title":"Tài liệu trong ngữ cảnh"},"context":{"title":"Cửa sổ ngữ cảnh:","full":"đầy {{percent}}%","tokensUsed":"đã dùng {{used}} / {{budget}} token","tokensUsedNoBudget":"đã dùng {{used}} token","capped":"giới hạn từ {{trained}}"},"queue":{"title":"Trong hàng đợi ({{total}})","moveUp":"Chuyển lên","moveDown":"Chuyển xuống","updateFailed":"Không thể cập nhật lời nhắc trong hàng đợi","enqueueFailed":"Không thể xếp lời nhắc vào hàng đợi"},"compare":{"title":"So sánh mô hình","hint":"Trả lời với tối đa {{max}} mô hình bổ sung"},"fork":{"action":"Tách nhánh từ đây","created":"Đã tách nhánh cuộc trò chuyện","failed":"Không thể tách nhánh cuộc trò chuyện","origin":"Tách nhánh từ {{title}}","originUnknown":"cuộc trò chuyện khác"},"sharedReadOnly":"Được {{owner}} chia sẻ — chỉ xem","branch":{"variants":"{{count}} biến thể","variants_plural":"{{count}} biến thể","selectVariant":"Chọn biến thể {{number}}","generating":"đang tạo...","select":"chọn"},"sources":{"fullContextFailed":"Không thể cập nhật cài đặt tài liệu đầy đủ","usedByRetrieval":"Được dùng trong câu trả lời","triggerLabel":"Nguồn ({{count}})"},"announce":{"replyFinished":"{{name}} đã trả lời: {{text}}","replyFinishedNoText":"{{name}} đã trả lời xong.","codeBlock":"khối mã","generationStopped":"Đã dừng tạo"}}`),sidebar:{navigation:{chat:`Trò chuyện`,models:`Mô hình`,personas:`Personas`,imagine:`Tưởng tượng`,work:`Công việc`,settings:`Cài đặt`,usageAnalytics:`Mức sử dụng nhà cung cấp`,system:`Hệ thống`,userManagement:`Quản lý người dùng`,signOut:`Đăng xuất`,exploreLabel:`Khám phá`,notes:`Ghi chú`,calendar:`Lịch`,automations:`Tự động hóa`,prompts:`Prompt`,skills:`Kỹ năng`,tools:`Công cụ`,channels:`Kênh`,strands:`Strands`},toggleSize:`Chuyển đổi kích thước thanh bên`,expandSidebar:`Mở rộng thanh bên`,ariaLabel:`Thanh bên`},user:{menu:{changePicture:`Đổi ảnh đại diện`,settings:`Cài đặt`,usageAnalytics:`Mức sử dụng nhà cung cấp`,system:`Hệ thống`,userManagement:`Quản lý người dùng`,logout:`Đăng xuất`,pinShortcut:`Ghim vào thanh bên`,unpinShortcut:`Bỏ ghim khỏi thanh bên`,evaluations:`Đánh giá`},avatar:{title:`Đổi ảnh hồ sơ`,updated:`Đã cập nhật ảnh hồ sơ`,updateFailed:`Không thể cập nhật ảnh hồ sơ`,saving:`Đang lưu...`,label:`Ảnh đại diện`,uploadAvatarImage:`Tải lên ảnh đại diện`,dragAndDrop:`Kéo và thả ảnh hoặc nhấp để duyệt`,chooseImage:`Chọn ảnh`,uploading:`Đang tải lên...`,enterImageUrl:`Hoặc nhập URL ảnh`,supportedFormats:`Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 2MB). Ảnh vuông hoạt động tốt nhất.`,customAvatar:`Ảnh đại diện tùy chỉnh`,clickToChange:`Nhấp để thay đổi hoặc xóa`,removed:`Đã xóa ảnh đại diện`,uploaded:`Tải lên ảnh đại diện thành công`,invalidFile:`Vui lòng chọn tệp ảnh hợp lệ`,fileTooLarge:`Kích thước ảnh đại diện phải nhỏ hơn 2MB`,readFailed:`Không thể đọc tệp ảnh`,uploadFailed:`Không thể tải lên ảnh đại diện`},profile:{noEmail:`Chưa cung cấp email`}},settings:JSON.parse(`{"title":"Cài đặt","tabs":{"appearance":"Giao diện","model":"Mặc định","systemMessage":"Tin nhắn hệ thống","plugins":"Plugin","search":"Tìm kiếm","generation":"Tạo nội dung","documents":"Tài liệu","tts":"Giọng nói","imageGen":"Hình ảnh","data":"Dữ liệu","shortcuts":"Phím tắt","about":"Giới thiệu","sessions":"Phiên đăng nhập","apiKeys":"Khóa API","notifications":"Thông báo","ollamaDisabled":"Ollama đã bị quản trị viên vô hiệu hóa"},"appearance":{"title":"Giao diện","language":{"title":"Ngôn ngữ","description":"Chọn ngôn ngữ ưa thích của bạn"},"theme":{"title":"Chủ đề","light":"Sáng","dark":"Tối","amoled":"Đen Thuần","celestial":"Thiên thể","system":"Hệ thống"},"accent":{"title":"Màu nhấn","custom":"Màu tùy chỉnh","useColor":"Dùng {{color}} làm màu nhấn","behaviorTitle":"Bảng màu giao diện","behaviorDescription":"Chọn chỉ dùng màu nhấn cho các điều khiển hoặc áp dụng cho toàn bộ giao diện sáng hay tối.","defaultStyle":"Mặc định","defaultStyleDescription":"Giữ các bề mặt trung tính của giao diện sáng và tối.","adaptedStyle":"Thích ứng với màu nhấn","adaptedStyleDescription":"Nhuộm bề mặt, đường viền và văn bản bằng màu nhấn."},"chatInterface":{"title":"Giao diện trò chuyện","showUsername":"Hiển thị tên người dùng","showUsernameDescription":"Hiển thị tên người dùng trong tin nhắn trò chuyện","followUpSuggestions":"Gợi ý tiếp theo","followUpSuggestionsDescription":"Gợi ý câu trả lời nhanh sau mỗi phản hồi","hapticFeedback":"Phản hồi xúc giác (Android)","hapticFeedbackDescription":"Dùng rung nhẹ cho các thao tác quan trọng trên thiết bị di động","autoOpenArtifacts":"Tự động mở Artifact","autoOpenArtifactsDescription":"Mở bảng Artifact khi câu trả lời tạo ra một artifact"},"background":{"title":"Hình nền","enable":"Bật hình nền","enableDescription":"Hiển thị hình nền trên Trang chủ và trong Trò chuyện và Công việc.","blur":"Độ mờ","opacity":"Độ trong suốt","upload":"Tải lên hình nền","dragDrop":"Kéo và thả hình ảnh hoặc nhấp để duyệt","chooseImage":"Chọn hình ảnh","effect":"Kiểu","dither":"Dither","original":"Gốc","blurred":"Làm mờ","intensity":"Cường độ","preview":"Xem trước hình nền","change":"Đổi hình ảnh","saved":"Đã lưu","saveFailed":"Không thể lưu thay đổi. Hãy thử lại.","originalPreserved":"Hình ảnh gốc của bạn được giữ nguyên.","fileTooLarge":"Kích thước hình nền không được vượt quá 10 MB."},"celestial":{"title":"Thời điểm trong ngày","description":"Thiên thể đi theo mặt trời nơi bạn ở. Kéo để xem trước bất kỳ phút nào, hoặc để nó đi theo đồng hồ.","live":"Trực tiếp","preview":"Xem trước","followClock":"Theo đồng hồ","sunrise":"Bình minh","sunset":"Hoàng hôn","location":"Vị trí","locationHint":"Tùy chọn. Chỉ lưu trong trình duyệt này và không bao giờ gửi lên máy chủ; tọa độ được làm tròn khoảng một ki-lô-mét.","useMyLocation":"Dùng vị trí của tôi","locationDenied":"Trình duyệt không chia sẻ vị trí. Bạn có thể nhập tọa độ.","latitude":"Vĩ độ","longitude":"Kinh độ","apply":"Áp dụng","clear":"Xóa","approximateDay":"Độ dài ngày ước tính","weather":"Theo thời tiết","weatherHint":"Lấy điều kiện hiện tại từ Open-Meteo cho vị trí của bạn: mây, mưa, tuyết, sương mù và gió tạo nên bầu trời. Cần có vị trí.","weatherLoading":"Đang lấy thời tiết…","weatherUnavailable":"Hiện không có dữ liệu thời tiết.","wind":"gió {{speed}} km/h","kinds":{"clear":"Quang đãng","partly":"Có mây","overcast":"Nhiều mây","fog":"Sương mù","drizzle":"Mưa phùn","rain":"Mưa","snow":"Tuyết","thunder":"Dông"}}},"saveSettings":"Lưu cài đặt","preferences":{"updateFailed":"Không thể cập nhật cài đặt: {{error}}"},"model":{"title":"Cài đặt mô hình","defaultModel":"Mô hình mặc định","defaultModelDescription":"Mô hình này sẽ được sử dụng mặc định cho các cuộc trò chuyện mới","selectModel":"Chọn mô hình","specializedModels":"Mô hình chuyên biệt","visionModel":"Mô hình thị giác","selectVisionModel":"Sử dụng mô hình trò chuyện hiện tại","visionModelDescription":"Được sử dụng tự động bất cứ khi nào ngữ cảnh trò chuyện gửi đi có chứa hình ảnh. Chọn một mô hình hỗ trợ đầu vào hình ảnh.","visionModelUpdateFailed":"Không thể cập nhật mô hình thị giác: {{error}}","visionModelNoProvider":"Mô hình thị giác này không có thông tin nhà cung cấp. Hãy chọn một mô hình khả dụng.","persona":"Persona","updateAll":"Cập nhật tất cả mô hình","updateAllDescription":"Kiểm tra cập nhật và tải phiên bản mới nhất của tất cả mô hình đã cài đặt","updateAllButton":"Cập nhật tất cả","updating":"Đang cập nhật mô hình...","currentModelInfo":"Thông tin mô hình hiện tại","name":"Tên","size":"Kích thước","family":"Họ","format":"Định dạng","status":"Trạng thái","statusStarting":"Đang khởi động...","statusComplete":"Hoàn tất","statusError":"Lỗi","bulkOperations":"Thao tác hàng loạt","autoTitle":{"title":"Tự động tạo tiêu đề","enable":"Bật tự động tạo tiêu đề","enableDescription":"Tạo tiêu đề trò chuyện và bản tóm tắt suy nghĩ theo thời gian thực","taskModel":"Mô hình tác vụ","selectTaskModel":"Chọn mô hình tác vụ","taskModelDescription":"Mô hình dùng cho tiêu đề và bản tóm tắt suy nghĩ theo thời gian thực. Nội dung suy luận gần đây được gửi đến mô hình này."},"updatingModel":"Đang cập nhật {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} trong {{total}} mô hình","defaultModelUpdated":"Mô hình mặc định đã được cập nhật","allModelsUpdated":"Tất cả mô hình đã được cập nhật thành công!","updateAllFailed":"Không thể cập nhật mô hình: {{error}}"},"systemMessage":{"title":"Tin nhắn hệ thống","description":"Đặt tin nhắn hệ thống tùy chỉnh sẽ được sử dụng cho tất cả cuộc trò chuyện mới.","placeholder":"Nhập tin nhắn hệ thống...","saved":"Đã lưu tin nhắn hệ thống","saveFailed":"Không thể lưu tin nhắn hệ thống"},"plugins":{"title":"Plugin","description":"Quản lý các plugin đã cài đặt của bạn","providerConnections":"Kết nối nhà cung cấp","providerConnectionsDescription":"Kết nối, cấu hình và kiểm tra các nhà cung cấp mô hình thông qua plugin.","providers":"Nhà cung cấp","searchProviders":"Tìm kiếm nhà cung cấp","noProvidersFound":"Không có nhà cung cấp nào khớp với tìm kiếm của bạn.","selectProvider":"Chọn một nhà cung cấp","selectProviderDescription":"Chọn một nhà cung cấp để kiểm tra kết nối và danh mục mô hình của nó.","addNew":"Thêm plugin mới","upload":"Tải lên plugin","addJson":"Thêm JSON","uploading":"Đang tải lên...","jsonPlaceholder":"Dán cấu hình JSON của plugin...","install":"Cài đặt plugin","noPlugins":"Chưa có plugin nào được cài đặt","noPluginsDescription":"Thêm plugin để mở rộng chức năng","loading":"Đang tải plugin...","installed":"Plugin đã cài đặt","active":"Plugin đang hoạt động","activeLabel":"Đang hoạt động","inactive":"Không hoạt động","activate":"Kích hoạt","deactivate":"Vô hiệu hóa","models":"mô hình","apiKeySet":"Đã đặt khóa API","apiKeyConfiguration":"Cấu hình khóa API","apiKeyDescription":"Lưu trữ khóa API cá nhân cho {{name}}.","apiKeyEnvAlternative":"Hoặc, đặt biến","environmentVariable":"biến môi trường","apiKeyConfigured":"Đã cấu hình khóa API","apiKeyPlaceholder":"Nhập khóa API của bạn...","saveApiKey":"Lưu khóa API","showApiKey":"Hiển thị khóa API","hideApiKey":"Ẩn khóa API","configure":"Cấu hình","providerSettings":"Cài đặt nhà cung cấp","status":"Trạng thái","defaultEndpoint":"Điểm cuối mặc định","modelCatalog":"Danh mục mô hình","modelCatalogDescription":"Các mô hình đã phát hiện và cấu hình cho nhà cung cấp này cùng khả năng của chúng.","refreshModels":"Làm mới mô hình","noModelsConfigured":"Không có mô hình nào được cấu hình cho nhà cung cấp này.","modelId":"ID mô hình","capabilities":"Khả năng","modelCatalogUpdated":"Danh mục mô hình đã cập nhật: {{count}} mô hình.","modelCatalogUnchanged":"Danh mục mô hình đã được cập nhật.","modelCatalogNeedsApiKey":"Thêm API key hợp lệ cho nhà cung cấp này để tải danh sách mô hình trực tiếp của nó.","modelCatalogUnavailable":"Không thể tải danh sách mô hình của nhà cung cấp.","modelCatalogRefreshFailed":"Không thể làm mới danh mục mô hình","invalidJson":"Định dạng JSON không hợp lệ","capability":{"chat":"Trò chuyện","embedding":"Embedding","image":"Hình ảnh","speech":"Giọng nói","transcription":"Chuyển ngữ"},"exportPlugin":"Xuất plugin","deletePlugin":"Xóa plugin","apiKey":{"title":"Khóa API","placeholder":"Nhập khóa API","save":"Lưu khóa","remove":"Xóa khóa","configured":"Đã cấu hình khóa API","notConfigured":"Cần khóa API","saved":"Đã lưu khóa API thành công","removed":"Đã xóa khóa API","saveFailed":"Không thể lưu khóa API","removeFailed":"Không thể xóa khóa API","enterKey":"Vui lòng nhập khóa API"},"variables":"Variables","dismissError":"Đóng lỗi"},"generation":{"title":"Tùy chọn tạo nội dung","description":"Cấu hình cách AI tạo phản hồi","scopeLabel":"Áp dụng cho","scopeAll":"Tất cả mô hình","scopeModel":"Chỉ {{model}}","scopeAllHint":"Các giá trị mọi mô hình dùng, trừ khi mô hình đó có giá trị riêng.","scopeModelHint":"Chỉ lưu cho mô hình này và được ưu tiên hơn giá trị chung.","advancedSettings":"Cài đặt tạo nâng cao","advancedSettingsDescription":"Lấy mẫu, giới hạn token, ngữ cảnh, hình phạt và chuỗi dừng","coreParameters":"Tham số cốt lõi","temperature":"Nhiệt độ","temperatureDescription":"Kiểm soát tính ngẫu nhiên. Giá trị thấp hơn tập trung hơn, giá trị cao hơn sáng tạo hơn.","topP":"Top P","topPDescription":"Kiểm soát sự đa dạng thông qua lấy mẫu hạt nhân. Giá trị thấp hơn tập trung vào các token có khả năng cao.","topK":"Top K","topKDescription":"Giới hạn lựa chọn token ở K token có khả năng cao nhất. Đặt 0 để vô hiệu hóa.","minP":"Min P","minPDescription":"Ngưỡng xác suất tối thiểu để lựa chọn token.","generationControl":"Kiểm soát tạo nội dung","maxTokens":"Số token tối đa","maxTokensDescription":"Số token tối đa để tạo trong phản hồi.","repeatPenalty":"Hình phạt lặp lại","repeatPenaltyDescription":"Phạt các token lặp lại. Giá trị cao hơn giảm sự lặp lại.","contextLength":"Độ dài ngữ cảnh","contextLengthDescription":"Kích thước cửa sổ ngữ cảnh tối đa cho cuộc trò chuyện.","seed":"Seed","optional":"tùy chọn","random":"Ngẫu nhiên","seedDescription":"Đặt seed cụ thể cho đầu ra có thể tái tạo.","advancedOptions":"Tùy chọn nâng cao","presencePenalty":"Hình phạt hiện diện","presencePenaltyDescription":"Phạt các token xuất hiện trong ngữ cảnh.","frequencyPenalty":"Hình phạt tần suất","frequencyPenaltyDescription":"Phạt các token được sử dụng thường xuyên.","stopSequences":"Chuỗi dừng","commaSeparated":"phân cách bằng dấu phẩy","stopSequencesDescription":"Các token tùy chỉnh sẽ dừng tạo khi gặp phải.","resetDefaults":"Đặt lại mặc định","saveOptions":"Lưu tùy chọn","saveSuccess":"Đã cập nhật tùy chọn tạo nội dung thành công","saveFailed":"Không thể cập nhật tùy chọn tạo nội dung: {{error}}","modelDefaultsLoaded":"Đã tải các cài đặt mà {{model}} đề xuất","resetSuccess":"Đã đặt lại tùy chọn tạo nội dung về mặc định","resetFailed":"Không thể đặt lại tùy chọn tạo nội dung về mặc định: {{error}}","embeddingSettings":"Cài đặt nhúng","enableEmbeddings":"Bật nhúng tài liệu","thinking":"Suy luận","thinkingDescription":"Mức suy luận mặc định cho câu trả lời. Mỗi cuộc trò chuyện có thể thay đổi.","thinkingLevels":{"default":"Mặc định của mô hình","defaultWith":"Mặc định của mô hình ({{level}})","off":"Tắt","on":"Bật","low":"Thấp","medium":"Trung bình","high":"Cao"}},"documents":{"title":"Cài đặt tài liệu","embeddings":{"title":"Nhúng","enable":"Bật nhúng tài liệu","model":"Mô hình nhúng","modelDescription":"Chọn mô hình được sử dụng để nhúng tài liệu","chunkSize":"Kích thước đoạn","chunkSizeInTokens":"(tính bằng token)","chunkSizeDescription":"Kích thước các đoạn văn bản để nhúng","chunkOverlap":"Độ chồng chéo đoạn","chunkOverlapInTokens":"(tính bằng token)","chunkOverlapDescription":"Độ chồng chéo giữa các đoạn liên tiếp","similarityThreshold":"Ngưỡng tương đồng","similarityDescription":"Điểm tương đồng tối thiểu để bao gồm kết quả","status":"Trạng thái nhúng","statusLabel":"Trạng thái","available":"Khả dụng","unavailable":"Không khả dụng","chunksWithEmbeddings":"Đoạn có nhúng","coverage":"Độ phủ","regenerate":"Tạo lại nhúng","regenerating":"Đang tạo lại...","regenerateSuccess":"Đã tạo lại nhúng cho {{count}} tài liệu","regeneratePartialSuccess":"Đã tạo lại {{count}} tài liệu; bỏ qua {{skipped}}","regenerateFailed":"Không thể tạo lại nhúng: {{error}}","saveSuccess":"Đã cập nhật cài đặt nhúng thành công","saveFailed":"Không thể cập nhật cài đặt nhúng: {{error}}","resetSuccess":"Đã đặt lại cài đặt nhúng về mặc định","resetFailed":"Không thể đặt lại cài đặt nhúng về mặc định: {{error}}"},"collections":{"title":"Bộ sưu tập kiến thức","description":"Nhóm tài liệu thành bộ sưu tập và đính kèm vào bất kỳ cuộc trò chuyện nào.","namePlaceholder":"Tên bộ sưu tập","create":"Tạo","none":"Không có bộ sưu tập","deleteConfirm":"Xóa bộ sưu tập này? Tài liệu bên trong vẫn giữ nguyên.","createFailed":"Không thể tạo bộ sưu tập","deleteFailed":"Không thể xóa bộ sưu tập","assignFailed":"Không thể di chuyển tài liệu","share":"Chia sẻ bộ sưu tập","shared":"đã chia sẻ","assignTo":"Bộ sưu tập cho {{name}}"},"library":{"title":"Tài liệu đã tải lên","description":"Tài liệu có thể dùng làm ngữ cảnh trò chuyện. Tài liệu tải lên trong một cuộc trò chuyện chỉ ở lại cuộc đó; tài liệu không thuộc cuộc trò chuyện hay bộ sưu tập nào sẽ tham gia mọi cuộc trò chuyện.","empty":"Chưa có tài liệu nào được tải lên.","chatScope":"Một cuộc trò chuyện","everyChatScope":"Mọi cuộc trò chuyện","deleteConfirm":"Xóa \\"{{name}}\\"? Tài liệu sẽ biến mất khỏi mọi cuộc trò chuyện.","deleteFailed":"Không thể xóa tài liệu","extractionFailed":"Trích xuất thất bại","extractionQueued":"Đang trích xuất…"}},"tts":{"title":"Chuyển văn bản thành giọng nói","description":"Cấu hình cài đặt chuyển văn bản thành giọng nói để đọc to tin nhắn","loadingProviders":"Đang tải nhà cung cấp TTS...","noProviders":"Không có nhà cung cấp TTS","noProvidersDescription":"Cấu hình plugin hỗ trợ TTS để bật chuyển văn bản thành giọng nói","enable":"Bật TTS","enableDescription":"Cho phép chuyển văn bản thành giọng nói cho tin nhắn trợ lý","autoPlay":"Tự động phát phản hồi","autoPlayDescription":"Tự động đọc to các tin nhắn trợ lý mới","streamSentences":"Phát tự nhiên theo lô","streamSentencesDescription":"Tạo trước nhiều lô theo cụm từ rồi phát dưới dạng một câu trả lời liền mạch.","voiceConfiguration":"Cấu hình giọng nói","model":"Mô hình TTS","modelDescription":"Chọn mô hình để chuyển văn bản thành giọng nói","voice":"Giọng nói","selectVoice":"Chọn giọng nói","voiceDescription":"Chọn giọng nói để chuyển văn bản thành giọng nói","providerDefaultVoice":"Mô hình này dùng giọng mặc định, trừ khi bạn cung cấp bản ghi tham chiếu khi tạo lời nói.","voiceCloningAvailable":"Có thể sao chép giọng nói","voiceCloningAvailableDescription":"Dùng Hình dung → Âm thanh để tạo lời nói từ bản ghi tham chiếu đã được cho phép và bản chép lời chính xác. Bạn có thể lưu bản tham chiếu làm giọng nói có thể tái sử dụng.","savedVoiceOption":"{{name}} (giọng đã lưu)","savedVoices":"Giọng đã lưu","loadingSavedVoices":"Đang tải giọng đã lưu…","deleteSavedVoice":"Xóa giọng đã lưu {{name}}","deleteSavedVoiceConfirm":"Xóa giọng đã lưu “{{name}}”? Bản ghi tham chiếu và bản chép lời sẽ bị xóa.","savedVoiceDeleted":"Đã xóa giọng lưu","savedVoicePreferenceCleanupFailed":"Đã xóa giọng lưu nhưng không thể đặt lại cài đặt Giọng nói","savedVoiceDeleteFailed":"Không thể xóa giọng đã lưu","speed":"Tốc độ","speedSlow":"0.5x","speedNormal":"1.0x","speedFast":"2.0x","availableProviders":"Nhà cung cấp khả dụng","models":"mô hình","test":"Kiểm tra","testing":"Đang kiểm tra...","stop":"Dừng","consentRevoked":"Đã rút lại sự đồng ý","consentExpired":"Sự đồng ý đã hết hạn","transferCount":"đã gửi tới nhà cung cấp {{total}} lần","consentExpires":"đồng ý đến {{date}}","revokeSavedVoice":"Rút lại sự đồng ý cho {{name}}","revokeSavedVoiceConfirm":"Rút lại sự đồng ý cho “{{name}}”? Giọng nói đã lưu sẽ không dùng được nữa, nhưng hồ sơ đồng ý vẫn được giữ.","savedVoiceRevoked":"Đã rút lại sự đồng ý","savedVoiceRevokeFailed":"Không thể rút lại sự đồng ý","savedVoiceUnavailableCleanupFailed":"Giọng nói đã lưu không khả dụng và không thể xóa khỏi cài đặt Giọng nói","saveSuccess":"Đã lưu cài đặt TTS thành công","saveFailed":"Không thể lưu cài đặt TTS: {{error}}","testFailed":"Kiểm tra TTS thất bại: {{error}}"},"imageGen":{"title":"Tạo hình ảnh","description":"Cấu hình cài đặt và nhà cung cấp tạo hình ảnh","loadingProviders":"Đang tải nhà cung cấp tạo hình ảnh...","noProviders":"Không có nhà cung cấp tạo hình ảnh","noProvidersDescription":"Cấu hình plugin hỗ trợ tạo hình ảnh","enable":"Bật tạo hình ảnh","enableDescription":"Cho phép tạo hình ảnh AI trong cuộc trò chuyện","configuration":"Cấu hình","model":"Mô hình","modelDescription":"Chọn mô hình để tạo hình ảnh","size":"Kích thước","sizeDescription":"Độ phân giải của hình ảnh được tạo","quality":"Chất lượng","qualityDescription":"Mức chất lượng của hình ảnh được tạo","style":"Phong cách","styleDescription":"Preset phong cách cho hình ảnh được tạo","availableProviders":"Nhà cung cấp khả dụng","models":"mô hình","saveSuccess":"Đã lưu cài đặt tạo hình ảnh thành công","saveFailed":"Không thể lưu cài đặt tạo hình ảnh: {{error}}"},"data":{"title":"Quản lý dữ liệu","export":"Xuất dữ liệu","exportDescription":"Tải xuống một tệp lưu trữ di động gồm tùy chọn, thư mục trò chuyện, phiên và tin nhắn, ghi chú, bộ sưu tập kiến thức và văn bản trích xuất từ tài liệu.","archiveScopeV3":"Bao gồm tùy chọn, cuộc trò chuyện, thư mục, ghi chú, bộ sưu tập kiến thức và văn bản trích xuất từ tài liệu. Không bao gồm tài khoản và bí mật, giọng nói nhân bản sinh trắc học, nội dung đa phương tiện đã tạo, persona và bộ nhớ, cũng như dữ liệu hoặc ổ đĩa Work.","exportAll":"Xuất tất cả dữ liệu","import":"Nhập dữ liệu","importDescription":"Nhập dữ liệu từ bản xuất trước đó.","importData":"Nhập dữ liệu","importing":"Đang nhập...","clearSessions":"Xóa phiên","clearSessionsDescription":"Xóa tất cả phiên trò chuyện. Hành động này không thể hoàn tác.","clearAll":"Xóa tất cả","clearing":"Đang xóa...","importOptions":"Tùy chọn nhập","importOptionsDescription":"Chọn cách xử lý dữ liệu hiện có","validatingArchive":"Đang xác thực tệp lưu trữ và tính toán thay đổi…","archiveValidationFailed":"Xác thực tệp lưu trữ thất bại","preflightReport":"Xem trước nội dung nhập","preflightIncoming":"{{folders}} thư mục · {{sessions}} cuộc trò chuyện · {{messages}} tin nhắn · {{notes}} ghi chú · {{collections}} bộ sưu tập · {{documents}} tài liệu · {{chunks}} đoạn","preflightRemappedIds":"{{count}} ID sẽ được ánh xạ lại để bảo vệ dữ liệu của tài khoản khác.","skipDuplicates":"Bỏ qua bản sao","overwrite":"Ghi đè hiện có","importResults":"Kết quả nhập","preferences":"Tùy chọn","imported":"Đã nhập","failed":"Thất bại","sessions":"Phiên","sessionFolders":"Thư mục phiên","notes":"Ghi chú","knowledgeCollections":"Bộ sưu tập kiến thức","importedLabel":"đã nhập","overwrittenLabel":"đã ghi đè","skipped":"đã bỏ qua","toCreate":"sẽ tạo","toOverwrite":"sẽ ghi đè","toSkip":"sẽ bỏ qua","documents":"Tài liệu","warnings":"Cảnh báo","refreshAfterImportFailed":"Dữ liệu đã được nhập, nhưng không thể làm mới một số chế độ xem. Hãy tải lại Libre WebUI để xem mọi thay đổi.","exportSuccess":"Đã xuất tệp lưu trữ dữ liệu di động","exportFailed":"Xuất thất bại","importSuccess":"Đã nhập tệp lưu trữ dữ liệu di động","importFailed":"Nhập thất bại","archiveErrors":{"invalidJson":"Tệp lưu trữ di động không phải là JSON hợp lệ.","objectRequired":"Tệp lưu trữ di động phải chứa một đối tượng JSON.","unsupportedVersion":"Không hỗ trợ phiên bản {{version}} của tệp lưu trữ di động.","unrecognized":"Tệp này không phải là tệp lưu trữ di động của Libre WebUI."},"errors":"Lỗi","archivedChats":{"title":"Cuộc trò chuyện đã lưu trữ","empty":"Không có cuộc trò chuyện nào được lưu trữ","unarchive":"Bỏ lưu trữ"},"clearAllConfirm":"Bạn có chắc muốn xóa toàn bộ lịch sử trò chuyện? Không thể hoàn tác."},"about":{"title":"Giới thiệu","versionLabel":"Phiên bản","ollama":{"title":"Trạng thái Ollama","version":"Phiên bản","healthy":"Khỏe mạnh","unhealthy":"Không khỏe mạnh"},"stats":{"models":"Mô hình","sessions":"Phiên"},"features":{"privacy":{"title":"Ưu tiên quyền riêng tư","description":"Dữ liệu của bạn được lưu trên thiết bị của bạn"},"openSource":{"title":"Mã nguồn mở","description":"Phần mềm miễn phí và mã nguồn mở"},"localInference":{"title":"Suy luận cục bộ","description":"Chạy mô hình AI cục bộ với Ollama"}},"openSourceBy":"Mã nguồn mở bởi {{company}}","links":{"title":"Liên kết","github":"GitHub","githubDescription":"Xem mã nguồn và đóng góp","website":"Website","websiteDescription":"Truy cập website của chúng tôi","documentation":"Tài liệu","reportIssue":"Báo cáo vấn đề","reportIssueDescription":"Báo lỗi & yêu cầu tính năng","documentationDescription":"Hướng dẫn, bài học và tham khảo API","forgejo":"Bản sao Forgejo","forgejoDescription":"Kho Forgejo tự lưu trữ","sponsor":"Tài trợ","sponsorDescription":"Giúp tài trợ cho dự án","star":"Gắn sao trên GitHub","starDescription":"Một ngôi sao giúp người khác khám phá dự án"},"version":"Phiên bản {{version}}","updates":{"checking":"Đang kiểm tra bản cập nhật…","upToDate":"Bạn đang dùng phiên bản mới nhất","updateAvailable":"Đã có phiên bản {{version}}","ahead":"Đang chạy trước bản phát hành mới nhất ({{version}})","checkFailed":"Không thể kiểm tra bản cập nhật","viewChangelog":"Xem nhật ký thay đổi"}},"groups":{"general":"Chung","chat":"Trò chuyện","media":"Giọng nói & hình ảnh","connections":"Kết nối","admin":"Quản trị"},"search":{"title":"Tìm kiếm web","description":"Tìm kiếm trên web qua một phiên bản SearXNG tự lưu trữ. Khi bật, khung soạn chat có nút tìm kiếm và các tác vụ Work có mạng có thể tìm kiếm.","enableLabel":"Bật tìm kiếm web","enableDescription":"Cung cấp tìm kiếm web cho chat và tác vụ Work. Tìm kiếm chạy phía máy chủ trên phiên bản đã cấu hình.","urlLabel":"URL SearXNG","urlDescription":"URL gốc của phiên bản SearXNG mà máy chủ truy cập được. Bộ triển khai riêng đi kèm cung cấp http://searxng:8080.","maxResultsLabel":"Kết quả mỗi lần tìm","maxResultsDescription":"Bao nhiêu kết quả được đưa vào trả lời hoặc lệnh gọi công cụ, 1-100.","maxResultsInvalid":"Kết quả mỗi lần tìm phải từ 1 đến 100.","safeSearchLabel":"Tìm kiếm an toàn","safeSearchDescription":"Yêu cầu công cụ lọc kết quả nhạy cảm.","test":"Kiểm tra kết nối","testing":"Đang kiểm tra…","testOk":"Tìm kiếm hoạt động — trả về {{results}} kết quả","testFailed":"Kiểm tra tìm kiếm thất bại","save":"Lưu","saved":"Đã lưu cài đặt tìm kiếm","saveFailed":"Không thể lưu cài đặt tìm kiếm"},"compaction":{"title":"Nén ngữ cảnh","description":"Khi một cuộc trò chuyện vượt quá ngưỡng token, máy chủ sẽ tóm tắt các tin nhắn cũ và chỉ giữ nguyên văn những tin nhắn mới nhất. Áp dụng cho mọi người dùng trên máy chủ này.","thresholdLabel":"Ngưỡng token","thresholdDescription":"Số token ngữ cảnh ước tính mà khi vượt quá, lịch sử cũ sẽ được tóm tắt, 500-1.000.000.","thresholdInvalid":"Ngưỡng token phải từ 500 đến 1.000.000.","keepRecentLabel":"Số tin nhắn gần đây được giữ","keepRecentDescription":"Bao nhiêu tin nhắn mới nhất luôn được giữ nguyên văn, 2-200.","keepRecentInvalid":"Số tin nhắn gần đây được giữ phải từ 2 đến 200.","modelLabel":"Mô hình nén","modelDescription":"Mô hình viết các bản tóm tắt. Khi không chọn, mô hình của chính phiên sẽ được dùng.","sessionModelOption":"Dùng mô hình của phiên","promptLabel":"Prompt tóm tắt tùy chỉnh","promptPlaceholder":"Để trống để dùng prompt tích hợp","promptDescription":"Các biến mẫu {{previousSummaryVariable}} và {{messagesVariable}} được thay bằng bản tóm tắt trước đó và các tin nhắn đang được tóm tắt.","saved":"Đã lưu cài đặt nén","saveFailed":"Không thể lưu cài đặt nén","loadFailed":"Không thể tải cài đặt nén"},"sessions":{"title":"Phiên đăng nhập","description":"Tất cả những nơi tài khoản này đang đăng nhập. Đăng xuất một phiên có hiệu lực ngay lập tức; đăng nhập lại sẽ khôi phục quyền truy cập.","signOutOthers":"Đăng xuất các phiên khác","signingOutOthers":"Đang đăng xuất…","signOut":"Đăng xuất","signingOut":"Đang đăng xuất…","revoked":"Đã đăng xuất phiên.","revokeFailed":"Không thể đăng xuất phiên.","othersRevoked":"Số phiên khác đã đăng xuất: {{count}}","loadFailed":"Không tải được danh sách phiên.","empty":"Không tìm thấy phiên nào.","current":"Phiên này","revokedBadge":"Đã đăng xuất","unknownDevice":"Thiết bị không xác định","createdAt":"Đăng nhập lúc","lastSeenAt":"Hoạt động gần nhất","expiresAt":"Hết hạn","signOutConfirmTitle":"Đăng xuất phiên này?","signOutConfirmDescription":"{{device}} sẽ bị đăng xuất ngay và phải đăng nhập lại.","signOutOthersConfirmTitle":"Đăng xuất các phiên khác?","signOutOthersConfirmDescription":"{{count}} phiên khác sẽ bị đăng xuất ngay. Phiên này vẫn đăng nhập."},"apiKeys":{"title":"Khóa API","description":"Token có phạm vi giới hạn dành cho tập lệnh và tích hợp. Mỗi khóa chỉ có quyền truy cập vào các phạm vi bạn chọn.","newKeyTitle":"Khóa API mới của bạn","copy":"Sao chép","copied":"Đã sao chép vào bộ nhớ tạm.","copyFailed":"Sao chép thất bại.","showOnceWarning":"Hãy sao chép ngay, khóa sẽ không được hiển thị lại.","dismiss":"Xong","createTitle":"Tạo khóa","nameLabel":"Tên","namePlaceholder":"ví dụ: CI pipeline","nameRequired":"Hãy đặt tên cho khóa.","expiryLabel":"Hết hạn sau (số ngày, tùy chọn)","expiryPlaceholder":"Không bao giờ","expiryInvalid":"Thời hạn phải là số ngày nguyên.","scopesLabel":"Phạm vi","scopesRequired":"Chọn ít nhất một phạm vi.","create":"Tạo khóa","creating":"Đang tạo…","created":"Đã tạo khóa API.","createFailed":"Không thể tạo khóa API.","revoke":"Thu hồi","revoking":"Đang thu hồi…","revoked":"Đã thu hồi khóa API.","revokeFailed":"Không thể thu hồi khóa API.","revokedBadge":"Đã thu hồi","loadFailed":"Không tải được danh sách khóa API.","empty":"Chưa có khóa API nào.","createdAt":"Đã tạo","lastUsedAt":"Dùng lần cuối","expiresAt":"Hết hạn","neverExpires":"Không bao giờ","revokeConfirmTitle":"Thu hồi \\"{{name}}\\"?","revokeConfirmDescription":"Mọi thứ dùng khóa API này sẽ ngừng hoạt động ngay lập tức. Không thể hoàn tác."},"notifications":{"title":"Thông báo","description":"Cách trình duyệt này được báo về lượt nhắc, chia sẻ, lời nhắc và công việc đã xong.","pushTitle":"Thông báo trình duyệt","pushHint":"Hiển thị thông báo hệ thống từ thiết bị này ngay cả khi thẻ đang ở nền.","enabled":"Thông báo trình duyệt đang bật trên thiết bị này.","disabled":"Thông báo trình duyệt đang tắt trên thiết bị này.","enableFailed":"Không thể bật thông báo trình duyệt.","permissionDenied":"Thông báo bị chặn trong cài đặt trình duyệt cho trang này.","unsupported":"Trình duyệt này không hỗ trợ thông báo đẩy.","workerMissing":"Thông báo đẩy cần ứng dụng đã cài đặt. Tải lại bản chạy chính thức và thử lại.","deviceNote":"Thông báo áp dụng theo thiết bị. Đăng xuất phiên cũng xóa đăng ký đẩy của nó.","emailTitle":"Thông báo qua email","emailHint":"Tin nhắn sẽ gửi đến {{address}}.","emailLoading":"Đang kiểm tra xem email có khả dụng không…","emailUnavailable":"Quản trị viên chưa thiết lập máy chủ gửi thư.","emailNoAddress":"Tài khoản của bạn chưa có địa chỉ email. Hãy nhờ quản trị viên thêm một địa chỉ trong mục Quản lý người dùng.","emailLoadFailed":"Không thể kiểm tra tình trạng khả dụng của email.","emailMentions":"Lượt nhắc trong kênh","emailMentionsHint":"Gửi email cho tôi khi có người nhắc đến tôi trong một kênh.","emailAutomations":"Kết quả tự động hóa","emailAutomationsHint":"Gửi email cho tôi kết quả của mỗi lần chạy tự động hóa, dù thành công hay thất bại."}}`),models:{title:`Mô hình`,subtitle:`Tải, quản lý và giám sát mô hình Ollama của bạn`,installed:`Mô hình đã cài đặt`,available:`Mô hình khả dụng`,pull:`Tải mô hình`,pulling:`Đang tải...`,delete:`Xóa mô hình`,deleting:`Đang xóa...`,size:`Kích thước`,modified:`Đã sửa đổi`,family:`Họ`,parameters:`Tham số`,quantization:`Lượng tử hóa`,noModels:`Chưa có mô hình nào được cài đặt`,pullFirst:`Tải mô hình để bắt đầu`,noModelsFound:`Không tìm thấy mô hình`},personas:{title:`Personas`,create:`Tạo Persona`,edit:`Chỉnh sửa Persona`,delete:`Xóa Persona`,name:`Tên`,description:`Mô tả`,systemPrompt:`Prompt hệ thống`,model:`Mô hình`,avatar:`Ảnh đại diện`,background:`Hình nền`,noPersonas:`Chưa có persona nào được tạo`,createFirst:`Tạo persona đầu tiên của bạn để tùy chỉnh trải nghiệm trò chuyện`},gallery:{title:`Thư viện`,subtitle:`Thư viện hình ảnh do AI tạo của bạn`,imageCount:`{{count}} hình ảnh`,generate:`Tạo hình ảnh`,generateDescription:`Tạo hình ảnh với AI`,generating:`Đang tạo...`,prompt:`Prompt`,promptPlaceholder:`Mô tả hình ảnh bạn muốn tạo...`,noImages:`Chưa có hình ảnh nào được tạo`,download:`Tải xuống`,delete:`Xóa`,regenerate:`Tạo lại`,model:`Mô hình`,size:`Kích thước`,quality:`Chất lượng`,created:`Đã tạo`,lightboxLabel:`Xem trước hình ảnh`},errors:{generic:`Đã xảy ra lỗi`,network:`Lỗi mạng. Vui lòng kiểm tra kết nối của bạn.`,unauthorized:`Bạn không được phép thực hiện hành động này.`,notFound:`Không tìm thấy tài nguyên được yêu cầu.`,serverError:`Lỗi máy chủ. Vui lòng thử lại sau.`,validation:`Vui lòng kiểm tra đầu vào của bạn và thử lại.`},keyboard:{title:`Phím tắt`,toggleSidebar:`Chuyển đổi thanh bên`,openSettings:`Mở cài đặt`,toggleDarkMode:`Chuyển đổi chế độ tối`,showShortcuts:`Hiển thị phím tắt`,closeModals:`Đóng hộp thoại`,groups:{navigation:`Điều hướng`,general:`Chung`,chat:`Trò chuyện`,workspace:`Không gian làm việc`},actions:{sendMessage:`Gửi tin nhắn`,newLine:`Dòng mới trong tin nhắn`,saveEdit:`Lưu tin nhắn đã chỉnh sửa`,cancelEdit:`Hủy chỉnh sửa`,saveFile:`Lưu tệp`,formatCode:`Định dạng mã`},description:`Tất cả phím tắt có trong Libre WebUI.`,newChat:`Trò chuyện mới`,newWork:`Phiên Work mới`,openPalette:`Mở bảng lệnh`},modelDownload:{success:`Đã tải xuống {{name}}`,failed:`Không thể tải xuống: {{error}}`,startFailed:`Không thể bắt đầu tải xuống`,cancelled:`Đã hủy tải xuống`},modelTools:{toasts:{fetchInfoFailed:`Không thể lấy thông tin`,pushSuccess:`Đã đẩy mô hình`,createSuccess:`Đã tạo mô hình`,copySuccess:`Đã sao chép mô hình`,embeddingsSuccess:`Đã tạo các vector nhúng (xem bảng điều khiển)`,failed:`Thất bại`,unknownError:`Lỗi không xác định`}},modelManager:{title:`Mô hình`,loading:`Đang tải mô hình...`,systemStatus:{online:`Ollama trực tuyến`,offline:`Ollama ngoại tuyến`,models:`mô hình`,models_plural:`mô hình`,running:`đang chạy`,vram:`VRAM`},sections:{pull:`Tải mô hình mới`,library:`Duyệt thư viện`,huggingface:`HuggingFace Hub`,running:`Mô hình đang chạy`,local:`Mô hình cục bộ`,advanced:`Hành động nâng cao`,catalog:`Danh mục mô hình`},catalog:{searchPlaceholder:`Tìm mô hình theo tên hoặc nhà cung cấp...`,noModels:`Chưa có mô hình nào khả dụng.`,empty:`Không có mô hình nào khớp với tìm kiếm của bạn.`,providerOllama:`Ollama`,hidden:`Đã ẩn`,visibilityFailed:`Không thể cập nhật hiển thị của mô hình.`,filterAll:`Tất cả mô hình`,filterLocal:`Cục bộ`,filterProviders:`Nhà cung cấp`,filterHidden:`Đã ẩn`,enableAll:`Bật các mục đang hiện`,disableAll:`Tắt các mục đang hiện`,rename:`Sửa tên và ảnh`,setPicture:`Đặt ảnh`,clearPicture:`Xóa ảnh`,pictureInvalid:`Hãy chọn một tệp ảnh.`,pictureTooLarge:`Ảnh phải nhỏ hơn 192 KB.`,saving:`Đang lưu…`,hide:`Ẩn với người dùng`,show:`Hiện với người dùng`,star:`Gắn sao cho {{name}}`,unstar:`Bỏ sao khỏi {{name}}`,filterLabel:`Lọc mô hình`,displayName:`Tên hiển thị cho {{name}}`},pull:{placeholder:`Nhập tên mô hình (vd: llama3.2:3b, deepseek-r1:14b)`,button:`Tải`,cancel:`Hủy`,popular:`Mô hình phổ biến:`,browseAll:`Duyệt tất cả mô hình trên ollama.com`,success:`Đã tải mô hình {{name}} thành công`,cancelled:`Đã hủy tải mô hình`,failed:`Không thể tải mô hình`,enterName:`Vui lòng nhập tên mô hình`,restricted:`Việc cài đặt mô hình trên phiên bản này chỉ dành cho quản trị viên.`},progress:{starting:`Đang khởi tạo...`,pulling:`Đang tải mô hình...`,pullingLayer:`đang tải`,verifying:`Đang xác minh tính toàn vẹn...`,verifyingDigest:`đang xác minh digest sha256`,writing:`Đang ghi manifest...`,cleaning:`Đang dọn dẹp...`},library:{available:`khả dụng`,search:`Tìm kiếm mô hình...`,noResults:`Không tìm thấy mô hình nào phù hợp với tiêu chí của bạn`,installed:`Đã cài đặt`,more:`+{{count}} thêm`,refresh:`Làm mới thư viện`},huggingface:{browseAll:`Xem tất cả trên HuggingFace`,checkingGguf:`Đang tìm tệp GGUF...`,noGgufAvailable:`Không có tệp GGUF để tải trực tiếp vào Ollama`,ggufFilesCount:`Tệp GGUF ({{count}}) - Tải trực tiếp vào Ollama`,noModelsFound:`Không tìm thấy mô hình`,noResults:`Không tìm thấy mô hình. Thử điều chỉnh tìm kiếm hoặc bộ lọc.`,browseAllLink:`Xem tất cả`,search:`Tìm kiếm mô hình HuggingFace...`,by:`bởi`,gated:`Truy cập hạn chế`,viewOnHF:`Xem trên HuggingFace`,sortDownloads:`Lượt tải`,sortLikes:`Lượt thích`,sortRecent:`Gần đây`,taskTextGeneration:`Tạo văn bản`,taskTextToSpeech:`Văn bản thành giọng nói`,taskTextToImage:`Văn bản thành hình ảnh`,taskSpeechRecognition:`Nhận dạng giọng nói`,tasks:{textGen:`Tạo văn bản`,tts:`Văn bản thành giọng nói`,image:`Văn bản thành hình ảnh`,stt:`Nhận dạng giọng nói`},sort:{downloads:`Tải nhiều nhất`,likes:`Được thích nhiều nhất`,recent:`Cập nhật gần đây`}},local:{noModels:`Chưa có mô hình nào được cài đặt`,pullToStart:`Tải mô hình ở trên để bắt đầu`,installed:`đã cài đặt`,running:`Đang chạy`,info:`Thông tin`,copy:`Sao chép`,delete:`Xóa`,deleteConfirm:`Bạn có chắc chắn muốn xóa mô hình "{{name}}"?`,deleteSuccess:`Đã xóa mô hình {{name}} thành công`,deleteFailed:`Không thể xóa mô hình`},advanced:{createModel:`Tạo mô hình`,fromModelfile:`Từ Modelfile`,copyModel:`Sao chép mô hình`,duplicateExisting:`Nhân đôi hiện có`,testEmbeddings:`Kiểm tra nhúng`,generateVectors:`Tạo vector`,healthCheck:`Kiểm tra sức khỏe`,testConnection:`Kiểm tra kết nối`,healthy:`Ollama đang hoạt động tốt!`},modals:{details:{title:`Chi tiết mô hình`,info:`Thông tin mô hình`,family:`Họ`,parameters:`Tham số`,quantization:`Lượng tử hóa`,format:`Định dạng`,systemPrompt:`Prompt hệ thống`,template:`Mẫu`,license:`Giấy phép`,modelfile:`Modelfile`,noDetails:`Không có chi tiết`},copy:{title:`Sao chép mô hình`,source:`Mô hình nguồn`,selectModel:`Chọn mô hình...`,newName:`Tên mô hình mới`,placeholder:`vd: my-custom-model`,copying:`Đang sao chép...`,button:`Sao chép mô hình`,success:`Đã sao chép mô hình sang {{name}}`,failed:`Không thể sao chép mô hình`,enterBoth:`Vui lòng nhập cả tên nguồn và tên đích`},create:{title:`Tạo mô hình tùy chỉnh`,name:`Tên mô hình`,namePlaceholder:`vd: my-assistant`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
|
|
2
|
+
SYSTEM You are a helpful assistant.`,see:`Xem`,docs:`Tài liệu Modelfile`,docsLink:`để tham khảo cú pháp`,creating:`Đang tạo...`,button:`Tạo mô hình`,success:`Đã tạo mô hình {{name}} thành công`,failed:`Không thể tạo mô hình`,enterBoth:`Vui lòng nhập tên mô hình và nội dung Modelfile`},embeddings:{title:`Kiểm tra nhúng`,model:`Mô hình nhúng`,selectModel:`Chọn mô hình...`,recommended:`Khuyến nghị: nomic-embed-text, mxbai-embed-large`,input:`Văn bản đầu vào`,placeholder:`Nhập văn bản để tạo nhúng cho...`,generating:`Đang tạo...`,button:`Tạo nhúng`,result:`Kết quả ({{count}} chiều)`,success:`Đã tạo vector nhúng {{count}} chiều`,failed:`Không thể tạo nhúng`,enterBoth:`Vui lòng chọn mô hình và nhập văn bản`}}},personaManager:{title:`Personas`,subtitle:`Tạo và quản lý các persona AI với tính cách, bộ nhớ và hành vi tùy chỉnh`,loading:`Đang tải personas...`,createButton:`Tạo Persona`,importExport:`Nhập/Xuất`,stats:{title:`Personas của bạn`,count:`{{count}} persona đã tạo`,count_plural:`{{count}} personas đã tạo`},empty:{title:`Chưa có persona nào`,description:`Tạo persona đầu tiên của bạn để bắt đầu với tương tác AI được cá nhân hóa`,button:`Tạo Persona đầu tiên của bạn`},deleteConfirm:`Bạn có chắc chắn muốn xóa "{{name}}"?`,deleteSuccess:`Đã xóa persona "{{name}}" thành công`,downloadSuccess:`Đã tải xuống persona "{{name}}" thành công`,failed:`Không thể {{action}} persona`,loadFailed:`Không thể tải các persona của bạn.`,deleteFailed:`Xóa persona thất bại`,downloadFailed:`Tải persona xuống thất bại`},personaForm:{title:{create:`Tạo Persona mới`,edit:`Chỉnh sửa Persona`},subtitle:{create:`Tạo một persona AI mới với tính cách tùy chỉnh, hệ thống bộ nhớ và khả năng học thích ứng`,edit:`Tùy chỉnh persona AI của bạn với bộ nhớ nâng cao, học thích ứng và tham số thông minh`},loading:`Đang tải form...`,saved:`Đã lưu`,tabs:{basic:`Cơ bản`,parameters:`Tham số`,memory:`Bộ nhớ & Học tập`,advanced:`Nâng cao`,bindings:`Ràng buộc`},basic:{name:`Tên`,namePlaceholder:`Nhập tên persona`,model:`Mô hình`,selectModel:`Chọn mô hình`,description:`Mô tả`,descriptionPlaceholder:`Mô tả persona của bạn...`,systemPrompt:`Prompt hệ thống`,systemPromptPlaceholder:`Nhập prompt hệ thống định nghĩa hành vi persona của bạn...`,systemPromptHint:`Prompt hệ thống định nghĩa cách persona của bạn sẽ hành xử và phản hồi.`},parameters:{temperature:`Nhiệt độ`,temperatureHint:`Kiểm soát sự sáng tạo vs nhất quán`,topP:`Top-P`,topPHint:`Kiểm soát sự đa dạng phản hồi`,topK:`Top-K`,topKHint:`Giới hạn từ vựng ở top-k token`,contextWindow:`Cửa sổ ngữ cảnh`,contextWindowHint:`Độ dài lịch sử hội thoại tối đa`,maxTokens:`Số token tối đa`,maxTokensHint:`Độ dài phản hồi tối đa`,repeatPenalty:`Hình phạt lặp lại`,repeatPenaltyHint:`Giảm phản hồi lặp lại`},memory:{title:`Hệ thống bộ nhớ`,subtitle:`Persona ghi nhớ các cuộc trò chuyện theo thời gian`,enableHint:`Bật hệ thống bộ nhớ để cho phép persona của bạn ghi nhớ các cuộc trò chuyện và xây dựng ngữ cảnh theo thời gian.`,loading:`Đang tải trạng thái bộ nhớ...`,noData:`Chưa có dữ liệu bộ nhớ`,memories:`Ký ức`,mbUsed:`MB đã dùng`,lastBackup:`Sao lưu lần cuối`,never:`Chưa bao giờ`,maxMemories:`Số ký ức tối đa`,maxMemoriesHint:`Số lượng ký ức persona này có thể lưu trữ`,retention:`Thời gian giữ ký ức`,retentionHint:`Số ngày giữ ký ức trước khi dọn dẹp`,autoCleanup:`Tự động dọn dẹp ký ức cũ`,wipeAll:`Xóa tất cả ký ức`,wipeCannot:`Không thể hoàn tác`,wipeButton:`Xóa`,wiping:`Đang xóa...`,wipeConfirm:`Bạn có chắc chắn muốn xóa tất cả ký ức? Không thể hoàn tác.`,wipeSuccess:`Đã xóa {{count}} ký ức`},learning:{title:`Học thích ứng`,subtitle:`Persona phát triển dựa trên tương tác`,enableHint:`Bật học thích ứng để cho phép persona của bạn phát triển và cá nhân hóa phản hồi dựa trên tương tác của bạn.`,speed:`Tốc độ học`,slow:`Chậm`,slowDesc:`Thay đổi dần dần`,balanced:`Cân bằng`,balancedDesc:`Tốc độ vừa phải`,fast:`Nhanh`,fastDesc:`Thích ứng nhanh`,autoAdapt:`Tự động thích ứng với sở thích người dùng`,whatLearns:`Những gì persona học:`,conversationTone:`Giọng điệu hội thoại`,responseStyle:`Phong cách phản hồi`,userPreferences:`Sở thích người dùng`,topicInterests:`Chủ đề quan tâm`},advanced:{embeddingModel:`Mô hình nhúng`,embeddingHint:`Chọn mô hình được sử dụng để mã hóa bộ nhớ và tìm kiếm ngữ nghĩa. Các mô hình nhúng được hiển thị trước, sau đó là các mô hình khả dụng khác.`,noModels:`Không tìm thấy mô hình`,embeddingModels:`Mô hình nhúng`,otherModels:`Mô hình khác`,installHint:`Cài đặt mô hình nhúng:`,recommended:`Khuyến nghị: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Về cài đặt nâng cao`,aboutDescription:`Mô hình nhúng được sử dụng bởi hệ thống bộ nhớ để hiểu ý nghĩa ngữ nghĩa và tìm các ký ức liên quan trong cuộc trò chuyện. Chọn mô hình phù hợp với trường hợp sử dụng và tài nguyên khả dụng của bạn.`},actions:{cancel:`Hủy`,save:`Lưu`,saving:`Đang lưu...`,saveClose:`Lưu & Đóng`,create:`Tạo`},success:{created:`Đã tạo persona`,updated:`Đã cập nhật persona`},error:{saveFailed:`Không thể lưu`},bindings:{toolServers:`Máy chủ công cụ`,toolServersHint:`Các máy chủ persona này được gọi. Để trống thì mọi máy chủ mà người dùng vốn đã truy cập được đều khả dụng.`,noToolServers:`Bạn không có máy chủ công cụ nào khả dụng.`,builtinTools:`Công cụ tích hợp`,builtinToolsHint:`Các công cụ do chính máy chủ đảm nhiệm. Để trống thì tất cả đều khả dụng.`,noBuiltinTools:`Không có công cụ tích hợp nào khả dụng.`,builtin:{web_search:`Tìm kiếm web`,search_documents:`Tìm trong tài liệu`,load_skill:`Nạp kỹ năng`},skills:`Kỹ năng`,skillsHint:`Các kỹ năng mô hình được nạp khi persona này đang hoạt động.`,noSkills:`Bạn chưa tạo kỹ năng nào.`,collections:`Bộ sưu tập kiến thức`,collectionsHint:`Các bộ sưu tập tài liệu mà persona này có thể tìm kiếm.`,noCollections:`Bạn chưa tạo bộ sưu tập nào.`,prompt:`Prompt`,promptHint:`Một prompt để mở đầu mọi cuộc trò chuyện mới với persona này.`,noPrompt:`Không có prompt`,version:`Bản sửa đổi ràng buộc {{version}}`},sections:`Các phần của persona`},personaCard:{enhanced:`Nâng cao`,systemPrompt:`Prompt hệ thống`,memories:`ký ức`,use:`Sử dụng`,editTooltip:`Chỉnh sửa persona`,downloadTooltip:`Tải xuống persona`,backup:`Sao lưu`,exportDNA:`Xuất DNA`,wipeMemories:`Xóa ký ức`,wipeConfirm:`Bạn có chắc chắn muốn xóa tất cả ký ức của persona này? Hành động này không thể hoàn tác.`,wipeSuccess:`Đã xóa {{count}} ký ức`,backupSuccess:`Đã tải xuống bản sao lưu persona thành công`,dnaSuccess:`Đã xuất DNA persona thành công`,failed:`Không thể {{action}}`,shareTooltip:`Chia sẻ persona này`,wipeFailed:`Xóa ký ức thất bại`,backupFailed:`Sao lưu persona thất bại`,exportDnaFailed:`Xuất DNA persona thất bại`,favorite:`Yêu thích`,memoryStatus:{active:`Đang hoạt động`,wiped:`Đã xóa`,backed_up:`Đã sao lưu`}},userManager:JSON.parse(`{"title":"Quản lý người dùng","subtitle":"Quản lý tài khoản và quyền hạn người dùng","pageDescription":"Quản lý tài khoản người dùng, quyền và kiểm soát truy cập cho phiên bản Libre WebUI của bạn.","sections":{"users":"Người dùng","access":"Quyền truy cập và chính sách","security":"Bảo mật","defaults":"Thiết lập mặc định"},"directory":{"title":"Tài khoản đang hoạt động","allRoles":"Tất cả vai trò","clearFilters":"Xóa bộ lọc","results":"{{visible}} trên {{total}} tài khoản","loadFailed":"Không thể tải người dùng. Hãy thử lại.","empty":"Chưa có tài khoản đang hoạt động","editSelfRole":"Bạn không thể thay đổi vai trò quản trị viên của chính mình.","deleteTitle":"Xóa người dùng"},"loading":"Đang tải người dùng...","createUser":"Tạo người dùng","search":"Tìm kiếm người dùng...","noUsers":"Không tìm thấy người dùng","noUsersMatching":"Không có người dùng nào khớp với tìm kiếm của bạn","columns":{"user":"Người dùng","email":"Email","role":"Vai trò","created":"Đã tạo","actions":"Hành động"},"roles":{"admin":"Quản trị viên","user":"Người dùng"},"noEmail":"Không có email","deleteConfirm":"Bạn có chắc chắn muốn xóa người dùng \\"{{name}}\\"?","deleteSuccess":"Đã xóa người dùng thành công","deleteFailed":"Không thể xóa người dùng","cannotDeleteSelf":"Bạn không thể xóa tài khoản của chính mình","approval":{"title":"Phê duyệt đang chờ xử lý","description":"Xem xét các đăng ký mới trước khi cho phép họ vào phiên bản này.","registered":"Đã đăng ký","activate":"Kích hoạt tài khoản","reject":"Từ chối đăng ký","approved":"{{name}} hiện có thể đăng nhập.","failed":"Không thể phê duyệt tài khoản.","notification":"{{count}} đăng ký đang chờ bạn phê duyệt.","notificationBadge":"{{count}} phê duyệt người dùng đang chờ xử lý"},"form":{"title":{"create":"Tạo người dùng","edit":"Chỉnh sửa người dùng"},"username":"Tên người dùng","usernamePlaceholder":"Nhập tên người dùng","email":"Email","emailPlaceholder":"Nhập email (tùy chọn)","password":"Mật khẩu","passwordPlaceholder":"Nhập mật khẩu","passwordHint":"Để trống để giữ mật khẩu hiện tại","role":"Vai trò","creating":"Đang tạo...","updating":"Đang cập nhật...","createButton":"Tạo người dùng","updateButton":"Cập nhật người dùng","createSuccess":"Đã tạo người dùng thành công","updateSuccess":"Đã cập nhật người dùng thành công","createFailed":"Không thể tạo người dùng","updateFailed":"Không thể cập nhật người dùng"},"workAccess":{"title":"Quyền truy cập Work","description":"Cho phép mọi người dùng đang hoạt động tạo và chạy tác vụ Work trong các sandbox cô lập. Quản trị viên luôn có quyền truy cập; không gian làm việc thư mục máy chủ vẫn chỉ dành cho quản trị viên.","saved":"Đã cập nhật quyền truy cập Work","saveFailed":"Không thể cập nhật quyền truy cập Work"},"workPolicies":{"title":"Chính sách Work","description":"Các preset runtime có tên (image, giới hạn, dừng khi rảnh) để tạo tác vụ. Trường trống kế thừa mặc định toàn cục.","add":"Thêm chính sách","name":"Tên","image":"Image","memory":"Bộ nhớ","cpu":"CPU","pids":"Giới hạn PID","workspaceSize":"Kích thước không gian làm việc","idleMinutes":"Dừng khi rảnh (phút)","networkDefault":"Mạng mặc định","networkInherit":"Kế thừa mặc định","networkOn":"Bật","networkOff":"Tắt","save":"Lưu","cancel":"Hủy","edit":"Sửa chính sách","delete":"Xóa chính sách","deleteConfirm":"Xóa chính sách này? Các tác vụ đang dùng sẽ quay về mặc định toàn cục.","empty":"Chưa có chính sách nào. Tác vụ dùng mặc định runtime toàn cục.","saved":"Đã lưu chính sách Work","deleted":"Đã xóa chính sách Work","failed":"Không thể lưu chính sách Work","invalidNumber":"Giới hạn PID và dừng khi rảnh phải là số.","guiEnabled":"Work Computer (GUI + trình duyệt)","takeoverEnabled":"Cho phép tiếp quản màn hình","computerPreset":"Work Computer","computerPresetHint":"Work Computer cần image GUI: dựng từ deploy/work-computer trong kho mã và gắn thẻ libre-work-computer:latest.","approvalsRequired":"Yêu cầu phê duyệt cho các hành động có tác động ra bên ngoài"},"modelAccess":{"title":"Tải mô hình","description":"Cho phép tất cả người dùng đang hoạt động tải mô hình từ Ollama và trình duyệt Hugging Face. Quản trị viên luôn có thể tải mô hình.","saved":"Đã cập nhật quyền tải mô hình","saveFailed":"Không thể cập nhật quyền tải mô hình"},"webSearchAccess":{"title":"Tìm kiếm web","description":"Cho phép tất cả người dùng đang hoạt động dùng tìm kiếm web trong chat và tác vụ Work. Quản trị viên luôn dùng được. Cấu hình công cụ trong Cài đặt > Tìm kiếm.","saved":"Đã cập nhật quyền tìm kiếm web","saveFailed":"Không thể cập nhật quyền tìm kiếm web"},"defaultTheme":{"title":"Chủ đề mặc định","description":"Chủ đề cho trang đăng nhập, tài khoản mới và các trình duyệt chưa chọn chủ đề. Mọi người vẫn có thể chọn chủ đề riêng trong Cài đặt.","saved":"Đã cập nhật chủ đề mặc định","saveFailed":"Không thể cập nhật chủ đề mặc định"},"groups":{"title":"Nhóm","description":"Gom các tài khoản thành nhóm để quản lý quyền truy cập chung và kiểm tra những gì một tài khoản thực sự có thể làm.","newGroup":"Nhóm mới","nameLabel":"Tên","nameRequired":"Hãy đặt tên cho nhóm.","descriptionLabel":"Mô tả (tùy chọn)","create":"Tạo nhóm","creating":"Đang tạo…","created":"Đã tạo nhóm.","createFailed":"Không thể tạo nhóm.","deleted":"Đã xóa nhóm.","deleteFailed":"Không thể xóa nhóm.","deleteGroup":"Xóa nhóm","loadFailed":"Không tải được danh sách nhóm.","empty":"Chưa có nhóm nào.","memberCount":"Thành viên: {{count}}","noMembers":"Chưa có thành viên nào.","addedAt":"Đã thêm","addMember":"Thêm thành viên","add":"Thêm","selectUser":"Chọn người dùng…","memberAdded":"Đã thêm thành viên.","memberAddFailed":"Không thể thêm thành viên.","removeMember":"Xóa thành viên","memberRemoved":"Đã xóa thành viên.","memberRemoveFailed":"Không thể xóa thành viên.","effectiveTitle":"Quyền truy cập thực tế","effectiveDescription":"Chọn một tài khoản để xem quyền truy cập cuối cùng mà nó có được từ vai trò, nhóm và các quyền được cấp.","accessLookupFailed":"Không tải được quyền truy cập thực tế.","roleLabel":"Vai trò","statusLabel":"Trạng thái","memberOf":"Nhóm","featuresLabel":"Quyền truy cập tính năng","grantsLabel":"Quyền được cấp","grantVia":"qua","deleteConfirmTitle":"Xóa nhóm \\"{{name}}\\"?","deleteConfirmDescription":"Thành viên sẽ mất quyền truy cập mà họ chỉ có qua nhóm này. Bản thân tài khoản không bị xóa.","statuses":{"active":"Đang hoạt động","pending":"Chờ phê duyệt"},"features":{"work":"Công việc","model-download":"Tải mô hình","web-search":"Tìm kiếm web","strands":"Công cụ Strands","tools":"Công cụ","stt":"Chuyển giọng nói thành văn bản","tts":"Chuyển văn bản thành giọng nói","voice-mode":"Chế độ giọng nói","voice-cloning":"Nhân bản giọng nói"},"grantViaKinds":{"user":"cấp trực tiếp","group":"nhóm"}},"audit":{"title":"Nhật ký kiểm tra bảo mật","description":"Các lần đăng nhập, kiểm tra quyền và thay đổi quản trị gần đây trên phiên bản này.","actionFilter":"Hành động","actionPlaceholder":"ví dụ: auth.login","resultFilter":"Kết quả","resultSuccess":"Thành công","resultDenied":"Bị từ chối","resultFailure":"Thất bại","limitFilter":"Giới hạn","loadFailed":"Không tải được nhật ký kiểm tra.","empty":"Chưa có sự kiện kiểm tra nào được ghi lại.","actor":"Người thực hiện","target":"Đối tượng"},"tools":{"title":"Quyền dùng công cụ","description":"Cho phép mọi người gọi máy chủ công cụ. Khi tắt, chỉ quản trị viên mới gọi được.","saved":"Đã cập nhật quyền dùng công cụ","saveFailed":"Không cập nhật được quyền dùng công cụ.","lockedByEnv":"Bị khóa bởi một biến môi trường trên máy chủ này."},"voice":{"title":"Quyền truy cập giọng nói","description":"Kiểm soát ai có thể dùng các tính năng giọng nói. Quản trị viên luôn có quyền truy cập.","lockedByEnv":"Được cố định bởi biến môi trường","saved":"Đã cập nhật quyền truy cập giọng nói","saveFailed":"Không thể cập nhật quyền truy cập giọng nói","features":{"stt":"Giọng nói thành văn bản","tts":"Văn bản thành giọng nói","voiceMode":"Chế độ giọng nói","voiceCloning":"Nhân bản giọng nói"}},"mfaPolicy":{"title":"Chính sách hai bước","description":"Tài khoản có bắt buộc hoàn thành bước đăng nhập thứ hai hay không.","requireAll":"Bắt buộc hai bước với mọi người dùng","requireAllHint":"Người dùng chưa có yếu tố thứ hai sẽ thiết lập ở lần đăng nhập tiếp theo.","lockedByEnv":"Được cố định bởi MFA_REQUIRED_MODE.","saved":"Đã lưu chính sách.","saveFailed":"Không thể lưu chính sách."},"mfaReset":"Đặt lại hai bước","mfaResetConfirm":"Xóa yếu tố thứ hai của {{name}}? Họ vẫn có thể đăng nhập bằng mật khẩu và thiết lập lại.","mfaResetSuccess":"Đã xóa hai bước của {{name}}.","mfaResetNothing":"{{name}} chưa thiết lập hai bước.","mfaResetFailed":"Đặt lại thất bại.","ollamaProvider":{"title":"Nhà cung cấp Ollama","description":"Khi tắt, ứng dụng sẽ ngừng hoàn toàn việc kiểm tra Ollama — không dò trạng thái, không cảnh báo. Điểm cuối có thể trỏ đến bất kỳ cổng nào tương thích với Ollama.","saved":"Đã lưu cài đặt nhà cung cấp Ollama","saveFailed":"Không thể lưu cài đặt nhà cung cấp Ollama","baseUrlLabel":"URL điểm cuối Ollama"},"emailNotifications":{"title":"Thông báo qua email","description":"Máy chủ gửi thư dùng cho thông báo. Người dùng chọn thông báo nào sẽ đến hộp thư của họ trong mục Cài đặt > Thông báo.","enabledToast":"Thông báo qua email đang bật.","disabledToast":"Thông báo qua email đang tắt.","loadFailed":"Không thể tải cài đặt email.","fromEnvironment":"Được cung cấp bởi biến môi trường; lưu một giá trị ở đây để ghi đè.","hostLabel":"Máy chủ SMTP","hostHint":"Tên máy chủ của máy chủ thư.","portLabel":"Cổng","portHint":"Để trống để dùng giá trị mặc định của chế độ bảo mật đã chọn.","securityLabel":"Bảo mật kết nối","securityHint":"STARTTLS nâng cấp một kết nối thường; TLS được mã hóa ngay từ đầu.","security":{"starttls":"STARTTLS (cổng 587)","tls":"TLS (cổng 465)","none":"Không (chỉ mạng đáng tin cậy)"},"verifyLabel":"Xác minh chứng chỉ","verifyHint":"Chỉ tắt với một relay dùng chứng chỉ tự ký.","usernameLabel":"Tên đăng nhập","usernameHint":"Để trống nếu máy chủ chấp nhận thư mà không cần đăng nhập.","passwordLabel":"Mật khẩu","passwordHint":"Được lưu ở dạng mã hóa và không hiển thị lại.","passwordStored":"Đã lưu một mật khẩu. Nhập mật khẩu mới để thay thế.","clearPassword":"Xóa mật khẩu đã lưu","fromLabel":"Người gửi","fromHint":"Địa chỉ From, có thể kèm tên hiển thị.","appUrlLabel":"URL ứng dụng","appUrlHint":"Dùng cho các liên kết trong tin nhắn, ví dụ https://chat.example.com.","testRecipientLabel":"Người nhận thử nghiệm","testRecipientHint":"Mặc định là địa chỉ của chính bạn. Để trống để chỉ kiểm tra kết nối.","test":"Gửi thử","testing":"Đang gửi…","testSent":"Đã gửi tin nhắn thử đến {{address}}.","testConnected":"Đã kết nối đến máy chủ thư.","testFailed":"Kiểm tra email thất bại.","saveBeforeTest":"Hãy lưu thay đổi trước khi kiểm tra.","save":"Lưu","saving":"Đang lưu…","saved":"Đã lưu cài đặt email.","saveFailed":"Không thể lưu cài đặt email.","templateTitle":"Giao diện email","templateHint":"Chọn mẫu sáng hoặc tối cho bản tin tổng hợp và email thông báo.","themeLabel":"Mẫu email","themeLight":"Sáng","themeDark":"Tối","previewTitle":"Xem trước mẫu","previewLoading":"Đang tải bản xem trước…","previewFailed":"Không thể tải bản xem trước email.","previewHeading":"Bản tin của bạn","previewIntro":"Bản xem trước email tin tức hằng ngày của bạn.","previewMarkdown":"## Tin nổi bật hôm nay\\n\\n- Cập nhật về công nghệ và nghiên cứu\\n- Tin tức từ các nguồn bạn đã chọn\\n\\n**Tóm tắt:** Tin tức hằng ngày của bạn đã sẵn sàng để đọc.","previewLinkLabel":"Mở kết quả"},"strandsAccess":{"title":"Công cụ Strands","description":"Chọn ai có thể dùng tác tử Strands tích hợp. Tác tử có thể đọc và chỉnh sửa tệp trong không gian làm việc riêng của mỗi phiên, nhưng không thể chạy lệnh shell.","saved":"Đã cập nhật quyền truy cập Strands","saveFailed":"Không thể cập nhật quyền truy cập Strands","lockedByEnv":"Được cố định bởi biến môi trường LIBRE_STRANDS_ACCESS.","modes":{"disabled":"Tắt","admins":"Quản trị viên","all-users":"Tất cả người dùng"}},"agentCliAccess":{"title":"Mô hình tác tử CLI","description":"Quản trị viên có thể dùng Pi, OpenCode, Codex và Claude Code đã cài đặt làm mô hình trò chuyện. Chúng chạy trên máy chủ, bên ngoài môi trường cách ly Work.","lockedByEnv":"Bị khóa bởi biến môi trường AGENT_CLI_MODELS_ENABLED."}}`),usageAnalytics:{eyebrow:`Quản trị`,title:`Mức sử dụng nhà cung cấp`,description:`Theo dõi yêu cầu mô hình và mức sử dụng của các nhà cung cấp và tác nhân trên phiên bản này.`,days:`{{count}} ngày`,refresh:`Làm mới mức sử dụng`,loadFailed:`Không thể tải mức sử dụng của nhà cung cấp.`,metrics:{calls:`Cuộc gọi`,tokens:`Token`},cards:{calls:`Cuộc gọi API`,callsDetail:`Trên {{count}} người dùng đang hoạt động`,tokens:`Token đã báo cáo`,tokensDetail:`Mức sử dụng được báo cáo trên {{count}} cuộc gọi`,success:`Tỷ lệ thành công`,successDetail:`{{count}} cuộc gọi thất bại`,latency:`Độ trễ trung bình`,latencyDetail:`Thời gian nhà cung cấp từ đầu đến cuối`,coverage:`{{percent}}% lệnh gọi báo cáo mức sử dụng token`},activity:{title:`Mức sử dụng theo thời gian`,callsDescription:`Yêu cầu hằng ngày theo mô hình`,tokensDescription:`Token được báo cáo hằng ngày theo mô hình`,chartLabel:`Biểu đồ {{metric}} nhà cung cấp hàng ngày`,compareHint:`Di chuột lên mô hình hoặc chuyển tiêu điểm đến mô hình để theo dõi đường biểu diễn. Chọn mô hình để giữ trạng thái tô sáng.`,showAll:`Hiển thị tất cả mô hình`,highlightModel:`Tô sáng {{model}}`,highlightedModel:`Đã tô sáng {{model}}`,allModels:`Tất cả mô hình`,exploreDay:`Khám phá mức sử dụng hằng ngày`,topModels:`Mặc định hiển thị 12 mô hình được sử dụng nhiều nhất. Chọn bất kỳ mô hình nào bên dưới để theo dõi riêng.`,noTokens:`Không có token nào được báo cáo trong giai đoạn này`,breakdownUnavailable:`Không có dữ liệu phân tích theo mô hình cho giai đoạn này.`,peak:`Ngày cao điểm`,dayTotal:`Tổng hằng ngày`,loadingModel:`Đang tải {{model}}…`},models:{title:`Mức sử dụng theo mô hình`,description:`Các mô hình có lượng truy cập cao nhất trong giai đoạn này.`,model:`Mô hình`,success:`Thành công`,latency:`Độ trễ`,share:`Tỷ lệ lệnh gọi`,notCharted:`Chọn để tải mô hình này vào biểu đồ`},providers:{title:`Lưu lượng nhà cung cấp và tác nhân`,description:`Số lượng yêu cầu, độ tin cậy và thời gian phản hồi theo nhà cung cấp.`,share:`{{percent}}% số lệnh gọi`,failures:`{{count}} thất bại hoặc bị hủy`,models:`Mô hình: {{count}}`,noTokens:`Không có token nào được báo cáo`},capabilities:{title:`Phân bổ khả năng`,characters:`{{count}} ký tự`,bytes:`{{count}} byte`,images:`{{count}} hình ảnh`,jobs:`{{count}} tác vụ video`,inputs:`{{count}} đầu vào`,reportedTokens:`{{count}} token đã báo cáo`},empty:{title:`Chưa có lệnh gọi nhà cung cấp`,description:`Yêu cầu xuất hiện ở đây sau khi nhà cung cấp hoặc tác nhân xử lý trò chuyện, Work, embedding, hình ảnh, giọng nói, âm thanh hoặc video.`},privacyNote:`Mức sử dụng của yêu cầu đến nhà cung cấp và tác nhân được ghi lại trên máy chủ. Libre WebUI lưu trữ nhà cung cấp, mô hình, thời gian, trạng thái và bộ đếm đã báo cáo—không bao gồm lời nhắc, phản hồi, điểm cuối, thông tin xác thực hoặc nội dung lỗi của nhà cung cấp. Tổng token chỉ bao gồm các lệnh gọi mà nhà cung cấp trả về siêu dữ liệu sử dụng.`,heatmap:{title:`Một năm hoạt động`,description:`Lượt gọi nhà cung cấp hằng ngày trong năm qua, tô màu theo mô hình được dùng nhiều nhất mỗi ngày.`,calls:`lượt gọi`,noCalls:`Không có lượt gọi`,other:`Mô hình khác`,less:`Ít`,more:`Nhiều`,yearTotal:`{{formatted}} lượt gọi trong năm qua`},agents:{title:`Tác nhân`,description:`Lệnh gọi đến tác tử CLI và công cụ Strands.`,noCalls:`Không có lượt gọi được ghi nhận trong khoảng thời gian này`,unreported:`Token chưa được báo cáo`,topModels:`Mô hình được dùng nhiều nhất`,legacy:`Máy chủ này không cung cấp thống kê tác nhân đầy đủ. Các bản ghi tác nhân hiện có được hiển thị bên dưới.`}},systemPage:{eyebrow:`Quản trị`,title:`Hệ thống`,description:`Giám sát máy và môi trường chạy lưu trữ phiên bản Libre WebUI này.`,updated:`Đã cập nhật {{date}}`,refresh:`Làm mới thông tin hệ thống`,loadFailed:`Không thể tải thông tin hệ thống.`,cards:{uptime:`Thời gian hoạt động máy chủ`,uptimeDetail:`Hoạt động từ {{date}}`,memory:`Bộ nhớ đã dùng`,memoryDetail:`{{used}} trên {{total}}`,freeSpace:`Không gian trống`,freeSpaceDetail:`{{label}} · {{total}} tổng`,containers:`Container đang chạy`,containersDetail:`{{total}} container được Docker nhận biết`,dockerUnavailable:`Docker không khả dụng`,unavailable:`Không khả dụng`},host:{title:`Máy chủ & môi trường chạy`,description:`Hệ điều hành, bộ xử lý và chi tiết tiến trình Libre WebUI.`,container:`Môi trường chạy container`,native:`Runtime gốc`,hostname:`Tên máy chủ`,operatingSystem:`Hệ điều hành`,processor:`Bộ xử lý`,logicalCpus:`CPU logic`,loadAverage:`Tải trung bình · 1 / 5 / 15 phút`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Tiến trình`,workingDirectory:`Thư mục làm việc`},memory:{title:`Bộ nhớ`,description:`Bộ nhớ hệ thống hiển thị trong runtime và mức sử dụng tiến trình ứng dụng.`,usedOf:`Đã dùng {{used}} trên {{total}}`,free:`{{value}} trống`,processRss:`RSS tiến trình`,heapUsed:`V8 heap đã dùng`,heapTotal:`Tổng V8 heap`,external:`Bộ nhớ ngoài`},storage:{title:`Lưu trữ`,description:`Dung lượng khả dụng cho hệ thống tệp runtime và dữ liệu ứng dụng cố định.`,used:`Đã dùng {{value}}`,free:`{{value}} trống`,empty:`Thông tin hệ thống tệp không có sẵn trong runtime này.`},docker:{title:`Docker`,description:`Trạng thái Docker Engine chỉ đọc và danh sách rút gọn các container.`,connected:`Đã kết nối`,unavailable:`Không khả dụng`,unavailableDetail:`Không thể chẩn đoán Docker Engine.`,socketStatus:`Socket cục bộ: {{status}}`,mounted:`đã gắn`,notMounted:`chưa gắn`,running:`Đang chạy`,stopped:`Đã dừng`,paused:`Đã tạm dừng`,total:`Tổng`,version:`Phiên bản`,host:`Máy chủ`,architecture:`Kiến trúc`,cpus:`CPU`,memory:`Bộ nhớ`,container:`Container`,image:`Image`,state:`Trạng thái`,created:`Đã tạo`,empty:`Docker đã được kết nối và hiện không có container nào được liệt kê.`},network:{title:`Mạng`,description:`Các giao diện, địa chỉ hiển thị trong thời gian chạy và bộ đếm lưu lượng Linux.`,internal:`nội bộ`,empty:`Không có giao diện mạng nào hiển thị với thời gian chạy của ứng dụng.`},securityNote:`Trang này chỉ dành cho quản trị viên. Máy chủ chỉ trả về tóm tắt hoạt động: nó không tiết lộ biến môi trường, thông tin xác thực, nhãn Docker, điểm gắn kết, lệnh container hoặc payload kiểm tra. Khi Libre WebUI chạy trong container, chi tiết CPU và bộ nhớ cấp máy chủ đến từ Docker Engine khi socket cục bộ của nó khả dụng; các giá trị khác mô tả thời gian chạy của ứng dụng.`,work:{title:`Work`,description:`Sandbox của mọi người dùng`,access:`Quyền truy cập`,accessAdmins:`Chỉ quản trị viên`,accessAllUsers:`Tất cả người dùng`,runtimeAvailable:`Khả dụng`,runtimeUnavailable:`Không khả dụng`,activeRuntimes:`Môi trường đang hoạt động`,pendingCleanups:`Dọn dẹp đang chờ`,orphans:`Container mồ côi`,owner:`Chủ sở hữu`,task:`Tác vụ`,state:`Trạng thái`,preview:`Xem trước`,terminals:`Terminal`,inUse:`Đang dùng`,inUseNone:`Không ai`,updated:`Đã cập nhật`,lastRun:`Lần chạy gần nhất`,noRun:`—`,stateRunning:`Đang chạy`,stateStopped:`Đã dừng`,stateStarting:`Đang khởi động`,stateUnknown:`Không rõ`,noTasks:`Chưa có tác vụ Work nào.`,usageKinds:{command:`lệnh`,preview:`xem trước`,terminal:`terminal`,screen:`màn hình`},recovery:{title:`Khôi phục`,description:`Các sandbox mà Work vẫn đang dọn dẹp. Các thao tác Work mới sẽ bị chặn cho đến khi môi trường chạy xác nhận từng cái đã dừng.`,container:`Container`,task:`Tác vụ`,reason:`Lý do`,attempts:`Số lần thử`,lastError:`Lỗi gần nhất`,nextAttempt:`Lần thử tiếp theo`,retry:`Thử lại ngay`,retrying:`Đang thử lại…`,reasonStartup:`Đang chạy khi khởi động`,reasonStopFailed:`Dừng thất bại`,reasonRuntimeUnreachable:`Không kết nối được môi trường chạy`,reasonOrphan:`Không có bản ghi tác vụ`,notScheduled:`Chưa lên lịch`,loadFailed:`Không thể tải danh sách dọn dẹp đang chờ.`,retrySucceeded:`Đã dọn {{cleared}} trong số {{attempted}} mục đang chờ.`,retryPending:`Vẫn đang thử lại {{attempted}} mục dọn dẹp đang chờ.`,retryFailed:`Không thể thử lại các mục dọn dẹp đang chờ.`}},recovery:{title:`Diễn tập khôi phục`,scheduleOn:`Tự động chạy mỗi {{hours}} giờ — mỗi lần diễn tập sao lưu, khôi phục vào bản sao cách ly và xác minh kết quả.`,scheduleOff:`Chưa lên lịch — đặt RECOVERY_DRILL_INTERVAL_HOURS để diễn tập tự động.`,teamUnsupported:`Diễn tập áp dụng cho hồ sơ đơn (SQLite); hồ sơ nhóm dùng CLI sao lưu phối hợp.`,runNow:`Chạy diễn tập ngay`,running:`Đang chạy…`,passed:`Diễn tập khôi phục thành công.`,failed:`Diễn tập khôi phục thất bại.`,lastPassed:`Lần thành công gần nhất`,restoreTime:`Thời gian khôi phục (RTO)`,drillSpacing:`Khoảng cách diễn tập (RPO)`,archiveSize:`Kích thước lưu trữ`,lastFailed:`Diễn tập gần nhất thất bại vào {{date}}`,originManual:`Thủ công`,originScheduled:`Theo lịch`,columns:{when:`Thời điểm`,origin:`Nguồn`,status:`Trạng thái`,restore:`Khôi phục`},status:{passed:`Thành công`,failed:`Thất bại`,running:`Đang chạy`}}},chatHistory:{label:`Lịch sử cuộc trò chuyện`,jumpToTurn:`Chuyển đến lượt {{index}} / {{total}}`},chatMessage:{you:`Bạn`,assistant:`Trợ lý`,system:`Hệ thống`,conversationSummary:`Tóm tắt cuộc trò chuyện`,restoreCompacted:`Khôi phục các tin nhắn đã tóm tắt`,restoreFailed:`Không thể khôi phục các tin nhắn đã tóm tắt`,copy:`Sao chép`,copyMessage:`Sao chép tin nhắn`,copied:`Đã sao chép!`,regenerate:`Tạo lại`,regenerateResponse:`Tạo lại phản hồi`,edit:`Chỉnh sửa`,editSystemMessage:`Chỉnh sửa tin nhắn hệ thống`,saveChanges:`Lưu thay đổi`,cancelEditing:`Hủy chỉnh sửa`,saveAndSubmit:`Lưu & gửi`,goodResponse:`Phản hồi tốt`,badResponse:`Phản hồi kém`,delete:`Xóa`,deleteConfirm:`Xóa tin nhắn này?`,branch:`Nhánh`,speaking:`Đang nói...`,speakMessage:`Đọc tin nhắn`,stopSpeaking:`Dừng đọc`,showMore:`Hiển thị thêm`,showLess:`Hiển thị ít hơn`,thinking:`Đang suy nghĩ`,thoughtFor:`Đã suy nghĩ trong {{duration}}`,hiddenLines:`{{count}} dòng bị ẩn`,systemMessagePlaceholder:`Nhập tin nhắn hệ thống của bạn...`,fullSizeImage:`Hình ảnh kích thước đầy đủ`,startConversation:`Bắt đầu cuộc trò chuyện`,startConversationDescription:`Gửi tin nhắn để bắt đầu trò chuyện với trợ lý AI của bạn. Đặt câu hỏi, nhờ giúp đỡ về code, hoặc có một cuộc trò chuyện tự nhiên.`,scrollToBottom:`Cuộn xuống dưới`,newMessages:`Tin nhắn mới`,feedbackTags:{accuracy:`Độ chính xác`,style:`Văn phong`,incomplete:`Chưa đầy đủ`,harmful:`Có hại`,formatting:`Định dạng`},feedbackComment:`Thêm bình luận…`,user:`Người dùng`,feedbackFailed:`Không thể lưu phản hồi của bạn`,openImage:`Mở hình ảnh {{number}}`,uploadedImageAlt:`Hình ảnh đã tải lên {{number}}`},imageGallery:{title:`Thư viện hình ảnh`,noImages:`Chưa có hình ảnh nào`,noImagesHint:`Tạo hình ảnh đầu tiên của bạn bằng bảng điều khiển bên phải`,delete:`Xóa`,download:`Tải xuống`,deleteConfirm:`Bạn có chắc chắn muốn xóa hình ảnh này?`,deleteSuccess:`Đã xóa hình ảnh`,deleteFailed:`Không thể xóa hình ảnh`,downloadFailed:`Không thể tải xuống hình ảnh`,loadMore:`Tải thêm ({{current}} trong số {{total}})`,loadFailed:`Không thể tải thư viện`},imageGeneration:{title:`Tạo hình ảnh`,prompt:`Prompt`,promptPlaceholder:`Mô tả hình ảnh bạn muốn tạo...`,model:`Mô hình`,selectModel:`Chọn mô hình`,noModels:`Không có mô hình tạo hình ảnh nào khả dụng`,configurePlugin:`Cấu hình plugin hỗ trợ tạo hình ảnh`,size:`Kích thước`,quality:`Chất lượng`,style:`Phong cách`,generate:`Tạo`,generating:`Đang tạo...`,success:`Đã tạo hình ảnh thành công`,failed:`Không thể tạo hình ảnh`,enterPrompt:`Vui lòng nhập prompt`,promptTooLong:`Prompt vượt quá độ dài tối đa {{max}} ký tự`},mediaGeneration:{title:`Tạo phương tiện`,description:`Tạo video, âm thanh, nhạc hoặc giọng nói với nhà cung cấp phương tiện đã kích hoạt.`,image:`Hình ảnh`,video:`Video`,audio:`Âm thanh`,sound:`Âm thanh`,speech:`Giọng nói`,model:`Mô hình`,voice:`Giọng nói hoặc ID giọng nói`,cloneVoice:`Sao chép giọng tham chiếu`,cloneVoiceDescription:`Tạo lời nói này dựa trên bản ghi tham chiếu thay vì giọng đặt sẵn.`,referenceAudio:`Âm thanh tham chiếu`,referenceTranscript:`Bản chép lời tham chiếu chính xác`,referenceTranscriptPlaceholder:`Nhập chính xác nội dung được nói trong bản ghi tham chiếu…`,referenceAudioTooLarge:`Âm thanh tham chiếu phải có dung lượng {{max}} trở xuống.`,cloneConsent:`Chỉ sao chép giọng khi bạn có sự cho phép của người nói. Bản ghi được gửi đến nhà cung cấp đã chọn cho lần tạo này và Libre WebUI không lưu bản ghi.`,saveVoiceProfile:`Lưu làm giọng có thể tái sử dụng`,saveVoiceProfileDescription:`Lưu an toàn bản ghi tham chiếu và bản chép lời này. Libre WebUI gửi chúng đến nhà cung cấp đã chọn cho mỗi lô Giọng nói sử dụng giọng này.`,voiceProfileName:`Tên giọng đã lưu`,voiceProfileNamePlaceholder:`Ví dụ: Giọng của tôi`,voiceStorageConsent:`Tôi xác nhận đã được người nói cho phép sao chép và lưu giọng này. Bản tham chiếu sẽ được lưu cho đến khi tôi xóa.`,resolution:`Độ phân giải`,aspectRatio:`Tỷ lệ khung hình`,duration:`Thời lượng`,providerDefault:`Mặc định của nhà cung cấp`,generateAudio:`Tạo âm thanh cùng với video khi được hỗ trợ`,prompt:`Lời nhắc`,text:`Văn bản để đọc`,videoPlaceholder:`Mô tả cảnh, chuyển động, góc máy và ánh sáng...`,audioPlaceholder:`Nhập văn bản bạn muốn giọng nói đọc...`,soundPlaceholder:`Mô tả âm thanh, nhạc, bầu không khí hoặc phản hồi bằng giọng nói mà bạn muốn...`,generate:`Tạo`,generating:`Đang tạo… việc này có thể mất vài phút`,success:`Đã tạo phương tiện và lưu vào Imagine`,successWithSavedVoice:`Đã tạo nội dung và “{{name}}” hiện có trong cài đặt Giọng nói`,failed:`Không thể tạo phương tiện`,loadFailed:`Không thể tải nhà cung cấp phương tiện`,noModels:`Không có mô hình {{kind}} nào khả dụng. Kích hoạt nhà cung cấp tương thích và lưu thông tin xác thực của nó trước.`,consentTtl:{label:`Thời hạn đồng ý`,never:`Cho đến khi tôi rút lại`,days30:`30 ngày`,days90:`90 ngày`,days365:`Một năm`}},mediaGallery:{itemCount:`{{count}} mục`,empty:`Chưa có phương tiện nào được tạo`,emptyHint:`Tạo hình ảnh, video hoặc đoạn giọng nói và nó sẽ hiển thị tại đây.`,filters:{all:`Tất cả`,image:`Hình ảnh`,video:`Video`,audio:`Âm thanh`},deleteConfirmTitle:`Xóa mục này?`,deleteConfirmDescription:`Phương tiện đã tạo sẽ bị xóa vĩnh viễn.`,previewFailed:`Không có bản xem trước`},errorBoundary:{title:`Đã xảy ra lỗi`,description:`Chúng tôi gặp phải lỗi không mong muốn. Vui lòng thử làm mới trang.`,tryAgain:`Làm mới trang`,goHome:`Về trang chủ`,errorDetails:`Chi tiết lỗi (Phát triển)`},documents:{title:`Tài liệu`,upload:`Tải lên tài liệu`,uploading:`Đang tải lên...`,noDocuments:`Chưa có tài liệu nào được tải lên`,uploadHint:`Tải lên tài liệu để sử dụng trong cuộc trò chuyện của bạn`,delete:`Xóa`,deleteConfirm:`Bạn có chắc chắn muốn xóa tài liệu này?`,deleteSuccess:`Đã xóa tài liệu`,deleteFailed:`Không thể xóa tài liệu`,uploadSuccess:`Đã tải lên tài liệu thành công`,uploadFailed:`Không thể tải lên tài liệu`,types:`Hỗ trợ: PDF, TXT, MD, DOCX`,unsupportedFileType:`Loại tệp này không được hỗ trợ`,fileSizeTooLarge:`Kích thước file phải nhỏ hơn 10MB`,uploadSuccessWithName:`Đã tải lên tài liệu "{{name}}" thành công`,removeSuccess:`Đã xóa tài liệu thành công`,removeFailed:`Không thể xóa tài liệu`,removeError:`Đã xảy ra lỗi khi xóa tài liệu`,clickToUpload:`Nhấp để tải lên`,orDragAndDrop:`hoặc kéo và thả`,fileTypesAndSize:`Tệp PDF, Office, Markdown, HTML, mã nguồn, CSV, hình ảnh và âm thanh tối đa 10 MB`,uploadedDocuments:`Tài liệu đã tải lên`,removeDocument:`Xóa tài liệu`,fullContextToggle:`Gửi toàn bộ tài liệu`,fullContextEstimate:`≈ {{tokens}} token`,fullContextTooLarge:`Tài liệu đính kèm vượt quá giới hạn ngữ cảnh đầy đủ, nên đã dùng truy xuất thay thế`,fullDocument:`Toàn bộ tài liệu`},ttsButton:{speak:`Đọc`,stop:`Dừng`,speaking:`Đang đọc...`,generateFailed:`Không thể tạo giọng nói`,playbackFailed:`Phát lại âm thanh thất bại`,stopSpeaking:`Dừng đọc`,preparingSpeech:`Đang chuẩn bị giọng nói...`,generatingSpeech:`Đang tạo giọng nói...`,bufferingSpeech:`Đang tải giọng nói...`,enableAudio:`Bật âm thanh và đọc to`,enableAudioShort:`Bật âm thanh`,readAloud:`Đọc to`},artifacts:{title:`Artifact`,code:`Code`,preview:`Xem trước`,copy:`Sao chép code`,copied:`Đã sao chép!`,download:`Tải xuống`,expand:`Mở rộng`,collapse:`Thu gọn`,openInNewTab:`Mở trong tab mới`,invalidSvg:`Nội dung SVG không hợp lệ`,invalidJson:`Nội dung JSON không hợp lệ`,previewMode:`Chế độ xem trước`,codeMode:`Chế độ code`,copyContent:`Sao chép nội dung`,openInPanel:`Mở trong bảng điều khiển`,created:`Đã tạo`,closePanelEsc:`Đóng bảng điều khiển (Esc)`,copyButton:`Sao chép`,dragEdgeToResize:`Kéo cạnh để thay đổi kích thước`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Phiên bản {{current}} / {{total}}`,previousVersion:`Phiên bản trước`,nextVersion:`Phiên bản sau`,resizePanel:`Đổi kích thước bảng`},personaImportExport:{title:`Nhập & Xuất Personas`,description:`Xuất personas của bạn để chia sẻ hoặc nhập personas từ người khác`,exportPersonas:`Xuất Personas`,importPersonas:`Nhập Personas`,noPersonasToExport:`Không có personas để xuất`,personasAvailable:`{{count}} persona khả dụng`,personasAvailable_plural:`{{count}} personas khả dụng`,exportAll:`Xuất tất cả`,uploadJsonFile:`Tải lên file JSON`,pasteJsonLabel:`Dán dữ liệu JSON`,pasteJsonPlaceholder:`Dán dữ liệu JSON persona vào đây...`,importing:`Đang nhập...`,importButton:`Nhập Persona(s)`,expectedFormat:`Định dạng JSON mong đợi:`,exportSuccess:`Đã xuất persona "{{name}}" thành công`,exportFailed:`Không thể xuất persona`,exportAllSuccess:`Đã xuất tất cả {{count}} personas thành công`,exportAllFailed:`Không thể xuất personas`,pasteJsonData:`Vui lòng dán dữ liệu JSON persona`,importMultipleSuccess:`Đã nhập thành công {{count}} personas`,importMultipleFailed:`Không thể nhập {{count}} personas`,importNoneFailed:`Không thể nhập bất kỳ personas nào`,importSuccess:`Đã nhập persona thành công`,importFailed:`Không thể nhập persona`},generationStats:{details:`Chi tiết`,promptTokens:`Token prompt:`,generatedTokens:`Token đã tạo:`,totalTokens:`Tổng token:`,speed:`Tốc độ:`,promptEval:`Đánh giá prompt:`,generation:`Tạo:`,modelLoad:`Tải mô hình:`,totalTime:`Tổng thời gian:`,generatedAt:`Tạo lúc:`,notAvailable:`Không có`,tokenCount:`{{tokens}} token`,tokensPerSecond:`{{value}} t/s`},userMenu:{loggedOut:`Đăng xuất thành công`,pictureUpdated:`Ảnh đại diện đã cập nhật`,failedUpdateAvatar:`Cập nhật ảnh đại diện thất bại`,failedUpdatePicture:`Cập nhật ảnh đại diện thất bại`,noEmail:`Chưa cung cấp email`,changePicture:`Đổi ảnh`,settings:`Cài đặt`,userManagement:`Quản lý người dùng`,signOut:`Đăng xuất`,changeProfilePicture:`Đổi ảnh đại diện`},pluginManager:{title:`Quản lý plugin`,upload:`Tải lên`,addJson:`Thêm JSON`,browseHF:`Duyệt HF Hub`,confirmDelete:`Bạn có chắc chắn muốn xóa plugin này?`,uploading:`Đang tải plugin lên...`,pasteJson:`Dán JSON plugin vào đây...`,installPlugin:`Cài đặt plugin`,loading:`Đang tải plugin...`,noPlugins:`Chưa cài đặt plugin nào`,noPluginsDescription:`Tải lên tệp plugin hoặc thêm plugin từ JSON để bắt đầu.`,active:`Hoạt động`,id:`ID`,endpoint:`Endpoint`,activate:`Kích hoạt`,deactivate:`Vô hiệu hóa`,activePlugin:`Plugin đang hoạt động`,activePluginDescription:`Tất cả yêu cầu chat sẽ được chuyển qua plugin này`,variables:{title:`Biến`,save:`Lưu`,saving:`Đang lưu...`,saved:`Đã lưu biến`,saveFailed:`Không thể lưu biến`,resetDefaults:`Đặt lại mặc định`,reset:`Đã đặt lại biến`,resetFailed:`Không thể đặt lại biến`,sensitiveSet:`Giá trị đã được đặt (nhập giá trị mới để thay đổi)`,showValue:`Hiển thị giá trị {{label}}`,hideValue:`Ẩn giá trị {{label}}`,connection:`Kết nối`,advanced:`Tham số nâng cao`,inherited:`Sử dụng mặc định của nhà cung cấp`,inheritedValue:`Sử dụng mặc định của nhà cung cấp ({{value}})`,enabled:`Đã bật`,disabled:`Đã tắt`,required:`Yêu cầu một giá trị`,fullApiEndpoint:`URL điểm cuối API đầy đủ`,endpointHelp:`Nhập URL yêu cầu hoàn chỉnh, bao gồm đường dẫn hoạt động của nó (ví dụ: /v1/chat/completions), không chỉ URL cơ sở của nhà cung cấp.`,invalidUrl:`Nhập URL điểm cuối API đầy đủ hợp lệ, ví dụ https://provider.example/v1/chat/completions`,insecureUrl:`Các điểm cuối API phải sử dụng HTTP hoặc HTTPS.`,httpWarning:`HTTP không mã hóa thông tin xác thực hoặc lưu lượng truy cập. Chỉ sử dụng trên mạng đáng tin cậy.`,invalidBaseUrl:`URL cơ sở không được chứa chuỗi truy vấn hoặc phân đoạn.`,invalidApiPath:`Phải bắt đầu bằng / và không chứa URL, truy vấn, phân đoạn hoặc phân đoạn ..`,tooLong:`Giá trị quá dài`,resetConfirmTitle:`Đặt lại về mặc định?`,resetConfirmDescription:`Thao tác này xóa mọi giá trị đã lưu của {{name}}, gồm khóa API và thông tin xác thực khác. Không thể hoàn tác.`}},huggingface:{title:`Trình duyệt mô hình HuggingFace`,subtitle:`Duyệt và chọn mô hình từ Hub`,searchPlaceholder:`Tìm mô hình...`,filters:`Bộ lọc`,task:`Nhiệm vụ`,sortBy:`Sắp xếp theo`,noModels:`Không tìm thấy mô hình`,adjustSearch:`Thử điều chỉnh tìm kiếm hoặc bộ lọc`,gated:`Hạn chế`,selected:`Đã chọn`,select:`Chọn`,refresh:`Làm mới`,modelsFound:`mô hình được tìm thấy`},demoMode:{title:`Chế độ demo`,github:`GitHub`,defaultMessage:`Đây là bản demo chỉ dùng để trình bày. Backend Ollama chưa được kết nối.`,viewOnGithub:`Xem trên GitHub`,dismiss:`Đóng`},work:JSON.parse(`{"title":"Công việc","subtitle":"Không gian làm việc mô hình biệt lập","tasks":{"title":"Tác vụ công việc","subtitle":"Không gian làm việc cục bộ lâu dài","new":"Tác vụ mới","emptyTitle":"Chưa có tác vụ công việc","empty":"Tác vụ công việc của bạn sẽ xuất hiện ở đây sau khi bạn gửi tin nhắn đầu tiên.","untitled":"Tác vụ chưa đặt tên","actions":"Thao tác tác vụ","delete":"Xóa tác vụ","deleteNamed":"Xóa {{title}}","deleteConfirm":"Xóa vĩnh viễn “{{title}}” và không gian làm việc của tác vụ này?","close":"Đóng tác vụ công việc","open":"Mở tác vụ công việc","rename":"Tên tác vụ","loading":"Đang tải tác vụ…","notFound":"Tác vụ công việc này không khả dụng","back":"Bắt đầu tác vụ mới","status":"Trạng thái: {{status}}"},"landing":{"title":"Bạn muốn làm việc gì?","description":"Mô tả một tác vụ. Mô hình của bạn sẽ có không gian làm việc riêng.","isolated":"Biệt lập","isolatedBody":"Mỗi tác vụ có vùng chứa và tệp riêng.","durable":"Lâu dài","durableBody":"Quay lại cuộc trò chuyện và không gian làm việc sau.","controlled":"Được kiểm soát","controlledBody":"Môi trường chạy và tệp tác vụ được biệt lập khỏi máy chủ."},"composer":{"placeholder":"Mô tả nội dung bạn muốn tạo hoặc thay đổi…","model":"Mô hình công việc","noModels":"Không có mô hình tương thích với chế độ Công việc","cancel":"Dừng","send":"Chạy","hint":"Mỗi tác vụ lưu tệp và lịch sử riêng. Hãy xem lại đầu ra của mô hình trước khi sử dụng.","remoteTitle":"Nhà cung cấp từ xa","remoteHint":"Cuộc trò chuyện và đầu ra công cụ được gửi đến dịch vụ đã cấu hình. Một lượt chạy tự động có thể gọi nhà cung cấp nhiều lần và phát sinh chi phí. Tệp trong không gian làm việc vẫn ở cục bộ trừ khi công cụ trả về nội dung của tệp.","remoteDismiss":"Đóng","remoteDismissLabel":"Đóng thông báo về nhà cung cấp từ xa","remoteDismissFailed":"Không thể lưu tùy chọn nhà cung cấp từ xa.","noModelSelected":"Chưa chọn mô hình tương thích với chế độ Công việc.","mentionAgents":"Nhắc đến một agent","engine":"Bộ máy","libreModels":"Mô hình Libre WebUI","strandsDisabled":"Công cụ Strands không khả dụng cho tài khoản của bạn.","modelLabel":"Mô hình"},"conversation":{"ready":"Không gian làm việc đã sẵn sàng","empty":"Tiếp tục tác vụ bên dưới. Cuộc trò chuyện và các tệp vẫn được gắn với không gian làm việc này.","loadOlder":"Tải tin nhắn cũ hơn","openFile":"Mở {{name}}","delegatedBy":"Được ủy quyền bởi {{agent}}","reportFrom":"Báo cáo từ {{agent}}"},"status":{"preparing":"Đang chuẩn bị không gian làm việc biệt lập…","running":"Đang làm việc trong không gian cục bộ…"},"statusLabels":{"idle":"Đang chờ","thinking":"Đang suy nghĩ","complete":"Hoàn tất","needsInput":"Cần nhập liệu","error":"Lỗi"},"live":{"connecting":"Đang kết nối với cập nhật trực tiếp…","reconnecting":"Đang kết nối lại với cập nhật trực tiếp…","unavailable":"Cập nhật trực tiếp không khả dụng","newActivity":"Hoạt động mới","skillsLoaded":"Kỹ năng không gian làm việc · {{count}}","skillWorked":"Quy trình này đã thành công","skillFailed":"Quy trình này đã thất bại","skillTraceSaved":"đã ghi nhận","stats":{"title":"Tóm tắt phiên chạy","rounds":"Vòng","toolCalls":"Lượt gọi công cụ","screenshots":"Ảnh chụp màn hình","fences":"Lần chặn","checksPassed":"Kiểm tra đạt","checksPending":"Kiểm tra đang chờ","stallNudges":"Nhắc kẹt tiến độ","ambiguityNudges":"Nhắc định hướng lại","stoppedBy":"Dừng bởi","reasons":{"round":"giới hạn số vòng","toolCall":"giới hạn lệnh gọi công cụ","approvalTimeout":"hết thời gian phê duyệt","computerStall":"máy tính bị treo"}},"skillTraceSavedWorked":"Đã ghi chú: hiệu quả","skillTraceSavedFailed":"Đã ghi chú: thất bại","connectionClosed":"Kết nối trực tiếp của Công việc đã đóng.","reconnectingBackground":"Cập nhật trực tiếp đang kết nối lại ở nền."},"runtime":{"unavailable":"Môi trường chạy không khả dụng","ready":"Môi trường chạy đã sẵn sàng","readyOllama":"Docker đã sẵn sàng","readyPlugin":"Docker + plugin đã sẵn sàng","readyHybrid":"Docker + mô hình đã sẵn sàng","reason":"Cần có môi trường thực thi Work và nhà cung cấp mô hình khả dụng."},"workspace":{"label":"Chế độ xem không gian làm việc","files":"Tệp","activity":"Hoạt động","preview":"Xem trước","resize":"Đổi kích thước cuộc trò chuyện và không gian làm việc","resizeHint":"Kéo để đổi kích thước. Dùng phím mũi tên để điều chỉnh chính xác. Nhấp đúp hoặc nhấn Enter để đặt lại.","splitSize":"Cuộc trò chuyện {{conversation}}%, không gian làm việc {{workspace}}%","terminal":"Terminal","git":"Git","screen":"Màn hình","agent":"Tác nhân"},"files":{"discard":"Bỏ các thay đổi tệp chưa lưu?","leaveWithDraft":"Rời khỏi tệp này? Nội dung chỉnh sửa chưa lưu sẽ được giữ dưới dạng bản nháp trong trình duyệt.","up":"Thư mục mẹ","back":"Quay lại tệp","empty":"Thư mục này chưa có tệp.","select":"Chọn một tệp để kiểm tra và chỉnh sửa.","editorLabel":"Trình sửa tệp: {{path}}","format":"Định dạng","formatted":"Đã định dạng mã.","formatFailed":"Không thể định dạng tệp này.","formatShortcut":"Định dạng (Shift+Alt+F)","formatTooLarge":"Chỉ có thể định dạng tệp dưới 100.000 ký tự và 4.000 dòng.","formatUnsupported":"Không hỗ trợ định dạng loại tệp này.","saveShortcut":"Lưu (⌘/Ctrl+S)","highlightPaused":"Tính năng tô sáng trực tiếp bị tạm dừng với tệp lớn để duy trì tốc độ chỉnh sửa.","plainTextLarge":"Văn bản thuần · tệp lớn","changes":"Thay đổi","changesSince":"Những gì đã thay đổi kể từ lượt trước","diffLabel":"Thay đổi kể từ lượt trước: {{path}}","diffFolded":"{{count}} dòng không thay đổi","diffAdded":"Đã thêm","diffRemoved":"Đã xóa","unsavedChanges":"thay đổi chưa lưu","editingLocked":"Chỉnh sửa sẽ mở khóa khi lượt này kết thúc."},"activity":{"empty":"Lệnh, thao tác tệp và kết quả công cụ sẽ xuất hiện ở đây.","toolActivity":"Hoạt động công cụ","details":"Chi tiết","kinds":{"message":"Tin nhắn","toolCall":"Lệnh gọi công cụ","toolResult":"Kết quả công cụ","error":"Lỗi"},"arguments":"Tham số công cụ","output":"Kết quả công cụ"},"preview":{"command":"Lệnh khởi động không bắt buộc","start":"Bắt đầu xem trước","stop":"Dừng xem trước","open":"Mở","starting":"Đang bắt đầu xem trước…","frameTitle":"Xem trước không gian làm việc","failed":"Không thể bắt đầu bản xem trước. Hãy kiểm tra Hoạt động rồi thử một lệnh khác.","empty":"Khởi động ứng dụng trong không gian làm việc này để kiểm tra tại đây.","finished":"Tác vụ này đã kết thúc. Mở lại để bắt đầu xem trước.","reopenStart":"Mở lại tác vụ và bắt đầu xem trước"},"mobile":{"surface":"Chế độ xem tác vụ","conversation":"Cuộc trò chuyện","workspace":"Không gian làm việc"},"toasts":{"runFailed":"Không thể bắt đầu tác vụ công việc.","updateFailed":"Không thể cập nhật tác vụ này.","renameFailed":"Không thể đổi tên tác vụ này.","cancelled":"Đã dừng lượt chạy công việc.","cancelFailed":"Không thể dừng lượt chạy công việc.","deleteFailed":"Không thể xóa tác vụ công việc này.","saveFailed":"Không thể lưu tệp này.","saved":"Đã lưu tệp.","previewFailed":"Không thể bắt đầu bản xem trước.","previewStopFailed":"Không thể dừng bản xem trước.","sendFailed":"Không thể gửi tin nhắn."},"terminal":{"connecting":"Đang mở shell trong hộp cát…","closed":"Phiên terminal đã kết thúc.","failed":"Không thể bắt đầu phiên terminal.","reconnect":"Kết nối lại","unavailable":"Terminal tương tác không khả dụng trong bản triển khai này.","blockedByRun":"Mô hình đang dùng vùng chứa này. Terminal sẽ mở khi lượt kết thúc.","taskRunning":"Lượt của mô hình đang chạy"},"policy":{"label":"Chính sách runtime","default":"Mặc định (giới hạn toàn cục)","setupHint":"Chính sách thời gian chạy mở khóa Work Computer — màn hình trình duyệt có thể theo dõi cho tác nhân — và giới hạn theo tác vụ.","setupLink":"Thiết lập chính sách Work"},"git":{"actionFailed":"Hành động Git thất bại.","blockedByPreview":"Dừng bản xem trước trước khi thay đổi trạng thái Git.","blockedByRun":"Hành động ghi Git sẽ mở khóa khi lượt của mô hình kết thúc.","branchCreated":"Đã tạo {{name}}.","branchSwitched":"Đã chuyển sang {{name}}.","clean":"Cây làm việc sạch.","commit":"Commit các thay đổi đã stage","commitMessage":"Thông điệp commit","committed":"Đã tạo commit.","detached":"HEAD tách rời","diff":"Xem trước diff","diffFailed":"Không thể tải diff này.","history":"Lịch sử cục bộ","initialize":"Khởi tạo Git","initializeDescription":"Tạo kho cục bộ cho trạng thái, diff, nhánh và commit. Không kết nối thông tin xác thực từ xa.","initialized":"Đã khởi tạo kho Git.","loadFailed":"Không thể tải trạng thái Git.","localOnly":"Chỉ Git cục bộ. Push, pull và pull request cần một trung gian thông tin xác thực đáng tin cậy riêng.","newBranch":"Nhánh cục bộ mới","noCommits":"Chưa có commit.","noDiff":"Chưa có diff văn bản. Tệp chưa theo dõi sẽ hiện sau khi stage.","notInitialized":"Git chưa được khởi tạo","selectChange":"Chọn một tệp đã thay đổi để xem diff.","selectPath":"Chọn {{path}}","stageAll":"Stage tất cả","stageSelected":"Stage {{count}}","staged":"Đã stage thay đổi.","switchBranch":"Chuyển nhánh cục bộ","changes":"Thay đổi","createBranch":"Tạo","filterFiles":"Lọc các tệp đã thay đổi","noFilterMatches":"Không có tệp thay đổi nào khớp với bộ lọc này.","allChanges":"Tất cả thay đổi","diffTruncated":"Diff này đã bị cắt bớt.","binaryFile":"Tệp nhị phân, không có diff văn bản.","statusLabels":{"modified":"Đã sửa đổi","added":"Đã thêm","deleted":"Đã xóa","renamed":"Đã đổi tên","copied":"Đã sao chép","typeChanged":"Đã đổi kiểu","untracked":"Chưa theo dõi"},"stagedState":"đã stage","aheadBehind":"Trước {{ahead}}, sau {{behind}}"},"hostWorkspace":{"hint":"Để trống cho không gian làm việc cô lập, hoặc trỏ tác vụ tới một thư mục trên máy này.","label":"Thư mục không gian làm việc (tùy chọn)","warning":"Tác vụ có thể đọc và ghi thư mục này trực tiếp. Để trống để dùng không gian cô lập."},"screen":{"starting":"Đang khởi động Work Computer…","disconnected":"Màn hình đã ngắt kết nối.","reconnect":"Kết nối lại","viewOnly":"Đang xem","takeOver":"Tiếp quản","handBack":"Tôi xong rồi","youHaveControl":"Bạn đang điều khiển","otherHasControl":"{{name}} đang điều khiển","agentWaiting":"Tác nhân đề nghị bạn tiếp quản","teach":"Dạy một tác vụ","recording":"Đang ghi","teachSave":"Lưu","teachDiscard":"Bỏ","teachNamePlaceholder":"Đặt tên cho tác vụ này","teachSaved":"Đã lưu thành kỹ năng \\"{{name}}\\"","watchingLearning":"Tác nhân đang quan sát và học","unmute":"Bật tiếng","mute":"Tắt tiếng","finished":"Tác vụ này đã kết thúc. Mở lại để lấy lại màn hình của nó.","reopenOpen":"Mở lại tác vụ và mở màn hình","teachSaveFailed":"Không thể lưu bản trình diễn này."},"computerSetup":{"title":"Work Computer","description":"Cho tác nhân của bạn một màn hình nền thật với trình duyệt — mọi thứ tự thiết lập.","building":"Đang dựng image màn hình nền... lần đầu mất vài phút.","enable":"Bật","retry":"Thử lại"},"agents":{"title":"Tác nhân"},"persona":{"label":"Thuê làm tác nhân (không bắt buộc)","none":"Không có persona (tác vụ một lần)","hint":"Tác vụ này trở thành một tác nhân có tên: giữ persona, được ghim trong thanh bên và báo cáo một dòng trạng thái sau mỗi lần chạy.","description":"Chọn một persona để giữ tác vụ này dưới dạng tác nhân có tên."},"agent":{"openScreen":"Mở chế độ xem toàn màn hình","personaLine":"Persona: {{name}}","screen":"Màn hình","routines":"Thói quen","addRoutine":"Thói quen","noRoutines":"Chưa có thói quen nào. Thói quen chạy một chỉ dẫn theo lịch, bên trong không gian làm việc của tác nhân này.","routineToggleFailed":"Không thể cập nhật thói quen.","routineSaveFailed":"Không thể lưu thói quen.","skills":"Kỹ năng đã dạy","noSkills":"Chưa dạy gì. Dùng Teach trong thẻ Màn hình để trình diễn một quy trình một lần; nó trở thành kỹ năng có thể phát lại.","skillToggleFailed":"Không thể cập nhật kỹ năng.","unread":"Hoạt động mới","approvals":"Tự động duyệt","approvalsHint":"Khi bật, các lệnh, thao tác xóa và di chuyển tệp, cùng hành động trên máy tính sẽ tạm dừng cho đến khi bạn phê duyệt.","approvalsPolicyForced":"Chính sách Work của tác nhân này yêu cầu phê duyệt cho các hành động có tác động ra bên ngoài.","approvalsToggleFailed":"Không thể cập nhật phê duyệt.","approvalRuleLine":"Luôn được phép","approvalRuleDelete":"Xóa quy tắc","approvalRuleDeleteFailed":"Không thể xóa quy tắc.","routinesLoadFailed":"Không thể tải các thói quen.","skillsLoadFailed":"Không thể tải các kỹ năng đã dạy.","approvalsLoadFailed":"Không thể tải cài đặt phê duyệt.","routinePaused":"Đã tạm dừng"},"approval":{"title":"Cần phê duyệt","description":"Tác nhân muốn chạy {{tool}}. Hành động này có thể thay đổi dữ liệu hoặc tác động bên ngoài cuộc trò chuyện.","allowOnce":"Cho phép một lần","allowAlways":"Luôn cho phép","deny":"Từ chối","failed":"Không thể gửi quyết định.","details":"Chi tiết hành động","fields":{"command":"Lệnh","path":"Đường dẫn","from":"Từ","to":"Đến","actions":"Hành động","recursive":"Đệ quy"}},"idleStopHint":"Dừng sau {{minutes}} phút không hoạt động.","runs":{"title":"Lượt chạy","empty":"Chưa có lượt chạy nào hoàn tất. Mỗi lượt chạy lưu lại những gì nó tạo ra và các tệp nó đã thay đổi.","fileCount":"Tệp ({{total}})","exitStates":{"completed":"Hoàn tất","needsInput":"Cần nhập liệu","failed":"Thất bại","cancelled":"Đã hủy"},"loadFailed":"Không thể tải lịch sử chạy."},"recovery":{"pending":"Work đang xác nhận {{pending}} lượt dọn dẹp sandbox trước khi chấp nhận thao tác mới.","since":"Đã bị chặn từ {{time}}.","nextAttempt":"Lần thử tiếp theo {{time}}.","adminHint":"Quản trị viên có thể thử lại từ Hệ thống > Work.","retry":"Thử lại ngay","retrying":"Đang thử lại…","retrySucceeded":"Đã dọn {{cleared}} trong số {{attempted}} mục đang chờ.","retryPending":"Vẫn đang thử lại {{attempted}} mục dọn dẹp đang chờ.","retryFailed":"Không thể thử lại các mục dọn dẹp đang chờ."},"computer":{"setupFailed":"Không thể thiết lập Máy tính Công việc."},"announce":{"completed":"{{title}} đã hoàn tất.","needsInput":"{{title}} cần nhập liệu hoặc phê duyệt của bạn.","failed":"{{title}} đã thất bại.","cancelled":"{{title}} đã bị dừng.","approvalNeeded":"{{title}} cần bạn phê duyệt để chạy {{tool}}.","untitledTask":"Tác vụ này"}}`),personaBackground:{label:`Hình nền`,uploadBackgroundImage:`Tải lên hình nền`,dragAndDrop:`Kéo và thả hình ảnh hoặc nhấp để duyệt`,chooseImage:`Chọn hình ảnh`,uploading:`Đang tải lên...`,enterImageUrl:`Hoặc nhập URL hình ảnh`,supportedFormats:`Hỗ trợ: JPG, PNG, GIF, WebP (tối đa 5MB). Hình ảnh ngang rộng hoạt động tốt nhất.`,customBackground:`Hình nền tùy chỉnh`,clickToChange:`Nhấp để thay đổi hoặc xóa`,removed:`Đã xóa hình nền`,uploaded:`Tải lên hình nền thành công`,invalidFile:`Vui lòng chọn tệp hình ảnh hợp lệ`,fileTooLarge:`Kích thước hình nền phải nhỏ hơn 5MB`,readFailed:`Không thể đọc tệp hình ảnh`,uploadFailed:`Không thể tải lên hình nền`},modelSelector:{searchInstalled:`Tìm kiếm mô hình đã cài...`,searchOllama:`Tìm trong thư viện Ollama...`,searchHuggingFace:`Tìm trên HuggingFace...`,searchModels:`Tìm kiếm mô hình...`,selectModel:`Chọn mô hình`,personas:`Nhân vật`,ollamaModels:`Mô hình Ollama`,pluginModels:`Mô hình plugin`,actions:`Hành động`,installed:`Đã cài`,use:`Dùng`,pull:`Tải`,pullRestricted:`Việc cài đặt mô hình trên phiên bản này chỉ dành cho quản trị viên.`,adminOnlyPull:`Chỉ quản trị viên`,legacyProvider:`nhà cung cấp chưa được ghi`,providerNotRecorded:`Nhà cung cấp chưa được ghi`,providerUnavailable:`nhà cung cấp không khả dụng`,reselectProvider:`chọn lại nhà cung cấp để ghim mô hình này`,unavailable:`không khả dụng`,unavailableSelections:`Lựa chọn không khả dụng`,agentModels:`Tác nhân`,showAll:`Hiện tất cả ({{total}})`,sources:`Nguồn mô hình`,defaultModel:`Mô hình mặc định`,contextSize:`ngữ cảnh {{size}}`,via:`qua {{provider}}`},whatsNew:{title:`Có gì mới`,releaseNotes:`Ghi chú phát hành`,cta:`Được rồi, bắt đầu thôi`,starAsk:`Thích Libre WebUI? Hãy để lại một ngôi sao trên GitHub`},notes:{title:`Ghi chú`,new:`Ghi chú mới`,untitled:`Không có tiêu đề`,empty:`Chưa có ghi chú nào`,selectOrCreate:`Chọn một ghi chú hoặc tạo mới`,contentPlaceholder:`Viết bằng Markdown…`,saved:`Đã lưu`,saveFailed:`Không thể lưu ghi chú`,createFailed:`Không thể tạo ghi chú`,deleteConfirm:`Xóa ghi chú này?`,deleteFailed:`Không thể xóa ghi chú`,tools:`Công cụ ghi chú`,revisions:`Lịch sử`,attachments:`Tệp đính kèm`,share:`Chia sẻ`,assist:`Chỉnh sửa AI`,noRevisions:`Chưa có phiên bản trước`,restore:`Khôi phục`,revisionRestored:`Đã khôi phục phiên bản`,revisionRestoreFailed:`Không thể khôi phục phiên bản này`,addAttachment:`Thêm tệp đính kèm`,noAttachments:`Chưa có tệp đính kèm`,attachmentAdded:`Đã thêm tệp đính kèm`,attachmentFailed:`Không thể thêm tệp đính kèm`,attachmentDownloadFailed:`Không thể tải tệp đính kèm`,shareUsernamePlaceholder:`Tên người dùng`,permissionRead:`Có thể xem`,permissionWrite:`Có thể chỉnh sửa`,shareAction:`Chia sẻ`,notShared:`Chưa chia sẻ với ai`,revokeShare:`Thu hồi quyền truy cập`,shareHint:`Ghi chú được chia sẻ sẽ xuất hiện trong danh sách ghi chú của người kia. Có thể thu hồi quyền truy cập bất cứ lúc nào.`,shareUserNotFound:`Không có người dùng nào với tên đó`,shareAdded:`Đã chia sẻ với {{username}}`,shareFailed:`Không thể chia sẻ ghi chú`,assistPlaceholder:`Mô tả thay đổi, ví dụ rút gọn phần tóm tắt hoặc sửa ngữ pháp`,assistGenerate:`Đề xuất chỉnh sửa`,assistNoModel:`Hãy chọn một mô hình trong Chat trước`,assistNoChanges:`Mô hình không đề xuất thay đổi nào`,assistApply:`Áp dụng`,assistDiscard:`Bỏ`,assistApplied:`Đã áp dụng chỉnh sửa`,assistRevisionHint:`Khi áp dụng, phiên bản trước vẫn nằm trong lịch sử nên mọi chỉnh sửa AI đều có thể hoàn tác.`,assistFailed:`Không thể tạo chỉnh sửa`,pin:`Ghim ghi chú`,unpin:`Bỏ ghim ghi chú`,pinned:`Đã ghim`,export:`Tải xuống dạng Markdown`,sharedWithYou:`Được chia sẻ với bạn`,titleLabel:`Tiêu đề ghi chú`,loadFailed:`Không thể tải. Hãy thử lại.`,restoreConfirmTitle:`Khôi phục phiên bản này?`,restoreConfirmDescription:`Nội dung ghi chú sẽ được thay bằng phiên bản cũ hơn này.`,deleteAttachmentConfirmTitle:`Xóa {{name}}?`,deleteAttachmentConfirmDescription:`Tệp đính kèm sẽ bị xóa vĩnh viễn khỏi ghi chú này.`,attachmentDeleteFailed:`Không thể xóa tệp đính kèm`,revokeFailed:`Không thể thu hồi quyền truy cập`,sharePermissionLabel:`Quyền`},calendar:{title:`Lịch`,today:`Hôm nay`,month:`Tháng`,week:`Tuần`,previous:`Trước`,next:`Sau`,newEvent:`Sự kiện mới`,editEvent:`Chỉnh sửa sự kiện`,eventTitle:`Tiêu đề`,titlePlaceholder:`Tiêu đề sự kiện`,date:`Ngày`,start:`Bắt đầu`,end:`Kết thúc`,allDay:`Cả ngày`,repeat:`Lặp lại`,repeatNone:`Không lặp lại`,repeatDaily:`Hằng ngày`,repeatWeekly:`Hằng tuần`,repeatMonthly:`Hằng tháng`,repeatYearly:`Hằng năm`,notes:`Ghi chú`,more:`+{{n}} nữa`,loadFailed:`Không thể tải lịch`,saveFailed:`Không thể lưu sự kiện`,deleteFailed:`Không thể xóa sự kiện`,day:`Ngày`,calendarLabel:`Lịch`,personalCalendar:`Cá nhân`,reminderLabel:`Nhắc nhở`,reminderNone:`Không nhắc`,reminderMinutes:`Trước {{minutes}} phút`,reminderHour:`Trước 1 giờ`,reminderDay:`Trước 1 ngày`,sharedReadOnly:`Sự kiện này được chia sẻ với bạn ở chế độ chỉ xem.`,sharedBadge:`đã chia sẻ`,shareCalendar:`Chia sẻ lịch`,newCalendarPlaceholder:`Lịch mới…`,calendarSaveFailed:`Không thể lưu lịch`,exportFailed:`Không thể xuất lịch`,importFailed:`Không thể nhập tệp`,importResult:`Đã nhập {{total}} sự kiện`,importIcs:`Nhập`,exportIcs:`Xuất`,chipStatus:{automation:`Tự động hóa theo lịch`,runSucceeded:`Lần chạy tự động hóa thành công`,runFailed:`Lần chạy tự động hóa thất bại`},newEventOn:`Sự kiện mới vào {{date}}`,showDay:`Hiện tất cả sự kiện vào {{date}}`,deleteEventConfirmTitle:`Xóa "{{title}}"?`,deleteEventConfirmDescription:`Sự kiện này sẽ bị xóa vĩnh viễn.`,deleteRecurringEventConfirmDescription:`Sự kiện lặp lại này và tất cả lần lặp sẽ bị xóa vĩnh viễn.`,shareCalendarNamed:`Chia sẻ lịch {{name}}`,deleteCalendarNamed:`Xóa lịch {{name}}`,deleteCalendarConfirmTitle:`Xóa lịch "{{name}}"?`,deleteCalendarConfirmDescription:`Lịch và các sự kiện trong lịch sẽ bị xóa vĩnh viễn.`,calendarDeleteFailed:`Không thể xóa lịch`},automations:{title:`Tự động hóa`,tab:{automations:`Tự động hóa`,runs:`Lần chạy`},newAutomation:`Tự động hóa mới`,editAutomation:`Chỉnh sửa tự động hóa`,empty:`Chưa có tự động hóa nào. Tạo một cái để chạy tác vụ theo lịch.`,loadFailed:`Không thể tải tự động hóa`,saveFailed:`Không thể lưu tự động hóa`,actionFailed:`Thao tác thất bại`,runQueued:`Đã bắt đầu chạy`,status:{active:`Đang hoạt động`,paused:`Tạm dừng`},nextRun:`Lần chạy tiếp theo {{when}}`,actions:`Thao tác`,pause:`Tạm dừng`,resume:`Tiếp tục`,runNow:`Chạy ngay`,openChat:`Mở cuộc trò chuyện`,noRuns:`Chưa có lần chạy nào`,deletedAutomation:`Tự động hóa đã xóa`,runHistory:`Lịch sử chạy (30 ngày qua)`,succeeded:`thành công`,failed:`thất bại`,form:{name:`Tên`,namePlaceholder:`Tự động hóa của tôi`,triggers:`Bộ kích hoạt`,addTrigger:`Thêm bộ kích hoạt`,instructions:`Hướng dẫn`,instructionsPlaceholder:`Nên chạy gì theo lịch này?`,model:`Mô hình`,modelAuto:`Tự động`,notification:`Thông báo`,notifyApp:`Ứng dụng`,notifyOff:`Tắt`,frequency:`Tần suất`,time:`Thời gian`,minute:`Phút`,fromHour:`Từ`,toHour:`Đến`,weekday:`Thứ`,dayOfMonth:`Ngày`,month:`Tháng`,target:`Chạy dưới dạng`,targetChat:`Phiên trò chuyện`,targetWork:`Tác vụ Work`,workPolicy:`Chính sách Work`,workPolicyDefault:`Mặc định (giới hạn chung)`,taskBoundNote:`Thói quen này chạy bên trong không gian làm việc và cuộc trò chuyện của chính tác nhân, với mô hình và môi trường chạy của tác nhân.`,event:`Sự kiện`,eventMatch:`Văn bản khớp`,eventMatchPlaceholder:`Văn bản không bắt buộc trong tiêu đề`,eventOnlyHint:`Thói quen này không có lịch chạy. Nó chạy khi sự kiện xảy ra, tối đa một lần mỗi phút.`},kind:{once:`Một lần`,hourly:`Hằng giờ`,daily:`Hằng ngày`,weekly:`Hằng tuần`,monthly:`Hằng tháng`,yearly:`Hằng năm`,event:`Khi có sự kiện`},trigger:{once:`Một lần vào {{when}}`,hourly:`Hằng giờ vào phút :{{minute}}`,daily:`Hằng ngày lúc {{time}}`,weekly:`Hằng tuần vào {{day}} lúc {{time}}`,monthly:`Hằng tháng vào ngày {{day}} lúc {{time}}`,yearly:`Hằng năm vào {{date}} lúc {{time}}`,event:`Chạy khi {{event}}`,eventMatching:`Chạy khi {{event}} và tiêu đề chứa "{{match}}"`},finishedNotification:`{{n}} lần chạy tự động hóa đã hoàn tất`,templatesTitle:`Mẫu`,templates:{morningBrief:{name:`Bản tin buổi sáng`,description:`Bắt đầu ngày mới với tin chính và các ưu tiên.`},newsDigest:{name:`Tổng hợp tin tức AI`,description:`Các bản phát hành mô hình, nghiên cứu và nguồn vốn quan trọng.`},weeklyReview:{name:`Tổng kết tuần`,description:`Khép lại tuần: thành quả, việc dang dở, ưu tiên tiếp theo.`},monthlyReport:{name:`Báo cáo tháng`,description:`Dàn ý báo cáo tình trạng vào ngày đầu mỗi tháng.`}},openTask:`Mở tác vụ`,webhook:{title:`Kích hoạt bằng webhook`,enabledHint:`Hệ thống bên ngoài có thể kích hoạt tự động hóa này bằng khóa bí mật. Xoay vòng sẽ vô hiệu hóa khóa cũ.`,disabledHint:`Cho phép hệ thống bên ngoài (CI, cron, nhà thông minh) kích hoạt tự động hóa này bằng POST và một khóa bí mật.`,rotate:`Xoay vòng khóa`,enable:`Bật`,disable:`Tắt`,revealHint:`Chỉ hiển thị một lần. Gửi dưới dạng token Bearer hoặc header X-Libre-Webhook-Secret.`,failed:`Không thể cập nhật webhook.`},triggers:{events:{"channel-mention":`có người nhắc đến bạn trong một kênh`,"channel-dm":`bạn nhận được tin nhắn trực tiếp`,"channel-invite":`bạn được mời vào một kênh`,share:`có thứ gì đó được chia sẻ với bạn`,"calendar-reminder":`một lời nhắc lịch được kích hoạt`,"media-ready":`một tác vụ media hoàn tất`,"media-failed":`một tác vụ media thất bại`,"budget-alert":`một cảnh báo ngân sách được kích hoạt`,"work-run-finished":`một lượt chạy tác nhân hoàn tất`,"work-run-attention":`một lượt chạy tác nhân cần chú ý`,"work-takeover":`một tác nhân đề nghị bạn tiếp quản`,"work-approval":`một tác nhân đang chờ bạn phê duyệt`,system:`có thông báo hệ thống`}},deleteConfirmTitle:`Xóa "{{name}}"?`,deleteConfirmDescription:`Tự động hóa và lịch chạy của nó sẽ bị xóa vĩnh viễn. Các lần chạy trước vẫn còn trong lịch sử chạy.`},home:{active:`đang hoạt động`,continue:`Tiếp tục`,start:`Bắt đầu`,explore:`Khám phá`,greeting:`{{greeting}}.`,greetingWithName:`{{greeting}}, {{name}}.`},palette:{empty:`Không có kết quả.`,placeholder:`Tìm chat, Work, hành động…`,toggleTheme:`Đổi giao diện`,actions:`Hành động`,chats:`Cuộc trò chuyện`,search:`Tìm kiếm`,settings:`Cài đặt`,work:`Công việc`,messages:`Tin nhắn`,notes:`Ghi chú`,documents:`Tài liệu`,searching:`Đang tìm kiếm…`,searchFailed:`Tìm kiếm không gian làm việc thất bại. Chỉ hiện các cuộc trò chuyện và hành động khớp.`,results:`Kết quả`,escKey:`esc`,hintNavigate:`Di chuyển`,hintOpen:`Mở`,hintClose:`Đóng`},tabs:{actions:`Hành động thẻ`,close:`Đóng thẻ`,closeAll:`Đóng tất cả thẻ`,closeOthers:`Đóng các thẻ khác`,closeRight:`Đóng các thẻ bên phải`,home:`Trang chủ`,label:`Thẻ đang mở`,new:`Thẻ mới`,newWork:`Work mới`,chat:`Trò chuyện`,newChat:`Cuộc trò chuyện mới`,work:`Công việc`},tools:{arguments:`Tham số`,result:`Kết quả`,callStatus:{awaiting_approval:`Đang chờ phê duyệt`,running:`Đang chạy`,succeeded:`Xong`,failed:`Thất bại`,denied:`Đã từ chối`,cancelled:`Đã hủy`},approval:{title:`Công cụ cần được phê duyệt`,description:`Mô hình muốn chạy {{tool}} trên {{server}}. Lệnh gọi này có thể thay đổi dữ liệu bên ngoài cuộc trò chuyện.`,builtinSource:`máy chủ này`,allowOnce:`Cho phép một lần`,allowSession:`Cho phép trong cuộc trò chuyện này`,allowAlways:`Luôn cho phép`,deny:`Từ chối`}},promptsPage:{title:`Prompt`,description:`Mẫu prompt dùng lại được với biến có kiểu. Gõ / trong ô soạn tin để chèn một mẫu.`,newPrompt:`Prompt mới`,editPrompt:`Sửa prompt`,empty:`Chưa có prompt nào`,emptyHint:`Prompt là mẫu tin nhắn đã lưu. Sau khi bạn tạo một mẫu, gõ /slug trong ô soạn tin sẽ chèn nó và hỏi các biến mà nó khai báo.`,loadFailed:`Không tải được các prompt của bạn.`,saved:`Đã lưu prompt`,saveFailed:`Không lưu được prompt.`,deleted:`Đã xóa prompt`,deleteFailed:`Không xóa được prompt.`,deleteTitle:`Xóa prompt`,deleteConfirm:`Xóa "{{title}}"? Lịch sử phiên bản của nó cũng mất theo.`,exportFailed:`Không xuất được prompt.`,imported:`Đã nhập prompt`,importFailed:`Không nhập được tệp đó.`,historyFailed:`Không tải được lịch sử phiên bản.`,rolledBack:`Đã khôi phục prompt`,rollbackFailed:`Không khôi phục được prompt.`,versionLabel:`v{{version}}`,updated:`Cập nhật {{when}}`,form:{slug:`Slug`,slugPlaceholder:`weekly-report`,slugHint:`Dùng dưới dạng /slug trong ô soạn tin.`,slugInvalid:`Chỉ dùng chữ thường, chữ số và dấu gạch ngang.`,title:`Tiêu đề`,titlePlaceholder:`Báo cáo tuần`,description:`Mô tả`,descriptionPlaceholder:`Prompt này dùng để làm gì`,content:`Nội dung`,contentPlaceholder:`Viết prompt. Bọc mọi thứ bạn muốn điền sau này trong cặp ngoặc nhọn kép.`,contentHint:`Chỗ giữ chỗ là một tên đặt trong cặp ngoặc nhọn kép. Khai báo bên dưới để đặt nhãn hoặc giá trị mặc định cho nó.`,tags:`Thẻ`,tagsPlaceholder:`nghiên cứu, viết lách`,variables:`Biến`,variablesHint:`Không bắt buộc. Khai báo chỗ giữ chỗ ở đây để đặt nhãn, giá trị mặc định hoặc danh sách lựa chọn.`,variableName:`Tên`,variableType:`Kiểu`,variableLabel:`Nhãn`,variableDefault:`Mặc định`,variableRequired:`Bắt buộc`,variableOptions:`Lựa chọn`,variableOptionsPlaceholder:`Các lựa chọn cách nhau bằng dấu phẩy`,addVariable:`Thêm biến`,removeVariable:`Xóa biến`},variableTypes:{text:`Văn bản`,number:`Số`,select:`Lựa chọn`,boolean:`Có hoặc không`},history:{open:`Lịch sử phiên bản`,title:`Lịch sử của {{title}}`,subtitle:`Khôi phục sẽ lưu bản sửa đổi bạn chọn thành một phiên bản mới. Không có gì bị ghi đè.`,empty:`Chưa có phiên bản cũ hơn.`,current:`Hiện tại`,rollback:`Khôi phục`,rollingBack:`Đang khôi phục...`},templatesTitle:`Bắt đầu từ một mẫu`,templates:{reviewPr:{name:`Rà soát pull request`,description:`Rà soát mã nguồn có cấu trúc, mức độ khắt khe tùy chỉnh được.`},summarize:{name:`Tóm tắt cho một nhóm người đọc`,description:`Bản tóm tắt dạng gạch đầu dòng, phù hợp với người đọc.`},translate:{name:`Dịch`,description:`Bản dịch giữ nguyên giọng văn và định dạng.`},explainCode:{name:`Giải thích mã nguồn`,description:`Giải thích từng bước cùng các trường hợp biên và rủi ro.`}}},skillsPage:{title:`Kỹ năng`,description:`Các bộ hướng dẫn có tên mà mô hình có thể nạp khi cần trong lúc làm việc.`,newSkill:`Kỹ năng mới`,editSkill:`Sửa kỹ năng`,empty:`Chưa có kỹ năng nào`,emptyHint:`Kỹ năng là một bộ hướng dẫn mà mô hình chỉ nạp khi cần đến. Nhắc $slug trong tin nhắn, hoặc để mô hình tự lấy qua công cụ load_skill.`,loadFailed:`Không tải được các kỹ năng của bạn.`,saved:`Đã lưu kỹ năng`,saveFailed:`Không lưu được kỹ năng.`,toggleFailed:`Không thay đổi được kỹ năng.`,deleted:`Đã xóa kỹ năng`,deleteFailed:`Không xóa được kỹ năng.`,deleteTitle:`Xóa kỹ năng`,deleteConfirm:`Xóa "{{name}}"? Lịch sử phiên bản của nó cũng mất theo.`,exportFailed:`Không xuất được kỹ năng.`,imported:`Đã nhập kỹ năng`,importFailed:`Không nhập được tệp đó.`,historyFailed:`Không tải được lịch sử phiên bản.`,rolledBack:`Đã khôi phục kỹ năng`,rollbackFailed:`Không khôi phục được kỹ năng.`,versionLabel:`v{{version}}`,updated:`Cập nhật {{when}}`,form:{slug:`Slug`,slugPlaceholder:`code-review`,slugHint:`Dùng dưới dạng $slug khi bạn nhắc đến kỹ năng.`,slugInvalid:`Chỉ dùng chữ thường, chữ số và dấu gạch ngang.`,name:`Tên`,namePlaceholder:`Rà soát mã nguồn`,description:`Mô tả`,descriptionPlaceholder:`Khi nào dùng kỹ năng này`,descriptionHint:`Đây là bản kê khai mà mô hình nhìn thấy. Hãy viết sao cho mô hình biết khi nào kỹ năng phù hợp mà không cần nạp nó.`,instructions:`Hướng dẫn`,instructionsPlaceholder:`Hướng dẫn dạng Markdown mà mô hình đọc sau khi nạp kỹ năng này.`,instructionsHint:`Chỉ được nạp khi kỹ năng được dùng, nên độ dài ở đây không tốn gì cho tới lúc đó.`,enabled:`Đã bật`,enabledHint:`Kỹ năng đã tắt vẫn được lưu nhưng không bao giờ được đưa cho mô hình.`,approval:`Luôn hỏi trước khi chạy`,approvalHint:`Khi kỹ năng này được nạp, tác nhân sẽ tạm dừng để hỏi bạn trước khi các công cụ này chạy, ngay cả khi phê duyệt nói chung đang tắt. Một quy tắc "Luôn cho phép" đã lưu không bao giờ có thể tự động phê duyệt chúng thay bạn.`,approvalTools:`Công cụ cần phê duyệt`,approvalToolsHint:`Để trống tất cả các ô để áp dụng cho mọi công cụ bị hạn chế.`},history:{open:`Lịch sử phiên bản`,title:`Lịch sử của {{name}}`},templatesTitle:`Bắt đầu từ một mẫu`,templates:{citeSources:{name:`Trích dẫn nguồn`,description:`Tài liệu tham khảo đánh số kèm URL, không có khẳng định thiếu nguồn.`},releaseNotes:{name:`Phong cách ghi chú phát hành`,description:`Các mục được nhóm lại cho người dùng, không có id nội bộ.`},meetingNotes:{name:`Định dạng biên bản họp`,description:`Quyết định, việc cần làm và câu hỏi còn bỏ ngỏ từ bản ghi.`}},importUrl:{button:`Từ URL`,title:`Nhập kỹ năng từ URL`,hint:`Dán liên kết skills.sh hoặc GitHub, owner/repo/skill, hoặc liên kết trực tiếp đến tệp SKILL.md.`,placeholder:`https://skills.sh/owner/repo/skill hoặc owner/repo/skill`,overwrite:`Ghi đè kỹ năng của tôi nếu slug đã tồn tại`},files:{title:`Tệp đi kèm`,hint:`Tài liệu tham khảo và tập lệnh mà mô hình đọc khi cần qua read_skill_file.`,add:`Thêm tệp`,empty:`Chưa có tệp đi kèm nào.`,pathPlaceholder:`docs/reference.md`,contentPlaceholder:`Nội dung tệp…`,loadFailed:`Không thể tải tệp`,saveFailed:`Không thể lưu tệp`,deleteFailed:`Không thể xóa tệp`},folderImport:{button:`Từ thư mục`,missingSkillMd:`Thư mục cần có tệp SKILL.md`,done:`Đã nhập kỹ năng với {{count}} tệp đi kèm`},toggleLabel:`Bật kỹ năng {{name}}`},toolsPage:{title:`Công cụ`,description:`Các máy chủ công cụ mà mô hình có thể gọi, và những phê duyệt bạn đã cấp cho chúng.`,approvalNotice:`Các công cụ làm thay đổi dữ liệu bên ngoài cuộc trò chuyện luôn hỏi phê duyệt, trừ khi bạn đã cấp cho công cụ đó phê duyệt vĩnh viễn hoặc phê duyệt cho cuộc trò chuyện.`,registerServer:`Đăng ký máy chủ`,registerHint:`Libre WebUI đọc máy chủ một lần và ghim lại các công cụ mà nó cung cấp. Làm mới máy chủ sau này để cập nhật thay đổi.`,editServer:`Sửa máy chủ`,empty:`Không có máy chủ công cụ`,emptyHintAdmin:`Đăng ký một máy chủ OpenAPI hoặc MCP để mô hình có thứ để gọi.`,emptyHintUser:`Quản trị viên chưa chia sẻ máy chủ công cụ nào với bạn.`,loadFailed:`Không tải được các máy chủ công cụ.`,saved:`Đã lưu máy chủ công cụ`,saveFailed:`Không lưu được máy chủ công cụ.`,deleted:`Đã xóa máy chủ công cụ`,deleteFailed:`Không xóa được máy chủ công cụ.`,deleteTitle:`Xóa máy chủ công cụ`,deleteConfirm:`Xóa "{{name}}"? Mọi người sẽ mất quyền dùng các công cụ của nó.`,refresh:`Làm mới công cụ`,refreshed:`Đã đọc lại công cụ từ máy chủ`,refreshFailed:`Không đọc được máy chủ.`,toolsLoadFailed:`Không tải được các công cụ đã ghim.`,overrideFailed:`Không thay đổi được công cụ.`,pinnedTools:`Công cụ đã ghim`,noPinnedTools:`Máy chủ này không cung cấp công cụ nào.`,sideEffect:`Tác dụng phụ`,sideEffectOverride:`Tác dụng phụ`,specRevision:`Bản sửa đổi {{revision}}`,credential:`Thông tin xác thực cá nhân`,credentialHint:`Được lưu mã hóa và chỉ dùng cho các lệnh gọi của riêng bạn tới máy chủ này.`,credentialPlaceholder:`Dán token của bạn`,credentialSet:`Đã đặt thông tin xác thực`,credentialMissing:`Cần thông tin xác thực`,credentialSaved:`Đã lưu thông tin xác thực`,credentialSaveFailed:`Không lưu được thông tin xác thực.`,credentialRemove:`Xóa`,credentialRemoved:`Đã xóa thông tin xác thực`,credentialRemoveFailed:`Không xóa được thông tin xác thực.`,builtinSource:`Máy chủ này`,kinds:{openapi:`OpenAPI`,mcp:`MCP`},authModes:{none:`Không xác thực`,bearer:`Token Bearer`,header:`Header tùy chỉnh`,oauth:`OAuth tương tác`},accessModes:{"admins-only":`Chỉ quản trị viên`,"all-users":`Mọi người`,granted:`Chỉ những người được cấp quyền`},form:{name:`Tên`,namePlaceholder:`API thời tiết`,kind:`Loại`,description:`Mô tả`,descriptionPlaceholder:`Máy chủ này làm gì`,baseUrl:`URL gốc`,specUrl:`URL đặc tả`,specUrlHint:`Không bắt buộc. Để trống thì dùng URL gốc.`,authMode:`Xác thực`,authHeader:`Tên header`,oauthClientId:`ID ứng dụng khách OAuth`,oauthClientIdHint:`Không bắt buộc. Chỉ cần khi nhà cung cấp không tự động đăng ký ứng dụng khách.`,oauthClientSecret:`Mật khẩu ứng dụng khách OAuth`,accessMode:`Ai được dùng`,timeoutMs:`Thời gian chờ (ms)`,maxResponseBytes:`Phản hồi tối đa (byte)`,serverDefault:`Mặc định của máy chủ`,enabled:`Đã bật`,enabledHint:`Máy chủ đã tắt vẫn được đăng ký nhưng không bao giờ được đưa cho mô hình.`},approvals:{title:`Phê duyệt thường trực`,description:`Những công cụ bạn cho phép chạy mà không hỏi lại. Thu hồi một cái thì lần sau nó sẽ hỏi lại.`,empty:`Không có phê duyệt thường trực.`,revoke:`Thu hồi`,revoked:`Đã thu hồi phê duyệt`,revokeFailed:`Không thu hồi được phê duyệt.`,scope:{once:`Một lần`,session:`Cuộc trò chuyện này`,always:`Luôn luôn`}},templatesTitle:`Bắt đầu từ một mẫu`,templates:{exa:{name:`Exa`,description:`Tìm kiếm trên web và lấy các trang bằng Exa.`},internalOpenApi:{name:`API nội bộ`,description:`Điểm khởi đầu cho dịch vụ OpenAPI của riêng bạn.`},mcpServer:{name:`Máy chủ MCP`,description:`Điểm khởi đầu cho một máy chủ MCP qua Streamable HTTP.`}},oauth:{title:`Kết nối`,hint:`Kết nối sẽ đưa bạn đến nhà cung cấp để đăng nhập. Token được giữ trên máy chủ này và chỉ dùng cho các lệnh gọi của riêng bạn.`,connect:`Kết nối`,reconnect:`Kết nối lại`,disconnect:`Ngắt kết nối`,connected:`Đã kết nối`,notConnected:`Chưa kết nối`,expiresAt:`Quyền truy cập hết hạn {{when}}`,connectFailed:`Không thể bắt đầu kết nối.`,disconnected:`Máy chủ công cụ đã ngắt kết nối`,disconnectFailed:`Không thể ngắt kết nối máy chủ công cụ.`,callbackSuccess:`Đã kết nối máy chủ công cụ`,callbackError:`Không thể kết nối máy chủ công cụ.`}},composer:{promptMenu:{label:`Thư viện prompt`,empty:`Chưa có prompt nào — hãy tạo trong Cài đặt → Prompt, hoặc bắt đầu gõ slug.`},skillMenu:{label:`Kỹ năng`,empty:`Chưa có kỹ năng nào — hãy tạo trong Cài đặt → Kỹ năng.`},variables:{title:`Điền {{title}}`,insert:`Chèn`,cancel:`Hủy`,required:`{{name}} là bắt buộc`},toolsMenu:{enable:`Dùng công cụ cho tin nhắn này`,builtin:`Công cụ tích hợp`,servers:`Máy chủ công cụ`,hint:`Các lệnh gọi có tác dụng phụ vẫn cần phê duyệt trước khi chạy.`}},share:{title:`Chia sẻ “{{name}}”`,subtitle:`Cấp quyền truy cập cho người hoặc nhóm. Chỉ bạn quản lý các chia sẻ.`,kindUser:`Người dùng`,kindGroup:`Nhóm`,usernamePlaceholder:`Tên người dùng chính xác`,groupPlaceholder:`Tên nhóm chính xác`,permissionRead:`Được xem`,permissionWrite:`Được chỉnh sửa`,action:`Chia sẻ`,empty:`Chưa chia sẻ với ai.`,hint:`Nhập chính xác tên người dùng hoặc nhóm. Người nhận thấy nó trong không gian làm việc của họ; thu hồi sẽ xóa quyền truy cập ngay lập tức.`,revoke:`Thu hồi quyền truy cập`,added:`Đã chia sẻ với {{name}}`,failed:`Chia sẻ thất bại`,userNotFound:`Không có người dùng nào với tên đó`,groupNotFound:`Không có nhóm nào với tên đó`,principalKind:`Chia sẻ với người dùng hoặc nhóm`,principalName:`Tên người dùng hoặc tên nhóm`,permission:`Quyền`,sharing:`Chia sẻ`,loading:`Đang tải danh sách chia sẻ`,loadFailed:`Không thể tải danh sách chia sẻ`,revokeFailed:`Không thể thu hồi quyền truy cập`},channels:{title:`Kênh`,browsePublic:`Duyệt kênh công khai`,newDm:`Tin nhắn trực tiếp mới`,newChannel:`Kênh mới`,empty:`Chưa có kênh nào. Tạo một kênh hoặc duyệt các kênh công khai.`,selectPrompt:`Chọn một kênh để bắt đầu`,pins:`Đã ghim`,members:`Thành viên`,settings:`Cài đặt kênh`,sendFailed:`Không thể gửi tin nhắn`,uploadFailed:`Không thể tải tệp lên`,memberAdded:`Đã thêm thành viên`,memberAddFailed:`Không thể thêm người dùng này`,attach:`Đính kèm tệp`,askModel:`Hỏi một mô hình bằng tin nhắn này`,noModel:`Không dùng mô hình`,composerPlaceholder:`Viết tin nhắn…`,thread:`Chuỗi`,replyPlaceholder:`Trả lời…`,invitePlaceholder:`Người dùng cần mời`,roleOwner:`chủ sở hữu`,removeMember:`Xóa khỏi kênh`,leave:`Rời kênh`,noPins:`Chưa có gì được ghim.`,noMessages:`Chưa có tin nhắn — hãy chào hỏi.`,create:`Tạo`,createFailed:`Không thể tạo kênh`,nameLabel:`Tên`,typeLabel:`Loại`,typePublic:`Công khai — ai cũng có thể tham gia`,typePrivate:`Riêng tư — chỉ theo lời mời`,descriptionLabel:`Mô tả`,openDm:`Mở cuộc trò chuyện`,dmFailed:`Không thể mở cuộc trò chuyện`,dmHint:`Tin nhắn trực tiếp chỉ riêng tư giữa hai bạn.`,dmPlaceholder:`Tên người dùng chính xác`,noPublic:`Không có kênh công khai.`,joined:`Đã tham gia`,join:`Tham gia`,save:`Lưu`,delete:`Xóa kênh`,modelAuthor:`Mô hình`,unknownAuthor:`Ai đó`,edited:`đã sửa`,deletedMessage:`Tin nhắn này đã bị xóa`,modelThinking:`Mô hình đang suy nghĩ…`,react:`Thêm cảm xúc`,reply:`Trả lời trong chuỗi`,pin:`Ghim tin nhắn`,unpin:`Bỏ ghim tin nhắn`,edit:`Sửa tin nhắn`,deleteMessage:`Xóa tin nhắn`,replyCount:`{{total}} trả lời`,toolCalls:{summary:`Công cụ đã dùng ({{total}})`,deniedHint:`Các công cụ làm thay đổi dữ liệu bị từ chối trong kênh. Hãy chạy chúng từ một cuộc trò chuyện.`},confirmEdit:`Lưu chỉnh sửa`,cancelEdit:`Hủy chỉnh sửa`,reactWith:`Thả cảm xúc {{emoji}}`,deleteMessageConfirmTitle:`Xóa tin nhắn này?`,deleteMessageConfirmDescription:`Tin nhắn sẽ bị xóa với mọi người trong kênh này.`,unreadCount:`{{total}} chưa đọc`,send:`Gửi tin nhắn`,invite:`Mời thành viên`,closeThread:`Đóng chuỗi`,removeAttachment:`Xóa tệp đính kèm`,loadFailed:`Không thể tải. Hãy thử lại.`,editFailed:`Không thể chỉnh sửa tin nhắn`,deleteMessageFailed:`Không thể xóa tin nhắn`,pinFailed:`Không thể thay đổi ghim`,reactFailed:`Không thể lưu cảm xúc`,downloadFailed:`Không thể tải tệp xuống`,removeMemberConfirm:`Xóa {{name}} khỏi kênh này?`,removeMemberConfirmDescription:`Họ sẽ mất quyền truy cập vào kênh và các tin nhắn trong kênh.`,removeMemberNamed:`Xóa {{name}} khỏi kênh`,removeMemberFailed:`Không thể xóa thành viên`,leaveConfirm:`Rời khỏi {{name}}?`,leaveConfirmDescription:`Bạn sẽ cần được mời lại để tham gia lại kênh riêng tư.`,leaveFailed:`Không thể rời khỏi kênh`,joinFailed:`Không thể tham gia kênh`,deleteConfirm:`Xóa {{name}}?`,deleteConfirmDescription:`Kênh và toàn bộ tin nhắn trong kênh sẽ bị xóa vĩnh viễn với mọi thành viên.`,deleteFailed:`Không thể xóa kênh`,saveFailed:`Không thể lưu kênh`},notifications:{title:`Thông báo`,empty:`Bạn đã xem hết.`,markAllRead:`Đánh dấu tất cả đã đọc`,markRead:`Đánh dấu đã đọc`,titleWithUnread:`Thông báo ({{unread}} chưa đọc)`,unread:`Chưa đọc`,loadFailed:`Không thể tải thông báo.`},voiceMode:{title:`Chế độ giọng nói`,open:`Bắt đầu chế độ giọng nói`,close:`Đóng chế độ giọng nói`,starting:`Đang khởi động…`,listening:`Đang lắng nghe…`,muted:`Micrô đã tắt tiếng`,transcribing:`Đang chuyển thành văn bản…`,generating:`Đang suy nghĩ…`,speaking:`Đang nói…`,mute:`Tắt tiếng micrô`,unmute:`Bật tiếng micrô`,finishTurn:`Nói xong`,skipReply:`Bỏ qua câu trả lời`,microphoneFailed:`Micrô không khả dụng`,transcriptionFailed:`Chuyển văn bản thất bại`,replyTimeout:`Câu trả lời mất quá nhiều thời gian`,unsupported:`Chế độ giọng nói không khả dụng`,unsupportedHint:`Chế độ giọng nói cần micrô và nhà cung cấp chuyển giọng nói thành văn bản hoặc nhận dạng giọng nói của trình duyệt.`},imageEdit:{title:`Chỉnh sửa ảnh`,prompt:`Mô tả thay đổi`,promptPlaceholder:`Ví dụ: thay bầu trời bằng hoàng hôn`,model:`Mô hình`,apply:`Áp dụng chỉnh sửa`,maskHint:`Tô lên các vùng cần vẽ lại; để nguyên khung vẽ nếu muốn chỉnh sửa toàn bộ ảnh.`,brushSize:`Kích thước cọ`,clearMask:`Xóa mặt nạ`,referenceImages:`Ảnh tham chiếu (tối đa {{total}})`,noModels:`Không có mô hình nào được cấu hình hỗ trợ chỉnh sửa ảnh.`,saved:`Đã lưu ảnh chỉnh sửa vào thư viện`,failed:`Chỉnh sửa ảnh thất bại`,loadFailed:`Không thể tải ảnh gốc`},costs:{title:`Chi phí và ngân sách`,description:`Giá biểu phí được áp dụng vào sổ ghi sử dụng; ngân sách theo dõi hoặc giới hạn chi tiêu.`,loadFailed:`Không tải được dữ liệu chi phí`,saveFailed:`Lưu thất bại`,exportFailed:`Xuất thất bại`,exportCsv:`Xuất CSV`,totalSpend:`Tổng chi tiêu`,meteredEvents:`Sự kiện có giá`,unmeteredEvents:`Sự kiện chưa có giá`,topModel:`Mô hình hàng đầu`,budgets:`Ngân sách`,noBudgets:`Chưa có ngân sách.`,budgetName:`Tên ngân sách`,principalId:`ID người dùng hoặc nhóm`,addBudget:`Thêm ngân sách`,deleteBudget:`Xóa ngân sách`,budgetSaved:`Đã lưu ngân sách`,scope:{instance:`Toàn bộ phiên bản`,user:`Người dùng`,group:`Nhóm`},period:{daily:`Hằng ngày`,weekly:`Hằng tuần`,monthly:`Hằng tháng`},mode:{observe:`Quan sát`,soft:`Cảnh báo`,hard:`Cảnh báo và chặn`},tariffs:`Biểu phí`,noTariffs:`Chưa có biểu phí — chi phí sẽ chưa được định giá cho đến khi bạn thêm giá.`,plugin:`Plugin`,model:`Mô hình`,modelOptional:`Mô hình (tùy chọn)`,allModels:`Tất cả mô hình`,inputPerMillion:`Đầu vào $/M token`,outputPerMillion:`Đầu ra $/M token`,unitPrice:`Đơn giá`,effectiveFrom:`Hiệu lực từ`,addTariff:`Thêm biểu phí`,deleteTariff:`Xóa biểu phí`,tariffSaved:`Đã lưu biểu phí`},evaluations:{title:`Đánh giá`,description:`Trận đấu trường mù, bảng xếp hạng Elo, bộ đánh giá tái sử dụng và tập dữ liệu phản hồi của bạn.`,loadFailed:`Không tải được đánh giá`,matchFailed:`Trận đấu trường thất bại`,voteRecorded:`Đã ghi phiếu bầu`,voteFailed:`Không ghi được phiếu bầu`,saveFailed:`Lưu thất bại`,exportFailed:`Xuất thất bại`,setSaved:`Đã lưu bộ đánh giá`,runStarted:`Đã bắt đầu chạy đánh giá`,pickModel:`Chọn mô hình`,tabs:{arena:`Đấu trường`,leaderboard:`Bảng xếp hạng`,sets:`Bộ đánh giá`,feedback:`Phản hồi`},arenaModelA:`Mô hình A`,arenaModelB:`Mô hình B`,arenaPrompt:`Hỏi cả hai mô hình cùng một câu hỏi…`,startMatch:`Bắt đầu trận đấu`,arenaHint:`Danh tính mô hình được ẩn cho đến khi bạn bình chọn.`,candidate:`Câu trả lời {{letter}}`,voteFirst:`Câu đầu tốt hơn`,voteSecond:`Câu sau tốt hơn`,voteTie:`Hòa`,voteBothBad:`Cả hai đều tệ`,model:`Mô hình`,rating:`Điểm`,record:`Thành tích`,votes:`Phiếu bầu`,noVotes:`Chưa có phiếu bầu — bắt đầu một trận đấu để xây dựng bảng xếp hạng.`,newSet:`Bộ đánh giá mới`,setName:`Tên bộ`,setPrompts:`Mỗi dòng một câu lệnh…`,saveSet:`Lưu bộ`,yourSets:`Bộ của bạn`,noSets:`Chưa có bộ đánh giá.`,itemCount:`{{total}} câu lệnh`,run:`Chạy`,deleteSet:`Xóa bộ`,cancelRun:`Hủy lượt chạy`,exportRun:`Xuất lượt chạy`,status:{queued:`Đang chờ`,running:`Đang chạy`,completed:`Hoàn thành`,failed:`Thất bại`,cancelled:`Đã hủy`},noFeedback:`Chưa có phản hồi — hãy đánh giá các câu trả lời để xây dựng tập dữ liệu.`,deleteSetConfirmTitle:`Xóa "{{name}}"?`,deleteSetConfirmDescription:`Bộ đánh giá và các prompt trong bộ sẽ bị xóa vĩnh viễn.`,deleteSetFailed:`Không thể xóa bộ đánh giá`,runError:`Lỗi: {{detail}}`,cancelFailed:`Không thể hủy lần chạy`},passwordStrength:{levels:{weak:`Yếu`,fair:`Trung bình`,good:`Tốt`,strong:`Mạnh`},checks:{minLength:`Ít nhất 12 ký tự`,hasCase:`Chữ hoa và chữ thường`,hasNumber:`Ít nhất một chữ số`,tooLong:`Tối đa 72 byte`},requirements:`Dùng ít nhất 12 ký tự, tối đa 72 byte UTF-8, gồm chữ hoa, chữ thường và một chữ số.`,errors:{minLength:`Mật khẩu phải có ít nhất 12 ký tự.`,tooLong:`Mật khẩu không được quá 72 byte UTF-8.`,uppercase:`Mật khẩu phải có một chữ hoa.`,lowercase:`Mật khẩu phải có một chữ thường.`,number:`Mật khẩu phải có một chữ số.`}},connectModels:{adminOnly:`Hãy nhờ quản trị viên kết nối một nhà cung cấp mô hình.`,skip:`Bỏ qua lúc này — tôi sẽ kết nối mô hình sau`,ollama:{status:{checking:`Đang kiểm tra khả dụng…`,healthy:`Đang chạy và sẵn sàng cho các mô hình cục bộ`,offline:`Không phát hiện trên máy này`,disabled:`Đã tắt — sẽ không có kiểm tra nào chạy`},recheck:`Kiểm tra lại`,enable:`Bật`,disable:`Ngừng kiểm tra Ollama`,enabledToast:`Đã bật nhà cung cấp Ollama`,disabledToast:`Đã tắt kiểm tra Ollama — bạn có thể bật lại trong Cài đặt`,settingsFailed:`Không thể cập nhật cài đặt Ollama`,offlineHint:`Cài đặt Ollama từ ollama.com và nó sẽ được tự động phát hiện — hoặc dùng một trong các tùy chọn bên dưới. Nếu bạn không định dùng Ollama, bạn có thể tắt các kiểm tra của nó.`,healthyHint:`Ollama đã kết nối. Hãy tải một mô hình từ trang Mô hình và bạn đã sẵn sàng trò chuyện.`},local:{title:`Máy chủ cục bộ`,subtitle:`llama.cpp, vLLM, llama-swap, LM Studio, mlx-lm`,keyPlaceholder:`Khóa API (tùy chọn)`,test:`Kiểm tra kết nối`,testing:`Đang kiểm tra…`,reachable:`Đã kết nối — tìm thấy {{count}} mô hình`,unreachable:`Không có API mô hình nào phản hồi tại địa chỉ đó`,noModels:`Điểm cuối đã phản hồi nhưng không liệt kê mô hình nào. Hãy tải một mô hình trên máy chủ của bạn rồi thử lại.`,enable:`Bật nhà cung cấp`,enabling:`Đang bật…`,enabled:`{{name}} đã kết nối — các mô hình của nó hiện đã khả dụng`,enableFailed:`Không thể bật nhà cung cấp`,urlLabel:`URL máy chủ`},cloud:{title:`API đám mây`,subtitle:`OpenAI, Anthropic, Groq, OpenRouter và nhiều hơn nữa`,keyPlaceholder:`Dán khóa API {{name}} của bạn`,connect:`Kết nối`,connecting:`Đang kết nối…`,connected:`{{name}} đã kết nối — các mô hình của nó hiện đã khả dụng`,saveFailed:`Không thể lưu khóa API`,keyLabel:`Khóa API {{name}}`}},strands:{title:`Strands`,subtitle:`Công cụ tác tử tích hợp chạy trên các mô hình Libre WebUI của bạn.`,subtitleVersion:`Công cụ tác tử tích hợp, harness {{version}}.`,newSession:`Phiên mới`,sessions:`Phiên`,noSessions:`Chưa có phiên nào. Hãy tạo một phiên để bắt đầu.`,empty:`Yêu cầu tác tử đọc hoặc chỉnh sửa tệp trong không gian làm việc của nó.`,placeholder:`Yêu cầu công cụ làm điều gì đó…`,model:`Mô hình`,defaultModel:`Mô hình mặc định`,send:`Gửi`,stop:`Dừng`,reasoning:`Lý luận`,tool:{running:`Đang chạy`,done:`Xong`,failed:`thất bại`},cancelled:`Đã hủy`,turnLimit:`Đã dừng khi đạt giới hạn lượt.`,messageCount:`Tin nhắn: {{count}}`,deleteSession:`Xóa phiên`,deleteConfirm:`Xóa "{{title}}" và lịch sử của nó?`,loadFailed:`Không thể tải Strands.`,createFailed:`Không thể tạo phiên.`,deleteFailed:`Không thể xóa phiên.`,saveFailed:`Không thể lưu phiên.`,turnFailed:`Công cụ không thể hoàn tất lượt`},notFound:{title:`Không tìm thấy trang`,description:`Trang này không tồn tại hoặc có thể đã được di chuyển.`},themeToggle:{switchToLight:`Chuyển sang chế độ sáng`,switchToDark:`Chuyển sang chế độ tối`,switchToAmoled:`Chuyển sang chế độ đen thuần`,switchToCelestial:`Chuyển sang chế độ thiên thể`}};export{e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e={idle:{labelKey:`work.statusLabels.idle`,label:`Idle`,color:`rgb(255, 255, 255)`,animated:!1},preparing:{labelKey:`work.statusLabels.thinking`,label:`Thinking`,color:`rgb(48, 121, 255)`,animated:!0},running:{labelKey:`work.statusLabels.thinking`,label:`Thinking`,color:`rgb(48, 121, 255)`,animated:!0},completed:{labelKey:`work.statusLabels.complete`,label:`Complete`,color:`rgb(76, 212, 117)`,animated:!1},needs_input:{labelKey:`work.statusLabels.needsInput`,label:`Needs input`,color:`rgb(255, 204, 0)`,animated:!1},cancelled:{labelKey:`work.statusLabels.needsInput`,label:`Needs input`,color:`rgb(255, 204, 0)`,animated:!1},failed:{labelKey:`work.statusLabels.error`,label:`Error`,color:`rgb(255, 61, 129)`,animated:!1}},t=e=>e===`completed`||e===`failed`||e===`cancelled`,n=e=>e.status===`preparing`||e.status===`running`,
|
|
1
|
+
var e={idle:{labelKey:`work.statusLabels.idle`,label:`Idle`,color:`rgb(255, 255, 255)`,animated:!1},preparing:{labelKey:`work.statusLabels.thinking`,label:`Thinking`,color:`rgb(48, 121, 255)`,animated:!0},running:{labelKey:`work.statusLabels.thinking`,label:`Thinking`,color:`rgb(48, 121, 255)`,animated:!0},completed:{labelKey:`work.statusLabels.complete`,label:`Complete`,color:`rgb(76, 212, 117)`,animated:!1},needs_input:{labelKey:`work.statusLabels.needsInput`,label:`Needs input`,color:`rgb(255, 204, 0)`,animated:!1},cancelled:{labelKey:`work.statusLabels.needsInput`,label:`Needs input`,color:`rgb(255, 204, 0)`,animated:!1},failed:{labelKey:`work.statusLabels.error`,label:`Error`,color:`rgb(255, 61, 129)`,animated:!1}},t=e=>e===`completed`||e===`failed`||e===`cancelled`,n=t=>Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0,r=e=>e.status===`preparing`||e.status===`running`,i=e=>{let t=encodeURIComponent(e.model);return e.providerType===`plugin`?`plugin:${encodeURIComponent(e.providerId||``)}:${t}`:`ollama:${t}`};export{e as a,t as i,i as n,n as r,r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./work-
|
|
1
|
+
import{n as e}from"./work-C7MYlv5S.js";var t=`strands:`,n=[`dsh:`],r=e=>e.startsWith(t)?t:n.find(t=>e.startsWith(t)),i=(e,t)=>r(e)?`strands`:`libre`,a=(e,t)=>{let n=r(e);return n?e.slice(n.length):e},o=(e,t)=>!0,s=(n,r)=>{let i={...n,model:`${r===`strands`?t:``}${a(n.model)}`};return{...i,key:e(i)}};function c(e){return e.length>0&&e===e.trim()&&![...e].some(e=>e.charCodeAt(0)<32||e.charCodeAt(0)===127)}function l(e){let t=e.toLowerCase();return c(e)&&![`persona:`,`agent:`,`lwui:`].some(e=>t.startsWith(e))&&![`strands`,`dsh`,`claude-code`,`codex`,`opencode`,`pi`].some(e=>t===e||t.startsWith(`${e}:`))}function u(t,n){if(t.providerType!==`agent`||t.providerId!==`strands`)return;let r=t.model.split(`:`);if(r[0]!==`strands`)return;let i,a,o;try{if(r[1]===`ollama`&&r.length===3)a=`ollama`,i=decodeURIComponent(r[2]);else if(r[1]===`plugin`&&r.length===4){if(a=`plugin`,o=decodeURIComponent(r[2]),i=decodeURIComponent(r[3]),!c(o))return}else return}catch{return}if(!l(i))return;let u={model:i,providerType:a,...o?{providerId:o}:{}},d=e(u),f=n.find(e=>e.key===d);return{option:s(f??{...u,key:d,label:o?`${i} · ${o}`:i,remote:a!==`ollama`||/(?::cloud|-cloud)$/i.test(i)},`strands`),available:f!==void 0}}var d=e=>e===`preparing`||e===`running`;function f(e,t){if(!d(e)||d(t))return null;switch(t){case`completed`:return{key:`work.announce.completed`,politeness:`polite`};case`needs_input`:return{key:`work.announce.needsInput`,politeness:`assertive`};case`failed`:return{key:`work.announce.failed`,politeness:`assertive`};case`cancelled`:return{key:`work.announce.cancelled`,politeness:`polite`};default:return null}}function p(e,t,n){let r=new Map,i=[];for(let a of t){r.set(a.id,a.status);let t=e.get(a.id);if(t===void 0||a.id===n)continue;let o=f(t,a.status);o&&i.push({...o,taskId:a.id,title:a.title})}return{announcements:i,statuses:r}}var m=e=>e.some(e=>d(e.status));export{s as a,o as c,a as i,m as n,i as o,f as r,u as s,p as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./workApi-Ck8nTlJn.js";export{e as workApi};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./config-
|
|
1
|
+
import{t as e}from"./config-Da1yh9sC.js";import{t}from"./client-jaxZzn-I.js";var n=new Set([`snapshot`,`run_state`,`reasoning_delta`,`assistant_delta`,`tool_call`,`tool_result`,`approval`,`usage`,`skill_loaded`,`error`,`done`]),r=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,i=e=>{if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return t;let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()},a=(e,t,a,o,s)=>{let c=r(e);if(!c)return;let l=Number(c.id??t),u=String(c.type??a??``),d=String(c.taskId??o),f=String(c.runId??s);if(!Number.isSafeInteger(l)||l<0||!n.has(u)||d!==o||f!==s)return;let p=c.data;return{id:l,type:u,taskId:d,runId:f,timestamp:i(c.timestamp),data:r(p)||(p===void 0?{}:{content:p})}},o=(e,t,n)=>{let r,i,o=[];for(let t of e.split(`
|
|
2
2
|
`)){if(!t||t.startsWith(`:`))continue;let e=t.indexOf(`:`),n=e===-1?t:t.slice(0,e),a=e===-1?``:t.slice(e+1),s=a.startsWith(` `)?a.slice(1):a;n===`id`&&(r=s),n===`event`&&(i=s),n===`data`&&o.push(s)}if(o.length===0)return;let s=o.join(`
|
|
3
3
|
`);if(s===`[DONE]`)return a({id:r,type:`done`,taskId:t,runId:n,timestamp:Date.now(),data:{}},r,i,t,n);try{return a(JSON.parse(s),r,i,t,n)}catch{return}},s=class{taskId;runId;onEvent;buffer=``;constructor(e,t,n){this.taskId=e,this.runId=t,this.onEvent=n}push(e){e&&(this.buffer+=e,this.drain())}finish(e=``){if(this.buffer+=e,this.drain(),!this.buffer.trim()){this.buffer=``;return}let t=o(this.buffer.replace(/\r\n?/g,`
|
|
4
4
|
`),this.taskId,this.runId);this.buffer=``,t&&this.onEvent(t)}drain(){let e=/\r?\n\r?\n/.exec(this.buffer);for(;e?.index!==void 0;){let t=this.buffer.slice(0,e.index).replace(/\r\n?/g,`
|