diff --git a/client/public/index.html b/client/public/index.html
index 0ac4e315..38d8f887 100644
--- a/client/public/index.html
+++ b/client/public/index.html
@@ -4,6 +4,7 @@
+
DNS da Cloudflare<\/a> como upstream.",
"test_upstream_btn": "Testar upstreams",
"apply_btn": "Aplicar",
"disabled_filtering_toast": "Filtragem desativada",
@@ -118,9 +122,9 @@
"example_comment_hash": "# Tamb\u00e9m um coment\u00e1rio",
"example_regex_meaning": "bloqueia o acesso aos dom\u00ednios correspondentes \u00e0 express\u00e3o regular especificada",
"example_upstream_regular": "DNS regular (atrav\u00e9s do UDP)",
- "example_upstream_dot": "DNS criptografado <0>atrav\u00e9s do TLS<\/0>",
- "example_upstream_doh": "DNS criptografado <0>atrav\u00e9s do HTTPS<\/0>",
- "example_upstream_sdns": "Voc\u00ea pode usar <0>DNS Stamps<\/0> para o <1>DNSCrypt<\/1> ou usar resolvedores <2>DNS-sobre-HTTPS<\/2>",
+ "example_upstream_dot": "<0>DNS-sobre-TLS<\/0> criptografado",
+ "example_upstream_doh": "<0>DNS-sobre-HTTPS<\/0> criptografado",
+ "example_upstream_sdns": "Voc\u00ea pode usar <0>DNS Stamps<\/0>para o <1>DNSCrypt<\/1>ou usar os resolvedores <2>DNS-sobre-HTTPS<\/2>",
"example_upstream_tcp": "DNS regular (atrav\u00e9s do TCP)",
"all_filters_up_to_date_toast": "Todos os filtros j\u00e1 est\u00e3o atualizados",
"updated_upstream_dns_toast": "Atualizado os servidores DNS upstream",
@@ -211,26 +215,26 @@
"open_dashboard": "Abrir painel",
"install_saved": "Salvo com sucesso",
"encryption_title": "Criptografia",
- "encryption_desc": "Encryption (HTTPS\/TLS) support for both DNS and admin web interface",
+ "encryption_desc": "Suporte a criptografia (HTTPS\/TLS) para DNS e interface de administra\u00e7\u00e3o web",
"encryption_config_saved": "Configura\u00e7\u00e3o de criptografia salva",
"encryption_server": "Nome do servidor",
"encryption_server_enter": "Digite seu nome de dom\u00ednio",
- "encryption_server_desc": "In order to use HTTPS, you need to enter the server name that matches your SSL certificate.",
+ "encryption_server_desc": "Para usar o protocolo HTTPS, voc\u00ea precisa digitar o nome do servidor que corresponde ao seu certificado SSL.",
"encryption_redirect": "Redirecionar automaticamente para HTTPS",
- "encryption_redirect_desc": "If checked, AdGuard Home will automatically redirect you from HTTP to HTTPS addresses.",
+ "encryption_redirect_desc": "Se marcado, o AdGuard Home ir\u00e1 redirecionar automaticamente os endere\u00e7os HTTP para HTTPS.",
"encryption_https": "Porta HTTPS",
- "encryption_https_desc": "If HTTPS port is configured, AdGuard Home admin interface will be accessible via HTTPS, and it will also provide DNS-over-HTTPS on '\/dns-query' location.",
+ "encryption_https_desc": "Se a porta HTTPS estiver configurada, a interface administrativa do AdGuard Home ser\u00e1 acess\u00edvel via HTTPS e tamb\u00e9m fornecer\u00e1 o DNS-sobre-HTTPS no local '\/dns-query'.",
"encryption_dot": "Porta DNS-sobre-TLS",
"encryption_dot_desc": "Se essa porta estiver configurada, o AdGuard Home ir\u00e1 executar o servidor DNS-sobre- TSL nesta porta.",
"encryption_certificates": "Certificados",
- "encryption_certificates_desc": "In order to use encryption, you need to provide a valid SSL certificates chain for your domain. You can get a free certificate on <0>{{link}}<\/0> or you can buy it from one of the trusted Certificate Authorities.",
+ "encryption_certificates_desc": "Para usar criptografia, voc\u00ea precisa fornecer uma cadeia de certificados SSL v\u00e1lida para seu dom\u00ednio. Voc\u00ea pode obter um certificado gratuito em <0> {{link}}<\/0> ou pode compr\u00e1-lo de uma das autoridades de certifica\u00e7\u00e3o confi\u00e1veis.",
"encryption_certificates_input": "Copie\/cole aqui seu certificado codificado em PEM.",
"encryption_status": "Status",
"encryption_expire": "Expira",
"encryption_key": "Chave privada",
"encryption_key_input": "Copie\/cole aqui a chave privada codificada em PEM para seu certificado.",
"encryption_enable": "Ativar criptografia (HTTPS, DNS-sobre-HTTPS e DNS-sobre-TLS)",
- "encryption_enable_desc": "If encryption is enabled, AdGuard Home admin interface will work over HTTPS, and the DNS server will listen for requests over DNS-over-HTTPS and DNS-over-TLS.",
+ "encryption_enable_desc": "Se a criptografia estiver ativada, a interface administrativa do AdGuard Home funcionar\u00e1 em HTTPS, o servidor DNS ir\u00e1 capturar as solicita\u00e7\u00f5es por meio do DNS-sobre-HTTPS e DNS-sobre-TLS.",
"encryption_chain_valid": "Cadeia de chave v\u00e1lida.",
"encryption_chain_invalid": "A cadeia de certificado \u00e9 inv\u00e1lida",
"encryption_key_valid": "Esta \u00e9 uma chave privada {{type}} v\u00e1lida",
@@ -246,5 +250,7 @@
"form_error_equal": "N\u00e3o deve ser igual",
"form_error_password": "Senhas n\u00e3o coincidem",
"reset_settings": "Redefinir configura\u00e7\u00f5es",
- "update_announcement": "AdGuard Home {{version}} est\u00e1 dispon\u00edvel!<0>Clique aqui<\/0> para mais informa\u00e7\u00f5es."
+ "update_announcement": "AdGuard Home {{version}} est\u00e1 dispon\u00edvel!<0>Clique aqui<\/0> para mais informa\u00e7\u00f5es.",
+ "setup_guide": "Guia de configura\u00e7\u00e3o",
+ "dns_addresses": "Endere\u00e7os DNS"
}
\ No newline at end of file
diff --git a/client/src/__locales/zh-tw.json b/client/src/__locales/zh-tw.json
index 35920049..4b7fcb0e 100644
--- a/client/src/__locales/zh-tw.json
+++ b/client/src/__locales/zh-tw.json
@@ -1,4 +1,5 @@
{
+ "example_upstream_reserved": "\u60a8\u53ef\u660e\u78ba\u6307\u5b9a<0>\u7528\u65bc\u7279\u5b9a\u7684\u7db2\u57df<\/0>\u4e4bDNS\u4e0a\u6e38",
"upstream_parallel": "\u900f\u904e\u540c\u6642\u5730\u67e5\u8a62\u6240\u6709\u4e0a\u6e38\u7684\u4f3a\u670d\u5668\uff0c\u4f7f\u7528\u4e26\u884c\u7684\u67e5\u8a62\u4ee5\u52a0\u901f\u89e3\u6790",
"bootstrap_dns": "\u81ea\u6211\u555f\u52d5\uff08Bootstrap\uff09DNS \u4f3a\u670d\u5668",
"bootstrap_dns_desc": "\u81ea\u6211\u555f\u52d5\uff08Bootstrap\uff09DNS\u4f3a\u670d\u5668\u88ab\u7528\u65bc\u89e3\u6790\u60a8\u660e\u78ba\u6307\u5b9a\u4f5c\u70ba\u4e0a\u6e38\u7684DoH\/DoT\u89e3\u6790\u5668\u4e4bIP\u4f4d\u5740\u3002",
@@ -122,8 +123,8 @@
"example_regex_meaning": "\u5c01\u9396\u81f3\u8207\u5df2\u660e\u78ba\u6307\u5b9a\u7684\u898f\u5247\u904b\u7b97\u5f0f\uff08Regular Expression\uff09\u76f8\u7b26\u7684\u7db2\u57df\u4e4b\u5b58\u53d6",
"example_upstream_regular": "\u4e00\u822c\u7684 DNS\uff08\u900f\u904eUDP\uff09",
"example_upstream_dot": "\u52a0\u5bc6\u7684 <0>DNS-over-TLS<\/0>",
- "example_upstream_doh": "\u52a0\u5bc6\u7684 <0>DNS-over-HTTPS <\/0>",
- "example_upstream_sdns": "\u60a8\u53ef\u4f7f\u7528\u95dc\u65bc <0>DNSCrypt<\/0> \u6216 <1>DNS-over-HTTPS<\/1> \u89e3\u6790\u5668\u4e4b <2>DNS \u6233\u8a18<\/2>",
+ "example_upstream_doh": "\u52a0\u5bc6\u7684 <0>DNS-over-HTTPS<\/0>",
+ "example_upstream_sdns": "\u60a8\u53ef\u4f7f\u7528\u95dc\u65bc <1>DNSCrypt<\/1> \u6216 <2>DNS-over-HTTPS<\/2> \u89e3\u6790\u5668\u4e4b <0>DNS \u6233\u8a18<\/0>",
"example_upstream_tcp": "\u4e00\u822c\u7684 DNS\uff08\u900f\u904eTCP\uff09",
"all_filters_up_to_date_toast": "\u6240\u6709\u7684\u904e\u6ffe\u5668\u5df2\u662f\u6700\u65b0\u7684",
"updated_upstream_dns_toast": "\u5df2\u66f4\u65b0\u4e0a\u6e38\u7684DNS\u4f3a\u670d\u5668",
diff --git a/client/src/actions/index.js b/client/src/actions/index.js
index aa8626a9..94830ada 100644
--- a/client/src/actions/index.js
+++ b/client/src/actions/index.js
@@ -139,6 +139,36 @@ export const toggleProtection = status => async (dispatch) => {
}
};
+export const getVersionRequest = createAction('GET_VERSION_REQUEST');
+export const getVersionFailure = createAction('GET_VERSION_FAILURE');
+export const getVersionSuccess = createAction('GET_VERSION_SUCCESS');
+
+export const getVersion = () => async (dispatch) => {
+ dispatch(getVersionRequest());
+ try {
+ const newVersion = await apiClient.getGlobalVersion();
+ dispatch(getVersionSuccess(newVersion));
+ } catch (error) {
+ dispatch(addErrorToast({ error }));
+ dispatch(getVersionFailure());
+ }
+};
+
+export const getClientsRequest = createAction('GET_CLIENTS_REQUEST');
+export const getClientsFailure = createAction('GET_CLIENTS_FAILURE');
+export const getClientsSuccess = createAction('GET_CLIENTS_SUCCESS');
+
+export const getClients = () => async (dispatch) => {
+ dispatch(getClientsRequest());
+ try {
+ const clients = await apiClient.getGlobalClients();
+ dispatch(getClientsSuccess(clients));
+ } catch (error) {
+ dispatch(addErrorToast({ error }));
+ dispatch(getClientsFailure());
+ }
+};
+
export const dnsStatusRequest = createAction('DNS_STATUS_REQUEST');
export const dnsStatusFailure = createAction('DNS_STATUS_FAILURE');
export const dnsStatusSuccess = createAction('DNS_STATUS_SUCCESS');
@@ -148,6 +178,8 @@ export const getDnsStatus = () => async (dispatch) => {
try {
const dnsStatus = await apiClient.getGlobalStatus();
dispatch(dnsStatusSuccess(dnsStatus));
+ dispatch(getVersion());
+ dispatch(getClients());
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(initSettingsFailure());
@@ -205,21 +237,6 @@ export const getStats = () => async (dispatch) => {
}
};
-export const getVersionRequest = createAction('GET_VERSION_REQUEST');
-export const getVersionFailure = createAction('GET_VERSION_FAILURE');
-export const getVersionSuccess = createAction('GET_VERSION_SUCCESS');
-
-export const getVersion = () => async (dispatch) => {
- dispatch(getVersionRequest());
- try {
- const newVersion = await apiClient.getGlobalVersion();
- dispatch(getVersionSuccess(newVersion));
- } catch (error) {
- dispatch(addErrorToast({ error }));
- dispatch(getVersionFailure());
- }
-};
-
export const getTopStatsRequest = createAction('GET_TOP_STATS_REQUEST');
export const getTopStatsFailure = createAction('GET_TOP_STATS_FAILURE');
export const getTopStatsSuccess = createAction('GET_TOP_STATS_SUCCESS');
@@ -665,18 +682,3 @@ export const toggleDhcp = config => async (dispatch) => {
}
}
};
-
-export const getClientsRequest = createAction('GET_CLIENTS_REQUEST');
-export const getClientsFailure = createAction('GET_CLIENTS_FAILURE');
-export const getClientsSuccess = createAction('GET_CLIENTS_SUCCESS');
-
-export const getClients = () => async (dispatch) => {
- dispatch(getClientsRequest());
- try {
- const clients = await apiClient.getGlobalClients();
- dispatch(getClientsSuccess(clients));
- } catch (error) {
- dispatch(addErrorToast({ error }));
- dispatch(getClientsFailure());
- }
-};
diff --git a/client/src/components/App/index.js b/client/src/components/App/index.js
index fdc4cc2a..545d5007 100644
--- a/client/src/components/App/index.js
+++ b/client/src/components/App/index.js
@@ -25,8 +25,6 @@ import i18n from '../../i18n';
class App extends Component {
componentDidMount() {
this.props.getDnsStatus();
- this.props.getVersion();
- this.props.getClients();
}
componentDidUpdate(prevProps) {
@@ -106,10 +104,8 @@ App.propTypes = {
dashboard: PropTypes.object,
isCoreRunning: PropTypes.bool,
error: PropTypes.string,
- getVersion: PropTypes.func,
changeLanguage: PropTypes.func,
encryption: PropTypes.object,
- getClients: PropTypes.func,
};
export default withNamespaces()(App);
diff --git a/client/src/components/Header/Header.css b/client/src/components/Header/Header.css
index a8273e78..29222c96 100644
--- a/client/src/components/Header/Header.css
+++ b/client/src/components/Header/Header.css
@@ -117,6 +117,10 @@
.nav-version {
padding: 0;
}
+
+ .nav-icon {
+ display: none;
+ }
}
@media screen and (min-width: 1280px) {
@@ -127,6 +131,10 @@
.nav-version {
font-size: 0.85rem;
}
+
+ .nav-icon {
+ display: block;
+ }
}
.dns-status {
diff --git a/client/src/components/Settings/Dhcp/Interface.js b/client/src/components/Settings/Dhcp/Interface.js
index e5814205..3b9d3e03 100644
--- a/client/src/components/Settings/Dhcp/Interface.js
+++ b/client/src/components/Settings/Dhcp/Interface.js
@@ -78,7 +78,8 @@ let Interface = (props) => {
{interfaceValue &&
- {renderInterfaceValues(interfaces[interfaceValue])}
+ {interfaces[interfaceValue] &&
+ renderInterfaceValues(interfaces[interfaceValue])}
}
diff --git a/client/src/components/Settings/Encryption/Form.js b/client/src/components/Settings/Encryption/Form.js
index fd43f933..cc11c779 100644
--- a/client/src/components/Settings/Encryption/Form.js
+++ b/client/src/components/Settings/Encryption/Form.js
@@ -261,7 +261,7 @@ let Form = (props) => {
component="textarea"
type="text"
className="form-control form-control--textarea"
- placeholder="Copy/paste your PEM-encoded private key for your cerficate here."
+ placeholder={t('encryption_key_input')}
onChange={handleChange}
disabled={!isEnabled}
/>