Merge branch 'master' into ADG-9415
This commit is contained in:
@@ -166,7 +166,7 @@
|
||||
"encryption_settings": "Encryptie instellingen",
|
||||
"dhcp_settings": "DHCP instellingen",
|
||||
"upstream_dns": "Upstream DNS-servers",
|
||||
"upstream_dns_help": "Een server-adres per regel invoeren. <a>Meer weten</a> over het configureren van upstream DNS-servers.",
|
||||
"upstream_dns_help": "Een server-adres per regel invoeren. <a>Meer informatie</a> over het configureren van upstream DNS-servers.",
|
||||
"upstream_dns_configured_in_file": "Geconfigureerd in {{path}}",
|
||||
"test_upstream_btn": "Test upstream",
|
||||
"upstreams": "Upstreams",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"resolve_clients_title": "Увімкнути зворотне вирішення IP-адрес клієнтів",
|
||||
"resolve_clients_desc": "Визначати доменні імена клієнтів за допомогою PTR-запитів до відповідних серверів — приватних DNS-серверів для локальних клієнтів та upstream-серверів для клієнтів з публічними IP-адресами.",
|
||||
"use_private_ptr_resolvers_title": "Використовувати приватні зворотні DNS-резолвери",
|
||||
"use_private_ptr_resolvers_desc": "Надсилати зворотні DNS-запити до вказаних серверів для клієнтів, що обслуговуються локально. Якщо вимкнено, AdGuard Home буде відповідати NXDOMAIN на всі такі PTR-запити, окрім запитів про клієнтів, що уже відомі завдяки DHCP, /etc/hosts тощо.",
|
||||
"use_private_ptr_resolvers_desc": "Розвʼязувати запити PTR, SOA та NS для доменів ARPA, що містять приватні IP-адреси, через приватні вихідні сервери, DHCP, /etc/hosts тощо. Якщо вимкнено, AdGuard Home відповідатиме на всі такі запити з NXDOMAIN.",
|
||||
"check_dhcp_servers": "Перевірити DHCP-сервери",
|
||||
"save_config": "Зберегти конфігурацію",
|
||||
"enabled_dhcp": "DHCP-сервер увімкнено",
|
||||
@@ -343,10 +343,10 @@
|
||||
"known_tracker": "Відомі трекери",
|
||||
"install_welcome_title": "Вітаємо в AdGuard Home!",
|
||||
"install_welcome_desc": "AdGuard Home — це мережевий DNS-сервер, що блокує рекламу та відстеження. Його мета — надати вам контроль над усією мережею та всіма пристроями в ній без потреби використання програми на стороні клієнта.",
|
||||
"install_settings_title": "Веб-інтерфейс адміністратора",
|
||||
"install_settings_title": "Вебінтерфейс адміністратора",
|
||||
"install_settings_listen": "Мережевий інтерфейс",
|
||||
"install_settings_port": "Порт",
|
||||
"install_settings_interface_link": "Веб-інтерфейс адміністратора AdGuard Home буде доступний за такими адресами:",
|
||||
"install_settings_interface_link": "Вебінтерфейс адміністратора AdGuard Home буде доступний за такими адресами:",
|
||||
"form_error_port": "Уведіть правильне значення порту",
|
||||
"install_settings_dns": "DNS-сервер",
|
||||
"install_settings_dns_desc": "Вам потрібно буде налаштувати свої пристрої або маршрутизатор для використання DNS-сервера за такими адресами:",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"resolve_clients_title": "啟用用戶端的 IP 位址之反向的解析",
|
||||
"resolve_clients_desc": "透過傳送指標(PTR)查詢到對應的解析器(私人 DNS 伺服器供區域的用戶端,上游的伺服器供有公共 IP 位址的用戶端),反向地解析用戶端的 IP 位址變為它們的主機名稱。",
|
||||
"use_private_ptr_resolvers_title": "使用私人反向的 DNS 解析器",
|
||||
"use_private_ptr_resolvers_desc": "使用私人上游伺服器、DHCP、/etc/hosts 等方式解析包含私人 IP 位址的 ARPA 網域的 PTR、SOA 和 NS 請求。如果禁用,AdGuard Home 將對所有此類請求以 NXDOMAIN 回應。",
|
||||
"use_private_ptr_resolvers_desc": "通過私人上游伺服器、DHCP、/etc/hosts 等等,對包含私人 IP 位址的 ARPA 網域解析 PTR、SOA 和 NS 請求。如果被禁用,AdGuard Home 將對所有此類的請求以 NXDOMAIN 回覆。",
|
||||
"check_dhcp_servers": "檢查動態主機設定協定(DHCP)伺服器",
|
||||
"save_config": "儲存配置",
|
||||
"enabled_dhcp": "動態主機設定協定(DHCP)伺服器被啟用",
|
||||
|
||||
@@ -46,7 +46,7 @@ export const getStats = () => async (dispatch: any) => {
|
||||
const normalizedTopClients = normalizeTopStats(stats.top_clients);
|
||||
|
||||
const clientsParams = getParamsForClientsSearch(normalizedTopClients, 'name');
|
||||
const clients = await apiClient.findClients(clientsParams);
|
||||
const clients = await apiClient.searchClients(clientsParams);
|
||||
const topClientsWithInfo = addClientInfo(normalizedTopClients, clients, 'name');
|
||||
|
||||
const normalizedStats = {
|
||||
|
||||
@@ -415,7 +415,7 @@ class Api {
|
||||
// Per-client settings
|
||||
GET_CLIENTS = { path: 'clients', method: 'GET' };
|
||||
|
||||
FIND_CLIENTS = { path: 'clients/find', method: 'GET' };
|
||||
SEARCH_CLIENTS = { path: 'clients/search', method: 'POST' };
|
||||
|
||||
ADD_CLIENT = { path: 'clients/add', method: 'POST' };
|
||||
|
||||
@@ -453,11 +453,12 @@ class Api {
|
||||
return this.makeRequest(path, method, parameters);
|
||||
}
|
||||
|
||||
findClients(params: any) {
|
||||
const { path, method } = this.FIND_CLIENTS;
|
||||
const url = getPathWithQueryString(path, params);
|
||||
|
||||
return this.makeRequest(url, method);
|
||||
searchClients(config: any) {
|
||||
const { path, method } = this.SEARCH_CLIENTS;
|
||||
const parameters = {
|
||||
data: config,
|
||||
};
|
||||
return this.makeRequest(path, method, parameters);
|
||||
}
|
||||
|
||||
// DNS access settings
|
||||
|
||||
@@ -23,7 +23,7 @@ interface RowProps {
|
||||
|
||||
const Row = ({ label, count, response_status, tooltipTitle, translationComponents }: RowProps) => {
|
||||
const content = response_status ? (
|
||||
<LogsSearchLink response_status={response_status}>{formatNumber(count)}</LogsSearchLink>
|
||||
<LogsSearchLink response_status={response_status}>{count}</LogsSearchLink>
|
||||
) : (
|
||||
count
|
||||
);
|
||||
@@ -77,16 +77,16 @@ const Counters = ({ refreshButton, subtitle }: CountersProps) => {
|
||||
? t('number_of_dns_query_hours', { count: msToHours(interval) })
|
||||
: t('number_of_dns_query_days', { count: msToDays(interval) });
|
||||
|
||||
const rows = [
|
||||
const rows: RowProps[] = [
|
||||
{
|
||||
label: 'dns_query',
|
||||
count: numDnsQueries.toString(),
|
||||
count: formatNumber(numDnsQueries),
|
||||
tooltipTitle: dnsQueryTooltip,
|
||||
response_status: RESPONSE_FILTER.ALL.QUERY,
|
||||
},
|
||||
{
|
||||
label: 'blocked_by',
|
||||
count: numBlockedFiltering.toString(),
|
||||
count: formatNumber(numBlockedFiltering),
|
||||
tooltipTitle: 'number_of_dns_query_blocked_24_hours',
|
||||
response_status: RESPONSE_FILTER.BLOCKED.QUERY,
|
||||
|
||||
@@ -98,19 +98,19 @@ const Counters = ({ refreshButton, subtitle }: CountersProps) => {
|
||||
},
|
||||
{
|
||||
label: 'stats_malware_phishing',
|
||||
count: numReplacedSafebrowsing.toString(),
|
||||
count: formatNumber(numReplacedSafebrowsing),
|
||||
tooltipTitle: 'number_of_dns_query_blocked_24_hours_by_sec',
|
||||
response_status: RESPONSE_FILTER.BLOCKED_THREATS.QUERY,
|
||||
},
|
||||
{
|
||||
label: 'stats_adult',
|
||||
count: numReplacedParental.toString(),
|
||||
count: formatNumber(numReplacedParental),
|
||||
tooltipTitle: 'number_of_dns_query_blocked_24_hours_adult',
|
||||
response_status: RESPONSE_FILTER.BLOCKED_ADULT_WEBSITES.QUERY,
|
||||
},
|
||||
{
|
||||
label: 'enforced_save_search',
|
||||
count: numReplacedSafesearch.toString(),
|
||||
count: formatNumber(numReplacedSafesearch),
|
||||
tooltipTitle: 'number_of_dns_query_to_safe_search',
|
||||
response_status: RESPONSE_FILTER.SAFE_SEARCH.QUERY,
|
||||
},
|
||||
|
||||
@@ -154,7 +154,7 @@ const Dashboard = ({
|
||||
}}
|
||||
disabled={processingProtection}>
|
||||
{protectionDisabledDuration
|
||||
? `${t('enable_protection_timer')} ${getRemaningTimeText(protectionDisabledDuration)}`
|
||||
? `${t('enable_protection_timer', { time: getRemaningTimeText(protectionDisabledDuration) })}`
|
||||
: getProtectionBtnText(protectionEnabled)}
|
||||
</button>
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@ const ClientsTable = ({
|
||||
return content;
|
||||
}
|
||||
|
||||
return <LogsSearchLink search={row.original.ids[0]}>{content}</LogsSearchLink>;
|
||||
return <LogsSearchLink search={row.original.name}>{content}</LogsSearchLink>;
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -451,13 +451,10 @@ export const getParamsForClientsSearch = (data: any, param: any, additionalParam
|
||||
clients.add(e[additionalParam]);
|
||||
}
|
||||
});
|
||||
const params = {};
|
||||
const ids = Array.from(clients.values());
|
||||
ids.forEach((id, i) => {
|
||||
params[`ip${i}`] = id;
|
||||
});
|
||||
|
||||
return params;
|
||||
return {
|
||||
clients: Array.from(clients).map(id => ({ id })),
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -524,7 +521,7 @@ export const getObjDiff = (initialValues: any, values: any) =>
|
||||
* @param num {number} to format
|
||||
* @returns {string} Returns a string with a language-sensitive representation of this number
|
||||
*/
|
||||
export const formatNumber = (num: any) => {
|
||||
export const formatNumber = (num: number): string => {
|
||||
const currentLanguage = i18n.languages[0] || DEFAULT_LANGUAGE;
|
||||
return num.toLocaleString(currentLanguage);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timeUpdated": "2024-12-03T12:12:08.316Z",
|
||||
"timeUpdated": "2025-01-13T10:04:54.031Z",
|
||||
"categories": {
|
||||
"0": "audio_video_player",
|
||||
"1": "comments",
|
||||
@@ -9772,6 +9772,13 @@
|
||||
"url": "http://www.jetinteractive.com.au/",
|
||||
"companyId": "jet_interactive"
|
||||
},
|
||||
"jetbrains": {
|
||||
"name": "JetBrains",
|
||||
"categoryId": 8,
|
||||
"url": "https://www.jetbrains.com/",
|
||||
"companyId": "jetbrains",
|
||||
"source": "AdGuard"
|
||||
},
|
||||
"jetlore": {
|
||||
"name": "Jetlore",
|
||||
"categoryId": 6,
|
||||
@@ -22410,6 +22417,7 @@
|
||||
"adservice.google.pl": "google_marketing",
|
||||
"adservice.google.ru": "google_marketing",
|
||||
"adservice.google.vg": "google_marketing",
|
||||
"adtrafficquality.google": "google_marketing",
|
||||
"dai.google.com": "google_marketing",
|
||||
"doubleclickbygoogle.com": "google_marketing",
|
||||
"googlesyndication-cn.com": "google_marketing",
|
||||
@@ -22763,6 +22771,22 @@
|
||||
"jeeng.com": "jeeng",
|
||||
"api.jeeng.com": "jeeng_widgets",
|
||||
"phone-analytics.com": "jet_interactive",
|
||||
"grazie.ai": "jetbrains",
|
||||
"intellij.net": "jetbrains",
|
||||
"jb.gg": "jetbrains",
|
||||
"jetbrains.ai": "jetbrains",
|
||||
"jetbrains.com": "jetbrains",
|
||||
"jetbrains.com.cn": "jetbrains",
|
||||
"jetbrains.dev": "jetbrains",
|
||||
"jetbrains.net": "jetbrains",
|
||||
"jetbrains.org": "jetbrains",
|
||||
"jetbrains.ru": "jetbrains",
|
||||
"jetbrains.space": "jetbrains",
|
||||
"kotl.in": "jetbrains",
|
||||
"kotlinconf.com": "jetbrains",
|
||||
"kotlinlang.org": "jetbrains",
|
||||
"myjetbrains.com": "jetbrains",
|
||||
"talkingkotlin.com": "jetbrains",
|
||||
"jetlore.com": "jetlore",
|
||||
"pixel.wp.com": "jetpack",
|
||||
"stats.wp.com": "jetpack",
|
||||
|
||||
Reference in New Issue
Block a user