diff --git a/static/locales/vi/translation.json b/static/locales/vi/translation.json new file mode 100644 index 00000000..4f14cf95 --- /dev/null +++ b/static/locales/vi/translation.json @@ -0,0 +1,1139 @@ +{ + "title": { + "setup": "Thiết lập ban đầu", + "login": "Đăng nhập", + "share_login": "Đăng nhập chia sẻ", + "profile": "Hồ sơ", + "change_password": "Thay đổi mật khẩu", + "files": "Tệp tin", + "shares": "Chia sẻ", + "add_share": "Thêm chia sẻ", + "update_share": "Cập nhật chia sẻ", + "two_factor_auth": "Xác thực hai yếu tố", + "two_factor_auth_short": "2FA", + "edit_file": "Chỉnh sửa tệp tin", + "view_file": "Xem tệp tin", + "recovery_password": "Khôi phục mật khẩu", + "reset_password": "Đặt lại mật khẩu", + "shared_files": "Tệp tin được chia sẻ", + "upload_to_share": "Tải lên chia sẻ", + "download_shared_file": "Tải xuống tệp tin được chia sẻ", + "share_access_error": "Không thể truy cập chia sẻ", + "invalid_auth_request": "Yêu cầu xác thực không hợp lệ", + "error400": "Yêu cầu không hợp lệ", + "error403": "Bị cấm", + "error404": "Không tìm thấy", + "error416": "Phạm vi yêu cầu không hợp lệ", + "error429": "Yêu cầu quá nhiều", + "error500": "Lỗi nội bộ máy chủ", + "errorPDF": "Không thể hiển thị tệp PDF", + "error_editor": "Không thể mở trình chỉnh sửa tệp", + "users": "Người dùng", + "groups": "Nhóm", + "folders": "Thư mục ảo", + "connections": "Kết nối đang hoạt động", + "event_manager": "Quản lý sự kiện", + "event_rules": "Quy tắc", + "event_actions": "Hành động", + "ip_manager": "Quản lý IP", + "ip_lists": "Danh sách IP", + "defender": "Danh sách tự động chặn", + "admins": "Quản trị viên", + "roles": "Vai trò", + "server_manager": "Quản lý máy chủ", + "configs": "Cấu hình", + "logs": "Nhật ký", + "maintenance": "Bảo trì", + "status": "Trạng thái", + "add_user": "Thêm người dùng", + "update_user": "Cập nhật người dùng", + "template_user": "Mẫu người dùng", + "template_admin": "Mẫu quản trị viên", + "add_group": "Thêm nhóm", + "update_group": "Cập nhật nhóm", + "add_folder": "Thêm thư mục ảo", + "update_folder": "Cập nhật thư mục ảo", + "template_folder": "Mẫu thư mục ảo", + "oauth2_error": "Không thể hoàn thành quy trình OAuth2", + "oauth2_success": "Quy trình OAuth2 đã hoàn thành", + "add_role": "Thêm vai trò", + "update_role": "Cập nhật vai trò", + "add_admin": "Thêm quản trị viên", + "update_admin": "Cập nhật quản trị viên", + "add_ip_list": "Thêm mục danh sách IP", + "update_ip_list": "Cập nhật mục danh sách IP", + "add_action": "Thêm hành động", + "update_action": "Cập nhật hành động", + "add_rule": "Thêm quy tắc", + "update_rule": "Cập nhật quy tắc" + }, + "setup": { + "desc": "Để bắt đầu sử dụng SFTPGo, bạn cần tạo một tài khoản quản trị viên", + "submit": "Tạo quản trị viên và Đăng nhập", + "install_code_mismatch": "Mã cài đặt không khớp", + "help_text": "SFTPGo cần sự hỗ trợ của bạn" + }, + "login": { + "username": "Tên người dùng", + "password": "Mật khẩu", + "your_username": "Tên người dùng của bạn", + "forgot_password": "Quên mật khẩu?", + "forgot_password_msg": "Nhập tên người dùng của bạn bên dưới, bạn sẽ nhận được mã đặt lại mật khẩu qua email.", + "send_reset_code": "Gửi mã đặt lại", + "signin": "Đăng nhập", + "signin_openid": "Đăng nhập bằng OpenID", + "signout": "Đăng xuất", + "auth_code": "Mã xác thực", + "two_factor_help": "Mở ứng dụng xác thực hai yếu tố trên thiết bị của bạn để xem mã xác thực và xác minh danh tính của bạn.", + "two_factor_msg": "Nhập mã khôi phục xác thực hai yếu tố", + "recovery_code": "Mã khôi phục", + "recovery_code_msg": "Bạn có thể nhập một trong các mã khôi phục của mình trong trường hợp bạn mất quyền truy cập vào thiết bị di động.", + "reset_password": "Đặt lại mật khẩu", + "reset_pwd_msg": "Kiểm tra email của bạn để nhận mã xác nhận", + "reset_submit": "Cập nhật mật khẩu và Đăng nhập", + "confirm_code": "Mã xác nhận", + "reset_pwd_forbidden": "Bạn không được phép đặt lại mật khẩu", + "reset_pwd_no_email": "Tài khoản của bạn không có địa chỉ email, không thể đặt lại mật khẩu qua email", + "reset_pwd_send_email_err": "Không thể gửi mã xác nhận qua email", + "reset_pwd_err_generic": "Lỗi không mong muốn khi đặt lại mật khẩu", + "reset_ok_login_error": "Đặt lại mật khẩu thành công nhưng đã xảy ra lỗi không mong muốn khi đăng nhập", + "ip_not_allowed": "Không được phép đăng nhập từ địa chỉ IP này", + "two_factor_required": "Thiết lập xác thực hai yếu tố, nó được yêu cầu cho các giao thức sau: {{val}}", + "two_factor_required_generic": "Thiết lập xác thực hai yếu tố, nó là bắt buộc cho tài khoản của bạn", + "link": "Đi đến {{link}}" + }, + "theme": { + "light": "Sáng", + "dark": "Tối", + "system": "Tự động" + }, + "general": { + "invalid_auth_request": "Yêu cầu xác thực không đáp ứng các yêu cầu bảo mật", + "error400": "Yêu cầu nhận được không hợp lệ", + "error403": "Bạn không có quyền truy cập", + "error404": "Không tìm thấy tài nguyên yêu cầu", + "error416": "Không thể trả về phần tệp tin được yêu cầu", + "error429": "Vượt quá giới hạn tốc độ", + "error500": "Máy chủ gặp lỗi nội bộ", + "errorPDF": "Tệp này không giống như một tệp PDF", + "error_edit_dir": "Không thể chỉnh sửa thư mục", + "error_edit_size": "Kích thước tệp vượt quá kích thước tối đa cho phép", + "invalid_form": "Biểu mẫu không hợp lệ", + "invalid_credentials": "Thông tin đăng nhập không hợp lệ, vui lòng thử lại", + "invalid_csrf": "Mã token của biểu mẫu không hợp lệ", + "invalid_token": "Quyền không hợp lệ", + "confirm_logout": "Bạn có chắc chắn muốn đăng xuất không?", + "wait": "Vui lòng đợi...", + "ok": "Đồng ý", + "failed": "Thất bại", + "cancel": "Hủy bỏ", + "submit": "Lưu", + "back": "Quay lại", + "add": "Thêm", + "enable": "Bật", + "disable": "Tắt", + "disable_confirm_btn": "Có, tắt", + "close": "Đóng", + "search": "Tìm kiếm", + "configuration": "Cấu hình", + "config_saved": "Cấu hình đã được lưu", + "rename": "Đổi tên", + "confirm": "Có, tiếp tục", + "edit": "Chỉnh sửa", + "delete": "Xóa", + "delete_confirm_btn": "Có, xóa", + "delete_confirm": "Bạn có muốn xóa \"{{- name}}\" không? Hành động này không thể hoàn tác", + "delete_confirm_generic": "Bạn có muốn xóa mục đã chọn không? Hành động này không thể hoàn tác", + "delete_multi_confirm": "Bạn có muốn xóa các mục đã chọn không? Hành động này không thể hoàn tác", + "delete_error_generic": "Không thể xóa mục đã chọn", + "delete_error_403": "$t(general.delete_error_generic). $t(general.error403)", + "delete_error_404": "$t(general.delete_error_generic). $t(general.error404)", + "loading": "Đang tải...", + "name": "Tên", + "size": "Kích thước", + "last_modified": "Sửa đổi lần cuối", + "info": "Thông tin", + "datetime": "{{- val, datetime}}", + "selected_items_one": "{{count}} mục đã chọn", + "selected_items_other": "{{count}} mục đã chọn", + "name_required": "Tên là bắt buộc", + "name_different": "Tên mới phải khác với tên hiện tại", + "html5_media_not_supported": "Trình duyệt của bạn không hỗ trợ âm thanh/video HTML5.", + "choose_target_folder": "Chọn thư mục đích", + "source_name": "Tên nguồn", + "target_folder": "Thư mục đích", + "dest_name": "Tên đích", + "my_profile": "Hồ sơ của tôi", + "description": "Mô tả", + "email": "Email", + "api_key_auth": "Xác thực khóa API", + "api_key_auth_help": "Cho phép mạo danh chính bạn trong REST API bằng khóa API", + "pub_keys": "Khóa công khai", + "pub_key_placeholder": "Dán khóa công khai vào đây", + "pub_keys_help": "Khóa công khai có thể được sử dụng cho xác thực SFTP", + "verify": "Xác minh", + "problems": "Gặp vấn đề?", + "allowed_ip_mask": "IP/Mask được phép", + "denied_ip_mask": "IP/Mask bị từ chối", + "ip_mask_help": "IP/Mask phân cách bằng dấu phẩy theo định dạng CIDR, ví dụ \"192.168.1.0/24,10.8.0.100/32\"", + "allowed_ip_mask_invalid": "IP/Mask được phép không hợp lệ", + "username_required": "Tên người dùng là bắt buộc", + "password_required": "Mật khẩu là bắt buộc", + "foldername_required": "Tên thư mục là bắt buộc", + "err_user": "Không thể xác thực người dùng của bạn", + "err_protocol_forbidden": "Giao thức HTTP không được phép cho người dùng của bạn", + "pwd_login_forbidden": "Phương thức đăng nhập bằng mật khẩu không được phép cho người dùng của bạn", + "ip_forbidden": "Không được phép đăng nhập từ địa chỉ IP này", + "email_invalid": "Địa chỉ email không hợp lệ", + "err_password_complexity": "Mật khẩu được cung cấp không đáp ứng các yêu cầu về độ phức tạp", + "no_oidc_feature": "Tính năng này không khả dụng nếu bạn đăng nhập bằng OpenID", + "connection_forbidden": "Bạn không được phép kết nối", + "no_permissions": "Bạn không được phép thay đổi bất cứ điều gì", + "path_invalid": "Đường dẫn không hợp lệ", + "err_quota_read": "Đọc bị từ chối do giới hạn hạn ngạch", + "profile_updated": "Hồ sơ của bạn đã được cập nhật thành công", + "share_ok": "Truy cập chia sẻ thành công, bây giờ bạn có thể sử dụng liên kết của mình", + "qr_code": "Mã QR", + "copy_link": "Sao chép liên kết", + "copied": "Đã sao chép", + "active": "Hoạt động", + "inactive": "Không hoạt động", + "colvis": "Hiển thị cột", + "actions": "Hành động", + "template": "Sử dụng làm mẫu", + "quota_scan": "Quét hạn ngạch", + "quota_scan_started": "Quét hạn ngạch đã bắt đầu. Có thể mất một thời gian tùy thuộc vào số lượng tệp cần kiểm tra", + "quota_scan_conflit": "Một quá trình quét khác đang diễn ra", + "quota_scan_error": "Không thể bắt đầu quét hạn ngạch", + "role": "Vai trò", + "role_placeholder": "Chọn một vai trò", + "group_placeholder": "Chọn một nhóm", + "folder_placeholder": "Chọn một thư mục", + "blank_default_help": "Để trống cho mặc định", + "skip_tls_verify": "Bỏ qua xác minh TLS. Điều này chỉ nên được sử dụng cho mục đích kiểm tra", + "advanced_settings": "Cài đặt nâng cao", + "default": "Mặc định", + "private_key": "Khóa riêng tư", + "acls": "ACLs", + "quota_limits": "Hạn ngạch đĩa và giới hạn băng thông", + "expiration": "Hết hạn", + "expiration_help": "Chọn ngày hết hạn", + "additional_info": "Thông tin bổ sung", + "permissions": "Quyền", + "visible": "Hiển thị", + "hidden": "Ẩn", + "allowed": "Cho phép", + "denied": "Từ chối", + "zero_no_limit_help": "0 nghĩa là không giới hạn", + "global_settings": "Cài đặt toàn cục", + "mandatory_encryption": "Mã hóa bắt buộc", + "name_invalid": "Tên được chỉ định không hợp lệ, các ký tự sau được cho phép: a-zA-Z0-9-_.~", + "associations": "Liên kết", + "template_placeholders": "Các placeholder sau được hỗ trợ", + "duplicated_username": "Tên người dùng đã tồn tại", + "duplicated_name": "Tên đã tồn tại", + "permissions_required": "Quyền là bắt buộc", + "configs_saved": "Cấu hình đã được cập nhật thành công", + "protocol": "Giao thức", + "refresh": "Làm mới", + "members": "Thành viên", + "members_summary": "Người dùng: {{users}}. Quản trị viên: {{admins}}", + "status": "Trạng thái", + "last_login": "Đăng nhập lần cuối", + "previous": "Trước", + "next": "Tiếp", + "type": "Loại", + "issuer": "Nhà phát hành", + "data_provider": "Cơ sở dữ liệu", + "driver": "Trình điều khiển", + "mode": "Chế độ", + "port": "Cổng", + "domain": "Tên miền", + "test": "Kiểm tra", + "get": "Lấy", + "export": "Xuất", + "value": "Giá trị", + "method": "Phương thức", + "timeout": "Thời gian chờ", + "env_vars": "Biến môi trường", + "hours": "Giờ", + "paths": "Đường dẫn", + "hour": "Giờ", + "day_of_week": "Ngày trong tuần", + "day_of_month": "Ngày trong tháng", + "month": "Tháng", + "options": "Tùy chọn", + "expired": "Đã hết hạn", + "unsupported": "Tính năng không còn được hỗ trợ", + "start": "Bắt đầu (HH:MM)", + "end": "Kết thúc (HH:MM)", + "monday": "Thứ Hai", + "tuesday": "Thứ Ba", + "wednesday": "Thứ Tư", + "thursday": "Thứ Năm", + "friday": "Thứ Sáu", + "saturday": "Thứ Bảy", + "sunday": "Chủ Nhật", + "expired_session": "Phiên của bạn đã hết hạn. Vui lòng đăng nhập lại" + }, + "fs": { + "view_file": "Xem tệp \"{{- path}}\"", + "edit_file": "Chỉnh sửa tệp \"{{- path}}\"", + "new_folder": "Tạo thư mục mới", + "select_across_pages": "Chọn qua nhiều trang", + "download": "Tải xuống", + "download_ready": "Tệp tải xuống của bạn đã sẵn sàng", + "upload_queue_not_ready": "Hàng đợi tải lên vẫn đang xử lý, vui lòng thử lại sau vài giây", + "move_copy": "Di chuyển hoặc sao chép", + "share": "Chia sẻ", + "home": "Trang chủ", + "create_folder_msg": "Tên thư mục", + "no_more_subfolders": "Không còn thư mục con nào ở đây", + "no_files_folders": "Không có tệp hoặc thư mục", + "invalid_name": "Tên tệp hoặc thư mục không thể chứa \"/\"", + "folder_name_required": "Tên thư mục là bắt buộc", + "deleting": "Xóa {{idx}}/{{total}}", + "copying": "Sao chép {{idx}}/{{total}}", + "moving": "Di chuyển {{idx}}/{{total}}", + "uploading": "Tải lên {{idx}}/{{total}}", + "err_403": "Quyền bị từ chối", + "err_429": "Quá nhiều yêu cầu đồng thời", + "err_generic": "Không thể truy cập tài nguyên được yêu cầu", + "err_validation": "Cấu hình hệ thống tệp không hợp lệ", + "err_exists": "Đích đến đã tồn tại", + "dir_list": { + "err_generic": "Không thể lấy danh sách thư mục", + "err_403": "$t(fs.dir_list.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.dir_list.err_generic). $t(fs.err_429)", + "err_user": "$t(fs.dir_list.err_generic). $t(general.err_user)" + }, + "create_dir": { + "err_generic": "Lỗi khi tạo thư mục mới", + "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)" + }, + "save": { + "err_generic": "Lỗi khi lưu tệp", + "err_403": "$t(fs.create_dir.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.create_dir.err_generic). $t(fs.err_429)" + }, + "delete": { + "err_generic": "Không thể xóa \"{{- name}}\"", + "err_403": "$t(fs.delete.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.delete.err_generic). $t(fs.err_429)" + }, + "delete_multi": { + "err_generic_partial": "Không phải tất cả các mục đã chọn đều đã bị xóa, vui lòng tải lại trang", + "err_generic": "Không thể xóa các mục đã chọn", + "err_403_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_403)", + "err_429_partial": "$t(fs.delete_multi.err_generic_partial). $t(fs.err_429)", + "err_403": "$t(fs.delete_multi.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.delete_multi.err_generic). $t(fs.err_429)" + }, + "copy": { + "msg": "Sao chép", + "err_generic": "Lỗi khi sao chép tệp/thư mục", + "err_403": "$t(fs.copy.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.copy.err_generic). $t(fs.err_429)", + "err_exists": "$t(fs.copy.err_generic). $t(fs.err_exists)" + }, + "move": { + "msg": "Di chuyển", + "err_generic": "Lỗi khi di chuyển tệp/thư mục", + "err_403": "$t(fs.move.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.move.err_generic). $t(fs.err_429)", + "err_exists": "$t(fs.move.err_generic). $t(fs.err_exists)", + "err_unsupported": "Không được hỗ trợ: nếu bạn muốn di chuyển một thư mục, hãy đảm bảo nó trống" + }, + "rename": { + "title": "Đổi tên \"{{- name}}\"", + "new_name": "Tên mới", + "err_generic": "Không thể đổi tên \"{{- name}}\"", + "err_403": "$t(fs.rename.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.rename.err_generic). $t(fs.err_429)", + "err_exists": "$t(fs.rename.err_generic). $t(fs.err_exists)", + "err_unsupported": "Không được hỗ trợ: nếu bạn muốn đổi tên một thư mục, hãy đảm bảo nó trống" + }, + "upload": { + "text": "Tải lên tệp", + "success": "Tệp đã được tải lên thành công", + "message": "Kéo tệp vào đây hoặc nhấp để tải lên.", + "message_empty": "Thư mục này trống. $t(fs.upload.message)", + "err_generic": "Lỗi khi tải lên tệp", + "err_403": "$t(fs.upload.err_generic). $t(fs.err_403)", + "err_429": "$t(fs.upload.err_generic). $t(fs.err_429)", + "err_dir_overwrite": "$t(fs.upload.err_generic). Có các thư mục có cùng tên với các tệp: {{- val}}", + "overwrite_text": "Phát hiện xung đột. Bạn có muốn ghi đè lên các tệp/thư mục sau không?" + }, + "quota_usage": { + "title": "Sử dụng hạn ngạch", + "disk": "Hạn ngạch đĩa", + "size": "Kích thước: {{- val}}", + "size_percentage": "Kích thước: {{- val}} ({{percentage}}%)", + "files": "Tệp: {{- val}}", + "files_percentage": "Tệp: {{- val}} ({{percentage}}%)", + "transfer": "Hạn ngạch truyền tải", + "total": "Tổng: {{- val}}", + "total_percentage": "Tổng: {{- val}} ({{percentage}}%)", + "uploads": "Tải lên: {{- val}}", + "uploads_percentage": "Tải lên: {{- val}} ({{percentage}}%)", + "downloads": "Tải xuống: {{- val}}", + "downloads_percentage": "Tải xuống: {{- val}} ({{percentage}}%)" + } + }, + "datatable": { + "info": "Hiển thị từ _START_ đến _END_ của _TOTAL_ bản ghi", + "info_empty": "Không có bản ghi nào để hiển thị", + "info_filtered": "(lọc từ _MAX_ tổng số bản ghi)", + "processing": "Đang xử lý...", + "no_records": "Không tìm thấy bản ghi nào" + }, + "editor": { + "keybinding": "Phím tắt trình soạn thảo", + "search": "Mở bảng tìm kiếm", + "goto": "Chuyển đến dòng", + "indent_more": "Thụt lề nhiều hơn", + "indent_less": "Thụt lề ít hơn" + }, + "2fa": { + "title": "Xác thực hai yếu tố sử dụng ứng dụng Authenticator", + "msg_enabled": "Xác thực hai yếu tố đã được bật", + "msg_disabled": "Bảo vệ tài khoản của bạn", + "msg_info": "Xác thực hai yếu tố thêm một lớp bảo mật cho tài khoản của bạn. Để đăng nhập, bạn sẽ cần cung cấp mã xác thực bổ sung.", + "require": "Xác thực hai yếu tố là bắt buộc cho tài khoản này", + "require_for": "Yêu cầu 2FA cho", + "generate": "Tạo khóa bí mật mới", + "recovery_codes": "Mã khôi phục", + "new_recovery_codes": "Mã khôi phục mới", + "recovery_codes_msg1": "Mã khôi phục là mã dự phòng dùng một lần để đăng nhập khi bạn không thể truy cập ứng dụng xác thực. Sử dụng chúng để truy cập tài khoản và quản lý cài đặt xác thực hai yếu tố nếu bạn mất điện thoại.", + "recovery_codes_msg2": "Để giữ an toàn cho tài khoản của bạn, đừng chia sẻ hoặc phân phối mã khôi phục. Chúng tôi khuyên bạn nên lưu chúng với trình quản lý mật khẩu an toàn.", + "recovery_codes_msg3": "Nếu bạn tạo mã khôi phục mới, bạn sẽ tự động vô hiệu hóa các mã cũ.", + "info_title": "Tìm hiểu về xác thực hai yếu tố", + "info1": "Giao thức SSH (SFTP/SCP/lệnh SSH) sẽ yêu cầu mã xác thực nếu máy khách sử dụng xác thực tương tác bàn phím.", + "info2": "Giao thức HTTP có nghĩa là giao diện Web và API REST. Giao diện Web sẽ yêu cầu mã xác thực bằng một trang cụ thể. Đối với API REST, bạn phải thêm mã xác thực bằng tiêu đề HTTP.", + "info3": "FTP không có cách tiêu chuẩn để hỗ trợ xác thực hai yếu tố, nếu bạn bật hỗ trợ FTP, bạn phải thêm mã xác thực TOTP sau mật khẩu. Ví dụ, nếu mật khẩu của bạn là \"password\" và mã xác thực một lần của bạn là \"123456\", bạn phải sử dụng \"password123456\" làm mật khẩu.", + "info4": "WebDAV không được hỗ trợ vì mỗi yêu cầu đơn lẻ phải được xác thực và mã xác thực không thể được sử dụng lại.", + "setup_title": "Thiết lập xác thực hai yếu tố", + "setup_msg": "Sử dụng Ứng dụng Authenticator ưa thích của bạn (ví dụ: Microsoft Authenticator, Google Authenticator, Authy, 1Password, v.v.) để quét mã QR. Nó sẽ tạo mã xác thực để bạn nhập bên dưới.", + "setup_help": "Nếu bạn gặp khó khăn khi sử dụng mã QR, hãy chọn nhập thủ công trên ứng dụng của bạn và nhập mã:", + "disable_msg": "Tắt 2FA", + "disable_confirm": "Bạn có muốn tắt xác thực hai yếu tố cho người dùng đã chọn không? Hành động này thường chỉ cần thiết nếu người dùng đã mất quyền truy cập vào yếu tố xác thực thứ hai", + "disable_question": "Bạn có muốn tắt xác thực hai yếu tố không?", + "generate_question": "Bạn có muốn tạo khóa bí mật mới và vô hiệu hóa khóa trước đó không? Bất kỳ Ứng dụng Authenticator đã đăng ký nào sẽ ngừng hoạt động", + "disabled": "Xác thực hai yếu tố đã bị tắt", + "recovery_codes_gen_err": "Không thể tạo mã khôi phục mới", + "recovery_codes_get_err": "Không thể lấy mã khôi phục", + "auth_code_invalid": "Không thể xác thực mã xác thực đã cung cấp", + "auth_secret_gen_err": "Không thể tạo bí mật xác thực", + "save_err": "Không thể lưu cấu hình xác thực hai yếu tố", + "auth_code_required": "Mã xác thực là bắt buộc", + "no_protocol": "Vui lòng chọn ít nhất một giao thức", + "required_protocols": "Chính sách bảo mật được cấu hình cho tài khoản của bạn yêu cầu xác thực hai yếu tố cho các giao thức sau: {{val}}", + "recovery_codes_generate": "Tạo mã khôi phục mới", + "recovery_codes_view": "Xem mã khôi phục" + }, + "share": { + "scope": "Phạm vi", + "scope_read": "Đọc", + "scope_write": "Ghi", + "scope_read_write": "Đọc/Ghi", + "scope_help": "Đối với phạm vi \"Ghi\" và \"Đọc/Ghi\", bạn phải xác định một đường dẫn duy nhất và nó phải là một thư mục", + "path_help": "đường dẫn tệp hoặc thư mục, ví dụ: /dir hoặc /dir/file.txt", + "password_help": "Nếu được đặt, chia sẻ sẽ được bảo vệ bằng mật khẩu", + "max_tokens": "Số lượt tối đa", + "max_tokens_help": "Số lần tối đa chia sẻ này có thể được truy cập. 0 có nghĩa là không giới hạn", + "view_manage": "Xem và quản lý chia sẻ", + "no_share": "Không có chia sẻ", + "password_protected": "Được bảo vệ bằng mật khẩu.", + "expiration_date": "Hết hạn: {{- val, datetime}}. ", + "last_use": "Sử dụng lần cuối: {{- val, datetime}}. ", + "usage": "Sử dụng: {{used}}/{{total}}. ", + "used_tokens": "Lượt đã sử dụng: {{used}}. ", + "scope_invalid": "Phạm vi không hợp lệ", + "max_tokens_invalid": "Số lượt tối đa không hợp lệ", + "expiration_invalid": "Thời gian hết hạn không hợp lệ", + "err_no_password": "Bạn không được phép chia sẻ tệp/thư mục mà không có mật khẩu", + "expiration_out_of_range": "Đặt ngày hết hạn và đảm bảo nó nhỏ hơn hoặc bằng {{- val, datetime}}", + "generic": "Lỗi không mong muốn khi lưu chia sẻ", + "path_required": "Cần ít nhất một đường dẫn", + "path_write_scope": "Phạm vi ghi yêu cầu chính xác một đường dẫn", + "nested_paths": "Đường dẫn không thể lồng nhau", + "expiration_past": "Ngày hết hạn phải là trong tương lai", + "usage_exceed": "Đã vượt quá giới hạn sử dụng chia sẻ tối đa", + "expired": "Chia sẻ đã hết hạn", + "browsable_multiple_paths": "Một chia sẻ với nhiều đường dẫn không thể duyệt được", + "browsable_non_dir": "Chia sẻ không phải là thư mục nên không thể duyệt được", + "go": "Đi đến chia sẻ", + "access_links_title": "Liên kết truy cập chia sẻ", + "link_single_title": "Tệp zip đơn", + "link_single_desc": "Bạn có thể tải xuống nội dung được chia sẻ dưới dạng một tệp zip duy nhất", + "link_dir_title": "Thư mục đơn", + "link_dir_desc": "Nếu chia sẻ bao gồm một thư mục duy nhất, bạn có thể duyệt và tải xuống các tệp", + "link_uncompressed_title": "Tệp không nén", + "link_uncompressed_desc": "Nếu chia sẻ bao gồm một tệp duy nhất, nó cũng có thể được tải xuống dưới dạng không nén", + "upload_desc": "Bạn có thể tải lên một hoặc nhiều tệp vào thư mục được chia sẻ", + "expired_desc": "Chia sẻ này không còn truy cập được vì đã hết hạn", + "invalid_path": "Thư mục được chia sẻ bị thiếu hoặc không thể truy cập" + }, + "select2": { + "no_results": "Không tìm thấy kết quả", + "searching": "Đang tìm kiếm...", + "removeall": "Xóa tất cả các mục", + "remove": "Xóa mục" + }, + "change_pwd": { + "info": "Nhập mật khẩu hiện tại của bạn, vì lý do bảo mật, và sau đó nhập mật khẩu mới hai lần, để xác minh rằng bạn đã viết đúng. Bạn sẽ bị đăng xuất sau khi thay đổi mật khẩu", + "current": "Mật khẩu hiện tại", + "new": "Mật khẩu mới", + "confirm": "Xác nhận mật khẩu", + "save": "Thay đổi mật khẩu của tôi", + "required_fields": "Vui lòng cung cấp mật khẩu hiện tại và mật khẩu mới hai lần", + "no_match": "Hai trường mật khẩu không khớp", + "no_different": "Mật khẩu mới phải khác với mật khẩu hiện tại", + "current_no_match": "Mật khẩu hiện tại không khớp", + "generic": "Lỗi không mong muốn khi thay đổi mật khẩu", + "required": "Yêu cầu thay đổi mật khẩu. Đặt mật khẩu mới để tiếp tục sử dụng tài khoản của bạn" + }, + "user": { + "view_manage": "Xem và quản lý người dùng", + "username_reserved": "Tên người dùng đã được đặt trước", + "username_invalid": "Tên người dùng không hợp lệ, các ký tự sau được cho phép: a-zA-Z0-9-_.~", + "home_required": "Thư mục chính là bắt buộc", + "home_invalid": "Thư mục chính phải là đường dẫn tuyệt đối", + "pub_key_invalid": "Khóa công khai không hợp lệ", + "priv_key_invalid": "Khóa riêng tư không hợp lệ", + "key_invalid_size": "Khóa công khai RSA không hợp lệ: kích thước tối thiểu được hỗ trợ là 2048", + "key_insecure": "Định dạng khóa công khai không an toàn không được phép", + "err_primary_group": "Chỉ cho phép một nhóm chính", + "err_duplicate_group": "Phát hiện nhóm trùng lặp", + "no_permissions": "Quyền thư mục là bắt buộc", + "no_root_permissions": "Quyền thư mục chính là bắt buộc", + "err_permissions_generic": "Quyền không hợp lệ: Đảm bảo bạn sử dụng đường dẫn tuyệt đối hợp lệ", + "2fa_invalid": "Cấu hình không hợp lệ cho xác thực hai yếu tố", + "recovery_codes_invalid": "Mã khôi phục không hợp lệ", + "folder_path_required": "Đường dẫn gắn kết thư mục ảo là bắt buộc", + "folder_duplicated": "Phát hiện thư mục ảo trùng lặp", + "folder_overlapped": "Phát hiện thư mục ảo chồng chéo", + "folder_quota_size_invalid": "Hạn ngạch kích thước của thư mục ảo phải lớn hơn hoặc bằng -1", + "folder_quota_file_invalid": "Hạn ngạch số lượng tệp của thư mục ảo phải lớn hơn hoặc bằng -1", + "folder_quota_invalid": "Hạn ngạch kích thước và số lượng tệp của thư mục ảo phải đều là -1 hoặc lớn hơn hoặc bằng 0", + "ip_filters_invalid": "Bộ lọc IP không hợp lệ, đảm bảo chúng tuân theo ký hiệu CIDR, ví dụ 192.168.1.0/24", + "src_bw_limits_invalid": "Giới hạn tốc độ băng thông theo nguồn không hợp lệ", + "share_expiration_invalid": "Thời gian hết hạn cho chia sẻ phải lớn hơn hoặc bằng giá trị mặc định đã định nghĩa", + "file_pattern_path_invalid": "Đường dẫn bộ lọc mẫu tên tệp phải là tuyệt đối", + "file_pattern_duplicated": "Phát hiện bộ lọc mẫu tên tệp trùng lặp", + "file_pattern_invalid": "Bộ lọc mẫu tên tệp không hợp lệ", + "disable_active_2fa": "Không thể tắt xác thực hai yếu tố cho người dùng có cấu hình đang hoạt động", + "pwd_change_conflict": "Không thể yêu cầu thay đổi mật khẩu và đồng thời ngăn mật khẩu được thay đổi", + "two_factor_conflict": "Bạn không thể yêu cầu xác thực hai yếu tố và đồng thời ngăn nó được thiết lập", + "role_help": "Người dùng có vai trò có thể được quản lý bởi quản trị viên toàn cục và quản trị viên có cùng vai trò", + "require_pwd_change": "Yêu cầu thay đổi mật khẩu", + "require_pwd_change_help": "Người dùng sẽ cần thay đổi mật khẩu từ WebClient để kích hoạt tài khoản", + "groups_help": "Tư cách thành viên nhóm mang lại cài đặt nhóm ngoại trừ các nhóm chỉ thành viên", + "primary_group": "Nhóm chính", + "secondary_groups": "Nhóm phụ", + "membership_groups": "Nhóm thành viên", + "template_help": "Đối với mỗi người dùng, hãy đặt tên người dùng và ít nhất một trong mật khẩu và khóa công khai", + "virtual_folders_help": "Hạn ngạch kích thước/tệp -1 có nghĩa là bao gồm trong hạn ngạch người dùng, 0 không giới hạn. Đừng đặt -1 cho thư mục được chia sẻ. Bạn có thể sử dụng hậu tố MB/GB/TB. Không có hậu tố, chúng tôi giả định byte", + "disconnect": "Ngắt kết nối người dùng sau khi cập nhật", + "disconnect_help": "Cách này bạn buộc người dùng phải đăng nhập lại, nếu đã kết nối, và do đó sử dụng cấu hình mới", + "invalid_quota_size": "Kích thước hạn ngạch không hợp lệ", + "expires_in": "Hết hạn trong", + "expires_in_help": "Hết hạn tài khoản tính theo số ngày từ khi tạo. 0 có nghĩa là không hết hạn", + "additional_emails": "Email bổ sung", + "tls_certs": "Chứng chỉ TLS", + "tls_certs_help": "Chứng chỉ TLS có thể được sử dụng cho xác thực FTP và/hoặc WebDAV", + "tls_cert_help": "Dán chứng chỉ TLS mã hóa PEM vào đây", + "tls_cert_invalid": "Chứng chỉ TLS không hợp lệ", + "template_title": "Tạo một hoặc nhiều người dùng mới từ mẫu này", + "template_username_placeholder": "thay thế bằng tên người dùng đã chỉ định", + "template_password_placeholder": "thay thế bằng mật khẩu đã chỉ định", + "template_help1": "Placeholder sẽ được thay thế trong đường dẫn và thông tin đăng nhập của backend lưu trữ đã cấu hình.", + "template_help2": "Người dùng được tạo có thể được lưu hoặc xuất. Người dùng được xuất có thể được nhập từ phần \"Bảo trì\" của phiên bản SFTPGo này hoặc phiên bản khác.", + "template_no_user": "Không có người dùng hợp lệ nào được định nghĩa, không thể hoàn thành hành động đã yêu cầu", + "time_of_day_invalid": "Thời gian trong ngày không hợp lệ. Định dạng được hỗ trợ HH:MM", + "time_of_day_conflict": "Thời gian trong ngày không hợp lệ. Thời gian kết thúc không thể sớm hơn thời gian bắt đầu" + }, + "group": { + "view_manage": "Xem và quản lý nhóm", + "err_delete_referenced": "Không thể xóa nhóm có người dùng liên kết, hãy xóa liên kết trước", + "help": "Placeholder %username% sẽ được thay thế bằng tên người dùng của người dùng liên kết, %role% bằng vai trò của họ" + }, + "virtual_folders": { + "view_manage": "Xem và quản lý thư mục ảo", + "mount_path": "đường dẫn gắn kết, ví dụ: /vfolder", + "quota_size": "Kích thước hạn ngạch", + "quota_size_help": "0 có nghĩa là không giới hạn. Bạn có thể sử dụng hậu tố MB/GB/TB", + "quota_files": "Hạn ngạch tệp", + "associations_summary": "Người dùng: {{users}}. Nhóm: {{groups}}", + "template_title": "Tạo một hoặc nhiều thư mục ảo mới từ mẫu này", + "template_name_placeholder": "thay thế bằng tên của thư mục ảo đã chỉ định", + "template_help": "Thư mục ảo được tạo có thể được lưu hoặc xuất. Thư mục được xuất có thể được nhập từ phần \"Bảo trì\" của phiên bản SFTPGo này hoặc phiên bản khác.", + "name": "Tên thư mục ảo", + "template_no_folder": "Không có thư mục ảo hợp lệ nào được định nghĩa, không thể hoàn thành hành động đã yêu cầu" + }, + "storage": { + "title": "Hệ thống tệp", + "label": "Lưu trữ", + "local": "Ổ đĩa cục bộ", + "s3": "S3 (Tương thích)", + "gcs": "GCS", + "azblob": "Azure Blob", + "encrypted": "Ổ đĩa cục bộ được mã hóa", + "sftp": "SFTP", + "http": "HTTP", + "home_dir": "Thư mục gốc", + "home_dir_placeholder": "Đường dẫn tuyệt đối đến thư mục trên đĩa cục bộ", + "home_dir_help1": "Để trống cho giá trị mặc định phù hợp", + "home_dir_help2": "Để trống và lưu trữ thành \"Đĩa cục bộ\" để không ghi đè thư mục gốc", + "home_dir_help3": "Bắt buộc cho nhà cung cấp lưu trữ đĩa cục bộ. Đối với các nhà cung cấp lưu trữ khác, thư mục này sẽ được sử dụng cho các tệp tạm thời, bạn có thể để trống cho giá trị mặc định phù hợp", + "home_dir_invalid": "Thư mục gốc không hợp lệ, đảm bảo nó là đường dẫn tuyệt đối", + "sftp_home_dir": "Thư mục gốc SFTP", + "sftp_home_help": "Hạn chế truy cập vào đường dẫn SFTP này. Ví dụ: \"/somedir/subdir\"", + "os_read_buffer": "Bộ đệm tải xuống (MB)", + "os_buffer_help": "0 có nghĩa là không có bộ đệm", + "os_write_buffer": "Bộ đệm tải lên (MB)", + "bucket": "Bucket", + "region": "Vùng", + "access_key": "Khóa truy cập", + "access_secret": "Bí mật truy cập", + "sse_customer_key": "Khóa mã hóa phía máy chủ", + "sse_customer_key_help": "Bạn có thể lưu trữ dữ liệu được mã hóa với khóa này, nhưng nếu bạn mất hoặc thay đổi khóa này, bạn sẽ mất tất cả các tệp được mã hóa với nó. Các tệp không được mã hóa hoặc được mã hóa bằng khóa khác sẽ không thể truy cập được", + "endpoint": "Endpoint", + "endpoint_help": "Đối với AWS S3, để trống để sử dụng endpoint mặc định cho vùng đã chỉ định", + "sftp_endpoint_help": "Endpoint dưới dạng host:port. Cổng luôn được yêu cầu", + "ul_part_size": "Kích thước phần tải lên (MB)", + "part_size_help": "0 có nghĩa là mặc định (5 MB). Tối thiểu là 5", + "gcs_part_size_help": "0 có nghĩa là mặc định (16 MB)", + "ul_concurrency": "Đồng thời tải lên", + "ul_concurrency_help": "Có bao nhiêu phần được tải lên song song. 0 có nghĩa là mặc định (5)", + "dl_part_size": "Kích thước phần tải xuống (MB)", + "dl_concurrency": "Đồng thời tải xuống", + "dl_concurrency_help": "Có bao nhiêu phần được tải xuống song song. 0 có nghĩa là mặc định (5)", + "ul_part_timeout": "Thời gian chờ phần tải lên", + "ul_part_timeout_help": "Giới hạn thời gian tối đa, tính bằng giây, để tải lên một phần. 0 có nghĩa là không giới hạn", + "gcs_ul_part_timeout_help": "Giới hạn thời gian tối đa, tính bằng giây, để tải lên một phần. 0 có nghĩa là mặc định (32)", + "dl_part_timeout": "Thời gian chờ phần tải xuống", + "dl_part_timeout_help": "Giới hạn thời gian tối đa, tính bằng giây, để tải xuống một phần. 0 có nghĩa là không giới hạn", + "key_prefix": "Tiền tố khóa", + "key_prefix_help": "Hạn chế truy cập vào các khóa có tiền tố đã chỉ định. Ví dụ: \"somedir/subdir/\"", + "class": "Lớp lưu trữ", + "acl": "ACL", + "role_arn": "Role ARN", + "role_arn_help": "IAM Role ARN tùy chọn để đảm nhận", + "s3_path_style": "Sử dụng địa chỉ kiểu đường dẫn, ví dụ: \"endpoint/BUCKET/KEY\"", + "credentials_file": "Tệp thông tin đăng nhập", + "credentials_file_help": "Thêm hoặc cập nhật thông tin đăng nhập từ tệp JSON", + "auto_credentials": "Thông tin đăng nhập tự động", + "auto_credentials_help": "Sử dụng thông tin đăng nhập ứng dụng mặc định hoặc thông tin đăng nhập từ biến môi trường", + "container": "Container", + "account_name": "Tên tài khoản", + "account_key": "Khóa tài khoản", + "sas_url": "URL SAS", + "sas_url_help": "URL Chữ ký truy cập chia sẻ có thể được sử dụng thay cho tên tài khoản/khóa", + "emulator": "Sử dụng giả lập", + "passphrase": "Cụm mật khẩu", + "passphrase_help": "Cụm mật khẩu được sử dụng để tạo khóa mã hóa cho từng đối tượng", + "passphrase_key_help": "Cụm mật khẩu được sử dụng để bảo vệ khóa riêng tư của bạn, nếu có", + "fingerprints": "Dấu vân tay", + "fingerprints_help": "Dấu vân tay SHA256 để xác thực khi kết nối với máy chủ SFTP bên ngoài, mỗi dòng một dấu vân tay. Nếu trống, bất kỳ khóa máy chủ nào sẽ được chấp nhận: đây là rủi ro bảo mật!", + "sftp_buffer": "Kích thước bộ đệm (MB)", + "sftp_buffer_help": "Kích thước bộ đệm lớn hơn 0 cho phép truyền tải đồng thời", + "sftp_concurrent_reads": "Tắt đọc đồng thời", + "relaxed_equality_check": "Kiểm tra bình đẳng nới lỏng", + "relaxed_equality_check_help": "Bật để chỉ xem xét endpoint để xác định xem các cấu hình khác nhau có trỏ đến cùng một máy chủ hay không. Theo mặc định, cả endpoint và tên người dùng đều phải khớp", + "api_key": "Khóa API", + "fs_error": "Lỗi cấu hình hệ thống tệp", + "bucket_required": "$t(storage.fs_error): bucket là bắt buộc", + "region_required": "$t(storage.fs_error): vùng là bắt buộc", + "key_prefix_invalid": "$t(storage.fs_error): tiền tố khóa không hợp lệ, không thể bắt đầu bằng \"/\"", + "ul_part_size_invalid": "$t(storage.fs_error): kích thước phần tải lên không hợp lệ", + "ul_concurrency_invalid": "$t(storage.fs_error): đồng thời tải lên không hợp lệ", + "dl_part_size_invalid": "$t(storage.fs_error): kích thước phần tải xuống không hợp lệ", + "dl_concurrency_invalid": "$t(storage.fs_error): đồng thời tải xuống không hợp lệ", + "access_key_required": "$t(storage.fs_error): khóa truy cập là bắt buộc", + "access_secret_required": "$t(storage.fs_error): bí mật truy cập là bắt buộc", + "credentials_required": "$t(storage.fs_error): thông tin đăng nhập là bắt buộc", + "container_required": "$t(storage.fs_error): container là bắt buộc", + "account_name_required": "$t(storage.fs_error): tên tài khoản là bắt buộc", + "sas_url_invalid": "$t(storage.fs_error): URL SAS không hợp lệ", + "passphrase_required": "$t(storage.fs_error): cụm mật khẩu là bắt buộc", + "endpoint_invalid": "$t(storage.fs_error): endpoint không hợp lệ", + "endpoint_required": "$t(storage.fs_error): endpoint là bắt buộc", + "username_required": "$t(storage.fs_error): tên người dùng là bắt buộc" + }, + "oidc": { + "token_expired": "Token OpenID của bạn đã hết hạn, vui lòng đăng nhập lại", + "token_invalid_webadmin": "Token OpenID của bạn không hợp lệ cho giao diện WebAdmin. Đăng xuất khỏi máy chủ OpenID của bạn và đăng nhập vào WebAdmin", + "token_invalid_webclient": "Token OpenID của bạn không hợp lệ cho giao diện WebClient. Đăng xuất khỏi máy chủ OpenID của bạn và đăng nhập vào WebClient", + "token_exchange_err": "Không thể trao đổi token OpenID", + "token_invalid": "Token OpenID không hợp lệ", + "role_admin_err": "Vai trò OpenID không chính xác, người dùng đã đăng nhập không phải là quản trị viên", + "role_user_err": "Vai trò OpenID không chính xác, người dùng đã đăng nhập là quản trị viên", + "get_user_err": "Không thể lấy người dùng liên kết với token OpenID" + }, + "oauth2": { + "auth_verify_error": "Không thể xác minh mã OAuth2", + "auth_validation_error": "Không thể xác minh mã OAuth2", + "auth_invalid": "Mã OAuth2 không hợp lệ", + "token_exchange_err": "Không thể lấy token OAuth2 từ mã ủy quyền", + "no_refresh_token": "Nhà cung cấp OAuth2 trả về token trống. Một số nhà cung cấp chỉ trả về token khi người dùng lần đầu ủy quyền. Nếu bạn đã đăng ký SFTPGo với người dùng này trong quá khứ, hãy thu hồi quyền truy cập và thử lại. Cách này sẽ vô hiệu hóa token trước đó", + "success": "Sao chép chuỗi sau, không có dấu ngoặc kép, vào trường cấu hình Token OAuth2 SMTP:", + "client_id_required": "ID khách hàng là bắt buộc", + "client_secret_required": "Bí mật khách hàng là bắt buộc", + "refresh_token_required": "Token làm mới là bắt buộc" + }, + "filters": { + "password_strength": "Độ mạnh mật khẩu", + "password_strength_help": "Giá trị trong khoảng 50-70 được đề xuất cho các trường hợp sử dụng thông thường. 0 có nghĩa là tắt, bất kỳ mật khẩu nào sẽ được chấp nhận", + "password_expiration": "Hết hạn mật khẩu", + "password_expiration_help": "Hết hạn mật khẩu tính theo số ngày. 0 có nghĩa là không hết hạn", + "default_shares_expiration": "Hết hạn chia sẻ mặc định", + "default_shares_expiration_help": "Hết hạn mặc định cho chia sẻ mới tính theo số ngày", + "max_shares_expiration": "Hết hạn chia sẻ tối đa", + "max_shares_expiration_help": "Thời gian hết hạn tối đa cho phép, tính theo số ngày, khi người dùng tạo hoặc cập nhật chia sẻ", + "directory_permissions": "Quyền theo thư mục", + "directory_permissions_help": "Ký tự đại diện được hỗ trợ trong đường dẫn, ví dụ \"/incoming/*\" khớp với bất kỳ thư mục nào trong \"/incoming\"", + "directory_path_help": "đường dẫn thư mục, ví dụ: /dir", + "directory_patterns": "Hạn chế mẫu tên theo thư mục", + "directory_patterns_help": "Tệp/thư mục bị từ chối hoặc cho phép phân cách bằng dấu phẩy, dựa trên mẫu shell. Việc so khớp không phân biệt chữ hoa chữ thường", + "max_sessions": "Số phiên tối đa", + "max_sessions_help": "Số lượng phiên đồng thời tối đa. 0 có nghĩa là không giới hạn", + "denied_protocols": "Giao thức bị từ chối", + "denied_login_methods": "Phương thức đăng nhập bị từ chối", + "denied_login_methods_help": "\"password\" có giá trị cho tất cả các giao thức được hỗ trợ, \"password-over-SSH\" chỉ cho SSH/SFTP/SCP", + "web_client_options": "Web client/REST API", + "max_upload_size": "Kích thước tải lên tối đa", + "max_upload_size_help": "Kích thước tải lên tối đa cho một tệp duy nhất. 0 có nghĩa là không giới hạn. Bạn có thể sử dụng hậu tố MB/GB/TB", + "max_upload_size_invalid": "Kích thước tệp tải lên tối đa không hợp lệ", + "upload_bandwidth": "Băng thông UL (KB/s)", + "download_bandwidth": "Băng thông DL (KB/s)", + "upload_bandwidth_help": "UL (KB/s). 0 có nghĩa là không giới hạn", + "download_bandwidth_help": "DL (KB/s). 0 có nghĩa là không giới hạn", + "src_bandwidth_limit": "Giới hạn tốc độ băng thông theo nguồn", + "upload_data_transfer": "Truyền dữ liệu tải lên (MB)", + "upload_data_transfer_help": "Truyền dữ liệu tối đa cho phép cho tải lên. 0 có nghĩa là không giới hạn", + "download_data_transfer": "Truyền dữ liệu tải xuống (MB)", + "download_data_transfer_help": "Truyền dữ liệu tối đa cho phép cho tải xuống. 0 có nghĩa là không giới hạn", + "total_data_transfer": "Tổng truyền dữ liệu (MB)", + "total_data_transfer_help": "Truyền dữ liệu tối đa cho phép cho tải lên + tải xuống. Thay thế các giới hạn riêng lẻ. 0 có nghĩa là không giới hạn", + "start_directory": "Thư mục ban đầu", + "start_directory_help": "Thư mục ban đầu thay thế để sử dụng thay vì \"/\". Hỗ trợ cho SFTP/FTP/HTTP", + "tls_username": "Tên người dùng TLS", + "tls_username_help": "Xác định trường chứng chỉ TLS để sử dụng làm tên người dùng. Bỏ qua nếu TLS hai chiều bị tắt", + "ftp_security": "Bảo mật FTP", + "ftp_security_help": "Bỏ qua nếu TLS đã được yêu cầu toàn cục cho tất cả người dùng FTP", + "hooks": "Hooks", + "hook_ext_auth_disabled": "Xác thực bên ngoài bị tắt", + "hook_pre_login_disabled": "Trước đăng nhập bị tắt", + "hook_check_password_disabled": "Kiểm tra mật khẩu bị tắt", + "is_anonymous": "Người dùng ẩn danh", + "is_anonymous_help": "Người dùng ẩn danh được hỗ trợ cho giao thức FTP và WebDAV và chỉ có quyền đọc", + "disable_fs_checks": "Tắt kiểm tra hệ thống tệp", + "disable_fs_checks_help": "Tắt kiểm tra sự tồn tại và tự động tạo thư mục chính và thư mục ảo", + "api_key_auth_help": "Cho phép mạo danh người dùng, trong REST API, với khóa API", + "external_auth_cache_time": "Thời gian bộ nhớ đệm xác thực bên ngoài", + "external_auth_cache_time_help": "Thời gian bộ nhớ đệm, tính bằng giây, cho người dùng được xác thực bằng hook xác thực bên ngoài. 0 có nghĩa là không có bộ nhớ đệm", + "access_time": "Hạn chế thời gian truy cập", + "access_time_help": "Không có hạn chế có nghĩa là truy cập luôn được phép, thời gian phải được đặt theo định dạng HH:MM" + }, + "admin": { + "role_permissions": "Quản trị viên vai trò không thể có quyền \"*\"", + "view_manage": "Xem và quản lý quản trị viên", + "self_delete": "Bạn không thể xóa chính mình", + "self_permissions": "Bạn không thể thay đổi quyền của mình", + "self_disable": "Bạn không thể vô hiệu hóa chính mình", + "self_role": "Bạn không thể thêm/thay đổi vai trò của mình", + "password_help": "Nếu để trống, mật khẩu hiện tại sẽ không bị thay đổi", + "role_help": "Đặt vai trò giới hạn quản trị viên chỉ quản lý người dùng có cùng vai trò. Quản trị viên có vai trò không thể là quản trị viên cấp cao", + "users_groups": "Nhóm cho người dùng", + "users_groups_help": "Nhóm tự động được chọn cho người dùng mới được tạo bởi quản trị viên này. Quản trị viên vẫn có thể chọn các nhóm khác nhau. Các cài đặt này chỉ được sử dụng cho giao diện quản trị này và sẽ bị bỏ qua trong REST API/hooks", + "group_membership": "Thêm làm thành viên", + "group_primary": "Thêm làm chính", + "group_secondary": "Thêm làm phụ", + "user_page_pref": "Tùy chọn trang người dùng", + "user_page_pref_help": "Bạn có thể ẩn một số phần từ trang người dùng. Đây không phải là cài đặt bảo mật và không được thực thi phía máy chủ theo bất kỳ cách nào. Chúng chỉ nhằm đơn giản hóa trang thêm/cập nhật người dùng", + "hide_sections": "Ẩn các phần", + "default_users_expiration": "Hết hạn người dùng mặc định", + "default_users_expiration_help": "Hết hạn mặc định cho người dùng mới tính theo số ngày", + "require_pwd_change_help": "Yêu cầu thay đổi mật khẩu vào lần đăng nhập tiếp theo" + }, + "connections": { + "view_manage": "Xem và quản lý kết nối", + "started": "Đã bắt đầu", + "remote_address": "Địa chỉ từ xa", + "last_activity": "Hoạt động cuối", + "disconnect_confirm_btn": "Có, ngắt kết nối", + "disconnect_confirm": "Bạn có muốn ngắt kết nối đã chọn không? Hành động này không thể đảo ngược", + "disconnect_ko": "Không thể ngắt kết nối đã chọn", + "upload": "UL: \"{{- path}}\"", + "download": "DL: \"{{- path}}\"", + "upload_info": "$t(connections.upload). Kích thước: {{- size}}. Tốc độ: {{- speed}}", + "download_info": "$t(connections.download). Kích thước: {{- size}}. Tốc độ: {{- speed}}", + "client": "Khách hàng: {{- val}}" + }, + "role": { + "view_manage": "Xem và quản lý vai trò", + "err_delete_referenced": "Không thể xóa vai trò có quản trị viên liên kết, hãy xóa liên kết trước" + }, + "ip_list": { + "view_manage": "Xem và quản lý danh sách IP", + "defender_list": "Bảo vệ", + "allow_list": "Danh sách cho phép", + "ratelimiters_safe_list": "Danh sách an toàn giới hạn tốc độ", + "ip_net": "IP/Mạng", + "protocols": "Giao thức", + "any": "Bất kỳ", + "allow": "Cho phép", + "deny": "Từ chối", + "ip_net_help": "Địa chỉ IP hoặc mạng theo định dạng CIDR, ví dụ: \"192.168.1.1 hoặc 10.8.0.100/32 hoặc 2001:db8:1234::/48\"", + "ip_invalid": "Địa chỉ IP không hợp lệ", + "net_invalid": "Mạng không hợp lệ", + "duplicated": "IP/mạng đã chỉ định đã tồn tại", + "search": "IP/Mạng hoặc phần đầu", + "defender_disabled": "Bảo vệ bị tắt trong cấu hình của bạn", + "allow_list_disabled": "Danh sách cho phép bị tắt trong cấu hình của bạn", + "ratelimiters_disabled": "Giới hạn tốc độ bị tắt trong cấu hình của bạn" + }, + "defender": { + "view_manage": "Xem và quản lý danh sách chặn tự động", + "ip": "Địa chỉ IP", + "ban_time": "Bị chặn đến", + "score": "Điểm" + }, + "status": { + "desc": "Trạng thái máy chủ", + "ssh": "Máy chủ SSH/SFTP", + "active": "Trạng thái: hoạt động", + "disabled": "Trạng thái: bị tắt", + "error": "Trạng thái: lỗi", + "proxy_on": "Giao thức PROXY được bật", + "address": "Địa chỉ", + "ssh_auths": "Phương thức xác thực", + "ssh_commands": "Lệnh được chấp nhận", + "host_key": "Khóa máy chủ", + "fingeprint": "Dấu vân tay", + "algorithms": "Thuật toán", + "algorithm": "Thuật toán", + "ssh_pub_key_algo": "Thuật toán xác thực khóa công khai", + "ssh_mac_algo": "Thuật toán mã xác thực thông báo (MAC)", + "ssh_kex_algo": "Thuật toán trao đổi khóa (KEX)", + "ssh_cipher_algo": "Mã hóa", + "ftp": "Máy chủ FTP", + "ftp_passive_range": "Phạm vi cổng chế độ thụ động", + "ftp_passive_ip": "IP thụ động", + "tls": "TLS", + "tls_disabled": "Bị tắt", + "tls_explicit": "Chế độ rõ ràng bắt buộc (FTPES)", + "tls_implicit": "Chế độ ngầm (FTPS), không được khuyến khích, ưu tiên FTPES", + "tls_mixed": "Chế độ thường và rõ ràng (FTPES)", + "webdav": "Máy chủ WebDAV", + "rate_limiters": "Giới hạn tốc độ" + }, + "maintenance": { + "backup": "Sao lưu", + "backup_do": "Sao lưu dữ liệu của bạn", + "backup_ok": "Sao lưu đã được khôi phục thành công", + "backup_invalid_file": "Tệp sao lưu không hợp lệ, đảm bảo đó là tệp JSON với nội dung hợp lệ", + "restore_error": "Không thể khôi phục bản sao lưu của bạn, kiểm tra nhật ký máy chủ để biết thêm chi tiết", + "restore": "Khôi phục", + "backup_file": "Tệp sao lưu", + "backup_file_help": "Nhập dữ liệu từ tệp sao lưu JSON", + "restore_mode0": "Thêm và cập nhật", + "restore_mode1": "Chỉ thêm", + "restore_mode2": "Thêm, cập nhật và ngắt kết nối", + "after_restore": "Sau khi khôi phục", + "quota_mode0": "Không cập nhật hạn ngạch", + "quota_mode1": "Cập nhật hạn ngạch", + "quota_mode2": "Cập nhật hạn ngạch cho người dùng có giới hạn hạn ngạch" + }, + "acme": { + "title": "ACME", + "generic_error": "Không thể lấy chứng chỉ TLS, kiểm tra nhật ký máy chủ để biết thêm chi tiết", + "help": "Từ phần này, bạn có thể yêu cầu chứng chỉ TLS miễn phí cho dịch vụ SFTPGo của bạn bằng giao thức ACME và loại thử thách HTTP-01. Bạn phải tạo một mục DNS dưới tên miền tùy chỉnh mà bạn sở hữu, mục này phân giải thành địa chỉ IP công khai SFTPGo của bạn và cổng 80 phải có thể truy cập công khai. Bạn có thể đặt các tùy chọn cấu hình cho các trường hợp sử dụng phổ biến nhất và thiết lập nút đơn ở đây, đối với cấu hình nâng cao, hãy tham khảo tài liệu SFTPGo. Cần khởi động lại dịch vụ để áp dụng thay đổi", + "domain_help": "Có thể chỉ định nhiều tên miền cách nhau bằng dấu phẩy hoặc khoảng trắng. Chúng sẽ được bao gồm trong cùng một chứng chỉ", + "email_help": "Email được sử dụng để đăng ký và liên hệ khôi phục", + "port_help": "Nếu khác với 80, bạn phải cấu hình proxy ngược", + "protocols_help": "Sử dụng chứng chỉ đã lấy cho các giao thức đã chỉ định" + }, + "smtp": { + "title": "SMTP", + "err_required_fields": "Địa chỉ từ và Tên người dùng không thể đều trống", + "help": "Đặt cấu hình SMTP thay thế cho cấu hình được định nghĩa bằng biến môi trường hoặc tệp cấu hình nếu có", + "host": "Tên máy chủ", + "host_help": "Nếu để trống, cấu hình sẽ bị tắt", + "auth": "Xác thực", + "encryption": "Mã hóa", + "sender": "Người gửi", + "debug": "Nhật ký gỡ lỗi", + "domain_help": "Tên miền HELO. Để trống để sử dụng tên máy chủ", + "test_recipient": "Địa chỉ để gửi email kiểm tra", + "oauth2_provider": "Nhà cung cấp OAuth2", + "oauth2_provider_help": "URI để chuyển hướng đến sau khi xác thực người dùng", + "oauth2_tenant": "Người thuê OAuth2", + "oauth2_tenant_help": "Người thuê Azure. Giá trị điển hình là \"common\", \"organizations\", \"consumers\" hoặc mã định danh người thuê", + "oauth2_client_id": "ID khách hàng OAuth2", + "oauth2_client_secret": "Bí mật khách hàng OAuth2", + "oauth2_token": "Token OAuth2", + "recipient_required": "Chỉ định người nhận để gửi email kiểm tra", + "test_error": "Không thể gửi email kiểm tra, kiểm tra nhật ký máy chủ để biết thêm chi tiết", + "test_ok": "Không có lỗi nào được báo cáo khi gửi email kiểm tra. Vui lòng kiểm tra hộp thư đến của bạn để đảm bảo", + "oauth2_flow_error": "Không thể lấy URI để bắt đầu luồng OAuth2", + "oauth2_question": "Bạn có muốn bắt đầu luồng OAuth2 để lấy token không?" + }, + "sftp": { + "help": "Từ phần này, bạn có thể bật các thuật toán bị tắt theo mặc định. Bạn không cần đặt giá trị đã được định nghĩa bằng biến môi trường hoặc tệp cấu hình. Cần khởi động lại dịch vụ để áp dụng thay đổi", + "host_key_algos": "Thuật toán khóa máy chủ" + }, + "branding": { + "title": "Thương hiệu", + "help": "Từ phần này, bạn có thể tùy chỉnh SFTPGo để phù hợp với thương hiệu của bạn và thêm tuyên bố miễn trừ trách nhiệm vào các trang đăng nhập", + "short_name": "Tên ngắn", + "logo": "Logo", + "logo_help": "Hình ảnh PNG, kích thước tối đa được chấp nhận 512x512, kích thước logo mặc định là 256x256", + "favicon": "Biểu tượng trang", + "disclaimer_name": "Tiêu đề tuyên bố miễn trừ", + "disclaimer_url": "URL tuyên bố miễn trừ", + "invalid_png": "Hình ảnh PNG không hợp lệ", + "invalid_png_size": "Kích thước hình ảnh PNG không hợp lệ", + "invalid_disclaimer_url": "URL tuyên bố miễn trừ phải là liên kết http hoặc https" + }, + "events": { + "search": "Tìm kiếm nhật ký", + "fs_events": "Sự kiện hệ thống tệp", + "provider_events": "Sự kiện nhà cung cấp", + "other_events": "Sự kiện khác", + "quota_exceeded": "Vượt quá hạn ngạch", + "date_range": "Phạm vi ngày", + "upload": "Tải lên", + "download": "Tải xuống", + "mkdir": "Tạo thư mục", + "rmdir": "Xóa thư mục", + "rename": "Đổi tên", + "delete": "Xóa", + "copy": "Sao chép", + "first_upload": "Tải lên đầu tiên", + "first_download": "Tải xuống đầu tiên", + "ssh_cmd": "Lệnh SSH", + "add": "Thêm", + "update": "Cập nhật", + "login_failed": "Đăng nhập thất bại", + "login_ok": "Đăng nhập thành công", + "login_missing_user": "Đăng nhập với người dùng không tồn tại", + "no_login_tried": "Không có đăng nhập nào được thử", + "algo_negotiation_failed": "Đàm phán thuật toán thất bại", + "datetime": "Ngày và giờ", + "action": "Hành động", + "path": "Đường dẫn", + "object": "Đối tượng", + "event": "Sự kiện" + }, + "provider_objects": { + "user": "Người dùng", + "folder": "Thư mục", + "group": "Nhóm", + "admin": "Quản trị viên", + "api_key": "Khóa API", + "share": "Chia sẻ", + "event_action": "Hành động", + "event_rule": "Quy tắc", + "role": "Vai trò", + "ip_list_entry": "Mục danh sách IP", + "configs": "Cấu hình" + }, + "actions": { + "view_manage": "Xem và quản lý hành động quy tắc cho sự kiện", + "err_delete_referenced": "Không thể xóa hành động có quy tắc liên kết, hãy xóa liên kết trước", + "http_url": "URL máy chủ", + "http_url_help": "ví dụ https://host:port/path. Placeholder được hỗ trợ trong đường dẫn URL", + "http_url_required": "URL là bắt buộc", + "http_url_invalid": "URL không hợp lệ, chỉ hỗ trợ giao thức http và https", + "http_part_name_required": "Tên phần HTTP là bắt buộc", + "http_part_body_required": "Nội dung phần HTTP là bắt buộc nếu không cung cấp đường dẫn tệp", + "http_multipart_body_error": "Yêu cầu đa phần yêu cầu không có nội dung. Nội dung yêu cầu được xây dựng từ các phần đã chỉ định", + "http_multipart_ctype_error": "Content-Type được đặt tự động cho yêu cầu đa phần", + "path_duplicated": "Đường dẫn trùng lặp", + "command_required": "Lệnh là bắt buộc", + "command_invalid": "Lệnh không hợp lệ, nó phải là đường dẫn tuyệt đối", + "email_recipient_required": "Cần ít nhất một người nhận email", + "email_subject_required": "Chủ đề email là bắt buộc", + "email_body_required": "Nội dung email là bắt buộc", + "retention_directory_required": "Cần ít nhất một thư mục để kiểm tra", + "path_required": "Cần ít nhất một đường dẫn", + "source_dest_different": "Đường dẫn nguồn và đích phải khác nhau", + "root_not_allowed": "Đường dẫn gốc (/) không được phép", + "archive_name_required": "Tên lưu trữ nén là bắt buộc", + "idp_template_required": "Cần một mẫu người dùng hoặc quản trị viên", + "threshold": "Ngưỡng", + "threshold_help": "Thông báo email sẽ được tạo cho người dùng có mật khẩu hết hạn trong số ngày nhỏ hơn hoặc bằng ngưỡng này", + "disable_threshold": "Ngưỡng vô hiệu hóa", + "disable_threshold_help": "Không hoạt động tính theo ngày, kể từ lần đăng nhập cuối hoặc tạo trước khi vô hiệu hóa người dùng", + "delete_threshold": "Ngưỡng xóa", + "delete_threshold_help": "Không hoạt động tính theo ngày, kể từ lần đăng nhập cuối hoặc tạo trước khi xóa người dùng", + "inactivity_threshold_required": "Cần định nghĩa ít nhất một ngưỡng không hoạt động", + "inactivity_thresholds_invalid": "Ngưỡng xóa phải lớn hơn ngưỡng vô hiệu hóa", + "idp_mode_add_update": "Tạo hoặc cập nhật", + "idp_mode_add": "Tạo nếu chưa tồn tại", + "template_user_help": "Mẫu cho người dùng SFTPGo ở định dạng JSON. Placeholder được hỗ trợ", + "template_admin_help": "Mẫu cho quản trị viên SFTPGo ở định dạng JSON. Placeholder được hỗ trợ", + "placeholders_help": "Placeholder được hỗ trợ", + "http_headers": "Tiêu đề HTTP", + "query_parameters": "Tham số chuỗi truy vấn", + "http_timeout_help": "Bỏ qua cho yêu cầu đa phần với tệp đính kèm", + "body": "Nội dung", + "http_body_help": "Placeholder được hỗ trợ. Bỏ qua cho yêu cầu HTTP get. Để trống cho yêu cầu đa phần", + "multipart_body": "Nội dung đa phần", + "multipart_body_help": "Yêu cầu đa phần HTTP cho phép kết hợp một hoặc nhiều bộ dữ liệu thành một nội dung. Đối với mỗi phần, bạn có thể đặt đường dẫn tệp hoặc nội dung dưới dạng văn bản. Placeholder được hỗ trợ trong đường dẫn tệp, nội dung, giá trị tiêu đề", + "http_part_name": "Tên phần", + "http_part_file": "Đường dẫn tệp", + "http_part_headers": "Tiêu đề phần bổ sung mỗi dòng một tiêu đề dưới dạng \"khóa: giá trị\"", + "command_help": "Đường dẫn tuyệt đối của lệnh để thực thi", + "command_args": "Đối số", + "command_args_help": "Đối số lệnh phân cách bằng dấu phẩy. Placeholder được hỗ trợ", + "command_env_vars_help": "Placeholder được hỗ trợ trong giá trị. Đặt giá trị thành \"$\" không có dấu ngoặc kép có nghĩa là lấy khóa từ môi trường không bao gồm các khóa bắt đầu bằng SFTPGO_", + "email_recipients": "Đến", + "email_recipients_help": "Người nhận phân cách bằng dấu phẩy. Placeholder được hỗ trợ", + "email_bcc": "Bcc", + "email_bcc_help": "Địa chỉ Bcc phân cách bằng dấu phẩy. Placeholder được hỗ trợ", + "email_subject": "Chủ đề", + "content_type": "Loại nội dung", + "attachments": "Tệp đính kèm", + "attachments_help": "Đường dẫn đính kèm phân cách bằng dấu phẩy. Placeholder được hỗ trợ. Tổng kích thước giới hạn ở 10 MB", + "data_retention": "Lưu giữ dữ liệu", + "data_retention_help": "Đặt thời gian lưu giữ dữ liệu, tính bằng giờ, cho mỗi đường dẫn. Lưu giữ áp dụng đệ quy. Đặt 0 làm thời gian lưu giữ có nghĩa là loại trừ đường dẫn đã chỉ định", + "delete_empty_dirs": "Xóa thư mục trống", + "fs_action": "Hành động hệ thống tệp", + "paths_src_dst_help": "Đường dẫn như người dùng SFTPGo nhìn thấy. Placeholder được hỗ trợ. Các quyền cần thiết được cấp tự động", + "source_path": "Nguồn", + "target_path": "Đích", + "paths_help": "Đường dẫn phân cách bằng dấu phẩy như người dùng SFTPGo nhìn thấy. Placeholder được hỗ trợ. Các quyền cần thiết được cấp tự động", + "archive_path": "Đường dẫn lưu trữ", + "archive_path_help": "Đường dẫn đầy đủ, như người dùng SFTPGo nhìn thấy, đến tệp lưu trữ zip để tạo. Placeholder được hỗ trợ. Nếu tệp đã chỉ định đã tồn tại, nó sẽ bị ghi đè", + "placeholders_modal_title": "Placeholder được hỗ trợ", + "update_mod_times": "Cập nhật thời gian", + "types": { + "http": "HTTP", + "email": "Email", + "backup": "Sao lưu", + "user_quota_reset": "Đặt lại hạn ngạch người dùng", + "folder_quota_reset": "Đặt lại hạn ngạch thư mục", + "transfer_quota_reset": "Đặt lại hạn ngạch truyền", + "data_retention_check": "Kiểm tra lưu giữ dữ liệu", + "filesystem": "Hệ thống tệp", + "password_expiration_check": "Kiểm tra hết hạn mật khẩu", + "user_expiration_check": "Kiểm tra hết hạn người dùng", + "user_inactivity_check": "Kiểm tra không hoạt động của người dùng", + "idp_check": "Kiểm tra tài khoản Nhà cung cấp Danh tính", + "rotate_logs": "Xoay tệp nhật ký", + "command": "Lệnh" + }, + "fs_types": { + "rename": "Đổi tên", + "delete": "Xóa", + "path_exists": "Đường dẫn tồn tại", + "compress": "Nén", + "copy": "Sao chép", + "create_dirs": "Tạo thư mục" + }, + "placeholders_modal": { + "name": "Tên người dùng, tên thư mục ảo, tên người dùng quản trị cho sự kiện nhà cung cấp, tên miền cho sự kiện chứng chỉ TLS", + "event": "Tên sự kiện, ví dụ \"upload\", \"download\" cho sự kiện hệ thống tệp hoặc \"add\", \"update\" cho sự kiện nhà cung cấp", + "status": "Trạng thái cho sự kiện hệ thống tệp. 1 có nghĩa là không có lỗi, 2 có nghĩa là xảy ra lỗi chung, 3 có nghĩa là lỗi vượt quá hạn ngạch", + "status_string": "Trạng thái dưới dạng chuỗi. Giá trị có thể \"OK\", \"KO\"", + "error_string": "Chi tiết lỗi. Thay thế bằng chuỗi trống nếu không có lỗi xảy ra", + "virtual_path": "Đường dẫn mà người dùng SFTPGo nhìn thấy, ví dụ \"/adir/afile.txt\"", + "escaped_virtual_path": "Đường dẫn được mã hóa chuỗi truy vấn HTTP, ví dụ \"%2Fadir%2Fafile.txt\".", + "virtual_dir_path": "Thư mục cha cho \"VirtualPath\", ví dụ nếu \"VirtualPath\" là \"/adir/afile.txt\", \"VirtualDirPath\" là \"/adir\"", + "fs_path": "Đường dẫn hệ thống tệp đầy đủ, ví dụ \"/user/homedir/adir/afile.txt\" hoặc \"C:/data/user/homedir/adir/afile.txt\" trên Windows", + "ext": "Phần mở rộng tệp, ví dụ \".txt\" nếu tên tệp là \"afile.txt\"", + "object_name": "Tên tệp/thư mục, ví dụ \"afile.txt\" hoặc tên đối tượng nhà cung cấp", + "object_basename": "Tên tệp không có phần mở rộng, ví dụ \"afile\" nếu tên tệp là \"afile.txt\"", + "object_type": "Loại đối tượng cho sự kiện nhà cung cấp: \"user\", \"group\", \"admin\", v.v.", + "virtual_target_path": "Đường dẫn đích ảo cho hoạt động đổi tên và sao chép", + "virtual_target_dir_path": "Thư mục cha cho \"VirtualTargetPath\"", + "target_name": "Tên đối tượng đích cho hoạt động đổi tên và sao chép", + "fs_target_path": "Đường dẫn hệ thống tệp đích đầy đủ cho hoạt động đổi tên và sao chép", + "file_size": "Kích thước tệp (byte)", + "elapsed": "Thời gian đã trôi qua tính bằng mili giây cho sự kiện hệ thống tệp", + "protocol": "Giao thức, ví dụ \"SFTP\", \"FTP\"", + "ip": "Địa chỉ IP của khách hàng", + "role": "Vai trò người dùng hoặc quản trị viên", + "timestamp": "Dấu thời gian sự kiện tính bằng nano giây kể từ epoch", + "datetime": "Dấu thời gian sự kiện được định dạng là YYYY-MM-DDTHH:MM:SS.ZZZ", + "year": "Năm sự kiện được định dạng là bốn chữ số", + "month": "Tháng sự kiện được định dạng là hai chữ số", + "day": "Ngày sự kiện được định dạng là hai chữ số", + "hour": "Giờ sự kiện được định dạng là hai chữ số", + "minute": "Phút sự kiện được định dạng là hai chữ số", + "email": "Đối với sự kiện hệ thống tệp, đây là email liên kết với người dùng thực hiện hành động. Đối với sự kiện nhà cung cấp, đây là email liên kết với người dùng hoặc quản trị viên bị ảnh hưởng. Trống trong tất cả các trường hợp khác", + "object_data": "Dữ liệu đối tượng nhà cung cấp được tuần tự hóa dưới dạng JSON với các trường nhạy cảm bị xóa", + "object_data_string": "Dữ liệu đối tượng nhà cung cấp dưới dạng chuỗi thoát JSON với các trường nhạy cảm bị xóa", + "retention_reports": "Báo cáo lưu giữ dữ liệu dưới dạng tệp CSV nén zip. Được hỗ trợ làm tệp đính kèm email, đường dẫn tệp cho yêu cầu HTTP đa phần và làm tham số duy nhất cho nội dung yêu cầu HTTP", + "idp_field": "Trường tùy chỉnh của Nhà cung cấp Danh tính chứa chuỗi", + "metadata": "Siêu dữ liệu lưu trữ đám mây cho tệp đã tải xuống được tuần tự hóa dưới dạng JSON", + "metadata_string": "Siêu dữ liệu lưu trữ đám mây cho tệp đã tải xuống dưới dạng chuỗi thoát JSON", + "uid": "ID duy nhất" + } + }, + "rules": { + "view_manage": "Xem và quản lý quy tắc cho sự kiện", + "trigger": "Kích hoạt", + "run_confirm": "Bạn có muốn thực thi quy tắc đã chọn không?", + "run_confirm_btn": "Có, chạy", + "run_error_generic": "Không thể chạy quy tắc đã chọn", + "run_ok": "Hành động quy tắc đã bắt đầu", + "run": "Chạy", + "invalid_fs_min_size": "Kích thước tối thiểu không hợp lệ", + "invalid_fs_max_size": "Kích thước tối đa không hợp lệ", + "action_required": "Cần ít nhất một hành động", + "fs_event_required": "Cần ít nhất một sự kiện hệ thống tệp", + "provider_event_required": "Cần ít nhất một sự kiện nhà cung cấp", + "schedule_required": "Cần ít nhất một lịch trình", + "schedule_invalid": "Lịch trình không hợp lệ", + "duplicate_actions": "Phát hiện hành động trùng lặp", + "sync_failure_actions": "Thực thi đồng bộ không được hỗ trợ cho hành động thất bại", + "sync_unsupported": "Thực thi đồng bộ chỉ được hỗ trợ cho một số sự kiện hệ thống tệp và đăng nhập Nhà cung cấp Danh tính", + "sync_unsupported_fs_event": "Thực thi đồng bộ chỉ được hỗ trợ cho sự kiện tải lên và pre-* hệ thống tệp", + "only_failure_actions": "Cần ít nhất một hành động không phải thất bại", + "sync_action_required": "Sự kiện \"{{val}}\" yêu cầu ít nhất một hành động đồng bộ", + "scheduler_help": "Giờ: 0-23. Ngày trong tuần: 0-6 (Chủ nhật-Thứ bảy). Ngày trong tháng: 1-31. Tháng: 1-12. Dấu hoa thị (*) chỉ ra một kết quả phù hợp cho tất cả các giá trị của trường. ví dụ: mọi ngày trong tuần, mọi ngày trong tháng và v.v.", + "concurrent_run": "Cho phép thực thi đồng thời từ nhiều phiên bản", + "protocol_filters": "Bộ lọc giao thức", + "status_filters": "Bộ lọc trạng thái", + "object_filters": "Bộ lọc đối tượng", + "name_filters": "Bộ lọc tên", + "name_filters_help": "Bộ lọc mẫu giống shell cho tên người dùng, tên thư mục. Ví dụ \"user*\"\" sẽ khớp với tên bắt đầu bằng \"user\". Đối với sự kiện nhà cung cấp, bộ lọc này được áp dụng cho tên người dùng của quản trị viên thực hiện sự kiện", + "inverse_match": "Khớp ngược", + "group_name_filters": "Bộ lọc tên nhóm", + "group_name_filters_help": "Bộ lọc mẫu giống shell cho tên nhóm. Ví dụ \"group*\"\" sẽ khớp với tên nhóm bắt đầu bằng \"group\"", + "role_name_filters": "Bộ lọc tên vai trò", + "role_name_filters_help": "Bộ lọc mẫu giống shell cho tên vai trò. Ví dụ \"role*\"\" sẽ khớp với tên vai trò bắt đầu bằng \"role\"", + "path_filters": "Bộ lọc đường dẫn", + "path_filters_help": "Bộ lọc mẫu giống shell trên đường dẫn sự kiện hệ thống tệp. Ví dụ \"/adir/*.txt\"\" sẽ khớp với đường dẫn trong thư mục \"/adir\" kết thúc bằng \".txt\". Hỗ trợ dấu hoa thị kép, ví dụ \"/**/*.txt\" sẽ khớp với bất kỳ tệp nào kết thúc bằng \".txt\". \"/mydir/**\" sẽ khớp với bất kỳ mục nào trong \"/mydir\"", + "file_size_limits": "Giới hạn kích thước tệp", + "file_size_limits_help": "0 có nghĩa là không giới hạn. Bạn có thể sử dụng hậu tố MB/GB", + "min_size": "Kích thước tối thiểu", + "max_size": "Kích thước tối đa", + "actions_help": "Một hoặc nhiều hành động để thực thi. Tùy chọn \"Thực thi đồng bộ\" được hỗ trợ cho sự kiện \"upload\" và bắt buộc cho sự kiện \"pre-*\" và sự kiện đăng nhập nhà cung cấp danh tính nếu hành động kiểm tra tài khoản", + "option_failure_action": "Hành động thất bại", + "option_stop_on_failure": "Dừng khi thất bại", + "option_execute_sync": "Thực thi đồng bộ", + "no_filter": "Không có bộ lọc có nghĩa là luôn kích hoạt sự kiện", + "action_placeholder": "Chọn một hành động", + "triggers": { + "fs_event": "Sự kiện hệ thống tệp", + "provider_event": "Sự kiện nhà cung cấp", + "ip_blocked": "IP bị chặn", + "certificate_renewal": "Gia hạn chứng chỉ", + "on_demand": "Theo yêu cầu", + "idp_login": "Đăng nhập Nhà cung cấp Danh tính", + "schedule": "Lịch trình" + }, + "idp_logins": { + "user": "Đăng nhập người dùng", + "admin": "Đăng nhập quản trị viên" + } + } +} + + diff --git a/templates/common/base.html b/templates/common/base.html index c8d7f9bc..08017fd7 100644 --- a/templates/common/base.html +++ b/templates/common/base.html @@ -174,19 +174,24 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). const lngs = {}; //{{- range .Languages}} - //{{- if eq . "en"}} - lngs.en = { nativeName: 'English' }; - //{{- else if eq . "it" }} - lngs.it = { nativeName: 'Italiano' }; - //{{- else if eq . "de" }} - lngs.de = { nativeName: 'Deutsch' }; - //{{- else if eq . "fr" }} - lngs.fr = { nativeName: 'Français' }; + //{{- if eq . "vi"}} + // lngs.vi = { nativeName: 'Vietnamese' }; + //{{- else if eq . "en" }} + // lngs.en = { nativeName: 'English' }; + // //{{- else if eq . "it" }} + // lngs.it = { nativeName: 'Italiano' }; + // //{{- else if eq . "de" }} + // lngs.de = { nativeName: 'Deutsch' }; + // //{{- else if eq . "fr" }} + // lngs.fr = { nativeName: 'Français' }; //{{- end}} //{{- end}} - if (Object.keys(lngs).length == 0){ - lngs.en = { nativeName: 'English' }; - } + // if (Object.keys(lngs).length == 0){ + // lngs.en = { nativeName: 'English' }; + // } + + // vi only + lngs.vi = { nativeName: 'Vietnamese' }; const renderI18n = () => { document.documentElement.setAttribute('lang', i18next.resolvedLanguage); @@ -203,9 +208,10 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). .use(i18nextChainedBackend) .use(i18nextBrowserLanguageDetector) .init({ - debug: false, + // lng: 'vi', // if you're using a language detector, do not define the lng option + debug: true, supportedLngs: Object.keys(lngs), - fallbackLng: Object.keys(lngs)[0], + fallbackLng: Object.keys(lngs)[1], // vi fallback to en load: 'languageOnly', backend: { backends: [