diff --git a/src/components/LanguageSwitcher.tsx b/src/components/LanguageSwitcher.tsx index 00e7a278..28b26735 100644 --- a/src/components/LanguageSwitcher.tsx +++ b/src/components/LanguageSwitcher.tsx @@ -5,10 +5,10 @@ import DialogDropdown from "./DialogDropdown.js"; const LOCALES_NAMES_MAP = { bg: "Български", ca: "Català", - "zh-CN": "简体中文", cs: "Česky", da: "Dansk", de: "Deutsch", + en: "English", es: "Español", eu: "Euskera", fi: "Suomi", @@ -24,9 +24,10 @@ const LOCALES_NAMES_MAP = { ru: "Русский", sv: "Svenska", tr: "Türkçe", - zh: "繁體中文", ua: "Українська", - en: "English", + vi: "Tiếng Việt", + zh: "繁體中文", + "zh-CN": "简体中文", }; const LanguageSwitcher = memo(() => { diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 5d317479..8820dfe3 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -23,6 +23,7 @@ import timeRu from "timeago.js/lib/lang/ru.js"; import timeSv from "timeago.js/lib/lang/sv.js"; import timeTr from "timeago.js/lib/lang/tr.js"; import timeUa from "timeago.js/lib/lang/uk.js"; +import timeVi from "timeago.js/lib/lang/vi.js"; import timeZhCn from "timeago.js/lib/lang/zh_CN.js"; import timeZh from "timeago.js/lib/lang/zh_TW.js"; import bgTranslations from "./locales/bg.json" with { type: "json" }; @@ -47,6 +48,7 @@ import ruTranslations from "./locales/ru.json" with { type: "json" }; import svTranslations from "./locales/sv.json" with { type: "json" }; import trTranslations from "./locales/tr.json" with { type: "json" }; import uaTranslations from "./locales/ua.json" with { type: "json" }; +import viTranslations from "./locales/vi.json" with { type: "json" }; import zhTranslations from "./locales/zh.json" with { type: "json" }; import zhCnTranslations from "./locales/zh-CN.json" with { type: "json" }; @@ -71,6 +73,7 @@ register("ru", timeRu); register("sv", timeSv); register("tr", timeTr); register("ua", timeUa); +register("vi", timeVi); register("zh", timeZh); register("zh-CN", timeZhCn); @@ -97,6 +100,7 @@ const resources = { sv: svTranslations as ResourceLanguage, tr: trTranslations as ResourceLanguage, ua: uaTranslations as ResourceLanguage, + vi: viTranslations as ResourceLanguage, zh: zhTranslations as ResourceLanguage, "zh-CN": zhCnTranslations as ResourceLanguage, } as const; diff --git a/src/i18n/locales/vi.json b/src/i18n/locales/vi.json new file mode 100644 index 00000000..5e7c372a --- /dev/null +++ b/src/i18n/locales/vi.json @@ -0,0 +1,546 @@ +{ + "common": { + "action": "Hành động", + "actions": "Các hành động", + "apply": "Áp dụng", + "attribute": "Thuộc tính", + "bind": "Liên kết", + "clear": "Xóa", + "clear_all": "Xóa tất cả", + "close": "Đóng", + "cancel": "Hủy", + "cluster": "Cụm", + "clusters": "Các cụm", + "confirmation": "Xác nhận", + "delete": "Xóa", + "destination": "Đích", + "devices": "Thiết bị", + "dialog_confirmation_prompt": "Bạn có chắc chắn?", + "disable": "Vô hiệu hóa", + "search": "Tìm kiếm", + "highlight": "Làm nổi bật", + "groups": "Nhóm", + "loading": "Đang tải...", + "none": "Không có", + "ok": "OK", + "read": "Đọc", + "save": "Lưu", + "select_value": "Chọn giá trị", + "select_device": "Chọn thiết bị", + "select_endpoint": "Chọn điểm cuối", + "select_group": "Chọn nhóm", + "source_endpoint": "Điểm cuối nguồn", + "the_only_endpoint": "Điểm cuối duy nhất", + "unbind": "Hủy liên kết", + "write": "Ghi", + "destination_endpoint": "Điểm cuối đích", + "read_the_docs_info": "Đọc về điều này trong tài liệu...", + "page": "Trang", + "go_to_page": "Đi đến trang", + "show": "Hiển thị", + "min": "Tối thiểu", + "max": "Tối đa", + "done": "Hoàn thành", + "documentation": "Tài liệu", + "optional": "Tùy chọn", + "init": "Khởi tạo", + "undefined": "Không xác định", + "type_to_filter": "Gõ để lọc...", + "name": "Tên", + "friendly_name": "Tên thân thiện", + "unknown_device": "Thiết bị không xác định", + "unknown_group": "Nhóm không xác định", + "failed": "Thất bại", + "disabled": "Đã vô hiệu hóa", + "execute": "Thực thi", + "command": "Lệnh", + "payload": "Dữ liệu", + "execute_command": "Thực thi lệnh", + "send": "Gửi", + "columns": "Cột", + "entries": "Mục", + "source": "Nguồn", + "close_notifications": "Đóng thông báo", + "more": "Thêm", + "default": "Mặc định", + "multi_instance": "Đa phiên bản", + "all_sources": "Tất cả nguồn", + "show_source_name": "Hiển thị tên nguồn", + "show_only": "Chỉ hiển thị", + "empty_exposes_definition": "Định nghĩa exposes trống", + "hide_static_info_alerts": "Ẩn cảnh báo thông tin tĩnh", + "advanced_search": "Tìm kiếm nâng cao", + "reset": "Đặt lại", + "all": "Tất cả", + "last_seen_filter_info": "Tính bằng phút kể từ lần cập nhật bảng cuối", + "feature_type": "Loại tính năng", + "feature_name": "Tên tính năng", + "state": "Trạng thái", + "scroll_to_top": "Cuộn lên đầu", + "notifications": "Thông báo" + }, + "devicePage": { + "about": "Giới thiệu", + "bind": "Liên kết", + "clusters": "Các cụm", + "dev_console": "Bảng điều khiển phát triển", + "reporting": "Báo cáo", + "settings": "Cài đặt", + "settings_specific": "Cài đặt (cụ thể)", + "state": "Trạng thái", + "groups": "Nhóm", + "scene": "Cảnh", + "exposes": "Exposes", + "select_a_device": "Chọn một thiết bị" + }, + "groups": { + "settings": "Cài đặt", + "add_to_group_header": "Thêm thiết bị vào nhóm", + "add_to_group": "Thêm vào nhóm", + "create_group": "Tạo nhóm", + "friendly_name_placeholder": "đèn_phòng_ngủ, vườn...", + "remove_group": "Xóa nhóm", + "group_id": "ID nhóm", + "group_members": "Thành viên nhóm", + "group_scenes": "Cảnh nhóm", + "scenes": "Cảnh", + "rename_group": "Đổi tên nhóm", + "remove_from_group": "Xóa khỏi nhóm" + }, + "logs": { + "log_level_config": "Cấu hình mức log", + "empty_logs_message": "Không có gì để hiển thị", + "filter_by_text": "Lọc theo văn bản", + "logs_limit": "Giới hạn log", + "highlight_only": "Chỉ làm nổi bật" + }, + "network": { + "network_hierarchy": "Cấu trúc mạng", + "help": "Trợ giúp", + "load": "Tải", + "reload": "Tải lại", + "loading": "Tùy thuộc vào kích thước mạng và chất lượng liên kết, quá trình này có thể mất một lúc.", + "parent": "Cha", + "child": "Con", + "sibling": "Anh em", + "children": "Các con", + "siblings": "Các anh em", + "previous_children": "Các con trước đó", + "nodes": "Nút", + "edges": "Cạnh", + "legend": "Chú thích", + "depth": "Độ sâu", + "routes": "Tuyến đường", + "type": "Loại", + "raw": "Hiển thị dữ liệu/bản đồ", + "graphviz": "Bên ngoài - Graphviz", + "plantuml": "Bên ngoài - PlantUML", + "enable_routes": "Bật tuyến đường", + "display_type": "Loại hiển thị", + "data": "Dữ liệu", + "map": "Bản đồ", + "layout_type": "Loại bố cục", + "label_type": "Loại nhãn", + "download_image": "Tải về dưới dạng hình ảnh", + "zoom_in": "Phóng to", + "zoom_out": "Thu nhỏ", + "fit_view": "Vừa khít", + "reset_controls": "Đặt lại điều khiển", + "find_node": "Tìm nút", + "node_strength": "Độ mạnh nút", + "link_distance": "Khoảng cách liên kết", + "icons": "Biểu tượng", + "show_icons": "Hiển thị biểu tượng", + "copy_paste_on": "Sao chép và dán dữ liệu sau vào một trong các trình xem/chỉnh sửa trực tuyến có sẵn.", + "highlight_info": "Nhấp vào hình ảnh thiết bị để làm nổi bật tự động.", + "legend_node_siblings": "Chỉ hiển thị các anh em có xếp hạng cao nhất, điều này sẽ khớp gần đúng với các kết nối thực tế của mạng.", + "legend_node_size": "Kích thước nút theo tính trung tâm.", + "legend_node_select": "Chọn một nút sẽ chọn phần mạng một bước phụ thuộc.", + "legend_node_fold": "Nút menu ngữ cảnh thu gọn/mở rộng sẽ ảnh hưởng đến phần mạng phụ thuộc.", + "legend_edge_toggle": "Bật/tắt các cạnh quan hệ sẽ thay đổi bố cục. Khi vô hiệu hóa một hoặc nhiều cạnh, bố cục thực tế của mạng không còn được biểu diễn chính xác.", + "begin_info_type": "Loại được sử dụng để lấy định dạng bản đồ mạng khác. Các loại bên ngoài được dùng để sao chép sử dụng bên ngoài frontend (một số trang web ví dụ được cung cấp khi tạo).", + "begin_info_routes": "Bật tuyến đường sẽ lấy bảng tuyến đường từ các thiết bị (không phải tất cả coordinator/thiết bị đều hỗ trợ điều này, nhưng lỗi không nên ngăn phần còn lại của dữ liệu tải). Hiện tại điều này chỉ được sử dụng trong hiển thị 'dữ liệu'.", + "begin_info_display": "Loại hiển thị cho phép chuyển đổi giữa chế độ xem hướng dữ liệu và chế độ xem bản đồ." + }, + "navbar": { + "all": "Tất cả", + "dashboard": "Bảng điều khiển", + "devices": "Thiết bị", + "disable_join": "Vô hiệu hóa tham gia", + "extensions": "Tiện ích mở rộng", + "groups": "Nhóm", + "logs": "Nhật ký", + "network": "Mạng", + "ota": "OTA", + "permit_join": "Cho phép tham gia", + "restart": "Khởi động lại", + "settings": "Cài đặt", + "toggle_dropdown": "Bật/tắt menu thả xuống", + "touchlink": "Touchlink", + "websocket_status": "Trạng thái WebSocket", + "transaction_prefix": "Tiền tố giao dịch", + "frontend_settings": "Cài đặt frontend", + "contribute": "Đóng góp" + }, + "ota": { + "check": "Kiểm tra cập nhật mới", + "check_selected": "Kiểm tra đã chọn", + "update_selected": "Cập nhật đã chọn", + "update_selected_info": "Cập nhật OTA rất tốn tài nguyên mạng. Đảm bảo mạng ổn định và chọn thời gian ít sử dụng.", + "empty_ota_message": "Hiện không có thiết bị nào hỗ trợ OTA", + "remaining_time": "Thời gian còn lại", + "schedule": "Lên lịch cập nhật", + "schedule_info": "Sẽ cập nhật khi có yêu cầu OTA tiếp theo từ thiết bị", + "unschedule": "Hủy cập nhật đã lên lịch", + "update": "Cập nhật firmware thiết bị", + "firmware_version": "Phiên bản firmware", + "available_firmware_version": "Phiên bản firmware có sẵn", + "app": "Ứng dụng", + "stack": "Stack", + "updating": "Đang cập nhật", + "idle": "Rảnh rỗi", + "available": "Có sẵn", + "scheduled": "Đã lên lịch", + "schedule_selected": "Lên lịch đã chọn", + "unschedule_selected": "Hủy lịch đã chọn" + }, + "settings": { + "about": "Giới thiệu", + "advanced": "Nâng cao", + "availability": "Tính khả dụng", + "blocklist": "Danh sách chặn", + "revision": "Phiên bản", + "coordinator": "Coordinator", + "download_state": "Tải trạng thái", + "experimental": "Thử nghiệm", + "external_converters": "Bộ chuyển đổi bên ngoài", + "frontend": "Frontend", + "frontend_version": "Phiên bản frontend", + "main": "Chính", + "mqtt": "MQTT", + "ota": "Cập nhật OTA", + "passlist": "Danh sách cho phép", + "bridge": "Cầu nối", + "restart_zigbee2mqtt": "Khởi động lại Zigbee2MQTT", + "serial": "Serial", + "settings": "Cài đặt", + "tools": "Công cụ", + "zigbee2mqtt_version": "Phiên bản Zigbee2MQTT", + "translate": "Dịch", + "stats": "Thống kê", + "coordinator_ieee_address": "Địa chỉ IEEE Coordinator", + "request_z2m_backup": "Yêu cầu sao lưu Z2M", + "add_install_code": "Thêm mã cài đặt", + "install_code": "Mã cài đặt", + "homeassistant": "Tích hợp Home Assistant", + "zigbee_herdsman_converters_version": "Phiên bản zigbee-herdsman-converters", + "zigbee_herdsman_version": "Phiên bản zigbee-herdsman", + "localise_images": "Bản địa hóa hình ảnh thiết bị", + "frontend_notice": "Các cài đặt này (và các cài đặt khác trên các trang cụ thể) được lưu trữ cục bộ trong trình duyệt của bạn. Sử dụng cửa sổ riêng tư hoặc xóa bộ nhớ cache sẽ đặt lại chúng về mặc định.", + "reset_settings": "Đặt lại cài đặt", + "reset_auth": "Đặt lại xác thực", + "reset_all": "Đặt lại tất cả", + "language": "Ngôn ngữ", + "theme": "Chủ đề", + "homepage": "Trang chủ", + "dashboard_column_display": "Hiển thị cột bảng điều khiển", + "permit_join_time": "Thời gian cho phép tham gia", + "dev_console": "Bảng điều khiển phát triển", + "max_on_screen_notifications": "Số thông báo tối đa trên màn hình", + "network_raw": "Dữ liệu/bản đồ mạng", + "network_map": "Bản đồ mạng", + "machine": "Máy", + "node_version": "Phiên bản Node", + "version": "Phiên bản", + "health": "Sức khỏe", + "download_z2m_backup": "Tải xuống bản sao lưu Zigbee2MQTT" + }, + "health": { + "awaiting_next_check": "Đang chờ kiểm tra tiếp theo", + "last_check": "Kiểm tra cuối", + "response_time": "Thời gian phản hồi", + "os": "Hệ điều hành", + "process": "Tiến trình", + "load_average": "Tải trung bình", + "ram_usage": "Sử dụng RAM", + "uptime": "Thời gian hoạt động", + "queued": "Đang chờ", + "published": "Đã xuất bản", + "received": "Đã nhận", + "messages": "Tin nhắn", + "messages_per_sec": "Tin nhắn mỗi giây", + "leave_count": "Số lần rời khỏi", + "network_address_changes": "Thay đổi địa chỉ mạng", + "very_low": "Rất thấp", + "interview_info": "Phỏng vấn thiết bị có thể ảnh hưởng mạnh đến dữ liệu này.", + "sent": "Đã gửi", + "last_message": "Tin nhắn cuối", + "pending_requests": "Yêu cầu đang chờ", + "reconnects": "Kết nối lại" + }, + "touchlink": { + "detected_devices_message": "Đã phát hiện {{count}} thiết bị touchlink.", + "rescan": "Quét lại", + "scan": "Quét", + "identify": "Nhận dạng", + "factory_reset": "Đặt lại xuống xưởng", + "scan_source": "Nguồn quét", + "select_scan_source": "Chọn nguồn quét" + }, + "values": { + "clear": "Xóa", + "closed": "Đóng", + "false": "Sai", + "not_supported": "Không hỗ trợ", + "occupied": "Có người", + "open": "Mở", + "supported": "Hỗ trợ", + "true": "Đúng", + "empty_string": "Chuỗi rỗng(\"\")", + "leaking": "Rò rỉ", + "tampered": "Bị can thiệp", + "null": "Null", + "Clear": "Xóa", + "Closed": "Đóng", + "Occupied": "Có người", + "Open": "Mở" + }, + "zigbee": { + "actions": "Hành động", + "attribute": "Thuộc tính", + "unknown": "Không xác định", + "mains_single_phase": "Điện lưới (một pha)", + "mains_3_phase": "Điện lưới (ba pha)", + "battery": "Pin", + "dc_source": "Nguồn DC", + "emergency_mains_constantly_powered": "Điện lưới khẩn cấp luôn có điện", + "emergency_mains_and_transfer_switch": "Điện lưới khẩn cấp và công tắc chuyển đổi", + "block_join": "Chặn tham gia lại", + "cluster": "Cụm", + "description": "Mô tả", + "device_type": "Loại thiết bị", + "endpoint": "Điểm cuối", + "firmware_id": "ID Firmware", + "firmware_build_date": "Ngày build firmware", + "force_remove": "Buộc xóa", + "force_remove_notice": "Chỉ sử dụng như phương án cuối cùng (sẽ không lan truyền đến mạng)", + "ieee_address": "Địa chỉ IEEE", + "interview": "Phỏng vấn", + "interview_failed": "Phỏng vấn thất bại", + "interviewing": "Đang phỏng vấn", + "interview_state": "Trạng thái phỏng vấn", + "last_seen": "Lần cuối thấy", + "lqi": "LQI", + "manufacturer": "Nhà sản xuất", + "max_rep_interval": "Khoảng thời gian báo cáo tối đa", + "min_rep_change": "Thay đổi báo cáo tối thiểu", + "min_rep_interval": "Khoảng thời gian báo cáo tối thiểu", + "model": "Mẫu", + "network_address": "Địa chỉ mạng", + "network_address_hex": "Địa chỉ mạng ở định dạng thập lục phân", + "network_address_dec": "Địa chỉ mạng ở định dạng thập phân", + "none": "Không có", + "pic": "Hình", + "power": "Nguồn điện", + "power_level": "mức nguồn điện", + "reconfigure": "Cấu hình lại", + "remove_device": "Xóa thiết bị", + "rename_device": "Đổi tên thiết bị", + "select_attribute": "Chọn thuộc tính", + "select_cluster": "Chọn cụm", + "support_status": "Trạng thái hỗ trợ", + "unsupported": "Không hỗ trợ", + "updating_firmware": "Đang cập nhật firmware", + "update_Home_assistant_entity_id": "Cập nhật ID thực thể Home Assistant", + "zigbee_manufacturer": "Nhà sản xuất Zigbee", + "zigbee_model": "Mẫu Zigbee", + "device": "Thiết bị", + "channel": "Kênh", + "possible": "Có thể", + "available": "Có sẵn", + "edit_description": "Chỉnh sửa mô tả", + "save_description": "Lưu mô tả", + "update_description": "Cập nhật mô tả", + "read_write_attributes": "Đọc / Ghi thuộc tính từ cụm điểm cuối", + "input_clusters": "Cụm đầu vào", + "output_clusters": "Cụm đầu ra", + "custom_clusters": "Cụm tùy chỉnh", + "other_zcl_clusters": "Các cụm ZCL khác", + "how_to_add_support": "Làm thế nào để thêm hỗ trợ?", + "submit_converter": "Gửi bộ chuyển đổi", + "request_support": "Yêu cầu hỗ trợ", + "report_problem": "Báo cáo vấn đề", + "group": "Nhóm", + "type": "Loại", + "EndDevice": "Thiết bị cuối", + "Router": "Router", + "GreenPower": "GreenPower", + "Unknown": "Không xác định", + "Coordinator": "Coordinator", + "power_source": "Nguồn điện", + "battery_low": "Pin yếu", + "battery_level": "Mức pin" + }, + "scene": { + "manage_scenes_header": "Quản lý cảnh", + "add_update_header": "Thêm/cập nhật cảnh", + "scene_id": "ID cảnh", + "recall": "Gọi lại", + "store": "Lưu trữ", + "remove": "Xóa", + "remove_all": "Xóa tất cả", + "add": "Thêm", + "select_scene": "Chọn cảnh", + "scene_name": "Tên cảnh" + }, + "stats": { + "byType": "Theo loại thiết bị", + "byPowerSource": "Theo nguồn điện", + "byVendor": "Theo nhà cung cấp", + "byModel": "Theo mẫu", + "total": "Tổng cộng" + }, + "availability": { + "availability": "Tính khả dụng", + "offline": "Ngoại tuyến", + "online": "Trực tuyến", + "disabled": "Đã vô hiệu hóa", + "enabled": "Đã bật" + }, + "devConsole": { + "generate_external_definition": "Tạo định nghĩa bên ngoài", + "generated_external_definition": "Định nghĩa bên ngoài đã tạo", + "state_property": "Thuộc tính trạng thái", + "state_property_info": "Đặt kết quả vào trạng thái thiết bị (chỉ cho đọc)", + "reset_frontend_state": "Đặt lại trạng thái frontend", + "mqtt": "MQTT", + "external_converters": "Bộ chuyển đổi bên ngoài", + "external_extensions": "Tiện ích mở rộng bên ngoài", + "topic": "Chủ đề", + "send_mqtt": "Gửi tin nhắn MQTT", + "mqtt_topic_info": "Bỏ qua 'base_topic', tin nhắn frontend được gửi qua WebSocket trực tiếp đến Zigbee2MQTT.", + "code": "Mã", + "add_update_external_extension": "Thêm hoặc cập nhật tiện ích mở rộng bên ngoài", + "create_new_extension": "Tạo tiện ích mở rộng mới", + "select_extension_to_edit": "Chọn tiện ích mở rộng để chỉnh sửa", + "add_update_external_converter": "Thêm hoặc cập nhật bộ chuyển đổi bên ngoài", + "create_new_converter": "Tạo bộ chuyển đổi mới", + "select_converter_to_edit": "Chọn bộ chuyển đổi để chỉnh sửa", + "codespace_info": "Github Codespace có sẵn để hỗ trợ phát triển", + "show_definition": "Hiển thị định nghĩa", + "hide_definition": "Ẩn định nghĩa" + }, + "contribute": { + "donation_text": "Tại đây bạn có thể cảm ơn chúng tôi vì tất cả công việc khó khăn. Đừng ngần ngại nói điều gì đó tốt đẹp ;)", + "development": "Phát triển", + "contributing": "Đây là nơi bạn có thể tìm thông tin để đóng góp cho dự án này", + "translation": "Dịch thuật" + }, + "settingsSchemaDescriptions": { + "homeassistant": "Tích hợp Home Assistant (khám phá MQTT)", + "homeassistant-enabled": "Bật tích hợp Home Assistant", + "homeassistant-discovery_topic": "Chủ đề khám phá Home Assistant", + "homeassistant-status_topic": "Chủ đề trạng thái Home Assistant", + "homeassistant-legacy_action_sensor": "Cảm biến hành động cũ Home Assistant, khi được bật, một cảm biến hành động sẽ được khám phá và một `action` trống sẽ được gửi sau mỗi hành động được xuất bản.", + "homeassistant-experimental_event_entities": "Thực thể sự kiện thử nghiệm Home Assistant, khi được bật Zigbee2MQTT sẽ thêm thực thể sự kiện cho các hành động được hiển thị. Các sự kiện và thuộc tính hiện được coi là thử nghiệm và có thể thay đổi.", + "availability": "Kiểm tra xem thiết bị có trực tuyến/ngoại tuyến không", + "availability-enabled": "Bật kiểm tra tính khả dụng", + "availability-active": "Tùy chọn cho thiết bị hoạt động (router/nguồn điện chính)", + "availability-active-timeout": "Thời gian sau đó thiết bị hoạt động sẽ được đánh dấu là ngoại tuyến tính bằng phút", + "availability-active-max_jitter": "Jitter tối đa (tính bằng msec) được phép trên timeout để tránh ping khả dụng cố gắng kích hoạt cùng lúc", + "availability-active-backoff": "Bật backoff timeout trên ping khả dụng thất bại (x1.5, x3, x6, x12...)", + "availability-active-pause_on_backoff_gt": "Tạm dừng ping khả dụng khi backoff vượt quá giới hạn này cho đến khi nhận được tin nhắn Zigbee mới từ thiết bị. Giá trị zero sẽ vô hiệu hóa tạm dừng.", + "availability-passive": "Tùy chọn cho thiết bị thụ động (chủ yếu chạy bằng pin)", + "availability-passive-timeout": "Thời gian sau đó thiết bị thụ động sẽ được đánh dấu là ngoại tuyến tính bằng phút", + "mqtt-base_topic": "Chủ đề MQTT cơ sở cho tin nhắn MQTT Zigbee2MQTT", + "mqtt-server": "URL máy chủ MQTT (sử dụng mqtts:// cho kết nối SSL/TLS)", + "mqtt-keepalive": "MQTT keepalive tính bằng giây", + "mqtt-ca": "Đường dẫn tuyệt đối đến chứng chỉ SSL/TLS của CA được sử dụng để ký chứng chỉ máy chủ và máy khách", + "mqtt-key": "Đường dẫn tuyệt đối đến khóa SSL/TLS cho xác thực máy khách", + "mqtt-cert": "Đường dẫn tuyệt đối đến chứng chỉ SSL/TLS cho xác thực máy khách", + "mqtt-user": "Người dùng xác thực máy chủ MQTT", + "mqtt-password": "Mật khẩu xác thực máy chủ MQTT", + "mqtt-client_id": "ID máy khách MQTT", + "mqtt-reject_unauthorized": "Vô hiệu hóa chứng chỉ SSL tự ký", + "mqtt-include_device_information": "Bao gồm thông tin thiết bị trong tin nhắn mqtt", + "mqtt-version": "Phiên bản giao thức MQTT", + "mqtt-force_disable_retain": "Vô hiệu hóa retain cho tất cả tin nhắn gửi. CHỈ bật nếu broker MQTT của bạn không hỗ trợ tin nhắn retained (ví dụ: AWS IoT core, Azure IoT Hub, Google Cloud IoT core, IBM Watson IoT Platform). Việc bật sẽ phá vỡ tích hợp Home Assistant", + "mqtt-maximum_packet_size": "Chỉ định độ dài gói tối đa được phép (tính bằng byte) mà máy chủ có thể gửi đến Zigbee2MQTT. LƯU Ý: Cùng một giá trị tồn tại trong broker MQTT của bạn nhưng cho độ dài mà máy khách có thể gửi đến nó thay thế.", + "serial-port": "Vị trí của adapter. Để tự động phát hiện cổng, đặt null", + "serial-disable_led": "Vô hiệu hóa LED của adapter nếu được hỗ trợ", + "serial-adapter": "Loại adapter, không cần thiết trừ khi bạn gặp vấn đề", + "serial-baudrate": "Tốc độ baud rate cho cổng serial. Điều này phải khớp với những gì firmware trên adapter của bạn hỗ trợ (thường là 115200).", + "serial-rtscts": "Điều khiển luồng phần cứng RTS / CTS cho cổng serial", + "blocklist": "Chặn thiết bị khỏi mạng (theo ieeeAddr)", + "passlist": "Chỉ cho phép một số thiết bị nhất định tham gia mạng (theo ieeeAddr). Lưu ý rằng tất cả thiết bị không có trong passlist sẽ bị xóa khỏi mạng!", + "ota-update_check_interval": "Thiết bị của bạn có thể yêu cầu kiểm tra cập nhật firmware mới. Giá trị này xác định tần suất máy chủ bên thứ ba thực sự có thể được liên hệ để tìm cập nhật firmware. Giá trị được đặt tính bằng phút, và mặc định là 1 ngày.", + "ota-disable_automatic_update_check": "Thiết bị Zigbee có thể yêu cầu cập nhật firmware, và làm điều này thường xuyên, khiến Zigbee2MQTT liên hệ với máy chủ bên thứ ba. Nếu bạn vô hiệu hóa các kiểm tra do thiết bị khởi tạo này, bạn vẫn có thể khởi tạo kiểm tra cập nhật firmware thủ công.", + "ota-zigbee_ota_override_index_location": "Vị trí của tệp chỉ mục OTA ghi đè", + "ota-image_block_response_delay": "Giới hạn tốc độ yêu cầu (tính bằng mili giây) trong quá trình cập nhật OTA để giảm tắc nghẽn mạng. Bạn có thể tăng giá trị này nếu mạng của bạn có vẻ không ổn định trong quá trình OTA.", + "ota-default_maximum_data_size": "Kích thước của các khối tệp được gửi trong quá trình cập nhật (tính bằng byte). Lưu ý: Giá trị này có thể bị bỏ qua đối với các nhà sản xuất yêu cầu giá trị cụ thể.", + "frontend-enabled": "Bật frontend", + "frontend-package": "Gói được sử dụng cho frontend", + "frontend-port": "Cổng liên kết frontend. Bị bỏ qua khi sử dụng unix domain socket", + "frontend-host": "Host liên kết frontend. Liên kết với unix socket khi đường dẫn tuyệt đối được cung cấp thay thế.", + "frontend-auth_token": "Bật xác thực, mặc định bị vô hiệu hóa", + "frontend-url": "URL mà frontend có thể được truy cập, hiện chỉ được sử dụng cho trang cấu hình thiết bị Home Assistant", + "frontend-ssl_cert": "Đường dẫn tệp chứng chỉ SSL để hiển thị HTTPS. Thuộc tính anh em 'ssl_key' phải được đặt để HTTPS được kích hoạt.", + "frontend-ssl_key": "Đường dẫn tệp khóa SSL để hiển thị HTTPS. Thuộc tính anh em 'ssl_cert' phải được đặt để HTTPS được kích hoạt.", + "frontend-base_url": "URL cơ sở cho frontend. Nếu được lưu trữ dưới đường dẫn con, ví dụ: 'http://localhost:8080/z2m', đặt thành '/z2m'", + "frontend-notification_filter": "Ẩn thông báo frontend khớp với chuỗi regex được chỉ định. Ví dụ: 'z2m: Failed to ping.*'", + "frontend-disable_ui_serving": "Nếu true, UI frontend không được phục vụ, chỉ WebSocket được duy trì bởi Zigbee2MQTT (bạn cần phải phục vụ UI độc lập theo nhu cầu).", + "advanced-log_rotation": "Xoay log", + "advanced-log_console_json": "Log json console", + "advanced-log_symlink_current": "Tạo symlink đến log hiện tại trong thư mục log", + "advanced-log_output": "Vị trí đầu ra của log, để trống để ngăn chặn logging", + "advanced-log_directory": "Vị trí thư mục log", + "advanced-log_file": "Tên tệp log, cũng có thể chứa timestamp", + "advanced-log_level": "Mức logging", + "advanced-log_namespaced_levels": "Đặt mức log riêng cho các namespace nhất định", + "advanced-log_debug_to_mqtt_frontend": "Log mức debug đến MQTT và frontend (có thể giảm hiệu suất tổng thể)", + "advanced-log_debug_namespace_ignore": "Không log các namespace này (dựa trên regex) cho mức debug", + "advanced-log_directories_to_keep": "Số thư mục log cần giữ trước khi xóa thư mục cũ nhất", + "advanced-log_syslog-host": "Host chạy syslogd, mặc định là localhost.", + "advanced-log_syslog-port": "Cổng trên host mà syslog đang chạy, mặc định là cổng mặc định của syslogd.", + "advanced-log_syslog-protocol": "Giao thức mạng để log qua (ví dụ: tcp4, udp4, tls4, unix, unix-connect, v.v.).", + "advanced-log_syslog-path": "Đường dẫn đến socket dgram syslog (tức là /dev/log hoặc /var/run/syslog cho OS X).", + "advanced-log_syslog-pid": "PID của tiến trình mà tin nhắn log đến từ (Mặc định process.pid).", + "advanced-log_syslog-localhost": "Host để chỉ ra rằng tin nhắn log đến từ (Mặc định: localhost).", + "advanced-log_syslog-type": "Loại giao thức syslog để sử dụng (Mặc định: BSD, cũng hợp lệ: 5424).", + "advanced-log_syslog-app_name": "Tên của ứng dụng (Mặc định: Zigbee2MQTT).", + "advanced-log_syslog-eol": "Ký tự cuối dòng được thêm vào cuối tin nhắn (Mặc định: Tin nhắn không có sửa đổi).", + "advanced-pan_id": "ID pan Zigbee, thay đổi yêu cầu ghép lại tất cả thiết bị!", + "advanced-ext_pan_id": "ID pan mở rộng Zigbee, thay đổi yêu cầu ghép lại tất cả thiết bị!", + "advanced-channel": "Kênh Zigbee, thay đổi có thể yêu cầu ghép lại một số thiết bị! (Lưu ý: sử dụng kênh ZLL: 11, 15, 20, hoặc 25 để tránh vấn đề)", + "advanced-adapter_concurrent": "Đồng thời adapter (ví dụ: 2 cho CC2531 hoặc 16 cho CC26X2R1) (mặc định: null, sử dụng giá trị được khuyến nghị)", + "advanced-adapter_delay": "Độ trễ adapter", + "advanced-cache_state": "Payload tin nhắn MQTT sẽ chứa tất cả thuộc tính, không chỉ những cái đã thay đổi. Phải là true khi tích hợp qua Home Assistant", + "advanced-cache_state_persistent": "Duy trì trạng thái được cache, chỉ được sử dụng khi cache_state: true", + "advanced-cache_state_send_on_startup": "Gửi trạng thái được cache khi khởi động, chỉ được sử dụng khi cache_state: true", + "advanced-last_seen": "Thêm thuộc tính last_seen vào tin nhắn MQTT, chứa ngày/giờ của tin nhắn Zigbee cuối cùng", + "advanced-elapsed": "Thêm thuộc tính elapsed vào tin nhắn MQTT, chứa mili giây kể từ msg trước đó", + "advanced-network_key": "Khóa mã hóa mạng, thay đổi yêu cầu ghép lại tất cả thiết bị!", + "advanced-timestamp_format": "Định dạng timestamp log (xem https://github.com/taylorhakes/fecha?tab=readme-ov-file#formatting-tokens cho tất cả token được hỗ trợ)", + "advanced-transmit_power": "Công suất truyền của adapter, chỉ có sẵn cho adapter Z-Stack (CC253*/CC2652/CC1352), CC2652 = 5dbm, CC1352 tối đa = 20dbm (mặc định 5dbm)", + "advanced-output": "Ví dụ khi 'state' của thiết bị được xuất bản json: topic: 'zigbee2mqtt/my_bulb' payload '{\"state\": \"ON\"}' attribute: topic 'zigbee2mqtt/my_bulb/state' payload 'ON' attribute_and_json: cả json và attribute (xem ở trên)", + "health": "Kiểm tra định kỳ sức khỏe của Zigbee2MQTT", + "health-interval": "Khoảng thời gian giữa các lần kiểm tra tính bằng phút", + "health-reset_on_check": "Nếu true, sẽ đặt lại thống kê mỗi khi kiểm tra sức khỏe được thực hiện (chỉ áp dụng cho thống kê có thể được đặt lại).", + "definitions-device-friendly_name": "Được sử dụng trong chủ đề MQTT của thiết bị. Mặc định đây là ID thiết bị", + "definitions-device-retain": "Giữ lại tin nhắn MQTT của thiết bị này", + "definitions-device-disabled": "Vô hiệu hóa thiết bị (loại trừ thiết bị khỏi quét mạng, khả dụng và cập nhật trạng thái nhóm)", + "definitions-device-retention": "Đặt MQTT Message Expiry tính bằng giây, Đảm bảo đặt mqtt.version thành 5", + "definitions-device-qos": "Mức QoS cho tin nhắn MQTT của thiết bị này", + "definitions-device-throttle": "Thời gian tối thiểu giữa các payload tính bằng giây. Payload nhận được trong khi thiết bị đang bị throttle sẽ bị loại bỏ", + "definitions-device-debounce": "Debounce tin nhắn của thiết bị này", + "definitions-device-debounce_ignore": "Bảo vệ giá trị payload duy nhất của các thuộc tính payload được chỉ định khỏi việc ghi đè trong thời gian debounce", + "definitions-device-optimistic": "Xuất bản trạng thái lạc quan sau khi set", + "definitions-device-filtered_attributes": "Lọc thuộc tính bằng regex từ payload được xuất bản.", + "definitions-device-filtered_cache": "Lọc thuộc tính bằng regex khỏi việc được thêm vào cache, điều này ngăn thuộc tính khỏi việc có trong payload được xuất bản khi giá trị không thay đổi.", + "definitions-device-filtered_optimistic": "Lọc thuộc tính bằng regex từ payload xuất bản lạc quan khi gọi /set. (Điều này không có hiệu lực nếu optimistic được đặt thành false).", + "definitions-device-icon": "Biểu tượng thiết bị do người dùng định nghĩa cho frontend. Nó có thể là liên kết URL đầy đủ đến hình ảnh (ví dụ: https://SOME.SITE/MODEL123.jpg) hoặc đường dẫn đến tệp cục bộ bên trong thư mục `device_icons` (ví dụ: device_icons/MODEL123.png).", + "definitions-device-homeassistant-name": "Tên của thiết bị trong Home Assistant", + "definitions-group-qos": "Mức QoS cho tin nhắn MQTT của nhóm này", + "definitions-group-off_state": "Điều khiển khi nào xuất bản trạng thái OFF hoặc CLOSE cho nhóm. 'all_members_off': chỉ xuất bản trạng thái OFF/CLOSE khi tất cả thành viên nhóm ở trạng thái OFF/CLOSE, 'last_member_state': xuất bản trạng thái OFF bất cứ khi nào một trong các thành viên của nó thay đổi thành OFF" + } +}