diff --git a/client/src/__locales/vi.js b/client/src/__locales/vi.js
index 196ccab6..23643ca1 100644
--- a/client/src/__locales/vi.js
+++ b/client/src/__locales/vi.js
@@ -38,7 +38,7 @@ export default {
'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',
- // Setting
+ // 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',
@@ -54,5 +54,63 @@ export default {
'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',
+ // 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',
+ // 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',
+ // 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',
},
};
diff --git a/client/src/components/Filters/UserRules.js b/client/src/components/Filters/UserRules.js
index 4bd71a8f..1f47cf9a 100644
--- a/client/src/components/Filters/UserRules.js
+++ b/client/src/components/Filters/UserRules.js
@@ -1,8 +1,9 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
+import { Trans, withNamespaces } from 'react-i18next';
import Card from '../ui/Card';
-export default class UserRules extends Component {
+class UserRules extends Component {
handleChange = (e) => {
const { value } = e.currentTarget;
this.props.handleRulesChange(value);
@@ -14,10 +15,11 @@ export default class UserRules extends Component {
};
render() {
+ const { t } = this.props;
return (
- Examples:
+ Examples:
- ||example.org^ - block access to the example.org domain
- and all its subdomains
+ ||example.org^ - { t('block access to the example.org domain and all its subdomains') }
- @@||example.org^ - unblock access to the example.org
- domain and all its subdomains
+ @@||example.org^ - { t('unblock access to the example.org domain and all its subdomains') }
- 127.0.0.1 example.org - AdGuard Home will now return
- 127.0.0.1 address for the example.org domain (but not its subdomains).
+ 127.0.0.1 example.org - { t('AdGuard Home will now return 127.0.0.1 address for the example.org domain (but not its subdomains).') }
- ! Here goes a comment - just a comment
+ { t('! Here goes a comment') } - { t('just a comment') }
- # Also a comment - just a comment
+ { t('# Also a comment') } - { t('just a comment') }
@@ -104,8 +106,8 @@ class Filters extends Component {
toggleModal={this.props.toggleFilteringModal}
addFilter={this.props.addFilter}
isFilterAdded={this.props.filtering.isFilterAdded}
- title="New filter subscription"
- inputDescription="Enter a valid URL to a filter subscription or a hosts file."
+ title={ t('New filter subscription') }
+ inputDescription={ t('Enter a valid URL to a filter subscription or a hosts file.') }
/>