summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua2
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm24
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/query.htm2
-rw-r--r--applications/luci-app-adblock/po/it/adblock.po15
-rw-r--r--applications/luci-app-adblock/po/ja/adblock.po18
-rw-r--r--applications/luci-app-adblock/po/pt-br/adblock.po15
-rw-r--r--applications/luci-app-adblock/po/ru/adblock.po15
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po15
-rw-r--r--applications/luci-app-adblock/po/templates/adblock.pot12
-rw-r--r--applications/luci-app-adblock/po/zh-cn/adblock.po58
-rw-r--r--applications/luci-app-adblock/po/zh-tw/adblock.po15
-rw-r--r--applications/luci-app-ddns/Makefile5
-rwxr-xr-xapplications/luci-app-ddns/luasrc/controller/ddns.lua57
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua96
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua20
-rw-r--r--applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua17
-rwxr-xr-xapplications/luci-app-ddns/luasrc/tools/ddns.lua150
-rw-r--r--applications/luci-app-ddns/luasrc/view/ddns/system_status.htm101
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua14
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua2
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua46
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua30
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua9
-rw-r--r--applications/luci-app-firewall/luasrc/tools/firewall.lua14
-rw-r--r--applications/luci-app-firewall/po/ca/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/cs/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/de/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/el/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/en/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/es/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/fr/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/he/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/hu/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/it/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/ja/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/ko/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/ms/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/no/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/pl/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/pt-br/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/pt/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/ro/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/ru/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/sk/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/sv/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/templates/firewall.pot3
-rw-r--r--applications/luci-app-firewall/po/tr/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/uk/firewall.po151
-rw-r--r--applications/luci-app-firewall/po/vi/firewall.po3
-rw-r--r--applications/luci-app-firewall/po/zh-cn/firewall.po11
-rw-r--r--applications/luci-app-firewall/po/zh-tw/firewall.po3
-rw-r--r--applications/luci-app-lxc/luasrc/controller/lxc.lua14
-rw-r--r--applications/luci-app-lxc/luasrc/view/lxc.htm51
-rw-r--r--applications/luci-app-mwan3/po/zh-cn/mwan3.po69
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/cbi.js516
-rw-r--r--modules/luci-base/luasrc/cbi.lua46
-rw-r--r--modules/luci-base/luasrc/dispatcher.lua11
-rw-r--r--modules/luci-base/luasrc/model/uci.lua10
-rw-r--r--modules/luci-base/luasrc/util.lua106
-rw-r--r--modules/luci-base/luasrc/view/cbi/apply_widget.htm148
-rw-r--r--modules/luci-base/luasrc/view/cbi/dropdown.htm42
-rw-r--r--modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm79
-rw-r--r--modules/luci-base/luasrc/view/cbi/map.htm2
-rw-r--r--modules/luci-base/luasrc/view/cbi/network_ifacelist.htm102
-rw-r--r--modules/luci-base/luasrc/view/cbi/network_netlist.htm90
-rw-r--r--modules/luci-base/luasrc/view/sysauth.htm4
-rw-r--r--modules/luci-base/po/ca/base.po41
-rw-r--r--modules/luci-base/po/cs/base.po41
-rw-r--r--modules/luci-base/po/de/base.po43
-rw-r--r--modules/luci-base/po/el/base.po36
-rw-r--r--modules/luci-base/po/en/base.po31
-rw-r--r--modules/luci-base/po/es/base.po41
-rw-r--r--modules/luci-base/po/fr/base.po41
-rw-r--r--modules/luci-base/po/he/base.po31
-rw-r--r--modules/luci-base/po/hu/base.po41
-rw-r--r--modules/luci-base/po/it/base.po53
-rw-r--r--modules/luci-base/po/ja/base.po41
-rw-r--r--modules/luci-base/po/ko/base.po41
-rw-r--r--modules/luci-base/po/ms/base.po31
-rw-r--r--modules/luci-base/po/no/base.po41
-rw-r--r--modules/luci-base/po/pl/base.po133
-rw-r--r--modules/luci-base/po/pt-br/base.po43
-rw-r--r--modules/luci-base/po/pt/base.po41
-rw-r--r--modules/luci-base/po/ro/base.po41
-rw-r--r--modules/luci-base/po/ru/base.po47
-rw-r--r--modules/luci-base/po/sk/base.po31
-rw-r--r--modules/luci-base/po/sv/base.po32
-rw-r--r--modules/luci-base/po/templates/base.pot29
-rw-r--r--modules/luci-base/po/tr/base.po31
-rw-r--r--modules/luci-base/po/uk/base.po1075
-rw-r--r--modules/luci-base/po/vi/base.po31
-rw-r--r--modules/luci-base/po/zh-cn/base.po94
-rw-r--r--modules/luci-base/po/zh-tw/base.po41
-rw-r--r--modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua17
-rw-r--r--modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua35
-rw-r--r--modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua11
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm4
-rw-r--r--modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm10
-rw-r--r--modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm6
-rw-r--r--protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua2
-rw-r--r--themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css175
-rw-r--r--themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm24
-rwxr-xr-xthemes/luci-theme-material/htdocs/luci-static/material/css/style.css263
-rw-r--r--themes/luci-theme-material/luasrc/view/themes/material/header.htm93
-rw-r--r--themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css255
-rw-r--r--themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm14
106 files changed, 3701 insertions, 1709 deletions
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
index 3f39622920..da783e3361 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
@@ -183,7 +183,7 @@ end
des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-cat = bl:option(DynamicList, "adb_src_cat", translate("Categories"))
+cat = bl:option(DynamicList, "adb_src_cat", translate("Archive Categories"))
cat.datatype = "uciname"
cat.optional = true
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
index 424a72f6fd..81622e9bc6 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
@@ -22,25 +22,35 @@ end
-%>
<style type="text/css">
-table.cbi-section-table th,
-table.cbi-section-table td,
+.table.cbi-section-table .th,
+.table.cbi-section-table .td,
.cbi-section-table-cell,
-.cbi-section-table-row,
-.cbi-input-text
+.cbi-section-table-row
{
text-align:left;
vertical-align:top;
margin-right:auto;
margin-left:0px;
+ padding-left:2px;
+ line-height:20px;
+ height:20px;
+}
+.table.cbi-section-table .th
+{
+ white-space:nowrap;
+}
+.table.cbi-section-table input
+{
+ width:7em;
}
.cbi-input-text
{
+ text-align:left;
+ padding-left:2px;
outline:none;
box-shadow:none;
background:transparent;
- padding-left:2px;
- line-height:25px;
- height:25px;
+ height:20px;
width:10em;
}
</style>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/query.htm b/applications/luci-app-adblock/luasrc/view/adblock/query.htm
index 8bbc92664d..8bbed3a53e 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/query.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/query.htm
@@ -35,7 +35,7 @@ This is free software, licensed under the Apache License, Version 2.0
else
{
input.style.display = 'none';
- output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>';
+ output.innerHTML = '<span class="error"><%:Blocklist not found!%></span>';
}
}
);
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po
index 7c64468e6a..c2db36effc 100644
--- a/applications/luci-app-adblock/po/it/adblock.po
+++ b/applications/luci-app-adblock/po/it/adblock.po
@@ -40,6 +40,9 @@ msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
msgid "Advanced"
msgstr "Avanzato"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Directory del Backup"
@@ -49,14 +52,14 @@ msgstr ""
msgid "Blocklist Sources"
msgstr "Fonti lista di Blocco"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -169,9 +172,6 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "File di input non trovato, per favore controlla la tua configurazione."
-msgid "Invalid domain specified!"
-msgstr "Dominio invalido specificato!"
-
msgid "Last Run"
msgstr "Ultimo Avvio"
@@ -371,6 +371,9 @@ msgstr "in pausa"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Dominio invalido specificato!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Fonti lista di blocco disponibili."
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po
index 5276f69626..cddedacd43 100644
--- a/applications/luci-app-adblock/po/ja/adblock.po
+++ b/applications/luci-app-adblock/po/ja/adblock.po
@@ -42,6 +42,9 @@ msgstr "Adblock ã®å‡¦ç†ãŒé–‹å§‹ã•ã‚Œã‚‹ã¾ã§ã®ã€è¿½åŠ ã®é…延時間(ç
msgid "Advanced"
msgstr "詳細設定"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—å…ˆ ディレクトリ"
@@ -51,6 +54,9 @@ msgstr "ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— モード"
msgid "Blocklist Sources"
msgstr "ブロックリストæ供元"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
@@ -58,9 +64,6 @@ msgstr ""
"ホワイトリストã«å­˜åœ¨ã—ãªã„全ドメインã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ブロックã™ã‚‹ãŸã‚ã«ã€è¿½åŠ ã§ "
"'Jail' リスト (/tmp/adb_list.jail) を作æˆã—ã¾ã™ã€‚<br />"
-msgid "Categories"
-msgstr "カテゴリー"
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -185,9 +188,6 @@ msgstr "ホワイトリスト ファイルã¸ã®ãƒ•ãƒ«ãƒ‘スã§ã™ã€‚"
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。設定を確èªã—ã¦ãã ã•ã„。"
-msgid "Invalid domain specified!"
-msgstr "無効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ï¼"
-
msgid "Last Run"
msgstr "最終実行"
@@ -399,3 +399,9 @@ msgstr "一時åœæ­¢"
msgid "running"
msgstr "実行中"
+
+#~ msgid "Categories"
+#~ msgstr "カテゴリー"
+
+#~ msgid "Invalid domain specified!"
+#~ msgstr "無効ãªãƒ‰ãƒ¡ã‚¤ãƒ³ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã™ï¼"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index 6e8098a395..07d0f9a8d2 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -43,6 +43,9 @@ msgstr ""
msgid "Advanced"
msgstr "Avançado"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Diretório da cópia de segurança"
@@ -52,14 +55,14 @@ msgstr ""
msgid "Blocklist Sources"
msgstr "Fontes de listas de bloqueio"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -169,9 +172,6 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
-msgid "Invalid domain specified!"
-msgstr "Domínio especificado inválido!"
-
msgid "Last Run"
msgstr ""
@@ -363,6 +363,9 @@ msgstr ""
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Domínio especificado inválido!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Fontes de listas de bloqueio disponíveis."
diff --git a/applications/luci-app-adblock/po/ru/adblock.po b/applications/luci-app-adblock/po/ru/adblock.po
index 24f42a7760..c1193d38e1 100644
--- a/applications/luci-app-adblock/po/ru/adblock.po
+++ b/applications/luci-app-adblock/po/ru/adblock.po
@@ -44,6 +44,9 @@ msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° в Ñекундах до Ð
msgid "Advanced"
msgstr "Дополнительно"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Папка Ð´Ð»Ñ Ð±Ñкапа"
@@ -53,6 +56,9 @@ msgstr "Режим ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð±ÐµÐºÐ°Ð¿Ð°"
msgid "Blocklist Sources"
msgstr "ИÑточники ÑпиÑков блокировки"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
@@ -61,9 +67,6 @@ msgstr ""
"заблокировать доÑтуп ко вÑем доменам, кроме тех что перечиÑлены в файле "
"Белого ÑпиÑка.<br />"
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -186,9 +189,6 @@ msgstr "Полный путь к файлу Белого ÑпиÑка."
msgid "Input file not found, please check your configuration."
msgstr "Config файл не найден, наÑтройте config файл."
-msgid "Invalid domain specified!"
-msgstr "Задан недопуÑтимый домен!"
-
msgid "Last Run"
msgstr "ПоÑледнее Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка"
@@ -397,6 +397,9 @@ msgstr "оÑтановлено"
msgid "running"
msgstr "работает"
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Задан недопуÑтимый домен!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "ИÑточники ÑпиÑков блокировки. "
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index 349d0cc490..4a7ca4b738 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -30,6 +30,9 @@ msgstr ""
msgid "Advanced"
msgstr "Avancerat"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "Säkerhetskopiera mapp"
@@ -39,14 +42,14 @@ msgstr ""
msgid "Blocklist Sources"
msgstr "Källor för blockeringslistor"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -160,9 +163,6 @@ msgid "Input file not found, please check your configuration."
msgstr ""
"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
-msgid "Invalid domain specified!"
-msgstr "Ogiltig domän angiven!"
-
msgid "Last Run"
msgstr "Kördes senast"
@@ -348,6 +348,9 @@ msgstr "pausad"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "Ogiltig domän angiven!"
+
#~ msgid "Available blocklist sources."
#~ msgstr "Tillgängliga källor för blockeringslistor"
diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot
index 67c52eaacd..a375d0edb6 100644
--- a/applications/luci-app-adblock/po/templates/adblock.pot
+++ b/applications/luci-app-adblock/po/templates/adblock.pot
@@ -30,6 +30,9 @@ msgstr ""
msgid "Advanced"
msgstr ""
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr ""
@@ -39,14 +42,14 @@ msgstr ""
msgid "Blocklist Sources"
msgstr ""
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -152,9 +155,6 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
-msgid "Invalid domain specified!"
-msgstr ""
-
msgid "Last Run"
msgstr ""
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index 42bf0c04b9..408d04055c 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -16,7 +16,7 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
msgid "'Jail' Blocklist Creation"
-msgstr ""
+msgstr "“Jail†拦截åå•åˆ›å»º"
msgid "-------"
msgstr "-------"
@@ -25,6 +25,7 @@ msgid ""
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
"than 64 MB free RAM, please only select a few of them!"
msgstr ""
+"<b>注æ„:</b>为防止在å°äºŽ 64M 空闲内存的设备上出现内存ä¸è¶³å¼‚常,请åªé€‰æ‹©å…¶ä¸­çš„几个ï¼"
msgid "Adblock"
msgstr "Adblock"
@@ -44,23 +45,26 @@ msgstr "è§¦å‘ Adblock 开始处ç†å‰çš„é¢å¤–延迟(以秒为å•ä½ï¼‰ã€‚"
msgid "Advanced"
msgstr "高级"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "备份目录"
msgid "Backup Mode"
-msgstr ""
+msgstr "备份模å¼"
msgid "Blocklist Sources"
msgstr "拦截列表æ¥æº"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -79,6 +83,7 @@ msgid ""
"Create compressed blocklist backups, they will be used in case of download "
"errors or during startup in backup mode."
msgstr ""
+"创建压缩的拦截列表备份,它们将在下载错误或备份模å¼å¯åŠ¨æœŸé—´ä½¿ç”¨ã€‚"
msgid "DNS Backend (DNS Directory)"
msgstr "DNS åŽç«¯ï¼ˆDNS 目录)"
@@ -95,7 +100,7 @@ msgid ""
msgstr "å¯åŠ¨æœŸé—´ä¸è¦è‡ªåŠ¨æ›´æ–° blocklists,改用 blocklists 的备份。"
msgid "Download Utility"
-msgstr ""
+msgstr "下载工具"
msgid "Download Utility (SSL Library)"
msgstr "下载实用程åºï¼ˆSSL 库)"
@@ -110,10 +115,10 @@ msgid "Edit Whitelist"
msgstr "编辑白åå•"
msgid "Email Notification"
-msgstr ""
+msgstr "Email æ醒"
msgid "Email Notification Count"
-msgstr ""
+msgstr "Email æ醒计数"
msgid "Enable Adblock"
msgstr "å¯ç”¨ Adblock"
@@ -125,6 +130,7 @@ msgid ""
"Enable memory intense overall sort / duplicate removal on low memory devices "
"(&lt; 64 MB free RAM)"
msgstr ""
+"在低内存设备上å¯ç”¨ç§¯æžçš„内存整体排åº/é‡å¤ç§»é™¤(&lt; 64 MB 空闲内存)"
msgid "Enable verbose debug logging in case of any processing error."
msgstr "在出现任何处ç†é”™è¯¯çš„情况下å¯ç”¨è¯¦ç»†è°ƒè¯•æ—¥å¿—记录。"
@@ -136,25 +142,29 @@ msgid "Extra Options"
msgstr "é¢å¤–选项"
msgid "Flush DNS Cache"
-msgstr ""
+msgstr "清空 DNS 缓存"
msgid "Flush DNS Cache after adblock processing."
-msgstr ""
+msgstr "在 adblock 进程å¯åŠ¨åŽæ¸…空 DNS 缓存。"
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or 'built-in'."
msgstr ""
+"å¯¹å— SSL ä¿æŠ¤çš„拦截列表æºï¼Œæ‚¨éœ€è¦ä¸€ä¸ªåˆé€‚çš„ SSL 库,如 “libustream-ssl†或 "
+"“built-inâ€ã€‚"
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">check the online "
"documentation</a>"
msgstr ""
+"进一步信æ¯<a href=\"%s\" target=\"_blank\">请访问在线文档"
msgid ""
"For further performance improvements you can raise this value, e.g. '8' or "
"'16' should be safe."
msgstr ""
+"为了进一步æ高性能,您å¯ä»¥æ高此值,例如:8 或 16 应该是安全的。"
msgid "Force Local DNS"
msgstr "强制本地 DNS"
@@ -163,14 +173,11 @@ msgid "Force Overall Sort"
msgstr "强制整体排åº"
msgid "Full path to the whitelist file."
-msgstr ""
+msgstr "白åå•æ–‡ä»¶çš„全路径。"
msgid "Input file not found, please check your configuration."
msgstr "输入文件未找到,请检查您的é…置。"
-msgid "Invalid domain specified!"
-msgstr "无效域åï¼"
-
msgid "Last Run"
msgstr "最åŽè¿è¡Œ"
@@ -178,6 +185,7 @@ msgid ""
"List of available network interfaces. Usually the startup will be triggered "
"by the 'wan' interface.<br />"
msgstr ""
+"å¯ç”¨ç½‘络接å£åˆ—表。通常å¯åŠ¨å°†ç”± “wan†接å£è§¦å‘。<br />"
msgid ""
"List of supported DNS backends with their default list export directory.<br /"
@@ -185,13 +193,13 @@ msgid ""
msgstr "支æŒçš„ DNS åŽç«¯åˆ—表åŠå…¶é»˜è®¤åˆ—表导出目录。<br />"
msgid "List of supported and fully pre-configured download utilities."
-msgstr ""
+msgstr "支æŒå’Œå®Œå…¨é¢„é…置的下载工具列表。"
msgid "Loading"
msgstr "加载中"
msgid "Max. Download Queue"
-msgstr ""
+msgstr "最大下载队列"
msgid "No"
msgstr "å¦"
@@ -201,7 +209,7 @@ msgid ""
msgstr "在默认设置并ä¸é€‚åˆæ‚¨æ—¶çš„é¢å¤–选项。"
msgid "Overall Domains"
-msgstr ""
+msgstr "域å总览"
msgid "Overview"
msgstr "总览"
@@ -219,6 +227,7 @@ msgstr "请在终端会è¯ä¸­ç›´æŽ¥ç¼–辑此文件。"
msgid ""
"Please note: this needs additional 'msmtp' package installation and setup."
msgstr ""
+"请注æ„:这需è¦é¢å¤–çš„ “msmtp†软件包安装和设置。"
msgid "Query"
msgstr "查询"
@@ -230,6 +239,7 @@ msgid ""
"Raise the minimum email notification count, to get emails if the overall "
"count is less or equal to the given limit (default 0),<br />"
msgstr ""
+"如果总数å°äºŽæˆ–等于给定é™åˆ¶ï¼ˆé»˜è®¤ä¸º 0),请æ高最å°ç”µå­é‚®ä»¶é€šçŸ¥æ•°ï¼Œä»¥èŽ·å–电å­é‚®ä»¶ã€‚"
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "将所有 DNS 查询从“lanâ€åŒºåŸŸé‡å®šå‘到本地解æžå™¨ã€‚"
@@ -250,11 +260,13 @@ msgid ""
"Send notification emails in case of a processing error or if domain count is "
"&le; 0.<br />"
msgstr ""
+"如果å‘生错误或域计数 &le; 0,å‘é€é€šçŸ¥ç”µå­é‚®ä»¶ã€‚<br />"
msgid ""
"Size of the download queue to handle downloads &amp; list processing in "
"parallel (default '4').<br />"
msgstr ""
+"处ç†ä¸‹è½½é˜Ÿåˆ—çš„å¤§å° ï¼†amp; 并行处ç†åˆ—表(默认 “4â€ï¼‰ã€‚<br />"
msgid "Startup Trigger"
msgstr "å¯åŠ¨è§¦å‘器"
@@ -269,12 +281,14 @@ msgid ""
"Target directory for adblock backups. Please use only non-volatile disks, e."
"g. an external usb stick."
msgstr ""
+"adblock 备份的目标目录。 请仅使用éžæ˜“失性ç£ç›˜ï¼Œä¾‹å¦‚:一个外置 U 盘。"
msgid "Target directory for the generated blocklist 'adb_list.overall'."
msgstr "生æˆçš„ blocklist 'adb_list.overall'的目标目录。"
msgid "The file size is too large for online editing in LuCI (&ge; 100 KB)."
msgstr ""
+"文件过大,无法使用 LuCI 的在线编辑(&ge; 100 KB)。"
msgid ""
"This form allows you to modify the content of the adblock blacklist (%s)."
@@ -319,7 +333,7 @@ msgid "Waiting for command to complete..."
msgstr "正在执行命令..."
msgid "Whitelist File"
-msgstr ""
+msgstr "白åå•æ–‡ä»¶"
msgid "Yes"
msgstr "是"
@@ -328,6 +342,7 @@ msgid ""
"You can use this restrictive blocklist manually e.g. for guest wifi or "
"kidsafe configurations."
msgstr ""
+"您å¯ä»¥æ‰‹åŠ¨ä½¿ç”¨æ­¤é™åˆ¶æ€§æ‹¦æˆªåˆ—表,例如:为客人æä¾› wifi 或 kidsafe é…置。"
msgid "disabled"
msgstr "å·²ç¦ç”¨"
@@ -335,7 +350,7 @@ msgstr "å·²ç¦ç”¨"
msgid ""
"e.g. to receive an email notification with every adblock update set this "
"value to 150000."
-msgstr ""
+msgstr "例如:è¦æŽ¥æ”¶æ¯ä¸ª adblock 更新的电å­é‚®ä»¶é€šçŸ¥æ—¶å°†æ­¤å€¼è®¾ç½®ä¸º150000。"
msgid "enabled"
msgstr "å·²å¯ç”¨"
@@ -350,7 +365,10 @@ msgid "paused"
msgstr "已暂åœ"
msgid "running"
-msgstr ""
+msgstr "è¿è¡Œä¸­"
+
+#~ msgid "Invalid domain specified!"
+#~ msgstr "无效域åï¼"
#~ msgid "Available blocklist sources."
#~ msgstr "å¯ç”¨çš„ blocklist æ¥æºã€‚"
diff --git a/applications/luci-app-adblock/po/zh-tw/adblock.po b/applications/luci-app-adblock/po/zh-tw/adblock.po
index f42d1b3807..45b19cdc80 100644
--- a/applications/luci-app-adblock/po/zh-tw/adblock.po
+++ b/applications/luci-app-adblock/po/zh-tw/adblock.po
@@ -44,6 +44,9 @@ msgstr "觸發 Adblock 開始處ç†å‰çš„é¡å¤–延é²ï¼ˆä»¥ç§’為單ä½ï¼‰ã€‚"
msgid "Advanced"
msgstr "高階"
+msgid "Archive Categories"
+msgstr ""
+
msgid "Backup Directory"
msgstr "備份目錄"
@@ -53,14 +56,14 @@ msgstr ""
msgid "Blocklist Sources"
msgstr "攔截列表來æº"
+msgid "Blocklist not found!"
+msgstr ""
+
msgid ""
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
"domains except those listed in the whitelist file.<br />"
msgstr ""
-msgid "Categories"
-msgstr ""
-
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
"timeout (default 30 sec.) or select another trigger interface."
@@ -168,9 +171,6 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr "輸入檔案未找到,請檢查您的é…置。"
-msgid "Invalid domain specified!"
-msgstr "無效域åï¼"
-
msgid "Last Run"
msgstr "最後執行"
@@ -352,6 +352,9 @@ msgstr "已暫åœ"
msgid "running"
msgstr ""
+#~ msgid "Invalid domain specified!"
+#~ msgstr "無效域åï¼"
+
#~ msgid "Available blocklist sources."
#~ msgstr "å¯ç”¨çš„ blocklist 來æºã€‚"
diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile
index bd6ddeb1b3..7295189518 100644
--- a/applications/luci-app-ddns/Makefile
+++ b/applications/luci-app-ddns/Makefile
@@ -16,10 +16,11 @@ PKG_VERSION:=2.4.9
# Release == build
# increase on changes of translation files
-PKG_RELEASE:=3
+PKG_RELEASE:=5
PKG_LICENSE:=Apache-2.0
-PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>, \
+ Ansuel Smith <ansuelsmth@gmail.com>
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua
index 5f4a5118c3..e152bb0d98 100755
--- a/applications/luci-app-ddns/luasrc/controller/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua
@@ -21,7 +21,6 @@ luci_helper = "/usr/lib/ddns/dynamic_dns_lucihelper.sh"
local srv_name = "ddns-scripts"
local srv_ver_min = "2.7.7" -- minimum version of service required
-local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
local app_name = "luci-app-ddns"
local app_title = "Dynamic DNS"
local app_version = "2.4.9-1"
@@ -29,7 +28,6 @@ local app_version = "2.4.9-1"
function index()
local nxfs = require "nixio.fs" -- global definitions not available
local sys = require "luci.sys" -- in function index()
- local ddns = require "luci.tools.ddns" -- ddns multiused functions
local muci = require "luci.model.uci"
-- no config create an empty one
@@ -81,33 +79,40 @@ end
-- Standardized application/service functions
function app_title_main()
- return [[<a href="javascript:alert(']]
- .. I18N.translate("Version Information")
- .. [[\n\n]] .. app_name
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] .. app_version
- .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]]
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
- .. srv_ver_min .. [[ ]] .. I18N.translate("or higher")
- .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]]
- .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
- .. (service_version() or I18N.translate("NOT installed"))
- .. [[\n\n]]
- .. [[')">]]
- .. I18N.translate(app_title)
- .. [[</a>]]
+ tmp = {}
+ tmp[#tmp+1] = [[<a href="javascript:alert(']]
+ tmp[#tmp+1] = I18N.translate("Version Information")
+ tmp[#tmp+1] = [[\n\n]] .. app_name
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]] .. app_version
+ tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]]
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]]
+ tmp[#tmp+1] = srv_ver_min .. [[ ]] .. I18N.translate("or higher")
+ tmp[#tmp+1] = [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]]
+ tmp[#tmp+1] = [[\n]] .. I18N.translate("Version") .. [[: ]]
+ tmp[#tmp+1] = (service_version() or I18N.translate("NOT installed"))
+ tmp[#tmp+1] = [[\n\n]]
+ tmp[#tmp+1] = [[')">]]
+ tmp[#tmp+1] = I18N.translate(app_title)
+ tmp[#tmp+1] = [[</a>]]
+
+ return table.concat(tmp)
end
-function service_version()
- local ver = nil
-
- ver = UTIL.exec(srv_ver_cmd)
- if #ver > 0 then return ver end
- IPKG.list_installed(srv_name, function(n, v, d)
- if v and (#v > 0) then ver = v end
- end
- )
- return ver
+function service_version()
+
+ local srv_ver_cmd = luci_helper .. " -V | awk {'print $2'} "
+ local ver
+
+ if IPKG then
+ ver = IPKG.info(srv_name)[srv_name].Version
+ else
+ ver = UTIL.exec(srv_ver_cmd)
+ end
+
+ if ver and #ver > 0 then return ver or nil end
+
end
+
function service_ok()
return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min)
end
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
index 977dbe34b1..eb2159076e 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
@@ -172,7 +172,7 @@ local function _option_used(option, urlscript)
end
-- function to verify if option is valid
-local function _option_validate(self, value)
+local function _option_validate(self, value, optional)
-- section is globally defined here be calling agrument (see above)
local fusev6 = usev6:formvalue(section) or "0"
local fsvc4 = svc4:formvalue(section) or "-"
@@ -204,6 +204,7 @@ local function _option_validate(self, value)
if used < 1 then return "" end
-- needed but no data then return error
if not value or (#value == 0) then
+ if optional then return nil end
return nil, err_tab_basic(self) .. translate("missing / required")
end
return value
@@ -292,6 +293,10 @@ function luh.parse(self, section, novld)
end
-- use_ipv6 -- ################################################################
+
+--We call it globally as it's called 11 times even outside specific function, saves 11 os.execute slow command!
+local has_ipv6 = DDNS.env_info("has_ipv6")
+
usev6 = ns:taboption("basic", ListValue, "use_ipv6",
translate("IP address version"),
translate("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider") )
@@ -300,16 +305,16 @@ usev6.default = "0"
usev6:value("0", translate("IPv4-Address") )
function usev6.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section) or "0"
- if DDNS.has_ipv6 or (value == "1" and not DDNS.has_ipv6) then
+ if has_ipv6 or (value == "1" and not has_ipv6) then
self:value("1", translate("IPv6-Address") )
end
- if value == "1" and not DDNS.has_ipv6 then
+ if value == "1" and not has_ipv6 then
self.description = err_ipv6_basic
end
return value
end
function usev6.validate(self, value)
- if (value == "1" and DDNS.has_ipv6) or value == "0" then
+ if (value == "1" and has_ipv6) or value == "0" then
return value
end
return nil, err_tab_basic(self) .. err_ipv6_plain
@@ -360,7 +365,7 @@ svc6 = ns:taboption("basic", ListValue, "ipv6_service_name",
translate("DDNS Service provider") .. " [IPv6]" )
svc6.default = "-"
svc6:depends("use_ipv6", "1") -- only show on IPv6
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
svc6.description = err_ipv6_basic
end
function svc6.cfgvalue(self, section)
@@ -374,7 +379,7 @@ function svc6.cfgvalue(self, section)
end
function svc6.validate(self, value)
if usev6:formvalue(section) == "1" then -- do only on IPv6
- if DDNS.has_ipv6 then return value end
+ if has_ipv6 then return value end
return nil, err_tab_basic(self) .. err_ipv6_plain
else
return "" -- suppress validate error
@@ -509,18 +514,18 @@ pe = ns:taboption("basic", Value, "param_enc",
translate("Optional Encoded Parameter"),
translate("Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)") )
function pe.validate(self, value)
- return _option_validate(self, value)
+ return _option_validate(self, value, true)
end
function pe.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
end
--- IPv4/IPv6 - param_enc -- ###################################################
+-- IPv4/IPv6 - param_opt -- ###################################################
po = ns:taboption("basic", Value, "param_opt",
translate("Optional Parameter"),
translate("Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)") )
function po.validate(self, value)
- return _option_validate(self, value)
+ return _option_validate(self, value, true)
end
function po.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
@@ -586,13 +591,17 @@ end
svc6:value("-", translate("-- custom --") )
-- IPv4/IPv6 - use_https -- ###################################################
-if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
+
+--We call it globally as it's called 4 times outside specific function.
+local has_ssl = DDNS.env_info("has_ssl")
+
+if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
https = ns:taboption("basic", Flag, "use_https",
translate("Use HTTP Secure") )
https.orientation = "horizontal"
function https.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_ssl and value == "1" then
+ if not has_ssl and value == "1" then
self.description = bold_on .. font_red ..
translate("HTTPS not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
@@ -602,7 +611,7 @@ if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
return value
end
function https.validate(self, value)
- if (value == "1" and DDNS.has_ssl ) or value == "0" then return value end
+ if (value == "1" and has_ssl ) or value == "0" then return value end
return nil, err_tab_basic(self) .. translate("HTTPS not supported") .. " !"
end
function https.write(self, section, value)
@@ -616,7 +625,7 @@ if DDNS.has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then
end
-- IPv4/IPv6 - cacert -- ######################################################
-if DDNS.has_ssl then
+if has_ssl then
cert = ns:taboption("basic", Value, "cacert",
translate("Path to CA-Certificate"),
translate("directory or path/file") .. "<br />" ..
@@ -706,7 +715,7 @@ src6:value("network", translate("Network"))
src6:value("web", translate("URL"))
src6:value("interface", translate("Interface"))
src6:value("script", translate("Script"))
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
src6.description = err_ipv6_other
end
function src6.cfgvalue(self, section)
@@ -715,7 +724,7 @@ end
function src6.validate(self, value)
if usev6:formvalue(section) ~= "1" then
return "" -- ignore on IPv4 selected
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
elseif not _verify_ip_source() then
return nil, err_tab_adv(self) ..
@@ -794,7 +803,7 @@ ipn6 = ns:taboption("advanced", ListValue, "ipv6_network",
ipn6:depends("ipv6_source", "network")
ipn6.default = "wan6"
WADM.cbi_add_networks(ipn6)
-if DDNS.has_ipv6 then
+if has_ipv6 then
ipn6.description = translate("Defines the network to read systems IPv6-Address from")
else
ipn6.description = err_ipv6_other
@@ -808,7 +817,7 @@ function ipn6.validate(self, value)
-- ignore if IPv4 selected OR
-- ignore everything except "network"
return ""
- elseif DDNS.has_ipv6 then
+ elseif has_ipv6 then
return value
else
return nil, err_tab_adv(self) .. err_ipv6_plain
@@ -881,7 +890,7 @@ iurl6 = ns:taboption("advanced", Value, "ipv6_url",
translate("URL to detect") .. " [IPv6]" )
iurl6:depends("ipv6_source", "web")
iurl6.default = "http://checkipv6.dyndns.com"
-if DDNS.has_ipv6 then
+if has_ipv6 then
iurl6.description = translate("Defines the Web page to read systems IPv6-Address from")
else
iurl6.description = err_ipv6_other
@@ -895,7 +904,7 @@ function iurl6.validate(self, value)
-- ignore if IPv4 selected OR
-- ignore everything except "web"
return ""
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
elseif not value or #value == 0 then
return nil, err_tab_adv(self) .. translate("missing / required")
@@ -1051,7 +1060,7 @@ eif6:depends("ipv6_source", "web")
eif6:depends("ipv6_source", "script")
eif6.default = "wan6"
WADM.cbi_add_networks(eif6)
-if not DDNS.has_ipv6 then
+if not has_ipv6 then
eif6.description = err_ipv6_other
else
eif6.description = translate("Network on which the ddns-updater scripts will be started")
@@ -1065,7 +1074,7 @@ function eif6.validate(self, value)
or fsrc6 == "network"
or fsrc6 == "interface" then
return "" -- ignore IPv4, network, interface
- elseif not DDNS.has_ipv6 then
+ elseif not has_ipv6 then
return nil, err_tab_adv(self) .. err_ipv6_plain
else
return value
@@ -1084,10 +1093,13 @@ function eif6.write(self, section, value)
end
function eif6.parse(self, section, novld)
DDNS.value_parse(self, section, novld)
-end
+end
-- IPv4/IPv6 - bind_network -- ################################################
-if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
+
+local has_bindnet = DDNS.env_info("has_bindnet")
+
+if has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
bnet = ns:taboption("advanced", ListValue, "bind_network",
translate("Bind Network") )
bnet:depends("ipv4_source", "web")
@@ -1097,7 +1109,7 @@ if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
WADM.cbi_add_networks(bnet)
function bnet.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_bindnet and value ~= "" then
+ if not has_bindnet and value ~= "" then
self.description = bold_on .. font_red ..
translate("Binding to a specific network not supported") .. font_off .. "<br />" ..
translate("please set to 'default'") .. " !" .. bold_off
@@ -1108,7 +1120,7 @@ if DDNS.has_bindnet or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then
return value
end
function bnet.validate(self, value)
- if ( (value ~= "") and DDNS.has_bindnet ) or (value == "") then return value end
+ if ( (value ~= "") and has_bindnet ) or (value == "") then return value end
return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !"
end
function bnet.parse(self, section, novld)
@@ -1119,13 +1131,16 @@ end
-- IPv4 + IPv6 - force_ipversion -- ###########################################
-- optional to force wget/curl and host to use only selected IP version
-- command parameter "-4" or "-6"
-if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then
+
+local has_forceip = DDNS.env_info("has_forceip")
+
+if has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then
fipv = ns:taboption("advanced", Flag, "force_ipversion",
translate("Force IP Version") )
fipv.orientation = "horizontal"
function fipv.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_forceip and value ~= "0" then
+ if not has_forceip and value ~= "0" then
self.description = bold_on .. font_red ..
translate("Force IP Version not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
@@ -1135,14 +1150,17 @@ if DDNS.has_forceip or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) t
return value
end
function fipv.validate(self, value)
- if (value == "1" and DDNS.has_forceip) or value == "0" then return value end
+ if (value == "1" and has_forceip) or value == "0" then return value end
return nil, err_tab_adv(self) .. translate("Force IP Version not supported")
end
end
-- IPv4 + IPv6 - dns_server -- ################################################
-- optional DNS Server to use resolving my IP
-if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
+
+local has_dnsserver = DDNS.env_info("has_dnsserver")
+
+if has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
dns = ns:taboption("advanced", Value, "dns_server",
translate("DNS-Server"),
translate("OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'.") .. "<br />" ..
@@ -1152,7 +1170,7 @@ if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
-- if .datatype is set, then it is checked before calling this function
if not value or (#value == 0) then
return "" -- ignore on empty
- elseif not DDNS.has_dnsserver then
+ elseif not has_dnsserver then
return nil, err_tab_adv(self) .. translate("Specifying a DNS-Server is not supported")
elseif not DTYP.host(value) then
return nil, err_tab_adv(self) .. translate("use hostname, FQDN, IPv4- or IPv6-Address")
@@ -1179,13 +1197,16 @@ if DDNS.has_dnsserver or ( ( m:get(section, "dns_server") or "" ) ~= "" ) then
end
-- IPv4 + IPv6 - force_dnstcp -- ##############################################
-if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then
+
+local has_bindhost = DDNS.env_info("has_bindhost")
+
+if has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then
tcp = ns:taboption("advanced", Flag, "force_dnstcp",
translate("Force TCP on DNS") )
tcp.orientation = "horizontal"
function tcp.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_bindhost and value ~= "0" then
+ if not has_bindhost and value ~= "0" then
self.description = bold_on .. font_red ..
translate("DNS requests via TCP not supported") .. font_off .. "<br />" ..
translate("please disable") .. " !" .. bold_off
@@ -1195,7 +1216,7 @@ if DDNS.has_bindhost or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) the
return value
end
function tcp.validate(self, value)
- if (value == "1" and DDNS.has_bindhost ) or value == "0" then
+ if (value == "1" and has_bindhost ) or value == "0" then
return value
end
return nil, err_tab_adv(self) .. translate("DNS requests via TCP not supported")
@@ -1204,13 +1225,16 @@ end
-- IPv4 + IPv6 - proxy -- #####################################################
-- optional Proxy to use for http/https requests [user:password@]proxyhost[:port]
-if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
+
+local has_proxy = DDNS.env_info("has_proxy")
+
+if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
pxy = ns:taboption("advanced", Value, "proxy",
translate("PROXY-Server") )
pxy.placeholder="user:password@myproxy.lan:8080"
function pxy.cfgvalue(self, section)
local value = AbstractValue.cfgvalue(self, section)
- if not DDNS.has_proxy and value ~= "" then
+ if not has_proxy and value ~= "" then
self.description = bold_on .. font_red ..
translate("PROXY-Server not supported") .. font_off .. "<br />" ..
translate("please remove entry") .. "!" .. bold_off
@@ -1226,7 +1250,7 @@ if DDNS.has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then
-- if .datatype is set, then it is checked before calling this function
if not value or (#value == 0) then
return "" -- ignore on empty
- elseif DDNS.has_proxy then
+ elseif has_proxy then
local ipv6 = usev6:formvalue(section) or "0"
local force = fipv:formvalue(section) or "0"
local command = CTRL.luci_helper .. [[ -]]
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
index df39a3a7e5..419201548b 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
@@ -48,7 +48,7 @@ if not SYS.init.enabled("ddns") then
end
-- No IPv6 support
-if not DDNS.has_ipv6 then
+if not DDNS.env_info("has_ipv6") then
local v6 = s:option(DummyValue, "_no_ipv6")
v6.titleref = 'http://www.openwrt.org" target="_blank'
v6.rawhtml = true
@@ -60,7 +60,7 @@ if not DDNS.has_ipv6 then
end
-- No HTTPS support
-if not DDNS.has_ssl then
+if not DDNS.env_info("has_ssl") then
local sl = s:option(DummyValue, "_no_https")
sl.titleref = DISP.build_url("admin", "system", "packages")
sl.rawhtml = true
@@ -74,7 +74,7 @@ if not DDNS.has_ssl then
end
-- No bind_network
-if not DDNS.has_bindnet then
+if not DDNS.env_info("has_bindnet") then
local bn = s:option(DummyValue, "_no_bind_network")
bn.titleref = DISP.build_url("admin", "system", "packages")
bn.rawhtml = true
@@ -90,7 +90,7 @@ if not DDNS.has_bindnet then
end
-- currently only cURL possibly without proxy support
-if not DDNS.has_proxy then
+if not DDNS.env_info("has_proxy") then
local px = s:option(DummyValue, "_no_proxy")
px.titleref = DISP.build_url("admin", "system", "packages")
px.rawhtml = true
@@ -104,7 +104,7 @@ if not DDNS.has_proxy then
end
-- "Force IP Version not supported"
-if not DDNS.has_forceip then
+if not DDNS.env_info("has_forceip") then
local fi = s:option(DummyValue, "_no_force_ip")
fi.titleref = DISP.build_url("admin", "system", "packages")
fi.rawhtml = true
@@ -112,11 +112,11 @@ if not DDNS.has_forceip then
translate("Force IP Version not supported") .. bold_off
local value = translate("BusyBox's nslookup and Wget do not support to specify " ..
"the IP version to use for communication with DDNS Provider!")
- if not (DDNS.has_wgetssl or DDNS.has_curl or DDNS.has_fetch) then
+ if not (DDNS.env_info("has_wgetssl") or DDNS.env_info("has_curl") or DDNS.env_info("has_fetch")) then
value = value .. "<br />- " ..
translate("You should install 'wget' or 'curl' or 'uclient-fetch' package.")
end
- if not DDNS.has_bindhost then
+ if not DDNS.env_info("has_bindhost") then
value = value .. "<br />- " ..
translate("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.")
end
@@ -124,7 +124,7 @@ if not DDNS.has_forceip then
end
-- "DNS requests via TCP not supported"
-if not DDNS.has_bindhost then
+if not DDNS.env_info("has_bindhost") then
local dt = s:option(DummyValue, "_no_dnstcp")
dt.titleref = DISP.build_url("admin", "system", "packages")
dt.rawhtml = true
@@ -137,7 +137,7 @@ if not DDNS.has_bindhost then
end
-- nslookup compiled with musl produce problems when using
-if not DDNS.has_dnsserver then
+if not DDNS.env_info("has_dnsserver") then
local ds = s:option(DummyValue, "_no_dnsserver")
ds.titleref = DISP.build_url("admin", "system", "packages")
ds.rawhtml = true
@@ -151,7 +151,7 @@ if not DDNS.has_dnsserver then
end
-- certificates installed
-if DDNS.has_ssl and not DDNS.has_cacerts then
+if DDNS.env_info("has_ssl") and not DDNS.env_info("has_cacerts") then
local ca = s:option(DummyValue, "_no_certs")
ca.titleref = DISP.build_url("admin", "system", "packages")
ca.rawhtml = true
diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
index 114f831c17..11f73800ea 100644
--- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
+++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
@@ -1,21 +1,20 @@
-- Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
-- Licensed to the public under the Apache License 2.0.
-local NXFS = require "nixio.fs"
local DISP = require "luci.dispatcher"
local HTTP = require "luci.http"
local SYS = require "luci.sys"
local CTRL = require "luci.controller.ddns" -- this application's controller
local DDNS = require "luci.tools.ddns" -- ddns multiused functions
-local show_hints = not (DDNS.has_ipv6 -- IPv6 support
- and DDNS.has_ssl -- HTTPS support
- and DDNS.has_proxy -- Proxy support
- and DDNS.has_bindhost -- DNS TCP support
- and DDNS.has_forceip -- Force IP version
- and DDNS.has_dnsserver -- DNS server support
- and DDNS.has_bindnet -- Bind to network/interface
- and DDNS.has_cacerts -- certificates installed at /etc/ssl/certs
+local show_hints = not (DDNS.env_info("has_ipv6") -- IPv6 support
+ and DDNS.env_info("has_ssl") -- HTTPS support
+ and DDNS.env_info("has_proxy") -- Proxy support
+ and DDNS.env_info("has_bindhost") -- DNS TCP support
+ and DDNS.env_info("has_forceip") -- Force IP version
+ and DDNS.env_info("has_dnsserver") -- DNS server support
+ and DDNS.env_info("has_bindnet") -- Bind to network/interface
+ and DDNS.env_info("has_cacerts") -- certificates installed at /etc/ssl/certs
)
local not_enabled = not SYS.init.enabled("ddns")
local need_update = not CTRL.service_ok()
diff --git a/applications/luci-app-ddns/luasrc/tools/ddns.lua b/applications/luci-app-ddns/luasrc/tools/ddns.lua
index 690b9b30ce..57913a51fe 100755
--- a/applications/luci-app-ddns/luasrc/tools/ddns.lua
+++ b/applications/luci-app-ddns/luasrc/tools/ddns.lua
@@ -5,36 +5,134 @@ module("luci.tools.ddns", package.seeall)
local NX = require "nixio"
local NXFS = require "nixio.fs"
-local OPKG = require "luci.model.ipkg"
local UCI = require "luci.model.uci"
local SYS = require "luci.sys"
-local UTIL = require "luci.util"
-local function _check_certs()
- local _, v = NXFS.glob("/etc/ssl/certs/*.crt")
- if ( v == 0 ) then _, v = NXFS.glob("/etc/ssl/certs/*.pem") end
- return (v > 0)
-end
+function env_info(type)
+
+ if ( type == "has_ssl" ) or ( type == "has_proxy" ) or ( type == "has_forceip" )
+ or ( type == "has_bindnet" ) or ( type == "has_fetch" )
+ or ( type == "has_wgetssl" ) or ( type == "has_curl" )
+ or ( type == "has_curlssl" ) or ( type == "has_curlpxy" )
+ or ( type == "has_fetchssl" ) or ( type == "has_bbwget" ) then
+
+ local function has_wgetssl()
+ return (SYS.call( [[which wget-ssl >/dev/null 2>&1]] ) == 0) -- and true or nil
+ end
+
+ local function has_curlssl()
+ return (SYS.call( [[$(which curl) -V 2>&1 | grep "Protocols:" | grep -qF "https"]] ) ~= 0)
+ end
+
+ local function has_fetch()
+ return (SYS.call( [[which uclient-fetch >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_fetchssl()
+ return NXFS.access("/lib/libustream-ssl.so")
+ end
+
+ local function has_curl()
+ return (SYS.call( [[which curl >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_curlpxy()
+ return (SYS.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_bbwget()
+ return (SYS.call( [[$(which wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0)
+ end
+
+ if type == "has_wgetssl" then
+ return has_wgetssl()
+
+ elseif type == "has_curl" then
+ return has_curl()
+
+ elseif type == "has_curlssl" then
+ return has_curlssl()
+
+ elseif type == "has_curlpxy" then
+ return has_curlpxy()
+
+ elseif type == "has_fetch" then
+ return has_fetch()
+
+ elseif type == "has_fetchssl" then
+ return has_fetchssl()
+
+ elseif type == "has_bbwget" then
+ return has_bbwget()
+
+ elseif type == "has_ssl" then
+ if has_wgetssl() then return true end
+ if has_curlssl() then return true end
+ if (has_fetch() and has_fetchssl()) then return true end
+ return false
+
+ elseif type == "has_proxy" then
+ if has_wgetssl() then return true end
+ if has_curlpxy() then return true end
+ if has_fetch() then return true end
+ if has_bbwget() then return true end
+ return false
+
+ elseif type == "has_forceip" then
+ if has_wgetssl() then return true end
+ if has_curl() then return true end
+ if has_fetch() then return true end -- only really needed for transfer
+ return false
+
+ elseif type == "has_bindnet" then
+ if has_curl() then return true end
+ if has_wgetssl() then return true end
+ return false
+ end
+
+ elseif ( type == "has_dnsserver" ) or ( type == "has_bindhost" ) or ( type == "has_hostip" ) or ( type == "has_nslookup" ) then
+ local function has_bindhost()
+ if (SYS.call( [[which host >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which host >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which khost >/dev/null 2>&1]] ) == 0) then return true end
+ if (SYS.call( [[which drill >/dev/null 2>&1]] ) == 0) then return true end
+ return false
+ end
+
+ local function has_hostip()
+ return (SYS.call( [[which hostip >/dev/null 2>&1]] ) == 0)
+ end
+
+ local function has_nslookup()
+ return (SYS.call( [[$(which nslookup) localhost 2>&1 | grep -qF "(null)"]] ) ~= 0)
+ end
+
+ if type == "has_bindhost" then
+ return has_bindhost()
+ elseif type == "has_hostip" then
+ return has_hostip()
+ elseif type == "has_nslookup" then
+ return has_nslookup()
+ elseif tyep == "has_dnsserver" then
+ if has_bindhost() then return true end
+ if has_hostip() then return true end
+ if has_nslookup() then return true end
+ return false
+ end
+
+ elseif type == "has_ipv6" then
+ return (NXFS.access("/proc/net/ipv6_route") and NXFS.access("/usr/sbin/ip6tables"))
+
+ elseif type == "has_cacerts" then
+ --old _check_certs() local function
+ local _, v = NXFS.glob("/etc/ssl/certs/*.crt")
+ if ( v == 0 ) then _, v = NXFS.glob("/etc/ssl/certs/*.pem") end
+ return (v > 0)
+ else
+ return
+ end
-has_wgetssl = (SYS.call( [[which wget-ssl >/dev/null 2>&1]] ) == 0) -- and true or nil
-has_curl = (SYS.call( [[which curl >/dev/null 2>&1]] ) == 0)
-has_curlssl = (SYS.call( [[$(which curl) -V 2>&1 | grep "Protocols:" | grep -qF "https"]] ) ~= 0)
-has_curlpxy = (SYS.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0)
-has_fetch = (SYS.call( [[which uclient-fetch >/dev/null 2>&1]] ) == 0)
-has_fetchssl = NXFS.access("/lib/libustream-ssl.so")
-has_bbwget = (SYS.call( [[$(which wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0)
-has_bindhost = (SYS.call( [[which host >/dev/null 2>&1]] ) == 0)
- or (SYS.call( [[which khost >/dev/null 2>&1]] ) == 0)
- or (SYS.call( [[which drill >/dev/null 2>&1]] ) == 0)
-has_hostip = (SYS.call( [[which hostip >/dev/null 2>&1]] ) == 0)
-has_nslookup = (SYS.call( [[$(which nslookup) localhost 2>&1 | grep -qF "(null)"]] ) ~= 0)
-has_ipv6 = (NXFS.access("/proc/net/ipv6_route") and NXFS.access("/usr/sbin/ip6tables"))
-has_ssl = (has_wgetssl or has_curlssl or (has_fetch and has_fetchssl))
-has_proxy = (has_wgetssl or has_curlpxy or has_fetch or has_bbwget)
-has_forceip = (has_wgetssl or has_curl or has_fetch) -- only really needed for transfer
-has_dnsserver = (has_bindhost or has_hostip or has_nslookup)
-has_bindnet = (has_wgetssl or has_curl)
-has_cacerts = _check_certs()
+end
-- function to calculate seconds from given interval and unit
function calc_seconds(interval, unit)
diff --git a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
index 5bdcb03e73..7fcb882a15 100644
--- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
+++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
@@ -1,4 +1,3 @@
-
<!-- ++ BEGIN ++ Dynamic DNS ++ system_status.htm ++ -->
<script type="text/javascript">//<![CDATA[
// helper to move status data to the relevant
@@ -10,8 +9,8 @@
if ( !(tbl) ) { return; }
// clear all rows
- while (tbl.rows.length > 1)
- tbl.deleteRow(1);
+ while (tbl.firstElementChild !== tbl.lastElementChild)
+ tbl.removeChild(tbl.lastElementChild);
// variable for Modulo-Division use to set cbi-rowstyle-? (0 or 1)
var i = -1;
@@ -21,22 +20,22 @@
if (data[0].enabled == 0) {
var txt = '<strong><font color="red"><%:DDNS Autostart disabled%></font>' ;
var url = '<a href="' + data[0].url_up + '"><%:enable here%></a></strong>' ;
- var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1);
- var td = tr.insertCell(-1);
- td.colSpan = 2 ;
- td.innerHTML = txt + " - " + url
- tr.insertCell(-1).colSpan = 3 ;
+ tbl.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(((j + i) % 2) + 1), [
+ E('<div class="td">', [ txt," - ", url ])
+ ]));
i++ ;
}
+ var configuration;
+ var next_update;
+ var lookup;
+ var registered_ip;
+ var network;
+
for( j = 1; j < data.length; j++ )
{
- var tr = tbl.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + (((j + i) % 2) + 1) ;
-
// configuration
- tr.insertCell(-1).innerHTML = '<strong>' + data[j].section + '</strong>' ;
+ configuration = data[j].section;
// pid
// data[j].pid ignored here
@@ -47,66 +46,74 @@
// next update
switch (data[j].datenext) {
case "_empty_":
- tr.insertCell(-1).innerHTML = '<em><%:Unknown error%></em>' ;
+ next_update = '<em><%:Unknown error%></em>';
break;
case "_stopped_":
- tr.insertCell(-1).innerHTML = '<em><%:Stopped%></em>' ;
+ next_update = '<em><%:Stopped%></em>';
break;
case "_disabled_":
- tr.insertCell(-1).innerHTML = '<em><%:Disabled%></em>' ;
+ next_update = '<em><%:Disabled%></em>';
break;
case "_noupdate_":
- tr.insertCell(-1).innerHTML = '<em><%:Update error%></em>' ;
+ next_update = '<em><%:Update error%></em>';
break;
case "_runonce_":
- tr.insertCell(-1).innerHTML = '<em><%:Run once%></em>' ;
+ next_update = '<em><%:Run once%></em>';
break;
case "_verify_":
- tr.insertCell(-1).innerHTML = '<em><%:Verify%></em>';
+ next_update = '<em><%:Verify%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[j].datenext ;
+ next_update = data[j].datenext;
break;
}
// lookup
if (data[j].lookup == "_nolookup_")
- tr.insertCell(-1).innerHTML = '<em><%:config error%></em>';
+ lookup = '<em><%:config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[j].lookup;
+ lookup = data[j].lookup;
// registered IP
switch (data[j].reg_ip) {
case "_nolookup_":
- tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
+ registered_ip = '<em><%:config error%></em>';
break;
case "_nodata_":
- tr.insertCell(-1).innerHTML = '<em><%:No data%></em>';
+ registered_ip = '<em><%:No data%></em>';
break;
case "_noipv6_":
- tr.insertCell(-1).innerHTML = '<em><%:IPv6 not supported%></em>';
+ registered_ip = '<em><%:IPv6 not supported%></em>';
break;
default:
- tr.insertCell(-1).innerHTML = data[j].reg_ip;
+ registered_ip = data[j].reg_ip;
break;
}
// monitored interface
if (data[j].iface == "_nonet_")
- tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>';
+ network = '<em><%:Config error%></em>';
else
- tr.insertCell(-1).innerHTML = data[j].iface;
+ network = data[j].iface;
+
+ tbl.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(((j + i) % 2) + 1), [
+ E('<div class="td">', [ E('<strong>', configuration) ]),
+ E('<div class="td">', next_update),
+ E('<div class="td">', lookup),
+ E('<div class="td">', registered_ip),
+ E('<div class="td">', network)
+ ]));
}
- if (tbl.rows.length == 1 || (data[0].enabled == 0 && tbl.rows.length == 2) ) {
+ if (tbl.firstElementChild === tbl.lastElementChild || (data[0].enabled == 0 && tbl.childNodes.length == 2) ) {
var br = '<br />';
- if (tbl.rows.length > 1)
+ var msg = '<%:There is no service configured.%>';
+ if (tbl.firstElementChild !== tbl.lastElementChild)
br = '';
- var tr = tbl.insertRow(-1);
- tr.className = "cbi-section-table-row";
- var td = tr.insertCell(-1);
- td.colSpan = 5;
- td.innerHTML = '<em>' + br + '<%:There is no service configured.%></em>' ;
+ msg = br + msg;
+ tbl.appendChild(E('<div class="tr cbi-section-table-row">', [
+ E('<div class="td">', [ E('<em>', msg) ])
+ ]));
}
}
@@ -128,17 +135,17 @@
<fieldset class="cbi-section" id="ddns_status_section">
<legend><a href="<%=url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend>
- <table class="cbi-section-table" id="ddns_status_table">
- <tr class="cbi-section-table-titles">
- <th class="cbi-section-table-cell"><%:Configuration%></th>
- <th class="cbi-section-table-cell"><%:Next Update%></th>
- <th class="cbi-section-table-cell"><%:Lookup Hostname%></th>
- <th class="cbi-section-table-cell"><%:Registered IP%></th>
- <th class="cbi-section-table-cell"><%:Network%></th>
- </tr>
- <tr class="cbi-section-table-row">
- <td colspan="5"><em><br /><%:Collecting data...%></em></td>
- </tr>
- </table>
+ <div class="table cbi-section-table" id="ddns_status_table">
+ <div class="tr cbi-section-table-titles">
+ <div class="th cbi-section-table-cell"><%:Configuration%></div>
+ <div class="th cbi-section-table-cell"><%:Next Update%></div>
+ <div class="th cbi-section-table-cell"><%:Lookup Hostname%></div>
+ <div class="th cbi-section-table-cell"><%:Registered IP%></div>
+ <div class="th cbi-section-table-cell"><%:Network%></div>
+ </div>
+ <div class="tr cbi-section-table-row">
+ <div class="td"><em><br /><%:Collecting data...%></em></div>
+ </div>
+ </div>
</fieldset>
<!-- ++ END ++ Dynamic DNS ++ system_status.htm ++ -->
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua
index 17a49483d7..d51f8fb79b 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forward-details.lua
@@ -55,6 +55,7 @@ o = s:option(Value, "src", translate("Source zone"))
o.nocreate = true
o.default = "wan"
o.template = "cbi/firewall_zonelist"
+o.rmempty = false
o = s:option(DynamicList, "src_mac",
@@ -88,6 +89,10 @@ o.rmempty = true
o.datatype = "neg(portrange)"
o.placeholder = translate("any")
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Value, "src_dip",
translate("External IP address"),
@@ -108,7 +113,10 @@ o = s:option(Value, "src_dport", translate("External port"),
"destination port or port range on this host"))
o.datatype = "neg(portrange)"
-
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Value, "dest", translate("Internal zone"))
o.nocreate = true
@@ -133,6 +141,10 @@ o = s:option(Value, "dest_port",
o.placeholder = translate("any")
o.datatype = "portrange"
+o:depends("proto", "tcp")
+o:depends("proto", "udp")
+o:depends("proto", "tcp udp")
+o:depends("proto", "tcpudp")
o = s:option(Flag, "reflection", translate("Enable NAT Loopback"))
o.rmempty = true
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua
index e61ce73cdd..5485ebf096 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/forwards.lua
@@ -54,7 +54,7 @@ function s.parse(self, ...)
if created then
m.uci:save("firewall")
luci.http.redirect(ds.build_url(
- "admin/network/firewall/redirect", created
+ "admin/network/firewall/forwards", created
))
end
end
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua
index 1c838888f1..b57201041d 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua
@@ -115,6 +115,10 @@ elseif rule_type == "redirect" then
o.datatype = "neg(portrange)"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(Value, "dest", translate("Destination zone"))
o.nocreate = true
@@ -139,6 +143,10 @@ elseif rule_type == "redirect" then
o.placeholder = translate("any")
o.datatype = "neg(portrange)"
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(Value, "src_dip",
translate("SNAT IP address"),
@@ -163,6 +171,10 @@ elseif rule_type == "redirect" then
o.rmempty = true
o.placeholder = translate('Do not rewrite')
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
s:option(Value, "extra",
translate("Extra arguments"),
@@ -255,7 +267,7 @@ else
o = s:option(Value, "src", translate("Source zone"))
o.nocreate = true
o.allowany = true
- o.default = "wan"
+ o.allowlocal = "src"
o.template = "cbi/firewall_zonelist"
@@ -281,12 +293,26 @@ else
o.datatype = "list(neg(portrange))"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
- o = s:option(Value, "dest", translate("Destination zone"))
+ o = s:option(Value, "dest_local", translate("Output zone"))
+ o.nocreate = true
+ o.allowany = true
+ o.rmempty = false
+ o.template = "cbi/firewall_zonelist"
+ o.alias = "dest"
+ o:depends("src", "")
+
+ o = s:option(Value, "dest_remote", translate("Destination zone"))
o.nocreate = true
o.allowany = true
o.allowlocal = true
o.template = "cbi/firewall_zonelist"
+ o.alias = "dest"
+ o:depends({["src"] = "", ["!reverse"] = true})
o = s:option(Value, "dest_ip", translate("Destination address"))
@@ -302,6 +328,10 @@ else
o.datatype = "list(neg(portrange))"
o.placeholder = translate("any")
+ o:depends("proto", "tcp")
+ o:depends("proto", "udp")
+ o:depends("proto", "tcp udp")
+ o:depends("proto", "tcpudp")
o = s:option(ListValue, "target", translate("Action"))
o.default = "ACCEPT"
@@ -316,9 +346,9 @@ else
translate("Passes additional arguments to iptables. Use with care!"))
end
-o = s:option(MultiValue, "weekdays", translate("Week Days"))
-o.oneline = true
-o.widget = "checkbox"
+o = s:option(DropDown, "weekdays", translate("Week Days"))
+o.multiple = true
+o.display = 5
o:value("Sun", translate("Sunday"))
o:value("Mon", translate("Monday"))
o:value("Tue", translate("Tuesday"))
@@ -327,9 +357,9 @@ o:value("Thu", translate("Thursday"))
o:value("Fri", translate("Friday"))
o:value("Sat", translate("Saturday"))
-o = s:option(MultiValue, "monthdays", translate("Month Days"))
-o.oneline = true
-o.widget = "checkbox"
+o = s:option(DropDown, "monthdays", translate("Month Days"))
+o.multiple = true
+o.display = 15
for i = 1,31 do
o:value(translate(i))
end
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua
index c533491977..22dec5ee6b 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rules.lua
@@ -89,17 +89,31 @@ local function rule_proto_txt(self, s)
end
local function rule_src_txt(self, s)
- local z = ft.fmt_zone(self.map:get(s, "src"), translate("any zone"))
- local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host"))
+ local z = ft.fmt_zone(self.map:get(s, "src"))
local p = ft.fmt_port(self.map:get(s, "src_port"))
local m = ft.fmt_mac(self.map:get(s, "src_mac"))
- if p and m then
- return translatef("From %s in %s with source %s and %s", a, z, p, m)
- elseif p or m then
- return translatef("From %s in %s with source %s", a, z, p or m)
+ -- Forward/Input
+ if z and #z > 0 then
+ local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any host"))
+ if p and m then
+ return translatef("From %s in %s with source %s and %s", a, z, p, m)
+ elseif p or m then
+ return translatef("From %s in %s with source %s", a, z, p or m)
+ else
+ return translatef("From %s in %s", a, z)
+ end
+
+ -- Output
else
- return translatef("From %s in %s", a, z)
+ local a = ft.fmt_ip(self.map:get(s, "src_ip"), translate("any router IP"))
+ if p and m then
+ return translatef("From %s on <var>this device</var> with source %s and %s", a, p, m)
+ elseif p or m then
+ return translatef("From %s on <var>this device</var> with source %s", a, p or m)
+ else
+ return translatef("From %s on <var>this device</var>", a)
+ end
end
end
@@ -158,7 +172,7 @@ target = s:option(DummyValue, "target", translate("Action"))
target.rawhtml = true
target.width = "20%"
function target.cfgvalue(self, s)
- local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "dest"))
+ local t = ft.fmt_target(self.map:get(s, "target"), self.map:get(s, "src"), self.map:get(s, "dest"))
local l = ft.fmt_limit(self.map:get(s, "limit"),
self.map:get(s, "limit_burst"))
diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
index a42c1499f0..e168c3c605 100644
--- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
+++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
@@ -101,9 +101,12 @@ end
function net.write(self, section, value)
zone:clear_networks()
- local n
- for n in ut.imatch(value) do
- zone:add_network(n)
+ local net
+ for net in ut.imatch(value) do
+ local n = nw:get_network(net) or nw:add_network(net, { proto = "none" })
+ if n then
+ zone:add_network(n:name())
+ end
end
end
diff --git a/applications/luci-app-firewall/luasrc/tools/firewall.lua b/applications/luci-app-firewall/luasrc/tools/firewall.lua
index 2d89bfa2a6..055342bfb3 100644
--- a/applications/luci-app-firewall/luasrc/tools/firewall.lua
+++ b/applications/luci-app-firewall/luasrc/tools/firewall.lua
@@ -198,8 +198,18 @@ function fmt_limit(limit, burst)
end
end
-function fmt_target(x, dest)
- if dest and #dest > 0 then
+function fmt_target(x, src, dest)
+ if not src or #src == 0 then
+ if x == "ACCEPT" then
+ return _("Accept output")
+ elseif x == "REJECT" then
+ return _("Refuse output")
+ elseif x == "NOTRACK" then
+ return _("Do not track output")
+ else --if x == "DROP" then
+ return _("Discard output")
+ end
+ elseif dest and #dest > 0 then
if x == "ACCEPT" then
return _("Accept forward")
elseif x == "REJECT" then
diff --git a/applications/luci-app-firewall/po/ca/firewall.po b/applications/luci-app-firewall/po/ca/firewall.po
index 2ccffca9a7..b206fce1e4 100644
--- a/applications/luci-app-firewall/po/ca/firewall.po
+++ b/applications/luci-app-firewall/po/ca/firewall.po
@@ -314,6 +314,9 @@ msgstr "Altre..."
msgid "Output"
msgstr "Sortida"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa paràmetres addicionals al iptables. Utilitzeu-ho amb cura!"
diff --git a/applications/luci-app-firewall/po/cs/firewall.po b/applications/luci-app-firewall/po/cs/firewall.po
index 4cbf356d0b..3ecd433a7d 100644
--- a/applications/luci-app-firewall/po/cs/firewall.po
+++ b/applications/luci-app-firewall/po/cs/firewall.po
@@ -309,6 +309,9 @@ msgstr "Ostatní ..."
msgid "Output"
msgstr "Výstup"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Předává další argumenty iptables. Používat opatrně!"
diff --git a/applications/luci-app-firewall/po/de/firewall.po b/applications/luci-app-firewall/po/de/firewall.po
index 0ee6007dd6..e39d4f8566 100644
--- a/applications/luci-app-firewall/po/de/firewall.po
+++ b/applications/luci-app-firewall/po/de/firewall.po
@@ -307,6 +307,9 @@ msgstr "Anderes..."
msgid "Output"
msgstr "Ausgang"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Gibt zusätzliche Kommandozeilenargumente an iptables weiter. Mit Vorsicht "
diff --git a/applications/luci-app-firewall/po/el/firewall.po b/applications/luci-app-firewall/po/el/firewall.po
index 9ddd4c9db1..783fcd462c 100644
--- a/applications/luci-app-firewall/po/el/firewall.po
+++ b/applications/luci-app-firewall/po/el/firewall.po
@@ -306,6 +306,9 @@ msgstr "Άλλο..."
msgid "Output"
msgstr "Έξοδος"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/en/firewall.po b/applications/luci-app-firewall/po/en/firewall.po
index f0fe0b3782..9d9166d68f 100644
--- a/applications/luci-app-firewall/po/en/firewall.po
+++ b/applications/luci-app-firewall/po/en/firewall.po
@@ -305,6 +305,9 @@ msgstr ""
msgid "Output"
msgstr "Output"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/es/firewall.po b/applications/luci-app-firewall/po/es/firewall.po
index 000853e9bd..e96fecad99 100644
--- a/applications/luci-app-firewall/po/es/firewall.po
+++ b/applications/luci-app-firewall/po/es/firewall.po
@@ -312,6 +312,9 @@ msgstr "Otros..."
msgid "Output"
msgstr "Salida"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Pasa más parámetros a IPTables. ¡Usar con cuidado!"
diff --git a/applications/luci-app-firewall/po/fr/firewall.po b/applications/luci-app-firewall/po/fr/firewall.po
index 74c28b8836..4a34064868 100644
--- a/applications/luci-app-firewall/po/fr/firewall.po
+++ b/applications/luci-app-firewall/po/fr/firewall.po
@@ -307,6 +307,9 @@ msgstr "Autre..."
msgid "Output"
msgstr "Sortie"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/he/firewall.po b/applications/luci-app-firewall/po/he/firewall.po
index 0416661c26..5511e8ab10 100644
--- a/applications/luci-app-firewall/po/he/firewall.po
+++ b/applications/luci-app-firewall/po/he/firewall.po
@@ -296,6 +296,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/hu/firewall.po b/applications/luci-app-firewall/po/hu/firewall.po
index 33a305ce8e..30c242913d 100644
--- a/applications/luci-app-firewall/po/hu/firewall.po
+++ b/applications/luci-app-firewall/po/hu/firewall.po
@@ -313,6 +313,9 @@ msgstr "Egyéb..."
msgid "Output"
msgstr "Kimenet"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"További argumentumok küldése az iptables részére. Használja körültekintően!"
diff --git a/applications/luci-app-firewall/po/it/firewall.po b/applications/luci-app-firewall/po/it/firewall.po
index 4808d12475..e26c504b95 100644
--- a/applications/luci-app-firewall/po/it/firewall.po
+++ b/applications/luci-app-firewall/po/it/firewall.po
@@ -311,6 +311,9 @@ msgstr "Altri..."
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa comandi addizionali a iptables. Usare con cura!"
diff --git a/applications/luci-app-firewall/po/ja/firewall.po b/applications/luci-app-firewall/po/ja/firewall.po
index 27109904ba..d4cf84c956 100644
--- a/applications/luci-app-firewall/po/ja/firewall.po
+++ b/applications/luci-app-firewall/po/ja/firewall.po
@@ -316,6 +316,9 @@ msgstr "ãã®ä»–ã®ãƒ—ロトコル"
msgid "Output"
msgstr "é€ä¿¡"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"iptablesã«ãƒ‘ススルーã™ã‚‹è¿½åŠ ã®å¼•æ•°ã‚’設定ã—ã¦ãã ã•ã„。ãŸã ã—ã€æ³¨æ„ã—ã¦è¨­å®šã—"
diff --git a/applications/luci-app-firewall/po/ko/firewall.po b/applications/luci-app-firewall/po/ko/firewall.po
index dd4f96197a..5c3d02c1e2 100644
--- a/applications/luci-app-firewall/po/ko/firewall.po
+++ b/applications/luci-app-firewall/po/ko/firewall.po
@@ -304,6 +304,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "iptables ëª…ë ¹ì— ì¶”ê°€ ì¸ìžë“¤ì„ ë”합니다. 조심해 사용하세요!"
diff --git a/applications/luci-app-firewall/po/ms/firewall.po b/applications/luci-app-firewall/po/ms/firewall.po
index 58aea1fd0b..9688622ba4 100644
--- a/applications/luci-app-firewall/po/ms/firewall.po
+++ b/applications/luci-app-firewall/po/ms/firewall.po
@@ -295,6 +295,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/no/firewall.po b/applications/luci-app-firewall/po/no/firewall.po
index 2a13b6b3cd..d59fec3646 100644
--- a/applications/luci-app-firewall/po/no/firewall.po
+++ b/applications/luci-app-firewall/po/no/firewall.po
@@ -308,6 +308,9 @@ msgstr "Andre..."
msgid "Output"
msgstr "Utdata"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Sender flere argumenter til iptables. Bruk med forsiktighet!"
diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po
index a08a1e5606..7c087ef02b 100644
--- a/applications/luci-app-firewall/po/pl/firewall.po
+++ b/applications/luci-app-firewall/po/pl/firewall.po
@@ -316,6 +316,9 @@ msgstr "Inne..."
msgid "Output"
msgstr "Wyjście (Output)"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Przekazuje dodatkowe argumenty do iptables. Zachowaj szczególną ostrożność!"
diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po
index 7da028bee4..bfcdd54d9b 100644
--- a/applications/luci-app-firewall/po/pt-br/firewall.po
+++ b/applications/luci-app-firewall/po/pt-br/firewall.po
@@ -313,6 +313,9 @@ msgstr "Outro..."
msgid "Output"
msgstr "Saída"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa argumentos adicionais para o iptables. Use com cuidado!"
diff --git a/applications/luci-app-firewall/po/pt/firewall.po b/applications/luci-app-firewall/po/pt/firewall.po
index 543489e1ad..2536b7a369 100644
--- a/applications/luci-app-firewall/po/pt/firewall.po
+++ b/applications/luci-app-firewall/po/pt/firewall.po
@@ -314,6 +314,9 @@ msgstr "Outro..."
msgid "Output"
msgstr "Saída"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "Passa argumentos adicionais para o iptables. Usar com cuidado!"
diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po
index 937efe722b..dbae338229 100644
--- a/applications/luci-app-firewall/po/ro/firewall.po
+++ b/applications/luci-app-firewall/po/ro/firewall.po
@@ -300,6 +300,9 @@ msgstr "Altele..."
msgid "Output"
msgstr "IeÅŸire"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po
index 528756d7e3..a441c5a709 100644
--- a/applications/luci-app-firewall/po/ru/firewall.po
+++ b/applications/luci-app-firewall/po/ru/firewall.po
@@ -318,6 +318,9 @@ msgstr "Другое..."
msgid "Output"
msgstr "ИÑходÑщий трафик"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Передаёт дополнительные аргументы таблице iptables. ИÑпользуйте Ñ "
diff --git a/applications/luci-app-firewall/po/sk/firewall.po b/applications/luci-app-firewall/po/sk/firewall.po
index a382bde7db..c6952faa35 100644
--- a/applications/luci-app-firewall/po/sk/firewall.po
+++ b/applications/luci-app-firewall/po/sk/firewall.po
@@ -296,6 +296,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po
index d5f6a2d8a5..0301c25b5a 100644
--- a/applications/luci-app-firewall/po/sv/firewall.po
+++ b/applications/luci-app-firewall/po/sv/firewall.po
@@ -302,6 +302,9 @@ msgstr "Andra..."
msgid "Output"
msgstr "Utmatning"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/templates/firewall.pot b/applications/luci-app-firewall/po/templates/firewall.pot
index 6ff4c3ca0f..d2691cc44a 100644
--- a/applications/luci-app-firewall/po/templates/firewall.pot
+++ b/applications/luci-app-firewall/po/templates/firewall.pot
@@ -289,6 +289,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/tr/firewall.po b/applications/luci-app-firewall/po/tr/firewall.po
index 1dd1e6f9cf..9c5adb1cd2 100644
--- a/applications/luci-app-firewall/po/tr/firewall.po
+++ b/applications/luci-app-firewall/po/tr/firewall.po
@@ -296,6 +296,9 @@ msgstr ""
msgid "Output"
msgstr ""
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/uk/firewall.po b/applications/luci-app-firewall/po/uk/firewall.po
index 86ff65edf1..7234ceff66 100644
--- a/applications/luci-app-firewall/po/uk/firewall.po
+++ b/applications/luci-app-firewall/po/uk/firewall.po
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-12-29 12:53+0200\n"
+"PO-Revision-Date: 2018-06-10 17:15+0200\n"
"Last-Translator: Yurii <yuripet@gmail.com>\n"
"Language-Team: none\n"
"Language: uk\n"
@@ -10,7 +10,9 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.6\n"
+
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "%s in %s"
msgstr "%s у %s"
@@ -40,10 +42,10 @@ msgid "<var>%s</var> and limit to %s"
msgstr "<var>%s</var> з лімітом %s"
msgid "Accept forward"
-msgstr ""
+msgstr "Приймати переÑпрÑмовуваннÑ"
msgid "Accept input"
-msgstr ""
+msgstr "Приймати введеннÑ"
msgid "Action"
msgstr "ДіÑ"
@@ -58,10 +60,10 @@ msgid "Advanced Settings"
msgstr "Розширені наÑтройки"
msgid "Allow forward from <em>source zones</em>:"
-msgstr "Дозволити ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ <em>зон-джерел</em>:"
+msgstr "Дозволити переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ <em>зон-джерел</em>:"
msgid "Allow forward to <em>destination zones</em>:"
-msgstr "Дозволити ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ <em>зон призначеннÑ</em>:"
+msgstr "Дозволити переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾ <em>зон призначеннÑ</em>:"
msgid "Any"
msgstr "Будь-Ñкий"
@@ -95,22 +97,22 @@ msgid "Destination zone"
msgstr "Зона призначеннÑ"
msgid "Disable"
-msgstr ""
+msgstr "Вимкнути"
msgid "Discard forward"
-msgstr ""
+msgstr "Відкидати переÑпрÑмовуваннÑ"
msgid "Discard input"
-msgstr ""
+msgstr "Відкидати введеннÑ"
msgid "Do not rewrite"
msgstr "Ðе перезапиÑувати"
msgid "Do not track forward"
-msgstr ""
+msgstr "Ðе відÑлідковувати переÑпрÑмовуваннÑ"
msgid "Do not track input"
-msgstr ""
+msgstr "Ðе відÑлідковувати введеннÑ"
msgid "Drop invalid packets"
msgstr "Відкидати помилкові пакети"
@@ -128,7 +130,7 @@ msgid "Enable logging on this zone"
msgstr "Увімкнути реєÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ цій зоні"
msgid "Experimental feature. Not fully compatible with QoS/SQM."
-msgstr ""
+msgstr "ЕкÑпериментальна функціÑ. Ðе повніÑÑ‚ÑŽ ÑуміÑно з QoS / SQM."
msgid "External IP address"
msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ IP-адреÑа"
@@ -149,7 +151,7 @@ msgid "Firewall - Custom Rules"
msgstr "Брандмауер — ÐаÑтроювані правила"
msgid "Firewall - Port Forwards"
-msgstr "Брандмауер — СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²"
+msgstr "Брандмауер — ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²"
msgid "Firewall - Traffic Rules"
msgstr "Брандмауер — Правила трафіка"
@@ -161,13 +163,13 @@ msgid "Force connection tracking"
msgstr "Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·'єднань"
msgid "Forward"
-msgstr "СпрÑмовуваннÑ"
+msgstr "ПереÑпрÑмовуваннÑ"
msgid "Forward to"
-msgstr "ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾"
+msgstr "переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾"
msgid "Friday"
-msgstr ""
+msgstr "П'ÑтницÑ"
msgid "From %s in %s"
msgstr "%s у %s"
@@ -182,16 +184,16 @@ msgid "General Settings"
msgstr "Загальні наÑтройки"
msgid "Hardware flow offloading"
-msgstr ""
+msgstr "Ðпаратні заÑоби Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ"
msgid "IP"
-msgstr ""
+msgstr "IP-адреÑа"
msgid "IP range"
-msgstr ""
+msgstr "Діапазон IP"
msgid "IPs"
-msgstr ""
+msgstr "IP-алреÑи"
msgid "IPv4"
msgstr "IPv4"
@@ -212,7 +214,7 @@ msgid "Input"
msgstr "Вхідний"
msgid "Inter-Zone Forwarding"
-msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ€Ñ–Ð·ÑŒ зони"
+msgstr "ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ зонами"
msgid "Internal IP address"
msgstr "Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ IP-адреÑа"
@@ -227,10 +229,10 @@ msgid "Limit log messages"
msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½ÑŒ журналу"
msgid "MAC"
-msgstr ""
+msgstr "MAC-алреÑа"
msgid "MACs"
-msgstr ""
+msgstr "MAC-алреÑи"
msgid "MSS clamping"
msgstr "ЗатиÑÐºÐ°Ð½Ð½Ñ MSS"
@@ -246,8 +248,8 @@ msgstr "ЗіÑтавлÑти ICMP типу"
msgid "Match forwarded traffic to the given destination port or port range."
msgstr ""
-"ЗіÑтавлÑти трафік, що ÑпрÑмовуєтьÑÑ Ð½Ð° заданий порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ діапазон "
-"портів."
+"ЗіÑтавлÑти трафік, що переÑпрÑмовуєтьÑÑ Ð½Ð° заданий порт Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ "
+"діапазон портів."
msgid ""
"Match incoming traffic directed at the given destination port or port range "
@@ -264,10 +266,10 @@ msgstr ""
"діапазоні портів вузла клієнта."
msgid "Monday"
-msgstr ""
+msgstr "Понеділок"
msgid "Month Days"
-msgstr ""
+msgstr "Дні міÑÑцÑ"
msgid "Name"
msgstr "Ім'Ñ"
@@ -276,13 +278,13 @@ msgid "New SNAT rule"
msgstr "Ðове правило SNAT"
msgid "New forward rule"
-msgstr "Ðове правило ÑпрÑмовуваннÑ"
+msgstr "Ðове правило переÑпрÑмовуваннÑ"
msgid "New input rule"
msgstr "Ðове вхідне правило"
msgid "New port forward"
-msgstr "Ðове ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ"
+msgstr "Ðове переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñƒ"
msgid "New source NAT"
msgstr "Ðовий NAT джерела"
@@ -312,18 +314,21 @@ msgstr "Інше..."
msgid "Output"
msgstr "Вихідний"
+msgid "Output zone"
+msgstr "Вихідна зона"
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
"Передача додаткових аргументів Ð´Ð»Ñ IPTables. ВикориÑтовуйте з обережніÑÑ‚ÑŽ!"
msgid "Port Forwards"
-msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²"
+msgstr "ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð²"
msgid ""
"Port forwarding allows remote computers on the Internet to connect to a "
"specific computer or service within the private LAN."
msgstr ""
-"СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð² дозволÑÑ” віддаленим комп'ютерам з Інтернету "
+"ПереÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñ‚Ñ–Ð² дозволÑÑ” віддаленим комп'ютерам з Інтернету "
"підключатиÑÑ Ð´Ð¾ певного комп'ютера або Ñлужби у приватній мережі."
msgid "Protocol"
@@ -338,16 +343,16 @@ msgid "Redirect matched incoming traffic to the specified internal host"
msgstr "ПереÑпрÑмувати відповідний вхідний трафік на заданий внутрішній вузол"
msgid "Refuse forward"
-msgstr ""
+msgstr "ВідхилÑти переÑпрÑмовуваннÑ"
msgid "Refuse input"
-msgstr ""
+msgstr "ВідхилÑти введеннÑ"
msgid "Requires hardware NAT support. Implemented at least for mt7621"
-msgstr ""
+msgstr "Ðеобхідна апаратна підтримка NAT. Впроваджено принаймні Ð´Ð»Ñ mt7621"
msgid "Restart Firewall"
-msgstr ""
+msgstr "Перезавантажити брандмауер"
msgid "Restrict Masquerading to given destination subnets"
msgstr "Обмежити підміну заданими підмережами призначеннÑ"
@@ -375,13 +380,13 @@ msgid "Rewrite to source %s, %s"
msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° вихідний %s, %s"
msgid "Routing/NAT Offloading"
-msgstr ""
+msgstr "Ð Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ—/NAT"
msgid "Rule is disabled"
-msgstr ""
+msgstr "Правило вимкнено"
msgid "Rule is enabled"
-msgstr ""
+msgstr "Правило ввімкнено"
msgid "SNAT IP address"
msgstr "IP-адреÑа SNAT"
@@ -390,13 +395,13 @@ msgid "SNAT port"
msgstr "Порт SNAT"
msgid "Saturday"
-msgstr ""
+msgstr "Субота"
msgid "Software based offloading for routing/NAT"
-msgstr ""
+msgstr "Програмне Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ—/NAT"
msgid "Software flow offloading"
-msgstr ""
+msgstr "Програмне Ñ€Ð¾Ð·Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾ÐºÑƒ"
msgid "Source IP address"
msgstr "IP-адреÑа джерела"
@@ -426,19 +431,19 @@ msgid "Source zone"
msgstr "Зона-джерело"
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата початку (рррр-мм-дд)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ð§Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ (гг:Ñ…Ñ…:ÑÑ)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата зупинки (рррр-мм-дд)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ð§Ð°Ñ Ð·ÑƒÐ¿Ð¸Ð½ÐºÐ¸ (гг:Ñ…Ñ…:ÑÑ)"
msgid "Sunday"
-msgstr ""
+msgstr "ÐеділÑ"
msgid ""
"The firewall creates zones over your network interfaces to control network "
@@ -455,19 +460,20 @@ msgid ""
"rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
"<em>not</em> imply a permission to forward from wan to lan as well."
msgstr ""
-"Опції, наведені нижче, управлÑÑŽÑ‚ÑŒ політиками ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ цією (%s) та "
-"іншими зонами. <em>Зони призначеннÑ</em> покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼, що "
-"<strong>виходить з %q</strong>. <em>Зони-джерела</em> покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼ "
-"з інших зон, <strong>ÑпрÑмованим на %q</strong>. Правила ÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” "
-"<em>одноÑпрÑмованим</em>, тобто, ÑпрÑÐ¼ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ LAN до WAN <em>не</em> "
-"означає, що Ñ” також дозвіл ÑпрÑмовувати від WAN в LAN."
+"Опції, наведені нижче, керують політиками переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð¶ цією (%s) "
+"та іншими зонами. <em>Зони призначеннÑ</em> покриваютьÑÑ Ð¿ÐµÑ€ÐµÑпрÑмованим "
+"трафіком, що <strong>виходить з %q</strong>. <em>Зони-джерела</em> "
+"покриваютьÑÑ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÐ¾Ð¼ з інших зон, <strong>переÑпрÑмованим на %q</strong>. "
+"Правило переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñ” <em>одноÑпрÑмованим</em>, тобто, ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
+"від LAN до WAN <em>не</em> означає, що Ñ” також дозвіл ÑпрÑмовувати від WAN "
+"до LAN."
msgid ""
"This page allows you to change advanced properties of the port forwarding "
"entry. In most cases there is no need to modify those settings."
msgstr ""
-"Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
-"портів. У більшоÑÑ‚Ñ– випадків змінювати ці параметри немає необхідноÑÑ‚Ñ–."
+"Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
+"портів. У більшоÑÑ‚Ñ– випадків змінювати ці параметри немає потреби."
msgid ""
"This page allows you to change advanced properties of the traffic rule "
@@ -476,7 +482,6 @@ msgstr ""
"Ðа цій Ñторінці можна змінити додаткові влаÑтивоÑÑ‚Ñ– елемента правил трафіка, "
"таких Ñк відповідні параметри джерела та вузлів призначеннÑ."
-#, fuzzy
msgid ""
"This section defines common properties of %q. The <em>input</em> and "
"<em>output</em> options set the default policies for traffic entering and "
@@ -486,15 +491,15 @@ msgid ""
msgstr ""
"Цей розділ визначає загальні влаÑтивоÑÑ‚Ñ– %q. Параметри <em>вхідний</em> Ñ– "
"<em>вихідний</em> задають типову політику Ð´Ð»Ñ Ñ‚Ñ€Ð°Ñ„Ñ–ÐºÑƒ на вході й виході з "
-"цієї зони, а параметр \"ÑпрÑмовуваннÑ\" опиÑує політику ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
-"трафіку між різними мережами в межах зони. Пункт <em>вкриті мережі</em> "
+"цієї зони, а параметр \"переÑпрÑмовуваннÑ\" опиÑує політику ÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ "
+"трафіку між різними мережами в межах зони. Пункт <em>Покриті мережі</em> "
"визначає, Ñкі доÑтупні мережі Ñ” членами цієї зони."
msgid "Thursday"
-msgstr ""
+msgstr "Четвер"
msgid "Time in UTC"
-msgstr ""
+msgstr "Ð§Ð°Ñ Ð² UTC"
msgid "To %s at %s on <var>this device</var>"
msgstr "%s на %s <var>цього приÑтрою</var>"
@@ -527,7 +532,7 @@ msgstr ""
"порти WAN на маршрутизаторі."
msgid "Tuesday"
-msgstr ""
+msgstr "Вівторок"
msgid "Via %s"
msgstr "Через %s"
@@ -536,10 +541,10 @@ msgid "Via %s at %s"
msgstr "Через %s на %s"
msgid "Wednesday"
-msgstr ""
+msgstr "Середа"
msgid "Week Days"
-msgstr ""
+msgstr "Дні тижнÑ"
msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering "
@@ -552,7 +557,7 @@ msgid "Zone %q"
msgstr "Зона %q"
msgid "Zone ⇒ Forwardings"
-msgstr "Зона ⇒ СпрÑмовуваннÑ"
+msgstr "Зона ⇒ ПереÑпрÑмовуваннÑ"
msgid "Zones"
msgstr "Зони"
@@ -573,7 +578,7 @@ msgid "any zone"
msgstr "будь-Ñкій зоні"
msgid "day"
-msgstr ""
+msgstr "день"
msgid "don't track"
msgstr "не відÑтеж."
@@ -582,31 +587,31 @@ msgid "drop"
msgstr "опуÑкати"
msgid "hour"
-msgstr ""
+msgstr "година"
msgid "minute"
-msgstr ""
+msgstr "хвилина"
msgid "not"
-msgstr ""
+msgstr "не"
msgid "port"
-msgstr ""
+msgstr "порт"
msgid "ports"
-msgstr ""
+msgstr "порти"
msgid "reject"
msgstr "відкидати"
msgid "second"
-msgstr ""
+msgstr "Ñекунда"
msgid "traffic"
-msgstr ""
+msgstr "трафік"
msgid "type"
-msgstr ""
+msgstr "типом"
msgid "types"
-msgstr ""
+msgstr "типами"
diff --git a/applications/luci-app-firewall/po/vi/firewall.po b/applications/luci-app-firewall/po/vi/firewall.po
index bd33afcd09..0eba33f760 100644
--- a/applications/luci-app-firewall/po/vi/firewall.po
+++ b/applications/luci-app-firewall/po/vi/firewall.po
@@ -306,6 +306,9 @@ msgstr ""
msgid "Output"
msgstr "Output"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
diff --git a/applications/luci-app-firewall/po/zh-cn/firewall.po b/applications/luci-app-firewall/po/zh-cn/firewall.po
index 46da547c08..8c1424cf06 100644
--- a/applications/luci-app-firewall/po/zh-cn/firewall.po
+++ b/applications/luci-app-firewall/po/zh-cn/firewall.po
@@ -179,7 +179,7 @@ msgid "General Settings"
msgstr "基本设置"
msgid "Hardware flow offloading"
-msgstr "硬件æµé‡å¸è½½"
+msgstr "硬件æµé‡åˆ†è½½"
msgid "IP"
msgstr "IP"
@@ -301,6 +301,9 @@ msgstr "其它..."
msgid "Output"
msgstr "出站数æ®"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "传递到 iptables çš„é¢å¤–å‚数。å°å¿ƒä½¿ç”¨ï¼"
@@ -359,7 +362,7 @@ msgid "Rewrite to source %s, %s"
msgstr "æºåœ°å€æ”¹å†™æˆ %s, %s"
msgid "Routing/NAT Offloading"
-msgstr "Routing/NAT å¸è½½"
+msgstr "Routing/NAT 分载"
msgid "Rule is disabled"
msgstr "规则已ç¦ç”¨"
@@ -377,10 +380,10 @@ msgid "Saturday"
msgstr "星期六"
msgid "Software based offloading for routing/NAT"
-msgstr "基于软件的 Routing/NAT å¸è½½"
+msgstr "基于软件的 Routing/NAT 分载"
msgid "Software flow offloading"
-msgstr "软件æµé‡å¸è½½"
+msgstr "软件æµé‡åˆ†è½½"
msgid "Source IP address"
msgstr "æº IP 地å€"
diff --git a/applications/luci-app-firewall/po/zh-tw/firewall.po b/applications/luci-app-firewall/po/zh-tw/firewall.po
index 1fbe970ddb..93af452d05 100644
--- a/applications/luci-app-firewall/po/zh-tw/firewall.po
+++ b/applications/luci-app-firewall/po/zh-tw/firewall.po
@@ -301,6 +301,9 @@ msgstr "其它..."
msgid "Output"
msgstr "出站資料"
+msgid "Output zone"
+msgstr ""
+
msgid "Passes additional arguments to iptables. Use with care!"
msgstr "傳éžåˆ° iptables çš„é¡å¤–引數。å°å¿ƒä½¿ç”¨ï¼"
diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua
index c7fe63f87b..8557f2b821 100644
--- a/applications/luci-app-lxc/luasrc/controller/lxc.lua
+++ b/applications/luci-app-lxc/luasrc/controller/lxc.lua
@@ -18,7 +18,7 @@ module("luci.controller.lxc", package.seeall)
local uci = require "luci.model.uci".cursor()
local util = require "luci.util"
-local fs = require "nixio"
+local nx = require "nixio"
function index()
if not nixio.fs.access("/etc/config/lxc") then
@@ -60,8 +60,8 @@ end
function lxc_create(lxc_name, lxc_template)
luci.http.prepare_content("text/plain")
- local check = lxc_get_config_path()
- if not check then
+ local path = lxc_get_config_path()
+ if not path then
return
end
@@ -80,6 +80,10 @@ function lxc_create(lxc_name, lxc_template)
ssl_status
}
}), src_err)
+
+ while (nx.fs.access(path .. lxc_name .. "/partial")) do
+ nx.nanosleep(1)
+ end
end
function lxc_action(lxc_action, lxc_name)
@@ -96,7 +100,7 @@ function lxc_get_config_path()
local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)')
if ret then
- if nixio.fs.access(ret) then
+ if nx.fs.access(ret) then
local min_space = tonumber(uci:get("lxc", "lxc", "min_space")) or 100000
local free_space = tonumber(util.exec("df " ..ret.. " | awk '{if(NR==2)print $4}'"))
if free_space and free_space >= min_space then
@@ -150,7 +154,7 @@ function lxc_configuration_set(lxc_name)
end
function lxc_get_arch_target()
- local target = fs.uname().machine
+ local target = nx.uname().machine
local target_map = {
armv5 = "armel",
armv6 = "armel",
diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm
index a68143b796..b45e27f51f 100644
--- a/applications/luci-app-lxc/luasrc/view/lxc.htm
+++ b/applications/luci-app-lxc/luasrc/view/lxc.htm
@@ -15,8 +15,8 @@ Author: Petar Koretic <petar.koretic@sartura.hr>
-%>
<%-
-local fs = require "nixio"
-local target = fs.uname().machine
+local nx = require "nixio"
+local target = nx.uname().machine
-%>
<fieldset class="cbi-section">
@@ -36,7 +36,7 @@ local target = fs.uname().machine
<span id="lxc-list-output"></span>
</fieldset>
-<hr/>
+<hr />
<fieldset class="cbi-section">
<legend><%:Create New Container%></legend>
<div class="cbi-section-node">
@@ -46,11 +46,11 @@ local target = fs.uname().machine
<div class="th cbi-section-table-cell"><%:Template%></div>
<div class="th cbi-section-table-cell"><%:Actions%></div>
</div>
- <div class="tr cbi-section-table-row" id="div_holder">
+ <div class="tr cbi-section-table-row" id="div_create">
<div class="td"><input class="cbi-input-text" type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /></div>
<div class="td"><select id="s_template" class="cbi-input-select cbi-button"></select></div>
<div class="td">
- <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(div_holder)" class="cbi-button cbi-button-add" />
+ <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create()" class="cbi-button cbi-button-add" />
<span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
</div>
</div>
@@ -62,25 +62,29 @@ local target = fs.uname().machine
<span id="lxc-add-output"></span>
</fieldset>
-<hr/>
+<hr />
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
<script type="text/javascript">
//<![CDATA[
- window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }
- window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple" }
+ window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" };
+ window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple" };
var t_lxc_list = document.getElementById('t_lxc_list');
var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
- var output_list = document.getElementById("lxc-list-output")
- var output_add = document.getElementById("lxc-add-output")
- var loader_add = document.getElementById("lxc-add-loader")
+ var output_list = document.getElementById("lxc-list-output");
+ var output_add = document.getElementById("lxc-add-output");
+ var loader_add = document.getElementById("lxc-add-loader");
+ var div_create = document.getElementById("div_create");
+ var bt_create = div_create.querySelector("#bt_create");
- function lxc_create(div)
+ bt_create.disabled = true;
+ info_message(output_add, "Template download in progress, please be patient!");
+
+ function lxc_create()
{
- var lxc_name = div.querySelector("#tx_name").value.replace(/[\s!@#$%^&*()+=\[\]{};':"\\|,<>\/?]/g,'');
- var lxc_template = div.querySelector("#s_template").value;
- var bt_create = div.querySelector("#bt_create");
+ var lxc_name = div_create.querySelector("#tx_name").value.replace(/[\s!@#$%^&*()+=\[\]{};':"\\|,<>\/?]/g,'');
+ var lxc_template = div_create.querySelector("#s_template").value;
if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null)
{
@@ -155,7 +159,7 @@ local target = fs.uname().machine
var div3 = document.createElement("div");
div3.className = "td";
div3.style.width = "50%";
- div3.innerHTML = actions
+ div3.innerHTML = actions;
document.getElementById("t_lxc_list").appendChild(div0);
div0.appendChild(div1);
@@ -209,8 +213,8 @@ local target = fs.uname().machine
}
else if (action == "destroy")
{
- var div = self.parentNode.parentNode
- var img = div.querySelector('img')
+ var div = self.parentNode.parentNode;
+ var img = div.querySelector('img');
if (img.getAttribute('src') != window.img["red"])
{
@@ -434,7 +438,7 @@ local target = fs.uname().machine
}
else
{
- setTimeout(function() { elem.innerHTML = ''}, 1000);
+ setTimeout(function() { elem.innerHTML = ''}, 2000);
}
}
@@ -466,10 +470,6 @@ local target = fs.uname().machine
}
}
- lxc_list_update();
-
- info_message(output_add, "Template download in progress, please be patient!");
-
new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null,
function(x, data)
{
@@ -489,7 +489,6 @@ local target = fs.uname().machine
return set_no_template();
}
- bt_create.disabled = false;
var select = document.getElementById("s_template");
for(var key in data)
{
@@ -498,7 +497,11 @@ local target = fs.uname().machine
option.text = data[key].replace(/[_:]/g, ' ');
select.add(option, -1);
}
+
info_message(output_add, "");
+ bt_create.disabled = false;
})
+
+ lxc_list_update();
//]]>
</script>
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
index 4a92c7abd9..13773ef1e1 100644
--- a/applications/luci-app-mwan3/po/zh-cn/mwan3.po
+++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
@@ -42,7 +42,7 @@ msgid "Check IP rules"
msgstr "检查 IP 规则"
msgid "Check link quality"
-msgstr ""
+msgstr "检查连接数é‡"
msgid "Check routing table"
msgstr "检查路由表"
@@ -57,7 +57,7 @@ msgid "Destination port"
msgstr "目标端å£"
msgid "Detail"
-msgstr ""
+msgstr "详细"
msgid "Diagnostics"
msgstr "诊断"
@@ -76,7 +76,7 @@ msgid "Enter value in hex, starting with <code>0x</code>"
msgstr "输入å六进制值,以 <code>0x</code> 开头"
msgid "Execute"
-msgstr ""
+msgstr "执行"
msgid "Expect interface state on up event"
msgstr "在 up 事件å‘生时的预期接å£çŠ¶æ€"
@@ -103,7 +103,7 @@ msgid "Hotplug ifup"
msgstr "Hotplug ifup"
msgid "INFO: MWAN not running"
-msgstr ""
+msgstr "ä¿¡æ¯ï¼šMWAN 没有è¿è¡Œ"
msgid "IPset"
msgstr "IPset"
@@ -154,28 +154,28 @@ msgid "Local source interface"
msgstr "本地æºæŽ¥å£"
msgid "MWAN - Globals"
-msgstr ""
+msgstr "MWAN - 全局"
msgid "MWAN - Interfaces"
-msgstr ""
+msgstr "MWAN - 接å£"
msgid "MWAN - Members"
-msgstr ""
+msgstr "MWAN - æˆå‘˜"
msgid "MWAN - Notification"
-msgstr ""
+msgstr "MWAN - 通知"
msgid "MWAN - Policies"
-msgstr ""
+msgstr "MWAN - ç­–ç•¥"
msgid "MWAN - Rules"
-msgstr ""
+msgstr "MWAN - 规则"
msgid "MWAN Interface Configuration - %s"
msgstr "MWAN 接å£é…ç½® - %s"
msgid "MWAN Interfaces"
-msgstr ""
+msgstr "MWAN 接å£"
msgid "MWAN Member Configuration - %s"
msgstr "MWAN æˆå‘˜é…ç½® - %s"
@@ -187,13 +187,13 @@ msgid "MWAN Rule Configuration - %s"
msgstr "MWAN 规则é…ç½® - %s"
msgid "MWAN Status - Detail"
-msgstr ""
+msgstr "MWAN Status - 详细"
msgid "MWAN Status - Diagnostics"
-msgstr ""
+msgstr "MWAN Status - 诊断"
msgid "MWAN Status - Troubleshooting"
-msgstr ""
+msgstr "MWAN Status - 故障排除"
msgid ""
"MWAN supports up to 252 physical and/or logical interfaces<br />MWAN "
@@ -209,10 +209,10 @@ msgstr ""
"å£ä¸åº”该与æˆå‘˜ã€ç­–ç•¥ã€è§„则中的任æ„一个设置项使用相åŒçš„å称"
msgid "Max packet latency [ms]"
-msgstr ""
+msgstr "最大数æ®åŒ…延迟 [ms]"
msgid "Max packet loss [%]"
-msgstr ""
+msgstr "最大数æ®åŒ…丢失率 [%]"
msgid ""
"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
@@ -246,10 +246,10 @@ msgid "Metric"
msgstr "跃点数"
msgid "Min packet latency [ms]"
-msgstr ""
+msgstr "最å°æ•°æ®åŒ…延迟 [ms]"
msgid "Min packet loss [%]"
-msgstr ""
+msgstr "最å°æ•°æ®åŒ…丢失率 [%]"
msgid ""
"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
@@ -265,7 +265,7 @@ msgid "No MWAN interfaces found"
msgstr "没有找到 MWAN 接å£"
msgid "Notification"
-msgstr ""
+msgstr "通知"
msgid "Offline"
msgstr "离线"
@@ -312,7 +312,7 @@ msgstr ""
"“策略â€æŠŠæˆå‘˜è¿›è¡Œåˆ†ç»„,告诉 MWAN 如何分é…“规则â€ä¸­ä½¿ç”¨è¿™ä¸€ç­–略的æµé‡<br />拥有"
"较低跃点数的æˆå‘˜å°†ä¼šè¢«ä¼˜å…ˆä½¿ç”¨ã€‚拥有相åŒè·ƒç‚¹æ•°çš„æˆå‘˜æŠŠæµé‡è¿›è¡Œè´Ÿè½½å‡è¡¡ã€‚<br /"
">进行负载å‡è¡¡çš„æˆå‘˜ä¹‹é—´æ‹¥æœ‰è¾ƒé«˜æ¯”é‡çš„æˆå‘˜å°†ä¼šè¢«åˆ†é…到更多æµé‡ã€‚<br />å称å…许"
-"包括A-Zã€a-zã€0-9ã€_ 但是ä¸èƒ½æœ‰ç©ºæ ¼ã€‚å称应该在 15 个字符以内<br />ç­–ç•¥ä¸åº”该"
+"包括 A-Zã€a-zã€0-9ã€_ 但是ä¸èƒ½æœ‰ç©ºæ ¼ã€‚å称应该在 15 个字符以内<br />ç­–ç•¥ä¸åº”该"
"与接å£ã€æˆå‘˜ã€è§„则中的任æ„一个设置项使用相åŒçš„å称"
msgid "Policy"
@@ -344,6 +344,11 @@ msgid ""
"z, 0-9, _ and no spaces<br />Rules may not share the same name as configured "
"interfaces, members or policies"
msgstr ""
+"规则指定哪些æµé‡å°†ä½¿ç”¨ç‰¹å®šçš„ MWAN ç­–ç•¥<br />规则基于 IP 地å€ï¼Œç«¯å£æˆ–åè®®<br />"
+"规则从上到下匹é…<br />匹é…规则以下的规则被忽略<br />ä¸ç¬¦åˆä»»ä½•è§„则的æµé‡å°†ä½¿ç”¨ä¸»è·¯ç”±è¡¨è¿›"
+"行路由<br />目的地为已知(éžé»˜è®¤ï¼‰ç½‘络的æµé‡ç”±ä¸»è·¯ç”±è¡¨å¤„ç†<br />æµé‡ç¬¦åˆè§„则,但该策略的"
+"所有 WAN 接å£å…³é—­åŽéƒ½ä¼šè¢«å¤±æ•ˆ<br />å称å¯åŒ…å«å­—符 A-Z,a-z,0-9,_和空格<br />"
+"规则ä¸èƒ½ä¸Žé…置的接å£ã€æˆå‘˜æˆ–策略共享相åŒçš„å称"
msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
msgstr "å•ä½ä¸ºç§’。接å—的值:1-1000000。留空则使用默认值 600 秒"
@@ -364,7 +369,7 @@ msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
msgstr "æ”¯æŒ CIDR 记法(例如:\"192.168.100.0/24\")ä¸å«å¼•å·"
msgid "Task"
-msgstr ""
+msgstr "任务"
msgid "There are currently %d of %d supported interfaces configured"
msgstr "当å‰å·²é…ç½® %d 个接å£ï¼Œæœ€å¤§æ”¯æŒ %d 个"
@@ -395,6 +400,14 @@ msgid ""
"Physical device name which interface went up or down (e.g. \"eth0\" or "
"\"wwan0\")<br /><br />"
msgstr ""
+"这里å…许您修改“/etc/mwan3.userâ€çš„内容。<br />该文件在 sysupgrade 期间也会"
+"ä¿ç•™ã€‚<br /><br />注æ„:<br />该文件会作为 shell 脚本解释。<br />脚本的第"
+"一行必须是 &#34;#!/bin/sh&#34;,ä¸å¸¦å¼•å·ã€‚<br />以 # 开头的行是注释,ä¸ä¼šæ‰§"
+"行。<br />将您的自定义 mwan3 动作放在这里,他们将<br />在å¯ç”¨ mwan3 的接å£"
+"上<br />在 netifd hotplug 接å£äº‹ä»¶æ—¶æ‰§è¡Œã€‚<br /><br />有三个主è¦çš„环境å˜é‡"
+"传递给这个脚本。<br /><br />$ACTION “ifup†或 “ifdownâ€<br />$INTERFACE å¯åŠ¨"
+"或åœæ­¢çš„接å£å(例如 “wan†或 “wwanâ€ï¼‰<br />$DEVICE å¯åŠ¨æˆ–åœæ­¢æŽ¥å£çš„物ç†è®¾å¤‡"
+"å(例如 “eth0†或 “wwan0â€ï¼‰<br /><br />"
msgid "Tracking hostname or IP address"
msgstr "跟踪的主机或 IP 地å€"
@@ -421,35 +434,37 @@ msgid ""
msgstr "使用该接å£çš„ IP 地å€ä½œä¸ºè·¯ç”±å™¨æœ¬èº«å‘èµ·çš„æµé‡çš„æº IP 地å€"
msgid "View the content of /etc/protocols for protocol description"
-msgstr ""
+msgstr "查看åè®®æè¿°çš„ /etc/protocols 的内容"
msgid "WARNING: %d interfaces are configured exceeding the maximum of %d!"
msgstr "警告:已é…ç½® %d 个接å£ï¼Œè¶…过最大值 %dï¼"
msgid "WARNING: Interface %s are not found in /etc/config/network"
-msgstr ""
+msgstr "è­¦å‘Šï¼šæŽ¥å£ %s 在 /etc/config/network 中未找到"
msgid "WARNING: Interface %s has a duplicate metric %s configured"
-msgstr ""
+msgstr "è­¦å‘Šï¼šæŽ¥å£ %s çš„ metric %s é…ç½®é‡å¤"
msgid ""
"WARNING: Interface %s has a higher reliability requirement than tracking "
"hosts (%d)"
msgstr ""
+"è­¦å‘Šï¼šæŽ¥å£ %s 比跟踪主机具有更高的å¯é æ€§è¦æ±‚(%d)"
msgid "WARNING: Interface %s has no default route in the main routing table"
-msgstr ""
+msgstr "è­¦å‘Šï¼šæŽ¥å£ %s 在主路由表中没有默认的路由"
msgid "WARNING: Policy %s has exceeding the maximum name of 15 characters"
-msgstr ""
+msgstr "警告:策略 %s å称超过 15 个字符"
msgid ""
"WARNING: Rule %s have a port configured with no or improper protocol "
"specified!"
msgstr ""
+"警告:规则 %s 有一个端å£é…置没有指定或åè®®ä¸æ­£ç¡®ï¼"
msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "正在等待命令完æˆ..."
msgid "Weight"
msgstr "比é‡"
diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js
index 0a1961916c..a7f999d876 100644
--- a/modules/luci-base/htdocs/luci-static/resources/cbi.js
+++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js
@@ -465,31 +465,16 @@ function cbi_d_add(field, dep, index) {
}
function cbi_d_checkvalue(target, ref) {
- var t = document.getElementById(target);
- var value;
+ var value = null,
+ query = 'input[id="'+target+'"], input[name="'+target+'"], ' +
+ 'select[id="'+target+'"], select[name="'+target+'"]';
- if (!t) {
- var tl = document.getElementsByName(target);
-
- if( tl.length > 0 && (tl[0].type == 'radio' || tl[0].type == 'checkbox'))
- for( var i = 0; i < tl.length; i++ )
- if( tl[i].checked ) {
- value = tl[i].value;
- break;
- }
-
- value = value ? value : "";
- } else if (!t.value) {
- value = "";
- } else {
- value = t.value;
-
- if (t.type == "checkbox") {
- value = t.checked ? value : "";
- }
- }
+ document.querySelectorAll(query).forEach(function(i) {
+ if (value === null && ((i.type !== 'radio' && i.type !== 'checkbox') || i.checked === true))
+ value = i.value;
+ });
- return (value == ref)
+ return (((value !== null) ? value : "") == ref);
}
function cbi_d_check(deps) {
@@ -634,6 +619,10 @@ function cbi_init() {
node.getAttribute('data-type'));
}
+ document.querySelectorAll('.cbi-dropdown').forEach(function(s) {
+ cbi_dropdown_init(s);
+ });
+
cbi_d_update();
}
@@ -1574,3 +1563,484 @@ function E()
return elem;
}
+
+if (typeof(window.CustomEvent) !== 'function') {
+ function CustomEvent(event, params) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
+ return evt;
+ }
+
+ CustomEvent.prototype = window.Event.prototype;
+ window.CustomEvent = CustomEvent;
+}
+
+CBIDropdown = {
+ openDropdown: function(sb) {
+ var st = window.getComputedStyle(sb, null),
+ ul = sb.querySelector('ul'),
+ li = ul.querySelectorAll('li'),
+ sel = ul.querySelector('[selected]'),
+ rect = sb.getBoundingClientRect(),
+ h = sb.clientHeight - parseFloat(st.paddingTop) - parseFloat(st.paddingBottom),
+ mh = this.dropdown_items * h,
+ eh = Math.min(mh, li.length * h);
+
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+
+ ul.style.maxHeight = mh + 'px';
+ sb.setAttribute('open', '');
+
+ ul.scrollTop = sel ? Math.max(sel.offsetTop - sel.offsetHeight, 0) : 0;
+ ul.querySelectorAll('[selected] input[type="checkbox"]').forEach(function(c) {
+ c.checked = true;
+ });
+
+ ul.style.top = ul.style.bottom = '';
+ ul.style[((sb.getBoundingClientRect().top + eh) > window.innerHeight) ? 'bottom' : 'top'] = rect.height + 'px';
+ ul.classList.add('dropdown');
+
+ var pv = ul.cloneNode(true);
+ pv.classList.remove('dropdown');
+ pv.classList.add('preview');
+
+ sb.insertBefore(pv, ul.nextElementSibling);
+
+ li.forEach(function(l) {
+ l.setAttribute('tabindex', 0);
+ });
+
+ sb.lastElementChild.setAttribute('tabindex', 0);
+
+ this.setFocus(sb, sel || li[0], true);
+ },
+
+ closeDropdown: function(sb, no_focus) {
+ if (!sb.hasAttribute('open'))
+ return;
+
+ var pv = sb.querySelector('ul.preview'),
+ ul = sb.querySelector('ul.dropdown'),
+ li = ul.querySelectorAll('li');
+
+ li.forEach(function(l) { l.removeAttribute('tabindex'); });
+ sb.lastElementChild.removeAttribute('tabindex');
+
+ sb.removeChild(pv);
+ sb.removeAttribute('open');
+ sb.style.width = sb.style.height = '';
+
+ ul.classList.remove('dropdown');
+
+ if (!no_focus)
+ this.setFocus(sb, sb);
+
+ this.saveValues(sb, ul);
+ },
+
+ toggleItem: function(sb, li, force_state) {
+ if (li.hasAttribute('unselectable'))
+ return;
+
+ if (this.multi) {
+ var cbox = li.querySelector('input[type="checkbox"]'),
+ items = li.parentNode.querySelectorAll('li'),
+ label = sb.querySelector('ul.preview'),
+ sel = li.parentNode.querySelectorAll('[selected]').length,
+ more = sb.querySelector('.more'),
+ ndisplay = this.display_items,
+ n = 0;
+
+ if (li.hasAttribute('selected')) {
+ if (force_state !== true) {
+ if (sel > 1 || this.optional) {
+ li.removeAttribute('selected');
+ cbox.checked = cbox.disabled = false;
+ sel--;
+ }
+ else {
+ cbox.disabled = true;
+ }
+ }
+ }
+ else {
+ if (force_state !== false) {
+ li.setAttribute('selected', '');
+ cbox.checked = true;
+ cbox.disabled = false;
+ sel++;
+ }
+ }
+
+ while (label.firstElementChild)
+ label.removeChild(label.firstElementChild);
+
+ for (var i = 0; i < items.length; i++) {
+ items[i].removeAttribute('display');
+ if (items[i].hasAttribute('selected')) {
+ if (ndisplay-- > 0) {
+ items[i].setAttribute('display', n++);
+ label.appendChild(items[i].cloneNode(true));
+ }
+ var c = items[i].querySelector('input[type="checkbox"]');
+ if (c)
+ c.disabled = (sel == 1 && !this.optional);
+ }
+ }
+
+ if (ndisplay < 0)
+ sb.setAttribute('more', '');
+ else
+ sb.removeAttribute('more');
+
+ if (ndisplay === this.display_items)
+ sb.setAttribute('empty', '');
+ else
+ sb.removeAttribute('empty');
+
+ more.innerHTML = (ndisplay === this.display_items) ? this.placeholder : '···';
+ }
+ else {
+ var sel = li.parentNode.querySelector('[selected]');
+ if (sel) {
+ sel.removeAttribute('display');
+ sel.removeAttribute('selected');
+ }
+
+ li.setAttribute('display', 0);
+ li.setAttribute('selected', '');
+
+ this.closeDropdown(sb, true);
+ }
+
+ this.saveValues(sb, li.parentNode);
+ },
+
+ transformItem: function(sb, li) {
+ var cbox = E('form', {}, E('input', { type: 'checkbox', tabindex: -1, onclick: 'event.preventDefault()' })),
+ label = E('label');
+
+ while (li.firstChild)
+ label.appendChild(li.firstChild);
+
+ li.appendChild(cbox);
+ li.appendChild(label);
+ },
+
+ saveValues: function(sb, ul) {
+ var sel = ul.querySelectorAll('[selected]'),
+ div = sb.lastElementChild;
+
+ while (div.lastElementChild)
+ div.removeChild(div.lastElementChild);
+
+ sel.forEach(function (s) {
+ div.appendChild(E('input', {
+ type: 'hidden',
+ name: s.hasAttribute('name') ? s.getAttribute('name') : (sb.getAttribute('name') || ''),
+ value: s.hasAttribute('value') ? s.getAttribute('value') : s.innerText
+ }));
+ });
+
+ cbi_d_update();
+ },
+
+ setFocus: function(sb, elem, scroll) {
+ if (sb && sb.hasAttribute && sb.hasAttribute('locked-in'))
+ return;
+
+ document.querySelectorAll('.focus').forEach(function(e) {
+ if (e.nodeName.toLowerCase() !== 'input') {
+ e.classList.remove('focus');
+ e.blur();
+ }
+ });
+
+ if (elem) {
+ elem.focus();
+ elem.classList.add('focus');
+
+ if (scroll)
+ elem.parentNode.scrollTop = elem.offsetTop - elem.parentNode.offsetTop;
+ }
+ },
+
+ createItems: function(sb, value) {
+ var sbox = this,
+ val = (value || '').trim().split(/\s+/),
+ ul = sb.querySelector('ul');
+
+ if (!sbox.multi)
+ val.length = Math.min(val.length, 1);
+
+ val.forEach(function(item) {
+ var new_item = null;
+
+ ul.childNodes.forEach(function(li) {
+ if (li.getAttribute && li.getAttribute('value') === item)
+ new_item = li;
+ });
+
+ if (!new_item) {
+ var markup,
+ tpl = sb.querySelector(sbox.template);
+
+ if (tpl)
+ markup = (tpl.textContent || tpl.innerHTML || tpl.firstChild.data).replace(/^<!--|-->$/, '').trim();
+ else
+ markup = '<li value="{{value}}">{{value}}</li>';
+
+ new_item = E(markup.replace(/{{value}}/g, item));
+
+ if (sbox.multi) {
+ sbox.transformItem(sb, new_item);
+ }
+ else {
+ var old = ul.querySelector('li[created]');
+ if (old)
+ ul.removeChild(old);
+
+ new_item.setAttribute('created', '');
+ }
+
+ new_item = ul.insertBefore(new_item, ul.lastElementChild);
+ }
+
+ sbox.toggleItem(sb, new_item, true);
+ sbox.setFocus(sb, new_item, true);
+ });
+ },
+
+ closeAllDropdowns: function() {
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+ },
+
+ findParent: function(node, selector) {
+ while (node)
+ if (node.msMatchesSelector && node.msMatchesSelector(selector))
+ return node;
+ else if (node.matches && node.matches(selector))
+ return node;
+ else
+ node = node.parentNode;
+
+ return null;
+ }
+};
+
+function cbi_dropdown_init(sb) {
+ if (!(this instanceof cbi_dropdown_init))
+ return new cbi_dropdown_init(sb);
+
+ this.multi = sb.hasAttribute('multiple');
+ this.optional = sb.hasAttribute('optional');
+ this.placeholder = sb.getAttribute('placeholder') || '---';
+ this.display_items = parseInt(sb.getAttribute('display-items') || 3);
+ this.dropdown_items = parseInt(sb.getAttribute('dropdown-items') || 5);
+ this.create = sb.getAttribute('item-create') || '.create-item-input';
+ this.template = sb.getAttribute('item-template') || 'script[type="item-template"]';
+
+ var sbox = this,
+ ul = sb.querySelector('ul'),
+ items = ul.querySelectorAll('li'),
+ more = sb.appendChild(E('span', { class: 'more', tabindex: -1 }, '···')),
+ open = sb.appendChild(E('span', { class: 'open', tabindex: -1 }, 'â–¾')),
+ canary = sb.appendChild(E('div')),
+ create = sb.querySelector(this.create),
+ ndisplay = this.display_items,
+ n = 0;
+
+ if (this.multi) {
+ for (var i = 0; i < items.length; i++) {
+ sbox.transformItem(sb, items[i]);
+
+ if (items[i].hasAttribute('selected') && ndisplay-- > 0)
+ items[i].setAttribute('display', n++);
+ }
+ }
+ else {
+ var sel = sb.querySelectorAll('[selected]');
+
+ sel.forEach(function(s) {
+ s.removeAttribute('selected');
+ });
+
+ var s = sel[0] || items[0];
+ if (s) {
+ s.setAttribute('selected', '');
+ s.setAttribute('display', n++);
+ }
+
+ ndisplay--;
+
+ if (this.optional && !ul.querySelector('li[value=""]')) {
+ var placeholder = E('li', { placeholder: '' }, this.placeholder);
+ ul.firstChild ? ul.insertBefore(placeholder, ul.firstChild) : ul.appendChild(placeholder);
+ }
+ }
+
+ sbox.saveValues(sb, ul);
+
+ ul.setAttribute('tabindex', -1);
+ sb.setAttribute('tabindex', 0);
+
+ if (ndisplay < 0)
+ sb.setAttribute('more', '')
+ else
+ sb.removeAttribute('more');
+
+ if (ndisplay === this.display_items)
+ sb.setAttribute('empty', '')
+ else
+ sb.removeAttribute('empty');
+
+ more.innerHTML = (ndisplay === this.display_items) ? this.placeholder : '···';
+
+
+ sb.addEventListener('click', function(ev) {
+ if (!this.hasAttribute('open')) {
+ if (ev.target.nodeName.toLowerCase() !== 'input')
+ sbox.openDropdown(this);
+ }
+ else {
+ var li = sbox.findParent(ev.target, 'li');
+ if (li && li.parentNode.classList.contains('dropdown'))
+ sbox.toggleItem(this, li);
+ }
+
+ ev.preventDefault();
+ ev.stopPropagation();
+ });
+
+ sb.addEventListener('keydown', function(ev) {
+ if (ev.target.nodeName.toLowerCase() === 'input')
+ return;
+
+ if (!this.hasAttribute('open')) {
+ switch (ev.keyCode) {
+ case 37:
+ case 38:
+ case 39:
+ case 40:
+ sbox.openDropdown(this);
+ ev.preventDefault();
+ }
+ }
+ else
+ {
+ var active = sbox.findParent(document.activeElement, 'li');
+
+ switch (ev.keyCode) {
+ case 27:
+ sbox.closeDropdown(this);
+ break;
+
+ case 13:
+ if (active) {
+ if (!active.hasAttribute('selected'))
+ sbox.toggleItem(this, active);
+ sbox.closeDropdown(this);
+ ev.preventDefault();
+ }
+ break;
+
+ case 32:
+ if (active) {
+ sbox.toggleItem(this, active);
+ ev.preventDefault();
+ }
+ break;
+
+ case 38:
+ if (active && active.previousElementSibling) {
+ sbox.setFocus(this, active.previousElementSibling);
+ ev.preventDefault();
+ }
+ break;
+
+ case 40:
+ if (active && active.nextElementSibling) {
+ sbox.setFocus(this, active.nextElementSibling);
+ ev.preventDefault();
+ }
+ break;
+ }
+ }
+ });
+
+ sb.addEventListener('cbi-dropdown-close', function(ev) {
+ sbox.closeDropdown(this, true);
+ });
+
+ if ('ontouchstart' in window) {
+ sb.addEventListener('touchstart', function(ev) { ev.stopPropagation(); });
+ window.addEventListener('touchstart', sbox.closeAllDropdowns);
+ }
+ else {
+ sb.addEventListener('mouseover', function(ev) {
+ if (!this.hasAttribute('open'))
+ return;
+
+ var li = sbox.findParent(ev.target, 'li');
+ if (li) {
+ if (li.parentNode.classList.contains('dropdown'))
+ sbox.setFocus(this, li);
+
+ ev.stopPropagation();
+ }
+ });
+
+ sb.addEventListener('focus', function(ev) {
+ document.querySelectorAll('.cbi-dropdown[open]').forEach(function(s) {
+ if (s !== this || this.hasAttribute('open'))
+ s.dispatchEvent(new CustomEvent('cbi-dropdown-close', {}));
+ });
+ });
+
+ canary.addEventListener('focus', function(ev) {
+ sbox.closeDropdown(this.parentNode);
+ });
+
+ window.addEventListener('mouseover', sbox.setFocus);
+ window.addEventListener('click', sbox.closeAllDropdowns);
+ }
+
+ if (create) {
+ create.addEventListener('keydown', function(ev) {
+ switch (ev.keyCode) {
+ case 13:
+ sbox.createItems(sb, this.value);
+ ev.preventDefault();
+ this.value = '';
+ this.blur();
+ break;
+ }
+ });
+
+ create.addEventListener('focus', function(ev) {
+ var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]');
+ if (cbox) cbox.checked = true;
+ sb.setAttribute('locked-in', '');
+ });
+
+ create.addEventListener('blur', function(ev) {
+ var cbox = sbox.findParent(this, 'li').querySelector('input[type="checkbox"]');
+ if (cbox) cbox.checked = false;
+ sb.removeAttribute('locked-in');
+ });
+
+ var li = sbox.findParent(create, 'li');
+
+ li.setAttribute('unselectable', '');
+ li.addEventListener('click', function(ev) {
+ this.querySelector(sbox.create).focus();
+ });
+ }
+}
+
+cbi_dropdown_init.prototype = CBIDropdown;
diff --git a/modules/luci-base/luasrc/cbi.lua b/modules/luci-base/luasrc/cbi.lua
index 4728642118..d275c5b275 100644
--- a/modules/luci-base/luasrc/cbi.lua
+++ b/modules/luci-base/luasrc/cbi.lua
@@ -1226,13 +1226,14 @@ function TypedSection.parse(self, novld)
local stval = RESORT_PREFIX .. self.config .. "." .. self.sectiontype
local order = self.map:formvalue(stval)
if order and #order > 0 then
- local sid
- local num = 0
+ local sids, sid = { }, nil
for sid in util.imatch(order) do
- self.map.uci:reorder(self.config, sid, num)
- num = num + 1
+ sids[#sids+1] = sid
+ end
+ if #sids > 0 then
+ self.map.uci:reorder(self.config, sids)
+ self.changed = true
end
- self.changed = (num > 0)
end
end
@@ -1416,6 +1417,12 @@ function AbstractValue.parse(self, section, novld)
self:add_error(section, "invalid", val_err)
end
+ if self.alias then
+ self.section.aliased = self.section.aliased or {}
+ self.section.aliased[section] = self.section.aliased[section] or {}
+ self.section.aliased[section][self.alias] = true
+ end
+
if fvalue and (self.forcewrite or not (fvalue == cvalue)) then
if self:write(section, fvalue) then
-- Push events
@@ -1425,10 +1432,16 @@ function AbstractValue.parse(self, section, novld)
end
else -- Unset the UCI or error
if self.rmempty or self.optional then
- if self:remove(section) then
- -- Push events
- self.section.changed = true
- --luci.util.append(self.map.events, self.events)
+ if not self.alias or
+ not self.section.aliased or
+ not self.section.aliased[section] or
+ not self.section.aliased[section][self.alias]
+ then
+ if self:remove(section) then
+ -- Push events
+ self.section.changed = true
+ --luci.util.append(self.map.events, self.events)
+ end
end
elseif cvalue ~= fvalue and not novld then
-- trigger validator with nil value to get custom user error msg.
@@ -1454,7 +1467,7 @@ function AbstractValue.cfgvalue(self, section)
if self.tag_error[section] then
value = self:formvalue(section)
else
- value = self.map:get(section, self.option)
+ value = self.map:get(section, self.alias or self.option)
end
if not value then
@@ -1495,12 +1508,12 @@ AbstractValue.transform = AbstractValue.validate
-- Write to UCI
function AbstractValue.write(self, section, value)
- return self.map:set(section, self.option, value)
+ return self.map:set(section, self.alias or self.option, value)
end
-- Remove from UCI
function AbstractValue.remove(self, section)
- return self.map:del(section, self.option)
+ return self.map:del(section, self.alias or self.option)
end
@@ -1833,6 +1846,15 @@ function DynamicList.formvalue(self, section)
end
+DropDown = class(MultiValue)
+
+function DropDown.__init__(self, ...)
+ ListValue.__init__(self, ...)
+ self.template = "cbi/dropdown"
+ self.delimiter = " "
+end
+
+
--[[
TextValue - A multi-line value
rows: Rows
diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua
index 2c58b0ab3d..6850d7e3a9 100644
--- a/modules/luci-base/luasrc/dispatcher.lua
+++ b/modules/luci-base/luasrc/dispatcher.lua
@@ -358,7 +358,7 @@ function dispatch(request)
elseif key == "REQUEST_URI" then
return build_url(unpack(ctx.requestpath))
elseif key == "FULL_REQUEST_URI" then
- local url = { http.getenv("SCRIPT_NAME") or "" , http.getenv("PATH_INFO") }
+ local url = { http.getenv("SCRIPT_NAME") or "", http.getenv("PATH_INFO") }
local query = http.getenv("QUERY_STRING")
if query and #query > 0 then
url[#url+1] = "?"
@@ -507,10 +507,11 @@ function dispatch(request)
else
ok, err = util.copcall(target, unpack(args))
end
- assert(ok,
- "Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") ..
- " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" ..
- "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"))
+ if not ok then
+ error500("Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") ..
+ " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" ..
+ "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"))
+ end
else
local root = node()
if not root or not root.target then
diff --git a/modules/luci-base/luasrc/model/uci.lua b/modules/luci-base/luasrc/model/uci.lua
index 461ba9d5a3..92c0d8f699 100644
--- a/modules/luci-base/luasrc/model/uci.lua
+++ b/modules/luci-base/luasrc/model/uci.lua
@@ -8,7 +8,7 @@ local table = require "table"
local setmetatable, rawget, rawset = setmetatable, rawget, rawset
local require, getmetatable, assert = require, getmetatable, assert
-local error, pairs, ipairs = error, pairs, ipairs
+local error, pairs, ipairs, select = error, pairs, ipairs, select
local type, tostring, tonumber, unpack = type, tostring, tonumber, unpack
-- The typical workflow for UCI is: Get a cursor instance from the
@@ -106,7 +106,7 @@ function changes(self, config)
local _, change
for _, change in ipairs(changes) do
local operation, section, option, value = unpack(change)
- if option and value and operation ~= "add" then
+ if option and operation ~= "add" then
res[package][section] = res[package][section] or { }
if operation == "list-add" then
@@ -373,15 +373,15 @@ function add(self, config, stype)
return self:section(config, stype)
end
-function set(self, config, section, option, value)
- if value == nil then
+function set(self, config, section, option, ...)
+ if select('#', ...) == 0 then
local sname, err = self:section(config, option, section)
return (not not sname), err
else
local _, err = call("set", {
config = config,
section = section,
- values = { [option] = value }
+ values = { [option] = select(1, ...) }
})
return (err == nil), ERRSTR[err]
end
diff --git a/modules/luci-base/luasrc/util.lua b/modules/luci-base/luasrc/util.lua
index ce42af2fb0..10428b0b35 100644
--- a/modules/luci-base/luasrc/util.lua
+++ b/modules/luci-base/luasrc/util.lua
@@ -100,6 +100,8 @@ end
-- Scope manipulation routines
--
+coxpt = setmetatable({}, { __mode = "kv" })
+
local tl_meta = {
__mode = "k",
@@ -697,73 +699,69 @@ function checklib(fullpathexe, wantedlib)
return false
end
+-------------------------------------------------------------------------------
+-- Coroutine safe xpcall and pcall versions
--
--- Coroutine safe xpcall and pcall versions modified for Luci
--- original version:
--- coxpcall 1.13 - Copyright 2005 - Kepler Project (www.keplerproject.org)
+-- Encapsulates the protected calls with a coroutine based loop, so errors can
+-- be dealed without the usual Lua 5.x pcall/xpcall issues with coroutines
+-- yielding inside the call to pcall or xpcall.
--
--- Copyright © 2005 Kepler Project.
--- Permission is hereby granted, free of charge, to any person obtaining a
--- copy of this software and associated documentation files (the "Software"),
--- to deal in the Software without restriction, including without limitation
--- the rights to use, copy, modify, merge, publish, distribute, sublicense,
--- and/or sell copies of the Software, and to permit persons to whom the
--- Software is furnished to do so, subject to the following conditions:
+-- Authors: Roberto Ierusalimschy and Andre Carregal
+-- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fabio Mascarenhas
--
--- The above copyright notice and this permission notice shall be
--- included in all copies or substantial portions of the Software.
+-- Copyright 2005 - Kepler Project
--
--- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
--- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
--- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
--- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
--- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
--- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
--- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-local performResume, handleReturnValue
-local oldpcall, oldxpcall = pcall, xpcall
-coxpt = {}
-setmetatable(coxpt, {__mode = "kv"})
-
--- Identity function for copcall
-local function copcall_id(trace, ...)
- return ...
-end
-
--- values of either the function or the error handler
-function coxpcall(f, err, ...)
- local res, co = oldpcall(coroutine.create, f)
- if not res then
- local params = {...}
- local newf = function() return f(unpack(params)) end
- co = coroutine.create(newf)
- end
- local c = coroutine.running()
- coxpt[co] = coxpt[c] or c or 0
+-- $Id: coxpcall.lua,v 1.13 2008/05/19 19:20:02 mascarenhas Exp $
+-------------------------------------------------------------------------------
- return performResume(err, co, ...)
-end
-
--- values of the function or the error object
-function copcall(f, ...)
- return coxpcall(f, copcall_id, ...)
-end
+-------------------------------------------------------------------------------
+-- Implements xpcall with coroutines
+-------------------------------------------------------------------------------
+local coromap = setmetatable({}, { __mode = "k" })
--- Handle return value of protected call
-function handleReturnValue(err, co, status, ...)
+local function handleReturnValue(err, co, status, ...)
if not status then
return false, err(debug.traceback(co, (...)), ...)
end
-
- if coroutine.status(co) ~= 'suspended' then
+ if coroutine.status(co) == 'suspended' then
+ return performResume(err, co, coroutine.yield(...))
+ else
return true, ...
end
-
- return performResume(err, co, coroutine.yield(...))
end
--- Resume execution of protected function call
function performResume(err, co, ...)
return handleReturnValue(err, co, coroutine.resume(co, ...))
end
+
+local function id(trace, ...)
+ return trace
+end
+
+function coxpcall(f, err, ...)
+ local current = coroutine.running()
+ if not current then
+ if err == id then
+ return pcall(f, ...)
+ else
+ if select("#", ...) > 0 then
+ local oldf, params = f, { ... }
+ f = function() return oldf(unpack(params)) end
+ end
+ return xpcall(f, err)
+ end
+ else
+ local res, co = pcall(coroutine.create, f)
+ if not res then
+ local newf = function(...) return f(...) end
+ co = coroutine.create(newf)
+ end
+ coromap[co] = current
+ coxpt[co] = coxpt[current] or current or 0
+ return performResume(err, co, ...)
+ end
+end
+
+function copcall(f, ...)
+ return coxpcall(f, id, ...)
+end
diff --git a/modules/luci-base/luasrc/view/cbi/apply_widget.htm b/modules/luci-base/luasrc/view/cbi/apply_widget.htm
index 543ef0b80b..702512f495 100644
--- a/modules/luci-base/luasrc/view/cbi/apply_widget.htm
+++ b/modules/luci-base/luasrc/view/cbi/apply_widget.htm
@@ -1,59 +1,98 @@
<% export("cbi_apply_widget", function(redirect_ok) -%>
<style type="text/css">
- #cbi_apply_status {
+ .alert-message.notice {
+ background: linear-gradient(#fff 0%, #eee 100%);
+ }
+
+ #cbi_apply_overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ background: rgba(0, 0, 0, 0.7);
+ display: none;
+ z-index: 20000;
+ }
+
+ #cbi_apply_overlay .alert-message {
+ position: relative;
+ top: 10%;
+ width: 60%;
+ margin: auto;
display: flex;
flex-wrap: wrap;
min-height: 32px;
align-items: center;
- margin: 1.5em 0 1.5em 0;
}
- #cbi_apply_status > h4,
- #cbi_apply_status > p,
- #cbi_apply_status > div {
+ #cbi_apply_overlay .alert-message > h4,
+ #cbi_apply_overlay .alert-message > p,
+ #cbi_apply_overlay .alert-message > div {
flex-basis: 100%;
}
- #cbi_apply_status > img {
+ #cbi_apply_overlay .alert-message > img {
margin-right: 1em;
flex-basis: 32px;
}
- #cbi_apply_status + script + .cbi-section {
- margin-top: -1em;
+ body.apply-overlay-active {
+ overflow: hidden;
+ height: 100vh;
}
- .alert-message.notice {
- background: linear-gradient(#fff 0%, #eee 100%);
+ body.apply-overlay-active #cbi_apply_overlay {
+ display: block;
}
</style>
-<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.138.59467-72fe5dd"></script>
<script type="text/javascript">//<![CDATA[
var xhr = new XHR(),
- stat, indicator,
uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' },
uci_apply_rollback = <%=math.max(luci.config and luci.config.apply and luci.config.apply.rollback or 30, 30)%>,
uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>,
uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>,
uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>;
+ function uci_status_message(type, content) {
+ var overlay = document.getElementById('cbi_apply_overlay') || document.body.appendChild(E('<div id="cbi_apply_overlay"><div class="alert-message"></div></div>')),
+ message = overlay.querySelector('.alert-message');
+
+ if (message && type) {
+ if (!message.classList.contains(type)) {
+ message.classList.remove('notice');
+ message.classList.remove('warning');
+ message.classList.add(type);
+ }
+
+ if (content)
+ message.innerHTML = content;
+
+ document.body.classList.add('apply-overlay-active');
+ }
+ else {
+ document.body.classList.remove('apply-overlay-active');
+ }
+ }
+
function uci_rollback(checked) {
if (checked) {
- stat.classList.remove('notice');
- stat.classList.add('warning');
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback);
+ uci_status_message('warning',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback));
var call = function(r) {
if (r.status === 204) {
- stat.innerHTML = '<h4><%:Configuration has been rolled back!%></h4>' +
+ uci_status_message('warning',
+ '<h4><%:Configuration has been rolled back!%></h4>' +
'<p><%:The device could not be reached within %d seconds after applying the pending changes, which caused the configuration to be rolled back for safety reasons. If you believe that the configuration changes are correct nonetheless, perform an unchecked configuration apply. Alternatively, you can dismiss this warning and edit changes before attempting to apply again, or revert all pending changes to keep the currently working configuration state.%></p>'.format(uci_apply_rollback) +
'<div class="right">' +
- '<input type="button" class="btn" onclick="this.parentNode.parentNode.style.display=\'none\'" value="<%:Dismiss%>" /> ' +
+ '<input type="button" class="btn" onclick="uci_status_message(false)" value="<%:Dismiss%>" /> ' +
'<input type="button" class="btn" onclick="uci_revert()" value="<%:Revert changes%>" /> ' +
'<input type="button" class="btn danger" onclick="uci_apply(false)" value="<%:Apply unchecked%>" />' +
- '</div>';
+ '</div>');
return;
}
@@ -64,10 +103,9 @@
call({ status: 0 });
}
else {
- stat.classList.remove('notice');
- stat.classList.add('warning');
- stat.innerHTML = '<h4><%:Device unreachable!%></h4>' +
- '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>';
+ uci_status_message('warning',
+ '<h4><%:Device unreachable!%></h4>' +
+ '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>');
}
}
@@ -75,12 +113,7 @@
var tt;
var ts = Date.now();
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
-
- indicator = document.querySelector('.uci_change_indicator');
+ uci_status_message('notice');
var call = function(r) {
if (Date.now() >= deadline) {
@@ -88,15 +121,18 @@
return;
}
else if (r && (r.status === 200 || r.status === 204)) {
- if (indicator)
- indicator.style.display = 'none';
+ var indicator = document.querySelector('.uci_change_indicator');
+ if (indicator) indicator.style.display = 'none';
- stat.innerHTML = '<%:Configuration has been applied.%>';
+ uci_status_message('notice', '<%:Configuration has been applied.%>');
window.clearTimeout(tt);
window.setTimeout(function() {
- stat.style.display = 'none';
- <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+ <% if redirect_ok then -%>
+ location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
+ <%- else -%>
+ window.location = window.location.href.split('#')[0];
+ <% end %>
}, uci_apply_display * 1000);
return;
@@ -108,8 +144,9 @@
var tick = function() {
var now = Date.now();
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0));
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0)));
if (now >= deadline)
return;
@@ -125,43 +162,39 @@
}
function uci_apply(checked) {
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Starting configuration apply…%>';
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Starting configuration apply…%>');
xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r) {
if (r.status === (checked ? 200 : 204)) {
uci_confirm(checked, Date.now() + uci_apply_rollback * 1000);
}
else if (checked && r.status === 204) {
- stat.innerHTML = '<%:There are no changes to apply.%>';
+ uci_status_message('notice', '<%:There are no changes to apply.%>');
window.setTimeout(function() {
- stat.style.display = 'none';
- <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %>
+ <% if redirect_ok then -%>
+ location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
+ <%- else -%>
+ uci_status_message(false);
+ <%- end %>
}, uci_apply_display * 1000);
}
else {
- stat.classList.add('warning');
- stat.classList.remove('notice');
- stat.innerHTML = '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status);
+ uci_status_message('warning', '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status));
+ window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
}
function uci_revert() {
- stat = document.getElementById('cbi_apply_status');
- stat.style.display = '';
- stat.classList.remove('warning');
- stat.classList.add('notice');
- stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
- '<%:Reverting configuration…%>';
+ uci_status_message('notice',
+ '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
+ '<%:Reverting configuration…%>');
xhr.post('<%=url("admin/uci/revert")%>', uci_apply_auth, function(r) {
if (r.status === 200) {
- stat.innerHTML = '<%:Changes have been reverted.%>';
+ uci_status_message('notice', '<%:Changes have been reverted.%>');
window.setTimeout(function() {
<% if redirect_ok then -%>
location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');
@@ -171,9 +204,8 @@
}, uci_apply_display * 1000);
}
else {
- stat.classList.add('warning');
- stat.classList.remove('notice');
- stat.innerHTML = '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status);
+ uci_status_message('warning', '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status));
+ window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000);
}
});
}
diff --git a/modules/luci-base/luasrc/view/cbi/dropdown.htm b/modules/luci-base/luasrc/view/cbi/dropdown.htm
new file mode 100644
index 0000000000..bdf7248375
--- /dev/null
+++ b/modules/luci-base/luasrc/view/cbi/dropdown.htm
@@ -0,0 +1,42 @@
+<%+cbi/valueheader%>
+
+<%-
+ local selected = { }
+
+ if self.multiple then
+ local val
+ for val in luci.util.imatch(self:cfgvalue(section)) do
+ selected[val] = true
+ end
+ else
+ selected[self:cfgvalue(section)] = true
+ end
+
+ if not next(selected) and self.default then
+ selected[self.default] = true
+ end
+-%>
+
+<div class="cbi-dropdown"<%=
+ attr("name", cbid) ..
+ attr("display-items", self.display or self.size or 3) ..
+ attr("dropdown-items", self.dropdown or self.display or self.size or 5) ..
+ attr("placeholder", self.placeholder or translate("-- please select --")) ..
+ ifattr(self.multiple, "multiple", "multiple") ..
+ ifattr(self.optional or self.rmempty, "optional", "optional")
+%>>
+ <ul>
+ <% local i, key; for i, key in pairs(self.keylist) do %>
+ <li<%=
+ attr("data-index", i) ..
+ attr("data-depends", self:deplist2json(section, self.deplist[i])) ..
+ attr("value", key) ..
+ ifattr(selected[key], "selected", "selected")
+ %>>
+ <%=pcdata(self.vallist[i])%>
+ </li>
+ <% end %>
+ </ul>
+</div>
+
+<%+cbi/valuefooter%>
diff --git a/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm b/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm
index b4260707ef..3a108020b6 100644
--- a/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm
+++ b/modules/luci-base/luasrc/view/cbi/firewall_zonelist.htm
@@ -24,26 +24,42 @@
end
-%>
-<span>
- <ul style="margin:0; list-style-type:none; text-align:left">
+<div class="cbi-dropdown" dropdown-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.rmempty or self.optional, "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <span class="zonebadge" style="background:repeating-linear-gradient(45deg,rgba(204,204,204,0.5),rgba(204,204,204,0.5) 5px,rgba(255,255,255,0.5) 5px,rgba(255,255,255,0.5) 10px)">
+ <strong>{{value}}:</strong><em>(<%:create%>)</em>
+ </span>
+ </li>
+ --></script>
+ <ul>
<% if self.allowlocal then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_empty") .. attr("name", cbid) .. attr("value", "") .. ifattr(checked[""], "checked", "checked")%> /> &#160;
- <label<%=attr("for", cbid .. "_empty")%>></label>
- <label<%=attr("for", cbid .. "_empty")%> style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
+ <li value=""<%=ifattr(checked[""], "selected", "selected")%>>
+ <span style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
<strong><%:Device%></strong>
- <% if self.allowany and self.allowlocal then %>(<%:input%>)<% end %>
- </label>
+ <% if self.allowany and self.allowlocal then -%>
+ (<%= self.alias ~= "dest"
+ and translate("output") or translate("input") %>)
+ <%- end %>
+ </span>
+ </li>
+ <% elseif self.widget ~= "checkbox" and (self.rmempty or self.optional) then %>
+ <li value=""<%=ifattr(checked[""], "selected", "selected")%>>
+ <span class="zonebadge">
+ <em><%:unspecified%></em>
+ </span>
</li>
<% end %>
<% if self.allowany then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_any") .. attr("name", cbid) .. attr("value", "*") .. ifattr(checked["*"], "checked", "checked")%> /> &#160;
- <label<%=attr("for", cbid .. "_any")%>></label>
- <label<%=attr("for", cbid .. "_any")%> style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
+ <li value="*"<%=ifattr(checked["*"], "selected", "selected")%>>
+ <span style="background-color:<%=fwm.zone.get_color()%>" class="zonebadge">
<strong><%:Any zone%></strong>
<% if self.allowany and self.allowlocal then %>(<%:forward%>)<% end %>
- </label>
+ </span>
</li>
<% end %>
<%
@@ -51,45 +67,42 @@
if zone:name() ~= self.exclude then
selected = selected or (value == zone:name())
%>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "." .. zone:name()) .. attr("name", cbid) .. attr("value", zone:name()) .. ifattr(checked[zone:name()], "checked", "checked")%> /> &#160;
- <label<%=attr("for", cbid .. "." .. zone:name())%>></label>
- <label<%=attr("for", cbid .. "." .. zone:name())%> style="background-color:<%=zone:get_color()%>" class="zonebadge">
+ <li<%=attr("value", zone:name()) .. ifattr(checked[zone:name()], "selected", "selected")%>>
+ <span style="background-color:<%=zone:get_color()%>" class="zonebadge">
<strong><%=zone:name()%>:</strong>
- <%
+ <%-
local zempty = true
for _, net in ipairs(zone:get_networks()) do
net = nwm:get_network(net)
if net then
zempty = false
- %>
+ -%>
<span class="ifacebadge<% if net:name() == self.network then %> ifacebadge-active<% end %>"><%=net:name()%>:
- <%
+ <%-
local nempty = true
for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do
nempty = false
%>
- <img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
+ <img<%=attr("title", iface:get_i18n())%> src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
<% end %>
- <% if nempty then %><em><%:(empty)%></em><% end %>
+ <% if nempty then %><em><%:(empty)%></em><% end -%>
</span>
- <% end end %>
- <% if zempty then %><em><%:(empty)%></em><% end %>
- </label>
+ <%- end end -%>
+ <%- if zempty then %><em><%:(empty)%></em><% end -%>
+ </span>
</li>
<% end end %>
<% if self.widget ~= "checkbox" and not self.nocreate then %>
- <li style="padding:0.5em">
- <input class="cbi-input-radio" data-update="click change" type="radio"<%=attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not selected, "checked", "checked")%> /> &#160;
- <label<%=attr("for", cbid .. "_new")%>></label>
- <div onclick="document.getElementById('<%=cbid%>_new').checked=true" class="zonebadge" style="background-color:<%=fwm.zone.get_color()%>">
- <em><%:unspecified -or- create:%>&#160;</em>
- <input type="text"<%=attr("name", cbid .. ".newzone") .. ifattr(not selected, "value", luci.http.formvalue(cbid .. ".newzone") or self.default)%> onfocus="document.getElementById('<%=cbid%>_new').checked=true" />
- </div>
+ <li value="-">
+ <span class="zonebadge">
+ <em><%:create%>:</em>
+ <input type="password" style="display:none" />
+ <input class="create-item-input" type="text" />
+ </span>
</li>
<% end %>
</ul>
-</span>
+</div>
<%+cbi/valuefooter%>
diff --git a/modules/luci-base/luasrc/view/cbi/map.htm b/modules/luci-base/luasrc/view/cbi/map.htm
index 69ef3615a2..02b47f5455 100644
--- a/modules/luci-base/luasrc/view/cbi/map.htm
+++ b/modules/luci-base/luasrc/view/cbi/map.htm
@@ -1,5 +1,5 @@
<%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%>
- <div class="errorbox"><%=pcdata(msg)%></div>
+ <div class="alert-message warning"><%=pcdata(msg)%></div>
<%- end end -%>
<div class="cbi-map" id="cbi-<%=self.config%>">
diff --git a/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm b/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm
index 62dbde7dd4..abfa33e1ed 100644
--- a/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm
+++ b/modules/luci-base/luasrc/view/cbi/network_ifacelist.htm
@@ -19,7 +19,9 @@
if value then
for value in utl.imatch(value) do
- checked[value] = true
+ for value in utl.imatch(value) do
+ checked[value] = true
+ end
end
else
local n = self.network and net:get_network(self.network)
@@ -33,57 +35,51 @@
-%>
<input type="hidden" name="<%=cbeid%>" value="1" />
-<ul style="margin:0; list-style-type:none">
- <% for _, iface in ipairs(ifaces) do
- local link = iface:adminlink()
- if (not self.nobridges or not iface:is_bridge()) and
- (not self.noinactive or iface:is_up()) and
- iface:name() ~= self.exclude
- then %>
- <li>
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "." .. iface:name()) ..
- attr("name", cbid) .. attr("value", iface:name()) ..
- ifattr(checked[iface:name()], "checked", "checked")
- %> />
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "." .. iface:name())%>></label>
- <%- end -%>
- &#160;
- <label<%=attr("for", cbid .. "." .. iface:name())%>>
- <% if link then -%><a href="<%=link%>"><% end -%>
- <img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
- <% if link then -%></a><% end -%>
- <%=pcdata(iface:get_i18n())%>
- <% local ns = iface:get_networks(); if #ns > 0 then %>(
- <%- local i, n; for i, n in ipairs(ns) do -%>
- <%-= (i>1) and ', ' -%>
- <a href="<%=n:adminlink()%>"><%=n:name()%></a>
- <%- end -%>
- )<% end %>
- </label>
- </li>
- <% end end %>
- <% if not self.nocreate then %>
- <li>
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "_custom") ..
- attr("name", cbid) ..
- attr("value", " ")
- %> />
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "_custom")%>></label>
- <%- end -%>
- &#160;
- <label<%=attr("for", cbid .. "_custom")%>>
- <img title="<%:Custom Interface%>" style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/ethernet_disabled.png" />
- <%:Custom Interface%>:
- </label>
- <input type="text" style="width:50px" onfocus="document.getElementById('<%=cbid%>_custom').checked=true" onblur="var x=document.getElementById('<%=cbid%>_custom'); x.value=this.value; x.checked=true" />
- </li>
- <% end %>
-</ul>
+
+<div class="cbi-dropdown" display-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.widget == "checkbox", "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <img title="<%:Custom Interface%>: &quot;{{value}}&quot;" src="<%=resource%>/icons/ethernet_disabled.png" />
+ <span class="hide-open">{{value}}</span>
+ <span class="hide-close"><%:Custom Interface%>: "{{value}}"</span>
+ </li>
+ --></script>
+ <ul>
+ <% for _, iface in ipairs(ifaces) do
+ if (not self.nobridges or not iface:is_bridge()) and
+ (not self.noinactive or iface:is_up()) and
+ iface:name() ~= self.exclude
+ then %>
+ <li<%=
+ attr("value", iface:name()) ..
+ ifattr(checked[iface:name()], "selected", "selected")
+ %>>
+ <img<%=attr("title", iface:get_i18n())%> src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
+ <span class="hide-open"><%=pcdata(iface:name())%></span>
+ <span class="hide-close">
+ <%=pcdata(iface:get_i18n())%>
+ <% local ns = iface:get_networks(); if #ns > 0 then %>(
+ <%- local i, n; for i, n in ipairs(ns) do -%>
+ <%-= (i>1) and ', ' -%>
+ <a href="<%=n:adminlink()%>"><%=n:name()%></a>
+ <%- end -%>
+ )<% end %>
+ </span>
+ </li>
+ <% end end %>
+ <% if not self.nocreate then %>
+ <li value="">
+ <img title="<%:Custom Interface%>" src="<%=resource%>/icons/ethernet_disabled.png" />
+ <span><%:Custom Interface%>:</span>
+ <input type="password" style="display:none" />
+ <input class="create-item-input" type="text" />
+ </li>
+ <% end %>
+ </ul>
+</div>
<%+cbi/valuefooter%>
diff --git a/modules/luci-base/luasrc/view/cbi/network_netlist.htm b/modules/luci-base/luasrc/view/cbi/network_netlist.htm
index 8bf1a70a20..ba6ebb8434 100644
--- a/modules/luci-base/luasrc/view/cbi/network_netlist.htm
+++ b/modules/luci-base/luasrc/view/cbi/network_netlist.htm
@@ -20,66 +20,62 @@
end
-%>
-<ul style="margin:0; list-style-type:none; text-align:left">
- <% for _, net in ipairs(networks) do
- if (net:name() ~= "loopback") and
- (net:name() ~= self.exclude) and
- (not self.novirtual or not net:is_virtual())
- then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "." .. net:name()) ..
- attr("name", cbid) .. attr("value", net:name()) ..
- ifattr(checked[net:name()], "checked", "checked")
- %> /> &#160;
- <label<%=attr("for", cbid .. "." .. net:name())%>>
+<div class="cbi-dropdown" display-items="5" placeholder="<%:-- please select -- %>"<%=
+ attr("name", cbid) ..
+ ifattr(self.widget == "checkbox", "multiple", "multiple") ..
+ ifattr(self.widget == "checkbox", "optional", "optional")
+%>>
+ <script type="item-template"><!--
+ <li value="{{value}}">
+ <span class="ifacebadge" style="background:repeating-linear-gradient(45deg,rgba(204,204,204,0.5),rgba(204,204,204,0.5) 5px,rgba(255,255,255,0.5) 5px,rgba(255,255,255,0.5) 10px)">
+ {{value}}: <em>(<%:create%>)</em>
+ </span>
+ </li>
+ --></script>
+ <ul>
+ <% if self.widget ~= "checkbox" then %>
+ <li value=""<%= ifattr(not value, "selected", "selected") %>>
+ <em><%:unspecified%></em>
+ </li>
+ <% end %>
+
+ <% for _, net in ipairs(networks) do
+ if (net:name() ~= "loopback") and
+ (net:name() ~= self.exclude) and
+ (not self.novirtual or not net:is_virtual())
+ then %>
+ <li<%= attr("value", net:name()) .. ifattr(checked[net:name()], "selected", "selected") %>>
<span class="ifacebadge"><%=net:name()%>:
<%
local empty = true
for _, iface in ipairs(net:is_bridge() and net:get_interfaces() or { net:get_interface() }) do
if not iface:is_bridge() then
empty = false
- %>
+ -%>
<img<%=attr("title", iface:get_i18n())%> style="width:16px; height:16px; vertical-align:middle" src="<%=resource%>/icons/<%=iface:type()%><%=iface:is_up() and "" or "_disabled"%>.png" />
- <% end end %>
- <% if empty then %><em><%:(no interfaces attached)%></em><% end %>
+ <%- end end %>
+ <% if empty then %>
+ <em class="hide-close"><%:(no interfaces attached)%></em>
+ <em class="hide-open">-</em>
+ <% end %>
</span>
- </label>
- </li>
- <% end end %>
+ </li>
+ <% end end %>
- <% if not self.nocreate then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=attr("type", self.widget or "radio") .. attr("id", cbid .. "_new") .. attr("name", cbid) .. attr("value", "-") .. ifattr(not value and self.widget ~= "checkbox", "checked", "checked")%> /> &#160;
- <%- if not self.widget or self.widget == "checkbox" or self.widget == "radio" then -%>
- <label<%=attr("for", cbid .. "_new")%>></label>
- <%- end -%>
- <div style="padding:0.5em; display:inline">
- <label<%=attr("for", cbid .. "_new")%>><em>
+ <% if not self.nocreate then %>
+ <li value="-"<%= ifattr(not value and self.widget ~= "checkbox", "selected", "selected") %>>
+ <em>
<%- if self.widget == "checkbox" then -%>
<%:create:%>
<%- else -%>
<%:unspecified -or- create:%>
- <%- end -%>&#160;</em></label>
+ <%- end -%>
+ </em>
<input style="display:none" type="password" />
- <input style="width:6em" type="text"<%=attr("name", cbid .. ".newnet")%> onfocus="document.getElementById('<%=cbid%>_new').checked=true" />
- </div>
- </li>
- <% elseif self.widget ~= "checkbox" and self.unspecified then %>
- <li style="padding:0.25em 0">
- <input class="cbi-input-<%=self.widget or "radio"%>" data-update="click change"<%=
- attr("type", self.widget or "radio") ..
- attr("id", cbid .. "_uns") ..
- attr("name", cbid) ..
- attr("value", "") ..
- ifattr(not value or #value == 0, "checked", "checked")
- %> /> &#160;
- <div style="padding:0.5em; display:inline">
- <label<%=attr("for", cbid .. "_uns")%>><em><%:unspecified%></em></label>
- </div>
- </li>
- <% end %>
-</ul>
+ <input class="create-item-input" type="text" />
+ </li>
+ <% end %>
+ </ul>
+</div>
<%+cbi/valuefooter%>
diff --git a/modules/luci-base/luasrc/view/sysauth.htm b/modules/luci-base/luasrc/view/sysauth.htm
index b3ec9b7617..e7a741aaab 100644
--- a/modules/luci-base/luasrc/view/sysauth.htm
+++ b/modules/luci-base/luasrc/view/sysauth.htm
@@ -8,7 +8,9 @@
<form method="post" action="<%=pcdata(FULL_REQUEST_URI)%>">
<%- if fuser then %>
- <div class="errorbox"><%:Invalid username and/or password! Please try again.%></div>
+ <div class="alert-message warning">
+ <p><%:Invalid username and/or password! Please try again.%></p>
+ </div>
<% end -%>
<div class="cbi-map">
diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po
index f9976f3ebf..32cee9f50c 100644
--- a/modules/luci-base/po/ca/base.po
+++ b/modules/luci-base/po/ca/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Càrrega d'1 minut:"
@@ -401,6 +404,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -415,6 +421,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Estacions associades"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1287,7 +1296,7 @@ msgstr "Espai lliure"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1421,8 +1430,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Tallafocs IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estat WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adreça IPv4"
@@ -1472,8 +1481,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estat WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adreça IPv6"
@@ -2584,12 +2593,12 @@ msgstr ""
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2597,12 +2606,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3708,6 +3717,9 @@ msgstr ""
msgid "bridged"
msgstr "pontejat"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crea:"
@@ -3796,6 +3808,9 @@ msgstr "engegat"
msgid "open"
msgstr "obert"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3847,6 +3862,12 @@ msgstr "sí"
msgid "« Back"
msgstr "« Enrere"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estat WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estat WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplica"
diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po
index daae96c49d..673ca6fd44 100644
--- a/modules/luci-base/po/cs/base.po
+++ b/modules/luci-base/po/cs/base.po
@@ -47,6 +47,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Zatížení za 1 minutu:"
@@ -397,6 +400,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -411,6 +417,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Připojení klienti"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1289,7 +1298,7 @@ msgstr "Volné místo"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1420,8 +1429,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 firewall"
-msgid "IPv4 WAN Status"
-msgstr "Stav IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 adresa"
@@ -1471,8 +1480,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Stav IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 adresa"
@@ -2595,15 +2604,15 @@ msgstr ""
"Host Configuration Protocol\">DHCP</abbr> Serveru"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Opravdu odstranit toto rozhraní? Odstranění nelze vrátit zpět!\n"
"Můžete ztratit přístup k zařízení, pokud jste připojeni prostřednictvím "
"tohoto rozhraní."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Opravdu odstranit bezdrátovou síť? Odstranění nelze vrátit zpět!\n"
@@ -2615,7 +2624,7 @@ msgstr "Opravdu resetovat všechny změny?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Opravdu vypnout síť ?\n"
@@ -2623,7 +2632,7 @@ msgstr ""
"tohoto rozhraní."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Opravdu vypnout rozhraní \"%s\" ?\n"
@@ -3749,6 +3758,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "přemostěný"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3837,6 +3849,9 @@ msgstr "on"
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3888,6 +3903,12 @@ msgstr "ano"
msgid "« Back"
msgstr "« Zpět"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Stav IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Stav IPv6 WAN"
+
#~ msgid "Apply"
#~ msgstr "Použít"
diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po
index a7b003caf3..c0e0f914d1 100644
--- a/modules/luci-base/po/de/base.po
+++ b/modules/luci-base/po/de/base.po
@@ -49,6 +49,9 @@ msgstr "-- anhand Label selektieren --"
msgid "-- match by uuid --"
msgstr "-- UUID vergleichen --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Systemlast (1 Minute):"
@@ -402,6 +405,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -420,6 +426,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Assoziierte Clients"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Berechtigungsgruppe"
@@ -1322,10 +1331,10 @@ msgstr "Freier Platz"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Weitere Informationen zu WireGuard-Schnittstellen und Peers unter <a href="
-"\"http://wireguard.io\">wireguard.io</a>."
+"\"http://wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "GHz"
@@ -1456,8 +1465,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 Firewall"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN Status"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 Adresse"
@@ -1507,8 +1516,8 @@ msgstr "IPv6 Einstellungen"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-Präfix"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN Status"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 Adresse"
@@ -2675,8 +2684,8 @@ msgid ""
msgstr "Lese Informationen aus /etc/ethers um den DHCP-Server zu konfigurieren"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Diese Schnittstelle wirklich löschen? Der Schritt kann nicht rückgängig "
"gemacht werden!\n"
@@ -2684,7 +2693,7 @@ msgstr ""
"Schnittstelle verbunden sind."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Dieses Drahtlosnetzwerk wirklich löschen? Der Schritt kann nicht rückgängig "
@@ -2697,7 +2706,7 @@ msgstr "Sollen wirklich alle Änderungen verworfen werden?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Das Netzwerk wirklich herunterfahren?\n"
@@ -2705,7 +2714,7 @@ msgstr ""
"Schnittstelle verbunden sind."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Die Schnitstelle \"%s\" wirklich herunterfahren?\n"
@@ -3887,6 +3896,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "bridged"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "erstelle:"
@@ -3973,6 +3985,9 @@ msgstr "ein"
msgid "open"
msgstr "offen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "Overlay"
@@ -4023,3 +4038,9 @@ msgstr "ja"
msgid "« Back"
msgstr "« Zurück"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN Status"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN Status"
diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po
index 60566b8217..3d3c765409 100644
--- a/modules/luci-base/po/el/base.po
+++ b/modules/luci-base/po/el/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "ΦοÏτίο 1 λεπτοÏ:"
@@ -404,6 +407,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -418,6 +424,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Συνδεδεμένοι Σταθμοί"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1303,7 +1312,7 @@ msgstr "ΕλεÏθεÏος χώÏος"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1433,7 +1442,7 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 Τείχος ΠÏοστασίας"
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1484,8 +1493,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Κατάσταση IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "ΔιεÏθυνση IPv6"
@@ -2601,12 +2610,12 @@ msgstr ""
"εξυπηÏετητή <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2614,12 +2623,12 @@ msgid "Really reset all changes?"
msgstr "ΑÏχικοποίηση όλων των αλλαγών;"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3700,6 +3709,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3789,6 +3801,9 @@ msgstr "ανοιχτό"
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3840,6 +3855,9 @@ msgstr "ναι"
msgid "« Back"
msgstr "« Πίσω"
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Κατάσταση IPv6 WAN"
+
#~ msgid "Apply"
#~ msgstr "ΕφαÏμογή"
diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po
index 5ff626f764..49cf819cd9 100644
--- a/modules/luci-base/po/en/base.po
+++ b/modules/luci-base/po/en/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 Minute Load:"
@@ -395,6 +398,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -409,6 +415,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Associated Stations"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1278,7 +1287,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1407,7 +1416,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1458,7 +1467,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2567,12 +2576,12 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2580,12 +2589,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3658,6 +3667,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3746,6 +3758,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po
index 3a408e4c7c..4c4713609b 100644
--- a/modules/luci-base/po/es/base.po
+++ b/modules/luci-base/po/es/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga a 1 minuto:"
@@ -401,6 +404,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -415,6 +421,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Estaciones asociadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1297,7 +1306,7 @@ msgstr "Espacio libre"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1429,8 +1438,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Cortafuegos IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado de la WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Dirección IPv4"
@@ -1480,8 +1489,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estado de la WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Dirección IPv6"
@@ -2609,8 +2618,8 @@ msgstr ""
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"¿Está seguro de borrar esta interfaz?. ¡No será posible deshacer el "
"borrado!\n"
@@ -2618,7 +2627,7 @@ msgstr ""
"interfaz."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"¿Está seguro de borrar esta red inalámbrica?. ¡No será posible deshacer el "
@@ -2630,14 +2639,14 @@ msgstr "¿Está seguro de querer reiniciar todos los cambios?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"¿Está seguro de querer apagar esta red?.\n"
"Puede perder el acceso a este dispositivo si está conectado por esta red."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"¿Está seguro de apagar la interfaz \"%s\"?.\n"
@@ -3776,6 +3785,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "puenteado"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crear:"
@@ -3864,6 +3876,9 @@ msgstr "activo"
msgid "open"
msgstr "abierto"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3915,6 +3930,12 @@ msgstr "sí"
msgid "« Back"
msgstr "« Volver"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado de la WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado de la WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplicar"
diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po
index 777117f3e6..d6e7ccf6bc 100644
--- a/modules/luci-base/po/fr/base.po
+++ b/modules/luci-base/po/fr/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Charge sur 1 minute :"
@@ -407,6 +410,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -421,6 +427,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Équipements associés"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1308,7 +1317,7 @@ msgstr "Espace libre"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1441,8 +1450,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Pare-feu IPv4"
-msgid "IPv4 WAN Status"
-msgstr "État IPv4 du WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adresse IPv4"
@@ -1492,8 +1501,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "État IPv6 du WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adresse IPv6"
@@ -2620,8 +2629,8 @@ msgid ""
msgstr "Lire /etc/ethers pour configurer le serveur DHCP"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Voulez-vous vraiment supprimer cette interface? L'effacement ne peut être "
"annulé!\n"
@@ -2629,7 +2638,7 @@ msgstr ""
"cette interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Voulez-vous vraiment supprimer ce réseau sans-fil? L'effacement ne peut être "
@@ -2641,7 +2650,7 @@ msgid "Really reset all changes?"
msgstr "Voulez-vous vraiment ré-initialiser toutes les modifications ?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Voulez-vous vraiment arrêter l'interface %s ?\n"
@@ -2649,7 +2658,7 @@ msgstr ""
"cette interface."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Voulez-vous vraiment arrêter l'interface %s ?\n"
@@ -3796,6 +3805,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "ponté"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "créer:"
@@ -3882,6 +3894,9 @@ msgstr "Actif"
msgid "open"
msgstr "ouvrir"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3933,6 +3948,12 @@ msgstr "oui"
msgid "« Back"
msgstr "« Retour"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "État IPv4 du WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "État IPv6 du WAN"
+
#~ msgid "Apply"
#~ msgstr "Appliquer"
diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po
index 5a179a3063..a8adc1038a 100644
--- a/modules/luci-base/po/he/base.po
+++ b/modules/luci-base/po/he/base.po
@@ -47,6 +47,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "עומס במשך דקה:"
@@ -396,6 +399,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -410,6 +416,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "תחנות קשורות"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1263,7 +1272,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1390,7 +1399,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1441,7 +1450,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2532,12 +2541,12 @@ msgid ""
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2546,14 +2555,14 @@ msgstr ""
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"×”×× ×œ×ž×—×•×§ ×ת הרשת ×”×לחוטית הזו? המחיקה ××™× ×” ניתנת לביטול!\n"
"ייתכן ות×בד גישה לנתב ×”×–×” ×× ×תה מחובר דרך השרת הזו."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3611,6 +3620,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3697,6 +3709,9 @@ msgstr "פועל"
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po
index f8cee36c43..57f9c45abe 100644
--- a/modules/luci-base/po/hu/base.po
+++ b/modules/luci-base/po/hu/base.po
@@ -47,6 +47,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Terhelés (utolsó 1 perc):"
@@ -400,6 +403,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -414,6 +420,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Kapcsolódó kliensek"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1299,7 +1308,7 @@ msgstr "Szabad hely"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1430,8 +1439,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 tűzfal"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN állapot"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 cím"
@@ -1481,8 +1490,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN állapot"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 cím"
@@ -2612,15 +2621,15 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr> kiszolgáló beállításához"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Biztosan törli az interfészt? A törlés nem visszavonható!\n"
" Lehet, hogy elveszti a hozzáférést az eszközhöz, amennyiben ezen az "
"interfészen keresztül kapcsolódik."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Biztosan törli ezt a vezetéknélküli hálózatot? A törlés nem visszavonható!\n"
@@ -2632,7 +2641,7 @@ msgstr "Biztos, hogy visszavonja az összes módosítást?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Biztos, hogy leállítja a hálózatot?!\n"
@@ -2640,7 +2649,7 @@ msgstr ""
"hálózaton keresztül kapcsolódik."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Biztos, hogy leállítja a \"%s\" interfészt?\n"
@@ -3783,6 +3792,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "áthidalt"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "új:"
@@ -3871,6 +3883,9 @@ msgstr "be"
msgid "open"
msgstr "nyitás"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3922,6 +3937,12 @@ msgstr "igen"
msgid "« Back"
msgstr "« Vissza"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN állapot"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN állapot"
+
#~ msgid "Apply"
#~ msgstr "Alkalmaz"
diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po
index 0bc37e4d0c..214a73f568 100644
--- a/modules/luci-base/po/it/base.po
+++ b/modules/luci-base/po/it/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carico in 1 minuto:"
@@ -409,6 +412,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -423,6 +429,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Dispositivi Wi-Fi connessi"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1301,7 +1310,7 @@ msgstr "Spazio libero"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1435,8 +1444,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 Firewall"
-msgid "IPv4 WAN Status"
-msgstr "Stato WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Indirizzi IPv4"
@@ -1486,8 +1495,8 @@ msgstr "Impostazioni IPv6"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Stato WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Indirizzi IPv6"
@@ -2610,32 +2619,35 @@ msgstr ""
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
+"Vuoi davvero rimuovere questa interfaccia? La rimozione non può essere ripristinata! "
+"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
+"Vuoi davvero rimuovere questa interfaccia wireless? La rimozione non può essere ripristinata! "
+"Potresti perdere l'accesso a questo dispositivo se sei connesso con questa rete."
msgid "Really reset all changes?"
msgstr "Azzerare veramente tutte le modifiche?"
-#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
-"Vuoi davvero spegnere questa interfaccia?\\nPotresti perdere "
-"l'accesso a questo router se sei connesso usando questa interfaccia."
+"Vuoi davvero spegnere questa interfaccia? Potresti perdere l'accesso a "
+"questo router se sei connesso usando questa interfaccia."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere "
-"l'accesso a questo router se stai usando questa interfaccia."
+"Vuoi davvero spegnere questa interfaccia \"%s\"? Potresti perdere l'accesso "
+"a questo router se stai usando questa interfaccia."
msgid "Really switch protocol?"
msgstr "Cambiare veramente il protocollo?"
@@ -3745,6 +3757,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "ponte"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "crea:"
@@ -3833,6 +3848,9 @@ msgstr "acceso"
msgid "open"
msgstr "apri"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3884,3 +3902,8 @@ msgstr "Sì"
msgid "« Back"
msgstr "« Indietro"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Stato WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Stato WAN IPv6"
diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po
index ed36969885..75a18b746a 100644
--- a/modules/luci-base/po/ja/base.po
+++ b/modules/luci-base/po/ja/base.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2018-05-21 00:47+0900\n"
+"PO-Revision-Date: 2018-06-01 02:42+0900\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
@@ -49,6 +49,9 @@ msgstr "-- ラベルを指定 --"
msgid "-- match by uuid --"
msgstr "-- UUID を指定 --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "éŽåŽ»1分ã®è² è·:"
@@ -401,6 +404,9 @@ msgstr "é©ç”¨ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ <code>%h</code> ã«ã‚ˆã‚Šå¤±æ•—ã
msgid "Apply unchecked"
msgstr "ãƒã‚§ãƒƒã‚¯ãªã—ã®é©ç”¨"
+msgid "Architecture"
+msgstr "アーキテクãƒãƒ£"
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -415,6 +421,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "èªè¨¼æ¸ˆã¿ç«¯æœ«"
+msgid "Associations"
+msgstr "アソシエーション数"
+
msgid "Auth Group"
msgstr "èªè¨¼ã‚°ãƒ«ãƒ¼ãƒ—"
@@ -580,7 +589,7 @@ msgid "Changes applied."
msgstr "変更ãŒé©ç”¨ã•ã‚Œã¾ã—ãŸã€‚"
msgid "Changes have been reverted."
-msgstr ""
+msgstr "変更ã¯å–り消ã•ã‚Œã¾ã—ãŸã€‚"
msgid "Changes the administrator password for accessing the device"
msgstr "デãƒã‚¤ã‚¹ã®ç®¡ç†è€…パスワードを変更ã—ã¾ã™"
@@ -1315,10 +1324,10 @@ msgstr "ディスクã®ç©ºã容é‡"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"WireGuard インターフェースã¨ãƒ”ã‚¢ã«ã¤ã„ã¦ã®è©³ç´°æƒ…å ±: <a href=\"http://"
-"wireguard.io\">wireguard.io</a>"
+"wireguard.com\">wireguard.com</a>"
msgid "GHz"
msgstr "GHz"
@@ -1446,8 +1455,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 ファイアウォール"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN ステータス"
+msgid "IPv4 Upstream"
+msgstr "IPv4 アップストリーム"
msgid "IPv4 address"
msgstr "IPv4 アドレス"
@@ -1497,8 +1506,8 @@ msgstr "IPv6 設定"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-プレフィクス"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN ステータス"
+msgid "IPv6 Upstream"
+msgstr "IPv6 アップストリーム"
msgid "IPv6 address"
msgstr "IPv6 アドレス"
@@ -2635,8 +2644,8 @@ msgstr ""
"ã¨ã—ã¦<code>/etc/ethers</code> をロードã—ã¾ã™"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"本当ã«ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’削除ã—ã¾ã™ã‹?一度削除ã™ã‚‹ã¨ã€å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾"
"ã›ã‚“!\n"
@@ -2644,7 +2653,7 @@ msgstr ""
"ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"本当ã«ã“ã®ç„¡ç·šãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’削除ã—ã¾ã™ã‹?一度削除ã™ã‚‹ã¨ã€å…ƒã«æˆ»ã™ã“ã¨ã¯ã§ãã¾"
@@ -2656,7 +2665,7 @@ msgid "Really reset all changes?"
msgstr "本当ã«å…¨ã¦ã®å¤‰æ›´ã‚’リセットã—ã¾ã™ã‹?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"本当ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’åœæ­¢ã—ã¾ã™ã‹?\n"
@@ -2664,7 +2673,7 @@ msgstr ""
"åˆãŒã‚ã‚Šã¾ã™ã€‚"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"本当ã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ \"%s\" ã‚’åœæ­¢ã—ã¾ã™ã‹?\n"
@@ -3807,6 +3816,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "ブリッジ"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "作æˆ:"
@@ -3895,6 +3907,9 @@ msgstr "オン"
msgid "open"
msgstr "オープン"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "オーãƒãƒ¼ãƒ¬ã‚¤"
diff --git a/modules/luci-base/po/ko/base.po b/modules/luci-base/po/ko/base.po
index 50dc84e4d1..2206a87ceb 100644
--- a/modules/luci-base/po/ko/base.po
+++ b/modules/luci-base/po/ko/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 분 부하:"
@@ -389,6 +392,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -403,6 +409,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "ì—°ê²°ëœ station 들"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1276,7 +1285,7 @@ msgstr "여유 공간"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1406,8 +1415,8 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr "IPv4 방화벽"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN ìƒíƒœ"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 주소"
@@ -1457,8 +1466,8 @@ msgstr "IPv6 설정"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN ìƒíƒœ"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr ""
@@ -2560,12 +2569,12 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-서버를 설정합니다"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2573,14 +2582,14 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"ì •ë§ë¡œ 네트워í¬ë¥¼ shutdown 하시겠습니까?\\nì´ ì¸í„°íŽ˜ì´ìŠ¤ë¥¼ 통해 연결하였다면 "
"ì ‘ì†ì´ ëŠì–´ì§ˆ 수 있습니다."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3667,6 +3676,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3755,6 +3767,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3806,6 +3821,12 @@ msgstr ""
msgid "« Back"
msgstr ""
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN ìƒíƒœ"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN ìƒíƒœ"
+
#~ msgid "Apply"
#~ msgstr "ì ìš©"
diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po
index 3f73db88f4..79c66e1306 100644
--- a/modules/luci-base/po/ms/base.po
+++ b/modules/luci-base/po/ms/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
@@ -384,6 +387,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -398,6 +404,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Associated Stesen"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1248,7 +1257,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1377,7 +1386,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1428,7 +1437,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2536,12 +2545,12 @@ msgid ""
msgstr "Baca /etc/ethers untuk mengkonfigurasikan DHCP-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2549,12 +2558,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3628,6 +3637,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3714,6 +3726,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po
index d938c540fc..5fd40001ec 100644
--- a/modules/luci-base/po/no/base.po
+++ b/modules/luci-base/po/no/base.po
@@ -44,6 +44,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 minutts belastning:"
@@ -393,6 +396,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -407,6 +413,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Tilkoblede Klienter"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1285,7 +1294,7 @@ msgstr "Ledig plass"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1416,8 +1425,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 Brannmur"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN Status"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4 adresse"
@@ -1467,8 +1476,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN Status"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6 adresse"
@@ -2587,15 +2596,15 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Fjerne dette grensesnittet? Slettingen kan ikke omgjøres!\n"
"Du kan miste kontakten med ruteren om du er tilkoblet via dette "
"grensesnittet."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Fjerne dette trådløse nettverket? Slettingen kan ikke omgjøres!\n"
@@ -2606,7 +2615,7 @@ msgstr "Vil du nullstille alle endringer?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Slå av dette nettverket ?\n"
@@ -2614,7 +2623,7 @@ msgstr ""
"grensesnittet."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Slå av dette grensesnittet \"%s\" ?\n"
@@ -3748,6 +3757,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "brokoblet"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "opprett:"
@@ -3836,6 +3848,9 @@ msgstr "på"
msgid "open"
msgstr "Ã¥pen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3887,6 +3902,12 @@ msgstr "ja"
msgid "« Back"
msgstr "« Tilbake"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN Status"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN Status"
+
#~ msgid "Apply"
#~ msgstr "Bruk"
diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po
index bf43720174..9d685c58c0 100644
--- a/modules/luci-base/po/pl/base.po
+++ b/modules/luci-base/po/pl/base.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: LuCI\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-20 09:40+0200\n"
-"PO-Revision-Date: 2018-05-14 20:05+0200\n"
+"PO-Revision-Date: 2018-06-10 10:05+0200\n"
"Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n"
"Language-Team: Polish\n"
"Language: pl\n"
@@ -50,6 +50,9 @@ msgstr "-- dopasuj po etykiecie --"
msgid "-- match by uuid --"
msgstr "-- dopasuj po uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Obciążenie 1 min.:"
@@ -372,13 +375,13 @@ msgid "Annex M G.992.5"
msgstr ""
msgid "Announce as default router even if no public prefix is available."
-msgstr ""
+msgstr "Rozgłaszaj jako domyślny router nawet jeśli publiczny prefiks nie jest dostępny."
msgid "Announced DNS domains"
-msgstr ""
+msgstr "Rozgłaszaj domeny DNS"
msgid "Announced DNS servers"
-msgstr ""
+msgstr "Rozgłaszaj serwery DNS"
msgid "Anonymous Identity"
msgstr ""
@@ -407,9 +410,13 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr "Architektura"
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
+"Przypisz część danej długości każdego publicznego prefiksu IPv6 do tego interfejsu"
msgid "Assign interfaces..."
msgstr "Przypisz interfejsy..."
@@ -417,10 +424,14 @@ msgstr "Przypisz interfejsy..."
msgid ""
"Assign prefix parts using this hexadecimal subprefix ID for this interface."
msgstr ""
+"Przypisz cześć prefiksu za pomocą szesnastkowego ID subprefiksu dla tego interfejsu"
msgid "Associated Stations"
msgstr "Połączone stacje"
+msgid "Associations"
+msgstr "Połączeni"
+
msgid "Auth Group"
msgstr ""
@@ -525,7 +536,7 @@ msgid "Bind interface"
msgstr ""
msgid "Bind only to specific interfaces rather than wildcard address."
-msgstr ""
+msgstr "Powiąż tylko ze specyficznymi interfejsami, a nie z adresami wieloznacznymi."
msgid "Bind the tunnel to this interface (optional)."
msgstr ""
@@ -687,10 +698,10 @@ msgid "Configuration files will be kept."
msgstr "Pliki konfiguracyjne zostanÄ… zachowane."
msgid "Configuration has been applied."
-msgstr ""
+msgstr "Konfiguracja została zastosowana."
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "Konfiguracja została wycofana!"
msgid "Confirmation"
msgstr "Potwierdzenie"
@@ -759,6 +770,8 @@ msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
+"Własne pliki (certyfikaty, skrypty) mogą pozostać w systemie. Aby zapobiec "
+"temu, wykonaj najpierw reset do ustawień fabrycznych"
msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
@@ -789,10 +802,10 @@ msgid "DHCPv6 client"
msgstr "Klient DHCPv6"
msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "Tryb DHCPv6"
msgid "DHCPv6-Service"
-msgstr ""
+msgstr "Serwis DHCPv6"
msgid "DNS"
msgstr "DNS"
@@ -807,7 +820,7 @@ msgid "DNSSEC"
msgstr ""
msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "Sprawdzanie DNSSEC bez podpisu"
msgid "DPD Idle Timeout"
msgstr ""
@@ -840,7 +853,7 @@ msgid "Default gateway"
msgstr "Brama domyślna"
msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "Domyślnie jest to stateless + stateful"
msgid "Default state"
msgstr "Stan domyślny"
@@ -1174,13 +1187,13 @@ msgid "External R1 Key Holder List"
msgstr ""
msgid "External system log server"
-msgstr "Zewnętrzny serwer dla logów systemowych"
+msgstr "Serwer zewnętrzny dla logów systemowych"
msgid "External system log server port"
-msgstr "Port zewnętrznego serwera dla logów systemowych"
+msgstr "Port zewnętrznego serwera logów systemowych"
msgid "External system log server protocol"
-msgstr "Protokół zewnętrznego serwera dla logów systemowych"
+msgstr "Protokół zewnętrznego serwera logów systemowych"
msgid "Extra SSH command options"
msgstr ""
@@ -1319,7 +1332,7 @@ msgstr "Wolna przestrzeń"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1364,7 +1377,7 @@ msgid "Global Settings"
msgstr ""
msgid "Global network options"
-msgstr ""
+msgstr "Globalne opcje sieciowe"
msgid "Go to password configuration..."
msgstr "Przejdź do konfiguracji hasła..."
@@ -1455,8 +1468,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Status IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr "Protokół IPv4"
msgid "IPv4 address"
msgstr "Adres IPv4"
@@ -1501,22 +1514,22 @@ msgid "IPv6 Neighbours"
msgstr ""
msgid "IPv6 Settings"
-msgstr ""
+msgstr "Ustawienia IPv6"
msgid "IPv6 ULA-Prefix"
-msgstr ""
+msgstr "IPv6 Prefiks-ULA"
-msgid "IPv6 WAN Status"
-msgstr "Status WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr "Protokół IPv6"
msgid "IPv6 address"
msgstr "Adres IPv6"
msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "Wskazówka przypisania IPv6"
msgid "IPv6 assignment length"
-msgstr ""
+msgstr "Długość przydziału IPv6"
msgid "IPv6 gateway"
msgstr "Brama IPv6"
@@ -1534,7 +1547,7 @@ msgid "IPv6 routed prefix"
msgstr ""
msgid "IPv6 suffix"
-msgstr ""
+msgstr "Sufiks IPv6"
msgid "IPv6-Address"
msgstr "Adres IPv6"
@@ -1793,7 +1806,7 @@ msgid "Limit"
msgstr "Limit"
msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
-msgstr ""
+msgstr "Ogranicz usługi DNS do podsieci interfejsów, na których obsługujemy DNS."
msgid "Limit listening to these interfaces, and loopback."
msgstr "Ogranicz nasłuchiwanie do tych interfesjów, oraz loopbacku."
@@ -1877,7 +1890,7 @@ msgid "Local IPv6 address"
msgstr "Lokalny adres IPv6"
msgid "Local Service Only"
-msgstr ""
+msgstr "Tylko serwis lokalny"
msgid "Local Startup"
msgstr "Lokalny autostart"
@@ -1898,7 +1911,7 @@ msgstr ""
msgid "Local domain suffix appended to DHCP names and hosts file entries"
msgstr ""
-"Przyrostek (suffiks) domeny przyłączany do nazw DHCP i wpisów w pliku hosts"
+"Przyrostek (sufiks) domeny przyłączany do nazw DHCP i wpisów w pliku hosts"
msgid "Local server"
msgstr "Serwer lokalny"
@@ -2098,7 +2111,7 @@ msgid "NCM"
msgstr "NCM"
msgid "NDP-Proxy"
-msgstr ""
+msgstr "Proxy NDP"
msgid "NT Domain"
msgstr ""
@@ -2185,7 +2198,7 @@ msgid "Non Pre-emtive CRC errors (CRC_P)"
msgstr ""
msgid "Non-wildcard"
-msgstr ""
+msgstr "Bez symboli wieloznacznych"
msgid "None"
msgstr "Brak"
@@ -2215,7 +2228,8 @@ msgid "Nslookup"
msgstr "Nslookup"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
-msgstr ""
+msgstr "Liczba buforowanych wpisów DNS (max wynosi 10000, 0 oznacza "
+"brak pamięci podręcznej)"
msgid "OK"
msgstr "OK"
@@ -2293,6 +2307,10 @@ msgid ""
"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
"for the interface."
msgstr ""
+"Opcjonalne. Dopuszczalne wartości: 'eui64', 'random', stałe wartości takie jak "
+"'::1' lub '::1:2'. Kiedy prefiks IPv6 (taki jak 'a:b:c:d::') jest odbierany z serwera "
+"delegującego, użyj sufiksa (takiego jak '::1') aby utworzyć adres IPv6 ('a:b:c:d::1') "
+"dla tego interfejsu."
msgid ""
"Optional. Base64-encoded preshared key. Adds in an additional layer of "
@@ -2585,7 +2603,7 @@ msgid "Public prefix routed to this device for distribution to clients."
msgstr ""
msgid "QMI Cellular"
-msgstr ""
+msgstr "Komórkowy QMI"
msgid "Quality"
msgstr "Jakość"
@@ -2637,15 +2655,15 @@ msgstr ""
"\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Naprawdę usunąć ten interfejs? Usunięcie nie może zostać cofnięte!\n"
"Możesz stracić dostęp do tego urządzenia, jeśli jesteś połączony przez ten "
"interfejs!"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Naprawdę usunąć tę sieć bezprzewodową? Usunięcie nie może zostać cofnięte!\n"
@@ -2657,7 +2675,7 @@ msgstr "Naprawdę usunąć wszelkie zmiany?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Naprawdę wyłączyć tę sieć?\n"
@@ -2665,7 +2683,7 @@ msgstr ""
"interfejs!"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Naprawdę wyłączyć interfejs \"%s\"?\n"
@@ -2785,7 +2803,8 @@ msgstr ""
msgid ""
"Requires upstream supports DNSSEC; verify unsigned domain responses really "
"come from unsigned domains"
-msgstr ""
+msgstr "Wymagane jest wsparcie dla DNSSEC; sprawdzanie, czy niepodpisane "
+"odpowiedzi w domenie rzeczywiście pochodzą z domen bez znaku"
msgid "Reset"
msgstr "Resetuj"
@@ -2839,10 +2858,10 @@ msgid "Route Allowed IPs"
msgstr ""
msgid "Route type"
-msgstr ""
+msgstr "Typ trasy"
msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Serwis rozgłoszeniowy routera"
msgid "Router Password"
msgstr "Hasło routera"
@@ -2977,7 +2996,7 @@ msgid "Size (.ipk)"
msgstr ""
msgid "Size of DNS query cache"
-msgstr ""
+msgstr "Rozmiar pamięci podręcznej zapytań DNS"
msgid "Skip"
msgstr "Pomiń"
@@ -2995,7 +3014,7 @@ msgid "Software"
msgstr "Oprogramowanie"
msgid "Software VLAN"
-msgstr "VLAN programowy"
+msgstr "Programowy VLAN"
msgid "Some fields are invalid, cannot save values!"
msgstr "Wartości pewnych pól są niewłaściwe, nie mogę ich zachować!"
@@ -3106,10 +3125,10 @@ msgid "Submit"
msgstr "Wyślij"
msgid "Suppress logging"
-msgstr ""
+msgstr "Pomiń rejestrowanie"
msgid "Suppress logging of the routine operation of these protocols"
-msgstr ""
+msgstr "Pomiń rejestrowanie rutynowych operacji dla tych protokołów"
msgid "Swap"
msgstr ""
@@ -3348,7 +3367,7 @@ msgid "There are no active leases."
msgstr "Brak aktywnych dzierżaw."
msgid "There are no changes to apply."
-msgstr ""
+msgstr "Nie ma żadnych zmian do zastosowania."
msgid "There are no pending changes to revert!"
msgstr "Brak oczekujących zmian do przywrócenia!"
@@ -3378,6 +3397,9 @@ msgid ""
"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
"Name System\">DNS</abbr> servers."
msgstr ""
+"Ten plik może zawierać linie takie jak 'server=/domain/1.2.3.4' lub "
+"'server=1.2.3.4' dla specyficznych dla domeny lub pełnych serwerów "
+"<abbr title=\"Domain Name System\">DNS</abbr>"
msgid ""
"This is a list of shell glob patterns for matching files and directories to "
@@ -3458,7 +3480,7 @@ msgid ""
"To restore configuration files, you can upload a previously generated backup "
"archive here."
msgstr ""
-"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesłać wcześniej "
+"Aby przywrócić pliki konfiguracyjne, możesz przesłać tutaj wcześniej "
"utworzonÄ… kopiÄ™ zapasowÄ…."
msgid "Tone"
@@ -3722,7 +3744,7 @@ msgid "Waiting for command to complete..."
msgstr "Trwa wykonanie polecenia..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "Oczekiwanie na zastosowanie konfiguracji… %ds"
msgid "Waiting for device..."
msgstr "Oczekiwanie na urzÄ…dzenie..."
@@ -3806,9 +3828,9 @@ msgid ""
"upgrade it to at least version 7 or use another browser like Firefox, Opera "
"or Safari."
msgstr ""
-"Twój Internet Explorer jest za stary, aby poprawnie wyświetlić tę "
-"stronę zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglądarki, "
-"takiej jak Firefox, Opera czy Safari."
+"Twój Internet Explorer jest za stary, aby poprawnie wyświetlić tę stronę "
+"zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglądarki, takiej "
+"jak Firefox, Opera czy Safari."
msgid "any"
msgstr "dowolny"
@@ -3822,6 +3844,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "zmostkowany"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "utwórz:"
@@ -3911,6 +3936,9 @@ msgstr "włączone"
msgid "open"
msgstr "otwarte"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3962,3 +3990,8 @@ msgstr "tak"
msgid "« Back"
msgstr "« Wróć"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Status IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Status WAN IPv6"
diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po
index 49b1494326..fde8be16a7 100644
--- a/modules/luci-base/po/pt-br/base.po
+++ b/modules/luci-base/po/pt-br/base.po
@@ -51,6 +51,9 @@ msgstr ""
"-- casar por <abbr title=\"Universal Unique IDentifier/Identificador Único "
"Universal\">UUID</abbr> --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga 1 Minuto:"
@@ -425,6 +428,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -443,6 +449,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Estações associadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Grupo de Autenticação"
@@ -1350,10 +1359,10 @@ msgstr "Espaço livre"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Mais informações sobre interfaces e parceiros WireGuard em <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "GHz"
@@ -1493,8 +1502,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Firewall para IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado IPv4 da WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Endereço IPv4"
@@ -1546,8 +1555,8 @@ msgstr ""
"Prefixo <abbr title=\"Unique Local Address/Endereço Local Único\">ULA</abbr> "
"IPv6"
-msgid "IPv6 WAN Status"
-msgstr "Estado IPv6 da WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Endereço IPv6"
@@ -2723,15 +2732,15 @@ msgstr ""
"\"Protocolo de Configuração Dinâmica de Hosts\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Realmente excluir esta interface? A exclusão não pode ser desfeita!\n"
" Você poderá perder o acesso a este dispositivo se você estiver conectado "
"através desta interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Realmente excluir esta interface Wireless? A exclusão não pode ser "
@@ -2743,7 +2752,7 @@ msgid "Really reset all changes?"
msgstr "Realmente limpar todas as mudanças?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Realmente desligar esta rede\"%s\" ?\n"
@@ -2751,7 +2760,7 @@ msgstr ""
"através desta interface."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Realmente desligar esta interface\"%s\" ?\n"
@@ -3927,6 +3936,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "em ponte"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "criar"
@@ -4017,6 +4029,9 @@ msgstr "ligado"
msgid "open"
msgstr "aberto"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "sobreposição"
@@ -4067,3 +4082,9 @@ msgstr "sim"
msgid "« Back"
msgstr "« Voltar"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado IPv4 da WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado IPv6 da WAN"
diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po
index a05bfc1cfc..28c13c8194 100644
--- a/modules/luci-base/po/pt/base.po
+++ b/modules/luci-base/po/pt/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Carga de 1 Minuto:"
@@ -406,6 +409,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -420,6 +426,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Estações Associadas"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1302,7 +1311,7 @@ msgstr "Espaço livre"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1437,8 +1446,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Estado WAN IPv4"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Endereço IPv4"
@@ -1488,8 +1497,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Estado WAN IPv6"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Endereço IPv6"
@@ -2607,15 +2616,15 @@ msgstr ""
"\"Protocolo de Configuração Dinâmica de Hosts\">DHCP</abbr>"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"Deseja mesmo apagar esta interface? A eliminação não poder desfeita!\n"
"Pode perde a ligação ao dispositivo, caso esta ligado através desta "
"interface."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"Deseja mesmo apagar esta rede? A eliminação não poder desfeita!\n"
@@ -2626,14 +2635,14 @@ msgstr "Deseja mesmo limpar todas as alterações?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"Deseja mesmo desligar esta rede?\n"
"Pode perder o acesso ao dispositivo se estiver ligado através desta rede."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"Deseja mesmo desligar a interface \"%s\" ?\n"
@@ -3743,6 +3752,9 @@ msgstr "baseT"
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "criar:"
@@ -3832,6 +3844,9 @@ msgstr "ligado"
msgid "open"
msgstr "abrir"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3883,6 +3898,12 @@ msgstr "sim"
msgid "« Back"
msgstr "« Voltar"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Estado WAN IPv4"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Estado WAN IPv6"
+
#~ msgid "Apply"
#~ msgstr "Aplicar"
diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po
index 1b7c612b22..1e596adc7e 100644
--- a/modules/luci-base/po/ro/base.po
+++ b/modules/luci-base/po/ro/base.po
@@ -48,6 +48,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Incarcarea in ultimul minut"
@@ -392,6 +395,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -406,6 +412,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Statiile asociate"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1255,7 +1264,7 @@ msgstr "Spatiu liber"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1384,8 +1393,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Firewall IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Statusul IPv4 pe WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "Adresa IPv4"
@@ -1435,8 +1444,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "Statusul IPv6 pe WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "Adresa IPv6"
@@ -2531,12 +2540,12 @@ msgstr ""
"<abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>-"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2544,12 +2553,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3604,6 +3613,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3690,6 +3702,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3741,6 +3756,12 @@ msgstr "da"
msgid "« Back"
msgstr "« Inapoi"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "Statusul IPv4 pe WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "Statusul IPv6 pe WAN"
+
#~ msgid "Apply"
#~ msgstr "Aplica"
diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po
index 2514084b76..7848822586 100644
--- a/modules/luci-base/po/ru/base.po
+++ b/modules/luci-base/po/ru/base.po
@@ -51,6 +51,9 @@ msgstr "-- проверка по метке --"
msgid "-- match by uuid --"
msgstr "-- проверка по uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Загрузка за 1 минуту:"
@@ -410,6 +413,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -428,6 +434,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Подключенные клиенты"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Группа аутентификации"
@@ -1335,10 +1344,10 @@ msgstr "Свободное меÑто"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
"Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ интерфейÑах и партнерах WireGuard приведена в <a "
-"href=\"http://wireguard.io\">wireguard.io</a>."
+"href=\"http://wireguard.com\">wireguard.com</a>."
msgid "GHz"
msgstr "ГГц"
@@ -1468,8 +1477,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "МежÑетевой Ñкран IPv4"
-msgid "IPv4 WAN Status"
-msgstr "СоÑтоÑние IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4-адреÑ"
@@ -1519,8 +1528,8 @@ msgstr "IPv6 ÐаÑтройки"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA-Prefix"
-msgid "IPv6 WAN Status"
-msgstr "СоÑтоÑние IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6-адреÑ"
@@ -2682,15 +2691,15 @@ msgstr ""
"динамичеÑкой наÑтройки узла\">DHCP</abbr>-Ñервера."
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"ДейÑтвительно удалить Ñтот интерфейÑ? Удаление не может быть отменено!\\nÐ’Ñ‹ "
"можете потерÑÑ‚ÑŒ доÑтуп к Ñтому уÑтройÑтву, еÑли вы подключены через Ñтот "
"интерфейÑ."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"ДейÑтвительно удалить Ñту беÑпроводную Ñеть? Удаление не может быть отменено!"
@@ -2701,18 +2710,18 @@ msgid "Really reset all changes?"
msgstr "ДейÑтвительно ÑброÑить вÑе изменениÑ?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"ДейÑтвительно отключить Ñеть? Ð’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к Ñтому уÑтройÑтву, "
"еÑли вы подключены через Ñтот интерфейÑ."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"ДейÑтвительно отключить Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\" ?\\nÐ’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к "
-"Ñтому уÑтройÑтву, еÑли вы подключены через Ñтот интерфейÑ."
+"ДейÑтвительно отключить Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\"? Ð’Ñ‹ можете потерÑÑ‚ÑŒ доÑтуп к Ñтому "
+"уÑтройÑтву, еÑли вы подключены через Ñтот интерфейÑ."
msgid "Really switch protocol?"
msgstr "Ð’Ñ‹ дейÑтвительно хотите изменить протокол?"
@@ -3876,6 +3885,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "Ñоед. моÑтом"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "Ñоздать:"
@@ -3964,6 +3976,9 @@ msgstr "включено"
msgid "open"
msgstr "открыть"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "overlay"
@@ -4014,3 +4029,9 @@ msgstr "да"
msgid "« Back"
msgstr "« Ðазад"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "СоÑтоÑние IPv4 WAN"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "СоÑтоÑние IPv6 WAN"
diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po
index e7e302b1b0..04468455b8 100644
--- a/modules/luci-base/po/sk/base.po
+++ b/modules/luci-base/po/sk/base.po
@@ -44,6 +44,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
@@ -378,6 +381,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -392,6 +398,9 @@ msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1235,7 +1244,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1362,7 +1371,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1413,7 +1422,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2504,12 +2513,12 @@ msgid ""
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2517,12 +2526,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3572,6 +3581,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3658,6 +3670,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po
index dc68fdc368..982d8fa694 100644
--- a/modules/luci-base/po/sv/base.po
+++ b/modules/luci-base/po/sv/base.po
@@ -47,6 +47,9 @@ msgstr "-- matcha enligt märke --"
msgid "-- match by uuid --"
msgstr "-- matcha enligt uuid --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "Belastning senaste minuten:"
@@ -389,6 +392,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -403,6 +409,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "Associerade stationer"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr "Autentiseringsgrupp"
@@ -1255,7 +1264,7 @@ msgstr "Fritt utrymme"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1382,7 +1391,7 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4-brandvägg"
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1433,7 +1442,7 @@ msgstr "IPv6-inställningar"
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2527,12 +2536,12 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-servern"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2540,12 +2549,12 @@ msgid "Really reset all changes?"
msgstr "Verkligen återställa alla ändringar?"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3605,6 +3614,9 @@ msgstr ""
msgid "bridged"
msgstr "bryggad"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "skapa:"
@@ -3691,6 +3703,9 @@ msgstr "på"
msgid "open"
msgstr "öppen"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3741,4 +3756,3 @@ msgstr "ja"
msgid "« Back"
msgstr "« Bakåt"
-
diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot
index b944566c09..7a2cdec81b 100644
--- a/modules/luci-base/po/templates/base.pot
+++ b/modules/luci-base/po/templates/base.pot
@@ -37,6 +37,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
@@ -371,6 +374,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -385,6 +391,9 @@ msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1355,7 +1364,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1406,7 +1415,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2497,12 +2506,12 @@ msgid ""
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2510,12 +2519,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3565,6 +3574,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3651,6 +3663,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po
index cfa7cd3c48..cadfc59539 100644
--- a/modules/luci-base/po/tr/base.po
+++ b/modules/luci-base/po/tr/base.po
@@ -47,6 +47,9 @@ msgstr "-- etikete göre eşleştir --"
msgid "-- match by uuid --"
msgstr "-- uuid'e göre eşleştir --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 Dakikalık Yük:"
@@ -391,6 +394,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -405,6 +411,9 @@ msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1248,7 +1257,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1375,7 +1384,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1426,7 +1435,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2517,12 +2526,12 @@ msgid ""
msgstr ""
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2530,12 +2539,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3587,6 +3596,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "köprülü"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "oluÅŸturma:"
@@ -3673,6 +3685,9 @@ msgstr "açık"
msgid "open"
msgstr "açık"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "bindirilmiÅŸ"
diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po
index d053200496..a9455e45e6 100644
--- a/modules/luci-base/po/uk/base.po
+++ b/modules/luci-base/po/uk/base.po
@@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-12-05 19:07+0200\n"
-"Last-Translator: Dmitri <4glitch@gmail.com>\n"
+"PO-Revision-Date: 2018-06-10 16:50+0200\n"
+"Last-Translator: Yurii <yuripet@gmail.com>\n"
"Language-Team: none\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
@@ -10,19 +10,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.6\n"
+
+msgid ""
+msgstr ""Content-Type: text/plain; charset=UTF-8"
msgid "%.1f dB"
-msgstr ""
+msgstr "%.1f дБ"
msgid "%s is untagged in multiple VLANs!"
-msgstr ""
+msgstr "%s є непозначеним у декількох VLAN!"
msgid "(%d minute window, %d second interval)"
-msgstr "(%d-хвилинне вікно, %d-Ñекундний інтервал)"
+msgstr "(вікно - %d хвилин, інтервал - %d Ñекунд)"
msgid "(%s available)"
-msgstr "(%s доÑтупно)"
+msgstr "(доÑтупно %s)"
msgid "(empty)"
msgstr "(пуÑто)"
@@ -34,19 +36,22 @@ msgid "-- Additional Field --"
msgstr "-- Додаткові Ð¿Ð¾Ð»Ñ --"
msgid "-- Please choose --"
-msgstr "-- Виберіть --"
+msgstr "-- Оберіть --"
msgid "-- custom --"
msgstr "-- нетипово --"
msgid "-- match by device --"
-msgstr ""
+msgstr "-- відповідно приÑтрою --"
msgid "-- match by label --"
-msgstr ""
+msgstr "-- відповідно мітці --"
msgid "-- match by uuid --"
-msgstr ""
+msgstr "-- відповідно UUID --"
+
+msgid "-- please select --"
+msgstr "-- виберіть --"
msgid "1 Minute Load:"
msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 1 хвилину:"
@@ -55,34 +60,35 @@ msgid "15 Minute Load:"
msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 15 хвилин:"
msgid "4-character hexadecimal ID"
-msgstr ""
+msgstr "4-Ñимв. шіÑтнадцÑтковий ID"
msgid "464XLAT (CLAT)"
-msgstr ""
+msgstr "464XLAT (CLAT)"
msgid "5 Minute Load:"
msgstr "ÐÐ°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð° 5 хвилин:"
msgid "6-octet identifier as a hex string - no colons"
msgstr ""
+"6-октетний ідентифікатор у виглÑді шіÑтнадцÑткового Ñ€Ñдка – без двокрапок"
msgid "802.11r Fast Transition"
-msgstr ""
+msgstr "Швидкий перехід 802.11r"
msgid "802.11w Association SA Query maximum timeout"
-msgstr ""
+msgstr "МакÑимальний тайм-аут запиту аÑоціації 802.11w"
msgid "802.11w Association SA Query retry timeout"
-msgstr ""
+msgstr "Тайм-аут Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ аÑоціації 802.11w"
msgid "802.11w Management Frame Protection"
-msgstr ""
+msgstr "ЗахиÑÑ‚ кадрів ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ 802.11w"
msgid "802.11w maximum timeout"
-msgstr ""
+msgstr "МакÑимальний тайм-аут 802.11w"
msgid "802.11w retry timeout"
-msgstr ""
+msgstr "Тайм-аут Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ 802.11w"
msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
msgstr ""
@@ -104,7 +110,7 @@ msgid ""
"order of the resolvfile"
msgstr ""
"<abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</abbr>-"
-"Ñервери будуть опитані у порÑдку, визначеному файлом resolvfile"
+"Ñервери буде опитано в порÑдку, визначеному файлом <em>resolvfile</em>"
msgid "<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
msgstr ""
@@ -131,11 +137,11 @@ msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway"
msgstr "<abbr title=\"Інтернет-протокол верÑÑ–Ñ— 6\">IPv6</abbr>-шлюз"
msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
-msgstr ""
+msgstr "<abbr title=\"Інтернет-протокол верÑÑ–Ñ— 6\">IPv6</abbr>-ÑÑƒÑ„Ñ–ÐºÑ (hex)"
msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
msgstr ""
-"ÐаÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>"
+"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>"
msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Name"
msgstr "Ðазва <abbr title=\"Light Emitting Diode — Ñвітлодіод\">LED</abbr>"
@@ -146,33 +152,35 @@ msgstr ""
"abbr>-адреÑа"
msgid "<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"
-msgstr ""
+msgstr "<abbr title=\"Унікальний ідентифікатор DHCP\">DUID</abbr>"
msgid ""
"<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration "
"Protocol\">DHCP</abbr> leases"
msgstr ""
-"<abbr title=\"МакÑимум\">Max.</abbr> оренд <abbr title=\"Dynamic Host "
+"<abbr title=\"МакÑимум\">МакÑ.</abbr> оренд <abbr title=\"Dynamic Host "
"Configuration Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>"
msgid ""
"<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Extension Mechanisms for "
"Domain Name System\">EDNS0</abbr> packet size"
msgstr ""
-"<abbr title=\"МакÑимум\">Max.</abbr> розмір пакета <abbr title=\"Extension "
+"<abbr title=\"МакÑимальний\">МакÑ.</abbr> розмір пакета <abbr title=\"Extension "
"Mechanisms for Domain Name System — Механізми розширень Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð½Ð¾Ñ— ÑиÑтеми "
"імен\">EDNS0</abbr>"
msgid "<abbr title=\"maximal\">Max.</abbr> concurrent queries"
-msgstr "<abbr title=\"МакÑимум\">Max.</abbr> одночаÑних запитів"
+msgstr "<abbr title=\"МакÑимум\">МакÑ.</abbr> одночаÑних запитів"
msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
-msgstr "<abbr title='Парний: %s / Груповий: %s'>%s - %s</abbr>"
+msgstr "<abbr title='Парний: %s / Груповий: %s'>%s – %s</abbr>"
msgid ""
"<br/>Note: you need to manually restart the cron service if the crontab file "
"was empty before editing."
msgstr ""
+"<br/>Примітка: Ñкщо перед редагуваннÑм, файл crontab був порожній, вам потрібно "
+"вручну перезапуÑтити Ñлужби cron."
msgid "A43C + J43 + A43"
msgstr ""
@@ -191,10 +199,11 @@ msgstr ""
"<abbr title=\"Access Point Name — Ñимволічна назва точки доÑтупу\">APN</abbr>"
msgid "ARP retry threshold"
-msgstr "Поріг повтору ARP"
+msgstr "Поріг Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÐ²Ð°Ð½Ð½Ñ ARP"
msgid "ATM (Asynchronous Transfer Mode)"
msgstr ""
+"<abbr title=\"Asynchronous Transfer Mode — аÑинхронний режим передаваннÑ"\">ATM</abbr>"
msgid "ATM Bridges"
msgstr "ATM-моÑти"
@@ -214,7 +223,7 @@ msgid ""
"Linux network interfaces which can be used in conjunction with DHCP or PPP "
"to dial into the provider network."
msgstr ""
-"ATM-моÑти виÑтавлÑÑŽÑ‚ÑŒ інкапÑульований Ethernet у з'єднаннÑÑ… AAL5 Ñк "
+"ATM-моÑти виÑтавлÑÑŽÑ‚ÑŒ інкапÑульований Ethernet у з’єднаннÑÑ… AAL5 Ñк "
"віртуальні мережеві інтерфейÑи Linux, котрі можуть викориÑтовуватиÑÑ Ð² "
"поєднанні з DHCP або PPP Ð´Ð»Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі провайдера."
@@ -267,7 +276,7 @@ msgid "Additional Hosts files"
msgstr "Додаткові файли hosts"
msgid "Additional servers file"
-msgstr ""
+msgstr "Додаткові файли servers"
msgid "Address"
msgstr "ÐдреÑа"
@@ -282,7 +291,7 @@ msgid "Advanced Settings"
msgstr "Додаткові параметри"
msgid "Aggregate Transmit Power(ACTATP)"
-msgstr ""
+msgstr "Сумарна потужніÑÑ‚ÑŒ передаваннÑ"
msgid "Alert"
msgstr "Тривога"
@@ -291,9 +300,10 @@ msgid ""
"Allocate IP addresses sequentially, starting from the lowest available "
"address"
msgstr ""
+"ВиділÑти IP-адреÑи поÑлідовно, починаючи з найнижчої доÑтупної адреÑи"
msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "ВиділÑти IP поÑлідовно"
msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
msgstr ""
@@ -304,7 +314,7 @@ msgid "Allow all except listed"
msgstr "Дозволити вÑÑ–, крім зазначених"
msgid "Allow legacy 802.11b rates"
-msgstr ""
+msgstr "Дозволити заÑтарілі швидкоÑÑ‚Ñ– 802.11b"
msgid "Allow listed only"
msgstr "Дозволити тільки зазначені"
@@ -314,7 +324,8 @@ msgstr "Дозволити локальний вузол"
msgid "Allow remote hosts to connect to local SSH forwarded ports"
msgstr ""
-"Дозволити віддаленим вузлам Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ локальних SSH-ÑпрÑмованих портів"
+"Дозволити віддаленим вузлам Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ локальних переÑпрÑмованих портів "
+"SSH"
msgid "Allow root logins with password"
msgstr "Дозволити root-вхід із паролем"
@@ -325,14 +336,14 @@ msgstr "Дозволити кориÑтувачеві <em>root</em> вхід у
msgid ""
"Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
msgstr ""
-"Дозволити відповіді від клієнта на Ñервер у діапазоні 127.0.0.0/8, "
+"Дозволити виÑхідні відповіді від клієнта на Ñервер у діапазоні 127.0.0.0/8, "
"наприклад, Ð´Ð»Ñ RBL-поÑлуг"
msgid "Allowed IPs"
-msgstr ""
+msgstr "Дозволено IP-адреÑи"
msgid "Always announce default router"
-msgstr ""
+msgstr "Завжди оголошувати типовим маршрутизатором"
msgid "Annex"
msgstr ""
@@ -380,22 +391,23 @@ msgid "Annex M G.992.5"
msgstr ""
msgid "Announce as default router even if no public prefix is available."
-msgstr ""
+msgstr "Оголошувати типовим маршрутизатором, навіть Ñкщо немає доÑтупного "
+"Ñпільного префікÑа."
msgid "Announced DNS domains"
-msgstr ""
+msgstr "Оголошено DNS-домени"
msgid "Announced DNS servers"
-msgstr ""
+msgstr "Оголошено DNS-Ñервери"
msgid "Anonymous Identity"
-msgstr ""
+msgstr "Ðнонімне поÑвідченнÑ"
msgid "Anonymous Mount"
-msgstr ""
+msgstr "Ðнонімне монтуваннÑ"
msgid "Anonymous Swap"
-msgstr ""
+msgstr "Ðнонімний Ñвоп"
msgid "Antenna 1"
msgstr "Ðнтена 1"
@@ -410,14 +422,19 @@ msgid "Any zone"
msgstr "Будь-Ñка зона"
msgid "Apply request failed with status <code>%h</code>"
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° запиту на заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– ÑтатуÑом <code>%h</code>"
msgid "Apply unchecked"
-msgstr ""
+msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ позначено"
+
+msgid "Architecture"
+msgstr "Ðрхітектура"
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
+"Призначати чаÑтину заданої довжини до кожного публічного IPv6-префікÑа "
+"цього інтерфейÑу"
msgid "Assign interfaces..."
msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñів..."
@@ -425,18 +442,23 @@ msgstr "ÐŸÑ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñів..."
msgid ""
"Assign prefix parts using this hexadecimal subprefix ID for this interface."
msgstr ""
+"Призначати Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу чаÑтину префікÑа, викориÑтовуючи цей "
+"шіÑтнадцÑтковий ID ÑубпрефікÑа."
msgid "Associated Stations"
-msgstr "Приєднані Ñтанції"
+msgstr "Приєднано Ñтанції"
+
+msgid "Associations"
+msgstr "З’єднань"
msgid "Auth Group"
-msgstr ""
+msgstr "Група автентифікації"
msgid "Authentication"
msgstr "ÐвтентифікаціÑ"
msgid "Authentication Type"
-msgstr ""
+msgstr "Тип автентифікації"
msgid "Authoritative"
msgstr "Ðадійний"
@@ -448,25 +470,28 @@ msgid "Auto Refresh"
msgstr "Ðвтоматичне оновленнÑ"
msgid "Automatic"
-msgstr ""
+msgstr "Ðвтоматично"
msgid "Automatic Homenet (HNCP)"
-msgstr ""
+msgstr "Ðвтоматично Homenet (HNCP)"
msgid "Automatically check filesystem for errors before mounting"
msgstr ""
+"Ðвтоматично перевірÑти файлову ÑиÑтему на наÑвніÑÑ‚ÑŒ помилок перед "
+"монтуваннÑм"
msgid "Automatically mount filesystems on hotplug"
msgstr ""
+"Ðвтоматично монтувати файлові ÑиÑтеми при оперативниму підключенні"
msgid "Automatically mount swap on hotplug"
-msgstr ""
+msgstr "Ðвтоматично монтувати Ñвоп при оперативниму підключенні"
msgid "Automount Filesystem"
-msgstr ""
+msgstr "ÐÐ²Ñ‚Ð¾Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¤Ð¡"
msgid "Automount Swap"
-msgstr ""
+msgstr "ÐÐ²Ñ‚Ð¾Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñвоп"
msgid "Available"
msgstr "ДоÑтупно"
@@ -505,7 +530,7 @@ msgid "Back to scan results"
msgstr "ПовернутиÑÑ Ð´Ð¾ результатів ÑкануваннÑ"
msgid "Backup / Flash Firmware"
-msgstr "Резервне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ / ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸"
+msgstr "Резервне ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ / Прошивка мікропрограми"
msgid "Backup / Restore"
msgstr "Резервне копіюваннÑ/відновленнÑ"
@@ -514,10 +539,10 @@ msgid "Backup file list"
msgstr "СпиÑок файлів резервних копій"
msgid "Bad address specified!"
-msgstr "Вказана неправильна адреÑа!"
+msgstr "Вказано неправильну адреÑу!"
msgid "Band"
-msgstr ""
+msgstr "Група"
msgid ""
"Below is the determined list of files to backup. It consists of changed "
@@ -529,16 +554,16 @@ msgstr ""
"базових файлів, та файлів за кориÑтувацькими шаблонами резервного копіюваннÑ."
msgid "Bind interface"
-msgstr ""
+msgstr "Прив’Ñзка інтерфейÑу"
msgid "Bind only to specific interfaces rather than wildcard address."
-msgstr ""
+msgstr "Прив’Ñзка тільки до певних інтерфейÑів, а не шаблонної адреÑи."
msgid "Bind the tunnel to this interface (optional)."
-msgstr ""
+msgstr "Прив’Ñзка тунелю до цього інтерфейÑу (за бажаннÑ)."
msgid "Bitrate"
-msgstr "ШвидкіÑÑ‚ÑŒ передачі даних"
+msgstr "ШвидкіÑÑ‚ÑŒ Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…"
msgid "Bogus NX Domain Override"
msgstr "Відкидати підробки NX-домену"
@@ -547,7 +572,7 @@ msgid "Bridge"
msgstr "МіÑÑ‚"
msgid "Bridge interfaces"
-msgstr "Об'єднати інтерфейÑи в міÑÑ‚"
+msgstr "Об’єднати інтерфейÑи в міÑÑ‚"
msgid "Bridge unit number"
msgstr "Ðомер моÑта"
@@ -568,9 +593,12 @@ msgid ""
"Build/distribution specific feed definitions. This file will NOT be "
"preserved in any sysupgrade."
msgstr ""
+"Специфічні Ð´Ð»Ñ Ð·Ð±Ñ–Ñ€ÐºÐ¸/Ð¿Ð¾ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ–Ð². Цей файл ÐЕ БУДЕ "
+"збережено при будь-Ñкому оновленні ÑиÑтеми."
msgid "CA certificate; if empty it will be saved after the first connection."
msgstr ""
+"Сертифікат CA; Ñкщо порожньо, його буде збережено піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ підключеннÑ."
msgid "CPU usage (%)"
msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¦ÐŸ, %"
@@ -579,7 +607,7 @@ msgid "Cancel"
msgstr "СкаÑувати"
msgid "Category"
-msgstr ""
+msgstr "КатегоріÑ"
msgid "Chain"
msgstr "Ланцюжок"
@@ -591,7 +619,7 @@ msgid "Changes applied."
msgstr "Зміни заÑтоÑовано."
msgid "Changes have been reverted."
-msgstr ""
+msgstr "Зміни було ÑкаÑовано."
msgid "Changes the administrator password for accessing the device"
msgstr "Зміна Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора Ð´Ð»Ñ Ð´Ð¾Ñтупу до приÑтрою"
@@ -603,15 +631,17 @@ msgid ""
"Channel %d is not available in the %s regulatory domain and has been auto-"
"adjusted to %d."
msgstr ""
+"Канал %d не доÑтупний у %s регулÑторному домені й був автоматично "
+"Ñкоригований на %d."
msgid "Check"
msgstr "Перевірити"
msgid "Check filesystems before mount"
-msgstr ""
+msgstr "Перевірити файлову ÑиÑтему перед монтуваннÑм"
msgid "Check this option to delete the existing networks from this radio."
-msgstr ""
+msgstr "Позначте цей параметр, щоб видалити Ñ–Ñнуючі мережі з цього радіо."
msgid "Checksum"
msgstr "Контрольна Ñума"
@@ -638,7 +668,7 @@ msgid "Cipher"
msgstr "Шифр"
msgid "Cisco UDP encapsulation"
-msgstr ""
+msgstr "ІнкапÑулÑÑ†Ñ–Ñ UDP Cisco"
msgid ""
"Click \"Generate archive\" to download a tar archive of the current "
@@ -646,8 +676,8 @@ msgid ""
"\"Perform reset\" (only possible with squashfs images)."
msgstr ""
"ÐатиÑніть кнопку \"Створити архів\", щоб завантажити tar-архів поточних "
-"файлів конфігурації. Ð”Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸ до Ñ—Ñ— початкового Ñтану, "
-"натиÑніть кнопку \"Відновити\" (можливе тільки з образами SquashFS)."
+"файлів конфігурації. Ð”Ð»Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ до Ñ—Ñ— початкового "
+"Ñтану натиÑніть кнопку \"Відновити\" (можливо тільки з образами SquashFS)."
msgid "Client"
msgstr "Клієнт"
@@ -659,8 +689,8 @@ msgid ""
"Close inactive connection after the given amount of seconds, use 0 to "
"persist connection"
msgstr ""
-"Закривати неактивні з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтервалу чаÑу (Ñекунди). Ð”Ð»Ñ "
-"ÑƒÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… з'єднань викориÑтовуйте 0"
+"Закривати неактивні Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð¿ÐµÐ²Ð½Ð¾Ð³Ð¾ інтервалу чаÑу (Ñекунди). Ð”Ð»Ñ "
+"ÑƒÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð½ÐµÐ°ÐºÑ‚Ð¸Ð²Ð½Ð¸Ñ… з’єднань викориÑтовуйте 0"
msgid "Close list..."
msgstr "Згорнути ÑпиÑок..."
@@ -680,18 +710,22 @@ msgid ""
"workaround might cause interoperability issues and reduced robustness of key "
"negotiation especially in environments with heavy traffic load."
msgstr ""
+"УÑкладнює атаки перевÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° на Ñтороні клієнта, відключаючи "
+"ретранÑлÑцію кадрів EAPOL-Key, що викориÑтовуютьÑÑ Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ñ–Ð². "
+"Може викликати проблеми ÑуміÑноÑÑ‚Ñ– та Ð·Ð½Ð¸Ð¶ÐµÐ½Ð½Ñ ÑтійкоÑÑ‚Ñ– ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð°, "
+"оÑобливо в Ñередовищах з великою завантаженіÑÑ‚ÑŽ трафіку."
msgid "Configuration"
msgstr "КонфігураціÑ"
msgid "Configuration files will be kept."
-msgstr "Конфігураційні файли будуть збережені."
+msgstr "Конфігураційні файли буде збережено."
msgid "Configuration has been applied."
-msgstr ""
+msgstr "Конфігурацію заÑтоÑовано."
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "Конфігурацію було відкочено!"
msgid "Confirmation"
msgstr "ПідтвердженнÑ"
@@ -700,7 +734,7 @@ msgid "Connect"
msgstr "Підключити"
msgid "Connected"
-msgstr "Підключений"
+msgstr "Підключено"
msgid "Connection Limit"
msgstr "Гранична кількіÑÑ‚ÑŒ підключень"
@@ -713,6 +747,9 @@ msgid ""
"changes. You might need to reconnect if you modified network related "
"settings such as the IP address or wireless security credentials."
msgstr ""
+"ПіÑÐ»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½ конфігурації не вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ доÑтуп до приÑтрою. "
+"Вам, можливо, знадобитиÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ðµ підключеннÑ, Ñкщо ви змінили Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ "
+"мережі, такі Ñк IP-адреÑа або облікові дані безпеки бездротової мережі."
msgid "Country"
msgstr "Країна"
@@ -745,26 +782,29 @@ msgid "Custom Interface"
msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
msgid "Custom delegated IPv6-prefix"
-msgstr ""
+msgstr "КориÑтувацький делегований Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6"
msgid ""
"Custom feed definitions, e.g. private feeds. This file can be preserved in a "
"sysupgrade."
-msgstr ""
+msgstr "КориÑтувацькі Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ°Ð½Ð°Ð»Ñ–Ð², наприклад, приватних. Цей файл може "
+"бути збережено при оновленні ÑиÑтеми."
msgid "Custom feeds"
-msgstr ""
+msgstr "КориÑтувацькі канали"
msgid ""
"Custom files (certificates, scripts) may remain on the system. To prevent "
"this, perform a factory-reset first."
msgstr ""
+"КориÑтувацькі файли (Ñертифікати, Ñкрипти) можуть залишитиÑÑ Ð² ÑиÑтемі. Щоб "
+"запобігти цьому, Ñпочатку виконайте ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð´Ð¾ заводÑьких налаштувань."
msgid ""
"Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
"\">LED</abbr>s if possible."
msgstr ""
-"ÐаÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ¸ <abbr title=\"Light Emitting Diode — Ñвітлодіод"
+"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÐµÐ´Ñ–Ð½ÐºÐ¸ <abbr title=\"Light Emitting Diode — Ñвітлодіод"
"\">LED</abbr>, Ñкщо це можливо."
msgid "DHCP Leases"
@@ -786,49 +826,49 @@ msgid "DHCPv6 Leases"
msgstr "Оренди DHCPv6"
msgid "DHCPv6 client"
-msgstr ""
+msgstr "Клієнт DHCPv6"
msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "Режим DHCPv6"
msgid "DHCPv6-Service"
-msgstr ""
+msgstr "Служба DHCPv6"
msgid "DNS"
msgstr "DNS"
msgid "DNS forwardings"
-msgstr "СпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ DNS-запитів"
+msgstr "ПереÑпрÑмовуваннÑ<br />запитів DNS"
msgid "DNS-Label / FQDN"
-msgstr ""
+msgstr "DNS-мітка / FQDN"
msgid "DNSSEC"
msgstr ""
msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "перевірка непідпиÑаного DNSSEC"
msgid "DPD Idle Timeout"
-msgstr ""
+msgstr "Тайм-аут проÑтою DPD"
msgid "DS-Lite AFTR address"
-msgstr ""
+msgstr "AFTR-адреÑа DS-Lite"
msgid "DSL"
-msgstr ""
+msgstr "DSL"
msgid "DSL Status"
-msgstr ""
+msgstr "Стан DSL"
msgid "DSL line mode"
-msgstr ""
+msgstr "Режим лінії DSL"
msgid "DUID"
msgstr "DUID"
msgid "Data Rate"
-msgstr ""
+msgstr "Швидк. передаваннÑ"
msgid "Debug"
msgstr "ЗневаджуваннÑ"
@@ -840,7 +880,7 @@ msgid "Default gateway"
msgstr "Типовий шлюз"
msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "Типовим Ñ” БЕЗ та ЗІ збереженнÑм Ñтану"
msgid "Default state"
msgstr "Типовий Ñтан"
@@ -879,19 +919,19 @@ msgid "Device Configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою"
msgid "Device is rebooting..."
-msgstr ""
+msgstr "ПриÑтрій перезавантажуєтьÑÑ..."
msgid "Device unreachable"
-msgstr ""
+msgstr "ПриÑтрій недоÑÑжний"
msgid "Device unreachable!"
-msgstr ""
+msgstr "ПриÑтрій недоÑÑжний!"
msgid "Diagnostics"
msgstr "ДіагноÑтика"
msgid "Dial number"
-msgstr ""
+msgstr "Ðабір номера"
msgid "Directory"
msgstr "Каталог"
@@ -907,25 +947,25 @@ msgstr ""
"динамічної конфігурації вузла\">DHCP</abbr> Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу."
msgid "Disable DNS setup"
-msgstr "Вимкнути наÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ DNS"
+msgstr "Вимкнути Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ DNS"
msgid "Disable Encryption"
-msgstr ""
+msgstr "Вимкнути шифруваннÑ"
msgid "Disabled"
msgstr "Вимкнено"
msgid "Disabled (default)"
-msgstr ""
+msgstr "Вимкнено (типово)"
msgid "Discard upstream RFC1918 responses"
-msgstr "Відкидати RFC1918-відповіді від клієнта на Ñервер"
+msgstr "Відкидати виÑхідні RFC1918-відповіді"
msgid "Dismiss"
-msgstr ""
+msgstr "Відхилити"
msgid "Displaying only packages containing"
-msgstr "Показані тільки непорожні пакети"
+msgstr "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ непорожніх пакетів"
msgid "Distance Optimization"
msgstr "ÐžÐ¿Ñ‚Ð¸Ð¼Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð·Ð° відÑтанню"
@@ -934,7 +974,7 @@ msgid "Distance to farthest network member in meters."
msgstr "ВідÑтань до найвіддаленішого вузла мережі в метрах."
msgid "Distribution feeds"
-msgstr ""
+msgstr "Канали поширеннÑ"
msgid "Diversity"
msgstr "РізновидніÑÑ‚ÑŒ"
@@ -948,7 +988,7 @@ msgstr ""
"Dnsmasq ÑвлÑÑ” Ñобою комбінований <abbr title=\"Dynamic Host Configuration "
"Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-Ñервер Ñ– "
"<abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</abbr>-"
-"транÑпортер Ð´Ð»Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ñ–Ð² <abbr title=\"Network Address Translation — "
+"прокÑÑ– Ð´Ð»Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ñ–Ð² <abbr title=\"Network Address Translation — "
"Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ (транÑлÑціÑ) мережевих адреÑ\">NAT</abbr>"
msgid "Do not cache negative replies, e.g. for not existing domains"
@@ -956,11 +996,12 @@ msgstr "Ðе кешувати негативні відповіді, наприÐ
msgid "Do not forward requests that cannot be answered by public name servers"
msgstr ""
-"Ðе ÑпрÑмовувати запити, Ñкі не можуть бути оброблені публічними Ñерверами "
+"Ðе переÑпрÑмовувати запити, Ñкі не може бути оброблено публічними Ñерверами "
"імен"
msgid "Do not forward reverse lookups for local networks"
-msgstr "Ðе ÑпрÑмовувати зворотний переглÑд Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… мереж"
+msgstr "Ðе переÑпрÑмовувати зворотні <abbr title=\"Domain Name System — "
+"ÑиÑтема доменних імен\">DNS</abbr>-запити Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… мереж"
msgid "Domain required"
msgstr "Потрібен домен"
@@ -969,13 +1010,13 @@ msgid "Domain whitelist"
msgstr "\"Білий ÑпиÑок\" доменів"
msgid "Don't Fragment"
-msgstr ""
+msgstr "Ðе фрагментувати"
msgid ""
"Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
"<abbr title=\"Domain Name System\">DNS</abbr>-Name"
msgstr ""
-"Ðе переÑилати <abbr title=\"Domain Name System — ÑиÑтема доменних імен"
+"Ðе переÑпрÑмовувати <abbr title=\"Domain Name System — ÑиÑтема доменних імен"
"\">DNS</abbr>-запити без <abbr title=\"Domain Name System — ÑиÑтема доменних "
"імен\">DNS</abbr>-імені"
@@ -986,7 +1027,7 @@ msgid "Download backup"
msgstr "Завантажити резервну копію"
msgid "Downstream SNR offset"
-msgstr ""
+msgstr "Ðизхідний зÑув SNR"
msgid "Dropbear Instance"
msgstr "Ð ÐµÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Dropbear"
@@ -1017,7 +1058,7 @@ msgstr ""
"обÑлуговуватиÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ клієнти, Ñкі мають Ñтатичні оренди."
msgid "EA-bits length"
-msgstr ""
+msgstr "Довжина EA-бітів"
msgid "EAP-Method"
msgstr "EAP-Метод"
@@ -1029,6 +1070,8 @@ msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to "
"reload the page."
msgstr ""
+"Щоб виправити ÑкуÑÑŒ помилку, відредагуйте вихідні дані конфігурації вище Ñ– "
+"натиÑніть \"Зберегти\", щоб перезавантажити Ñторінку."
msgid "Edit this interface"
msgstr "Редагувати цей інтерфейÑ"
@@ -1046,6 +1089,8 @@ msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
msgstr ""
+"Увімкнути відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ <abbr title=\"Internet Group Management Protocol\">"
+"IGMP</abbr>"
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@@ -1054,19 +1099,19 @@ msgid "Enable HE.net dynamic endpoint update"
msgstr "Увімкнути динамічне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÑ–Ð½Ñ†ÐµÐ²Ð¾Ñ— точки HE.net"
msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6"
msgid "Enable IPv6 negotiation on the PPP link"
-msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6 Ð´Ð»Ñ PPP-з'єднань"
+msgstr "Увімкнути ÑƒÐ·Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ IPv6 Ð´Ð»Ñ PPP-з’єднань"
msgid "Enable Jumbo Frame passthrough"
msgstr "ПропуÑкати Jumbo-фрейми"
msgid "Enable NTP client"
-msgstr "Увімкнути NTP-клієнт"
+msgstr "Увімкнути клієнта NTP"
msgid "Enable Single DES"
-msgstr ""
+msgstr "Увімкнути Single DES"
msgid "Enable TFTP server"
msgstr "Увімкнути TFTP-Ñервер"
@@ -1075,28 +1120,28 @@ msgid "Enable VLAN functionality"
msgstr "Увімкнути підтримку VLAN"
msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "Увімкнути кнопку WPS, потребує WPA(2)-PSK"
msgid "Enable key reinstallation (KRACK) countermeasures"
-msgstr ""
+msgstr "Увімкнути протидію<br />перевÑтановленню ключів (KRACK)"
msgid "Enable learning and aging"
msgstr "Увімкнути learning та aging"
msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "Увімкнути Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð²Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів"
msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "Увімкнути Ð²Ñ–Ð´Ð´Ð·ÐµÑ€ÐºÐ°Ð»ÐµÐ½Ð½Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… пакетів"
msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "Увімкнути прапорець DF (Don't Fragment) Ð´Ð»Ñ Ñ–Ð½ÐºÐ°Ð¿Ñульованих пакетів"
msgid "Enable this mount"
msgstr "Увімкнути це монтуваннÑ"
msgid "Enable this swap"
-msgstr "Увімкнути це довантаженнÑ"
+msgstr "Увімкнути цей Ñвоп"
msgid "Enable/Disable"
msgstr "Увімкнено/Вимкнено"
@@ -1105,16 +1150,18 @@ msgid "Enabled"
msgstr "Увімкнено"
msgid "Enables IGMP snooping on this bridge"
-msgstr ""
+msgstr "Вмикає відÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ IGMP на цьому моÑту"
msgid ""
"Enables fast roaming among access points that belong to the same Mobility "
"Domain"
msgstr ""
+"Вмикає швидкий роумінг між точками доÑтупу, що належать до одного Ñ– "
+"того ж домену мобільноÑÑ‚Ñ–"
msgid "Enables the Spanning Tree Protocol on this bridge"
msgstr ""
-"Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому моÑту"
+"Вмикає <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому моÑту"
msgid "Encapsulation mode"
msgstr "Режим інкапÑулÑції"
@@ -1123,10 +1170,10 @@ msgid "Encryption"
msgstr "ШифруваннÑ"
msgid "Endpoint Host"
-msgstr ""
+msgstr "ХоÑÑ‚ кінцевої точки"
msgid "Endpoint Port"
-msgstr ""
+msgstr "Порт кінцевої точки"
msgid "Erasing..."
msgstr "ВидаленнÑ..."
@@ -1135,22 +1182,22 @@ msgid "Error"
msgstr "Помилка"
msgid "Errored seconds (ES)"
-msgstr ""
+msgstr "Секунд з помилками (<abbr title=\"Errored seconds\">ES</abbr>)"
msgid "Ethernet Adapter"
-msgstr "Ðдаптер Ethernet"
+msgstr "Ethernet-адаптер"
msgid "Ethernet Switch"
msgstr "Ethernet-комутатор"
msgid "Exclude interfaces"
-msgstr ""
+msgstr "Виключити інтерфейÑи"
msgid "Expand hosts"
msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð²ÑƒÐ·Ð»Ñ–Ð²"
msgid "Expires"
-msgstr "ДійÑний ще"
+msgstr "Збігає за"
#, fuzzy
msgid ""
@@ -1158,13 +1205,13 @@ msgid ""
msgstr "Термін оренди адреÑ, мінімум 2 хвилини (<code>2m</code>)."
msgid "External"
-msgstr ""
+msgstr "Зовнішнє"
msgid "External R0 Key Holder List"
-msgstr ""
+msgstr "Зовнішній ÑпиÑок влаÑників ключів R0"
msgid "External R1 Key Holder List"
-msgstr ""
+msgstr "Зовнішній ÑпиÑок влаÑників ключів R1"
msgid "External system log server"
msgstr "Зовнішній Ñервер ÑиÑтемного журналу"
@@ -1173,28 +1220,28 @@ msgid "External system log server port"
msgstr "Порт зовнішнього Ñервера ÑиÑтемного журналу"
msgid "External system log server protocol"
-msgstr ""
+msgstr "Протокол зовнішнього Ñервера ÑиÑтемного журналу"
msgid "Extra SSH command options"
-msgstr ""
+msgstr "Додаткові параметри команд SSH"
msgid "FT over DS"
-msgstr ""
+msgstr "FT через DS"
msgid "FT over the Air"
-msgstr ""
+msgstr "FT через повітрÑ"
-msgid "FT protocol"
+msgid "Протокол FT"
msgstr ""
msgid "Failed to confirm apply within %ds, waiting for rollback…"
-msgstr ""
+msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚Ð¸ заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° протÑзі %d Ñ, очікуємо відкату…"
msgid "File"
msgstr "Файл"
msgid "Filename of the boot image advertised to clients"
-msgstr "І'Ð¼Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ образу, що оголошуєтьÑÑ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°Ð¼"
+msgstr "Ð†â€™Ð¼Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÑƒÐ²Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ образу, що оголошуєтьÑÑ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°Ð¼"
msgid "Filesystem"
msgstr "Файлова ÑиÑтема"
@@ -1212,6 +1259,8 @@ msgid ""
"Find all currently attached filesystems and swap and replace configuration "
"with defaults based on what was detected"
msgstr ""
+"Знайти вÑÑ– файлові ÑиÑтеми та Ñвопи, Ñкі наразі підключено Ñ– замінити "
+"конфігурацію типовою на підÑтаві того, що було виÑвлено"
msgid "Find and join network"
msgstr "Знайти мережу й приєднатиÑÑ"
@@ -1226,37 +1275,37 @@ msgid "Firewall"
msgstr "Брандмауер"
msgid "Firewall Mark"
-msgstr ""
+msgstr "Позначка брандмауера"
msgid "Firewall Settings"
-msgstr "ÐаÑтройки брандмауера"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ð°"
msgid "Firewall Status"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð±Ñ€Ð°Ð½Ð´Ð¼Ð°ÑƒÐµÑ€Ð°"
+msgstr "Стан брандмауера"
msgid "Firmware File"
-msgstr ""
+msgstr "Файл мікропрограми"
msgid "Firmware Version"
-msgstr "ВерÑÑ–Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸"
+msgstr "ВерÑÑ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸"
msgid "Fixed source port for outbound DNS queries"
msgstr "ФікÑований порт Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… DNS-запитів"
msgid "Flash Firmware"
-msgstr "Заливаємо прошивку"
+msgstr "Прошиваємо мікропрограму"
msgid "Flash image..."
-msgstr "Відвантажити образ..."
+msgstr "Прошити образ..."
msgid "Flash new firmware image"
-msgstr "Залити новий образ прошивки"
+msgstr "Прошити новий образ мікропрограми"
msgid "Flash operations"
-msgstr "Операції заливаннÑ"
+msgstr "Операції прошиваннÑ"
msgid "Flashing..."
-msgstr "Заливаємо..."
+msgstr "Прошиваємо..."
msgid "Force"
msgstr "ПримуÑово"
@@ -1274,28 +1323,28 @@ msgid "Force TKIP and CCMP (AES)"
msgstr "ПримуÑово TKIP та CCMP (AES)"
msgid "Force link"
-msgstr ""
+msgstr "ПримуÑове з’єднаннÑ"
msgid "Force use of NAT-T"
-msgstr ""
+msgstr "ПримуÑово викориÑтовувати NAT-T"
msgid "Form token mismatch"
-msgstr ""
+msgstr "ÐеузгодженіÑÑ‚ÑŒ маркера форми"
msgid "Forward DHCP traffic"
-msgstr "СпрÑмовувати DHCP-трафік"
+msgstr "ПереÑпрÑмовувати DHCP-трафік"
msgid "Forward Error Correction Seconds (FECS)"
-msgstr ""
+msgstr "Секунди прÑмого ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»Ð¾Ðº (FECS)"
msgid "Forward broadcast traffic"
-msgstr "СпрÑмовувати широкомовний трафік"
+msgstr "ПереÑпрÑмовувати широкомовний трафік"
msgid "Forward mesh peer traffic"
-msgstr ""
+msgstr "ПереÑпрÑмовувати одноранговий трафік"
msgid "Forwarding mode"
-msgstr "Режим ÑпрÑмовуваннÑ"
+msgstr "Режим переÑпрÑмовуваннÑ"
msgid "Fragmentation Threshold"
msgstr "Поріг фрагментації"
@@ -1311,7 +1360,7 @@ msgstr "Вільне міÑце"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1327,19 +1376,19 @@ msgid "Gateway ports"
msgstr "Порти шлюзу"
msgid "General Settings"
-msgstr "Загальні наÑтройки"
+msgstr "Загальні параметри"
msgid "General Setup"
-msgstr "Загальні наÑтройки"
+msgstr "Загальні налаштуваннÑ"
msgid "General options for opkg"
-msgstr ""
+msgstr "Загальні параметри OPKG"
msgid "Generate Config"
-msgstr ""
+msgstr "Cтворити конфігурацію"
msgid "Generate PMK locally"
-msgstr ""
+msgstr "Генерувати PMK локально"
msgid "Generate archive"
msgstr "Cтворити архів"
@@ -1351,10 +1400,10 @@ msgid "Given password confirmation did not match, password not changed!"
msgstr "ОÑкільки пароль Ñ– Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñпівпадають, то пароль не змінено!"
msgid "Global Settings"
-msgstr ""
+msgstr "Загальні параметри"
msgid "Global network options"
-msgstr ""
+msgstr "Глобальні параметри мережі"
msgid "Go to password configuration..."
msgstr "Перейти до конфігурації паролÑ..."
@@ -1363,19 +1412,19 @@ msgid "Go to relevant configuration page"
msgstr "Перейти до відповідної Ñторінки конфігурації"
msgid "Group Password"
-msgstr ""
+msgstr "Пароль групи"
msgid "Guest"
-msgstr ""
+msgstr "ГіÑÑ‚ÑŒ"
msgid "HE.net password"
msgstr "Пароль HE.net"
msgid "HE.net username"
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача HE.net"
msgid "HT mode (802.11n)"
-msgstr ""
+msgstr "Режим HT (802.11n)"
msgid "Hang Up"
msgstr "Призупинити"
@@ -1387,7 +1436,7 @@ msgid ""
"Here you can configure the basic aspects of your device like its hostname or "
"the timezone."
msgstr ""
-"Тут ви можете наÑтроїти оÑновні параметри виглÑду вашого приÑтрою, такі Ñк "
+"Тут ви можете налаштувати оÑновні параметри виглÑду вашого приÑтрою, такі Ñк "
"назва (ім’Ñ) вузла або чаÑовий поÑÑ."
msgid ""
@@ -1406,7 +1455,7 @@ msgstr ""
"розширеної Ñлужби поÑлуг\">ESSID</abbr>"
msgid "Host"
-msgstr ""
+msgstr "Вузол"
msgid "Host entries"
msgstr "ЗапиÑи вузлів"
@@ -1418,10 +1467,10 @@ msgid "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network"
msgstr "<abbr title=\"Internet Protocol Address\">IP</abbr> вузла або мережа"
msgid "Hostname"
-msgstr "Ðазва (ім'Ñ) вузла"
+msgstr "Ðазва (ім’Ñ) вузла"
msgid "Hostname to send when requesting DHCP"
-msgstr "Ім'Ñ Ð²ÑƒÐ·Ð»Ð° Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸ запиті DHCP"
+msgstr "Ð†Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð° Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¸ запиті DHCP"
msgid "Hostnames"
msgstr "Імена вузлів"
@@ -1433,7 +1482,7 @@ msgid "IKE DH Group"
msgstr ""
msgid "IP Addresses"
-msgstr ""
+msgstr "ÐдреÑи IP"
msgid "IP address"
msgstr "IP-адреÑа"
@@ -1444,8 +1493,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "Брандмауер IPv4"
-msgid "IPv4 WAN Status"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv4 WAN"
+msgid "IPv4 Upstream"
+msgstr "ВиÑхідне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ IPv4"
msgid "IPv4 address"
msgstr "ÐдреÑа IPv4"
@@ -1454,7 +1503,7 @@ msgid "IPv4 and IPv6"
msgstr "IPv4 та IPv6"
msgid "IPv4 assignment length"
-msgstr ""
+msgstr "Довжина приÑÐ²Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ IPv4"
msgid "IPv4 broadcast"
msgstr "Широкомовний IPv4"
@@ -1487,25 +1536,27 @@ msgid "IPv6 Firewall"
msgstr "Брандмауер IPv6"
msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "СуÑіди IPv6"
msgid "IPv6 Settings"
-msgstr ""
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ IPv6"
msgid "IPv6 ULA-Prefix"
msgstr ""
+"<abbr title=\"Unique Local Address — унікальна локальна адреÑа\">ULA"
+"</abbr>-Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6"
-msgid "IPv6 WAN Status"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv6 WAN"
+msgid "IPv6 Upstream"
+msgstr "ВиÑхідне Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ IPv6"
msgid "IPv6 address"
msgstr "ÐдреÑа IPv6"
msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "ÐатÑк Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ IPv6"
msgid "IPv6 assignment length"
-msgstr ""
+msgstr "Довжина Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ IPv6"
msgid "IPv6 gateway"
msgstr "Шлюз IPv6"
@@ -1520,10 +1571,10 @@ msgid "IPv6 prefix length"
msgstr "Довжина префікÑа IPv6"
msgid "IPv6 routed prefix"
-msgstr ""
+msgstr "ÐадіÑланий Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6"
msgid "IPv6 suffix"
-msgstr ""
+msgstr "Ð¡ÑƒÑ„Ñ–ÐºÑ IPv6"
msgid "IPv6-Address"
msgstr "IPv6-адреÑа"
@@ -1541,13 +1592,13 @@ msgid "IPv6-over-IPv4 (6to4)"
msgstr "IPv6 через IPv4 (6to4)"
msgid "Identity"
-msgstr "ІдентичніÑÑ‚ÑŒ"
+msgstr "ПоÑвідченнÑ"
msgid "If checked, 1DES is enabled"
-msgstr ""
+msgstr "Якщо позначено, 1DES увімкнено"
msgid "If checked, encryption is disabled"
-msgstr ""
+msgstr "Якщо позначено, ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾"
msgid ""
"If specified, mount the device by its UUID instead of a fixed device node"
@@ -1559,11 +1610,11 @@ msgid ""
"If specified, mount the device by the partition label instead of a fixed "
"device node"
msgstr ""
-"Якщо обрано, монтувати приÑтрій за назвою його розділу заміÑÑ‚ÑŒ фікÑованого "
+"Якщо обрано, монтувати приÑтрій за міткою його розділу заміÑÑ‚ÑŒ фікÑованого "
"вузла приÑтрою"
msgid "If unchecked, no default route is configured"
-msgstr "Якщо не позначено, типовий маршрут не наÑтроєно"
+msgstr "Якщо не позначено, типовий маршрут не налаштовано"
msgid "If unchecked, the advertised DNS server addresses are ignored"
msgstr "Якщо не позначено, оголошувані адреÑи DNS-Ñерверів ігноруютьÑÑ"
@@ -1575,15 +1626,15 @@ msgid ""
"slow process as the swap-device cannot be accessed with the high datarates "
"of the <abbr title=\"Random Access Memory\">RAM</abbr>."
msgstr ""
-"Якщо фізичної пам'ÑÑ‚Ñ– недоÑтатньо, невикориÑтовувані дані можуть тимчаÑово "
+"Якщо фізичної пам’ÑÑ‚Ñ– недоÑтатньо, невикориÑтовувані дані можуть тимчаÑово "
"витіÑнÑтиÑÑ Ð½Ð° Ñвоп-приÑтрій, у результаті чого збільшуєтьÑÑ ÐºÑ–Ð»ÑŒÐºÑ–ÑÑ‚ÑŒ "
-"кориÑної оперативної пам'ÑÑ‚Ñ– (<abbr title=\"Random Access Memory\">RAM</"
+"кориÑної оперативної пам’ÑÑ‚Ñ– (<abbr title=\"Random Access Memory\">RAM</"
"abbr>). Майте на увазі, що Ñвопінг даних Ñ” дуже повільним процеÑом, оÑкільки "
"Ñвоп-приÑтрої не можуть бути доÑтупні з такою виÑокою швидкіÑÑ‚ÑŽ, Ñк <abbr "
"title=\"Random Access Memory\">RAM</abbr>."
msgid "Ignore <code>/etc/hosts</code>"
-msgstr ""
+msgstr "Ігнорувати<code>/etc/hosts</code>"
msgid "Ignore interface"
msgstr "Ігнорувати интерфейÑ"
@@ -1601,6 +1652,9 @@ msgid ""
"In order to prevent unauthorized access to the system, your request has been "
"blocked. Click \"Continue »\" below to return to the previous page."
msgstr ""
+"Щоб запобігти неÑанкціонованому доÑтупу до ÑиÑтеми, ваш запит було "
+"заблоковано. ÐатиÑніть \"Продовжити »\" нижче, щоб повернутиÑÑ Ð´Ð¾ "
+"попередньої Ñторінки."
msgid "Inactivity timeout"
msgstr "Тайм-аут бездіÑльноÑÑ‚Ñ–"
@@ -1630,13 +1684,13 @@ msgid "Install protocol extensions..."
msgstr "ІнÑталÑÑ†Ñ–Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½ÑŒ протоколу..."
msgid "Installed packages"
-msgstr "ІнÑтальовані пакети"
+msgstr "ІнÑтальовано пакети"
msgid "Interface"
msgstr "ІнтерфейÑ"
msgid "Interface %q device auto-migrated from %q to %q."
-msgstr ""
+msgstr "ПриÑтрій інтерфейÑу %q автоматичного мігрував із %q на %q."
msgid "Interface Configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу"
@@ -1651,10 +1705,10 @@ msgid "Interface is shutting down..."
msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ” роботу..."
msgid "Interface name"
-msgstr ""
+msgstr "Ð†Ð¼â€™Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу"
msgid "Interface not present or not connected yet."
-msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ñ–Ð´Ñутній або ще не підключений."
+msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ñ–Ð´Ñутній або його ще не підключено."
msgid "Interface reconnected"
msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿ÐµÑ€ÐµÐ¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾"
@@ -1685,14 +1739,13 @@ msgid "Invalid username and/or password! Please try again."
msgstr "ÐеприпуÑтиме Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача та/або пароль! Спробуйте ще раз."
msgid "Isolate Clients"
-msgstr ""
+msgstr "Ізолювати клієнтів"
-#, fuzzy
msgid ""
"It appears that you are trying to flash an image that does not fit into the "
"flash memory, please verify the image file!"
msgstr ""
-"Схоже, що ви намагаєтеÑÑ Ð·Ð°Ð»Ð¸Ñ‚Ð¸ образ, Ñкий не вміщаєтьÑÑ Ñƒ флеш-пам'ÑÑ‚ÑŒ! "
+"Схоже, що ви намагаєтеÑÑ Ð¿Ñ€Ð¾ÑˆÐ¸Ñ‚Ð¸ образ, Ñкий не вміщаєтьÑÑ Ð´Ð¾ флеш-пам’ÑÑ‚Ñ–! "
"Перевірте файл образу!"
msgid "JavaScript required!"
@@ -1705,10 +1758,10 @@ msgid "Join Network: Wireless Scan"
msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі: Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð´Ñ€Ð¾Ñ‚Ð¾Ð²Ð¸Ñ… мереж"
msgid "Joining Network: %q"
-msgstr ""
+msgstr "ÐŸÑ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ мережі: %q"
msgid "Keep settings"
-msgstr "Зберегти наÑтройки"
+msgstr "Зберегти налаштуваннÑ"
msgid "Kernel Log"
msgstr "Журнал Ñдра"
@@ -1750,13 +1803,13 @@ msgid "Language and Style"
msgstr "Мова та Ñтиль"
msgid "Latency"
-msgstr ""
+msgstr "Затримка"
msgid "Leaf"
-msgstr ""
+msgstr "ЛиÑÑ‚"
msgid "Lease time"
-msgstr ""
+msgstr "Ð§Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸"
msgid "Lease validity time"
msgstr "Ð§Ð°Ñ Ñ‡Ð¸Ð½Ð½Ð¾ÑÑ‚Ñ– оренди"
@@ -1781,9 +1834,11 @@ msgstr "Межа"
msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
msgstr ""
+"Обмежувати Ñлужбу DNS інтерфейÑами підмереж, на Ñких ми обÑлуговуємо DNS."
msgid "Limit listening to these interfaces, and loopback."
msgstr ""
+"ОбмежитиÑÑ Ð¿Ñ€Ð¾ÑлуховуваннÑм цих інтерфейÑів Ñ– повернутиÑÑ Ð´Ð¾ початку циклу."
msgid "Line Attenuation (LATN)"
msgstr ""
@@ -1798,14 +1853,14 @@ msgid "Line Uptime"
msgstr ""
msgid "Link On"
-msgstr "Зв'Ñзок вÑтановлено"
+msgstr "Зв’Ñзок вÑтановлено"
msgid ""
"List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
"requests to"
msgstr ""
-"СпиÑок <abbr title=\"Domain Name System\">DNS</abbr>-Ñерверів, до Ñких "
-"переÑилати запити"
+"СпиÑок <abbr title=\"Domain Name System\">DNS</abbr>-Ñерверів Ð´Ð»Ñ "
+"переÑпрÑÐ¼Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñ–Ð²"
msgid ""
"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
@@ -1814,6 +1869,13 @@ msgid ""
"from the R0KH that the STA used during the Initial Mobility Domain "
"Association."
msgstr ""
+"СпиÑок влаÑників ключів R0 у тому ж домені мобільноÑÑ‚Ñ–. <br />Формат: MAC-"
+"адреÑа,NAS-ідентифікатор,128-бітний ключ у виглÑді шіÑтнадцÑткового Ñ€Ñдка. "
+"<br />Цей ÑпиÑок викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ <abbr title=\"ідентифікатор "
+"влаÑника ключа R0\">R0KH-ID</abbr> (NAS-ідентифікатор) на MAC-адреÑи "
+"Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ запиті ключа PMK-R1 від <abbr title=\"влаÑник ключа R0\">R0KH"
+"</abbr>, Ñк Ñтанції, що була викориÑтана під Ñ‡Ð°Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— аÑоціації домену "
+"мобільноÑÑ‚Ñ–."
msgid ""
"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
@@ -1822,21 +1884,30 @@ msgid ""
"R0KH. This is also the list of authorized R1KHs in the MD that can request "
"PMK-R1 keys."
msgstr ""
+"СпиÑок влаÑників ключів R1 у тому ж домені мобільноÑÑ‚Ñ–. <br />Формат: MAC-"
+"адреÑа,<abbr title=\"ідентифікатор влаÑника ключа R1\">R1KH-ID</abbr> у формі "
+"6 октетів з двокрапками,128-бітний ключ у виглÑді шіÑтнадцÑткового Ñ€Ñдка. <br "
+"/>Цей ÑпиÑок викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ <abbr title=\"ідентифікатор "
+"влаÑника ключа R1\">R1KH-ID</abbr> на MAC-адреÑи Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸ передаванні "
+"ключа PMK-R1 від <abbr title=\"влаÑник ключа R0\">R0KH</abbr>. Це також ÑпиÑок "
+"авторизованих <abbr title=\"влаÑник ключа R1\">R1KH</abbr> у формі <abbr title"
+"=\"Message Digest — дайджеÑÑ‚ повідомленнÑ\">MD</abbr>, Ñкі можуть запитувати "
+"ключі PMK-R1."
msgid "List of SSH key files for auth"
msgstr ""
msgid "List of domains to allow RFC1918 responses for"
-msgstr "СпиÑок доменів, Ð´Ð»Ñ Ñких дозволені RFC1918-відповіді"
+msgstr "СпиÑок доменів, Ð´Ð»Ñ Ñких дозволено RFC1918-відповіді"
msgid "List of hosts that supply bogus NX domain results"
msgstr "СпиÑок доменів, Ñкі підтримують результати підробки NX-доменів"
msgid "Listen Interfaces"
-msgstr ""
+msgstr "ІнтерфейÑи проÑлуховуваннÑ"
msgid "Listen Port"
-msgstr ""
+msgstr "Порти проÑлуховуваннÑ"
msgid "Listen only on the given interface or, if unspecified, on all"
msgstr ""
@@ -1865,7 +1936,7 @@ msgid "Local IPv6 address"
msgstr "Локальна адреÑа IPv6"
msgid "Local Service Only"
-msgstr ""
+msgstr "Тільки локальна Ñлужба"
msgid "Local Startup"
msgstr "Локальний запуÑк"
@@ -1876,13 +1947,13 @@ msgstr "МіÑцевий чаÑ"
msgid "Local domain"
msgstr "Локальний домен"
-#, fuzzy
msgid ""
"Local domain specification. Names matching this domain are never forwarded "
"and are resolved from DHCP or hosts files only"
msgstr ""
-"Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… доменів. Імена, зіÑтавлені цьому домену, ніколи не "
-"ÑпрÑмовуютьÑÑ Ñ– виділÑÑŽÑ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ через DHCP або файли hosts"
+"Ð¡Ð¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ домену. Імена, Ñкі зіÑтавлено цьому домену, ніколи "
+"не переÑилаютьÑÑ Ñ– вирізнÑÑŽÑ‚ÑŒÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ з файлу DHCP (/etc/config/dhcp) або "
+"файлу hosts (/etc/hosts)"
msgid "Local domain suffix appended to DHCP names and hosts file entries"
msgstr ""
@@ -1896,7 +1967,7 @@ msgid ""
"Localise hostname depending on the requesting subnet if multiple IPs are "
"available"
msgstr ""
-"Локалізувати ім'Ñ Ñ…Ð¾Ñта залежно від запитуючої підмережі, Ñкщо доÑтупні "
+"Локалізувати Ñ–Ð¼â€™Ñ Ñ…Ð¾Ñта залежно від запитуючої підмережі, Ñкщо доÑтупно "
"кілька IP-адреÑ"
msgid "Localise queries"
@@ -1988,34 +2059,34 @@ msgid "Mbit/s"
msgstr "Мбіт/Ñ"
msgid "Memory"
-msgstr "Пам'ÑÑ‚ÑŒ"
+msgstr "Пам’ÑÑ‚ÑŒ"
msgid "Memory usage (%)"
-msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑ‚Ñ–, %"
+msgstr "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ–, %"
msgid "Mesh Id"
-msgstr ""
+msgstr "Mesh Id"
msgid "Metric"
msgstr "Метрика"
msgid "Mirror monitor port"
-msgstr ""
+msgstr "Дзеркало порту диÑпетчера"
msgid "Mirror source port"
-msgstr ""
+msgstr "Дзеркало вихідного порту"
msgid "Missing protocol extension for proto %q"
msgstr "ВідÑутні Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ñƒ %q"
msgid "Mobility Domain"
-msgstr ""
+msgstr "Домен мобільноÑÑ‚Ñ–"
msgid "Mode"
msgstr "Режим"
msgid "Model"
-msgstr ""
+msgstr "Модель"
msgid "Modem device"
msgstr "Модем"
@@ -2024,7 +2095,7 @@ msgid "Modem init timeout"
msgstr "Тайм-аут ініціалізації модему"
msgid "Monitor"
-msgstr "Монітор"
+msgstr "ДиÑпетчер"
msgid "Mount Entry"
msgstr "Вхід монтуваннÑ"
@@ -2036,20 +2107,20 @@ msgid "Mount Points"
msgstr "Точки монтуваннÑ"
msgid "Mount Points - Mount Entry"
-msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ - ЗапиÑи монтуваннÑ"
+msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ â€“ ЗапиÑи монтуваннÑ"
msgid "Mount Points - Swap Entry"
-msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ - Вхід довантаженнÑ"
+msgstr "Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ â€“ Вхід Ñвопу"
msgid ""
"Mount Points define at which point a memory device will be attached to the "
"filesystem"
msgstr ""
-"Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ÑŒ, до Ñкої точки приÑтрою пам'ÑÑ‚Ñ– буде прикріплена "
-"файлова ÑиÑтема"
+"Точки Ð¼Ð¾Ð½Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ÑŒ, до Ñкої точки приÑтрою пам’ÑÑ‚Ñ– буде прикріплено "
+"файлову ÑиÑтему"
msgid "Mount filesystems not specifically configured"
-msgstr ""
+msgstr "Монтувати не конкретно налаштовані файлові ÑиÑтеми"
msgid "Mount options"
msgstr "Опції монтуваннÑ"
@@ -2058,10 +2129,10 @@ msgid "Mount point"
msgstr "Точка монтуваннÑ"
msgid "Mount swap not specifically configured"
-msgstr ""
+msgstr "Монтувати не конкретно налаштований Ñвоп"
msgid "Mounted file systems"
-msgstr "Змонтовані файлові ÑиÑтеми"
+msgstr "Змонтовано файлові ÑиÑтеми"
msgid "Move down"
msgstr "Вниз"
@@ -2091,16 +2162,16 @@ msgid "NT Domain"
msgstr ""
msgid "NTP server candidates"
-msgstr "Кандидати Ð´Ð»Ñ Ñинхронізації NTP-Ñервера"
+msgstr "Кандидати Ð´Ð»Ñ Ñинхронізації Ñервера NTP"
msgid "Name"
-msgstr "Ім'Ñ"
+msgstr "Ім’Ñ"
msgid "Name of the new interface"
-msgstr "Ім'Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ інтерфейÑу"
+msgstr "Ð†Ð¼â€™Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ інтерфейÑу"
msgid "Name of the new network"
-msgstr "Ðазва (ім'Ñ) нової мережі"
+msgstr "Ðазва (ім’Ñ) нової мережі"
msgid "Navigation"
msgstr "ÐавігаціÑ"
@@ -2124,7 +2195,7 @@ msgid "Next »"
msgstr "ÐаÑтупний »"
msgid "No DHCP Server configured for this interface"
-msgstr "Ðемає DHCP-Ñервера, наÑтроєного Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу"
+msgstr "Ðемає DHCP-Ñервера, налаштованого Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу"
msgid "No NAT-T"
msgstr ""
@@ -2142,10 +2213,10 @@ msgid "No negative cache"
msgstr "ÐÑ–Ñких негативних кешувань"
msgid "No network configured on this device"
-msgstr "Ðа цьому приÑтрої нема наÑтроєної мережі"
+msgstr "Ðа цьому приÑтрої немає налаштованої мережі"
msgid "No network name specified"
-msgstr "Ім'Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– не визначене"
+msgstr "Ð†Ð¼â€™Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– не визначено"
msgid "No package lists available"
msgstr "Ðемає доÑтупних ÑпиÑків пакетів"
@@ -2157,22 +2228,22 @@ msgid "No rules in this chain"
msgstr "У цьму ланцюжку нема правил"
msgid "No zone assigned"
-msgstr "Зона не призначена"
+msgstr "Зону не призначено"
msgid "Noise"
msgstr "Шум"
msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ñигнал/шум"
msgid "Noise:"
msgstr "Шум:"
msgid "Non Pre-emtive CRC errors (CRC_P)"
-msgstr ""
+msgstr "Ðе запобіжні помилки CRC (CRC_P)"
msgid "Non-wildcard"
-msgstr ""
+msgstr "Без шаблону заміни"
msgid "None"
msgstr "Жоден"
@@ -2184,16 +2255,16 @@ msgid "Not Found"
msgstr "Ðе знайдено"
msgid "Not associated"
-msgstr "Ðе пов'Ñзаний"
+msgstr "Ðе пов’Ñзаний"
msgid "Not connected"
msgstr "Ðе підключено"
msgid "Note: Configuration files will be erased."
-msgstr "Примітка: конфігураційні файли будуть видалені."
+msgstr "Примітка: конфігураційні файли буде видалено."
msgid "Note: interface name length"
-msgstr ""
+msgstr "Примітка: довжина імені інтерфейÑу"
msgid "Notice"
msgstr "ПопередженнÑ"
@@ -2202,7 +2273,7 @@ msgid "Nslookup"
msgstr "DNS-запит"
msgid "Number of cached DNS entries (max is 10000, 0 is no caching)"
-msgstr ""
+msgstr "КількіÑÑ‚ÑŒ кешованих запиÑів DNS (макÑ. - 10000, 0 - без кешуваннÑ)"
msgid "OK"
msgstr "OK"
@@ -2211,13 +2282,13 @@ msgid "OPKG-Configuration"
msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ OPKG"
msgid "Obfuscated Group Password"
-msgstr ""
+msgstr "ОбфуÑований груповий пароль"
msgid "Obfuscated Password"
-msgstr ""
+msgstr "ОбфуÑований пароль"
msgid "Obtain IPv6-Address"
-msgstr ""
+msgstr "Отримати IPv6-адреÑу"
msgid "Off-State Delay"
msgstr "Затримка Off-State"
@@ -2230,18 +2301,18 @@ msgid ""
"<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: "
"<samp>eth0.1</samp>)."
msgstr ""
-"Ðа цій Ñторінці ви можете наÑтроїти мережеві інтерфейÑи. Ви можете "
-"об'єднатиати кілька інтерфейÑів моÑтом, відзначивши поле \"Об'єднати "
-"інтерфейÑи в міÑÑ‚\" та ввівши імена кількох мережевих інтерфейÑів, розділені "
-"пробілами. Також ви можете викориÑтовувати <abbr title=\"Virtual Local Area "
-"Network — віртуальна локальна комп'ютерна мережа\">VLAN</abbr>-Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
-"<samp>ІÐТЕРФЕЙС.ÐОМЕР_VLAN</samp> (наприклад, <samp>eth0.1</samp>)."
+"Ðа цій Ñторінці ви можете налаштувати мережеві інтерфейÑи. Ви можете "
+"об’єднати кілька інтерфейÑів моÑтом, відзначивши поле \"Об’єднати інтерфейÑи "
+"в міÑÑ‚\" та ввівши імена кількох мережевих інтерфейÑів, розділені пробілами. "
+"Також ви можете викориÑтовувати <abbr title=\"Virtual Local Area Network — "
+"віртуальна локальна комп’ютерна мережа\">VLAN</abbr>-Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ <samp>"
+"ІÐТЕРФЕЙС.ÐОМЕР_VLAN</samp> (наприклад, <samp>eth0.1</samp>)."
msgid "On-State Delay"
msgstr "Затримка On-State"
msgid "One of hostname or mac address must be specified!"
-msgstr "Має бути вказане одне з двох - ім'Ñ Ð²ÑƒÐ·Ð»Ð° або ÐœÐС-адреÑа!"
+msgstr "Має бути зазначено одне з двох – Ñ–Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð° або ÐœÐС-адреÑа!"
msgid "One or more fields contain invalid values!"
msgstr "Одне або декілька полів міÑÑ‚ÑÑ‚ÑŒ неприпуÑтимі значеннÑ!"
@@ -2250,7 +2321,7 @@ msgid "One or more invalid/required values on tab"
msgstr ""
msgid "One or more required fields have no value!"
-msgstr "Одне або декілька обов'Ñзкових полів не мають значень!"
+msgstr "Одне або декілька обов’Ñзкових полів не мають значень!"
msgid "Open list..."
msgstr "Відкрити ÑпиÑок..."
@@ -2259,7 +2330,7 @@ msgid "OpenConnect (CISCO AnyConnect)"
msgstr ""
msgid "Operating frequency"
-msgstr ""
+msgstr "Робоча чаÑтота"
msgid "Option changed"
msgstr "ÐžÐ¿Ñ†Ñ–Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð°"
@@ -2268,12 +2339,14 @@ msgid "Option removed"
msgstr "ÐžÐ¿Ñ†Ñ–Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð°"
msgid "Optional"
-msgstr ""
+msgstr "Ðеобов’Ñзково"
msgid ""
"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
"starting with <code>0x</code>."
msgstr ""
+"Ðеобов’Ñзково. 32-бітна мітка Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… зашифрованих пакетів. Введіть "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² шіÑтнадцÑтковому форматі, починаючи з <code>0x</code>."
msgid ""
"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
@@ -2281,25 +2354,34 @@ msgid ""
"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
"for the interface."
msgstr ""
+"Ðеобов’Ñзково. ПрипуÑтимі значеннÑ: 'eui64', 'random' чи фікÑоване значеннÑ, "
+"наприклад '::1' або '::1:2'. Якщо Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ IPv6 (наприклад, 'a:b:c:d::') "
+"отримано від Ñервера делегуваннÑ, Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ IPv6-адреÑи інтерфейÑу "
+"(наприклад, 'a:b:c:d::1') викориÑтовуйте ÑÑƒÑ„Ñ–ÐºÑ ('::1')."
msgid ""
"Optional. Base64-encoded preshared key. Adds in an additional layer of "
"symmetric-key cryptography for post-quantum resistance."
msgstr ""
+"Ðеобов’Ñзково. Заздалегідь уÑтановлений Base64-кодований Ñпільний ключ. "
+"Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾ Ñ€Ñ–Ð²Ð½Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ–Ð· Ñиметричним ключем Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚-квантової "
+"ÑтійкоÑÑ‚Ñ–."
msgid "Optional. Create routes for Allowed IPs for this peer."
-msgstr ""
+msgstr "Ðеобов’Ñзково. Створити Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ вузла маршрути Ð´Ð»Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ… IP"
msgid ""
"Optional. Host of peer. Names are resolved prior to bringing up the "
"interface."
msgstr ""
+"Ðеобов’Ñзково. ХоÑÑ‚ вузла. Імена буде виділено до піднÑÑ‚Ñ‚Ñ Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñу"
msgid "Optional. Maximum Transmission Unit of tunnel interface."
msgstr ""
+"Ðеобов’Ñзково. МакÑимальний блок передаваних даних тунельного інтерфейÑу."
msgid "Optional. Port of peer."
-msgstr ""
+msgstr "Ðеобов’Ñзково. Порт вузла."
msgid ""
"Optional. Seconds between keep alive messages. Default is 0 (disabled). "
@@ -2308,6 +2390,8 @@ msgstr ""
msgid "Optional. UDP port used for outgoing and incoming packets."
msgstr ""
+"Ðеобов’Ñзково. UDP-порт, Ñкий викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ñ… та вхідних "
+"пакетів."
msgid "Options"
msgstr "Опції"
@@ -2322,7 +2406,7 @@ msgid "Outbound:"
msgstr "Вихідний:"
msgid "Output Interface"
-msgstr ""
+msgstr "Вихідний інтерфейÑ"
msgid "Override MAC address"
msgstr "Перевизначити MAC-адреÑу"
@@ -2331,13 +2415,13 @@ msgid "Override MTU"
msgstr "Перевизначити MTU"
msgid "Override TOS"
-msgstr ""
+msgstr "Перевизначити TOS"
msgid "Override TTL"
-msgstr ""
+msgstr "Перевизначити TTL"
msgid "Override default interface name"
-msgstr ""
+msgstr "ÐŸÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð³Ð¾ імені інтерфейÑу"
msgid "Override the gateway in DHCP responses"
msgstr "ÐŸÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ»ÑŽÐ·Ñƒ у відповідÑÑ… DHCP"
@@ -2363,7 +2447,7 @@ msgid "PAP/CHAP password"
msgstr "Пароль PAP/CHAP"
msgid "PAP/CHAP username"
-msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача PAP/CHAP"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача PAP/CHAP"
msgid "PID"
msgstr "<abbr title=\"Process Identifier — Ідентифікатор процеÑу\">PID</abbr>"
@@ -2374,7 +2458,7 @@ msgstr ""
"номер\">>PIN</abbr>"
msgid "PMK R1 Push"
-msgstr ""
+msgstr "ÐŸÑ€Ð¾ÑˆÑ‚Ð¾Ð²Ñ…ÑƒÐ²Ð°Ð½Ñ PMK R1"
msgid "PPP"
msgstr "PPP"
@@ -2428,13 +2512,13 @@ msgid "Password of Private Key"
msgstr "Пароль закритого ключа"
msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Пароль внутрішнього закритого ключа"
msgid "Password successfully changed!"
msgstr "Пароль уÑпішно змінено!"
msgid "Password2"
-msgstr ""
+msgstr "Пароль2"
msgid "Path to CA-Certificate"
msgstr "ШлÑÑ… до центру Ñертифікції"
@@ -2446,25 +2530,25 @@ msgid "Path to Private Key"
msgstr "ШлÑÑ… до закритого ключа"
msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "ШлÑÑ… до внутрішнього CA-Ñертифікату"
msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "ШлÑÑ… до внутрішнього Ñертифікату клієнта"
msgid "Path to inner Private Key"
-msgstr ""
+msgstr "ШлÑÑ… до внутрішнього закритого ключа"
msgid "Peak:"
msgstr "Пік:"
msgid "Peer IP address to assign"
-msgstr ""
+msgstr "Запит IP-адреÑи призначеннÑ"
msgid "Peers"
-msgstr ""
+msgstr "Піри"
msgid "Perfect Forward Secrecy"
-msgstr ""
+msgstr "Perfect Forward Secrecy"
msgid "Perform reboot"
msgstr "Виконати перезавантаженнÑ"
@@ -2473,7 +2557,7 @@ msgid "Perform reset"
msgstr "Відновити"
msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "Завжди тримати ввімкненим"
msgid "Phy Rate:"
msgstr "Фізична швидкіÑÑ‚ÑŒ:"
@@ -2488,7 +2572,7 @@ msgid "Pkts."
msgstr "пакетів"
msgid "Please enter your username and password."
-msgstr "Введіть ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ñ– пароль"
+msgstr "Введіть Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ñ– пароль"
msgid "Policy"
msgstr "Політика"
@@ -2497,25 +2581,25 @@ msgid "Port"
msgstr "Порт"
msgid "Port status:"
-msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ñ€Ñ‚Ñƒ:"
+msgstr "Стан порту:"
msgid "Power Management Mode"
-msgstr ""
+msgstr "Режим ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¶Ð¸Ð²Ð»ÐµÐ½Ð½Ñм"
msgid "Pre-emtive CRC errors (CRCP_P)"
-msgstr ""
+msgstr "Попереджувати помилки CRC (CRCP_P)"
msgid "Prefer LTE"
-msgstr ""
+msgstr "Переважно LTE"
msgid "Prefer UMTS"
-msgstr ""
+msgstr "Переважно UMTS"
msgid "Prefix Delegated"
-msgstr ""
+msgstr "Делеговано префікÑ"
msgid "Preshared Key"
-msgstr ""
+msgstr "Заздалегідь уÑтановлений Ñпільний ключ"
msgid ""
"Presume peer to be dead after given amount of LCP echo failures, use 0 to "
@@ -2525,10 +2609,10 @@ msgstr ""
"пакета LCP, викориÑтовуйте 0, щоб ігнорувати невдачі"
msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Перешкоджати проÑлуховуванню цих інтерфейÑів"
msgid "Prevents client-to-client communication"
-msgstr "Запобігає зв'Ñзкам клієнт-клієнт"
+msgstr "Перешкоджати Ñпілкуванню клієнт-клієнт"
msgid "Prism2/2.5/3 802.11b Wireless Controller"
msgstr "Бездротовий 802.11b контролер Prism2/2.5/3"
@@ -2561,10 +2645,10 @@ msgid "Protocol support is not installed"
msgstr "Підтримка протоколу не інÑтальована"
msgid "Provide NTP server"
-msgstr "Забезпечувати NTP-Ñервер"
+msgstr "Забезпечувати Ñервер NTP"
msgid "Provide new network"
-msgstr "ПоÑтачити нову мережу"
+msgstr "Укажіть нову мережу"
msgid "Pseudo Ad-Hoc (ahdemo)"
msgstr "ПÑевдо Ad-Hoc (ahdemo)"
@@ -2582,10 +2666,10 @@ msgid "Quality"
msgstr "ЯкіÑÑ‚ÑŒ"
msgid "R0 Key Lifetime"
-msgstr ""
+msgstr "ТриваліÑÑ‚ÑŒ Ð¶Ð¸Ñ‚Ñ‚Ñ ÐºÐ»ÑŽÑ‡Ð° R0"
msgid "R1 Key Holder"
-msgstr ""
+msgstr "ВлаÑник ключа R1"
msgid "RFC3947 NAT-T mode"
msgstr ""
@@ -2624,45 +2708,41 @@ msgid ""
"Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host "
"Configuration Protocol\">DHCP</abbr>-Server"
msgstr ""
-"Читати <code>/etc/ethers</code> Ð´Ð»Ñ Ð½Ð°ÑÑ‚Ñ€Ð¾ÑŽÐ²Ð°Ð½Ð½Ñ <abbr title=\"Dynamic Host "
+"Читати <code>/etc/ethers</code> Ð´Ð»Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ <abbr title=\"Dynamic Host "
"Configuration Protocol — Протокол динамічної конфігурації вузла\">DHCP</"
"abbr>-Ñервера"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
-"ДійÑно видалити цей інтерфейÑ? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾!\n"
-"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цей "
-"інтерфейÑ."
+"ДійÑно видалити цей інтерфейÑ? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾! Ви можете "
+"втратити доÑтуп до цього приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цей інтерфейÑ."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
-"ДійÑно видалити цю бездротову мережу? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾!\n"
-"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цю "
-"мережу."
+"ДійÑно видалити цю бездротову мережу? СкаÑувати Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾! Ви "
+"можете втратити доÑтуп до цього приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цю мережу."
msgid "Really reset all changes?"
msgstr "ДійÑно Ñкинути вÑÑ– зміни?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
-"ДійÑно вимкнути мережу?\n"
-"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цю "
-"мережу."
+"ДійÑно вимкнути мережу? Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо Ð²Ð°Ñ "
+"підключено через цю мережу."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
-"ДійÑно вимкнути Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\"?\n"
-"Ви можете втратити доÑтуп до цього приÑтрою, Ñкщо ви підключені через цей "
-"інтерфейÑ."
+"ДійÑно вимкнути Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ \"%s\"? Ви можете втратити доÑтуп до цього "
+"приÑтрою, Ñкщо Ð²Ð°Ñ Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¾ через цей інтерфейÑ."
msgid "Really switch protocol?"
msgstr "ДійÑно змінити протокол?"
@@ -2683,10 +2763,10 @@ msgid "Realtime Wireless"
msgstr "Бездротові мережі у реальному чаÑÑ–"
msgid "Reassociation Deadline"
-msgstr ""
+msgstr "Кінцевий термін реаÑÑоціації"
msgid "Rebind protection"
-msgstr "ЗахиÑÑ‚ від переприв'Ñзки"
+msgstr "ЗахиÑÑ‚ від переприв’Ñзки"
msgid "Reboot"
msgstr "ПерезавантаженнÑ"
@@ -2698,7 +2778,7 @@ msgid "Reboots the operating system of your device"
msgstr "Перезавантажити операційну ÑиÑтему вашого приÑтрою"
msgid "Receive"
-msgstr "Прийом"
+msgstr "ПрийманнÑ"
msgid "Receiver Antenna"
msgstr "Ðнтена приймача"
@@ -2746,22 +2826,22 @@ msgid "Replace wireless configuration"
msgstr "Замінити конфігурацію бездротової мережі"
msgid "Request IPv6-address"
-msgstr ""
+msgstr "Запит IPv6-адреÑи"
msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "Запит довжини IPv6-префікÑу"
msgid "Required"
-msgstr ""
+msgstr "Потрібно"
msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
msgstr "Потрібно Ð´Ð»Ñ Ð´ÐµÑких провайдерів, наприклад, Charter із DOCSIS 3"
msgid "Required. Base64-encoded private key for this interface."
-msgstr ""
+msgstr "Потрібно. Base64-закодований закритий ключ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ інтерфейÑу."
msgid "Required. Base64-encoded public key of peer."
-msgstr ""
+msgstr "Потрібно. Base64-закодований публічний ключ вузла"
msgid ""
"Required. IP addresses and prefixes that this peer is allowed to use inside "
@@ -2773,6 +2853,8 @@ msgid ""
"Requires the 'full' version of wpad/hostapd and support from the wifi driver "
"<br />(as of Feb 2017: ath9k and ath10k, in LEDE also mwlwifi and mt76)"
msgstr ""
+"Потребує \"повної\" верÑÑ–Ñ— wpad/hostapd та підтримки драйвером WiFi <br />"
+"(Ñтаном на лютий 2017 року: ath9k та ath10k, у LEDE також mwlwifi та mt76)"
msgid ""
"Requires upstream supports DNSSEC; verify unsigned domain responses really "
@@ -2807,16 +2889,16 @@ msgid "Reveal/hide password"
msgstr "Показати/приховати пароль"
msgid "Revert"
-msgstr "СкаÑувати зміни"
+msgstr "СкаÑувати"
msgid "Revert changes"
-msgstr ""
+msgstr "СкаÑувати зміни"
msgid "Revert request failed with status <code>%h</code>"
-msgstr ""
+msgstr "СталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° запиту на ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ñ– ÑтатуÑом <code>%h</code>"
msgid "Reverting configuration…"
-msgstr ""
+msgstr "Відкат конфігурації…"
msgid "Root"
msgstr "Корінь"
@@ -2825,16 +2907,16 @@ msgid "Root directory for files served via TFTP"
msgstr "Кореневий каталог Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² TFTP"
msgid "Root preparation"
-msgstr ""
+msgstr "Підготовка Root"
msgid "Route Allowed IPs"
-msgstr ""
+msgstr "ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ… IP-адреÑ"
msgid "Route type"
-msgstr ""
+msgstr "Тип маршруту"
msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Служба оголошень маршрутизатора"
msgid "Router Password"
msgstr "Пароль маршрутизатора"
@@ -2911,10 +2993,10 @@ msgid "Separate Clients"
msgstr "РозділÑти клієнтів"
msgid "Server Settings"
-msgstr "ÐаÑтройки Ñервера"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñервера"
msgid "Service Name"
-msgstr "Ðазва (ім'Ñ) ÑервіÑу"
+msgstr "Ðазва (ім’Ñ) ÑервіÑу"
msgid "Service Type"
msgstr "Тип ÑервіÑу"
@@ -2926,13 +3008,14 @@ msgid ""
"Set interface properties regardless of the link carrier (If set, carrier "
"sense events do not invoke hotplug handlers)."
msgstr ""
+"ВлаÑтивоÑÑ‚Ñ– інтерфейÑу вÑтановлюютьÑÑ Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð¾ від каналу зв’Ñзку (Ñкщо "
+"позначено, обробник Ð°Ð²Ñ‚Ð¾Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ викликаєтьÑÑ Ð¿Ñ€Ð¸ змінах)."
-#, fuzzy
msgid "Set up Time Synchronization"
-msgstr "ÐаÑтройки Ñинхронізації чаÑу"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñинхронізації чаÑу"
msgid "Setup DHCP Server"
-msgstr "ÐаÑтройки DHCP-Ñервера"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ DHCP-Ñервера"
msgid "Severely Errored Seconds (SES)"
msgstr ""
@@ -2965,7 +3048,7 @@ msgid "Size (.ipk)"
msgstr ""
msgid "Size of DNS query cache"
-msgstr ""
+msgstr "Розмір кешу запитів DNS"
msgid "Skip"
msgstr "ПропуÑтити"
@@ -2989,7 +3072,7 @@ msgid "Some fields are invalid, cannot save values!"
msgstr "ДеÑкі Ð¿Ð¾Ð»Ñ Ñ” неприпуÑтимими, неможливо зберегти значеннÑ!"
msgid "Sorry, the object you requested was not found."
-msgstr "Ðа жаль, об'єкт, Ñкий ви проÑили, не знайдено."
+msgstr "Ðа жаль, об’єкт, Ñкий ви проÑили, не знайдено."
msgid "Sorry, the server encountered an unexpected error."
msgstr "Ðа жаль, на Ñервері ÑталаÑÑ Ð½ÐµÐ¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð° помилка."
@@ -2999,9 +3082,9 @@ msgid ""
"flashed manually. Please refer to the wiki for device specific install "
"instructions."
msgstr ""
-"Ðа жаль, автоматичне Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтеми не підтримуєтьÑÑ. Ðовий образ "
-"прошивки повинен бути залитий вручну. ЗвернітьÑÑ Ð´Ð¾ Wiki за інÑтрукцією з "
-"інÑталÑції Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ приÑтрою."
+"Ðа жаль, Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑиÑтеми не підтримуєтьÑÑ. Ðовий образ мікропрограми "
+"Ñлід прошити вручну. ЗвернітьÑÑ Ð´Ð¾ Wiki за інÑтрукцією з інÑталÑції "
+"Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ приÑтрою."
msgid "Sort"
msgstr "СортуваннÑ"
@@ -3052,7 +3135,7 @@ msgid "Start priority"
msgstr "Стартовий пріоритет"
msgid "Starting configuration apply…"
-msgstr ""
+msgstr "ЗаÑтоÑовуєтьÑÑ Ñтартова конфігураціÑ…"
msgid "Startup"
msgstr "ЗапуÑк"
@@ -3070,7 +3153,7 @@ msgid "Static Routes"
msgstr "Статичні маршрути"
msgid "Static address"
-msgstr "Статичні адреÑи"
+msgstr "Статична адреÑа"
msgid ""
"Static leases are used to assign fixed IP addresses and symbolic hostnames "
@@ -3083,7 +3166,7 @@ msgstr ""
"орендою."
msgid "Status"
-msgstr "СтатуÑ"
+msgstr "Стан"
msgid "Stop"
msgstr "Зупинити"
@@ -3095,16 +3178,16 @@ msgid "Submit"
msgstr "ÐадіÑлати"
msgid "Suppress logging"
-msgstr ""
+msgstr "Блокувати журналюваннÑ"
msgid "Suppress logging of the routine operation of these protocols"
-msgstr ""
+msgstr "Блокувати Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ звичайної роботи цих протоколів"
msgid "Swap"
-msgstr ""
+msgstr "Своп"
msgid "Swap Entry"
-msgstr "Вхід довантаженнÑ"
+msgstr "Вхід Ñвоп"
msgid "Switch"
msgstr "Комутатор"
@@ -3118,12 +3201,13 @@ msgstr "Комутатор %q (%s)"
msgid ""
"Switch %q has an unknown topology - the VLAN settings might not be accurate."
msgstr ""
+"Комутатор %q має невідому топологію – параметри VLAN можуть бути неправильними"
msgid "Switch Port Mask"
-msgstr ""
+msgstr "МаÑка портів комутатора"
msgid "Switch VLAN"
-msgstr ""
+msgstr "VLAN комутатора"
msgid "Switch protocol"
msgstr "Протокол комутатора"
@@ -3150,7 +3234,7 @@ msgid "TCP:"
msgstr "TCP:"
msgid "TFTP Settings"
-msgstr "ÐаÑтройки TFTP"
+msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ TFTP"
msgid "TFTP server root"
msgstr "Корінь TFTP-Ñервера"
@@ -3181,11 +3265,11 @@ msgid ""
"multi-SSID capable). Per network settings like encryption or operation mode "
"are grouped in the <em>Interface Configuration</em>."
msgstr ""
-"Розділ <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою</em> охоплює фізичні параметри радіо-"
-"апаратних заÑобів, такі, Ñк канал, потужніÑÑ‚ÑŒ передавача або вибір антени, "
-"Ñкі Ñ” Ñпільними Ð´Ð»Ñ Ð²ÑÑ–Ñ… визначених бездротових мереж (Ñкщо радіо-апаратні "
+"Розділ <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¸Ñтрою</em> охоплює фізичні параметри апаратних "
+"радіо-заÑобів, такі, Ñк канал, потужніÑÑ‚ÑŒ передавача або вибір антени, "
+"Ñкі Ñ” Ñпільними Ð´Ð»Ñ Ð²ÑÑ–Ñ… визначених бездротових мереж (Ñкщо апаратні радіо-"
"заÑоби здатні підтримувати кілька SSID). Параметри окремих мереж, такі, Ñк "
-"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ режим роботи, згруповані в розділі <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ "
+"ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ режим роботи, згруповано в розділі <em>ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ "
"інтерфейÑу</em>."
msgid ""
@@ -3193,7 +3277,7 @@ msgid ""
"component for working wireless configuration!"
msgstr ""
"Пакет <em>libiwinfo-lua</em> не інÑтальований. Щоб мати можливіÑÑ‚ÑŒ "
-"наÑтроювати безпровідні мережі, Ñлід інÑталювати цей компонент!"
+"налаштувати безпровідні мережі, Ñлід інÑталювати цей компонент!"
msgid ""
"The HE.net endpoint update configuration changed, you must now use the plain "
@@ -3207,13 +3291,13 @@ msgstr ""
msgid ""
"The IPv6 prefix assigned to the provider, usually ends with <code>::</code>"
msgstr ""
-"Призначений провайдеру IPv6-префікÑ, зазвичай закінчуєтьÑÑ Ð½Ð° <code>::</code>"
+"Призначений провайдером IPv6-префікÑ, зазвичай закінчуєтьÑÑ Ð½Ð° <code>::</code>"
msgid ""
"The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
"code> and <code>_</code>"
msgstr ""
-"Дозволені Ñимволи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та "
+"Дозволено Ñимволи: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> та "
"<code>_</code>"
msgid "The configuration file could not be loaded due to the following error:"
@@ -3228,18 +3312,24 @@ msgid ""
"or revert all pending changes to keep the currently working configuration "
"state."
msgstr ""
+"ПриÑтрій недоÑÑжний протÑгом %d Ñекунд піÑÐ»Ñ Ð·Ð°ÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ñ‡Ñ–ÐºÑƒÑŽÑ‡Ð¸Ñ… змін, що "
+"призвело до Ð²Ñ–Ð´ÐºÐ¾Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— з міркувань безпеки. Проте, Ñкщо ви "
+"впевнені, що зміни конфігурації Ñ” правильними, заÑтоÑуйте неперевірену "
+"конфігурацію. Крім того, ви можете відхилити це Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° відредагувати "
+"зміни, перш ніж намагатиÑÑŒ заÑтоÑувати Ñ—Ñ… знову, або ж ÑкаÑувати вÑÑ– очікуючі "
+"зміни, щоб зберегти поточну робочу конфігурацію."
msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
"</abbr> <code>/dev/sda1</code>)"
-msgstr "Файл приÑтрою пам'ÑÑ‚Ñ– або розділу (наприклад, <code>/dev/sda1</code>)"
+msgstr "Файл приÑтрою пам’ÑÑ‚Ñ– або розділу (наприклад, <code>/dev/sda1</code>)"
msgid ""
"The filesystem that was used to format the memory (<abbr title=\"for example"
"\">e.g.</abbr> <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></"
"samp>)"
msgstr ""
-"Файлова ÑиÑтема, Ñка викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑ‚Ñ– "
+"Файлова ÑиÑтема, Ñка викориÑтовуватиметьÑÑ Ð´Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼â€™ÑÑ‚Ñ– "
"(наприклад, <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></"
"samp>)"
@@ -3248,18 +3338,18 @@ msgid ""
"compare them with the original file to ensure data integrity.<br /> Click "
"\"Proceed\" below to start the flash procedure."
msgstr ""
-"Образ завантажено. Ðижче наведено контрольну Ñуму Ñ– розмір файлу. ПорівнÑйте "
-"Ñ—Ñ… з вихідним файлом Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ–ÑноÑÑ‚Ñ– даних.<br /> ÐатиÑніть "
-"\"Продовжити\", щоб розпочати процедуру Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ÑˆÐ¸Ð²ÐºÐ¸."
+"Образ завантажено. Ðижче наведено контрольну Ñуму та розмір файлу. ПорівнÑйте "
+"Ñ—Ñ… з вихідним файлом, шоб переконатиÑÑ Ð² ціліÑноÑÑ‚Ñ– даних.<br /> ÐатиÑніть "
+"\"Продовжити\", щоб розпочати процедуру прошиваннÑ."
msgid "The following changes have been reverted"
-msgstr "Ðижче наведені зміни були ÑкаÑовані"
+msgstr "Ðаведені нижче зміни було ÑкаÑовано"
msgid "The following rules are currently active on this system."
-msgstr "У даний Ñ‡Ð°Ñ Ñƒ цій ÑиÑтемі активні такі правила."
+msgstr "Ðаразі в цій ÑиÑтемі активні такі правила."
msgid "The given network name is not unique"
-msgstr "Задане мережеве ім'Ñ Ð½Ðµ Ñ” унікальним"
+msgstr "Задане мережеве Ñ–Ð¼â€™Ñ Ð½Ðµ Ñ” унікальним"
#, fuzzy
msgid ""
@@ -3288,12 +3378,12 @@ msgid ""
"segments. Often there is by default one Uplink port for a connection to the "
"next greater network like the internet and other ports for a local network."
msgstr ""
-"Мережеві порти вашого приÑтрою можуть бути об'єднані у декілька <abbr title="
-"\"Virtual Local Area Network — віртуальна локальна комп'ютерна мережа"
-"\">VLAN</abbr>, у Ñких комп'ютери можуть напрÑму ÑпілкуватиÑÑ Ð¾Ð´Ð¸Ð½ з одним. "
-"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп'ютерна "
+"Мережеві порти вашого приÑтрою може бути об’єднано у декілька <abbr title="
+"\"Virtual Local Area Network — віртуальна локальна комп’ютерна мережа"
+"\">VLAN</abbr>, у Ñких комп’ютери можуть напрÑму ÑпілкуватиÑÑ Ð¾Ð´Ð¸Ð½ з одним. "
+"<abbr title=\"Virtual Local Area Network — віртуальна локальна комп’ютерна "
"мережа\">VLAN</abbr> чаÑто викориÑтовуютьÑÑ Ð´Ð»Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ– на окремі "
-"Ñегменти. Зазвичай один виcхідний порт викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð·'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· "
+"Ñегменти. Зазвичай один виcхідний порт викориÑтовуєтьÑÑ Ð´Ð»Ñ Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· "
"більшою мережею, такою наприклад, Ñк Інтернет, а інші порти — Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ñ— "
"мережі."
@@ -3319,8 +3409,8 @@ msgid ""
msgstr ""
"СиÑтема перепрошиваєтьÑÑ.<br /> <strong>ÐЕ ВИМИКÐЙТЕ ЖИВЛЕÐÐЯ ПРИСТРОЮ!</"
"strong><br /> Зачекайте кілька хвилин перед тим, Ñк пробувати знову "
-"з'єднатиÑÑ. Залежно від ваших наÑтройок, можливо, вам треба буде оновити "
-"адреÑу вашого комп'ютера, щоб знову отримати доÑтуп до приÑтрою."
+"під’єднатиÑÑ. Залежно від налаштувань, можливо, треба буде оновити "
+"адреÑу вашого комп’ютера, щоб знову отримати доÑтуп до приÑтрою."
msgid ""
"The uploaded image file does not contain a supported format. Make sure that "
@@ -3333,10 +3423,10 @@ msgid "There are no active leases."
msgstr "Ðктивних оренд немає."
msgid "There are no changes to apply."
-msgstr ""
+msgstr "Ðемає жодних змін до заÑтоÑуваннÑ!"
msgid "There are no pending changes to revert!"
-msgstr "Ðемає жодних змін до ÑкаÑуваннÑ!"
+msgstr "Ðемає жодних очікуючих змін до ÑкаÑуваннÑ!"
msgid "There are no pending changes!"
msgstr "Ðемає жодних очікуючих змін!"
@@ -3363,6 +3453,9 @@ msgid ""
"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
"Name System\">DNS</abbr> servers."
msgstr ""
+"Цей файл може міÑтити такі Ñ€Ñдки, Ñк 'server=/domain/1.2.3.4' або 'server="
+"1.2.3.4' Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½-орієнтованих або повних виÑхідних <abbr title=\"Domain "
+"Name System\">DNS</abbr>-Ñерверів."
msgid ""
"This is a list of shell glob patterns for matching files and directories to "
@@ -3377,6 +3470,8 @@ msgid ""
"This is either the \"Update Key\" configured for the tunnel or the account "
"password if no update key has been configured"
msgstr ""
+"Це або \"Update Key\", Ñконфігурований Ð´Ð»Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ, або пароль облікового "
+"запиÑу, Ñкщо ключ Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ налаштовано"
msgid ""
"This is the content of /etc/rc.local. Insert your own commands here (in "
@@ -3389,8 +3484,8 @@ msgid ""
"This is the local endpoint address assigned by the tunnel broker, it usually "
"ends with <code>...:2/64</code>"
msgstr ""
-"Це локальна адреÑа кінцевої точки, приÑвоєна тунельним брокером, зазвичай "
-"закінчуєтьÑÑ Ð½Ð° <code>...:2/64</code>"
+"Це локальна адреÑа кінцевої точки, Ñку приÑвоєно тунельним брокером, "
+"вона зазвичай закінчуєтьÑÑ Ð½Ð° <code>…:2/64</code>"
msgid ""
"This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
@@ -3400,11 +3495,13 @@ msgstr ""
"динамічної конфігурації вузла\">DHCP</abbr> у локальній мережі"
msgid "This is the plain username for logging into the account"
-msgstr ""
+msgstr "Це звичайне Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ до облікового запиÑу"
msgid ""
"This is the prefix routed to you by the tunnel broker for use by clients"
msgstr ""
+"Це префікÑ, що надÑилаєтьÑÑ Ð´Ð¾ Ð²Ð°Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ½Ð¸Ð¼ брокером Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ "
+"клієнтами"
msgid "This is the system crontab in which scheduled tasks can be defined."
msgstr ""
@@ -3414,15 +3511,14 @@ msgstr ""
msgid ""
"This is usually the address of the nearest PoP operated by the tunnel broker"
msgstr ""
-"Зазвичай, це адреÑа найближчої точки приÑутноÑÑ‚Ñ–, що управлÑєтьÑÑ Ñ‚ÑƒÐ½ÐµÐ»Ð½Ð¸Ð¼ "
+"Зазвичай, це адреÑа найближчої точки приÑутноÑÑ‚Ñ–, що управлÑєтьÑÑ Ñ‚ÑƒÐ½ÐµÐ»ÑŒÐ½Ð¸Ð¼ "
"брокером"
msgid ""
"This list gives an overview over currently running system processes and "
"their status."
msgstr ""
-"У цьому ÑпиÑку наведені працюючі на даний момент ÑиÑтемні процеÑи та Ñ—Ñ… "
-"ÑтатуÑ."
+"У цьому ÑпиÑку наведено працюючі наразі ÑиÑтемні процеÑи та Ñ—Ñ… Ñтан."
msgid "This page gives an overview over currently active network connections."
msgstr "Ð¦Ñ Ñторінка надає оглÑд поточних активних мережних підключень."
@@ -3434,7 +3530,7 @@ msgid "Time Synchronization"
msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñу"
msgid "Time Synchronization is not configured yet."
-msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ‡Ð°Ñу не наÑтроєна."
+msgstr "Синхронізацію чаÑу не налаштовано."
msgid "Timezone"
msgstr "ЧаÑовий поÑÑ"
@@ -3447,7 +3543,7 @@ msgstr ""
"архів резервної копії."
msgid "Tone"
-msgstr ""
+msgstr "Тоновий"
msgid "Total Available"
msgstr "УÑього доÑтупно"
@@ -3465,7 +3561,7 @@ msgid "Transmission Rate"
msgstr "ШвидкіÑÑ‚ÑŒ передаваннÑ"
msgid "Transmit"
-msgstr "Передача"
+msgstr "ПередаваннÑ"
msgid "Transmit Power"
msgstr "ПотужніÑÑ‚ÑŒ передавача"
@@ -3486,7 +3582,7 @@ msgid "Tunnel Interface"
msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ"
msgid "Tunnel Link"
-msgstr ""
+msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ"
msgid "Tx-Power"
msgstr "ПотужніÑÑ‚ÑŒ передавача"
@@ -3507,7 +3603,7 @@ msgid "USB Device"
msgstr "USB-приÑтрій"
msgid "USB Ports"
-msgstr ""
+msgstr "USB-порт"
msgid "UUID"
msgstr "UUID"
@@ -3516,7 +3612,7 @@ msgid "Unable to dispatch"
msgstr "Ðе вдалоÑÑ Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ñ‚Ð¸ запит"
msgid "Unavailable Seconds (UAS)"
-msgstr ""
+msgstr "ÐедоÑтупні Ñекунди (<abbr title=\"Unavailable Seconds\">UAS</abbr>)"
msgid "Unknown"
msgstr "Ðевідомо"
@@ -3528,7 +3624,7 @@ msgid "Unmanaged"
msgstr "Ðекерований"
msgid "Unmount"
-msgstr ""
+msgstr "Демонтувати"
msgid "Unsaved Changes"
msgstr "Ðезбережені зміни"
@@ -3544,9 +3640,9 @@ msgid ""
"Check \"Keep settings\" to retain the current configuration (requires a "
"compatible firmware image)."
msgstr ""
-"Відвантажити sysupgrade-ÑуміÑний образ, щоб замінити поточну прошивку. Ð”Ð»Ñ "
-"Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— конфігурації вÑтановіть прапорець \"Зберегти наÑтройки"
-"\" (потрібен ÑуміÑний образ прошивки)."
+"Відвантажити sysupgrade-ÑуміÑний образ, щоб замінити поточну мікропрограму. "
+"Ð”Ð»Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ñ— конфігурації вÑтановіть прапорець \"Зберегти "
+"налаштуваннÑ\" (потрібен ÑуміÑний образ мікропрограми)."
msgid "Upload archive..."
msgstr "Відвантажити архів..."
@@ -3576,16 +3672,16 @@ msgid "Use TTL on tunnel interface"
msgstr "ВикориÑтовувати на тунельному інтерфейÑÑ– TTL"
msgid "Use as external overlay (/overlay)"
-msgstr ""
+msgstr "ВикориÑтовувати Ñк зовнішній оверлей (/overlay)"
msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "ВикориÑтовувати Ñк кореневу файлову ÑиÑтему (/)"
msgid "Use broadcast flag"
msgstr "ВикориÑтовувати прапорець широкомовноÑÑ‚Ñ–"
msgid "Use builtin IPv6-management"
-msgstr ""
+msgstr "ВикориÑтовувати вбудоване ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ IPv6"
msgid "Use custom DNS servers"
msgstr "ВикориÑтовувати оÑобливі DNS-Ñервери"
@@ -3608,8 +3704,8 @@ msgid ""
msgstr ""
"ВикориÑтовуйте кнопку <em>Додати</em>, щоб додати новий Ð·Ð°Ð¿Ð¸Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸. "
"<em>MAC-адреÑа</em> ідентифікує вузол, <em>IPv4-адреÑа</em> визначає "
-"фікÑовану адреÑу, Ñка буде викориÑтовуватиÑÑ, а <em>Ðазва (ім'Ñ) вузла</em> "
-"призначає Ñимволічне ім'Ñ Ð²ÑƒÐ·Ð»Ð°."
+"фікÑовану адреÑу, Ñка буде викориÑтовуватиÑÑ, а <em>Ðазва (ім’Ñ) вузла</em> "
+"призначає Ñимволічне Ñ–Ð¼â€™Ñ Ð²ÑƒÐ·Ð»Ð°."
msgid "Used"
msgstr "ВикориÑтано"
@@ -3621,21 +3717,24 @@ msgid ""
"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
"needed with normal WPA(2)-PSK."
msgstr ""
+"ВикориÑтовуєтьÑÑ Ð´Ð»Ñ Ð´Ð²Ð¾Ñ… різних цілей: RADIUS NAS ID Ñ– 802.11r <abbr "
+"title=\"ідентифікатор влаÑника ключа R0\">R0KH-ID</abbr>. Ðе потрібно за "
+"звичайного WPA(2)-PSK."
msgid "User certificate (PEM encoded)"
-msgstr ""
+msgstr "Сертифікат кориÑтувача (PEM-кодований)"
msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "Ключ кориÑтувача (PEM-кодований)"
msgid "Username"
-msgstr "Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
+msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
msgid "VC-Mux"
msgstr "VC-Mux"
msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
msgid "VLANs on %q"
msgstr "VLAN на %q"
@@ -3644,25 +3743,25 @@ msgid "VLANs on %q (%s)"
msgstr "VLAN на %q (%s)"
msgid "VPN Local address"
-msgstr ""
+msgstr "Локальна адреÑа VPN"
msgid "VPN Local port"
-msgstr ""
+msgstr "Локальний порт VPN"
msgid "VPN Server"
msgstr "VPN-Ñервер"
msgid "VPN Server port"
-msgstr ""
+msgstr "Порт VPN-Ñервера"
msgid "VPN Server's certificate SHA1 hash"
-msgstr ""
+msgstr "SHA1-геш Ñертифіката VPN-Ñервера"
msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr ""
+msgstr "VPNC (CISCO 3000 (та інш.) VPN)"
msgid "Vendor"
-msgstr ""
+msgstr "ПоÑтачальник"
msgid "Vendor Class to send when requesting DHCP"
msgstr "ÐšÐ»Ð°Ñ Ð¿Ð¾Ñтачальника Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸ при запиті DHCP"
@@ -3686,7 +3785,7 @@ msgid "WEP passphrase"
msgstr "Парольна фраза WEP"
msgid "WMM Mode"
-msgstr "Режим WMM"
+msgstr "Режим <abbr title=\"Wi-Fi Multimedia\">WMM</abbr>"
msgid "WPA passphrase"
msgstr "Парольна фраза WPA"
@@ -3705,27 +3804,29 @@ msgid "Waiting for command to complete..."
msgstr "Очікуємо Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "Чекаємо на заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ—â€¦ %d c"
msgid "Waiting for device..."
-msgstr ""
+msgstr "Очікуємо приÑтрій..."
msgid "Warning"
msgstr "ЗаÑтереженнÑ"
msgid "Warning: There are unsaved changes that will get lost on reboot!"
msgstr ""
+"ЗаÑтереженнÑ: Є незбережені зміни, Ñкі буде втрачено при перезавантаженні!"
msgid ""
"When using a PSK, the PMK can be generated locally without inter AP "
"communications"
msgstr ""
+"При викориÑтанні PSK, PMK може бути Ñтворений локально без взаємодії між AP"
msgid "Width"
-msgstr ""
+msgstr "Ширина"
msgid "WireGuard VPN"
-msgstr ""
+msgstr "WireGuard VPN"
msgid "Wireless"
msgstr "Бездротові мережі"
@@ -3743,19 +3844,19 @@ msgid "Wireless Security"
msgstr "Безпека бездротової мережі"
msgid "Wireless is disabled or not associated"
-msgstr "Бездротову мережу вимкнено або не пов'Ñзано"
+msgstr "Бездротову мережу вимкнено або не пов’Ñзано"
msgid "Wireless is restarting..."
msgstr "Бездротова мережа перезапуÑкаєтьÑÑ..."
msgid "Wireless network is disabled"
-msgstr "Бездротова мережа вимкнена"
+msgstr "Бездротову мережу вимкнено"
msgid "Wireless network is enabled"
-msgstr "Бездротова мережа ввімкнена"
+msgstr "Бездротову мережу ввімкнено"
msgid "Wireless restarted"
-msgstr "Бездротова мережа перезапущена"
+msgstr "Бездротову мережу перезапущено"
msgid "Wireless shut down"
msgstr "Бездротова мережа припинила роботу"
@@ -3764,7 +3865,7 @@ msgid "Write received DNS requests to syslog"
msgstr "ЗапиÑувати отримані DNS-запити до ÑиÑтемного журналу"
msgid "Write system log to file"
-msgstr ""
+msgstr "ЗапиÑувати cиÑтемний журнал до файлу"
msgid ""
"You can enable or disable installed init scripts here. Changes will applied "
@@ -3779,14 +3880,17 @@ msgstr ""
msgid ""
"You must enable JavaScript in your browser or LuCI will not work properly."
msgstr ""
-"Ви повинні увімкнути JavaScript у вашому браузері, або LuCI не буде "
-"працювати належним чином."
+"Вам Ñлід увімкнути JavaScript у вашому браузері, або LuCI не буде працювати "
+"належним чином."
msgid ""
"Your Internet Explorer is too old to display this page correctly. Please "
"upgrade it to at least version 7 or use another browser like Firefox, Opera "
"or Safari."
msgstr ""
+"Ваш Internet Explorer занадто Ñтарий, щоб правильно відобразити цю Ñторінку. "
+"Поновіть його, принаймні, до верÑÑ–Ñ— 7 або ÑкориÑтайтеÑÑŒ іншим браузером, "
+"таким Ñк Firefox, Opera або Safari."
msgid "any"
msgstr "будь-Ñкий"
@@ -3798,13 +3902,16 @@ msgid "baseT"
msgstr "baseT"
msgid "bridged"
-msgstr "зв'Ñзано"
+msgstr "зв’Ñзано"
+
+msgid "create"
+msgstr "Ñтворити"
msgid "create:"
msgstr "Ñтворити:"
msgid "creates a bridge over specified interface(s)"
-msgstr "Створити міÑÑ‚ через вказаний інтерфейÑ(и)"
+msgstr "Створює міÑÑ‚ через зазначені інтерфейÑи"
msgid "dB"
msgstr "дБ"
@@ -3816,7 +3923,7 @@ msgid "disable"
msgstr "вимкнено"
msgid "disabled"
-msgstr ""
+msgstr "вимкнено"
msgid "expired"
msgstr "минув"
@@ -3829,7 +3936,7 @@ msgstr ""
"Protocol — протокол динамічної конфігурації вузла\">DHCP</abbr>-оренди"
msgid "forward"
-msgstr "переÑлати"
+msgstr "переÑпрÑмувати"
msgid "full-duplex"
msgstr "повний дуплекÑ"
@@ -3844,7 +3951,7 @@ msgid "hidden"
msgstr "прихований"
msgid "hybrid mode"
-msgstr ""
+msgstr "гібридний режим"
msgid "if target is a network"
msgstr "Ñкщо мета — мережа"
@@ -3867,19 +3974,19 @@ msgstr ""
"abbr>-файл"
msgid "minutes"
-msgstr ""
+msgstr "хв."
msgid "no"
msgstr "ні"
msgid "no link"
-msgstr "нема з'єднаннÑ"
+msgstr "нема з’єднаннÑ"
msgid "none"
msgstr "нема нічого"
msgid "not present"
-msgstr ""
+msgstr "не приÑутній"
msgid "off"
msgstr "вимкнено"
@@ -3890,35 +3997,38 @@ msgstr "увімкнено"
msgid "open"
msgstr "відкрита"
+msgid "output"
+msgstr "вихід"
+
msgid "overlay"
-msgstr ""
+msgstr "оверлей"
msgid "random"
-msgstr ""
+msgstr "випадковий"
msgid "relay mode"
-msgstr ""
+msgstr "режим реле"
msgid "routed"
msgstr "ÑпрÑмовано"
msgid "server mode"
-msgstr ""
+msgstr "режим Ñервера"
msgid "stateful-only"
-msgstr ""
+msgstr "тільки ЗІ збереженнÑм Ñтану"
msgid "stateless"
-msgstr ""
+msgstr "БЕЗ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñтану"
msgid "stateless + stateful"
-msgstr ""
+msgstr "БЕЗ та ЗІ збереженнÑм Ñтану"
msgid "tagged"
-msgstr "з позначкою"
+msgstr "позначено"
msgid "time units (TUs / 1.024 ms) [1000-65535]"
-msgstr ""
+msgstr "одиниці чаÑу (TUs / 1.024 ms) [1000-65535]"
msgid "unknown"
msgstr "невідомий"
@@ -3933,121 +4043,10 @@ msgid "unspecified -or- create:"
msgstr "не визначено -або- Ñтворити"
msgid "untagged"
-msgstr "без позначки"
+msgstr "не позначено"
msgid "yes"
msgstr "так"
msgid "« Back"
msgstr "« Ðазад"
-
-#~ msgid "Apply"
-#~ msgstr "ЗаÑтоÑувати"
-
-#~ msgid "Applying changes"
-#~ msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½"
-
-#~ msgid "Configuration applied."
-#~ msgstr "ÐšÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ Ð·Ð°ÑтоÑована."
-
-#~ msgid "Save &#38; Apply"
-#~ msgstr "Зберегти Ñ– заÑтоÑувати"
-
-#~ msgid "The following changes have been committed"
-#~ msgstr "Ðижче наведені зміни були заÑтоÑовані"
-
-#~ msgid "There are no pending changes to apply!"
-#~ msgstr "Ðемає жодних змін до заÑтоÑуваннÑ!"
-
-#~ msgid "Action"
-#~ msgstr "ДіÑ"
-
-#~ msgid "Buttons"
-#~ msgstr "Кнопки"
-
-#~ msgid "Handler"
-#~ msgstr "Обробник"
-
-#~ msgid "Maximum hold time"
-#~ msgstr "МакÑимальний Ñ‡Ð°Ñ ÑƒÑ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ"
-
-#~ msgid "Minimum hold time"
-#~ msgstr "Мінімальний Ñ‡Ð°Ñ ÑƒÑ‚Ñ€Ð¸Ð¼ÑƒÐ²Ð°Ð½Ð½Ñ"
-
-#~ msgid "Path to executable which handles the button event"
-#~ msgstr "ШлÑÑ… до програми, Ñка оброблÑÑ” натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸"
-
-#~ msgid "Specifies the button state to handle"
-#~ msgstr "Визначає Ñтан кнопки Ð´Ð»Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸"
-
-#~ msgid "This page allows the configuration of custom button actions"
-#~ msgstr "Ð¦Ñ Ñторінка дозволÑÑ” наÑтроїти нетипові дії кнопки"
-
-#~ msgid "Leasetime"
-#~ msgstr "Ð§Ð°Ñ Ð¾Ñ€ÐµÐ½Ð´Ð¸"
-
-#~ msgid "AR Support"
-#~ msgstr "Підтримка AR"
-
-#~ msgid "Atheros 802.11%s Wireless Controller"
-#~ msgstr "Бездротовий 802.11%s контролер Atheros"
-
-#~ msgid "Background Scan"
-#~ msgstr "Ð¡ÐºÐ°Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ фоновому режимі"
-
-#~ msgid "Compression"
-#~ msgstr "СтиÑненнÑ"
-
-#~ msgid "Disable HW-Beacon timer"
-#~ msgstr "Вимкнути таймер HW-Beacon"
-
-#~ msgid "Do not send probe responses"
-#~ msgstr "Ðе надÑилати відповіді на зондуваннÑ"
-
-#~ msgid "Fast Frames"
-#~ msgstr "Швидкі фрейми"
-
-#~ msgid "Maximum Rate"
-#~ msgstr "МакÑимальна швидкіÑÑ‚ÑŒ"
-
-#~ msgid "Minimum Rate"
-#~ msgstr "Мінімальна швидкіÑÑ‚ÑŒ"
-
-#~ msgid "Multicast Rate"
-#~ msgstr "ШвидкіÑÑ‚ÑŒ багатоадреÑного потоку"
-
-#~ msgid "Outdoor Channels"
-#~ msgstr "Зовнішні канали"
-
-#~ msgid "Regulatory Domain"
-#~ msgstr "РегулÑтивний домен"
-
-#~ msgid "Separate WDS"
-#~ msgstr "РозділÑти WDS"
-
-#~ msgid "Static WDS"
-#~ msgstr "Статичний WDS"
-
-#~ msgid "Turbo Mode"
-#~ msgstr "Режим Turbo"
-
-#~ msgid "XR Support"
-#~ msgstr "Підтримка XR"
-
-#~ msgid "An additional network will be created if you leave this unchecked."
-#~ msgstr "Якщо ви залишите це невибраним, буде Ñтворена додаткова мережа."
-
-#~ msgid "Join Network: Settings"
-#~ msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі: ÐаÑтройки"
-
-#~ msgid "CPU"
-#~ msgstr "ЦП"
-
-#~ msgid "Port %d"
-#~ msgstr "Порт %d"
-
-#~ msgid "Port %d is untagged in multiple VLANs!"
-#~ msgstr "Порт %d нетегований у кількох VLAN-ах!"
-
-#~ msgid "VLAN Interface"
-#~ msgstr "VLAN-інтерфейÑ"
diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po
index b5e712ca36..0a2ccbf85a 100644
--- a/modules/luci-base/po/vi/base.po
+++ b/modules/luci-base/po/vi/base.po
@@ -49,6 +49,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr ""
@@ -385,6 +388,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -399,6 +405,9 @@ msgstr ""
msgid "Associated Stations"
msgstr ""
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1253,7 +1262,7 @@ msgstr ""
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1382,7 +1391,7 @@ msgstr ""
msgid "IPv4 Firewall"
msgstr ""
-msgid "IPv4 WAN Status"
+msgid "IPv4 Upstream"
msgstr ""
msgid "IPv4 address"
@@ -1433,7 +1442,7 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
+msgid "IPv6 Upstream"
msgstr ""
msgid "IPv6 address"
@@ -2542,12 +2551,12 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-Server"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
@@ -2555,12 +2564,12 @@ msgid "Really reset all changes?"
msgstr ""
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
@@ -3631,6 +3640,9 @@ msgstr ""
msgid "bridged"
msgstr ""
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr ""
@@ -3719,6 +3731,9 @@ msgstr ""
msgid "open"
msgstr ""
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po
index e0ef2eec71..751593f68f 100644
--- a/modules/luci-base/po/zh-cn/base.po
+++ b/modules/luci-base/po/zh-cn/base.po
@@ -39,6 +39,9 @@ msgstr "-- æ ¹æ®æ ‡ç­¾åŒ¹é… --"
msgid "-- match by uuid --"
msgstr "-- æ ¹æ® UUID åŒ¹é… --"
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1 分钟负载:"
@@ -378,10 +381,13 @@ msgid "Any zone"
msgstr "ä»»æ„区域"
msgid "Apply request failed with status <code>%h</code>"
-msgstr ""
+msgstr "åº”ç”¨è¯·æ±‚å¤±è´¥ï¼ŒçŠ¶æ€ <code>%h</code>"
msgid "Apply unchecked"
-msgstr ""
+msgstr "应用未选中"
+
+msgid "Architecture"
+msgstr "架构"
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
@@ -397,6 +403,9 @@ msgstr "将此åå…­è¿›åˆ¶å­ ID å‰ç¼€åˆ†é…给此接å£"
msgid "Associated Stations"
msgstr "已连接站点"
+msgid "Associations"
+msgstr "å…³è”æ•°"
+
msgid "Auth Group"
msgstr "认è¯ç»„"
@@ -555,10 +564,10 @@ msgid "Changes"
msgstr "修改数"
msgid "Changes applied."
-msgstr "更改已应用"
+msgstr "更改已应用。"
msgid "Changes have been reverted."
-msgstr ""
+msgstr "更改已å–消。"
msgid "Changes the administrator password for accessing the device"
msgstr "修改访问设备的管ç†å‘˜å¯†ç "
@@ -569,7 +578,7 @@ msgstr "ä¿¡é“"
msgid ""
"Channel %d is not available in the %s regulatory domain and has been auto-"
"adjusted to %d."
-msgstr ""
+msgstr "ä¿¡é“ %d 在 %s 监管区域内ä¸å¯ç”¨å¹¶å·²è‡ªåŠ¨è°ƒæ•´åˆ° %d。"
msgid "Check"
msgstr "检查"
@@ -651,10 +660,10 @@ msgid "Configuration files will be kept."
msgstr "é…置文件将被ä¿ç•™ã€‚"
msgid "Configuration has been applied."
-msgstr ""
+msgstr "é…置已应用。"
msgid "Configuration has been rolled back!"
-msgstr ""
+msgstr "é…置已回滚ï¼"
msgid "Confirmation"
msgstr "确认密ç "
@@ -676,6 +685,8 @@ msgid ""
"changes. You might need to reconnect if you modified network related "
"settings such as the IP address or wireless security credentials."
msgstr ""
+"应用é…置更改åŽï¼Œæ— æ³•é‡æ–°èŽ·å¾—对设备的访问æƒé™ã€‚如果您修改了网络相关设置"
+"如 IP 地å€æˆ–无线安全è¯ä¹¦ï¼Œåˆ™å¯èƒ½éœ€è¦é‡æ–°è¿žæŽ¥ã€‚"
msgid "Country"
msgstr "国家"
@@ -846,7 +857,7 @@ msgid "Device unreachable"
msgstr "无法连接到设备"
msgid "Device unreachable!"
-msgstr ""
+msgstr "无法连接到设备ï¼"
msgid "Diagnostics"
msgstr "网络诊断"
@@ -883,7 +894,7 @@ msgid "Discard upstream RFC1918 responses"
msgstr "丢弃 RFC1918 上行å“应数æ®"
msgid "Dismiss"
-msgstr ""
+msgstr "解除"
msgid "Displaying only packages containing"
msgstr "åªæ˜¾ç¤ºæœ‰å†…容的软件包"
@@ -997,7 +1008,7 @@ msgstr "å¯ç”¨"
msgid ""
"Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> "
"snooping"
-msgstr ""
+msgstr "å¯ç”¨ <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> 窥探"
msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
msgstr "å¼€å¯ <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
@@ -1057,7 +1068,7 @@ msgid "Enabled"
msgstr "å¯ç”¨"
msgid "Enables IGMP snooping on this bridge"
-msgstr ""
+msgstr "在此桥接上å¯ç”¨ IGMP 窥探"
msgid ""
"Enables fast roaming among access points that belong to the same Mobility "
@@ -1138,7 +1149,7 @@ msgid "FT protocol"
msgstr "FT åè®®"
msgid "Failed to confirm apply within %ds, waiting for rollback…"
-msgstr ""
+msgstr "在 %d 秒内确认应用失败,等待回滚..."
msgid "File"
msgstr "文件"
@@ -1261,10 +1272,10 @@ msgstr "空闲空间"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
-"有关 WireGuard 接å£å’Œ Peer 的更多信æ¯ï¼š<a href=\"http://wireguard.io"
-"\">wireguard.io</a>。"
+"有关 WireGuard 接å£å’Œ Peer 的更多信æ¯ï¼š<a href=\"http://wireguard.com"
+"\">wireguard.com</a>。"
msgid "GHz"
msgstr "GHz"
@@ -1390,8 +1401,8 @@ msgstr "IPv4"
msgid "IPv4 Firewall"
msgstr "IPv4 防ç«å¢™"
-msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN 状æ€"
+msgid "IPv4 Upstream"
+msgstr "IPv4 上游"
msgid "IPv4 address"
msgstr "IPv4 地å€"
@@ -1441,8 +1452,8 @@ msgstr "IPv6 设置"
msgid "IPv6 ULA-Prefix"
msgstr "IPv6 ULA å‰ç¼€"
-msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN 状æ€"
+msgid "IPv6 Upstream"
+msgstr "IPv6 上游"
msgid "IPv6 address"
msgstr "IPv6 地å€"
@@ -2152,7 +2163,7 @@ msgid "Obfuscated Password"
msgstr "混淆密ç "
msgid "Obtain IPv6-Address"
-msgstr ""
+msgstr "èŽ·å– IPv6 地å€"
msgid "Off-State Delay"
msgstr "关闭时间"
@@ -2560,13 +2571,13 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr> æœåŠ¡å™¨"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"确定è¦åˆ é™¤æ­¤æŽ¥å£ï¼Ÿåˆ é™¤æ“作无法撤销ï¼\\n删除此接å£ï¼Œå¯èƒ½å¯¼è‡´æ— æ³•å†è®¿é—®è·¯ç”±å™¨ï¼"
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"确定è¦åˆ é™¤æ­¤æ— çº¿ç½‘络?删除æ“作无法撤销ï¼\\n删除此无线网络,å¯èƒ½å¯¼è‡´æ— æ³•å†è®¿é—®"
@@ -2576,14 +2587,14 @@ msgid "Really reset all changes?"
msgstr "确定è¦æ”¾å¼ƒæ‰€æœ‰æ›´æ”¹ï¼Ÿ"
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"确定è¦å…³é—­æ­¤ç½‘络?\\n如果您正在使用此接å£è¿žæŽ¥è·¯ç”±å™¨ï¼Œå…³é—­æ­¤ç½‘络å¯èƒ½å¯¼è‡´è¿žæŽ¥æ–­"
"å¼€ï¼"
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"确定è¦å…³é—­æŽ¥å£ \"%s\"?\\n如果您正在使用此接å£è¿žæŽ¥è·¯ç”±å™¨ï¼Œå…³é—­æ­¤ç½‘络å¯èƒ½å¯¼è‡´"
@@ -2736,16 +2747,16 @@ msgid "Reveal/hide password"
msgstr "显示/éšè— 密ç "
msgid "Revert"
-msgstr "放弃"
+msgstr "æ¢å¤"
msgid "Revert changes"
-msgstr ""
+msgstr "æ¢å¤æ›´æ”¹"
msgid "Revert request failed with status <code>%h</code>"
-msgstr ""
+msgstr "æ¢å¤è¯·æ±‚å¤±è´¥ï¼ŒçŠ¶æ€ <code>%h</code>"
msgid "Reverting configuration…"
-msgstr ""
+msgstr "正在æ¢å¤é…ç½®..."
msgid "Root"
msgstr "Root"
@@ -2810,7 +2821,7 @@ msgid "Save"
msgstr "ä¿å­˜"
msgid "Save & Apply"
-msgstr "ä¿å­˜&应用"
+msgstr "ä¿å­˜å¹¶åº”用"
msgid "Scan"
msgstr "扫æ"
@@ -2973,7 +2984,7 @@ msgid "Start priority"
msgstr "å¯åŠ¨ä¼˜å…ˆçº§"
msgid "Starting configuration apply…"
-msgstr ""
+msgstr "开始应用é…ç½®..."
msgid "Startup"
msgstr "å¯åŠ¨é¡¹"
@@ -3140,6 +3151,9 @@ msgid ""
"or revert all pending changes to keep the currently working configuration "
"state."
msgstr ""
+"åœ¨åº”ç”¨æŒ‚èµ·çš„æ›´æ”¹åŽ %d 秒内无法到达该设备,出于安全原因导致é…置回滚。如果您认为é…置更改ä»"
+"然正确,请执行未选中的é…置应用。或者您å¯ä»¥åœ¨å°è¯•å†æ¬¡åº”用之å‰è§£é™¤æ­¤è­¦å‘Šå¹¶ç¼–辑更改,或者还原"
+"所有未完æˆçš„更改以ä¿æŒå½“å‰æ­£åœ¨å·¥ä½œçš„é…置状æ€ã€‚"
msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g."
@@ -3229,7 +3243,7 @@ msgid "There are no active leases."
msgstr "没有已分é…的租约。"
msgid "There are no changes to apply."
-msgstr ""
+msgstr "没有待生效的更改。"
msgid "There are no pending changes to revert!"
msgstr "没有å¯æ”¾å¼ƒçš„更改ï¼"
@@ -3586,7 +3600,7 @@ msgid "Waiting for command to complete..."
msgstr "等待命令执行完æˆ..."
msgid "Waiting for configuration to get applied… %ds"
-msgstr ""
+msgstr "等待应用é…ç½®... %d 秒"
msgid "Waiting for device..."
msgstr "等待设备..."
@@ -3679,6 +3693,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "桥接的"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "创建:"
@@ -3767,11 +3784,14 @@ msgstr "å¼€"
msgid "open"
msgstr "开放å¼"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr "覆盖"
msgid "random"
-msgstr ""
+msgstr "éšæœº"
msgid "relay mode"
msgstr "中继模å¼"
@@ -3817,3 +3837,9 @@ msgstr "是"
msgid "« Back"
msgstr "« åŽé€€"
+
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4 WAN 状æ€"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6 WAN 状æ€"
diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po
index 82415865a5..653c093cdb 100644
--- a/modules/luci-base/po/zh-tw/base.po
+++ b/modules/luci-base/po/zh-tw/base.po
@@ -47,6 +47,9 @@ msgstr ""
msgid "-- match by uuid --"
msgstr ""
+msgid "-- please select --"
+msgstr ""
+
msgid "1 Minute Load:"
msgstr "1分é˜è² è¼‰"
@@ -388,6 +391,9 @@ msgstr ""
msgid "Apply unchecked"
msgstr ""
+msgid "Architecture"
+msgstr ""
+
msgid ""
"Assign a part of given length of every public IPv6-prefix to this interface"
msgstr ""
@@ -402,6 +408,9 @@ msgstr ""
msgid "Associated Stations"
msgstr "已連接站點"
+msgid "Associations"
+msgstr ""
+
msgid "Auth Group"
msgstr ""
@@ -1266,7 +1275,7 @@ msgstr "剩餘空間"
msgid ""
"Further information about WireGuard interfaces and peers at <a href=\"http://"
-"wireguard.io\">wireguard.io</a>."
+"wireguard.com\">wireguard.com</a>."
msgstr ""
msgid "GHz"
@@ -1393,8 +1402,8 @@ msgstr "IPv4版"
msgid "IPv4 Firewall"
msgstr "IPv4防ç«ç‰†"
-msgid "IPv4 WAN Status"
-msgstr "IPv4寬頻連線狀態"
+msgid "IPv4 Upstream"
+msgstr ""
msgid "IPv4 address"
msgstr "IPv4ä½å€"
@@ -1444,8 +1453,8 @@ msgstr ""
msgid "IPv6 ULA-Prefix"
msgstr ""
-msgid "IPv6 WAN Status"
-msgstr "IPv6寬頻連線狀態"
+msgid "IPv6 Upstream"
+msgstr ""
msgid "IPv6 address"
msgstr "IPv6ä½å€"
@@ -2547,14 +2556,14 @@ msgstr ""
"Configuration Protocol\">DHCP</abbr>-伺æœå™¨"
msgid ""
-"Really delete this interface? The deletion cannot be undone!\\nYou might "
-"lose access to this device if you are connected via this interface."
+"Really delete this interface? The deletion cannot be undone! You might lose "
+"access to this device if you are connected via this interface."
msgstr ""
"真的è¦åˆªé™¤é€™ä»‹é¢?無法復元刪除!\n"
"å‡å¦‚您è¦é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å­˜å–這個設備."
msgid ""
-"Really delete this wireless network? The deletion cannot be undone!\\nYou "
+"Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network."
msgstr ""
"真的è¦åˆªé™¤é€™å€‹ç„¡ç·šç¶²è·¯?無法復元的刪除!\n"
@@ -2565,14 +2574,14 @@ msgstr "確定è¦é‡ç½®å›žå¾©åŽŸå» ?"
#, fuzzy
msgid ""
-"Really shut down network?\\nYou might lose access to this device if you are "
+"Really shut down network? You might lose access to this device if you are "
"connected via this interface."
msgstr ""
"真的è¦åˆªé™¤é€™å€‹ç¶²è·¯ ?\n"
"å‡å¦‚您是é€éŽé€™å€‹ä»‹é¢é€£ç·šæ‚¨å¯èƒ½æœƒç„¡æ³•å­˜å–這個設備."
msgid ""
-"Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
+"Really shutdown interface \"%s\"? You might lose access to this device if "
"you are connected via this interface."
msgstr ""
"真的è¦é—œé–‰é€™å€‹ä»‹é¢ \"%s\" ?!\n"
@@ -3668,6 +3677,9 @@ msgstr "baseT"
msgid "bridged"
msgstr "已橋接"
+msgid "create"
+msgstr ""
+
msgid "create:"
msgstr "建立:"
@@ -3756,6 +3768,9 @@ msgstr "é–‹å•Ÿ"
msgid "open"
msgstr "打開"
+msgid "output"
+msgstr ""
+
msgid "overlay"
msgstr ""
@@ -3807,6 +3822,12 @@ msgstr "是的"
msgid "« Back"
msgstr "« 倒退"
+#~ msgid "IPv4 WAN Status"
+#~ msgstr "IPv4寬頻連線狀態"
+
+#~ msgid "IPv6 WAN Status"
+#~ msgstr "IPv6寬頻連線狀態"
+
#~ msgid "Apply"
#~ msgstr "套用"
diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua
index 38e5de7b39..5c630bb5ce 100644
--- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua
+++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua
@@ -351,7 +351,6 @@ if has_firewall then
fwzone.template = "cbi/firewall_zonelist"
fwzone.network = arg[1]
- fwzone.rmempty = false
function fwzone.cfgvalue(self, section)
self.iface = section
@@ -360,22 +359,16 @@ if has_firewall then
end
function fwzone.write(self, section, value)
- local zone = fw:get_zone(value)
-
- if not zone and value == '-' then
- value = m:formvalue(self:cbid(section) .. ".newzone")
- if value and #value > 0 then
- zone = fw:add_zone(value)
- else
- fw:del_network(section)
- end
- end
-
+ local zone = fw:get_zone(value) or fw:add_zone(value)
if zone then
fw:del_network(section)
zone:add_network(section)
end
end
+
+ function fwzone.remove(self, section)
+ fw:del_network(section)
+ end
end
diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
index cacaa25958..d51a72aba1 100644
--- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
+++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
@@ -390,22 +390,16 @@ network.novirtual = true
function network.write(self, section, value)
local i = nw:get_interface(section)
if i then
- if value == '-' then
- value = m:formvalue(self:cbid(section) .. ".newnet")
- if value and #value > 0 then
- local n = nw:add_network(value, {proto="none"})
- if n then n:add_interface(i) end
- else
- local n = i:get_network()
- if n then n:del_interface(i) end
- end
- else
- local v
- for _, v in ipairs(i:get_networks()) do
- v:del_interface(i)
- end
- for v in ut.imatch(value) do
- local n = nw:get_network(v)
+ local _, net, old, new = nil, nil, {}, {}
+
+ for _, net in ipairs(i:get_networks()) do
+ old[net:name()] = true
+ end
+
+ for net in ut.imatch(value) do
+ new[net] = true
+ if not old[net] then
+ local n = nw:get_network(net) or nw:add_network(net, { proto = "none" })
if n then
if not n:is_empty() then
n:set("type", "bridge")
@@ -414,6 +408,15 @@ function network.write(self, section, value)
end
end
end
+
+ for net, _ in pairs(old) do
+ if not new[net] then
+ local n = nw:get_network(net)
+ if n then
+ n:del_interface(i)
+ end
+ end
+ end
end
end
diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua
index 8277deb2f6..e8a3058826 100644
--- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua
+++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi_add.lua
@@ -94,14 +94,9 @@ function newnet.parse(self, section)
local net, zone
if has_firewall then
- local zval = fwzone:formvalue(section)
- zone = fw:get_zone(zval)
-
- if not zone and zval == '-' then
- zval = m:formvalue(fwzone:cbid(section) .. ".newzone")
- if zval and #zval > 0 then
- zone = fw:add_zone(zval)
- end
+ local value = fwzone:formvalue(section)
+ if value and #value > 0 then
+ zone = fw:get_zone(value) or fw:add_zone(value)
end
end
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
index 14be401697..420e5879fa 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
@@ -33,7 +33,7 @@
<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
<script type="text/javascript">//<![CDATA[
function iface_shutdown(id, reconnect) {
- if (!reconnect && !confirm(String.format('<%_Really shutdown interface "%s" ?\nYou might lose access to this device if you are connected via this interface.%>', id)))
+ if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shutdown interface "%s"? You might lose access to this device if you are connected via this interface.'))%>.format(id)))
return;
var d = document.getElementById(id + '-ifc-description');
@@ -67,7 +67,7 @@
}
function iface_delete(id) {
- if (!confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>'))
+ if (!confirm(<%=luci.http.write_json(translate('Really delete this interface? The deletion cannot be undone! You might lose access to this device if you are connected via this interface.'))%>))
return;
(new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' },
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm
index 31f1fed81f..ceb810018b 100644
--- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm
+++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm
@@ -101,9 +101,9 @@
<%+header%>
<% if not has_iwinfo then %>
- <div class="errorbox">
- <strong><%:Package libiwinfo required!%></strong><br />
- <%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%>
+ <div class="alert-message warning">
+ <h4><%:Package libiwinfo required!%></h4>
+ <p><%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%></p>
</div>
<% end %>
@@ -138,7 +138,7 @@
function wifi_shutdown(id, toggle) {
var reconnect = (toggle.getAttribute('active') == 'false');
- if (!reconnect && !confirm(String.format('<%:Really shut down network?\nYou might lose access to this device if you are connected via this interface.%>')))
+ if (!reconnect && !confirm(<%=luci.http.write_json(translate('Really shut down network? You might lose access to this device if you are connected via this interface.'))%>))
return;
is_reconnecting = true;
@@ -176,7 +176,7 @@
}
function wifi_delete(id) {
- if (!confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>'))
+ if (!confirm(<%=luci.http.write_json(translate('Really delete this wireless network? The deletion cannot be undone! You might lose access to this device if you are connected via this network.'))%>))
return;
(new XHR()).post('<%=url('admin/network/wireless_delete')%>/' + id, { token: '<%=token%>' },
diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm
index a71926141b..a56e4826a9 100644
--- a/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm
+++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm
@@ -238,9 +238,9 @@ end
<h2><%:Wireless Overview%></h2>
<% if not has_iwinfo then %>
- <div class="errorbox">
- <strong><%:Package libiwinfo required!%></strong><br />
- <%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%>
+ <div class="alert-message warning">
+ <h4><%:Package libiwinfo required!%></h4>
+ <p><%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%></p>
</div>
<% end %>
diff --git a/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua b/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua
index 46a8f49d97..056f6a6e76 100644
--- a/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua
+++ b/protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua
@@ -89,7 +89,7 @@ peers = map:section(
"wireguard_" .. ifname,
translate("Peers"),
translate("Further information about WireGuard interfaces and peers " ..
- "at <a href=\"http://wireguard.io\">wireguard.io</a>.")
+ "at <a href=\"http://wireguard.com\">wireguard.com</a>.")
)
peers.template = "cbi/tsection"
peers.anonymous = true
diff --git a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
index c8ce19aff1..4a40f6d680 100644
--- a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
+++ b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css
@@ -430,7 +430,6 @@ form .clearfix,
form .cbi-value {
margin-bottom: 18px;
zoom: 1;
- overflow: hidden;
}
form .clearfix:before, form .clearfix:after,
@@ -477,6 +476,7 @@ input[type=checkbox], input[type=radio] {
input,
textarea,
select,
+.cbi-dropdown,
.uneditable-input {
display: inline-block;
width: 210px;
@@ -487,6 +487,13 @@ select,
color: #808080;
border: 1px solid #ccc;
border-radius: 3px;
+ box-sizing: border-box;
+}
+
+.cbi-dropdown {
+ min-width: 210px;
+ max-width: 400px;
+ width: auto;
}
select {
@@ -1332,6 +1339,159 @@ footer {
background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
}
+.cbi-dropdown {
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ display: inline-flex;
+ padding: 0;
+ cursor: pointer;
+ height: auto;
+ background: linear-gradient(#fff 0%, #e9e8e6 100%);
+ position: relative;
+ color: #404040;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ color: #404040;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
.btn.active, .btn:active {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
}
@@ -1423,7 +1583,7 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner {
opacity: 0.4;
}
-.alert-message, .errorbox {
+.alert-message {
position: relative;
padding: 7px 15px;
margin-bottom: 18px;
@@ -1646,7 +1806,6 @@ table table td,
background-color: #FFFFFF;
border: 1px solid #CCCCCC;
padding: 2px;
- margin-left: 2px;
background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
border-radius: 4px;
@@ -1712,7 +1871,7 @@ table table td,
.zonebadge > em,
.zonebadge > strong {
- margin: 5px;
+ margin: 0 2px;
display: inline-block;
}
@@ -1720,6 +1879,10 @@ table table td,
width: 6em;
}
+.zonebadge > .ifacebadge {
+ margin-left: 2px;
+}
+
.zonebadge-empty {
border: 1px dashed #AAAAAA;
color: #AAAAAA;
@@ -1801,3 +1964,7 @@ div.cbi-value var,
line-height: 6px;
border: none;
}
+
+html body.apply-overlay-active {
+ height: calc(100vh - 63px);
+}
diff --git a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
index 39a55551ff..aaacf56b84 100644
--- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
+++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
@@ -190,22 +190,20 @@
</div>
</header>
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
- <div class="container">
+ <div id="maincontent" class="container">
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
<div class="alert-message warning">
<h4><%:No password set!%></h4>
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br>
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
</div>
- </div>
- <%- end -%>
+ <%- end -%>
- <noscript>
- <div class="alert-message warning">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
- </div>
- </noscript>
+ <noscript>
+ <div class="alert-message warning">
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
+ </div>
+ </noscript>
- <div id="maincontent" class="container">
<% if category then render_tabmenu(category, cattree) end %>
diff --git a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css
index cc9caac556..a9585cf40e 100755
--- a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css
+++ b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css
@@ -107,7 +107,8 @@ select {
}
select,
-input {
+input,
+.cbi-dropdown {
background-color: transparent;
color: rgba(0, 0, 0, .87);
border: none;
@@ -157,7 +158,7 @@ header {
transition: box-shadow .2s;
float: left;
position: fixed;
- z-index: 101;
+ z-index: 2000;
}
footer {
@@ -287,10 +288,9 @@ header > .container > .brand {
color: black;
}
-.errorbox,
.alert-message {
margin: 2rem 0 0 0;
- padding: 2rem;
+ padding: 1rem;
border: 0;
font-weight: normal;
font-style: normal;
@@ -303,16 +303,19 @@ header > .container > .brand {
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
}
-.errorbox {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
-}
-
.error {
color: red;
}
+.alert-message > h4 {
+ font-weight: bold;
+ font-size: 110%;
+}
+
+.alert-message > * {
+ margin: .5rem 0;
+}
+
#maincontent > .container > div:nth-child(1).alert-message.warning > a {
font: inherit;
overflow: visible;
@@ -450,11 +453,7 @@ fieldset {
font-style: normal;
line-height: 1;
font-family: inherit;
-
min-width: inherit;
- overflow-x: auto;
- overflow-y: hidden;
-
border-radius: 0;
background-color: #FFF;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
@@ -565,7 +564,7 @@ td > table > tbody > tr > td,
/* button style */
-.cbi-button {
+.btn, .cbi-button {
-webkit-appearance: none;
text-transform: uppercase;
color: rgba(0, 0, 0, 0.87);
@@ -588,8 +587,13 @@ td > table > tbody > tr > td,
user-select: none;
font-size: 0.8rem;
width: auto !important;
+ display: inline-block;
+ text-decoration: none;
}
+.btn:hover,
+.btn:focus,
+.btn:active,
.cbi-button:hover,
.cbi-button:focus,
.cbi-button:active {
@@ -599,15 +603,19 @@ td > table > tbody > tr > td,
color: rgba(0, 0, 0, 0.87);
}
+.btn:hover,
+.btn:focus,
.cbi-button:hover,
.cbi-button:focus {
box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
}
+.btn:active,
.cbi-button:active {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
+.btn:disabled,
.cbi-button:disabled {
cursor: not-allowed;
pointer-events: none;
@@ -615,6 +623,7 @@ td > table > tbody > tr > td,
box-shadow: none;
}
+.btn + .btn,
form.inline + form.inline,
.cbi-button + .cbi-button {
margin-left: 0.6rem;
@@ -793,6 +802,172 @@ form.inline + form.inline,
font-size: small;
}
+
+.cbi-dropdown {
+ display: inline-flex;
+ cursor: pointer;
+ position: relative;
+ padding: 0;
+ height: auto;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open {
+ border: 2px outset #eee;
+ flex-basis: 15px;
+ background: #eee;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+ height: auto;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+ align-items: center;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
+.cbi-dropdown .zonebadge {
+ width: 100%;
+}
+
+.cbi-dropdown[open] .zonebadge {
+ width: auto;
+}
+
+
/* luci */
.hidden {
@@ -828,17 +1003,20 @@ form.inline + form.inline,
}
/* select */
-.cbi-value-field .cbi-input-select {
+.cbi-value-field .cbi-dropdown {
min-width: 15rem;
}
+.cbi-value-field .cbi-input-select {
+ width: 15rem;
+}
+
.ifacebadge {
display: inline-flex;
border-bottom: 1px solid #CCCCCC;
padding: 0.5rem 1rem;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ background: #fff;
}
td > .ifacebadge,
@@ -847,12 +1025,17 @@ td > .ifacebadge,
font-size: 0.9rem;
}
+.ifacebadge > em,
.ifacebadge > img {
- float: right;
- margin: 0 0.3rem;
+ display: inline-block;
+ margin: 0 .2rem;
align-self: start;
}
+.ifacebadge > img + img {
+ margin: 0 .2rem 0 0;
+}
+
.network-status-table {
display: flex;
flex-wrap: wrap;
@@ -1027,8 +1210,8 @@ td > .ifacebadge,
}
.zonebadge > .ifacebadge {
- padding: 0.2rem 1rem;
- margin: 0.3rem;
+ padding: .2rem .3rem;
+ margin: 0.1rem 0.2rem;
border: 1px solid #6C6C6C;
}
@@ -1038,6 +1221,12 @@ td > .ifacebadge,
margin-top: 0.3rem;
}
+.zonebadge > em,
+.zonebadge > strong {
+ margin: 0 0.2rem;
+ display: inline-block;
+}
+
.cbi-value-field .cbi-input-checkbox,
.cbi-value-field .cbi-input-radio {
margin-top: 0.5rem;
@@ -1062,10 +1251,14 @@ td > .ifacebadge,
margin-top: -0.5rem;
}
-.cbi-section-table-row > .cbi-value-field .cbi-input-select {
+.cbi-section-table-row > .cbi-value-field .cbi-dropdown {
min-width: 7rem;
}
+.cbi-section-table-row > .cbi-value-field .cbi-input-select {
+ width: 7rem;
+}
+
.cbi-section-create > .cbi-button-add {
margin: 0.5rem;
}
@@ -1336,6 +1529,7 @@ body.lang_pl.node-main-login .cbi-value-title {
width: calc(100% - 13rem);
}
+ .btn,
.cbi-button {
padding: 0.3rem 0.6rem;
font-size: 0.8rem;
@@ -1595,8 +1789,6 @@ body.lang_pl.node-main-login .cbi-value-title {
line-height: 1;
font-family: inherit;
min-width: inherit;
- overflow-x: auto;
- overflow-y: hidden;
border-radius: 0;
background-color: #FFF;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12);
@@ -1615,33 +1807,36 @@ body.lang_pl.node-main-login .cbi-value-title {
@media screen and (min-width: 992px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 20rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 20rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 20rem;
}
}
@media screen and (min-width: 1280px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 22rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 22rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 22rem;
}
}
@media screen and (min-width: 1600px) {
.cbi-value input[type="password"],
- .cbi-value input[type="text"] {
- min-width: 25rem;
+ .cbi-value input[type="text"],
+ .cbi-value-field .cbi-input-select {
+ width: 25rem;
}
- .cbi-value-field .cbi-input-select {
+ .cbi-value-field .cbi-dropdown {
min-width: 25rem;
}
}
diff --git a/themes/luci-theme-material/luasrc/view/themes/material/header.htm b/themes/luci-theme-material/luasrc/view/themes/material/header.htm
index 0aca882c05..b6341a2c35 100644
--- a/themes/luci-theme-material/luasrc/view/themes/material/header.htm
+++ b/themes/luci-theme-material/luasrc/view/themes/material/header.htm
@@ -183,35 +183,35 @@
<!DOCTYPE html>
<html lang="<%=luci.i18n.context.lang%>">
<head>
- <meta charset="utf-8">
- <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
- <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
- <meta name="format-detection" content="telephone=no, email=no"/>
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="mobile-web-app-capable" content="yes">
- <meta name="x5-fullscreen" content="true">
- <meta name="full-screen" content="yes">
- <meta name="x5-page-mode" content="app">
- <meta name="browsermode" content="application">
- <meta name="theme-color" content="#0099CC">
- <meta name="msapplication-tap-highlight" content="no">
- <meta name="msapplication-TileColor" content="#0099CC">
-
- <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
- <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
- <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/>
- <link rel="icon" href="<%=media%>/logo.png" sizes="144x144">
- <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144">
-
- <link rel="stylesheet" href="<%=media%>/css/style.css">
- <link rel="shortcut icon" href="<%=media%>/favicon.ico">
- <% if node and node.css then %>
- <link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
- <% end -%>
- <% if css then %>
- <style title="text/css"><%= css %></style>
- <% end -%>
- <script src="<%=resource%>/xhr.js"></script>
+ <meta charset="utf-8">
+ <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
+ <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
+ <meta name="format-detection" content="telephone=no, email=no"/>
+ <meta name="apple-mobile-web-app-capable" content="yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="x5-fullscreen" content="true">
+ <meta name="full-screen" content="yes">
+ <meta name="x5-page-mode" content="app">
+ <meta name="browsermode" content="application">
+ <meta name="theme-color" content="#0099CC">
+ <meta name="msapplication-tap-highlight" content="no">
+ <meta name="msapplication-TileColor" content="#0099CC">
+
+ <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
+ <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI">
+ <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/>
+ <link rel="icon" href="<%=media%>/logo.png" sizes="144x144">
+ <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144">
+
+ <link rel="stylesheet" href="<%=media%>/css/style.css">
+ <link rel="shortcut icon" href="<%=media%>/favicon.ico">
+ <% if node and node.css then %>
+ <link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
+ <% end -%>
+ <% if css then %>
+ <style title="text/css"><%= css %></style>
+ <% end -%>
+ <script src="<%=resource%>/xhr.js"></script>
</head>
<body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>">
<header>
@@ -228,26 +228,27 @@
</div>
</header>
<div class="main">
- <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
- <div class="main-left">
+ <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
+ <div class="main-left">
<% render_topmenu() %>
- </div>
+ </div>
<div class="main-right">
- <div class="darkMask"></div>
- <div id="maincontent">
- <div class="container">
- <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
- <div class="alert-message warning">
- <h4><%:No password set!%></h4>
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br>
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
- </div>
- <%- end -%>
- <% if category then render_tabmenu(category, cattree) end %>
+ <div class="darkMask"></div>
+ <div id="maincontent">
+ <div class="container">
+ <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%>
+ <div class="alert-message warning">
+ <h4><%:No password set!%></h4>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
+ </div>
+ <%- end -%>
<noscript>
<div class="alert-message warning">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
</div>
- </noscript>
+ </noscript>
+
+ <% if category then render_tabmenu(category, cattree) end %>
diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
index b474bb9fe1..1d5ac8ab24 100644
--- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
+++ b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css
@@ -27,6 +27,7 @@ body {
* {
margin: 0;
padding: 0;
+ box-sizing: border-box;
}
.table { display: table; }
@@ -181,6 +182,33 @@ code {
background-color: white;
}
+.alert-message {
+ font-size: 9pt;
+ font-weight: normal;
+ padding: .5em;
+ border-radius: 3px;
+ color: #000;
+}
+
+.alert-message.notice {
+ background: linear-gradient(#ccc 0%, #eee 100%);
+ color: #4a6b7c;
+}
+
+.alert-message.warning {
+ background: linear-gradient(#dda 0%, #dd8 100%);
+ color: #c00;
+}
+
+.alert-message > * {
+ margin: .5em;
+}
+
+.alert-message > h4 {
+ font-weight: bold;
+ font-size: 10pt;
+}
+
div.hostinfo {
float: left;
margin: 0;
@@ -429,13 +457,20 @@ select:hover {
color: #000000;
}
+input[type=text],
+input[type=password] {
+ padding: 1px 3px;
+}
+
select,
input[type=text],
input[type=password] {
+ font-size: inherit;
width: 20em;
}
.td select,
+.td .cbi-dropdown,
.td input[type=text],
.td input[type=password] {
width: 99%;
@@ -447,18 +482,23 @@ img.cbi-image-button {
vertical-align: middle;
}
-.cbi-button {
+.btn, .cbi-button {
padding: 2px;
border-radius: 3px;
border: 1px solid #aaa;
background: #eee 1px center no-repeat;
+ text-decoration: none;
+ color: #000;
+ display: inline-block;
}
-.cbi-button:hover {
+.btn:hover, .cbi-button:hover {
border-color: #4a6b7c;
background-color: #fff;
}
+.btn[disabled],
+.btn[disabled]:hover,
.cbi-button[disabled],
.cbi-button[disabled]:hover {
opacity: .6;
@@ -741,6 +781,7 @@ div.cbi-section-create {
vertical-align: top;
}
+div.cbi-section-create .btn,
div.cbi-section-create .cbi-button {
margin: 0.25em;
}
@@ -812,13 +853,6 @@ div.cbi-section-remove {
vertical-align: bottom;
}
-div.cbi-error {
- font-size: 95%;
- font-weight: bold;
- color: #ff0000;
- background-color: #ffffff;
-}
-
.td.cbi-value-error {
border-color: red;
}
@@ -894,6 +928,169 @@ div.cbi-tab-descr {
padding: 0.5em 0.5em 0.5em 2em;
}
+
+.cbi-dropdown {
+ border: 1px inset #000;
+ display: inline-flex;
+ cursor: pointer;
+ background: #eee;
+ position: relative;
+ padding: 0;
+ color: #000;
+ min-width: 20em;
+}
+
+.cbi-dropdown:hover {
+ background: #fff;
+}
+
+.cbi-dropdown:focus {
+ outline: 2px solid #4b6e9b;
+}
+
+.cbi-dropdown > ul {
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ overflow-x: hidden;
+ overflow-y: auto;
+ display: flex;
+ width: 100%;
+}
+
+.cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-dropdown > .open {
+ border: 2px outset #eee;
+ flex-basis: 15px;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ flex-grow: 0;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ text-align: center;
+ line-height: 2em;
+ padding: 0 .25em;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ color: #777;
+ font-weight: bold;
+ text-shadow: 1px 1px 0px #fff;
+ display: none;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ padding: .25em;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+ flex-grow: 1;
+ align-items: center;
+ align-self: center;
+ min-height: 20px;
+}
+
+.cbi-dropdown > ul > li .hide-open { display: initial; }
+.cbi-dropdown > ul > li .hide-close { display: none; }
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: 1px solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ vertical-align: middle;
+ margin-right: .25em;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ margin: 0;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] {
+ position: relative;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ display: block;
+ background: #f6f6f5;
+ border: 1px solid #918e8c;
+ box-shadow: 0 0 4px #918e8c;
+ position: absolute;
+ z-index: 1000;
+ max-width: none;
+ min-width: 100%;
+ width: auto;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ flex-grow: 1;
+ display: flex;
+ align-items: center;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
+.cbi-dropdown[open] > ul.dropdown > li .hide-close { display: initial; }
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: 1px solid #ccc;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: .6;
+}
+
+
.left {
text-align: left !important;
}
@@ -934,17 +1131,6 @@ div.cbi-tab-descr {
padding: 0.5em;
}
-.errorbox {
- border: 1px solid #FF0000;
- background-color: #FFCCCC;
- padding: 5px;
- margin-bottom: 5px;
-}
-
-.errorbox a {
- color: #000000 !important;
-}
-
.ifacebadge, .ifacebox {
display: inline-flex;
@@ -964,9 +1150,16 @@ div.cbi-tab-descr {
background: #90c0e0;
}
-.ifacebadge > img {
+.ifacebadge, .zonebadge {
+ align-items: center;
+}
+
+.ifacebadge > img,
+.ifacebadge > em {
margin-right: 5px;
align-self: start;
+ display: inline-block;
+ height: 16px;
}
.ifacebadge-active {
@@ -1000,7 +1193,7 @@ div.cbi-tab-descr {
.network-status-table .ifacebox-body {
display: flex;
flex-direction: column;
- height: 100%;
+ flex: 1 0;
}
.network-status-table .ifacebox-body > span {
@@ -1026,12 +1219,12 @@ div.cbi-tab-descr {
display: inline-block;
white-space: nowrap;
cursor: pointer;
+ border-radius: 3px;
}
-.zonebadge em,
-.zonebadge strong {
+.zonebadge > em,
+.zonebadge > strong {
margin: 3px;
- display: inline-block;
}
.zonebadge input {
@@ -1039,6 +1232,18 @@ div.cbi-tab-descr {
height: 1.5em;
}
+.zonebadge .ifacebadge,
+.cbi-dropdown .ifacebadge {
+ margin: 0 .125em;
+}
+
+.zonebadge .ifacebadge img,
+.zonebadge .ifacebadge em,
+.cbi-dropdown .ifacebadge img,
+.cbi-dropdown .ifacebadge em {
+ margin: 0 1px;
+}
+
.zonebadge-empty {
border: 1px dashed #AAAAAA;
color: #AAAAAA;
diff --git a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
index 5b39f05af7..cbf02a76cd 100644
--- a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
+++ b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm
@@ -167,16 +167,16 @@
<div id="maincontent">
<noscript>
- <div class="errorbox">
- <strong><%:JavaScript required!%></strong><br />
- <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+ <div class="alert-message warning">
+ <h4><%:JavaScript required!%></h4>
+ <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p>
</div>
</noscript>
<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") and category ~= "failsafe" then -%>
- <div class="errorbox">
- <strong><%:No password set!%></strong><br />
- <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br />
- <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
+ <div class="alert-message warning">
+ <h4><%:No password set!%></h4>
+ <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p>
+ <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div>
</div>
<%- end -%>