diff --git a/client/src/__locales/vi.js b/client/src/__locales/vi.js index e2a03d14..196ccab6 100644 --- a/client/src/__locales/vi.js +++ b/client/src/__locales/vi.js @@ -38,5 +38,21 @@ 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 + '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', }, }; diff --git a/client/src/components/Settings/Upstream.js b/client/src/components/Settings/Upstream.js index cbcc421d..276a201f 100644 --- a/client/src/components/Settings/Upstream.js +++ b/client/src/components/Settings/Upstream.js @@ -1,9 +1,10 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; +import { Trans, withNamespaces } from 'react-i18next'; import Card from '../ui/Card'; -export default class Upstream extends Component { +class Upstream extends Component { handleChange = (e) => { const { value } = e.currentTarget; this.props.handleUpstreamChange(value); @@ -23,11 +24,12 @@ export default class Upstream extends Component { 'btn btn-primary btn-standart mr-2': true, 'btn btn-primary btn-standart mr-2 btn-loading': this.props.processingTestUpstream, }); + const { t } = this.props; return ( Cloudflare DNS as an upstream. Use tls:// prefix for DNS over TLS servers.') } bodyType="card-body box-body--settings" >
@@ -44,14 +46,14 @@ export default class Upstream extends Component { type="button" onClick={this.handleTest} > - Test upstreams + Test upstreams
@@ -68,4 +70,7 @@ Upstream.propTypes = { handleUpstreamChange: PropTypes.func, handleUpstreamSubmit: PropTypes.func, handleUpstreamTest: PropTypes.func, + t: PropTypes.func, }; + +export default withNamespaces()(Upstream); diff --git a/client/src/components/Settings/index.js b/client/src/components/Settings/index.js index aa654cc2..fd0588b1 100644 --- a/client/src/components/Settings/index.js +++ b/client/src/components/Settings/index.js @@ -1,5 +1,6 @@ import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; +import { withNamespaces, Trans } from 'react-i18next'; import Upstream from './Upstream'; import Checkbox from '../ui/Checkbox'; import Loading from '../ui/Loading'; @@ -7,27 +8,27 @@ import PageTitle from '../ui/PageTitle'; import Card from '../ui/Card'; import './Settings.css'; -export default class Settings extends Component { +class Settings extends Component { settings = { filtering: { enabled: false, - title: 'Block domains using filters and hosts files', - subtitle: 'You can setup blocking rules in the Filters settings.', + title: this.props.t('Block domains using filters and hosts files'), + subtitle: this.props.t('You can setup blocking rules in the Filters settings.'), }, safebrowsing: { enabled: false, - title: 'Use AdGuard browsing security web service', - subtitle: '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.', + title: this.props.t('Use AdGuard browsing security web service'), + subtitle: this.props.t('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.'), }, parental: { enabled: false, - title: 'Use AdGuard parental control web service', - subtitle: 'AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.', + title: this.props.t('Use AdGuard parental control web service'), + subtitle: this.props.t('AdGuard Home will check if domain contains adult materials. It uses the same privacy-friendly API as the browsing security web service.'), }, safesearch: { enabled: false, - title: 'Enforce safe search', - subtitle: 'AdGuard Home can enforce safe search in the following search engines: Google, Bing, Yandex.', + title: this.props.t('Enforce safe search'), + subtitle: this.props.t('AdGuard Home can enforce safe search in the following search engines: Google, Bing, Yandex.'), }, }; @@ -47,7 +48,7 @@ export default class Settings extends Component { if (this.props.dashboard.upstreamDns.length > 0) { this.props.testUpstream(this.props.dashboard.upstreamDns); } else { - this.props.addErrorToast({ error: 'No servers specified' }); + this.props.addErrorToast({ error: this.props.t('No servers specified') }); } }; @@ -64,22 +65,22 @@ export default class Settings extends Component { }); } return ( -
No settings
+
No settings
); } render() { - const { settings } = this.props; + const { settings, t } = this.props; const { upstreamDns } = this.props.dashboard; return ( - + {settings.processing && } {!settings.processing &&
- +
{this.renderSettings(settings.settingsList)}
@@ -108,4 +109,7 @@ Settings.propTypes = { handleUpstreamChange: PropTypes.func, setUpstream: PropTypes.func, upstream: PropTypes.string, + t: PropTypes.func, }; + +export default withNamespaces()(Settings); diff --git a/client/src/i18n.js b/client/src/i18n.js index cf5bfb71..e6737a4a 100644 --- a/client/src/i18n.js +++ b/client/src/i18n.js @@ -15,10 +15,10 @@ i18n keySeparator: false, // we use content as keys interpolation: { escapeValue: false, // not needed for react!! - formatSeparator: ',', }, react: { wait: true, + nsMode: 'fallback', }, });