feat: Consolidate settings into basic tab

This commit is contained in:
Ivan Kvashonkin
2024-11-11 18:28:58 +03:00
parent d8a860fb2f
commit b3678323ca
4 changed files with 496 additions and 1019 deletions

View File

@@ -13,6 +13,7 @@ return view.extend({
s = m.section(form.TypedSection, 'main'); s = m.section(form.TypedSection, 'main');
s.anonymous = true; s.anonymous = true;
// Basic Settings Tab
o = s.tab('basic', _('Basic Settings')); o = s.tab('basic', _('Basic Settings'));
o = s.taboption('basic', form.ListValue, 'mode', _('Connection Type'), _('Select between VPN and Proxy connection methods for traffic routing')); o = s.taboption('basic', form.ListValue, 'mode', _('Connection Type'), _('Select between VPN and Proxy connection methods for traffic routing'));
@@ -75,14 +76,12 @@ return view.extend({
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.tab('custom', _('User Settings')); o = s.taboption('basic', form.Flag, 'custom_domains_list_enabled', _('User Domain List'), _('Enable and manage your custom list of domains for selective routing'));
o = s.taboption('custom', form.Flag, 'custom_domains_list_enabled', _('User Domain List'), _('Enable and manage your custom list of domains for selective routing'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('custom', form.DynamicList, 'custom_domains', _('User Domains'), _('Enter domain names without protocols (example: sub.example.com or example.com)')); o = s.taboption('basic', form.DynamicList, 'custom_domains', _('User Domains'), _('Enter domain names without protocols (example: sub.example.com or example.com)'));
o.placeholder = 'Domains list'; o.placeholder = 'Domains list';
o.depends('custom_domains_list_enabled', '1'); o.depends('custom_domains_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -100,12 +99,12 @@ return view.extend({
return true; return true;
}; };
o = s.taboption('custom', form.Flag, 'custom_download_domains_list_enabled', _('Remote Domain Lists'), _('Download and use domain lists from remote URLs')); o = s.taboption('basic', form.Flag, 'custom_download_domains_list_enabled', _('Remote Domain Lists'), _('Download and use domain lists from remote URLs'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('custom', form.DynamicList, 'custom_download_domains', _('Remote Domain URLs'), _('Enter full URLs starting with http:// or https://')); o = s.taboption('basic', form.DynamicList, 'custom_download_domains', _('Remote Domain URLs'), _('Enter full URLs starting with http:// or https://'));
o.placeholder = 'URL'; o.placeholder = 'URL';
o.depends('custom_download_domains_list_enabled', '1'); o.depends('custom_download_domains_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -126,12 +125,12 @@ return view.extend({
} }
}; };
o = s.taboption('custom', form.Flag, 'custom_subnets_list_enabled', _('User Subnet List'), _('Enable and manage your custom list of IP subnets for selective routing')); o = s.taboption('basic', form.Flag, 'custom_subnets_list_enabled', _('User Subnet List'), _('Enable and manage your custom list of IP subnets for selective routing'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('custom', form.DynamicList, 'custom_subnets', _('User Subnets'), _('Enter subnet in CIDR notation (example: 192.168.1.0/24)')); o = s.taboption('basic', form.DynamicList, 'custom_subnets', _('User Subnets'), _('Enter subnet in CIDR notation (example: 192.168.1.0/24)'));
o.placeholder = 'Subnets list'; o.placeholder = 'Subnets list';
o.depends('custom_subnets_list_enabled', '1'); o.depends('custom_subnets_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -165,12 +164,12 @@ return view.extend({
return true; return true;
}; };
o = s.taboption('custom', form.Flag, 'custom_download_subnets_list_enabled', _('Remote Subnet Lists'), _('Download and use subnet lists from remote URLs')); o = s.taboption('basic', form.Flag, 'custom_download_subnets_list_enabled', _('Remote Subnet Lists'), _('Download and use subnet lists from remote URLs'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('custom', form.DynamicList, 'custom_download_subnets', _('Remote Subnet URLs'), _('Enter full URLs starting with http:// or https://')); o = s.taboption('basic', form.DynamicList, 'custom_download_subnets', _('Remote Subnet URLs'), _('Enter full URLs starting with http:// or https://'));
o.placeholder = 'URL'; o.placeholder = 'URL';
o.depends('custom_download_subnets_list_enabled', '1'); o.depends('custom_download_subnets_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -191,25 +190,23 @@ return view.extend({
} }
}; };
o = s.tab('additional', _('Additional Settings')); o = s.taboption('basic', form.Flag, 'delist_domains_enabled', _('Domain Exclusions'), _('Exclude specific domains from routing rules'));
o = s.taboption('additional', form.Flag, 'delist_domains_enabled', _('Domain Exclusions'), _('Exclude specific domains from routing rules'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('additional', form.DynamicList, 'delist_domains', _('Excluded Domains'), _('Domains to be excluded from routing')); o = s.taboption('basic', form.DynamicList, 'delist_domains', _('Excluded Domains'), _('Domains to be excluded from routing'));
o.placeholder = 'Delist domains'; o.placeholder = 'Delist domains';
o.depends('delist_domains_enabled', '1'); o.depends('delist_domains_enabled', '1');
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('additional', form.Flag, 'all_traffic_from_ip_enabled', _('Force Proxy IPs'), _('Specify local IP addresses whose traffic will always use the configured route')); o = s.taboption('basic', form.Flag, 'all_traffic_from_ip_enabled', _('Force Proxy IPs'), _('Specify local IP addresses whose traffic will always use the configured route'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('additional', form.DynamicList, 'all_traffic_ip', _('Local IPs'), _('Enter valid IPv4 addresses')); o = s.taboption('basic', form.DynamicList, 'all_traffic_ip', _('Local IPs'), _('Enter valid IPv4 addresses'));
o.placeholder = 'IP'; o.placeholder = 'IP';
o.depends('all_traffic_from_ip_enabled', '1'); o.depends('all_traffic_from_ip_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -236,12 +233,12 @@ return view.extend({
return true; return true;
}; };
o = s.taboption('additional', form.Flag, 'exclude_from_ip_enabled', _('Bypass Proxy IPs'), _('Specify local IP addresses that will never use the configured route')); o = s.taboption('basic', form.Flag, 'exclude_from_ip_enabled', _('Bypass Proxy IPs'), _('Specify local IP addresses that will never use the configured route'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.taboption('additional', form.DynamicList, 'exclude_traffic_ip', _('Local IPs'), _('Enter valid IPv4 addresses')); o = s.taboption('basic', form.DynamicList, 'exclude_traffic_ip', _('Local IPs'), _('Enter valid IPv4 addresses'));
o.placeholder = 'IP'; o.placeholder = 'IP';
o.depends('exclude_from_ip_enabled', '1'); o.depends('exclude_from_ip_enabled', '1');
o.rmempty = false; o.rmempty = false;
@@ -268,6 +265,9 @@ return view.extend({
return true; return true;
}; };
// Additional Settings Tab
o = s.tab('additional', _('Additional Settings'));
o = s.taboption('additional', form.Flag, 'yacd', _('Yacd enable'), _('http://openwrt.lan:9090/ui')); o = s.taboption('additional', form.Flag, 'yacd', _('Yacd enable'), _('http://openwrt.lan:9090/ui'));
o.default = '0'; o.default = '0';
o.depends('mode', 'proxy'); o.depends('mode', 'proxy');
@@ -298,26 +298,27 @@ return view.extend({
o.rmempty = false; o.rmempty = false;
o.ucisection = 'main'; o.ucisection = 'main';
o = s.tab('second_settings', _('Secondary Route')); // Secondary Settings Tab
o = s.tab('second_settings', _('Secondary Settings'));
o = s.taboption('second_settings', form.Flag, 'second_enable', _('Secondary Route Enable'), _('Enable secondary routing configuration')); o = s.taboption('second_settings', form.Flag, 'second_enable', _('Secondary Route Enable'), _('Enable secondary routing configuration'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.ucisection = 'second'; // This is correct o.ucisection = 'second';
o = s.taboption('second_settings', form.ListValue, 'second_mode', _('Connection Type'), _('Select between VPN and Proxy for secondary route')); o = s.taboption('second_settings', form.ListValue, 'second_mode', _('Connection Type'), _('Select between VPN and Proxy for secondary route'));
o.value('vpn', ('VPN')); o.value('vpn', ('VPN'));
o.value('proxy', ('Proxy')); o.value('proxy', ('Proxy'));
o.depends('second_enable', '1'); o.depends('second_enable', '1');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.TextValue, 'second_proxy_string', _('Proxy Configuration URL'), _('Enter connection string starting with vless:// or ss:// for proxy configuration')); o = s.taboption('second_settings', form.TextValue, 'second_proxy_string', _('Proxy Configuration URL'), _('Enter connection string starting with vless:// or ss:// for proxy configuration'));
o.depends('second_mode', 'proxy'); o.depends('second_mode', 'proxy');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.ListValue, 'second_interface', _('Network Interface'), _('Select network interface for VPN connection')); o = s.taboption('second_settings', form.ListValue, 'second_interface', _('Network Interface'), _('Select network interface for VPN connection'));
o.depends('second_mode', 'vpn'); o.depends('second_mode', 'vpn');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
try { try {
const devices = await network.getDevices(); const devices = await network.getDevices();
@@ -341,26 +342,26 @@ return view.extend({
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.depends('second_enable', '1'); o.depends('second_enable', '1');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.ListValue, 'service_list', _('Service List'), _('Select predefined services for secondary routing')); o = s.taboption('second_settings', form.ListValue, 'service_list', _('Service List'), _('Select predefined services for secondary routing'));
o.placeholder = 'placeholder'; o.placeholder = 'placeholder';
o.value('youtube', 'Youtube'); o.value('youtube', 'Youtube');
o.depends('domain_service_enabled', '1'); o.depends('domain_service_enabled', '1');
o.rmempty = false; o.rmempty = false;
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.Flag, 'second_custom_domains_list_enabled', _('Secondary Domain List'), _('Configure custom domains for secondary routing path')); o = s.taboption('second_settings', form.Flag, 'second_custom_domains_list_enabled', _('Secondary Domain List'), _('Configure custom domains for secondary routing path'));
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.depends('second_enable', '1'); o.depends('second_enable', '1');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.DynamicList, 'second_custom_domains', _('Secondary Domains'), _('Enter domain names without protocols (example: sub.example.com or example.com)')); o = s.taboption('second_settings', form.DynamicList, 'second_custom_domains', _('Secondary Domains'), _('Enter domain names without protocols (example: sub.example.com or example.com)'));
o.placeholder = 'Domains list'; o.placeholder = 'Domains list';
o.depends('second_custom_domains_list_enabled', '1'); o.depends('second_custom_domains_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o.validate = function (section_id, value) { o.validate = function (section_id, value) {
if (!value || value.length === 0) { if (!value || value.length === 0) {
return true; return true;
@@ -378,13 +379,13 @@ return view.extend({
o.default = '0'; o.default = '0';
o.rmempty = false; o.rmempty = false;
o.depends('second_enable', '1'); o.depends('second_enable', '1');
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o = s.taboption('second_settings', form.DynamicList, 'second_custom_subnets', _('Secondary Subnets'), _('Enter subnet in CIDR notation (example: 192.168.1.0/24)')); o = s.taboption('second_settings', form.DynamicList, 'second_custom_subnets', _('Secondary Subnets'), _('Enter subnet in CIDR notation (example: 192.168.1.0/24)'));
o.placeholder = 'Subnets list'; o.placeholder = 'Subnets list';
o.depends('second_custom_subnets_list_enabled', '1'); o.depends('second_custom_subnets_list_enabled', '1');
o.rmempty = false; o.rmempty = false;
o.ucisection = 'second'; // Changed to 'second' o.ucisection = 'second';
o.validate = function (section_id, value) { o.validate = function (section_id, value) {
if (!value || value.length === 0) { if (!value || value.length === 0) {
return true; return true;

View File

@@ -4,8 +4,8 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Podkop configuration" msgid "Podkop configuration"
msgstr "Настройка Podkop" msgstr "Настройка Podkop"
msgid "Basic Settings" msgid "Main Config"
msgstr "Основные настройки" msgstr "Основная конфигурация"
msgid "Connection Type" msgid "Connection Type"
msgstr "Тип подключения" msgstr "Тип подключения"
@@ -46,8 +46,11 @@ msgstr "Сети сервисов"
msgid "Select predefined service networks for routing" msgid "Select predefined service networks for routing"
msgstr "Выберите предустановленные сети сервисов для маршрутизации" msgstr "Выберите предустановленные сети сервисов для маршрутизации"
msgid "User Settings" msgid "Add-ons"
msgstr "Пользовательские настройки" msgstr "Дополнения"
msgid "Alternative Config"
msgstr "Альтернативная конфигурация"
msgid "User Domain List" msgid "User Domain List"
msgstr "Пользовательский список доменов" msgstr "Пользовательский список доменов"
@@ -58,9 +61,6 @@ msgstr "Включить и управлять пользовательским
msgid "User Domains" msgid "User Domains"
msgstr "Пользовательские домены" msgstr "Пользовательские домены"
msgid "Enter domain names without protocols (example: sub.example.com or example.com)"
msgstr "Введите имена доменов без протоколов (пример: sub.example.com или example.com)"
msgid "Remote Domain Lists" msgid "Remote Domain Lists"
msgstr "Удаленные списки доменов" msgstr "Удаленные списки доменов"
@@ -94,9 +94,6 @@ msgstr "Загрузка и использование списков подсе
msgid "Remote Subnet URLs" msgid "Remote Subnet URLs"
msgstr "URL удаленных подсетей" msgstr "URL удаленных подсетей"
msgid "Additional Settings"
msgstr "Дополнительные настройки"
msgid "Domain Exclusions" msgid "Domain Exclusions"
msgstr "Исключения доменов" msgstr "Исключения доменов"
@@ -172,9 +169,6 @@ msgstr "Исключить NTP"
msgid "For issues with open connections sing-box" msgid "For issues with open connections sing-box"
msgstr "Для проблем с открытыми соединениями sing-box" msgstr "Для проблем с открытыми соединениями sing-box"
msgid "Secondary Route"
msgstr "Вторичный маршрут"
msgid "Secondary Route Enable" msgid "Secondary Route Enable"
msgstr "Включить вторичный маршрут" msgstr "Включить вторичный маршрут"

View File

@@ -6,7 +6,7 @@ msgid "Podkop configuration"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Basic Settings" msgid "Main Config"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
@@ -62,73 +62,97 @@ msgid "Select predefined service networks for routing"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "User Settings" msgid "Add-ons"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Route" msgid "Alternative Config"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Route Enable" msgid "User Domain List"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Enable secondary routing configuration" msgid "Enable and manage your custom list of domains for selective routing"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Service Domain List Enable" msgid "User Domains"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Enable predefined service domain lists for secondary routing" msgid "Remote Domain Lists"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Service List" msgid "Download and use domain lists from remote URLs"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Select predefined services for secondary routing" msgid "Remote Domain URLs"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Domain List" msgid "Enter full URLs starting with http:// or https://"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Configure custom domains for secondary routing path" msgid "User Subnet List"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Domains" msgid "Enable and manage your custom list of IP subnets for selective routing"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Subnet List" msgid "User Subnets"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Configure custom subnets for secondary routing path" msgid "Remote Subnet Lists"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Secondary Subnets" msgid "Download and use subnet lists from remote URLs"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Additional Settings" msgid "Remote Subnet URLs"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Domain Exclusions" msgid "Domain Exclusions"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Exclude specific domains from routing rules"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Excluded Domains" msgid "Excluded Domains"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Force Proxy IPs"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Specify local IP addresses whose traffic will always use the configured route"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Local IPs"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Bypass Proxy IPs"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Specify local IP addresses that will never use the configured route"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "List Update Frequency" msgid "List Update Frequency"
msgstr "" msgstr ""
@@ -165,10 +189,6 @@ msgstr ""
msgid "Once a week on Sunday at 04:00" msgid "Once a week on Sunday at 04:00"
msgstr "" msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Once a week on Monday at 04:00"
msgstr ""
#: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0 #: applications/luci-app-podkop/htdocs/luci-static/resources/view/podkop/podkop.js:0
msgid "Yacd enable" msgid "Yacd enable"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff