diff --git a/client/src/__locales/en.js b/client/src/__locales/en.js
index 12aed070..30f0f4ae 100644
--- a/client/src/__locales/en.js
+++ b/client/src/__locales/en.js
@@ -15,116 +15,120 @@ export default {
homepage: 'Homepage',
report_an_issue: 'Report an issue',
// Dashboard
- enabled_protection:'Enable protection',
- disabled_protection: 'Disable protection',
+ enable_protection: 'Enable protection',
+ enabled_protection: 'Enableed protection',
+ disable_protection: 'Disable protection',
+ disabled_protection: 'Disabled protection',
refresh_statics: 'Refresh statistics',
dns_query: 'DNS Queries',
- 'Blocked by': 'Chặn bởi',
- 'Blocked malware/phishing': 'Mã độc/lừa đảo đã chặn',
- 'Blocked adult websites': 'Website người lớn đã chặn',
- 'Top queried domains': 'Tên miền truy vấn nhiều',
- 'for the last 24 hours': 'trong 24 giờ qua',
- 'No domains found': 'Không có tên miền nào',
- 'Requests count': 'Số lần yêu cầu',
- 'Top blocked domains': 'Tên miền chặn nhiều',
- 'Top clients': 'Client dùng nhiều',
- 'No clients found': 'Không có client nào',
- 'General statistics': 'Thống kê chung',
- 'A number of DNS quieries processed for the last 24 hours': 'Số yêu cầu DNS đã xử lý trong 24 giờ qua',
- 'A number of DNS requests blocked by adblock filters and hosts blocklists': 'Số yêu cầu DNS bị chặn bởi bộ lọc quảng cáo và danh sách chặn host',
- 'A number of DNS requests blocked by the AdGuard browsing security module': 'Số yêu cầu DNS bị chặn bởi chế độ bảo vệ duyệt web AdGuard',
- 'A number of adult websites blocked': 'Số website người lớn đã chặn',
- 'Enforced safe search': 'Tìm kiếm an toàn',
- 'A number of DNS requests to search engines for which Safe Search was enforced': 'Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn',
- 'Average processing time': 'Thời gian xử lý trung bình',
- 'Average time in milliseconds on processing a DNS request': 'Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây',
+ blocked_by: 'Blocked by',
+ stats_malware_phishing: 'Blocked malware/phishing',
+ stats_adult: 'Blocked adult websites',
+ stats_query_domain: 'Top queried domains',
+ for_last_24_hours: 'for the last 24 hours',
+ no_domains_found: 'No domains found',
+ requests_count: 'Requests count',
+ top_blocked_domains: 'Top blocked domains',
+ top_clients: 'Top clients',
+ no_clients_found: 'No clients found',
+ general_statistics: 'General statistics',
+ number_of_dns_query_24_hours: 'A number of DNS quieries processed for the last 24 hours',
+ number_of_dns_query_blocked_24_hours: 'A number of DNS requests blocked by adblock filters and hosts blocklists',
+ number_of_dns_query_blocked_24_hours_by_sec: 'A number of DNS requests blocked by the AdGuard browsing security module',
+ number_of_dns_query_blocked_24_hours_adult: 'A number of adult websites blocked',
+ enforced_save_search: 'Enforced safe search',
+ number_of_dns_query_to_safe_search: 'A number of DNS requests to search engines for which Safe Search was enforced',
+ average_processing_time: 'Average processing time',
+ average_processing_time_hint: 'Average time in milliseconds on processing a DNS request',
// Settings
- 'Block domains using filters and hosts files': 'Chặn tên miền sử dụng các bộ lọc và file hosts',
- 'You can setup blocking rules in the Filters settings.': 'Bạn có thể thiết lập quy tắc chặn tại cài đặt Bộ lọc.',
- 'Use AdGuard browsing security web service': 'Sử dụng dịch vụ bảo vệ duyệt web AdGuard',
- 'AdGuard Home will check if domain is blacklisted by the browsing security web service. It will use privacy-friendly lookup API to perform the check: only a short prefix of the domain name SHA256 hash is sent to the server.': 'AdGuard Home sẽ kiểm tra tên miền với dịch vụ bảo vệ duyệt web. Tính năng sử dụng một API thân thiện với quyền riêng tư: chỉ một phần ngắn tiền tố mã băm SHA256 được gửi đến máy chủ',
- 'Use AdGuard parental control web service': 'Sử dụng dịch vụ quản lý của phụ huynh AdGuard',
- 'AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.': 'AdGuard Home sẽ kiểm tra nếu tên miền chứa từ khoá người lớn. Tính năng sử dụng API thân thiện với quyền riêng tư tương tự với dịch vụ bảo vệ duyệt web',
- 'Enforce safe search': 'Bắt buộc tìm kiếm an toàn',
- 'AdGuard Home can enforce safe search in the following search engines: Google, Bing, Yandex.': 'AdGuard Home có thể bắt buộc tìm kiếm an toàn với các dịch vụ tìm kiếm: Google, Bing, Yandex.',
- 'No servers specified': 'Không có máy chủ nào được liệt kê',
- 'No settings': 'Không có cài đặt nào',
- 'General settings': 'Cài đặt chung',
- 'Upstream DNS servers': 'Máy chủ DNS tìm kiếm',
- 'If you keep this field empty, AdGuard Home will use Cloudflare DNS as an upstream. Use tls:// prefix for DNS over TLS servers.': 'Nếu bạn để trống mục này, AdGuard Home sẽ sử dụng Cloudflare DNS để tìm kiếm. Sử dụng tiền tố tls:// cho các máy chủ DNS dựa trên TLS.',
- 'Test upstreams': 'Kiểm tra',
- Apply: 'Áp dụng',
+ block_domain_use_filters_and_hosts: 'Block domains using filters and hosts files',
+ filters_block_toggle_hint: 'You can setup blocking rules in the Filters settings.',
+ use_adguard_browsing_sec: 'Use AdGuard browsing security web service',
+ use_adguard_browsing_sec_hint: 'AdGuard Home will check if domain is blacklisted by the browsing security web service. It will use privacy-friendly lookup API to perform the check: only a short prefix of the domain name SHA256 hash is sent to the server.',
+ use_adguard_parental: 'Use AdGuard parental control web service',
+ use_adguard_parental_hint: 'AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.',
+ enforce_safe_search: 'Enforce safe search',
+ enforce_save_search_hint: 'AdGuard Home can enforce safe search in the following search engines: Google, Bing, Yandex.',
+ no_servers_specified: 'No servers specified',
+ no_settings: 'No settings',
+ general_settings: 'General settings',
+ upstream_dns: 'Upstream DNS servers',
+ upstream_dns_hint: 'If you keep this field empty, AdGuard Home will use Cloudflare DNS as an upstream. Use tls:// prefix for DNS over TLS servers.',
+ test_upstream_btn: 'Test upstreams',
+ apply_btn: 'Apply',
// Settings Toasts
- 'Disabled filtering': 'Đã tắt chặn quảng cáo',
- 'Enabled filtering': 'Đã bật chặn quảng cáo',
- 'Disabled safebrowsing': 'Đã tắt bảo vệ duyệt web',
- 'Enabled safebrowsing': 'Đã bật bảo vệ duyệt web',
- 'Disabled parental control': 'Đã tắt quản lý của phụ huynh',
- 'Enabled parental control': 'Đã bật quản lý của phụ huynh',
- 'Disabled safe search': 'Đã tắt tìm kiếm an toàn',
- 'Enabled safe search': 'Đã bật tìm kiếm an toàn',
+ disabled_filtering_toast: 'Disabled filtering',
+ enabled_filtering_toast: 'Enabled filtering',
+ disabled_safe_browsing_toast: 'Disabled safebrowsing',
+ enabled_safe_browsing_toast: 'Enabled safebrowsing',
+ disabled_parental_toast: 'Disabled parental control',
+ enabled_parental_toast: 'Enabled parental control',
+ disabled_safe_search_toast: 'Disabled safe search',
+ enabled_save_search_toast: 'Enabled safe search',
// Filters
- Enabled: 'Kích hoạt',
- Name: 'Tên',
- 'Filter URL': 'URL bộ lọc',
- 'Rules count': 'Số quy tắc',
- 'Last time updated': 'Cập nhật cuối',
- Actions: 'Thao tác',
- Delete: 'Xoá',
- 'Filters and hosts blocklists': 'Danh sách bộ lọc và hosts',
- 'AdGuard Home understands basic adblock rules and hosts files syntax.': 'AdGuard home hiểu các quy tắc chặn quảng cáo đơn giản và cú pháp file hosts',
- 'No filters added': 'Không có bộ lọc nào được thêm',
- 'Add filter': 'Thêm bộ lọc',
- Cancel: 'Huỷ',
- 'Enter name': 'Nhập tên',
- 'Enter URL': 'Nhập URL',
- 'Check updates': 'Kiểm tra cập nhật',
- 'New filter subscription': 'Đăng ký bộ lọc mới',
- 'Enter a valid URL to a filter subscription or a hosts file.': 'Nhập URL hợp lệ của bộ lọc hoặc file hosts',
- 'Custom filtering rules': 'Quy tắc lọc tuỳ chỉnh',
- 'Enter one rule on a line. You can use either adblock rules or hosts files syntax.': 'Nhập mỗi quy tắc 1 dòng. Có thể sử dụng quy tắc chặn quảng cáo hoặc cú pháp file host',
- Examples: 'Ví dụ',
- 'block access to the example.org domain and all its subdomains': 'Chặn truy cập tới tên miền example.org và tất cả tên miền con',
- 'unblock access to the example.org domain and all its subdomains': 'Không chặn truy cập tới tên miền example.org và tất cả tên miền con',
- 'AdGuard Home will now return 127.0.0.1 address for the example.org domain (but not its subdomains).': 'AdGuard Home sẽ phản hồi địa chỉ IP 127.0.0.1 cho tên miền example.org (không áp dụng tên miền con)',
- '! Here goes a comment': '! Đây là một chú thích',
- 'just a comment': 'Chỉ là một chú thích',
- '# Also a comment': '# Cũng là một chú thích',
- 'All filters are already up-to-date': 'Tất cả bộ lọc đã được cập nhật',
- 'Updated the upstream DNS servers': 'Đã cập nhật máy chủ DNS tìm kiếm',
- 'Specified DNS servers are working correctly': 'Máy chủ DNS có thể sử dụng',
- 'Server "{{key}}": could not be used, please check that you\'ve written it correctly': 'Máy chủ "{{key}}": không thể sử dụng, vui lòng kiểm tra bạn đã điền chính xác',
+ enabled_table_header: 'Enabled',
+ name_table_header: 'Name',
+ filter_url_table_header: 'Filter URL',
+ rules_count_table_header: 'Rules count',
+ last_time_updated_table_header: 'Last time updated',
+ actions_table_header: 'Actions',
+ delete_table_action: 'Delete',
+ filters_and_hosts: 'Filters and hosts blocklists',
+ filters_and_hosts_hint: 'AdGuard Home understands basic adblock rules and hosts files syntax.',
+ no_filters_added: 'No filters added',
+ add_filter_btn: 'Add filter',
+ cancel_btn: 'Cancel',
+ enter_name_hint: 'Enter name',
+ enter_url_hint: 'Enter URL',
+ check_updates_btn: 'Check updates',
+ new_filter_btn: 'New filter subscription',
+ enter_valid_filter_url: 'Enter a valid URL to a filter subscription or a hosts file.',
+ custom_filter_rules: 'Custom filtering rules',
+ custom_filter_rules_hint: 'Enter one rule on a line. You can use either adblock rules or hosts files syntax.',
+ examples_title: 'Examples',
+ example_meaning_filter_block: 'block access to the example.org domain and all its subdomains',
+ example_meaning_filter_whitelist: 'unblock access to the example.org domain and all its subdomains',
+ example_meaning_host_block: 'AdGuard Home will now return 127.0.0.1 address for the example.org domain (but not its subdomains).',
+ example_comment: '! Here goes a comment',
+ example_comment_meaning: 'just a comment',
+ example_comment_hash: '# Also a comment',
+ all_filters_up_to_date_toast: 'All filters are already up-to-date',
+ updated_upstream_dns_toast: 'Updated the upstream DNS servers',
+ dns_test_ok_toast: 'Specified DNS servers are working correctly',
+ dns_test_not_ok_toast: 'Server "{{key}}": could not be used, please check that you\'ve written it correctly',
// Logs
- Unblock: 'Bỏ chặn',
- Block: 'Chặn',
- Time: 'Thời gian',
- 'Domain name': 'Tên miền',
- Type: 'Loại',
- Response: 'Phản hồi',
- Empty: 'Rỗng',
- 'Show all': 'Hiện tất cả',
- 'Show filtered': 'Chỉ hiện đã chặn',
- 'No logs found': 'Không có lịch sử truy vấn',
- 'Disable log': 'Tắt lịch sử truy vấn',
- 'Download log file': 'Tải tập tin lịch sử truy vấn',
- Refresh: 'Làm mới',
- 'Enable log': 'Bật lịch sử truy vấn',
- 'Last 5000 DNS queries': '5000 truy vấn DNS gần nhất',
- Previous: 'Trang trước',
- Next: 'Trang sau',
- 'Loading...': 'Đang tải...',
- Page: 'Trang',
- of: 'của',
- rows: 'hàng',
- 'Updated the custom filtering rules': 'Đã cập nhật quy tắc lọc tuỳ chỉnh',
- 'Rule removed from the custom filtering rules': 'Quy tắc đã được xoá khỏi quy tắc lọc tuỳ chỉnh',
- 'Rule added to the custom filtering rules': 'Quy tắc đã được thêm vào quy tắc lọc tuỳ chỉnh',
+ ublock_btn: 'Unblock',
+ block_btn: 'Block',
+ time_table_header: 'Time',
+ domain_name_table_header: 'Domain name',
+ type_table_header: 'Type',
+ response_table_header: 'Response',
+ empty_response_status: 'Empty',
+ show_all_filter_type: 'Show all',
+ show_filtered_type: 'Show filtered',
+ no_logs_found: 'No logs found',
+ disabled_log_btn: 'Disable log',
+ download_log_file_btn: 'Download log file',
+ refresh_btn: 'Refresh',
+ enabled_log_btn: 'Enable log',
+ last_5000_dns_queries: 'Last 5000 DNS queries',
+ previous_btn: 'Previous',
+ next_btn: 'Next',
+ loading_table_status: 'Loading...',
+ page_table_footer_text: 'Page',
+ of_table_footer_text: 'of',
+ rows_table_footer_text: 'rows',
+ updated_custom_filtering_toast: 'Updated the custom filtering rules',
+ rule_removed_from_custom_filtering_toast: 'Rule removed from the custom filtering rules',
+ rule_added_to_custom_filtering_toast: 'Rule added to the custom filtering rules',
+ query_log_disabled_toast: 'Query log disabled',
+ query_log_enabled_toast: 'Query log enabled',
// Popover
- Source: 'Nguồn',
- 'Found in the known domains database.': 'Tìm thấy trong cơ sở dữ liệu tên miền',
- Category: 'Thể loại',
+ source_label: 'Source',
+ found_in_known_domain_db: 'Found in the known domains database.',
+ category_label: 'Category',
// Popover filter
- Rule: 'Quy tắc',
- Filter: 'Bộ lọc',
+ rule_label: 'Rule',
+ filter_label: 'Filter',
},
-}
+};
diff --git a/client/src/__locales/vi.js b/client/src/__locales/vi.js
index f2029c16..3e10e7b9 100644
--- a/client/src/__locales/vi.js
+++ b/client/src/__locales/vi.js
@@ -1,132 +1,134 @@
export default {
translation: {
// Header
- Back: 'Quay lại',
- Dashboard: 'Tổng quan',
- Settings: 'Cài đặt',
- Filters: 'Bộ lọc',
- 'Query Log': 'Lịch sử truy vấn',
- FAQ: 'Hỏi đáp',
+ back: 'Quay lại',
+ dashboard: 'Tổng quan',
+ settings: 'Cài đặt',
+ filters: 'Bộ lọc',
+ query_log: 'Lịch sử truy vấn',
+ faq: 'Hỏi đáp',
version: 'phiên bản',
address: 'địa chỉ',
- ON: 'Đang bật',
- OFF: 'Đang tắt',
+ on: 'Đang bật',
+ off: 'Đang tắt',
// Footer
- Homepage: 'Trang chủ',
- 'Report an issue': 'Báo lỗi',
+ homepage: 'Trang chủ',
+ report_an_issue: 'Báo lỗi',
// Dashboard
- 'Enable protection': 'Bật bảo vệ',
- 'Disable protection': 'Tắt bảo vệ',
- 'Refresh statistics': 'Làm mới thống kê',
- 'DNS Queries': 'Truy vấn DNS',
- 'Blocked by': 'Chặn bởi',
- 'Blocked malware/phishing': 'Mã độc/lừa đảo đã chặn',
- 'Blocked adult websites': 'Website người lớn đã chặn',
- 'Top queried domains': 'Tên miền truy vấn nhiều',
- 'for the last 24 hours': 'trong 24 giờ qua',
- 'No domains found': 'Không có tên miền nào',
- 'Requests count': 'Số lần yêu cầu',
- 'Top blocked domains': 'Tên miền chặn nhiều',
- 'Top clients': 'Client dùng nhiều',
- 'No clients found': 'Không có client nào',
- 'General statistics': 'Thống kê chung',
- 'A number of DNS quieries processed for the last 24 hours': 'Số yêu cầu DNS đã xử lý trong 24 giờ qua',
- 'A number of DNS requests blocked by adblock filters and hosts blocklists': 'Số yêu cầu DNS bị chặn bởi bộ lọc quảng cáo và danh sách chặn host',
- 'A number of DNS requests blocked by the AdGuard browsing security module': 'Số yêu cầu DNS bị chặn bởi chế độ bảo vệ duyệt web AdGuard',
- 'A number of adult websites blocked': 'Số website người lớn đã chặn',
- 'Enforced safe search': 'Tìm kiếm an toàn',
- 'A number of DNS requests to search engines for which Safe Search was enforced': 'Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn',
- 'Average processing time': 'Thời gian xử lý trung bình',
- 'Average time in milliseconds on processing a DNS request': 'Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây',
+ enable_protection: 'Bật bảo vệ',
+ enabled_protection: 'Đã bật bảo vệ',
+ disable_protection: 'Tắt bảo vệ',
+ disabled_protection: 'Đã tắt bảo vệ',
+ refresh_statics: 'Làm mới thống kê',
+ dns_query: 'Truy vấn DNS',
+ blocked_by: 'Chặn bởi',
+ stats_malware_phishing: 'Mã độc/lừa đảo đã chặn',
+ stats_adult: 'Website người lớn đã chặn',
+ stats_query_domain: 'Tên miền truy vấn nhiều',
+ for_last_24_hours: 'trong 24 giờ qua',
+ no_domains_found: 'Không có tên miền nào',
+ requests_count: 'Số lần yêu cầu',
+ top_blocked_domains: 'Tên miền chặn nhiều',
+ top_clients: 'Client dùng nhiều',
+ no_clients_found: 'Không có client nào',
+ general_statistics: 'Thống kê chung',
+ number_of_dns_query_24_hours: 'Số yêu cầu DNS đã xử lý trong 24 giờ qua',
+ number_of_dns_query_blocked_24_hours: 'Số yêu cầu DNS bị chặn bởi bộ lọc quảng cáo và danh sách chặn host',
+ number_of_dns_query_blocked_24_hours_by_sec: 'Số yêu cầu DNS bị chặn bởi chế độ bảo vệ duyệt web AdGuard',
+ number_of_dns_query_blocked_24_hours_adult: 'Số website người lớn đã chặn',
+ enforced_save_search: 'Tìm kiếm an toàn',
+ number_of_dns_query_to_safe_search: 'Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn',
+ average_processing_time: 'Thời gian xử lý trung bình',
+ average_processing_time_hint: 'Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây',
// Settings
- 'Block domains using filters and hosts files': 'Chặn tên miền sử dụng các bộ lọc và file hosts',
- 'You can setup blocking rules in the Filters settings.': 'Bạn có thể thiết lập quy tắc chặn tại cài đặt Bộ lọc.',
- 'Use AdGuard browsing security web service': 'Sử dụng dịch vụ bảo vệ duyệt web AdGuard',
- 'AdGuard Home will check if domain is blacklisted by the browsing security web service. It will use privacy-friendly lookup API to perform the check: only a short prefix of the domain name SHA256 hash is sent to the server.': 'AdGuard Home sẽ kiểm tra tên miền với dịch vụ bảo vệ duyệt web. Tính năng sử dụng một API thân thiện với quyền riêng tư: chỉ một phần ngắn tiền tố mã băm SHA256 được gửi đến máy chủ',
- 'Use AdGuard parental control web service': 'Sử dụng dịch vụ quản lý của phụ huynh AdGuard',
- 'AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.': 'AdGuard Home sẽ kiểm tra nếu tên miền chứa từ khoá người lớn. Tính năng sử dụng API thân thiện với quyền riêng tư tương tự với dịch vụ bảo vệ duyệt web',
- 'Enforce safe search': 'Bắt buộc tìm kiếm an toàn',
- 'AdGuard Home can enforce safe search in the following search engines: Google, Bing, Yandex.': 'AdGuard Home có thể bắt buộc tìm kiếm an toàn với các dịch vụ tìm kiếm: Google, Bing, Yandex.',
- 'No servers specified': 'Không có máy chủ nào được liệt kê',
- 'No settings': 'Không có cài đặt nào',
- 'General settings': 'Cài đặt chung',
- 'Upstream DNS servers': 'Máy chủ DNS tìm kiếm',
- 'If you keep this field empty, AdGuard Home will use Cloudflare DNS as an upstream. Use tls:// prefix for DNS over TLS servers.': 'Nếu bạn để trống mục này, AdGuard Home sẽ sử dụng Cloudflare DNS để tìm kiếm. Sử dụng tiền tố tls:// cho các máy chủ DNS dựa trên TLS.',
- 'Test upstreams': 'Kiểm tra',
- Apply: 'Áp dụng',
+ block_domain_use_filters_and_hosts: 'Chặn tên miền sử dụng các bộ lọc và file hosts',
+ filters_block_toggle_hint: 'Bạn có thể thiết lập quy tắc chặn tại cài đặt Bộ lọc.',
+ use_adguard_browsing_sec: 'Sử dụng dịch vụ bảo vệ duyệt web AdGuard',
+ use_adguard_browsing_sec_hint: 'AdGuard Home sẽ kiểm tra tên miền với dịch vụ bảo vệ duyệt web. Tính năng sử dụng một API thân thiện với quyền riêng tư: chỉ một phần ngắn tiền tố mã băm SHA256 được gửi đến máy chủ',
+ use_adguard_parental: 'Sử dụng dịch vụ quản lý của phụ huynh AdGuard',
+ use_adguard_parental_hint: 'AdGuard Home sẽ kiểm tra nếu tên miền chứa từ khoá người lớn. Tính năng sử dụng API thân thiện với quyền riêng tư tương tự với dịch vụ bảo vệ duyệt web',
+ enforce_safe_search: 'Bắt buộc tìm kiếm an toàn',
+ enforce_save_search_hint: 'AdGuard Home có thể bắt buộc tìm kiếm an toàn với các dịch vụ tìm kiếm: Google, Bing, Yandex.',
+ no_servers_specified: 'Không có máy chủ nào được liệt kê',
+ no_settings: 'Không có cài đặt nào',
+ general_settings: 'Cài đặt chung',
+ upstream_dns: 'Máy chủ DNS tìm kiếm',
+ upstream_dns_hint: 'Nếu bạn để trống mục này, AdGuard Home sẽ sử dụng Cloudflare DNS để tìm kiếm. Sử dụng tiền tố tls:// cho các máy chủ DNS dựa trên TLS.',
+ test_upstream_btn: 'Kiểm tra',
+ apply_btn: 'Áp dụng',
// Settings Toasts
- 'Disabled filtering': 'Đã tắt chặn quảng cáo',
- 'Enabled filtering': 'Đã bật chặn quảng cáo',
- 'Disabled safebrowsing': 'Đã tắt bảo vệ duyệt web',
- 'Enabled safebrowsing': 'Đã bật bảo vệ duyệt web',
- 'Disabled parental control': 'Đã tắt quản lý của phụ huynh',
- 'Enabled parental control': 'Đã bật quản lý của phụ huynh',
- 'Disabled safe search': 'Đã tắt tìm kiếm an toàn',
- 'Enabled safe search': 'Đã bật tìm kiếm an toàn',
+ disabled_filtering_toast: 'Đã tắt chặn quảng cáo',
+ enabled_filtering_toast: 'Đã bật chặn quảng cáo',
+ disabled_safe_browsing_toast: 'Đã tắt bảo vệ duyệt web',
+ enabled_safe_browsing_toast: 'Đã bật bảo vệ duyệt web',
+ disabled_parental_toast: 'Đã tắt quản lý của phụ huynh',
+ enabled_parental_toast: 'Đã bật quản lý của phụ huynh',
+ disabled_safe_search_toast: 'Đã tắt tìm kiếm an toàn',
+ enabled_save_search_toast: 'Đã bật tìm kiếm an toàn',
// Filters
- Enabled: 'Kích hoạt',
- Name: 'Tên',
- 'Filter URL': 'URL bộ lọc',
- 'Rules count': 'Số quy tắc',
- 'Last time updated': 'Cập nhật cuối',
- Actions: 'Thao tác',
- Delete: 'Xoá',
- 'Filters and hosts blocklists': 'Danh sách bộ lọc và hosts',
- 'AdGuard Home understands basic adblock rules and hosts files syntax.': 'AdGuard home hiểu các quy tắc chặn quảng cáo đơn giản và cú pháp file hosts',
- 'No filters added': 'Không có bộ lọc nào được thêm',
- 'Add filter': 'Thêm bộ lọc',
- Cancel: 'Huỷ',
- 'Enter name': 'Nhập tên',
- 'Enter URL': 'Nhập URL',
- 'Check updates': 'Kiểm tra cập nhật',
- 'New filter subscription': 'Đăng ký bộ lọc mới',
- 'Enter a valid URL to a filter subscription or a hosts file.': 'Nhập URL hợp lệ của bộ lọc hoặc file hosts',
- 'Custom filtering rules': 'Quy tắc lọc tuỳ chỉnh',
- 'Enter one rule on a line. You can use either adblock rules or hosts files syntax.': 'Nhập mỗi quy tắc 1 dòng. Có thể sử dụng quy tắc chặn quảng cáo hoặc cú pháp file host',
- Examples: 'Ví dụ',
- 'block access to the example.org domain and all its subdomains': 'Chặn truy cập tới tên miền example.org và tất cả tên miền con',
- 'unblock access to the example.org domain and all its subdomains': 'Không chặn truy cập tới tên miền example.org và tất cả tên miền con',
- 'AdGuard Home will now return 127.0.0.1 address for the example.org domain (but not its subdomains).': 'AdGuard Home sẽ phản hồi địa chỉ IP 127.0.0.1 cho tên miền example.org (không áp dụng tên miền con)',
- '! Here goes a comment': '! Đây là một chú thích',
- 'just a comment': 'Chỉ là một chú thích',
- '# Also a comment': '# Cũng là một chú thích',
- 'All filters are already up-to-date': 'Tất cả bộ lọc đã được cập nhật',
- 'Updated the upstream DNS servers': 'Đã cập nhật máy chủ DNS tìm kiếm',
- 'Specified DNS servers are working correctly': 'Máy chủ DNS có thể sử dụng',
- 'Server "{{key}}": could not be used, please check that you\'ve written it correctly': 'Máy chủ "{{key}}": không thể sử dụng, vui lòng kiểm tra bạn đã điền chính xác',
+ enabled_table_header: 'Kích hoạt',
+ name_table_header: 'Tên',
+ filter_url_table_header: 'URL bộ lọc',
+ rules_count_table_header: 'Số quy tắc',
+ last_time_updated_table_header: 'Cập nhật cuối',
+ actions_table_header: 'Thao tác',
+ delete_table_action: 'Xoá',
+ filters_and_hosts: 'Danh sách bộ lọc và hosts',
+ filters_and_hosts_hint: 'AdGuard home hiểu các quy tắc chặn quảng cáo đơn giản và cú pháp file hosts',
+ no_filters_added: 'Không có bộ lọc nào được thêm',
+ add_filter_btn: 'Thêm bộ lọc',
+ cancel_btn: 'Huỷ',
+ enter_name_hint: 'Nhập tên',
+ enter_url_hint: 'Nhập URL',
+ check_updates_btn: 'Kiểm tra cập nhật',
+ new_filter_btn: 'Đăng ký bộ lọc mới',
+ enter_valid_filter_url: 'Nhập URL hợp lệ của bộ lọc hoặc file hosts',
+ custom_filter_rules: 'Quy tắc lọc tuỳ chỉnh',
+ custom_filter_rules_hint: 'Nhập mỗi quy tắc 1 dòng. Có thể sử dụng quy tắc chặn quảng cáo hoặc cú pháp file host',
+ examples_title: 'Ví dụ',
+ example_meaning_filter_block: 'Chặn truy cập tới tên miền example.org và tất cả tên miền con',
+ example_meaning_filter_whitelist: 'Không chặn truy cập tới tên miền example.org và tất cả tên miền con',
+ example_meaning_host_block: 'AdGuard Home sẽ phản hồi địa chỉ IP 127.0.0.1 cho tên miền example.org (không áp dụng tên miền con)',
+ example_comment: '! Đây là một chú thích',
+ example_comment_meaning: 'Chỉ là một chú thích',
+ example_comment_hash: '# Cũng là một chú thích',
+ all_filters_up_to_date_toast: 'Tất cả bộ lọc đã được cập nhật',
+ updated_upstream_dns_toast: 'Đã cập nhật máy chủ DNS tìm kiếm',
+ dns_test_ok_toast: 'Máy chủ DNS có thể sử dụng',
+ dns_test_not_ok_toast: 'Máy chủ "{{key}}": không thể sử dụng, vui lòng kiểm tra bạn đã điền chính xác',
// Logs
- Unblock: 'Bỏ chặn',
- Block: 'Chặn',
- Time: 'Thời gian',
- 'Domain name': 'Tên miền',
- Type: 'Loại',
- Response: 'Phản hồi',
- Empty: 'Rỗng',
- 'Show all': 'Hiện tất cả',
- 'Show filtered': 'Chỉ hiện đã chặn',
- 'No logs found': 'Không có lịch sử truy vấn',
- 'Disable log': 'Tắt lịch sử truy vấn',
- 'Download log file': 'Tải tập tin lịch sử truy vấn',
- Refresh: 'Làm mới',
- 'Enable log': 'Bật lịch sử truy vấn',
- 'Last 5000 DNS queries': '5000 truy vấn DNS gần nhất',
- Previous: 'Trang trước',
- Next: 'Trang sau',
- 'Loading...': 'Đang tải...',
- Page: 'Trang',
- of: 'của',
- rows: 'hàng',
- 'Updated the custom filtering rules': 'Đã cập nhật quy tắc lọc tuỳ chỉnh',
- 'Rule removed from the custom filtering rules': 'Quy tắc đã được xoá khỏi quy tắc lọc tuỳ chỉnh',
- 'Rule added to the custom filtering rules': 'Quy tắc đã được thêm vào quy tắc lọc tuỳ chỉnh',
- 'Query log disabled': 'Đã bật lịch sử truy vấn',
- 'Query log enabled': 'Đã tắt lịch sử truy vấn',
+ ublock_btn: 'Bỏ chặn',
+ block_btn: 'Chặn',
+ time_table_header: 'Thời gian',
+ domain_name_table_header: 'Tên miền',
+ type_table_header: 'Loại',
+ response_table_header: 'Phản hồi',
+ empty_response_status: 'Rỗng',
+ show_all_filter_type: 'Hiện tất cả',
+ show_filtered_type: 'Chỉ hiện đã chặn',
+ no_logs_found: 'Không có lịch sử truy vấn',
+ disabled_log_btn: 'Tắt lịch sử truy vấn',
+ download_log_file_btn: 'Tải tập tin lịch sử truy vấn',
+ refresh_btn: 'Làm mới',
+ enabled_log_btn: 'Bật lịch sử truy vấn',
+ last_5000_dns_queries: '5000 truy vấn DNS gần nhất',
+ previous_btn: 'Trang trước',
+ next_btn: 'Trang sau',
+ loading_table_status: 'Đang tải...',
+ page_table_footer_text: 'Trang',
+ of_table_footer_text: 'của',
+ rows_table_footer_text: 'hàng',
+ updated_custom_filtering_toast: 'Đã cập nhật quy tắc lọc tuỳ chỉnh',
+ rule_removed_from_custom_filtering_toast: 'Quy tắc đã được xoá khỏi quy tắc lọc tuỳ chỉnh',
+ rule_added_to_custom_filtering_toast: 'Quy tắc đã được thêm vào quy tắc lọc tuỳ chỉnh',
+ query_log_disabled_toast: 'Đã tắt lịch sử truy vấn',
+ query_log_enabled_toast: 'Đã bật lịch sử truy vấn',
// Popover
- Source: 'Nguồn',
- 'Found in the known domains database.': 'Tìm thấy trong cơ sở dữ liệu tên miền',
- Category: 'Thể loại',
+ source_label: 'Nguồn',
+ found_in_known_domain_db: 'Tìm thấy trong cơ sở dữ liệu tên miền',
+ category_label: 'Thể loại',
// Popover filter
- Rule: 'Quy tắc',
- Filter: 'Bộ lọc',
+ rule_label: 'Quy tắc',
+ filter_label: 'Bộ lọc',
},
};
diff --git a/client/src/actions/index.js b/client/src/actions/index.js
index 6af95097..4f55f23c 100644
--- a/client/src/actions/index.js
+++ b/client/src/actions/index.js
@@ -22,40 +22,40 @@ export const toggleSetting = (settingKey, status) => async (dispatch) => {
switch (settingKey) {
case 'filtering':
if (status) {
- successMessage = 'Disabled filtering';
+ successMessage = 'disabled_filtering_toast';
await apiClient.disableFiltering();
} else {
- successMessage = 'Enabled filtering';
+ successMessage = 'enabled_filtering_toast';
await apiClient.enableFiltering();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
case 'safebrowsing':
if (status) {
- successMessage = 'Disabled safebrowsing';
+ successMessage = 'disabled_safe_browsing_toast';
await apiClient.disableSafebrowsing();
} else {
- successMessage = 'Enabled safebrowsing';
+ successMessage = 'enabled_safe_browsing_toast';
await apiClient.enableSafebrowsing();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
case 'parental':
if (status) {
- successMessage = 'Disabled parental control';
+ successMessage = 'disabled_parental_toast';
await apiClient.disableParentalControl();
} else {
- successMessage = 'Enabled parental control';
+ successMessage = 'enabled_parental_toast';
await apiClient.enableParentalControl();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
case 'safesearch':
if (status) {
- successMessage = 'Disabled safe search';
+ successMessage = 'disabled_safe_search_toast';
await apiClient.disableSafesearch();
} else {
- successMessage = 'Enabled safe search';
+ successMessage = 'enabled_save_search_toast';
await apiClient.enableSafesearch();
}
dispatch(toggleSettingStatus({ settingKey }));
@@ -124,10 +124,10 @@ export const toggleProtection = status => async (dispatch) => {
try {
if (status) {
- successMessage = 'Disabled protection';
+ successMessage = 'disabled_protection';
await apiClient.disableGlobalProtection();
} else {
- successMessage = 'Enabled protection';
+ successMessage = 'enabled_protection';
await apiClient.enableGlobalProtection();
}
@@ -272,14 +272,14 @@ export const toggleLogStatus = queryLogEnabled => async (dispatch) => {
let successMessage;
if (queryLogEnabled) {
toggleMethod = apiClient.disableQueryLog.bind(apiClient);
- successMessage = 'disabled';
+ successMessage = 'query_log_disabled_toast';
} else {
toggleMethod = apiClient.enableQueryLog.bind(apiClient);
- successMessage = 'enabled';
+ successMessage = 'query_log_enabled_toast';
}
try {
await toggleMethod();
- dispatch(addSuccessToast(`Query log ${successMessage}`));
+ dispatch(addSuccessToast(successMessage));
dispatch(toggleLogStatusSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
@@ -298,7 +298,7 @@ export const setRules = rules => async (dispatch) => {
.replace(/^\n/g, '')
.replace(/\n\s*\n/g, '\n');
await apiClient.setRules(replacedLineEndings);
- dispatch(addSuccessToast('Updated the custom filtering rules'));
+ dispatch(addSuccessToast('updated_custom_filtering_toast'));
dispatch(setRulesSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
@@ -360,7 +360,7 @@ export const refreshFilters = () => async (dispatch) => {
if (refreshText.includes('OK')) {
if (refreshText.includes('OK 0')) {
- dispatch(addSuccessToast('All filters are already up-to-date'));
+ dispatch(addSuccessToast('all_filters_up_to_date_toast'));
} else {
dispatch(addSuccessToast(refreshText.replace(/OK /g, '')));
}
@@ -457,7 +457,7 @@ export const setUpstream = url => async (dispatch) => {
dispatch(setUpstreamRequest());
try {
await apiClient.setUpstream(url);
- dispatch(addSuccessToast('Updated the upstream DNS servers'));
+ dispatch(addSuccessToast('updated_upstream_dns_toast'));
dispatch(setUpstreamSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
@@ -477,13 +477,13 @@ export const testUpstream = servers => async (dispatch) => {
const testMessages = Object.keys(upstreamResponse).map((key) => {
const message = upstreamResponse[key];
if (message !== 'OK') {
- dispatch(addErrorToast({ error: t('Server "{{key}}": could not be used, please check that you\'ve written it correctly', { key }) }));
+ dispatch(addErrorToast({ error: t('dns_test_not_ok_toast', { key }) }));
}
return message;
});
if (testMessages.every(message => message === 'OK')) {
- dispatch(addSuccessToast('Specified DNS servers are working correctly'));
+ dispatch(addSuccessToast('dns_test_ok_toast'));
}
dispatch(testUpstreamSuccess());
diff --git a/client/src/components/Dashboard/BlockedDomains.js b/client/src/components/Dashboard/BlockedDomains.js
index a244ec44..25b3c8d6 100644
--- a/client/src/components/Dashboard/BlockedDomains.js
+++ b/client/src/components/Dashboard/BlockedDomains.js
@@ -30,7 +30,7 @@ class BlockedDomains extends Component {
);
},
}, {
- Header: Requests count,
+ Header: requests_count,
accessor: 'domain',
maxWidth: 190,
Cell: ({ value }) => {
@@ -51,14 +51,14 @@ class BlockedDomains extends Component {
render() {
const { t } = this.props;
return (
-
+ (
{ ip: prop, domain: value }
))}
columns={this.columns}
showPagination={false}
- noDataText={ t('No domains found') }
+ noDataText={ t('no_domains_found') }
minRows={6}
className="-striped -highlight card-table-overflow stats__table"
/>
diff --git a/client/src/components/Dashboard/Clients.js b/client/src/components/Dashboard/Clients.js
index 979230e8..bd9bb4c4 100644
--- a/client/src/components/Dashboard/Clients.js
+++ b/client/src/components/Dashboard/Clients.js
@@ -26,7 +26,7 @@ class Clients extends Component {
Cell: ({ value }) => (