From 81f2aa17d4b44d7fdafa31c3067f9ba2a9c99460 Mon Sep 17 00:00:00 2001 From: dominhhieu1405 Date: Mon, 17 Nov 2025 22:28:08 +0700 Subject: [PATCH] Add vietnamese --- frontend/src/locale/IntlProvider.tsx | 7 + frontend/src/locale/src/HelpDoc/index.ts | 3 +- .../src/locale/src/HelpDoc/vi/AccessLists.md | 11 + .../src/locale/src/HelpDoc/vi/Certificates.md | 25 + .../src/locale/src/HelpDoc/vi/DeadHosts.md | 8 + .../src/locale/src/HelpDoc/vi/ProxyHosts.md | 7 + .../locale/src/HelpDoc/vi/RedirectionHosts.md | 5 + frontend/src/locale/src/HelpDoc/vi/Streams.md | 6 + frontend/src/locale/src/HelpDoc/vi/index.ts | 6 + frontend/src/locale/src/lang-list.json | 3 + frontend/src/locale/src/vi.json | 647 ++++++++++++++++++ 11 files changed, 727 insertions(+), 1 deletion(-) create mode 100644 frontend/src/locale/src/HelpDoc/vi/AccessLists.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/Certificates.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/DeadHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/Streams.md create mode 100644 frontend/src/locale/src/HelpDoc/vi/index.ts create mode 100644 frontend/src/locale/src/vi.json diff --git a/frontend/src/locale/IntlProvider.tsx b/frontend/src/locale/IntlProvider.tsx index f0f347aeb8..784364e5ea 100755 --- a/frontend/src/locale/IntlProvider.tsx +++ b/frontend/src/locale/IntlProvider.tsx @@ -8,6 +8,7 @@ import langRu from "./lang/ru.json"; import langSk from "./lang/sk.json"; import langZh from "./lang/zh.json"; import langPl from "./lang/pl.json"; +import langVi from "./lang/vi.json"; // first item of each array should be the language code, // not the country code @@ -21,6 +22,7 @@ const localeOptions = [ ["sk", "sk-SK"], ["zh", "zh-CN"], ["pl", "pl-PL"], + ["vi", "vi-VN"], ]; const loadMessages = (locale?: string): typeof langList & typeof langEn => { @@ -40,6 +42,8 @@ const loadMessages = (locale?: string): typeof langList & typeof langEn => { return Object.assign({}, langList, langEn, langZh); case "pl": return Object.assign({}, langList, langEn, langPl); + case "vi": + return Object.assign({}, langList, langEn, langVi); default: return Object.assign({}, langList, langEn); } @@ -68,6 +72,9 @@ const getFlagCodeForLocale = (locale?: string) => { case "pl": case "pl-PL": return "PL"; + case "vi": + case "vi-VN": + return "VN"; default: return "EN"; } diff --git a/frontend/src/locale/src/HelpDoc/index.ts b/frontend/src/locale/src/HelpDoc/index.ts index af33919e7c..e1ab4a758c 100644 --- a/frontend/src/locale/src/HelpDoc/index.ts +++ b/frontend/src/locale/src/HelpDoc/index.ts @@ -5,8 +5,9 @@ import * as pl from "./pl/index"; import * as ru from "./ru/index"; import * as sk from "./sk/index"; import * as zh from "./zh/index"; +import * as vi from "./vi/index"; -const items: any = { en, de, ja, sk, zh, pl, ru }; +const items: any = { en, de, ja, sk, zh, pl, ru, vi }; const fallbackLang = "en"; diff --git a/frontend/src/locale/src/HelpDoc/vi/AccessLists.md b/frontend/src/locale/src/HelpDoc/vi/AccessLists.md new file mode 100644 index 0000000000..50e5375a4c --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/AccessLists.md @@ -0,0 +1,11 @@ +## Khái niệm Access List là gì? + +Access List (Danh sách truy cập) cung cấp cơ chế chặn (blacklist) hoặc cho phép (whitelist) các địa chỉ IP của client, đồng thời hỗ trợ xác thực Basic HTTP Authentication cho các Proxy Host. + +Bạn có thể cấu hình nhiều quy tắc client, nhiều tên người dùng và mật khẩu trong một Access List duy nhất, sau đó áp dụng Access List đó cho một hoặc nhiều Proxy Host. + +Tính năng này đặc biệt hữu ích đối với: + +các dịch vụ web được forward mà không có cơ chế xác thực tích hợp, hoặc + +khi bạn muốn bảo vệ tài nguyên khỏi những client không xác định. diff --git a/frontend/src/locale/src/HelpDoc/vi/Certificates.md b/frontend/src/locale/src/HelpDoc/vi/Certificates.md new file mode 100644 index 0000000000..d25ef00784 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/Certificates.md @@ -0,0 +1,25 @@ +## Hỗ trợ Chứng chỉ + +### Chứng chỉ HTTP (HTTP Certificate) + +Chứng chỉ được xác thực qua HTTP nghĩa là máy chủ của Let's Encrypt sẽ cố gắng truy cập vào tên miền của bạn thông qua HTTP (không phải HTTPS!). Nếu kiểm tra thành công, chứng chỉ sẽ được cấp. + +Với phương thức này, bạn phải tạo trước một Proxy Host cho tên miền, có thể truy cập qua HTTP và trỏ về đúng cài đặt Nginx này. +Sau khi chứng chỉ được cấp, bạn có thể chỉnh sửa Proxy Host để sử dụng chứng chỉ đó cho kết nối HTTPS. + +Tuy nhiên, Proxy Host vẫn phải hỗ trợ truy cập HTTP để việc gia hạn chứng chỉ diễn ra bình thường. + +Phương thức này _không hỗ trợ_ wildcard domain. + +### Chứng chỉ DNS (DNS Certificate) + +Chứng chỉ được xác thực qua DNS yêu cầu bạn sử dụng plugin của DNS Provider. +Plugin này sẽ tạo các bản ghi tạm thời trong DNS của bạn để Let's Encrypt kiểm tra quyền sở hữu tên miền. Nếu hợp lệ, chứng chỉ sẽ được cấp. + +Khi dùng phương thức này: Bạn không cần tạo sẵn Proxy Host trước và bạn không cần mở HTTP cho Proxy Host. + +Phương thức DNS _có hỗ trợ_ wildcard domain. + +### Chứng chỉ tùy chỉnh (Custom Certificate) + +Tùy chọn này cho phép bạn tải lên chứng chỉ SSL của riêng mình, được cung cấp bởi Certificate Authority (CA) mà bạn tự chọn. diff --git a/frontend/src/locale/src/HelpDoc/vi/DeadHosts.md b/frontend/src/locale/src/HelpDoc/vi/DeadHosts.md new file mode 100644 index 0000000000..4c0aae86c2 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/DeadHosts.md @@ -0,0 +1,8 @@ +## 404 Host là gì? + +404 Host đơn giản là một host được thiết lập để hiển thị trang 404. + +Điều này có thể hữu ích khi tên miền của bạn vẫn xuất hiện trên các công cụ tìm kiếm và bạn muốn hiển thị một trang lỗi đẹp hơn, hoặc muốn thông báo rõ ràng cho các trình thu thập dữ liệu tìm kiếm rằng các trang thuộc tên miền đó không còn tồn tại. + +Một lợi ích khác của việc có 404 Host là bạn có thể theo dõi nhật ký truy cập vào nó và +xem các nguồn giới thiệu (referrers). \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md b/frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md new file mode 100644 index 0000000000..969f8a7734 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/ProxyHosts.md @@ -0,0 +1,7 @@ +## Proxy Host là gì? + +Proxy Host là điểm truy cập đầu vào cho một dịch vụ web mà bạn muốn chuyển tiếp. + +Nó cung cấp khả năng kết thúc SSL (SSL termination) tùy chọn cho các dịch vụ vốn không hỗ trợ SSL tích hợp. + +Proxy Host là loại cấu hình phổ biến nhất trong Nginx Proxy Manager. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md b/frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md new file mode 100644 index 0000000000..4339923643 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/RedirectionHosts.md @@ -0,0 +1,5 @@ +## Redirection Host là gì? + +Redirection Host sẽ chuyển hướng các yêu cầu từ tên miền truy cập vào và đưa người xem sang một tên miền khác + +Lý do phổ biến nhất để sử dụng loại host này là khi trang web của bạn đổi sang tên miền mới nhưng vẫn còn các liên kết từ công cụ tìm kiếm hoặc nguồn giới thiệu trỏ về tên miền cũ. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/vi/Streams.md b/frontend/src/locale/src/HelpDoc/vi/Streams.md new file mode 100644 index 0000000000..43cf97b2f6 --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/Streams.md @@ -0,0 +1,6 @@ +## Stream là gì? + +Stream là một tính năng tương đối mới của Nginx, dùng để chuyển tiếp lưu lượng +TCP/UDP trực tiếp tới một máy khác trong mạng. + +Nếu bạn đang vận hành các máy chủ game, FTP hoặc SSH thì tính năng này sẽ rất hữu ích. \ No newline at end of file diff --git a/frontend/src/locale/src/HelpDoc/vi/index.ts b/frontend/src/locale/src/HelpDoc/vi/index.ts new file mode 100644 index 0000000000..a9bb46ba7c --- /dev/null +++ b/frontend/src/locale/src/HelpDoc/vi/index.ts @@ -0,0 +1,6 @@ +export * as AccessLists from "./AccessLists.md"; +export * as Certificates from "./Certificates.md"; +export * as DeadHosts from "./DeadHosts.md"; +export * as ProxyHosts from "./ProxyHosts.md"; +export * as RedirectionHosts from "./RedirectionHosts.md"; +export * as Streams from "./Streams.md"; diff --git a/frontend/src/locale/src/lang-list.json b/frontend/src/locale/src/lang-list.json index 5e3a5c4c70..557b4c2ae9 100755 --- a/frontend/src/locale/src/lang-list.json +++ b/frontend/src/locale/src/lang-list.json @@ -22,5 +22,8 @@ }, "locale-pl-PL": { "defaultMessage": "Polski" + }, + "locale-vi-VN": { + "defaultMessage": "Tiếng Việt" } } diff --git a/frontend/src/locale/src/vi.json b/frontend/src/locale/src/vi.json new file mode 100644 index 0000000000..8290cd4364 --- /dev/null +++ b/frontend/src/locale/src/vi.json @@ -0,0 +1,647 @@ +{ + "access-list": { + "defaultMessage": "Danh sách truy cập" + }, + "access-list.access-count": { + "defaultMessage": "{count} quy tắc" + }, + "access-list.auth-count": { + "defaultMessage": "{count} người dùng" + }, + "access-list.help-rules-last": { + "defaultMessage": "Quy tắc từ chối tất cả này sẽ được thêm vào cuối khi tồn tại ít nhất 1 quy tắc" + }, + "access-list.help.rules-order": { + "defaultMessage": "Các quy tắc cho phép và từ chối sẽ được thực thi theo thứ tự được xác định." + }, + "access-list.pass-auth": { + "defaultMessage": "Chuyển xác thực lên thượng nguồn" + }, + "access-list.public": { + "defaultMessage": "Có thể truy cập công khai" + }, + "access-list.public.subtitle": { + "defaultMessage": "Không cần xác thực cơ bản" + }, + "access-list.satisfy-any": { + "defaultMessage": "Thỏa mãn điều kiện bất kỳ" + }, + "access-list.subtitle": { + "defaultMessage": "{users} người dùng, {rules} quy tắc - Tạo lúc: {date}" + }, + "access-lists": { + "defaultMessage": "Danh sách truy cập" + }, + "action.add": { + "defaultMessage": "Thêm" + }, + "action.add-location": { + "defaultMessage": "Thêm Vị trí" + }, + "action.close": { + "defaultMessage": "Đóng" + }, + "action.delete": { + "defaultMessage": "Xóa" + }, + "action.disable": { + "defaultMessage": "Tắt" + }, + "action.download": { + "defaultMessage": "Tải xuống" + }, + "action.edit": { + "defaultMessage": "Chỉnh sửa" + }, + "action.enable": { + "defaultMessage": "Bật" + }, + "action.permissions": { + "defaultMessage": "Quyền" + }, + "action.renew": { + "defaultMessage": "Gia hạn" + }, + "action.view-details": { + "defaultMessage": "Xem Chi tiết" + }, + "auditlogs": { + "defaultMessage": "Nhật ký kiểm tra" + }, + "cancel": { + "defaultMessage": "Hủy" + }, + "certificate": { + "defaultMessage": "Chứng chỉ" + }, + "certificate.custom-certificate": { + "defaultMessage": "Certificate (crt)" + }, + "certificate.custom-certificate-key": { + "defaultMessage": "Certificate Key" + }, + "certificate.custom-intermediate": { + "defaultMessage": "Intermediate Certificate" + }, + "certificate.in-use": { + "defaultMessage": "Đang sử dụng" + }, + "certificate.none.subtitle": { + "defaultMessage": "Không có chứng chỉ nào được chỉ định" + }, + "certificate.none.subtitle.for-http": { + "defaultMessage": "Máy chủ này sẽ không sử dụng HTTPS" + }, + "certificate.none.title": { + "defaultMessage": "Không có" + }, + "certificate.not-in-use": { + "defaultMessage": "Không được dùng" + }, + "certificate.renew": { + "defaultMessage": "Gia hạn Chứng chỉ" + }, + "certificates": { + "defaultMessage": "Danh sách chứng chỉ" + }, + "certificates.custom": { + "defaultMessage": "Chứng chỉ tùy chỉnh" + }, + "certificates.custom.warning": { + "defaultMessage": "Các tệp chính được bảo vệ bằng cụm mật khẩu không được hỗ trợ." + }, + "certificates.dns.credentials": { + "defaultMessage": "Nội dung tệp thông tin xác thực" + }, + "certificates.dns.credentials-note": { + "defaultMessage": "Plugin này yêu cầu tệp cấu hình chứa mã thông báo API hoặc thông tin xác thực khác cho nhà cung cấp của bạn" + }, + "certificates.dns.credentials-warning": { + "defaultMessage": "Dữ liệu này sẽ được lưu trữ dưới dạng bản rõ trong cơ sở dữ liệu và trong một tệp!" + }, + "certificates.dns.propagation-seconds": { + "defaultMessage": "Thời gian lan truyền (Giây)" + }, + "certificates.dns.propagation-seconds-note": { + "defaultMessage": "Để trống để sử dụng giá trị mặc định của plugin. Số giây chờ truyền DNS." + }, + "certificates.dns.provider": { + "defaultMessage": "Nhà cung cấp DNS" + }, + "certificates.dns.warning": { + "defaultMessage": "Phần này yêu cầu một số kiến thức về Certbot và các plugin DNS của nó. Vui lòng tham khảo tài liệu plugin tương ứng." + }, + "certificates.http.reachability-404": { + "defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng có vẻ như nó không phải là NPM. Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy." + }, + "certificates.http.reachability-failed-to-check": { + "defaultMessage": "Không thể kiểm tra khả năng truy cập do lỗi giao tiếp với site24x7.com." + }, + "certificates.http.reachability-not-resolved": { + "defaultMessage": "Không có máy chủ có sẵn tại tên miền này. Vui lòng đảm bảo rằng miền của bạn tồn tại và trỏ đến IP nơi phiên bản NPM của bạn đang chạy và nếu cần, cổng 80 sẽ được chuyển tiếp trong bộ định tuyến của bạn." + }, + "certificates.http.reachability-ok": { + "defaultMessage": "Máy chủ của bạn có thể truy cập được và có thể tạo chứng chỉ." + }, + "certificates.http.reachability-other": { + "defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng nó trả về mã trạng thái không mong muốn {code}. Đây có phải là máy chủ NPM không? Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy." + }, + "certificates.http.reachability-wrong-data": { + "defaultMessage": "Có một máy chủ được tìm thấy ở miền này nhưng nó trả về một dữ liệu không mong muốn. Đây có phải là máy chủ NPM không? Vui lòng đảm bảo tên miền của bạn trỏ đến IP nơi phiên bản NPM của bạn đang chạy." + }, + "certificates.http.test-results": { + "defaultMessage": "Kết quả kiểm tra" + }, + "certificates.http.warning": { + "defaultMessage": "Các miền này phải được cấu hình sẵn để trỏ đến cài đặt này." + }, + "certificates.request.subtitle": { + "defaultMessage": "bằng Let's Encrypt" + }, + "certificates.request.title": { + "defaultMessage": "Yêu cầu chứng chỉ mới" + }, + "column.access": { + "defaultMessage": "Truy cập" + }, + "column.authorization": { + "defaultMessage": "Ủy quyền" + }, + "column.authorizations": { + "defaultMessage": "Danh sách ủy quyền" + }, + "column.custom-locations": { + "defaultMessage": "Quy tắc đường dẫn tùy chỉnh (Vị trí)" + }, + "column.destination": { + "defaultMessage": "Mục tiêu" + }, + "column.details": { + "defaultMessage": "Chi tiết" + }, + "column.email": { + "defaultMessage": "Email" + }, + "column.event": { + "defaultMessage": "Sự kiện" + }, + "column.expires": { + "defaultMessage": "Hết hạn" + }, + "column.http-code": { + "defaultMessage": "HTTP Code" + }, + "column.incoming-port": { + "defaultMessage": "Cổng đến" + }, + "column.name": { + "defaultMessage": "Tên" + }, + "column.protocol": { + "defaultMessage": "Giao thức" + }, + "column.provider": { + "defaultMessage": "Nhà cung cấp" + }, + "column.roles": { + "defaultMessage": "Vai trò" + }, + "column.rules": { + "defaultMessage": "Quy tắc" + }, + "column.satisfy": { + "defaultMessage": "Thỏa mãn" + }, + "column.satisfy-all": { + "defaultMessage": "Tất cả" + }, + "column.satisfy-any": { + "defaultMessage": "Bất kì" + }, + "column.scheme": { + "defaultMessage": "Scheme" + }, + "column.source": { + "defaultMessage": "Nguồn" + }, + "column.ssl": { + "defaultMessage": "SSL" + }, + "column.status": { + "defaultMessage": "Trạng thái" + }, + "created-on": { + "defaultMessage": "Đã tạo: {date}" + }, + "dashboard": { + "defaultMessage": "Bảng điều khiển" + }, + "dead-host": { + "defaultMessage": "Máy chủ 404" + }, + "dead-hosts": { + "defaultMessage": "Máy chủ 404" + }, + "dead-hosts.count": { + "defaultMessage": "Số trang lỗi {count}" + }, + "disabled": { + "defaultMessage": "Đã tắt" + }, + "domain-names": { + "defaultMessage": "Danh sách tên miền" + }, + "domain-names.max": { + "defaultMessage": "Tối đa {count} tên miền" + }, + "domain-names.placeholder": { + "defaultMessage": "Nhập tên miền vào đây..." + }, + "domain-names.wildcards-not-permitted": { + "defaultMessage": "Ký tự đại diện không được phép cho loại này" + }, + "domain-names.wildcards-not-supported": { + "defaultMessage": "Ký tự đại diện không được hỗ trợ cho CA này" + }, + "domains.force-ssl": { + "defaultMessage": "Bắt buộc SSL" + }, + "domains.hsts-enabled": { + "defaultMessage": "Bật HSTS" + }, + "domains.hsts-subdomains": { + "defaultMessage": "Tên miền phụ HSTS" + }, + "domains.http2-support": { + "defaultMessage": "Hỗ trợ HTTP/2" + }, + "domains.use-dns": { + "defaultMessage": "Dùng thử thách DNS" + }, + "email-address": { + "defaultMessage": "Địa chỉ email" + }, + "empty-search": { + "defaultMessage": "Không có kết quả nào" + }, + "empty-subtitle": { + "defaultMessage": "Tại sao bạn không tạo một cái luôn?" + }, + "enabled": { + "defaultMessage": "Đã bật" + }, + "error.access.at-least-one": { + "defaultMessage": "Yêu cầu ít nhất một quy tắc ủy quyền hoặc truy cập" + }, + "error.access.duplicate-usernames": { + "defaultMessage": "Tên người dùng được ủy quyền phải là duy nhất" + }, + "error.invalid-auth": { + "defaultMessage": "Email hoặc Mật khẩu không hợp lệ" + }, + "error.invalid-domain": { + "defaultMessage": "Tên miền không hợp lệ: {domain}" + }, + "error.invalid-email": { + "defaultMessage": "Địa chỉ email không hợp lệ" + }, + "error.max-character-length": { + "defaultMessage": "Độ dài tối đa là {max} ký tự" + }, + "error.max-domains": { + "defaultMessage": "Quá nhiều tên miền, tối đa là {max}" + }, + "error.maximum": { + "defaultMessage": "Tối đa là {max}" + }, + "error.min-character-length": { + "defaultMessage": "Độ dài tối thiểu là {min} ký tự" + }, + "error.minimum": { + "defaultMessage": "Tối thiểu là {min}" + }, + "error.passwords-must-match": { + "defaultMessage": "Mật khẩu phải khớp" + }, + "error.required": { + "defaultMessage": "Điều này là bắt buộc" + }, + "expires.on": { + "defaultMessage": "Hết hạn: {date}" + }, + "footer.github-fork": { + "defaultMessage": "Fork dự án này trên Github" + }, + "host.flags.block-exploits": { + "defaultMessage": "Chặn các hoạt động khai thác phổ biến" + }, + "host.flags.cache-assets": { + "defaultMessage": "Cache tài nguyên" + }, + "host.flags.preserve-path": { + "defaultMessage": "Bảo toàn đường dẫn" + }, + "host.flags.protocols": { + "defaultMessage": "Giao thức" + }, + "host.flags.websockets-upgrade": { + "defaultMessage": "Hỗ trợ Websockets" + }, + "host.forward-port": { + "defaultMessage": "Chuyển tiếp cổng" + }, + "host.forward-scheme": { + "defaultMessage": "Scheme" + }, + "hosts": { + "defaultMessage": "Máy chủ" + }, + "http-only": { + "defaultMessage": "HTTP Only" + }, + "lets-encrypt": { + "defaultMessage": "Let's Encrypt" + }, + "lets-encrypt-via-dns": { + "defaultMessage": "Let's Encrypt qua DNS" + }, + "lets-encrypt-via-http": { + "defaultMessage": "Let's Encrypt qua HTTP" + }, + "loading": { + "defaultMessage": "Đang tải..." + }, + "login.title": { + "defaultMessage": "Đăng nhập vào tài khoản của bạn" + }, + "nginx-config.label": { + "defaultMessage": "Cấu hình Nginx tùy chỉnh" + }, + "nginx-config.placeholder": { + "defaultMessage": "# Nhập cấu hình Nginx tùy chỉnh của bạn vào đây và bạn phải tự chịu rủi ro!" + }, + "no-permission-error": { + "defaultMessage": "Bạn không có quyền truy cập trang này." + }, + "notfound.action": { + "defaultMessage": "Về trang chủ" + }, + "notfound.content": { + "defaultMessage": "Chúng tôi xin lỗi nhưng trang bạn đang tìm kiếm không được tìm thấy" + }, + "notfound.title": { + "defaultMessage": "Rất tiếc… Bạn vừa tìm thấy một trang lỗi" + }, + "notification.error": { + "defaultMessage": "Lỗi" + }, + "notification.object-deleted": { + "defaultMessage": "{object} đã được xóa" + }, + "notification.object-disabled": { + "defaultMessage": "{object} đã được tắt" + }, + "notification.object-enabled": { + "defaultMessage": "{object} đã được bật" + }, + "notification.object-renewed": { + "defaultMessage": "{object} đã được làm mới" + }, + "notification.object-saved": { + "defaultMessage": "{object} đã được lưu" + }, + "notification.success": { + "defaultMessage": "Thành công" + }, + "object.actions-title": { + "defaultMessage": "{object} #{id}" + }, + "object.add": { + "defaultMessage": "Thêm {object}" + }, + "object.delete": { + "defaultMessage": "Xóa {object}" + }, + "object.delete.content": { + "defaultMessage": "Bạn có chắc muốn xóa {object} không?" + }, + "object.edit": { + "defaultMessage": "Chỉnh sửa {object}" + }, + "object.empty": { + "defaultMessage": "Không có {objects}" + }, + "object.event.created": { + "defaultMessage": "Đã tạo {object}" + }, + "object.event.deleted": { + "defaultMessage": "Đã xóa {object}" + }, + "object.event.disabled": { + "defaultMessage": "Đã tắt {object}" + }, + "object.event.enabled": { + "defaultMessage": "Đã bật {object}" + }, + "object.event.renewed": { + "defaultMessage": "Đã gia hạn {object}" + }, + "object.event.updated": { + "defaultMessage": "Đã cập nhật {object}" + }, + "offline": { + "defaultMessage": "Ngoại tuyến" + }, + "online": { + "defaultMessage": "Trực tuyến" + }, + "options": { + "defaultMessage": "Tùy chọn" + }, + "password": { + "defaultMessage": "Mật khẩu" + }, + "password.generate": { + "defaultMessage": "Tạo mật khẩu ngẫu nhiên" + }, + "password.hide": { + "defaultMessage": "Ẩn Mật khẩu" + }, + "password.show": { + "defaultMessage": "Hiện Mật khẩu" + }, + "permissions.hidden": { + "defaultMessage": "Ẩn" + }, + "permissions.manage": { + "defaultMessage": "Quản lý" + }, + "permissions.view": { + "defaultMessage": "Chỉ xem" + }, + "permissions.visibility.all": { + "defaultMessage": "Tất cả các mục" + }, + "permissions.visibility.title": { + "defaultMessage": "Khả năng hiển thị mục" + }, + "permissions.visibility.user": { + "defaultMessage": "Chỉ các mục đã tạo" + }, + "proxy-host": { + "defaultMessage": "Máy chủ proxy" + }, + "proxy-host.forward-host": { + "defaultMessage": "Chuyển tiếp Hostname / IP" + }, + "proxy-hosts": { + "defaultMessage": "Máy chủ proxy" + }, + "proxy-hosts.count": { + "defaultMessage": "{count} máy chủ proxy" + }, + "public": { + "defaultMessage": "Công khai" + }, + "redirection-host": { + "defaultMessage": "Redirection Host" + }, + "redirection-host.forward-domain": { + "defaultMessage": "Chuyển tiếp Tên miền" + }, + "redirection-host.forward-http-code": { + "defaultMessage": "HTTP Code" + }, + "redirection-hosts": { + "defaultMessage": "Redirection Hosts" + }, + "redirection-hosts.count": { + "defaultMessage": "{count} máy chủ chuyển hướng" + }, + "role.admin": { + "defaultMessage": "Quản trị viên" + }, + "role.standard-user": { + "defaultMessage": "Người dùng bình thường" + }, + "save": { + "defaultMessage": "Lưu" + }, + "setting": { + "defaultMessage": "Cài đặt" + }, + "settings": { + "defaultMessage": "Cài đặt" + }, + "settings.default-site": { + "defaultMessage": "Trang web mặc định" + }, + "settings.default-site.404": { + "defaultMessage": "Trang 404" + }, + "settings.default-site.444": { + "defaultMessage": "Không có phản hồi (444)" + }, + "settings.default-site.congratulations": { + "defaultMessage": "Trang chào mừng" + }, + "settings.default-site.description": { + "defaultMessage": "Hiển thị gì khi Nginx gặp phải Máy chủ không xác định" + }, + "settings.default-site.html": { + "defaultMessage": "HTML tùy chỉnh" + }, + "settings.default-site.html.placeholder": { + "defaultMessage": "" + }, + "settings.default-site.redirect": { + "defaultMessage": "Chuyển hướng" + }, + "setup.preamble": { + "defaultMessage": "Bắt đầu bằng cách tạo tài khoản quản trị viên." + }, + "setup.title": { + "defaultMessage": "Chào mừng!" + }, + "sign-in": { + "defaultMessage": "Đăng nhập" + }, + "ssl-certificate": { + "defaultMessage": "Chứng chỉ SSL" + }, + "stream": { + "defaultMessage": "Stream" + }, + "stream.forward-host": { + "defaultMessage": "Chuyển tiếp Host" + }, + "stream.incoming-port": { + "defaultMessage": "Cổng vào" + }, + "streams": { + "defaultMessage": "Danh sách các Stream" + }, + "streams.count": { + "defaultMessage": "Số Stream {count}" + }, + "streams.tcp": { + "defaultMessage": "TCP" + }, + "streams.udp": { + "defaultMessage": "UDP" + }, + "test": { + "defaultMessage": "Kiểm tra" + }, + "update-available": { + "defaultMessage": "Cập nhật khả dụng: {latestVersion}" + }, + "user": { + "defaultMessage": "Người dùng" + }, + "user.change-password": { + "defaultMessage": "Đổi Mật khẩu" + }, + "user.confirm-password": { + "defaultMessage": "Xác nhận Mật khẩu" + }, + "user.current-password": { + "defaultMessage": "Mật khẩu hiện tại" + }, + "user.edit-profile": { + "defaultMessage": "Chỉnh sửa hồ sơ" + }, + "user.full-name": { + "defaultMessage": "Tên" + }, + "user.login-as": { + "defaultMessage": "Đăng nhập bằng {name}" + }, + "user.logout": { + "defaultMessage": "Đăng xuất" + }, + "user.new-password": { + "defaultMessage": "Mật khẩu mới" + }, + "user.nickname": { + "defaultMessage": "Tên hiển thị" + }, + "user.set-password": { + "defaultMessage": "Đặt Mật khẩu" + }, + "user.set-permissions": { + "defaultMessage": "Đặt quyền cho {name}" + }, + "user.switch-dark": { + "defaultMessage": "Chuyển sang chế độ tối" + }, + "user.switch-light": { + "defaultMessage": "Chuyển sang chế độ sáng" + }, + "username": { + "defaultMessage": "Tên người dùng" + }, + "users": { + "defaultMessage": "Danh sách người dùng" + } +} \ No newline at end of file