summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-adblock/luasrc/controller/adblock.lua6
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua61
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm80
-rw-r--r--applications/luci-app-adblock/luasrc/view/adblock/logread.htm8
-rw-r--r--applications/luci-app-adblock/po/it/adblock.po37
-rw-r--r--applications/luci-app-adblock/po/ja/adblock.po49
-rw-r--r--applications/luci-app-adblock/po/pt-br/adblock.po37
-rw-r--r--applications/luci-app-adblock/po/ru/adblock.po391
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po37
-rw-r--r--applications/luci-app-adblock/po/templates/adblock.pot37
-rw-r--r--applications/luci-app-adblock/po/zh-cn/adblock.po37
-rw-r--r--applications/luci-app-adblock/po/zh-tw/adblock.po37
-rw-r--r--applications/luci-app-advanced-reboot/Makefile4
-rw-r--r--applications/luci-app-advanced-reboot/README.md13
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua116
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm8
-rw-r--r--applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po163
-rw-r--r--applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po (renamed from applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po)24
-rw-r--r--applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot (renamed from applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot)24
-rw-r--r--applications/luci-app-aria2/po/ru/aria2.po222
-rw-r--r--applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm360
-rw-r--r--applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json6
-rw-r--r--applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js402
-rw-r--r--applications/luci-app-bcp38/po/ru/bcp38.po70
-rw-r--r--applications/luci-app-clamav/po/ru/clamav.po133
-rw-r--r--applications/luci-app-commands/po/ru/commands.po54
-rw-r--r--applications/luci-app-ddns/po/ru/ddns.po441
-rw-r--r--applications/luci-app-diag-core/po/ru/diag_core.po32
-rw-r--r--applications/luci-app-dnscrypt-proxy/po/ru/dnscrypt-proxy.po276
-rw-r--r--applications/luci-app-dynapoint/po/ru/dynapoint.po114
-rw-r--r--applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm11
-rw-r--r--applications/luci-app-firewall/po/ru/firewall.po123
-rw-r--r--applications/luci-app-fwknopd/po/ru/fwknopd.po115
-rw-r--r--applications/luci-app-hd-idle/po/ru/hd_idle.po29
-rw-r--r--applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po174
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua4
-rw-r--r--applications/luci-app-mwan3/po/ja/mwan3.po3
-rw-r--r--applications/luci-app-mwan3/po/ru/mwan3.po663
-rw-r--r--applications/luci-app-mwan3/po/templates/mwan3.pot3
-rw-r--r--applications/luci-app-mwan3/po/zh-cn/mwan3.po5
-rw-r--r--applications/luci-app-mwan3/po/zh-tw/mwan3.po5
-rw-r--r--applications/luci-app-privoxy/po/ru/privoxy.po512
-rw-r--r--applications/luci-app-radicale/po/ru/radicale.po448
-rw-r--r--applications/luci-app-samba/po/ru/samba.po47
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua2
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua5
-rw-r--r--applications/luci-app-shairplay/po/ru/shairplay.po54
-rw-r--r--applications/luci-app-simple-adblock/po/ru/simple-adblock.po94
-rw-r--r--applications/luci-app-splash/po/ru/splash.po126
-rw-r--r--applications/luci-app-statistics/po/ru/rrdtool.po28
-rw-r--r--applications/luci-app-statistics/po/ru/statistics.po378
-rw-r--r--applications/luci-app-tinyproxy/po/ru/tinyproxy.po149
-rw-r--r--applications/luci-app-travelmate/luasrc/controller/travelmate.lua16
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua116
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua143
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua142
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm3
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm7
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm23
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm26
-rw-r--r--applications/luci-app-travelmate/po/ja/travelmate.po93
-rw-r--r--applications/luci-app-travelmate/po/pt-br/travelmate.po76
-rw-r--r--applications/luci-app-travelmate/po/ru/travelmate.po382
-rw-r--r--applications/luci-app-travelmate/po/templates/travelmate.pot76
-rw-r--r--applications/luci-app-uhttpd/po/ru/uhttpd.po214
-rw-r--r--applications/luci-app-upnp/po/ja/upnp.po8
-rw-r--r--applications/luci-app-upnp/po/ru/upnp.po52
-rw-r--r--applications/luci-app-ushare/po/ru/ushare.po22
-rw-r--r--applications/luci-app-vnstat/po/ru/vnstat.po28
-rw-r--r--applications/luci-app-voice-core/po/ru/voice_core.po21
-rw-r--r--applications/luci-app-voice-diag/po/ru/voice_diag.po28
-rw-r--r--applications/luci-app-vpnbypass/po/ru/vpnbypass.po95
-rw-r--r--applications/luci-app-watchcat/po/ru/watchcat.po36
-rw-r--r--applications/luci-app-wifischedule/po/ru/wifischedule.po113
-rw-r--r--applications/luci-app-wireguard/po/ru/wireguard.po77
-rw-r--r--applications/luci-app-wol/po/ru/wol.po38
76 files changed, 6665 insertions, 1427 deletions
diff --git a/applications/luci-app-adblock/luasrc/controller/adblock.lua b/applications/luci-app-adblock/luasrc/controller/adblock.lua
index b74858400b..0cfbb5f7f6 100644
--- a/applications/luci-app-adblock/luasrc/controller/adblock.lua
+++ b/applications/luci-app-adblock/luasrc/controller/adblock.lua
@@ -1,4 +1,4 @@
--- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
module("luci.controller.adblock", package.seeall)
@@ -27,9 +27,9 @@ function logread()
local logfile
if nixio.fs.access("/var/log/messages") then
- logfile = util.trim(util.exec("cat /var/log/messages | grep 'adblock'"))
+ logfile = util.trim(util.exec("cat /var/log/messages | grep -F 'adblock-'"))
else
- logfile = util.trim(util.exec("logread -e 'adblock'"))
+ logfile = util.trim(util.exec("logread -e 'adblock-'"))
end
templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
end
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 4bb404c25c..499b8dc7a9 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
@@ -1,4 +1,4 @@
--- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
@@ -74,7 +74,7 @@ end
o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
translate("List of supported DNS backends with their default list export directory.<br />")
.. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
-o2:value("dnsmasq", "dnsmasq (/tmp/dnsmasq.d)")
+o2:value("dnsmasq", "dnsmasq (/tmp)")
o2:value("unbound", "unbound (/var/lib/unbound)")
o2:value("named", "named (/var/lib/bind)")
o2:value("kresd", "kresd (/etc/kresd)")
@@ -98,10 +98,9 @@ o3.rmempty = false
-- Runtime information
-ds = s:option(DummyValue, "", translate("Runtime Information"))
-ds.template = "cbi/nullsection"
+ds = m:section(NamedSection, "global", "adblock", translate("Runtime Information"))
-dv1 = s:option(DummyValue, "", translate("Adblock Status"))
+dv1 = ds:option(DummyValue, "", translate("Adblock Status"))
dv1.template = "adblock/runtime"
if parse == nil then
dv1.value = translate("n/a")
@@ -117,7 +116,7 @@ else
end
end
-dv2 = s:option(DummyValue, "", translate("Adblock Version"))
+dv2 = ds:option(DummyValue, "", translate("Adblock Version"))
dv2.template = "adblock/runtime"
if parse == nil then
dv2.value = translate("n/a")
@@ -125,7 +124,7 @@ else
dv2.value = version
end
-dv3 = s:option(DummyValue, "", translate("Download Utility (SSL Library)"),
+dv3 = ds:option(DummyValue, "", translate("Download Utility (SSL Library)"),
translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'."))
dv3.template = "adblock/runtime"
if parse == nil then
@@ -134,7 +133,7 @@ else
dv3.value = fetch
end
-dv4 = s:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
+dv4 = ds:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
dv4.template = "adblock/runtime"
if parse == nil then
dv4.value = translate("n/a")
@@ -142,7 +141,7 @@ else
dv4.value = backend
end
-dv5 = s:option(DummyValue, "", translate("Overall Domains"))
+dv5 = ds:option(DummyValue, "", translate("Overall Domains"))
dv5.template = "adblock/runtime"
if parse == nil then
dv5.value = translate("n/a")
@@ -150,7 +149,7 @@ else
dv5.value = domains
end
-dv6 = s:option(DummyValue, "", translate("Last Run"))
+dv6 = ds:option(DummyValue, "", translate("Last Run"))
dv6.template = "adblock/runtime"
if parse == nil then
dv6.value = translate("n/a")
@@ -163,8 +162,8 @@ end
bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
translate("Available blocklist sources. ")
.. translate("List URLs and Shallalist category selections are configurable in the 'Advanced' section.<br />")
- .. translate("Caution: To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please do not select too many lists - 5-6 should be sufficient!"))
-bl.template = "cbi/tblsection"
+ .. translate("Caution: To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please do not select more than five blocklist sources!"))
+bl.template = "adblock/blocklist"
name = bl:option(Flag, "enabled", translate("Enabled"))
name.rmempty = false
@@ -223,20 +222,38 @@ e7 = e:option(Flag, "adb_whitelist_mode", translate("Whitelist Mode"),
e7.default = e7.disabled
e7.rmempty = true
-e8 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
+e8 = e:option(Flag, "adb_dnsflush", translate("Flush DNS Cache"),
+ translate("Flush DNS Cache after adblock processing."))
+e8.default = e8.disabled
+e8.rmempty = true
+
+e9 = e:option(Flag, "adb_notify", translate("Email Notification"),
+ translate("Send notification emails in case of a processing error or if domain count is &le; 0.<br />")
+ .. translate("Please note: this needs additional 'mstmp' installation and setup (see readme)."))
+e9.default = e9.disabled
+e9.rmempty = true
+
+e10 = e:option(Value, "adb_notifycnt", translate("Email Notification Count"),
+ translate("Raise the minimum email notification count, to get emails if the overall count is less or equal to the given limit (default 0),<br />")
+ .. translate("e.g. to receive an email notification with every adblock update set this value to 150000."))
+e10.default = 0
+e10.datatype = "min(0)"
+e10.optional = true
+
+e11 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
translate("Target directory for the generated blocklist 'adb_list.overall'."))
-e8.datatype = "directory"
-e8.optional = true
+e11.datatype = "directory"
+e11.optional = true
-e9 = e:option(Value, "adb_whitelist", translate("Whitelist File"),
+e12 = e:option(Value, "adb_whitelist", translate("Whitelist File"),
translate("Full path to the whitelist file."))
-e9.datatype = "file"
-e9.default = "/etc/adblock/adblock.whitelist"
-e9.optional = true
+e12.datatype = "file"
+e12.default = "/etc/adblock/adblock.whitelist"
+e12.optional = true
-e10 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
+e13 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
translate("Additional trigger delay in seconds before adblock processing begins."))
-e10.datatype = "range(1,60)"
-e10.optional = true
+e13.datatype = "range(1,60)"
+e13.optional = true
return m
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
new file mode 100644
index 0000000000..aae64075ff
--- /dev/null
+++ b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm
@@ -0,0 +1,80 @@
+<%#
+Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%-
+local rowcnt = 1
+function rowstyle()
+ rowcnt = rowcnt + 1
+ return (rowcnt % 2) + 1
+end
+
+function width(o)
+ if o.width then
+ if type(o.width) == 'number' then
+ return ' style="width:%dpx"' % o.width
+ end
+ return ' style="width:%s"' % o.width
+ end
+ return ''
+end
+-%>
+
+<style type="text/css">
+<!--
+.cbi-section-table-cell,
+.cbi-section-table-row
+{
+ text-align:left;
+ margin-right:auto;
+ margin-left:0px;
+}
+-->
+</style>
+
+<fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
+ <% if self.title then -%>
+ <legend><%=self.title%></legend>
+ <%- end %>
+ <div class="cbi-section-descr"><%=self.description%></div>
+ <div class="cbi-section-node">
+ <%- local count = 0 -%>
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-titles">
+ <%- if self.sectionhead then -%>
+ <th class="cbi-section-table-cell"><%=self.sectionhead%></th>
+ <%- else -%>
+ <th>&#160;</th>
+ <%- end -%>
+ <%- for i, k in pairs(self.children) do -%>
+ <th class="cbi-section-table-cell"<%=width(k)%>>
+ <%-=k.title-%>
+ </th>
+ <%- count = count + 1; end; -%>
+ </tr>
+ <%- local isempty = true
+ for i, k in ipairs(self:cfgsections()) do
+ section = k
+ isempty = false
+ scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" }
+ -%>
+ <tr class="cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>">
+ <th><%=k%></th>
+ <%-
+ for k, node in ipairs(self.children) do
+ if not node.optional then
+ node:render(section, scope or {})
+ end
+ end
+ -%>
+ </tr>
+ <%- end -%>
+ <%- if isempty then -%>
+ <tr class="cbi-section-table-row">
+ <td colspan="<%=count%>"><em><br /><%:This section contains no values yet%></em></td>
+ </tr>
+ <%- end -%>
+ </table>
+ </div>
+</fieldset>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
index 5e25a549c6..082ec806f8 100644
--- a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
+++ b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
@@ -1,5 +1,5 @@
<%#
-Copyright 2017 Dirk Brenken (dev@brenken.org)
+Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
@@ -11,4 +11,10 @@ This is free software, licensed under the Apache License, Version 2.0
<textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
</fieldset>
</div>
+
+<script type="text/javascript">
+ var textarea = document.getElementById('logread_id');
+ textarea.scrollTop = textarea.scrollHeight;
+</script>
+
<%+footer%>
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po
index af3414c997..6f3b53e4ff 100644
--- a/applications/luci-app-adblock/po/it/adblock.po
+++ b/applications/luci-app-adblock/po/it/adblock.po
@@ -51,7 +51,7 @@ msgstr "Fonti lista di Blocco"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -109,6 +109,12 @@ msgstr "Modifica Configurazione"
msgid "Edit Whitelist"
msgstr "Modifica Lista Bianca"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "Attiva Adblock"
@@ -130,6 +136,12 @@ msgstr "Abilitato"
msgid "Extra Options"
msgstr "Opzioni Extra"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -208,6 +220,11 @@ msgid "Please edit this file directly in a terminal session."
msgstr ""
"Per favore modifica questo file direttamente in una sessione al terminale."
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -217,6 +234,11 @@ msgstr "Interrogazione"
msgid "Query domains"
msgstr "Interrogazione domini"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
@@ -233,6 +255,11 @@ msgstr "Ric. SSL"
msgid "Save"
msgstr "Salva"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr "Innesco d'Avvio"
@@ -290,6 +317,9 @@ msgstr ""
"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
"solo ad adblock."
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -321,6 +351,11 @@ msgstr "Sì"
msgid "disabled"
msgstr "disabilitato"
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr "abilitato"
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po
index becef993fd..f43aafb6f4 100644
--- a/applications/luci-app-adblock/po/ja/adblock.po
+++ b/applications/luci-app-adblock/po/ja/adblock.po
@@ -52,11 +52,8 @@ msgstr "ブロックリスト提供元"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
-"警告: RAM の空き容量が 64MB に満たないメモリー容量の小さいデバイスでは、 "
-"OutOfMemory (OOM) 例外を防ぐために、多くのリストを選択しないようにしてくださ"
-"い。5 - 6個のリストで十分です。"
msgid ""
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
@@ -120,6 +117,12 @@ msgstr "設定の編集"
msgid "Edit Whitelist"
msgstr "ホワイトリストの編集"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "Adblock の有効化"
@@ -143,6 +146,12 @@ msgstr "有効"
msgid "Extra Options"
msgstr "拡張オプション"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -223,6 +232,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "ターミナル セッションで直接このファイルを編集してください。"
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。"
@@ -234,6 +248,11 @@ msgstr "検索"
msgid "Query domains"
msgstr "ドメインの検索"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
@@ -250,6 +269,11 @@ msgstr "SSL 必須"
msgid "Save"
msgstr "保存"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr "スタートアップ トリガ"
@@ -309,6 +333,9 @@ msgstr ""
"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
"ます。"
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -340,6 +367,11 @@ msgstr "はい"
msgid "disabled"
msgstr "無効"
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr "有効"
@@ -351,3 +383,12 @@ msgstr "利用不可"
msgid "paused"
msgstr "一時停止"
+
+#~ msgid ""
+#~ "Caution: To prevent OOM exceptions on low memory devices with less than "
+#~ "64 MB free RAM, please do not select too many lists - 5-6 should be "
+#~ "sufficient!"
+#~ msgstr ""
+#~ "警告: RAM の空き容量が 64MB に満たないメモリー容量の小さいデバイスでは、 "
+#~ "OutOfMemory (OOM) 例外を防ぐために、多くのリストを選択しないようにしてくだ"
+#~ "さい。5 - 6個のリストで十分です。"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index f51791f48d..e08ad6c740 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -54,7 +54,7 @@ msgstr "Fontes de listas de bloqueio"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -110,6 +110,12 @@ msgstr "Editar Configuração"
msgid "Edit Whitelist"
msgstr "Editar Lista Permitida"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "Habilitar adblock"
@@ -130,6 +136,12 @@ msgstr "Habilitado"
msgid "Extra Options"
msgstr "Opções adicionais"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -201,6 +213,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "Por favor edite esse arquivo direto em uma sessão de terminal."
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -210,6 +227,11 @@ msgstr "Consulta"
msgid "Query domains"
msgstr "Consulta de domínios"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
@@ -225,6 +247,11 @@ msgstr "req. de SSL"
msgid "Save"
msgstr "Salvar"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr ""
@@ -281,6 +308,9 @@ msgstr ""
"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
"adblock apenas."
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -310,6 +340,11 @@ msgstr "Sim"
msgid "disabled"
msgstr ""
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr ""
diff --git a/applications/luci-app-adblock/po/ru/adblock.po b/applications/luci-app-adblock/po/ru/adblock.po
new file mode 100644
index 0000000000..8400c6e146
--- /dev/null
+++ b/applications/luci-app-adblock/po/ru/adblock.po
@@ -0,0 +1,391 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: adblock\n"
+"POT-Creation-Date: 2017-10-22 13:00+0300\n"
+"PO-Revision-Date: 2018-01-06 12:37+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "-------"
+msgstr "-------"
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Ведение системного журала Adblock-ом"
+
+msgid "Adblock Status"
+msgstr "Состояние Adblock-а"
+
+msgid "Adblock Version"
+msgstr "Версия Adblock-а"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Дополнительная задержка в секундах до начала работы Adblock-a."
+
+msgid "Advanced"
+msgstr "Дополнительно"
+
+msgid "Available blocklist sources."
+msgstr "Источники списков блокировки. "
+
+msgid "Backup Directory"
+msgstr "Папка для бэкапа"
+
+msgid "Backup Mode"
+msgstr "Режим сохранения бекапа"
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+"Блокировать доступ ко всем доменам, кроме тех, которые явно перечислены в "
+"файле Белого списка."
+
+msgid "Blocklist Sources"
+msgstr "Источники списков блокировки"
+
+msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select more than five blocklist sources!"
+msgstr ""
+"ВНИМАНИЕ: Для предотвращения возможного программного сбоя и перезагрузки, на "
+"устройствах с объемом оперативной памяти менее 64MB, не выбирайте больше 5 "
+"списков."
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Выберите 'none', чтобы отключить автоматический старт, 'timed', чтобы "
+"использовать дефолтную задержку (по умолчанию 30 сек.) или выберите другой "
+"интерфейс запуска."
+
+msgid "Collecting data..."
+msgstr "Сбор информации..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Настройка Adblock. Приложения для блокировки ненадежных или добавления "
+"доверенных доменов используя DNS. "
+
+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)"
+
+msgid "DNS Directory"
+msgstr "Папка DNS"
+
+msgid "Description"
+msgstr "Описание"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Не обновляйте списки блокировок автоматически во время запуска, вместо этого "
+"используйте резервные копии списков блокировок."
+
+msgid "Download Utility (SSL Library)"
+msgstr "Загрузить утилиту (библиотека SSL)"
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+"Устанавливая пакет с помощью opkg, используйте '--force-maintainer', чтобы "
+"перезаписать существующий config файл или загрузить новый дефолтный config "
+"файл <a href=\"%s\" target=\"_blank\">здесь</a>"
+
+msgid "Edit Blacklist"
+msgstr "Редактировать Черный список"
+
+msgid "Edit Configuration"
+msgstr "Редактировать config файл"
+
+msgid "Edit Whitelist"
+msgstr "Редактировать Белый список"
+
+msgid "Email Notification"
+msgstr "Уведомление на email"
+
+msgid "Email Notification Count"
+msgstr "Кол-во уведомлений на email"
+
+msgid "Enable Adblock"
+msgstr "Включить Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Включить сохранение списка блокировок"
+
+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 "Включите подробное ведение журнала отладки в случае ошибки обработки."
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid "Extra Options"
+msgstr "Дополнительные настройки"
+
+msgid "Flush DNS Cache"
+msgstr "Очистка кэша DNS"
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr "Очистки DNS-кэша после обработки Adblock-ом."
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Для SSL-защищенных источников списков блокировки, вам нужны подходящие SSL "
+"библиотеки, например 'libustream-ssl' или wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+"Для получения дополнительной информации <a href=\"%s\" target=\"_blank\"> "
+"смотрите онлайн документацию</a>."
+
+msgid "Force Local DNS"
+msgstr "Назначить локальный DNS"
+
+msgid "Force Overall Sort"
+msgstr "Назначить полную сортировку"
+
+msgid "Full path to the whitelist file."
+msgstr "Полный путь к файлу Белого списка."
+
+msgid "Input file not found, please check your configuration."
+msgstr "Введенный файл не найден, проверьте ваши настройки."
+
+msgid "Invalid domain specified!"
+msgstr "Задан недопустимый домен!"
+
+msgid "Last Run"
+msgstr "Последнее время запуска"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"Список URL-адресов и настройка списка использования, настраиваются на "
+"странице 'Дополнительно'.<br />"
+
+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 /"
+">"
+msgstr ""
+"Список поддерживаемых серверов DNS с дефолтным списком - перемещается в "
+"папку.<br />"
+
+msgid "Loading"
+msgstr "Загрузка"
+
+msgid "No"
+msgstr "Нет"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Варианты для дальнейшей обработки, если значения по умолчанию вам не "
+"подходят."
+
+msgid "Overall Domains"
+msgstr "Итоговые домены"
+
+msgid "Overview"
+msgstr "Главное меню"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"Добавляйте только один домен в строке. Комментарии вводятся используя '#' "
+"разрешенные - ip адреса, метасимволы и нерегулярные выражения."
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "Отредактируйте данный файл, строго в терминале."
+
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+"Внимание: для этого требуется дополнительная установка и настройка "
+"'mstmp' (см. readme)."
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr "Обновите config файл Adblock, чтобы использовать этот пакет.<br />"
+
+msgid "Query"
+msgstr "Запрос"
+
+msgid "Query domains"
+msgstr "Запрос доменов"
+
+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 ""
+"Увеличьте количество уведомлений по email, чтобы получить сообщения, если "
+"общее количество меньше или равно заданному пределу (по умолчанию 0),<br />"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"Перенаправлять все DNS запросы с интерфейса 'lan' на обработку Adblock-ом."
+
+msgid "Resume"
+msgstr "Возобновить"
+
+msgid "Runtime Information"
+msgstr "Текущая информация"
+
+msgid "SSL req."
+msgstr "Запрос SSL"
+
+msgid "Save"
+msgstr "Сохранить"
+
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+"Отправлять по электронной почте уведомления в случае ошибки обработки или "
+"если домен &le; 0.<br />"
+
+msgid "Startup Trigger"
+msgstr "Задержка запуска"
+
+msgid "Suspend"
+msgstr "Приостановить"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Приостановить / Возобновить Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+"Папка для резервного копирования Adblock. Используйте такие накопители, как "
+"usb флешка."
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "Целевая папка для создания списка блокировки 'adb_list.overall'."
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"Размер файла слишком большой, для онлайн редактирования в LuCI (&gt; 512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Страница позволяет изменять содержимое Черного списка Adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Страница позволяет изменять содержимое Белого списка Adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Страница позволяет изменять содержимое главного config файла Adblock-a (/etc/"
+"config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Страница позволяет запросить домены для конкретных списков, например для "
+"Белого списка."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr "Страница системного журнала. Только сообщения связанные с Adblock."
+
+msgid "This section contains no values yet"
+msgstr "Страница не содержит значений"
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"Чтобы заменить дефолтную, используется 'Папка DNS' расширенный вариант, "
+"раздел ниже."
+
+msgid "Trigger Delay"
+msgstr "Задержка запуска"
+
+msgid "Verbose Debug Logging"
+msgstr "Подробное ведение журнала отладки"
+
+msgid "View Logfile"
+msgstr "Системный журнал"
+
+msgid "Waiting for command to complete..."
+msgstr "Ожидание выполнения команды..."
+
+msgid "Whitelist File"
+msgstr "Файл Белого списка"
+
+msgid "Whitelist Mode"
+msgstr "Режим Белого списка"
+
+msgid "Yes"
+msgstr "Да"
+
+msgid "disabled"
+msgstr "отключено"
+
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+"например, чтобы получать уведомления по электронной почте при каждом "
+"обновлении Adblock-а установите значение 150000."
+
+msgid "enabled"
+msgstr "включено"
+
+msgid "error"
+msgstr "ошибка"
+
+msgid "n/a"
+msgstr "нет данных"
+
+msgid "paused"
+msgstr "остановлено"
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index 503c5f6ef7..927e8af4f6 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -41,7 +41,7 @@ msgstr "Källor för blockeringslistor"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -100,6 +100,12 @@ msgstr "Redigerar konfigurationen"
msgid "Edit Whitelist"
msgstr "Redigera vitlista"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "Aktivera adblock"
@@ -120,6 +126,12 @@ msgstr "Aktiverad"
msgid "Extra Options"
msgstr "Extra alternativ"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -188,6 +200,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "Vänligen redigera den här filen direkt i en terminal-session."
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -197,6 +214,11 @@ msgstr "Fråga"
msgid "Query domains"
msgstr "Fråga efter domäner"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
@@ -212,6 +234,11 @@ msgstr "SSL-rek."
msgid "Save"
msgstr "Spara"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr "Uppstartslösare"
@@ -263,6 +290,9 @@ msgid ""
"only."
msgstr ""
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -292,6 +322,11 @@ msgstr "Ja"
msgid "disabled"
msgstr "inaktiverad"
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr "aktiverad"
diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot
index 9698333515..8fcff0791d 100644
--- a/applications/luci-app-adblock/po/templates/adblock.pot
+++ b/applications/luci-app-adblock/po/templates/adblock.pot
@@ -41,7 +41,7 @@ msgstr ""
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -93,6 +93,12 @@ msgstr ""
msgid "Edit Whitelist"
msgstr ""
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr ""
@@ -113,6 +119,12 @@ msgstr ""
msgid "Extra Options"
msgstr ""
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -180,6 +192,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr ""
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -189,6 +206,11 @@ msgstr ""
msgid "Query domains"
msgstr ""
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr ""
@@ -204,6 +226,11 @@ msgstr ""
msgid "Save"
msgstr ""
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr ""
@@ -249,6 +276,9 @@ msgid ""
"only."
msgstr ""
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -278,6 +308,11 @@ msgstr ""
msgid "disabled"
msgstr ""
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr ""
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index 08032cab04..9e3a0284fc 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -55,7 +55,7 @@ msgstr "拦截列表来源"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -109,6 +109,12 @@ msgstr "编辑设置"
msgid "Edit Whitelist"
msgstr "编辑白名单"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "启用 Adblock"
@@ -129,6 +135,12 @@ msgstr "已启用"
msgid "Extra Options"
msgstr "额外选项"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -200,6 +212,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "请在终端会话中直接编辑此文件。"
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -209,6 +226,11 @@ msgstr "查询"
msgid "Query domains"
msgstr "查询域"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
@@ -224,6 +246,11 @@ msgstr "SSL 要求"
msgid "Save"
msgstr "保存"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr "启动触发器"
@@ -269,6 +296,9 @@ msgid ""
"only."
msgstr "此表单显示系统日志输出,仅针对 adblock 相关的消息进行了预筛选。"
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -298,6 +328,11 @@ msgstr "是"
msgid "disabled"
msgstr "已禁用"
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr "已启用"
diff --git a/applications/luci-app-adblock/po/zh-tw/adblock.po b/applications/luci-app-adblock/po/zh-tw/adblock.po
index f838fa0432..d468c96f51 100644
--- a/applications/luci-app-adblock/po/zh-tw/adblock.po
+++ b/applications/luci-app-adblock/po/zh-tw/adblock.po
@@ -55,7 +55,7 @@ msgstr "攔截列表來源"
msgid ""
"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
-"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+"MB free RAM, please do not select more than five blocklist sources!"
msgstr ""
msgid ""
@@ -109,6 +109,12 @@ msgstr "編輯設定"
msgid "Edit Whitelist"
msgstr "編輯白名單"
+msgid "Email Notification"
+msgstr ""
+
+msgid "Email Notification Count"
+msgstr ""
+
msgid "Enable Adblock"
msgstr "啟用 Adblock"
@@ -129,6 +135,12 @@ msgstr "已啟用"
msgid "Extra Options"
msgstr "額外選項"
+msgid "Flush DNS Cache"
+msgstr ""
+
+msgid "Flush DNS Cache after adblock processing."
+msgstr ""
+
msgid ""
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
"'libustream-ssl' or the wget 'built-in'."
@@ -200,6 +212,11 @@ msgstr ""
msgid "Please edit this file directly in a terminal session."
msgstr "請在終端會話中直接編輯此檔案。"
+msgid ""
+"Please note: this needs additional 'mstmp' installation and setup (see "
+"readme)."
+msgstr ""
+
msgid "Please update your adblock config file to use this package.<br />"
msgstr ""
@@ -209,6 +226,11 @@ msgstr "查詢"
msgid "Query domains"
msgstr "查詢域"
+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 ""
+
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
msgstr "將所有 DNS 查詢從“lan”區域重定向到本地解析器。"
@@ -224,6 +246,11 @@ msgstr "SSL 要求"
msgid "Save"
msgstr "儲存"
+msgid ""
+"Send notification emails in case of a processing error or if domain count is "
+"&le; 0.<br />"
+msgstr ""
+
msgid "Startup Trigger"
msgstr "啟動觸發器"
@@ -269,6 +296,9 @@ msgid ""
"only."
msgstr "此表單顯示系統日誌輸出,僅針對 adblock 相關的訊息進行了預篩選。"
+msgid "This section contains no values yet"
+msgstr ""
+
msgid ""
"To overwrite the default path use the 'DNS Directory' option in the extra "
"section below."
@@ -298,6 +328,11 @@ msgstr "是"
msgid "disabled"
msgstr "已禁用"
+msgid ""
+"e.g. to receive an email notification with every adblock update set this "
+"value to 150000."
+msgstr ""
+
msgid "enabled"
msgstr "已啟用"
diff --git a/applications/luci-app-advanced-reboot/Makefile b/applications/luci-app-advanced-reboot/Makefile
index 3a886eb8de..5722b429e1 100644
--- a/applications/luci-app-advanced-reboot/Makefile
+++ b/applications/luci-app-advanced-reboot/Makefile
@@ -7,13 +7,13 @@ PKG_LICENSE:=GPL-3.0+
PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
LUCI_TITLE:=Advanced Linksys Reboot Web UI
-LUCI_DESCRIPTION:=Provides Web UI (found under System/Advanced Reboot) to reboot supported Linksys routers to\
+LUCI_DESCRIPTION:=Provides Web UI (found under System/Advanced Reboot) to reboot supported Linksys and ZyXEL routers to\
an altnerative partition. Also provides Web UI to shut down (power off) your device. Supported dual-partition\
routers are listed at https://github.com/stangri/openwrt-luci/blob/luci-app-advanced-reboot/applications/luci-app-advanced-reboot/README.md
LUCI_DEPENDS:=+luci
LUCI_PKGARCH:=all
-PKG_RELEASE:=23
+PKG_RELEASE:=25
include ../../luci.mk
diff --git a/applications/luci-app-advanced-reboot/README.md b/applications/luci-app-advanced-reboot/README.md
index ee87a00020..cfee188100 100644
--- a/applications/luci-app-advanced-reboot/README.md
+++ b/applications/luci-app-advanced-reboot/README.md
@@ -5,15 +5,16 @@ This package allows you to reboot to an alternative partition on supported (dual
## Supported Devices
Currently supported dual-partition devices include:
+- Linksys EA3500
+- Linksys E4200v2
+- Linksys EA4500
+- Linksys EA8500
- Linksys WRT1200AC
- Linksys WRT1900AC
- Linksys WRT1900ACv2
- Linksys WRT1900ACS
- Linksys WRT3200ACM
-- Linksys E4200v2
-- Linksys EA4500
-- Linksys EA8500
-
+- ZyXEL NBG6817
If you're interested in having your device supported, please post in [LEDE Project Forum Support Thread](https://forum.lede-project.org/t/web-ui-to-reboot-to-another-partition-dual-partition-routers/3423).
## Screenshot (luci-app-advanced-reboot)
@@ -28,8 +29,8 @@ opkg install luci-app-advanced-reboot
## Notes/Known Issues
- When you reboot to a different partition, your current settings (WiFi SSID/password, etc.) will not apply to a different partition. Different partitions might have completely different settings and even firmware.
-- If you reboot to a partition which doesn't allow you to switch boot partitions (like stock Linksys firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, loosing all the settings.
+- If you reboot to a partition which doesn't allow you to switch boot partitions (like stock vendor firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, loosing all the settings.
- Some devices allow you to trigger reboot to alternative partition by interrupting boot 3 times in a row (by resetting/switching off the device or pulling power). As these methods might be different for different devices, do your own homework.
## Thanks
-I'd like to thank everyone who helped create, test and troubleshoot this package. Without contributions from [@hnyman](https://github.com/hnyman) and [@jpstyves](https://github.com/jpstyves) it wouldn't have been possible.
+I'd like to thank everyone who helped create, test and troubleshoot this package. Without contributions from [@hnyman](https://github.com/hnyman), [@jpstyves](https://github.com/jpstyves) and [@slh](https://github.com/pkgadd) it wouldn't have been possible.
diff --git a/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
index 2b55217b8e..13d1c73cce 100644
--- a/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
+++ b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
@@ -5,15 +5,18 @@ module("luci.controller.advanced_reboot", package.seeall)
-- device, board_name, part1, part2, offset, env_var_1, value_1_1, value_1_2, env_var_2, value_2_1, value_2_2
devices = {
+ {"Linksys EA3500", "linksys-audi", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys E4200v2/EA4500", "linksys-viper", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys EA8500", "ea8500", "mtd13", "mtd15", 32, "boot_part", 1, 2},
{"Linksys WRT1200AC", "armada-385-linksys-caiman", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900AC", "armada-xp-linksys-mamba", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900ACv2", "armada-385-linksys-cobra", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT1900ACS", "armada-385-linksys-shelby", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
{"Linksys WRT3200ACM", "armada-385-linksys-rango", "mtd5", "mtd7", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
- {"Linksys E4200v2/EA4500", "linksys-viper", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
- {"Linksys EA8500", "ea8500", "mtd13", "mtd15", 32, "boot_part", 1, 2}
+ {"ZyXEL NBG6817","nbg6817","mmcblk0p4","mmcblk0p7",32,nil,255,1}
}
+errorMessage = ""
board_name = luci.util.trim(luci.sys.exec("cat /tmp/sysinfo/board_name"))
for i=1, #devices do
if board_name and devices[i][2] == board_name then
@@ -41,14 +44,29 @@ for i=1, #devices do
if string.find(partition_two_label, "LEDE") then partition_two_os = "LEDE" end
if string.find(partition_two_label, "OpenWrt") then partition_two_os = "OpenWrt" end
if string.find(partition_two_label, "Linksys") then partition_two_os = "Linksys" end
+ if device_name and device_name == "ZyXEL NBG6817" then
+ if not partition_one_os then partition_one_os = "ZyXEL" end
+ if not partition_two_os then partition_two_os = "ZyXEL" end
+ end
if not partition_one_os then partition_one_os = "Unknown" end
if not partition_two_os then partition_two_os = "Unknown" end
if partition_one_os and partition_one_version then partition_one_os = partition_one_os .. " (Linux " .. partition_one_version .. ")" end
if partition_two_os and partition_two_version then partition_two_os = partition_two_os .. " (Linux " .. partition_two_version .. ")" end
- if nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
- current_partition = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
- other_partition = current_partition == boot_envvar1_partition_one and boot_envvar1_partition_two or boot_envvar1_partition_one
+
+ if device_name and device_name == "ZyXEL NBG6817" then
+ if not zyxelFlagPartition then zyxelFlagPartition = luci.util.trim(luci.sys.exec("source /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
+ if not zyxelFlagPartition then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to find Dual Boot Flag Partition." .. " ")
+ luci.util.perror(luci.i18n.translate("Unable to find Dual Boot Flag Partition."))
+ else
+ current_partition = tonumber(luci.sys.exec("dd if=" .. zyxelFlagPartition .. " bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 \"%d\"'"))
+ end
+ else
+ if nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
+ current_partition = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
+ end
end
+ other_partition = current_partition == boot_envvar1_partition_two and boot_envvar1_partition_one or boot_envvar1_partition_two
end
end
@@ -70,8 +88,19 @@ function action_reboot()
end
function action_altreboot()
+ local zyxelFlagPartition, zyxelBootFlag, zyxelNewBootFlag, errorCode, curEnvSetting, newEnvSetting
+ errorMessage = ""
+ errorCode = 0
if luci.http.formvalue("cancel") then
luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
+-- luci.template.render("advanced_reboot/advanced_reboot",{
+-- device_name=device_name,
+-- boot_envvar1_partition_one=boot_envvar1_partition_one,
+-- partition_one_os=partition_one_os,
+-- boot_envvar1_partition_two=boot_envvar1_partition_two,
+-- partition_two_os=partition_two_os,
+-- current_partition=current_partition,
+-- errorMessage = luci.i18n.translate("Alternative reboot cancelled.")})
return
end
local step = tonumber(luci.http.formvalue("step") or 1)
@@ -79,21 +108,72 @@ function action_altreboot()
if device_name and nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
luci.template.render("advanced_reboot/alternative_reboot",{})
else
- luci.template.render("advanced_reboot/advanced_reboot",{})
+ luci.template.render("advanced_reboot/advanced_reboot",{errorMessage = luci.i18n.translate("No access to fw_printenv or fw_printenv!")})
end
elseif step == 2 then
- luci.template.render("admin_system/applyreboot", {
- title = luci.i18n.translate("Rebooting..."),
- msg = luci.i18n.translate("The system is rebooting to an alternative partition now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
- addr = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
- })
- if boot_envvar1 then env1 = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1))) end
- if boot_envvar2 then env2 = luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar2)) end
- if env1 and env1 == boot_envvar1_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_two) end
- if env1 and env1 == boot_envvar1_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_one) end
- if env2 and env2 == boot_envvar2_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_two .. "'") end
- if env2 and env2 == boot_envvar2_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_one .. "'") end
- luci.sys.reboot()
+ if boot_envvar1 or boot_envvar2 then -- Linksys devices
+ if boot_envvar1 then
+ curEnvSetting = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
+ if not curEnvSetting then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar1 .. ". "
+ luci.util.perror(luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar1 .. ".")
+ else
+ newEnvSetting = curEnvSetting == boot_envvar1_partition_one and boot_envvar1_partition_two or boot_envvar1_partition_one
+ errorCode = luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. newEnvSetting)
+ if errorCode ~= 0 then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar1 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ". "
+ luci.util.perror(luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar1 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ".")
+ end
+ end
+ end
+ if boot_envvar2 then
+ curEnvSetting = luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar2))
+ if not curEnvSetting then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar2 .. ". "
+ luci.util.perror(luci.i18n.translate("Unable to obtain firmware environment variable") .. ": " .. boot_envvar2 .. ".")
+ else
+ newEnvSetting = curEnvSetting == boot_envvar2_partition_one and boot_envvar2_partition_two or boot_envvar2_partition_one
+ errorCode = luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. newEnvSetting .. "'")
+ if errorCode ~= 0 then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar2 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ". "
+ luci.util.perror(luci.i18n.translate("Unable to set firmware environment variable") .. ": " .. boot_envvar2 .. " " .. luci.i18n.translate("to") .. " " .. newEnvSetting .. ".")
+ end
+ end
+ end
+ else -- NetGear device
+ if not zyxelFlagPartition then zyxelFlagPartition = luci.util.trim(luci.sys.exec("source /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
+ if not zyxelFlagPartition then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to find Dual Boot Flag Partition." .. " ")
+ luci.util.perror(luci.i18n.translate("Unable to find Dual Boot Flag Partition."))
+ else
+ zyxelBootFlag = tonumber(luci.sys.exec("dd if=" .. zyxelFlagPartition .. " bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 \"%d\"'"))
+ zyxelNewBootFlag = zyxelBootFlag and zyxelBootFlag == 1 and "\\xff" or "\\x01"
+ if zyxelNewBootFlag then
+ errorCode = luci.sys.call("printf \"" .. zyxelNewBootFlag .. "\" >" .. zyxelFlagPartition )
+ if errorCode ~= 0 then
+ errorMessage = errorMessage .. luci.i18n.translate("Unable to set Dual Boot Flag Partition entry for partition") .. ": " .. zyxelFlagPartition .. ". "
+ luci.util.perror(luci.i18n.translate("Unable to set Dual Boot Flag Partition entry for partition") .. ": " .. zyxelFlagPartition .. ".")
+ end
+ end
+ end
+ end
+ if errorMessage == "" then
+ luci.template.render("admin_system/applyreboot", {
+ title = luci.i18n.translate("Rebooting..."),
+ msg = luci.i18n.translate("The system is rebooting to an alternative partition now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+ addr = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+ })
+ luci.sys.reboot()
+ else
+ luci.template.render("advanced_reboot/advanced_reboot",{
+ device_name=device_name,
+ boot_envvar1_partition_one=boot_envvar1_partition_one,
+ partition_one_os=partition_one_os,
+ boot_envvar1_partition_two=boot_envvar1_partition_two,
+ partition_two_os=partition_two_os,
+ current_partition=current_partition,
+ errorMessage = errorMessage})
+ end
end
end
diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
index 206d250543..0629c84b36 100644
--- a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
+++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
@@ -14,6 +14,10 @@
<p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p>
<%- end -%>
+<%- if errorMessage and errorMessage ~= "" then -%>
+ <p class="alert-message warning"><%:ERROR: %><%=errorMessage%></p>
+<%- end -%>
+
<%- if device_name then -%>
<fieldset class="cbi-section">
<legend><%=device_name%><%: Partitions%></legend>
@@ -26,7 +30,7 @@
</tr>
<tr class="cbi-section-table-row">
<td>
- <%=boot_envvar1_partition_one%>
+ <%=string.format("%X", boot_envvar1_partition_one)%>
</td>
<td>
<%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
@@ -50,7 +54,7 @@
</tr>
<tr class="cbi-section-table-row">
<td>
- <%=boot_envvar1_partition_two%>
+ <%=string.format("%X", boot_envvar1_partition_two)%>
</td>
<td>
<%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
diff --git a/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po b/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po
new file mode 100644
index 0000000000..75d463677b
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/po/ru/advanced-reboot.po
@@ -0,0 +1,163 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: advanced-reboot\n"
+"POT-Creation-Date: 2017-11-30 15:20+0300\n"
+"PO-Revision-Date: 2018-01-05 19:53+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Action"
+msgstr "Действие"
+
+msgid "Advanced Reboot"
+msgstr "Дополнительная перезагрузка"
+
+msgid "Alternative"
+msgstr "Альтернатива"
+
+msgid "Alternative reboot cancelled."
+msgstr "Альтернативная перезагрузка отменена."
+
+msgid "Cancel"
+msgstr "Отменить"
+
+msgid "Confirm"
+msgstr "Подтвердить"
+
+msgid "Current"
+msgstr "Текущий"
+
+msgid "ERROR:"
+msgstr "ОШИБКА:"
+
+msgid "Firmware/OS (Kernel)"
+msgstr "Прошивка/ОС (Ядро)"
+
+msgid "No access to fw_printenv or fw_printenv!"
+msgstr "Нет доступа к fw_printenv или fw_printenv!"
+
+msgid "Partition"
+msgstr "Раздел"
+
+msgid "Partitions"
+msgstr "Разделы"
+
+msgid "Perform power off..."
+msgstr "Выполнить отключение..."
+
+msgid "Power Off Device"
+msgstr "Отключить питание устройства"
+
+msgid "Proceed"
+msgstr "Продолжить"
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr "Перезагрузить устройство в альтернативный раздел"
+
+msgid "Reboot to alternative partition..."
+msgstr "Перезагрузить до альтернативного раздела..."
+
+msgid "Reboot to current partition"
+msgstr "Перезагрузка к текущему разделу"
+
+msgid "Rebooting..."
+msgstr "Перезагрузка..."
+
+msgid "Shutting down..."
+msgstr "Отключается..."
+
+msgid "Status"
+msgstr "Состояние"
+
+msgid ""
+"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
+"few minutes before you try to reconnect. It might be necessary to renew the "
+"address of your computer to reach the device again, depending on your "
+"settings."
+msgstr ""
+"Система перезагружается сейчас.<br /> НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!<br /"
+"> Подождите несколько минут, прежде чем попытаться установить соединение "
+"снова. Возможно, потребуется обновить адрес компьютера для повторного "
+"доступа к устройству в зависимости от ваших настроек."
+
+msgid ""
+"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
+"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+"Система перезагружается на альтернативный раздел сейчас.<br /> НЕ ОТКЛЮЧАЙТЕ "
+"ПИТАНИЕ УСТРОЙСТВА!<br /> Подождите несколько минут, прежде чем попытаться "
+"установить соединение снова. Возможно, потребуется обновить адрес компьютера "
+"для повторного доступа к устройству в зависимости от ваших настроек."
+
+msgid ""
+"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+"Система сейчас отключается.<br /> НЕ ОТКЛЮЧАЙТЕ ПИТАНИЕ УСТРОЙСТВА!<br /> "
+"Возможно, потребуется обновить адрес компьютера для повторного доступа к "
+"устройству в зависимости от настроек."
+
+msgid "Unable to find Dual Boot Flag Partition."
+msgstr "Невозможно найти Dual Boot раздел."
+
+msgid "Unable to obtain firmware environment variable"
+msgstr "Невозможно получить переменную среды прошивки"
+
+msgid "Unable to set Dual Boot Flag Partition entry for partition"
+msgstr "Невозможно использовать Dual Boot раздел."
+
+msgid "Unable to set firmware environment variable"
+msgstr "Невозможно установить переменную среды прошивки"
+
+msgid ""
+"WARNING: An alternative partition might have its own settings and completely "
+"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
+"password on alternative partition might be different, you might have to "
+"adjust your computer settings to be able to access your device once it "
+"reboots.<br /><br /> Please also be aware that alternative partition "
+"firmware might not provide an easy way to switch active partition and boot "
+"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
+"to reboot device to an alternative partition."
+msgstr ""
+"ВНИМАНИЕ: альтернативный раздел может иметь собственные настройки и "
+"совершенно другую прошивку.<br /><br /> Поскольку ваши настройки сети и WiFi "
+"SSID/пароли на альтернативных разделах могут отличаться, может потребоваться "
+"изменить настройки компьютера, чтобы иметь возможность получить доступ к "
+"устройству после перезагрузки .<br /><br /> Помните также, что "
+"альтернативный раздел с прошивкой может не обеспечить простой способ "
+"переключения активного раздела и загрузки обратно в текущий активный раздел."
+"<br /><br /> Нажмите \"Продолжить\" ниже, чтобы перезагрузить устройство в "
+"альтернативный раздел."
+
+msgid ""
+"WARNING: Power off might result in a reboot on a device which doesn't "
+"support power off.<br /><br /> Click \"Proceed\" below to power off your "
+"device."
+msgstr ""
+"ВНИМАНИЕ: Отключение питания может привести к перезагрузке устройства, "
+"которое не поддерживает выключение питания.<br /><br /> Нажмите \"Продолжить"
+"\" ниже, чтобы выключить устройство."
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr ""
+"Внимание: Есть несохраненные изменения, которые будут потеряны при "
+"перезагрузке!"
+
+msgid "Warning: This system does not have two partitions!"
+msgstr "Внимание: Эта система не имеет двух разделов!"
+
+msgid "Warning: This system does not support powering off!"
+msgstr "Внимание: Эта система не поддерживает отключение питания!"
+
+msgid "to"
+msgstr ""
diff --git a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po
index 20d77cbcf7..e0e13cfda9 100644
--- a/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
+++ b/applications/luci-app-advanced-reboot/po/sv/advanced-reboot.po
@@ -10,6 +10,9 @@ msgstr "Avancerad omstart"
msgid "Alternative"
msgstr "Alternativ"
+msgid "Alternative reboot cancelled."
+msgstr ""
+
msgid "Cancel"
msgstr "Avbryt"
@@ -19,9 +22,15 @@ msgstr "Bekräfta"
msgid "Current"
msgstr "Nuvarande"
+msgid "ERROR:"
+msgstr ""
+
msgid "Firmware/OS (Kernel)"
msgstr "Inre mjukvara/OS (Kärna)"
+msgid "No access to fw_printenv or fw_printenv!"
+msgstr ""
+
msgid "Partition"
msgstr "Partition"
@@ -78,6 +87,18 @@ msgstr ""
"inställningar så kan det vara nödvändigt att förnya din dators adress för "
"att nå enheten igen."
+msgid "Unable to find Dual Boot Flag Partition."
+msgstr ""
+
+msgid "Unable to obtain firmware environment variable"
+msgstr ""
+
+msgid "Unable to set Dual Boot Flag Partition entry for partition"
+msgstr ""
+
+msgid "Unable to set firmware environment variable"
+msgstr ""
+
msgid ""
"WARNING: An alternative partition might have its own settings and completely "
"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
@@ -107,3 +128,6 @@ msgstr "Varning: Det här systemet har inte två partitioner!"
msgid "Warning: This system does not support powering off!"
msgstr "Varning: Det här systemet har inte stöd för avstängning!"
+
+msgid "to"
+msgstr ""
diff --git a/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot b/applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot
index 9c810892c2..47a81e1dd0 100644
--- a/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot
+++ b/applications/luci-app-advanced-reboot/po/templates/advanced-reboot.pot
@@ -10,6 +10,9 @@ msgstr ""
msgid "Alternative"
msgstr ""
+msgid "Alternative reboot cancelled."
+msgstr ""
+
msgid "Cancel"
msgstr ""
@@ -19,9 +22,15 @@ msgstr ""
msgid "Current"
msgstr ""
+msgid "ERROR:"
+msgstr ""
+
msgid "Firmware/OS (Kernel)"
msgstr ""
+msgid "No access to fw_printenv or fw_printenv!"
+msgstr ""
+
msgid "Partition"
msgstr ""
@@ -75,6 +84,18 @@ msgid ""
"again, depending on your settings."
msgstr ""
+msgid "Unable to find Dual Boot Flag Partition."
+msgstr ""
+
+msgid "Unable to obtain firmware environment variable"
+msgstr ""
+
+msgid "Unable to set Dual Boot Flag Partition entry for partition"
+msgstr ""
+
+msgid "Unable to set firmware environment variable"
+msgstr ""
+
msgid ""
"WARNING: An alternative partition might have its own settings and completely "
"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
@@ -100,3 +121,6 @@ msgstr ""
msgid "Warning: This system does not support powering off!"
msgstr ""
+
+msgid "to"
+msgstr ""
diff --git a/applications/luci-app-aria2/po/ru/aria2.po b/applications/luci-app-aria2/po/ru/aria2.po
new file mode 100644
index 0000000000..48a522d59d
--- /dev/null
+++ b/applications/luci-app-aria2/po/ru/aria2.po
@@ -0,0 +1,222 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: aria2\n"
+"POT-Creation-Date: 2017-11-30 23:45+0300\n"
+"PO-Revision-Date: 2018-01-05 21:29+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "\"Falloc\" is not available in all cases."
+msgstr "\"Falloc\" возможен не всегда."
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr "<abbr title=\"Распределенная Hash таблица\">DHT</abbr> включена"
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr "<abbr title=\"Обнаружение локальных пиров \">LPD</abbr> включено"
+
+msgid "Additional Bt tracker enabled"
+msgstr "Дополнительный Bt tracker включен"
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Aria2 настройки"
+
+msgid "Aria2 Status"
+msgstr "Aria2 состояние"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr ""
+"Aria2 - это мульти-протокольная и мульти-платформенная утилита загрузки, "
+"здесь вы сможете ее настроить."
+
+msgid "Autosave session interval"
+msgstr "Интервал сессии автосохранения"
+
+msgid "BitTorrent Settings"
+msgstr "Настройки BitTorrent-а"
+
+msgid "BitTorrent listen port"
+msgstr "Порт прослушивания BitTorrent-а"
+
+msgid "Collecting data..."
+msgstr "Сбор информации..."
+
+msgid "Config file directory"
+msgstr "Папка расположения сonfig файла"
+
+msgid "Debug"
+msgstr "Отладка"
+
+msgid "Default download directory"
+msgstr "Папка загрузки по умолчанию"
+
+msgid "Disk cache"
+msgstr "Дисковый кэш"
+
+msgid "Enable log"
+msgstr "Включить ведение системного журнала"
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid "Error"
+msgstr "Ошибка"
+
+msgid "Extra Settings"
+msgstr "Дополнительные настройки"
+
+msgid "Falloc"
+msgstr "Falloc"
+
+msgid "Files and Locations"
+msgstr "Файлы и папки"
+
+msgid "Follow torrent"
+msgstr "Запустить торрент-файл"
+
+msgid "General Settings"
+msgstr "Основные настройки"
+
+msgid "Generate Randomly"
+msgstr "Генерировать случайно"
+
+msgid "Info"
+msgstr "Информация"
+
+msgid "List of additional Bt tracker"
+msgstr "Список дополнительных BT tracker-ов"
+
+msgid "List of extra settings"
+msgstr "Список дополнительных настроек"
+
+msgid "Log file is in the config file dir."
+msgstr "Файл системного журнала находится в папке с config файлом."
+
+msgid "Log level"
+msgstr "Уровень системного журнала"
+
+msgid "Max concurrent downloads"
+msgstr "Максимальное количество одновременных загрузок"
+
+msgid "Max connection per server"
+msgstr "Максимальное подключение на сервер"
+
+msgid "Max number of peers per torrent"
+msgstr "Максимальное число пиров на торрент"
+
+msgid "Max number of split"
+msgstr "Максимальное число разделений"
+
+msgid "Min split size"
+msgstr "Минимальный размер разделений"
+
+msgid "No Authentication"
+msgstr "Без проверки подлинности"
+
+msgid "Notice"
+msgstr "Заметка"
+
+msgid "Off"
+msgstr "Выключено"
+
+msgid "Open WebUI-Aria2"
+msgstr "Открыть WebUI-Aria2"
+
+msgid "Open YAAW"
+msgstr "Открыть YAAW"
+
+msgid "Overall download limit"
+msgstr "Общий лимит загрузки"
+
+msgid "Overall speed limit enabled"
+msgstr "Общий лимит скорости включен"
+
+msgid "Overall upload limit"
+msgstr "Общий лимит скачивания"
+
+msgid "Per task download limit"
+msgstr "Ограничить задачи загрузок"
+
+msgid "Per task speed limit enabled"
+msgstr "Ограничить скорость выполнения каждой задачи"
+
+msgid "Per task upload limit"
+msgstr "Ограничить задачи скачивания"
+
+msgid "Prealloc"
+msgstr "Предварительно"
+
+msgid "Preallocation"
+msgstr "Предварительное размещение"
+
+msgid "Prefix of peer ID"
+msgstr "Префикс ID пира"
+
+msgid "RPC Token"
+msgstr "RPC электронный ключ"
+
+msgid "RPC authentication method"
+msgstr "RPC метод аутентификации"
+
+msgid "RPC password"
+msgstr "RPC пароль"
+
+msgid "RPC port"
+msgstr "RPC порт"
+
+msgid "RPC username"
+msgstr "RPC логин"
+
+msgid "Run daemon as user"
+msgstr "Запуск демона от имени пользователя"
+
+msgid "Sec"
+msgstr "Секунды"
+
+msgid "Task Settings"
+msgstr "Настройки параметров"
+
+msgid "The Aria2 service is not running."
+msgstr "Aria2 сервис не запущен."
+
+msgid "The Aria2 service is running."
+msgstr "Aria2 сервис запущен."
+
+msgid "Token"
+msgstr "Электронный ключ"
+
+msgid "Trunc"
+msgstr "Обрезать"
+
+msgid "Use WebSocket"
+msgstr "Использовать WebSockets"
+
+msgid "User agent value"
+msgstr "Агент пользователя"
+
+msgid "Username & Password"
+msgstr "Имя и пароль"
+
+msgid "View Json-RPC URL"
+msgstr "Показать URL Json-RPC"
+
+msgid "Warn"
+msgstr "Внимание"
+
+msgid "in bytes, You can append K or M."
+msgstr "в байтах. Вы можете добавить суффикс K (кило) или М (мега)."
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "в байтах/секундах. Вы можете добавить суффикс K (кило) или М (мега)."
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
index 847ad5cfb3..0a8c65ebdd 100644
--- a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -71,15 +71,14 @@
end
apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession)
- apply_acls("/usr/share/rpcd/acl.d/packagelist.json", luci.dispatcher.context.authsession)
%>
<%+header%>
<h2 name="content"><%:Attended Sysupgrade%></h2>
<div class="cbi-map-descr">
- Easily search and install new releases and package upgrades. Sysupgrade images are created on demand based on locally installed packages.
+ Easily search and install new releases and package upgrades. Sysupgrade firmware are created on demand based on locally installed packages.
</div>
-<div style="display: none" id="upgrade_info" class="alert-message info"></div>
-<div style="display: none" id="upgrade_error" class="alert-message danger"></div>
+<div style="display: none" id="info_box" class="alert-message info"></div>
+<div style="display: none" id="error_box" class="alert-message danger"></div>
<div style="display: none" id="packages" class="alert-message success"></div>
<p>
<textarea style="display: none; width: 100%;" id="edit_packages" rows="15"></textarea>
@@ -89,7 +88,7 @@
<div class="cbi-selection-node">
<div class="cbi-value" id="keep_container" style="display: none">
<div class="cbi-section-descr">
- Check "Keep settings" to retain the current configuration (requires a compatible firmware image).
+ Check "Keep settings" to retain the current configuration (requires a compatible firmware).
</div>
<label class="cbi-value-title" for="keep">Keep settings:</label>
<div class="cbi-value-field">
@@ -116,353 +115,10 @@
</form>
</fieldset>
<script type="text/javascript">
-data = {};
-origin = document.location.href.replace(location.pathname, "")
-ubus_url = origin + "/ubus/"
-
-function set_server() {
- data.url = document.getElementById("server").value;
- ubus_call("uci", "set", { "config": "attendedsysupgrade", "section": "server", values: { "url": data.url } })
- ubus_call("uci", "commit", { "config": "attendedsysupgrade" })
- var server = document.getElementById("server")
- server.type = 'button';
- server.className = 'cbi-button cbi-button-edit';
- server.parentElement.removeChild(document.getElementById("button_set"));
- server.onclick = edit_server;
-}
-
-function edit_server() {
- document.getElementById("server").type = 'text';
- document.getElementById("server").onkeydown = function(event) {
- if(event.key === 'Enter') {
- set_server();
- return false;
- }
- }
- document.getElementById("server").className = '';
- document.getElementById("server").onclick = null;
-
- button_set = document.createElement("input");
- button_set.type = "button";
- button_set.value = "Save";
- button_set.name = "button_set";
- button_set.id = "button_set";
- button_set.className = 'cbi-button cbi-button-edit';
- button_set.style = 'background-image: url("/luci-static/resources/cbi/save.gif");'
- button_set.onclick = set_server
- document.getElementById("server").parentElement.appendChild(button_set);
-}
-
-function edit_packages() {
- data.edit_packages = true
- document.getElementById("edit_button").style.display = "none";
- document.getElementById("edit_packages").value = data.packages.join("\n");
- document.getElementById("edit_packages").style.display = "block";
-}
-
-// requests to the upgrade server
-function server_request(request_dict, path, callback) {
- request_dict.distro = data.release.distribution;
- request_dict.target = data.release.target.split("\/")[0];
- request_dict.subtarget = data.release.target.split("\/")[1];
- var request = new XMLHttpRequest();
- request.open("POST", data.url + "/" + path, true);
- request.setRequestHeader("Content-type", "application/json");
- request.send(JSON.stringify(request_dict));
- request.onerror = function(e) {
- upgrade_error("upgrade server down")
- document.getElementById("server_div").style.display = "block";
- }
- request.addEventListener('load', function(event) {
- callback(request)
- });
-}
-
-// initial setup, get system information
-function setup() {
+ data = {};
data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
- ubus_call("packagelist", "list", {}, "packagelist");
- ubus_call("system", "board", {}, "release");
- ubus_call("system", "board", {}, "board_name");
- ubus_call("system", "board", {}, "model");
- uci_call({ "config": "attendedsysupgrade", "section": "server", "option": "url" })
- uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "upgrade_packages" })
- uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "advanced_mode" })
- uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "auto_search" })
- setup_ready();
-}
-
-function setup_ready() {
- if(ubus_counter != ubus_closed) {
- setTimeout(setup_ready, 300)
- } else {
- if(data.auto_search == 1) {
- upgrade_check();
- } else {
- document.getElementById("upgrade_button").style.display = "block";
- document.getElementById("server_div").style.display = "block";
- document.getElementById("server").value = data.url;
- }
- }
-}
-
-function uci_call(option) {
- ubus_call("uci", "get", option, option["option"])
-}
-
-ubus_counter = 0;
-ubus_closed = 0;
-function ubus_call(command, argument, params, variable) {
- request_data = {};
- request_data.jsonrpc = "2.0";
- request_data.id = ubus_counter;
- request_data.method = "call";
- request_data.params = [ data.ubus_rpc_session, command, argument, params ]
- request_json = JSON.stringify(request_data)
- ubus_counter++;
- var request = new XMLHttpRequest();
- request.open("POST", ubus_url, true);
- request.setRequestHeader("Content-type", "application/json");
- request.addEventListener('load', function(event) {
- if(request.status === 200) {
- response = JSON.parse(request.responseText).result
- if(response[0] == 0) {
- if(response.length == 2) {
- if(command === "uci") {
- data[variable] = response[1].value
- } else {
- data[variable] = response[1][variable]
- }
- }
- } else {
- upgrade_error("ubus call faild: " + request_json)
- }
- ubus_closed++;
- }
- });
- request.send(request_json);
-}
-
-// shows notification if upgrade is available
-function upgrade_info(info_output, loading) {
- document.getElementById("upgrade_info").style.display = "block";
- if(loading) {
- loading_image = '<img src="/luci-static/resources/icons/loading.gif" alt="Loading" style="vertical-align:middle">'
- } else {
- loading_image = ''
- }
- document.getElementById("upgrade_info").innerHTML = loading_image + info_output;
-}
-
-function upgrade_error(error_output) {
- document.getElementById("upgrade_error").style.display = "block";
- document.getElementById("upgrade_error").innerHTML = error_output;
- document.getElementById("upgrade_info").style.display = "none";
-}
-
-// asks server for news upgrades, actually only based on relesae not packages
-function upgrade_check() {
- document.getElementById("upgrade_error").style.display = "none";
- document.getElementById("server_div").style.display = "none";
- upgrade_info("Searching for upgrades", true);
- request_dict = {}
- request_dict.version = data.release.version;
- request_dict.packages = data.packagelist;
- // not only search for new release, but for new package versions as well
- request_dict.upgrade_packages = data.upgrade_packages
- server_request(request_dict, "api/upgrade-check", upgrade_check_callback)
-}
-
-// request the image, need merge with upgrade_request
-function upgrade_request() {
- console.log("upgrade_request")
- document.getElementById("upgrade_button").disabled = true;
- document.getElementById("edit_packages").style.display = "none";
- document.getElementById("edit_button").style.display = "none";
- document.getElementById("keep_container").style.display = "none";
- request_dict = {}
- request_dict.version = data.latest_version;
- request_dict.board = data.board_name
-
- if(data.edit_packages == true) {
- request_dict.packages = document.getElementById("edit_packages").value.split("\n")
- } else {
- request_dict.packages = data.packages;
- }
- request_dict.model = data.model
- server_request(request_dict, "api/upgrade-request", upgrade_request_callback)
-}
-
-function upgrade_request_callback(response) {
- if (response.status === 400) {
- response_content = JSON.parse(response.responseText)
- upgrade_error(response_content.error)
- } else if (response.status === 500) {
- response_content = JSON.parse(response.responseText)
- upgrade_error(response_content.error)
- if(response_content.log != undefined) {
- data.log_url = response_content.log
- }
- } else if (response.status === 503) {
- upgrade_error("please wait. server overloaded")
- // handle overload
- setTimeout(upgrade_request, 30000)
- } else if (response.status === 201) {
- response_content = JSON.parse(response.responseText)
- if(response_content.queue != undefined) {
- // in queue
- upgrade_info("please wait. you are in queue position " + response_content.queue, true)
- console.log("queued")
- } else {
- upgrade_info("imagebuilder not ready, please wait", true)
- console.log("setting up imagebuilder")
- }
- setTimeout(upgrade_request, 5000)
- } else if (response.status === 206) {
- // building
- console.log("building")
- upgrade_info("building image", true)
- setTimeout(upgrade_request, 5000)
- } else if (response.status === 200) {
- // ready to download
- response_content = JSON.parse(response.responseText);
- data.sysupgrade_url = response_content.sysupgrade;
-
- info_output = "Image created"
- if(data.advanced_mode == 1) {
- build_log = '</br><a target="_blank" href="' + data.sysupgrade_url + '.log">Build log</a>'
- info_output += build_log
- }
- upgrade_info(info_output);
-
- document.getElementById("keep_container").style.display = "block";
- var upgrade_button = document.getElementById("upgrade_button")
- upgrade_button.disabled = false;
- upgrade_button.style.display = "block";
- upgrade_button.value = "Flash firmware";
- upgrade_button.onclick = download_image;
- }
-}
-
-// uploads received blob data to the server using cgi-io
-function upload_image(blob) {
- var upload_request = new XMLHttpRequest();
- var form_data = new FormData();
-
- form_data.append("sessionid", data.ubus_rpc_session)
- form_data.append("filename", "/tmp/firmware.bin")
- form_data.append("filemode", 755) // insecure?
- form_data.append("filedata", blob)
-
- upload_request.addEventListener('load', function(event) {
- // this checksum should be parsed
- upgrade_info("Flashing firmware", true)
- ubus_call("rpc-sys", "upgrade_start", { "keep": document.getElementById("keep").checked }, 'message');
- setTimeout(ping_ubus, 5000)
- console.log(data.message);
- });
-
- upload_request.addEventListener('error', function(event) {
- upgrade_info("uploading failed, please retry")
- });
-
- upload_request.open('POST', origin + '/cgi-bin/cgi-upload');
- upload_request.send(form_data);
-}
-
-function ping_ubus() {
- var request = new XMLHttpRequest();
- request.open("GET", ubus_url, true);
- request.addEventListener('error', function(event) {
- upgrade_info("Rebooting", true);
- setTimeout(ping_ubus, 1000)
- });
- request.addEventListener('load', function(event) {
- upgrade_info("Success! Please reload web interface");
- document.getElementById("upgrade_button").value = "reload page";
- document.getElementById("upgrade_button").style.display = "block";
- document.getElementById("upgrade_button").disabled = false;
- document.getElementById("upgrade_button").onclick = function() { location.reload(); }
- });
- request.send();
-}
-
-// download image from server once the url was received by upgrade_request
-function download_image() {
- console.log("download_image")
- document.getElementById("keep_container").style.display = "none";
- document.getElementById("upgrade_button").style.display = "none";
- var download_request = new XMLHttpRequest();
- download_request.open("GET", data.sysupgrade_url);
- download_request.responseType = "arraybuffer";
-
- download_request.onload = function () {
- if (this.status === 200) {
- var blob = new Blob([download_request.response], {type: "application/octet-stream"});
- upload_image(blob)
- }
- };
- upgrade_info("downloading image", true);
- download_request.send();
-}
-
-function upgrade_check_callback(response_object) {
- if (response_object.status === 500) {
- // python crashed
- upgrade_error("internal server error, please try again later")
- console.log("upgrade server issue")
- } else if (response_object.status === 502) {
- // python part offline
- upgrade_error("internal server error, please try again later")
- console.log("upgrade server issue")
- } else if (response_object.status === 503) {
- // handle overload
- upgrade_error("server overloaded, retry in 5 minutes")
- console.log("server overloaded")
- setTimeout(upgrade_request, 300000)
- } else if (response_object.status === 201) {
- upgrade_info("Setting up ImageBuilder", true)
- console.log("setting up imagebuilder")
- setTimeout(upgrade_request, 5000)
- } else if (response_object.status === 204) {
- // no upgrades
- upgrade_info("No upgrades available")
- } else if (response_object.status === 400) {
- // bad request
- console.log(response_object.responseText)
- response_object_content = JSON.parse(response_object.responseText)
- upgrade_error(response_object_content.error)
- } else if (response_object.status === 200) {
- // new release/upgrades
- response_content = JSON.parse(response_object.responseText)
-
- // create simple output to tell user whats going to be upgrade (release/packages)
- info_output = ""
- if(response_content.version != undefined) {
- info_output += "<h3>new upgrade available</h3>"
- info_output += data.release.version + " to " + response_content.version
- data.latest_version = response_content.version;
- }
- if(response_content.upgrades != undefined) {
- info_output += "<h3>package upgrades available</h3>"
- for (upgrade in response_content.upgrades) {
- info_output += "<b>" + upgrade + "</b>: " + response_content.upgrades[upgrade][1] + " to " + response_content.upgrades[upgrade][0] + "</br>"
- }
- }
- data.packages = response_content.packages
- upgrade_info(info_output)
-
- if(data.advanced_mode == 1) {
- document.getElementById("edit_button").style.display = "block";
- }
- var upgrade_button = document.getElementById("upgrade_button")
- upgrade_button.value = "Request image";
- upgrade_button.style.display = "block";
- upgrade_button.disabled = false;
- upgrade_button.onclick = upgrade_request;
- }
-}
-document.onload = setup()
+ origin = document.location.href.replace(location.pathname, "")
+ ubus_url = origin + "/ubus/"
</script>
-
+<script type="text/javascript" src="<%=resource%>/attendedsysupgrade.js"></script>
<%+footer%>
diff --git a/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json b/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json
index 97aa814928..7549319260 100644
--- a/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json
+++ b/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json
@@ -4,10 +4,12 @@
"read": {
"ubus": {
"rpc-sys": [
- "upgrade_start"
+ "upgrade_start",
+ "packagelist"
],
"system": [
- "board"
+ "board",
+ "info"
],
"uci": [
"get", "set", "commit"
diff --git a/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js
new file mode 100644
index 0000000000..c2fe81d58a
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js
@@ -0,0 +1,402 @@
+function $(s) {
+ return document.getElementById(s.substring(1));
+}
+
+function show(s) {
+ $(s).style.display = 'block';
+}
+
+function hide(s) {
+ $(s).style.display = 'none';
+}
+
+function set_server() {
+ hide("#error_box");
+ data.url = $("#server").value;
+ ubus_call("uci", "set", { "config": "attendedsysupgrade", "section": "server", values: { "url": data.url } })
+ ubus_call("uci", "commit", { "config": "attendedsysupgrade" })
+ var server_button = $("#server")
+ server_button.type = 'button';
+ server_button.className = 'cbi-button cbi-button-edit';
+ server_button.parentElement.removeChild($("#button_set"));
+ server_button.onclick = edit_server;
+}
+
+function edit_server() {
+ $("#server").type = 'text';
+ $("#server").onkeydown = function(event) {
+ if(event.key === 'Enter') {
+ set_server();
+ return false;
+ }
+ }
+ $("#server").className = '';
+ $("#server").onclick = null;
+
+ button_set = document.createElement("input");
+ button_set.type = "button";
+ button_set.value = "Save";
+ button_set.name = "button_set";
+ button_set.id = "button_set";
+ button_set.className = 'cbi-button cbi-button-edit';
+ button_set.style = 'background-image: url("/luci-static/resources/cbi/save.gif");'
+ button_set.onclick = set_server
+ $("#server").parentElement.appendChild(button_set);
+}
+
+function edit_packages() {
+ data.edit_packages = true
+ hide("#edit_button");
+ $("#edit_packages").value = data.packages.join("\n");
+ show("#edit_packages");
+}
+
+// requests to the upgrade server
+function server_request(request_dict, path, callback) {
+ request_dict.distro = data.release.distribution;
+ request_dict.target = data.release.target.split("\/")[0];
+ request_dict.subtarget = data.release.target.split("\/")[1];
+ var request = new XMLHttpRequest();
+ request.open("POST", data.url + "/" + path, true);
+ request.setRequestHeader("Content-type", "application/json");
+ request.send(JSON.stringify(request_dict));
+ request.onerror = function(e) {
+ error_box("upgrade server down")
+ show("#server_div");
+ }
+ request.addEventListener('load', function(event) {
+ callback(request)
+ });
+}
+
+// initial setup, get system information
+function setup() {
+ ubus_call("rpc-sys", "packagelist", {}, "packages");
+ ubus_call("system", "board", {}, "release");
+ ubus_call("system", "board", {}, "board_name");
+ ubus_call("system", "board", {}, "model");
+ ubus_call("system", "info", {}, "memory");
+ uci_get({ "config": "attendedsysupgrade", "section": "server", "option": "url" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "upgrade_packages" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "advanced_mode" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "auto_search" })
+ setup_ready();
+}
+
+function setup_ready() {
+ // checks if a async ubus calls have finished
+ if(ubus_counter != ubus_closed) {
+ setTimeout(setup_ready, 300)
+ } else {
+ if(data.auto_search == 1) {
+ upgrade_check();
+ } else {
+ show("#upgrade_button");
+ show("#server_div");
+ $("#server").value = data.url;
+ }
+ }
+}
+
+function uci_get(option) {
+ // simple wrapper to get a uci value store in data.<option>
+ ubus_call("uci", "get", option, option["option"])
+}
+
+ubus_counter = 0;
+ubus_closed = 0;
+function ubus_call(command, argument, params, variable) {
+ var request_data = {};
+ request_data.jsonrpc = "2.0";
+ request_data.id = ubus_counter;
+ request_data.method = "call";
+ request_data.params = [ data.ubus_rpc_session, command, argument, params ]
+ request_json = JSON.stringify(request_data)
+ ubus_counter++;
+ var request = new XMLHttpRequest();
+ request.open("POST", ubus_url, true);
+ request.setRequestHeader("Content-type", "application/json");
+ request.onload = function(event) {
+ if(request.status === 200) {
+ var response = JSON.parse(request.responseText)
+ if(!("error" in response) && "result" in response) {
+ if(response.result.length === 2) {
+ if(command === "uci") {
+ data[variable] = response.result[1].value
+ } else {
+ data[variable] = response.result[1][variable]
+ }
+ }
+ } else {
+ error_box("<b>Ubus call faild:</b></br>Request: " + request_json + "</br>Response: " + JSON.stringify(response))
+ }
+ ubus_closed++;
+ }
+ }
+ request.send(request_json);
+}
+
+function info_box(info_output, loading) {
+ // Shows notification if upgrade is available
+ // If loading is true then an "processing" animation is added
+ show("#info_box");
+ var loading_image = '';
+ if(loading) {
+ loading_image = '<img src="/luci-static/resources/icons/loading.gif" alt="Loading" style="vertical-align:middle">';
+ }
+ $("#info_box").innerHTML = loading_image + info_output;
+}
+
+function error_box(error_output) {
+ // Shows erros in red box
+ show("#error_box");
+ $("#error_box").innerHTML = error_output;
+ hide("#info_box");
+}
+
+function upgrade_check() {
+ // Asks server for new firmware
+ // If data.upgrade_packages is set to true search for new package versions as well
+ hide("#error_box");
+ hide("#server_div");
+ info_box("Searching for upgrades", true);
+ var request_dict = {}
+ request_dict.version = data.release.version;
+ request_dict.packages = data.packages;
+ request_dict.upgrade_packages = data.upgrade_packages
+ server_request(request_dict, "api/upgrade-check", upgrade_check_callback)
+}
+
+function upgrade_check_callback(request_text) {
+ var request_json = JSON.parse(request_text)
+
+ // create simple output to tell user whats going to be upgrade (release/packages)
+ var info_output = ""
+ if(request_json.version != undefined) {
+ info_output += "<h3>New firmware release available</h3>"
+ info_output += data.release.version + " to " + request_json.version
+ data.latest_version = request_json.version;
+ }
+ if(request_json.upgrades != undefined) {
+ info_output += "<h3>Package upgrades available</h3>"
+ for (upgrade in request_json.upgrades) {
+ info_output += "<b>" + upgrade + "</b>: " + request_json.upgrades[upgrade][1] + " to " + request_json.upgrades[upgrade][0] + "</br>"
+ }
+ }
+ data.packages = request_json.packages
+ info_box(info_output)
+
+ if(data.advanced_mode == 1) {
+ show("#edit_button");
+ }
+ var upgrade_button = $("#upgrade_button")
+ upgrade_button.value = "Request firmware";
+ upgrade_button.style.display = "block";
+ upgrade_button.disabled = false;
+ upgrade_button.onclick = upgrade_request;
+
+}
+
+function upgrade_request() {
+ // Request the image
+ // Needed values
+ // version/release
+ // board_name or model (server tries to find the corrent profile)
+ // packages
+ // The rest is added by server_request()
+ $("#upgrade_button").disabled = true;
+ hide("#edit_packages");
+ hide("#edit_button");
+ hide("#keep_container");
+
+ var request_dict = {}
+ request_dict.version = data.latest_version;
+ request_dict.board = data.board_name
+ request_dict.model = data.model
+
+ if(data.edit_packages == true) {
+ request_dict.packages = $("#edit_packages").value.split("\n")
+ } else {
+ request_dict.packages = data.packages;
+ }
+
+ server_request(request_dict, "api/upgrade-request", upgrade_request_callback)
+}
+
+function upgrade_request_callback(request) {
+ // ready to download
+ var request_json = JSON.parse(request);
+ data.sysupgrade_url = request_json.sysupgrade;
+
+ var filename_split = data.sysupgrade_url.split("/")
+ data.filename = filename_split[filename_split.length - 1]
+
+ info_output = "Firmware created</br><b>" + data.filename + "</b>"
+ if(data.advanced_mode == 1) {
+ info_output += '</br><a target="_blank" href="' + data.sysupgrade_url + '.log">Build log</a>'
+ }
+ info_box(info_output);
+
+ show("#keep_container");
+ var upgrade_button = $("#upgrade_button")
+ upgrade_button.disabled = false;
+ upgrade_button.style.display = "block";
+ upgrade_button.value = "Flash firmware";
+ upgrade_button.onclick = download_image;
+}
+
+function flash_image() {
+ // Flash image via rpc-sys upgrade_start
+ info_box("Flashing firmware. Don't unpower device", true)
+ ubus_call("rpc-sys", "upgrade_start", { "keep": $("#keep").checked }, 'message');
+ ping_max = 3600; // in seconds
+ setTimeout(ping_ubus, 10000)
+}
+
+function ping_ubus() {
+ // Tries to connect to ubus. If the connection fails the device is likely still rebooting.
+ // If more time than ping_max passes update may failed
+ if(ping_max > 0) {
+ ping_max--;
+ var request = new XMLHttpRequest();
+ request.open("GET", ubus_url, true);
+ request.addEventListener('error', function(event) {
+ info_box("Rebooting device", true);
+ setTimeout(ping_ubus, 1000)
+ });
+ request.addEventListener('load', function(event) {
+ info_box("Success! Please reload web interface");
+ $("#upgrade_button").value = "Reload page";
+ show("#upgrade_button");
+ $("#upgrade_button").disabled = false;
+ $("#upgrade_button").onclick = function() { location.reload(); }
+ });
+ request.send();
+ } else {
+ error_box("Web interface could not reconnect to your device. Please reload web interface or check device manually")
+ }
+}
+
+function upload_image(blob) {
+ // Uploads received blob data to the server using cgi-io
+ var request = new XMLHttpRequest();
+ var form_data = new FormData();
+
+ form_data.append("sessionid", data.ubus_rpc_session)
+ form_data.append("filename", "/tmp/firmware.bin")
+ form_data.append("filemode", 755) // insecure?
+ form_data.append("filedata", blob)
+
+ request.addEventListener('load', function(event) {
+ request_json = JSON.parse(request.responseText)
+ flash_image();
+ });
+
+ request.addEventListener('error', function(event) {
+ info_box("Upload of firmware failed, please retry by reloading web interface")
+ });
+
+ request.open('POST', origin + '/cgi-bin/cgi-upload');
+ request.send(form_data);
+}
+
+
+function download_image() {
+ // Download image from server once the url was received by upgrade_request
+ hide("#keep_container");
+ hide("#upgrade_button");
+ var download_request = new XMLHttpRequest();
+ download_request.open("GET", data.sysupgrade_url);
+ download_request.responseType = "arraybuffer";
+
+ download_request.onload = function () {
+ if (this.status === 200) {
+ var blob = new Blob([download_request.response], {type: "application/octet-stream"});
+ upload_image(blob)
+ }
+ };
+ info_box("Downloading firmware", true);
+ download_request.send();
+}
+
+function server_request(request_dict, path, callback) {
+ request_dict.distro = data.release.distribution;
+ request_dict.target = data.release.target.split("\/")[0];
+ request_dict.subtarget = data.release.target.split("\/")[1];
+ var request = new XMLHttpRequest();
+ request.open("POST", data.url + "/" + path, true);
+ request.setRequestHeader("Content-type", "application/json");
+ request.send(JSON.stringify(request_dict));
+ request.onerror = function(e) {
+ error_box("Upgrade server down or could not connect")
+ show("#server_div");
+ }
+ request.addEventListener('load', function(event) {
+ request_text = request.responseText;
+ if (request.status === 200) {
+ callback(request_text)
+
+ } else if (request.status === 202) {
+ var imagebuilder = request.getResponseHeader("X-Imagebuilder-Status");
+ if(imagebuilder === "queue") {
+ // in queue
+ var queue = request.getResponseHeader("X-Build-Queue-Position");
+ info_box("In build queue position " + queue, true)
+ console.log("queued");
+ } else if(imagebuilder === "initialize") {
+ info_box("Setting up ImageBuilder", true)
+ console.log("Setting up imagebuilder");
+ } else if(imagebuilder === "building") {
+ info_box("Building image", true);
+ console.log("building");
+ } else {
+ // fallback if for some reasons the headers are missing e.g. browser blocks access
+ info_box("Processing request", true);
+ console.log(imagebuilder)
+ }
+ setTimeout(function() { server_request(request_dict, path, callback) }, 5000)
+
+ } else if (request.status === 204) {
+ // no upgrades available
+ info_box("No upgrades available")
+
+ } else if (request.status === 400) {
+ // bad request
+ request_json = JSON.parse(request_text)
+ error_box(request_json.error)
+
+ } else if (request.status === 412) {
+ // this is a bit generic
+ error_box("Unsupported device, release, target, subtraget or board")
+
+ } else if (request.status === 413) {
+ error_box("No firmware created due to image size. Try again with less packages selected.")
+
+ } else if (request.status === 422) {
+ error_box("Unknown package in request")
+
+ } else if (request.status === 500) {
+ request_json = JSON.parse(request_text)
+
+ error_box_content = "<b>Internal server error</b></br>"
+ error_box_content += request_json.error
+ if(request_json.log != undefined) {
+ data.log_url = request_json.log
+ }
+ error_box(error_box_content)
+
+ } else if (request.status === 501) {
+ error_box("No sysupgrade file produced, may not supported by modell.")
+
+ } else if (request.status === 502) {
+ // python part offline
+ error_box("Server down for maintenance")
+ setTimeout(function() { server_request(request_dict, path, callback) }, 30000)
+ } else if (request.status === 503) {
+ error_box("Server overloaded")
+ setTimeout(function() { server_request(request_dict, path, callback) }, 30000)
+ }
+ });
+}
+document.onload = setup()
+
diff --git a/applications/luci-app-bcp38/po/ru/bcp38.po b/applications/luci-app-bcp38/po/ru/bcp38.po
new file mode 100644
index 0000000000..1c43488842
--- /dev/null
+++ b/applications/luci-app-bcp38/po/ru/bcp38.po
@@ -0,0 +1,70 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: bcp38\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-19 19:36+0200\n"
+"PO-Revision-Date: 2017-11-30 21:48+0300\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
+"Language-Team: http://cyber-place.ru\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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.4\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr "Диапазон разрешенных IP адресов"
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+"Попытается автоматически обнаружить, если будет настроена блокировка раздающего IP, "
+"и добавить событие в исключения. Если автоматичеки не получиться, можно добавить "
+"данное событие в исключения вручную ниже."
+
+msgid "Auto-detect upstream IP"
+msgstr "Автоматическое определение раздающего IP"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr "BCP38 config файл"
+
+msgid "Blocked IP ranges"
+msgstr "Диапазон запрещенных IP адресов"
+
+msgid "Enable"
+msgstr "Включить"
+
+msgid "Interface name"
+msgstr "Имя интерфейса"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+"Интерфейс для применения блокировки (должен быть раздающим WAN интерфейсом)."
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+"Приоритет имеет блокировка диапазонов IP. Используйте для белого списка вашей "
+"раздающей сети, если вы за двойным NAT-ом и автоматическое обнаружение не работает."
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
+"Эта функция блокирует пакеты с частными адресами назначения из выхода в "
+"интернет согласно <a href=\"http://tools.ietf.org/html/ bcp38\">BCP 38</a>. "
+"Для IPv6, устанавливаются только специфичные для источника маршруты по умолчанию "
+"поэтому BCP38 не используется фаерволом."
+
diff --git a/applications/luci-app-clamav/po/ru/clamav.po b/applications/luci-app-clamav/po/ru/clamav.po
new file mode 100644
index 0000000000..6658693e84
--- /dev/null
+++ b/applications/luci-app-clamav/po/ru/clamav.po
@@ -0,0 +1,133 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: clamav\n"
+"POT-Creation-Date: 2017-10-17 22:00+0300\n"
+"PO-Revision-Date: 2018-01-05 20:13+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "Блокировать зашифрованные архивы"
+
+msgid "ClamAV"
+msgstr "Антивирус ClamAV"
+
+msgid "Database check every N sec"
+msgstr "Проверка базы данных каждые N сек"
+
+msgid "Detect broken executables"
+msgstr "Обнаружение нерабочих исполняемых файлов"
+
+msgid "Detect possibly unwanted apps"
+msgstr "Обнаружение возможных нежелательных приложений"
+
+msgid "Enable verbose logging"
+msgstr "Включить подробное ведение системного журнала"
+
+msgid "Follow directory symlinks"
+msgstr "Следовать по ссылкам на папки"
+
+msgid "Follow file symlinks"
+msgstr "Следовать по ссылкам на файлы"
+
+msgid "Log"
+msgstr "Системный журнал"
+
+msgid "Log additional infection info"
+msgstr ""
+"Дополнительный файл системного журнала, содержащий информацию о заражении"
+
+msgid "Log time with each message"
+msgstr "Время записи в системный журнал - каждого сообщения"
+
+msgid "Max directory scan depth"
+msgstr "Максимальный размер сканируемой папки"
+
+msgid "Max number of threads"
+msgstr "Максимальное кол-во потоков"
+
+msgid "Max size of log file"
+msgstr "Максимальный размер системного журнала"
+
+msgid "Max size of scanned file"
+msgstr "Максимальный размер сканируемого файла"
+
+msgid "No"
+msgstr "Нет"
+
+msgid "Port range, highest port"
+msgstr "Диапазон портов, максимальный номер порта"
+
+msgid "Port range, lowest port"
+msgstr "Диапазон портов, наименьший номер порта"
+
+msgid "Scan ELF files"
+msgstr "Сканировать elf файлы"
+
+msgid "Scan MS Office and .msi files"
+msgstr "Сканировать MS Office и *.msi файлы"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr ""
+"Сканирование сообщений RFC1341, разделенных на множество сообщений "
+"электронной почты"
+
+msgid "Scan archives"
+msgstr "Сканировать архивы"
+
+msgid "Scan emails"
+msgstr "Сканировать е-майлы"
+
+msgid "Scan pdf files"
+msgstr "Сканировать pdf файлы"
+
+msgid "Scan portable executables"
+msgstr "Сканировать портативные исполняемые файлы"
+
+msgid "Scan swf files"
+msgstr "Сканировать swf файлы"
+
+msgid "Settings"
+msgstr "Настройки"
+
+msgid "Yes"
+msgstr "Да"
diff --git a/applications/luci-app-commands/po/ru/commands.po b/applications/luci-app-commands/po/ru/commands.po
index 0c035ab731..30c84df066 100644
--- a/applications/luci-app-commands/po/ru/commands.po
+++ b/applications/luci-app-commands/po/ru/commands.po
@@ -1,38 +1,38 @@
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-10-15 16:48+0200\n"
-"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
-"Language-Team: none\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: commands\n"
+"POT-Creation-Date: 2013-10-15 16:48+0300\n"
+"PO-Revision-Date: 2018-01-07 21:27+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
"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"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "A short textual description of the configured command"
msgstr "Короткое текстовое описание команды"
-#, fuzzy
msgid ""
"Allow executing the command and downloading its output without prior "
"authentication"
msgstr ""
-"Разрешить выполнение команды и загрузку ее вывода без предварительной "
-"аутентификации"
+"Разрешить выполнение команды и загрузку ее выходных данных без ввода пароля "
+"пользователя"
msgid "Allow the user to provide additional command line arguments"
msgstr ""
-"Разрешить пользователям использовать дополнительные аргументы командной "
+"Разрешить пользователю предоставлять дополнительные аргументы командной "
"строки"
msgid "Arguments:"
msgstr "Аргументы:"
msgid "Binary data not displayed, download instead."
-msgstr "Двоичные данные не отображаются, вместо этого - выгружаются"
+msgstr "Двоичные данные не отображаются, вместо этого загружаются."
msgid "Code:"
msgstr "Код:"
@@ -44,13 +44,13 @@ msgid "Command"
msgstr "Команда"
msgid "Command executed successfully."
-msgstr ""
+msgstr "Команда выполнена успешно."
msgid "Command exited with status code"
-msgstr ""
+msgstr "Команда вышла с кодом состояния."
msgid "Command failed"
-msgstr "Команда не выполнена"
+msgstr "Ошибка команды"
msgid "Command line to execute"
msgstr "Командная строка для выполнения"
@@ -62,7 +62,7 @@ msgid "Command:"
msgstr "Команда:"
msgid "Configure"
-msgstr "Настроить"
+msgstr "Настройка панели управления"
msgid "Custom Commands"
msgstr "Пользовательские команды"
@@ -71,7 +71,7 @@ msgid "Custom arguments"
msgstr "Пользовательские аргументы"
msgid "Dashboard"
-msgstr "Информационная панель"
+msgstr "Панель управления"
msgid "Description"
msgstr "Описание"
@@ -80,7 +80,7 @@ msgid "Download"
msgstr "Скачать"
msgid "Download execution result"
-msgstr ""
+msgstr "Результат выполнения загрузки"
msgid "Failed to execute command!"
msgstr "Ошибка выполнения команды!"
@@ -92,7 +92,7 @@ msgid "Loading"
msgstr "Загрузка"
msgid "Or display result"
-msgstr ""
+msgstr "Или отобразить результат"
msgid "Public access"
msgstr "Публичный доступ"
@@ -101,20 +101,18 @@ msgid "Run"
msgstr "Запуск"
msgid "Standard Error"
-msgstr ""
+msgstr "Стандартная ошибка"
msgid "Standard Output"
-msgstr ""
+msgstr "Стандартный вывод"
msgid ""
"This page allows you to configure custom shell commands which can be easily "
"invoked from the web interface."
msgstr ""
-"Эта страница предоставляет возможность настраивать пользовательские "
-"консольные команды, которые могут быть легко вызваны из веб-интерфейса"
+"Страница позволяет настроить выполнение консольных команд пользователя, "
+"которые могут быть легко вызваны из веб-интерфейса по нажатию соответсвующей "
+"кнопки. Здесь вы можете подписать кнопки и указать команды."
msgid "Waiting for command to complete..."
msgstr "Ожидание завершения команды..."
-
-#~ msgid "Access command with"
-#~ msgstr "Доступ к команде через"
diff --git a/applications/luci-app-ddns/po/ru/ddns.po b/applications/luci-app-ddns/po/ru/ddns.po
index a41d1f498b..33ab9e7758 100644
--- a/applications/luci-app-ddns/po/ru/ddns.po
+++ b/applications/luci-app-ddns/po/ru/ddns.po
@@ -1,183 +1,201 @@
msgid ""
msgstr ""
-"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
-"POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2012-11-01 21:54+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: ddns\n"
+"POT-Creation-Date: 2017-10-17 21:00+0300\n"
+"PO-Revision-Date: 2018-01-05 20:37+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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: Poedit 1.8.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"Language: ru\n"
msgid "&"
-msgstr ""
+msgstr "и"
msgid "-- custom --"
-msgstr ""
+msgstr "-- пользовательский --"
msgid "-- default --"
-msgstr ""
+msgstr "-- по умолчанию --"
msgid "Advanced Settings"
-msgstr ""
+msgstr "Дополнительные настройки"
msgid "Allow non-public IP's"
-msgstr ""
+msgstr "Разрешить не публичные IP адреса"
msgid "Applying changes"
-msgstr ""
+msgstr "Применение изменений"
msgid "Basic Settings"
-msgstr ""
+msgstr "Основные настройки"
msgid ""
"Below a list of configuration tips for your system to run Dynamic DNS "
"updates without limitations"
msgstr ""
+"Советы по настройке для запуска динамических обновлений DNS без ограничений."
msgid ""
"Below is a list of configured DDNS configurations and their current state."
-msgstr ""
+msgstr "Список настроек config файлов DDNS и их текущее состояние."
msgid "Bind Network"
-msgstr ""
+msgstr "Привязать сеть"
msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "Привязка к определенной сети, не поддерживается."
msgid ""
"BusyBox's nslookup and Wget do not support to specify the IP version to use "
"for communication with DDNS Provider!"
msgstr ""
+"nslookup и Wget BusyBox-а, не поддерживают автоматическое назначение "
+"случайного IP-адресадля связи с DDNS провайдером!"
msgid ""
"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
"of default UDP when requesting DNS server!"
msgstr ""
+"nslookup и hostip BusyBox-а, не поддерживают автоматическое определение "
+"использования TCP (по умолчанию UDP) при запросе сервера DNS! "
msgid ""
"BusyBox's nslookup in the current compiled version does not handle given DNS "
"Servers correctly!"
msgstr ""
+"Благодаря nslookup текущей случайно скомпилированной, BusyBox не "
+"обрабатывает данные Серверы DNS правильно!"
msgid "Casual users should not change this setting"
-msgstr ""
+msgstr "Случайные пользователи, не должны изменять эти настройки"
msgid "Change provider"
-msgstr ""
+msgstr "Сменить провайдера"
msgid "Check Interval"
-msgstr ""
+msgstr "Интервал проверки"
msgid "Collecting data..."
-msgstr ""
+msgstr "Сбор данных"
msgid "Config error"
-msgstr ""
+msgstr "Ошибка config файла"
msgid "Configuration"
-msgstr ""
+msgstr "Настройка config файла"
msgid ""
"Configure here the details for all Dynamic DNS services including this LuCI "
"application."
-msgstr ""
+msgstr "Настройка для всех служб DDNS, включая это приложение LuCI."
msgid "Configure here the details for selected Dynamic DNS service."
-msgstr ""
+msgstr "Тонкая настройка выбранной службы DDNS."
msgid "Current setting"
-msgstr ""
+msgstr "Текущие настройки"
msgid ""
"Currently DDNS updates are not started at boot or on interface events.<br /"
">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
"force_interval set to '0')"
msgstr ""
+"В настоящее время, обновления DDNS не запускаются при загрузке или при "
+"событиях интерфейса.<br />по умолчанию, если вы запускаете DDNS скрипты сами "
+"(т.е. через cron с force_interval set to '0')"
msgid ""
"Currently DDNS updates are not started at boot or on interface events.<br /"
">You can start/stop each configuration here. It will run until next reboot."
msgstr ""
+"В настоящее время, обновления DDNS не запускаются при загрузке или при "
+"событиях интерфейса.<br />.<br />Вы можете запустить/остановить каждый "
+"config здесь. Он будет работать до следующей перезагрузки."
msgid "Custom update script to be used for updating your DDNS Provider."
msgstr ""
+"Пользовательский скрипт обновления, который будет использоваться для вашего "
+"провайдера DDNS."
msgid "Custom update-URL"
msgstr "Пользовательский URL обновления"
msgid "Custom update-script"
-msgstr ""
+msgstr "Пользовательский скрипт обновления"
msgid "DDNS Autostart disabled"
-msgstr ""
+msgstr "Автостарт DDNS отключен"
msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "Настройка клиента DDNS"
msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "Информация клиента DDNS"
msgid "DDNS Service provider"
-msgstr ""
+msgstr "Провайдер службы DDNS"
msgid "DNS requests via TCP not supported"
-msgstr ""
+msgstr "DNS запросы по протоколу TCP не поддерживаются"
msgid "DNS-Server"
-msgstr ""
+msgstr "DNS сервер"
msgid "Date format"
-msgstr ""
+msgstr "Формат даты"
msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr ""
+msgstr "Определяет веб-страницу для чтения IPv4-адреса систем из"
msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr ""
+msgstr "Определяет веб-страницу для чтения IPv6-адреса систем из"
msgid "Defines the interface to read systems IP-Address from"
-msgstr ""
+msgstr "Определяет интерфейс для чтения системных IP-адресов из"
msgid "Defines the network to read systems IPv4-Address from"
-msgstr ""
+msgstr "Определяет сеть для чтения систем IPv4-адреса из"
msgid "Defines the network to read systems IPv6-Address from"
-msgstr ""
+msgstr "Определяет сеть для чтения систем IPv6-адреса из"
msgid ""
"Defines the source to read systems IPv4-Address from, that will be send to "
"the DDNS provider"
msgstr ""
+"Определяет источник для чтения IPv4-адресов систем, которые будут отправлены "
+"DDNS провайдеру."
msgid ""
"Defines the source to read systems IPv6-Address from, that will be send to "
"the DDNS provider"
msgstr ""
+"Определяет источник для чтения IPv6-адресов систем, которые будут отправлены "
+"DDNS провайдеру."
msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr ""
+msgstr "Определяет, какой IP адрес 'IPv4/IPv6' отправляется провайдеру DDNS."
msgid "Details for"
-msgstr ""
+msgstr "Подробно"
msgid "Directory contains Log files for each running section"
-msgstr ""
+msgstr "Папка содержит файлы системного журнала для каждого запуска."
msgid ""
"Directory contains PID and other status information for each running section"
-msgstr ""
+msgstr "Папка содержит PID и прочую информацию о состояниии каждого запуска."
msgid "Disabled"
-msgstr ""
+msgstr "Отключено"
msgid "Domain"
-msgstr ""
+msgstr "Домен"
msgid "Dynamic DNS"
msgstr "Динамический DNS"
@@ -186,136 +204,159 @@ msgid ""
"Dynamic DNS allows that your router can be reached with a fixed hostname "
"while having a dynamically changing IP address."
msgstr ""
-"Динамический DNS позволяет вашему маршрутизатору иметь постоянное доменное "
-"имя при динамическом IP-адресе."
+"DDNS разрешает вашему роутеру иметь постоянное доменное имя, при динамически "
+"изменяемом IP-адресе."
msgid "Enable secure communication with DDNS provider"
-msgstr ""
+msgstr "Включить безопасное соединение с провайдером DDNS"
msgid "Enabled"
-msgstr ""
+msgstr "Включено"
msgid "Error"
-msgstr ""
+msgstr "Ошибка"
msgid "Error Retry Counter"
-msgstr ""
+msgstr "Ошибка учета попыток повтора"
msgid "Error Retry Interval"
-msgstr ""
+msgstr "Ошибка интервала попытки повтора"
msgid "Event Network"
-msgstr ""
+msgstr "Событие сети"
msgid "File"
-msgstr ""
+msgstr "Файл"
msgid "File not found"
-msgstr ""
+msgstr "Файл не найден"
msgid "File not found or empty"
-msgstr ""
+msgstr "Файл не найден или пустой"
msgid ""
"Follow this link<br />You will find more hints to optimize your system to "
"run DDNS scripts with all options"
msgstr ""
+"Пройдите по этой ссылке<br />там вы найдете больше информации, как настроить "
+"вашу систему с использованием DDNS скриптов с наиболее полным функционалом."
msgid "For detailed information about parameter settings look here."
msgstr ""
+"Здесь вы сможете получить, более подробную информацию о параметрах настройки."
msgid "For supported codes look here"
-msgstr ""
+msgstr "С поддерживаемыми кодами, вы сможете ознакомится здесь."
msgid "Force IP Version"
-msgstr ""
+msgstr "Назначенный случайный IP-адрес"
msgid "Force IP Version not supported"
-msgstr ""
+msgstr "Назначенный случайный IP-адрес, не поддерживается"
msgid "Force Interval"
-msgstr ""
+msgstr "Назначить интервал"
msgid "Force TCP on DNS"
-msgstr ""
+msgstr "Выбрать протокол TCP для DNS"
msgid "Forced IP Version don't matched"
-msgstr ""
+msgstr "Назначенный случайный IP-адрес, не транслируется"
msgid "Format"
-msgstr ""
+msgstr "Значение"
msgid "Format: IP or FQDN"
-msgstr ""
+msgstr "Значение: IP или полное доменное имя"
msgid ""
"GNU Wget will use the IP of given network, cURL will use the physical "
"interface."
msgstr ""
+"GNU wget будет использовать IP присвоенный сетью, cURL будет использовать "
+"физический интерфейс."
msgid "Global Settings"
-msgstr ""
+msgstr "Основные настройки"
msgid "HTTPS not supported"
-msgstr ""
+msgstr "HTTPS не поддерживается"
msgid "Hints"
-msgstr ""
+msgstr "Подсказки"
msgid "Hostname/FQDN to validate, if IP update happen or necessary"
msgstr ""
+"Имя хоста/полное доменное имя для проверки, если обновление IP происходит "
+"или оно необходимо."
msgid "IP address source"
-msgstr ""
+msgstr "IP адрес источника"
msgid "IP address version"
-msgstr ""
+msgstr "Случайный IP-адрес"
msgid "IPv4-Address"
-msgstr ""
+msgstr "IPv4-адрес"
msgid "IPv6 address must be given in square brackets"
-msgstr ""
+msgstr "IPv6 адрес должен быть указан в квадратных скобках"
msgid ""
"IPv6 is currently not (fully) supported by this system<br />Please follow "
"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
"your system to the latest OpenWrt Release"
msgstr ""
+"IPv6 не поддерживается вашей прошивкой < br />пожалуйста, следуйте "
+"инструкциям на главной странице OpenWrt, чтобы включить поддержку IPv6<br / "
+"> или обновить прошивку до последнего выпуска OpenWrt с включением поддержки "
+"IPv6."
msgid "IPv6 not supported"
-msgstr ""
+msgstr "IPv6 не поддерживается"
msgid "IPv6-Address"
-msgstr ""
+msgstr "IPv6-адрес"
msgid "If both cURL and GNU Wget are installed, Wget is used by default."
msgstr ""
+"Если установлены cURL и GNU Wget вместе, Wget будет использоваться по "
+"умолчанию."
msgid ""
"If this service section is disabled it could not be started.<br />Neither "
"from LuCI interface nor from console"
msgstr ""
+"Если этот режим службы отключен, его нельзя будет запустить. Не с веб-"
+"интерфейса LuCI, ни с консоли."
msgid "If using secure communication you should verify server certificates!"
msgstr ""
+"Если используется безопасное соединение, необходимо проверить сертификаты "
+"сервера!"
msgid ""
"If you want to send updates for IPv4 and IPv6 you need to define two "
"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
msgstr ""
+"Протоколы IPv4 и IPv6 необходимо настроить раздельно , т. е. 'myddns_ipv4' и "
+"'myddns_ipv6'."
msgid ""
"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
msgstr ""
+"В некоторых случаях cURL/libcurl, если OpenWrt скомпилирован без поддержки "
+"прокси."
msgid "Info"
-msgstr ""
+msgstr "Информация"
msgid ""
"Install 'ca-certificates' package or needed certificates by hand into /etc/"
"ssl/certs default directory"
msgstr ""
+"Установите 'ca-certificates' или пакет необходимых сертификатов вручную в "
+"папку/etc/ssl/certs"
msgid "Interface"
msgstr "Интерфейс"
@@ -324,408 +365,438 @@ msgid ""
"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
"are not supported"
msgstr ""
+"Интервал для проверки измененных IP<br />ниже 5 минут = = 300 секунд не "
+"поддерживаются."
msgid ""
"Interval to force updates send to DDNS Provider<br />Setting this parameter "
"to 0 will force the script to only run once<br />Values lower 'Check "
"Interval' except '0' are not supported"
msgstr ""
+"Интервал для принудительного обновления отправить провайдеру DDNS<br /"
+">Установка этого параметра в 0 заставит сценарий работать только один "
+"раз<br />значения ниже 'Интервал проверки', за исключением '0' не "
+"поддерживаются."
msgid "It is NOT recommended for casual users to change settings on this page."
msgstr ""
+"Не рекомендуется случайным пользователям, изменять настройки на этой "
+"странице."
msgid "Last Update"
-msgstr ""
+msgstr "Последнее обновление"
msgid "Loading"
-msgstr ""
+msgstr "Загрузка"
msgid "Log File Viewer"
-msgstr ""
+msgstr "Просмотр системного журнала"
msgid "Log directory"
-msgstr ""
+msgstr "Папка системного журнала"
msgid "Log length"
-msgstr ""
+msgstr "Длина системного журнала"
msgid "Log to file"
-msgstr ""
+msgstr "Запись в файл"
msgid "Log to syslog"
-msgstr ""
+msgstr "Запись в системный журнал"
msgid "Lookup Hostname"
-msgstr ""
+msgstr "Поиск имени хоста"
msgid "NOT installed"
-msgstr ""
+msgstr "Не установлено"
msgid ""
"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
"communication."
-msgstr ""
+msgstr "Neither GNU Wget с SSL nor cURL установлены для выбора сети для связи."
msgid ""
"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
"HTTPS protocol."
msgstr ""
+"Neither GNU Wget с SSL nor cURL установлены для поддержки безопасных "
+"обновлений по протоколу HTTPS."
msgid "Network"
msgstr "Сеть"
msgid "Network on which the ddns-updater scripts will be started"
-msgstr ""
+msgstr "Сеть, в которой будут запущены скрипты DDNS-updater"
msgid "Never"
-msgstr ""
+msgstr "Никогда"
msgid "Next Update"
-msgstr ""
+msgstr "Следующее обновление"
msgid "No certificates found"
-msgstr ""
+msgstr "Сертификаты не найдены"
msgid "No data"
-msgstr ""
+msgstr "Нет данных"
msgid "No logging"
-msgstr ""
+msgstr "Нет записи в системный журнал"
msgid "Non-public and by default blocked IP's"
-msgstr ""
+msgstr "Непубличные и по умолчанию заблокированные IP-адреса"
msgid "Notice"
-msgstr ""
+msgstr "Заметка"
msgid "Number of last lines stored in log files"
-msgstr ""
+msgstr "Число последних строк, системного журнала."
msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr ""
+msgstr "Необязательно: Принудительное использование протоколов IPv4/IPv6."
msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
msgstr ""
+"Необязательно: Принудительное использование протокола TCP вместо UDP по "
+"умолчанию для DNS-запросов."
msgid "OPTIONAL: Network to use for communication"
-msgstr ""
+msgstr "Необязательно: Сеть для связи"
msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr ""
+msgstr "Необязательно: Прокси-сервер для обнаружения и обновления."
msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
msgstr ""
+"Необязательно: Использовать по умолчанию DNS-сервер, чтобы обнаружить "
+"'зарегистрирована IP."
msgid "On Error the script will retry the failed action after given time"
msgstr ""
+"При ошибке скрипт повторит неудачное действие, по истечении заданного "
+"времени."
msgid "On Error the script will stop execution after given number of retrys"
msgstr ""
+"При ошибке скрипт прекратит выполнение, после заданного количества повторных "
+"попыток."
msgid "OpenWrt Wiki"
-msgstr ""
+msgstr "OpenWrt Wiki"
msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "Необязательный кодированный параметр"
msgid "Optional Parameter"
-msgstr ""
+msgstr "Необязательный параметр"
msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Дополнительно: заменяет [PARAMENC] в Update-URL-адрес (URL-encoded)"
msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "Дополнительно: заменяет [PARAMOPT] в Update-URL-адрес (не URL-encoded)"
msgid "Overview"
-msgstr ""
+msgstr "Главное меню"
msgid "PROXY-Server"
-msgstr ""
+msgstr "Прокси сервер"
msgid "PROXY-Server not supported"
-msgstr ""
+msgstr "Прокси сервер не поддерживается"
msgid "Password"
msgstr "Пароль"
msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "Путь к CA-Certificate"
msgid "Please [Save & Apply] your changes first"
-msgstr ""
+msgstr "Нажмите [Сохранить и применить] чтобы сохранить ваши настройки."
msgid "Please press [Read] button"
-msgstr ""
+msgstr "Нажмите кнопку [Читать / Перечитывать системный журнал]"
msgid "Please update to the current version!"
-msgstr ""
+msgstr "Обновите до текущей версии!"
msgid "Process ID"
-msgstr ""
+msgstr "ID процесса"
msgid "Read / Reread log file"
-msgstr ""
+msgstr "Чтение / перечитка системного журнала"
msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "Действительно сменить DDNS провайдера?"
msgid "Registered IP"
-msgstr ""
+msgstr "Зарегистрированный IP"
msgid "Replaces [DOMAIN] in Update-URL"
-msgstr ""
+msgstr "Заменяет [ДОМЕН] в Update-URL"
msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Заменяет [ПАРОЛЬ] в Update-URL (URL-encoded)"
msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Заменяет [ЛОГИН] in Update-URL (URL-encoded)"
msgid "Run once"
-msgstr ""
+msgstr "Запуск один раз"
msgid "Script"
-msgstr ""
+msgstr "Скрипт"
msgid "Show more"
-msgstr ""
+msgstr "Показать больше"
msgid "Software update required"
-msgstr ""
+msgstr "Требуется обновление программного обеспечения."
msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "Указанный DNS-сервер не поддерживается"
msgid "Start"
-msgstr ""
+msgstr "Старт"
msgid "Start / Stop"
-msgstr ""
+msgstr "Старт / Стоп"
msgid "Status directory"
-msgstr ""
+msgstr "Папка состояния"
msgid "Stopped"
-msgstr ""
+msgstr "Остановлено"
msgid ""
"The currently installed 'ddns-scripts' package did not support all available "
"settings."
msgstr ""
+"Пакет установленных 'ddns-scripts' не поддерживает все доступные настройки."
msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "Значение по умолчанию '0' будет повторяться бесконечно."
msgid "There is no service configured."
-msgstr ""
+msgstr "Сервис не настроен."
msgid "Timer Settings"
-msgstr ""
+msgstr "Настройка таймера"
msgid "To change global settings click here"
-msgstr ""
+msgstr "Чтобы изменить основные настройки, нажмите здесь"
msgid "To use cURL activate this option."
-msgstr ""
+msgstr "Для использования cURL активируйте режим."
msgid "URL"
msgstr "URL"
msgid "URL to detect"
-msgstr ""
+msgstr "обнаружен URL"
msgid "Unknown error"
-msgstr ""
+msgstr "Неизвестная ошибка"
msgid ""
"Update URL to be used for updating your DDNS Provider.<br />Follow "
"instructions you will find on their WEB page."
msgstr ""
+"Update URL используется для обновления DDNS-провайдера.<br />Следуйте "
+"инструкциям, вы найдете на их на их веб-странице."
msgid "Update error"
-msgstr ""
+msgstr "Ошибка обновления"
msgid "Use HTTP Secure"
-msgstr ""
+msgstr "Использовать HTTPS"
msgid "Use cURL"
-msgstr ""
+msgstr "Использовать cURL"
msgid "User defined script to read systems IP-Address"
-msgstr ""
+msgstr "Определяемый пользователем скрипт для чтения системного IP-адреса."
msgid "Username"
msgstr "Имя пользователя"
msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "Использование определенного DNS-сервера не поддерживается."
msgid "Verify"
-msgstr ""
+msgstr "Проверить"
msgid "Version"
-msgstr ""
+msgstr "Версия"
msgid "Version Information"
-msgstr ""
+msgstr "Случайная информация"
msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "Ожидание применения изменений..."
msgid "Warning"
-msgstr ""
+msgstr "Внимание"
msgid ""
"Writes detailed messages to log file. File will be truncated automatically."
msgstr ""
+"Пишет подробные сообщения в системный журнал. Файл будет автоматически "
+"обрезан."
msgid ""
"Writes log messages to syslog. Critical Errors will always be written to "
"syslog."
msgstr ""
+"Ведение логов. Критические ошибки, всегда будут записаны в системный журнал."
msgid ""
"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
"package, if you need to specify a DNS server to detect your registered IP."
msgstr ""
+"Установите 'bind-host' или 'knot-host' или 'drill' или 'hostip' пакеты если "
+"вам нужно указать DNS-сервер для обнаружения вашего зарегистрированного IP-"
+"адреса."
msgid ""
"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
"requests."
-msgstr ""
+msgstr "Установите 'bind-host' или 'knot-host' или 'drill' для DNS запросов."
msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "Установите 'wget' или 'curl' или 'uclient-fetch' пакет."
msgid ""
"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
"*ssl' package."
msgstr ""
+"Установите 'wget' или 'curl' или 'uclient-fetch' с 'libustream-*ssl' пакетом."
msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "Установите 'wget' или 'curl' пакеты."
msgid ""
"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
msgstr ""
+"Вы должны установить 'wget' или пакет 'uclient-fetch' или заменить libcurl."
msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr ""
+msgstr "cURL установлен, но libcurl был скомпилирован без поддержки прокси."
msgid "cURL without Proxy Support"
-msgstr ""
+msgstr "cURL без поддержки прокси"
msgid "can not detect local IP. Please select a different Source combination"
-msgstr ""
+msgstr "не может определить локальный IP-адрес. Выберите другой вариант"
msgid "can not resolve host:"
-msgstr ""
+msgstr "не может разрешить хост:"
msgid "config error"
-msgstr ""
+msgstr "ошибка в config файле"
msgid "days"
-msgstr ""
+msgstr "дни"
msgid "directory or path/file"
-msgstr ""
+msgstr "папка или путь/к файлу"
msgid "either url or script could be set"
-msgstr ""
+msgstr "или url или скрипт смог быть установлен"
msgid "enable here"
-msgstr ""
+msgstr "Включить здесь"
msgid "file or directory not found or not 'IGNORE'"
-msgstr ""
+msgstr "файл или папка не найдена или не 'Игнорировать'"
msgid "help"
-msgstr ""
+msgstr "помощь"
msgid "hours"
-msgstr ""
+msgstr "часы"
msgid "installed"
-msgstr ""
+msgstr "установлено"
msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "недопустимое полное доменное имя / обязательный образец"
msgid "minimum value '0'"
-msgstr ""
+msgstr "минимальное значение '0'"
msgid "minimum value '1'"
-msgstr ""
+msgstr "минимальное значение '1'"
msgid "minimum value 5 minutes == 300 seconds"
-msgstr ""
+msgstr "минимальное значение 5 минут == 300 секунд"
msgid "minutes"
-msgstr ""
+msgstr "минуты"
msgid "missing / required"
-msgstr ""
+msgstr "отсутствует / не требуется"
msgid "must be greater or equal 'Check Interval'"
-msgstr ""
+msgstr "должно быть больше или равно 'Интервал проверки'"
msgid "must start with 'http://'"
-msgstr ""
+msgstr "должны начинаться с 'http://'"
msgid "nc (netcat) can not connect"
-msgstr ""
+msgstr "NC (netcat) не может подключиться"
msgid "never"
-msgstr ""
+msgstr "никогда"
msgid "no data"
-msgstr ""
+msgstr "нет данных"
msgid "not found or not executable - Sample: '/path/to/script.sh'"
msgstr ""
+"не найден или не является исполнительным, например: '/path/to/script.sh'"
msgid "nslookup can not resolve host"
-msgstr ""
+msgstr "nslookup не может разрешить хост"
msgid "or"
-msgstr ""
+msgstr "или"
msgid "or higher"
-msgstr ""
+msgstr "или выше"
msgid "please disable"
-msgstr ""
+msgstr "отключите"
msgid "please remove entry"
-msgstr ""
+msgstr "удалите эту запись"
msgid "please select 'IPv4' address version"
-msgstr ""
+msgstr "выберите случайный 'IPv4' адрес"
msgid "please select 'IPv4' address version in"
-msgstr ""
+msgstr "выберите случайный 'IPv4' адрес в"
msgid "please set to 'default'"
-msgstr ""
+msgstr "установите режим 'по умолчанию'"
msgid "proxy port missing"
-msgstr ""
+msgstr "отсутствует прокси порт"
msgid "required"
-msgstr ""
+msgstr "требовать"
msgid "seconds"
-msgstr ""
+msgstr "секунды"
msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr ""
+msgstr "использовать HTTPS без проверки сертификатов сервера (небезопасно)"
msgid "unknown error"
-msgstr ""
+msgstr "неизвестная ошибка"
msgid "unspecific error"
-msgstr ""
+msgstr "нетипичная ошибка"
msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr ""
+msgstr "использовать имя хоста, полное доменное имя, IPv4 или IPv6-адрес"
diff --git a/applications/luci-app-diag-core/po/ru/diag_core.po b/applications/luci-app-diag-core/po/ru/diag_core.po
index 1abaa8c6c8..931cc2b236 100644
--- a/applications/luci-app-diag-core/po/ru/diag_core.po
+++ b/applications/luci-app-diag-core/po/ru/diag_core.po
@@ -1,21 +1,20 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: diag_core\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2012-08-15 11:44+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 11:44+0300\n"
+"PO-Revision-Date: 2018-01-07 19:47+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Configure Diagnostics"
-msgstr "Настройки диагностики"
+msgstr "Настройка диагностики"
msgid "Diagnostics"
msgstr "Диагностика"
@@ -24,22 +23,19 @@ msgid ""
"The diagnostics available under this menu depend on what modules you have "
"installed on your device."
msgstr ""
-"Доступные в данном меню виды диагностики зависят от установленных на вашем "
-"устройстве модулей. "
+"Доступные виды диагностики зависят от установленных на вашем устройстве "
+"модулей. "
msgid ""
"The entries in the menu allow you to perform diagnostic tests on your system "
"to aid in troubleshooting."
msgstr ""
-"Записи в меню позволять вам выполнить диагностику системы, чтобы помочь в "
+"Настройки позволять вам выполнить диагностику системы, чтобы помочь в "
"обнаружении проблем."
msgid ""
"With this menu you can configure network diagnostics, such as network device "
"scans and ping tests."
msgstr ""
-"Используя это меню, вы можете настроить диагностику сети, например, "
+"На этой странице вы можете настроить диагностику сети, например, "
"сканирование сетевых устройств или ping-тест."
-
-#~ msgid "l_d_diag"
-#~ msgstr "l_d_diag"
diff --git a/applications/luci-app-dnscrypt-proxy/po/ru/dnscrypt-proxy.po b/applications/luci-app-dnscrypt-proxy/po/ru/dnscrypt-proxy.po
new file mode 100644
index 0000000000..385d81219c
--- /dev/null
+++ b/applications/luci-app-dnscrypt-proxy/po/ru/dnscrypt-proxy.po
@@ -0,0 +1,276 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: dnscrypt-proxy\n"
+"POT-Creation-Date: 2017-10-17 14:30+0300\n"
+"PO-Revision-Date: 2018-01-06 14:20+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Advanced"
+msgstr "Дополнительно"
+
+msgid "Alternate Resolver List"
+msgstr "Альтернативный список разрешенных серверов"
+
+msgid ""
+"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />"
+msgstr ""
+"Применить специальные настройки DNSCrypt-Proxy для Dnsmasq config файла.<br /"
+">"
+
+msgid "Blacklist"
+msgstr "Черный список"
+
+msgid "Block IPv6"
+msgstr "Блокировать IPv6"
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"'All' available network interfaces.<br />"
+msgstr ""
+"По дефолту DNSCrypt-Proxy стартует на всех доступных интерфейсах 'All'.<br />"
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr "Настройка DNSCrypt-Proxy. "
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances.<br />"
+msgstr ""
+"Создать конфиг файл '/etc/resolv-crypt.conf' с 'options timeout:1' для "
+"уменьшения восходящих тайм-аутов DNS с многократными DNSCrypt instances.<br /"
+">"
+
+msgid "Create Config File"
+msgstr "Создать сonfig файл"
+
+msgid "Create Custom Config File"
+msgstr "Создать config"
+
+msgid "DNS Query Logfile"
+msgstr "Файл системного журнала запроса DNS"
+
+msgid "DNSCrypt-Proxy"
+msgstr "DNSCrypt-Proxy"
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr "Файл системного журнала DNSCrypt-Proxy"
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr "DNSCrypt-Proxy список разрешенных серверов"
+
+msgid "Default Resolver List"
+msgstr "Дефолтный список разрешенных серверов"
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr "Отключить IPv6 для DNSCrypt-Proxy."
+
+msgid "Dnsmasq Options"
+msgstr "Настройка Dnsmasq"
+
+msgid "Download the current resolver list from 'download.dnscrypt.org'."
+msgstr "Скачать текущий список разрешенных серверов с 'download.dnscrypt.org'."
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr "Настройка config файла DNSCrypt-Proxy"
+
+msgid "Edit Dnsmasq Configuration"
+msgstr "Настройка config файла Dnsmasq"
+
+msgid "Edit Resolvcrypt Configuration"
+msgstr "Настройка config файла Resolvcrypt"
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr "Включить кэширование для ускорения DNSCcrypt-Proxy."
+
+msgid "Ephemeral Keys"
+msgstr "Эфемерные ключи"
+
+msgid "File Checksum"
+msgstr "Контрольная сумма файла"
+
+msgid "File Date"
+msgstr "Дата и время создания файла"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+"Для более подробной информации <a href=\"%s\" target=\"_blank\">обратитесь к "
+"wiki онлайн</a>."
+
+msgid "General Options"
+msgstr "Основные настройки"
+
+msgid "IP Address"
+msgstr "IP адрес"
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+"Улучшить безопасность, используя эфемерный открытый ключ для каждого запроса."
+
+msgid "Input file not found, please check your configuration."
+msgstr "Введенный файл не найден, пожалуйста проверьте ваши настройки."
+
+msgid "Instance Options"
+msgstr "Дополнительные настройки"
+
+msgid "Local Cache"
+msgstr "Местный кэш"
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+"Локальные Черные списки, позволяют блокировать сайты по их доменам или IP-"
+"адресам."
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+"Записывайте в журнал полученные запросы DNS. Таким образом, Вы сможете "
+"наблюдать в режиме реального времени, что происходит в сети."
+
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
+msgstr ""
+"Имя удаленного сервера DNS для разрешения запросов к нему. Location, DNSSEC- "
+"и NOLOG-Flag (LOC/SEC/NOLOG)."
+
+msgid "No SSL support available.<br />"
+msgstr "Отсутствует поддержка SSL.<br />"
+
+msgid "No default resolver list and no SSL support available.<br />"
+msgstr "Отсутствует список разрешенных серверов и не поддерживается SSL.<br />"
+
+msgid "Overview"
+msgstr "Главное меню"
+
+msgid "Please edit the file manually in the 'Advanced' section."
+msgstr "Пожалуйста, отредактируйте файл вручную в разделе 'Дополнительно'."
+
+msgid ""
+"Please install a 'libustream-ssl' library to download the current resolver "
+"list from 'download.dnscrypt.org'."
+msgstr ""
+"Пожалуйста установите 'libustream-openssl' для загрузки текущего списка "
+"разрешенных серверов с 'download.dnscrypt.org'."
+
+msgid ""
+"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-"
+"resolvers.csv' to use this package."
+msgstr ""
+"Пожалуйста установите список разрешенных серверов в '/usr/share/dnscrypt-"
+"proxy/dnscrypt-resolvers.csv' для использования данного сервиса."
+
+msgid ""
+"Please note: This may change the values for 'noresolv', 'resolvfile', "
+"'allservers' and the list 'server' settings."
+msgstr ""
+"Примечание: Этот режим, может изменить значения для 'noresolv', "
+"'resolvfile', 'allservers' и параметры настройки списка 'серверов'."
+
+msgid "Port"
+msgstr "Порт"
+
+msgid "Refresh List"
+msgstr "Обновить список"
+
+msgid "Refresh Resolver List"
+msgstr "Обновить список разрешенных серверов"
+
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr "Разрешено(LOC/SEC/NOLOG)"
+
+msgid "Save"
+msgstr "Сохранить"
+
+msgid "Specify a non-default Resolver List."
+msgstr "Специальный недефолтный список разрешенных серверов."
+
+msgid "Startup Trigger"
+msgstr "Выберите интерфейс"
+
+msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />"
+msgstr "Config файл '/etc/resolv-crypt.conf' уже существует.<br />"
+
+msgid "The listening port for DNS queries."
+msgstr "Прослушивание порта для DNS запросов."
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+"Локальные IPv4 или IPv6 адреса. Заключить в скобки, как образец '[::1]'."
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+"Описание свойств значения - тип Черного списка и путь к файлу как образец "
+"'domains:/path/to/dbl.txt' или 'ips:/path/to/ipbl.txt'."
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+"Страница позволяет изменять содержимое config файла DNSCrypt-Proxy (/etc/"
+"config/dnscrypt-proxy)."
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+"Страница позволяет изменять содержимое config файла Dnsmasq (/etc/config/"
+"dhcp)."
+
+msgid ""
+"This form allows you to modify the content of the resolv-crypt configuration "
+"file (/etc/resolv-crypt.conf)."
+msgstr ""
+"Страница позволяет изменять содержимое config файла resolv-crypt (/etc/"
+"resolv-crypt.conf)."
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+"Страница демонстрирует содержимое DNSCrypt списка разрешенных серверов."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+"Страница показывает вывод системного журнала, предварительно фильтруемый "
+"только для DNSCrypt-Proxy."
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+"Этот режим нагружает CPU и большинством DNSCrypt серверов не поддерживается."
+
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
+msgstr ""
+"Выберите только соответствующий сетевой интерфейс. Обычно интерфейса 'wan', "
+"достаточно для большинства пользователей."
+
+msgid "Transfer Options To Dnsmasq"
+msgstr "Режим передачи Dnsmasq-у"
+
+msgid "View Logfile"
+msgstr "Системный журнал"
+
+msgid "View Resolver List"
+msgstr "Список разрешенных серверов"
diff --git a/applications/luci-app-dynapoint/po/ru/dynapoint.po b/applications/luci-app-dynapoint/po/ru/dynapoint.po
new file mode 100644
index 0000000000..844eedb9af
--- /dev/null
+++ b/applications/luci-app-dynapoint/po/ru/dynapoint.po
@@ -0,0 +1,114 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: dynapoint\n"
+"POT-Creation-Date: 2017-12-01 16:15+0300\n"
+"PO-Revision-Date: 2018-01-05 22:11+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Activate this wVIF if status is:"
+msgstr "Применение DynaPoint-а"
+
+msgid "Append hostname to ssid"
+msgstr "Изменить SSID"
+
+msgid "Append the router's hostname to the SSID when connectivity check fails"
+msgstr ""
+"Добавление имени хоста роутера к SSID, если подключение к интернету "
+"отсутствует."
+
+msgid "Check Internet connectivity via HTTP header download"
+msgstr "Проверка подключения к интернету, с помощью получения HTTP-ответа."
+
+msgid "Configuration"
+msgstr "Настройка config файла"
+
+msgid "Curl is currently not installed."
+msgstr "Curl в настоящее время не установлен."
+
+msgid "Device"
+msgstr "Устройство"
+
+msgid "Disabled"
+msgstr "Отключено"
+
+msgid "DynaPoint"
+msgstr "DynaPoint"
+
+msgid "Dynamic Access Point Manager"
+msgstr "Диспетчер динамических точек доступа."
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid ""
+"Failure counter after how many failed download attempts, the state is "
+"considered as offline"
+msgstr ""
+"Кол-во попыток получить HTTP-ответ, после чего подключение к интернету будет "
+"считаться разорванным."
+
+msgid "List of Wireless Virtual Interfaces (wVIF)"
+msgstr "Список беспроводных сетей (точек доступа):"
+
+msgid "List of host addresses"
+msgstr "HTTP-адреса"
+
+msgid ""
+"List of host addresses (url or IP) to track and request http headers from"
+msgstr ""
+"Список HTTP-адресов (ссылка или IP-адрес) для проверки подключения к "
+"интернету."
+
+msgid "Mode"
+msgstr "Режим"
+
+msgid "Not used by DynaPoint"
+msgstr "Не используется DynaPoint"
+
+msgid "Offline"
+msgstr "Отключен"
+
+msgid "Online"
+msgstr "Включен"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "Switch_to_offline threshold"
+msgstr "Кол-во попыток"
+
+msgid "Test-run interval"
+msgstr "Интервал"
+
+msgid "Time interval in seconds to re-start a new test run"
+msgstr ""
+"Временной интервал в секундах, для повторного запуска проверки подключения к "
+"интернету."
+
+msgid "Use curl"
+msgstr "Использовать curl"
+
+msgid "Use curl instead of wget"
+msgstr "Curl вместо wget"
+
+msgid "Use curl instead of wget for testing the connectivity."
+msgstr "Используйте curl вместо команды wget для тестирования подключения."
+
+msgid "Used interface"
+msgstr "Используемый интерфейс"
+
+msgid "Which interface should curl use. (Use ifconfig to find out)"
+msgstr ""
+"Какой интерфейс должен использовать curl. (Использовать команду ifconfig, "
+"чтобы узнать)."
+
+msgid "WiFi Status"
+msgstr "Состояние"
diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
index 463b2e05f4..58121c4203 100644
--- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
+++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm
@@ -5,7 +5,7 @@
%>
<div class="cbi-section-create cbi-tblsection-create">
- <% if wz and lz then %>
+ <% if wz then %>
<br />
<table class="cbi-section-table" style="margin-left:5px">
<tr class="cbi-section-table-titles">
@@ -37,7 +37,8 @@
</td>
</tr>
</table>
-
+ <% end %>
+ <% if wz and lz then %>
<table class="cbi-section-table" style="margin-left:5px">
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell left" colspan="6"><br /><%:New forward rule%>:</th>
@@ -71,7 +72,11 @@
</td>
</tr>
</table>
+ <% else %>
+ <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" />
+ <% end %>
+ <% if wz then %>
<script type="text/javascript">//<![CDATA[
cbi_validate_field('_newopen.extport', true, 'list(neg(portrange))');
cbi_bind(document.getElementById('_newopen.extport'), 'blur',
@@ -106,7 +111,5 @@
cbi_validate_field('cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>', true, 'uciname');
//]]></script>
- <% else %>
- <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" />
<% end %>
</div>
diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po
index be16fece88..3657d742e7 100644
--- a/applications/luci-app-firewall/po/ru/firewall.po
+++ b/applications/luci-app-firewall/po/ru/firewall.po
@@ -1,19 +1,17 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: firewall\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2013-09-05 16:02+0200\n"
-"Last-Translator: datasheet <michael.gritsaenko@gmail.com>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2013-09-05 16:02+0200\n"
+"PO-Revision-Date: 2018-01-07 20:55+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "%s in %s"
msgstr "%s в %s"
@@ -55,10 +53,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 "Любой"
@@ -75,9 +73,8 @@ msgid ""
"each firewall restart, right after the default ruleset has been loaded."
msgstr ""
"Пользовательские правила позволяют выполнять произвольные команды iptables, "
-"которые так или иначе не покрываются данным фреймворком межсетевого экрана. "
-"Команды выполняются при каждом перезапуске межсетевого экрана, сразу после "
-"того, как загружен набор правил по умолчанию."
+"которые не охвачены рамками брандмауэра. Команды выполняются после каждой "
+"перезагрузки брандмауэра сразу после загрузки набора правил по умолчанию."
msgid "Destination IP address"
msgstr "IP-адрес назначения"
@@ -100,7 +97,6 @@ msgstr "Не пропускать некорректные пакеты"
msgid "Enable"
msgstr "Включить"
-#, fuzzy
msgid "Enable NAT Loopback"
msgstr "Включить NAT Loopback"
@@ -147,7 +143,7 @@ msgid "Forward to"
msgstr "Перенаправлять в"
msgid "Friday"
-msgstr ""
+msgstr "Пятница"
msgid "From %s in %s"
msgstr "Из %s в %s"
@@ -200,37 +196,36 @@ msgstr "Ограничение MSS"
msgid "Masquerading"
msgstr "Маскарадинг"
-#, fuzzy
msgid "Match"
-msgstr "Выбирать"
+msgstr "Проверка"
msgid "Match ICMP type"
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 "
"on this host"
msgstr ""
-"Выбирать входящий трафик, направленный на порт или диапазон портов данного "
-"хоста"
+"Проверять входящий трафик, направленный на порт или диапазон портов данного "
+"хоста. "
msgid ""
"Match incoming traffic originating from the given source port or port range "
"on the client host."
msgstr ""
-"Выбирать входящий трафик, исходящий из порта или диапазона портов "
-"клиентского хоста."
+"Проверять входящий трафик, исходящий от заданного исходного порта или "
+"диапазона портов на клиентского хоста. "
msgid "Monday"
-msgstr ""
+msgstr "Понедельник"
msgid "Month Days"
-msgstr ""
+msgstr "Дни Месяца"
msgid "Name"
msgstr "Имя"
@@ -301,7 +296,7 @@ msgid "Redirect matched incoming traffic to the specified internal host"
msgstr "Перенаправить входящий трафик на указанный хост внутренней сети"
msgid "Restart Firewall"
-msgstr ""
+msgstr "Перезапуск межсетевой экрана"
msgid "Restrict Masquerading to given destination subnets"
msgstr "Использовать маскарадинг только для указанных подсетей-получателей"
@@ -335,29 +330,8 @@ msgid "SNAT port"
msgstr "Порт SNAT"
msgid "Saturday"
-msgstr ""
+msgstr "Суббота"
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua #
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# msgid "Traffic Redirection"
-# msgstr ""
-# msgid ""
-# "Traffic redirection allows you to change the destination address of "
-# "forwarded packets."
-# msgstr ""
-# msgid "Overview"
-# msgstr ""
-# msgid "Name"
-# msgstr ""
-# msgid "Source zone"
-# msgstr ""
-# msgid "Source MAC-address"
-# msgstr ""
-# msgid "Source port"
-# msgstr ""
-# msgid "Protocol"
-# msgstr ""
msgid "Source IP address"
msgstr "IP-адрес источника"
@@ -387,19 +361,19 @@ msgid "Source zone"
msgstr "Зона-источник"
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата начала (yyyy-mm-dd)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Время начала (hh:mm:ss)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Дата остановки (yyyy-mm-dd)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Время остановки (hh:mm:ss)"
msgid "Sunday"
-msgstr ""
+msgstr "Воскресенье"
msgid ""
"The firewall creates zones over your network interfaces to control network "
@@ -415,11 +389,11 @@ msgid ""
"<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."
+"зонами. Трафиком <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 "
@@ -435,7 +409,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 "
@@ -443,18 +416,18 @@ msgid ""
"forwarded traffic between different networks within the zone. <em>Covered "
"networks</em> specifies which available networks are members of this zone."
msgstr ""
-"Данная секция позволяет изменять общие настройки %q. Опции <em>входящий</em> "
-"и <em>исходящий</em> устанавливают политику по умолчанию для входящего и "
-"исходящего трафика. Опция <em>перенаправление</em> позволяет установить "
-"политику для трафика, который перенаправляется через несколько сетей в зоне. "
-"Пункт <em>использовать сети</em> позволяет указать, какие сети являются "
-"частью данной зоны."
+"Страница содержит общие свойства %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>"
@@ -487,7 +460,7 @@ msgstr ""
"портов маршрутизатора."
msgid "Tuesday"
-msgstr ""
+msgstr "Вторник"
msgid "Via %s"
msgstr "Через %s"
@@ -496,16 +469,16 @@ 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 "
"protocols separated by space."
msgstr ""
-"Вы можете указать несколько, выбрав \"-- пользовательский --\" и перечислив "
+"Вы можете указать несколько, выбрав '-- пользовательский --' и перечислив "
"через пробел названия протоколов."
msgid "Zone %q"
@@ -542,4 +515,4 @@ msgid "reject"
msgstr "отвергать"
msgid "traffic"
-msgstr ""
+msgstr "трафик"
diff --git a/applications/luci-app-fwknopd/po/ru/fwknopd.po b/applications/luci-app-fwknopd/po/ru/fwknopd.po
new file mode 100644
index 0000000000..2e67e0d071
--- /dev/null
+++ b/applications/luci-app-fwknopd/po/ru/fwknopd.po
@@ -0,0 +1,115 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: fwknopd\n"
+"POT-Creation-Date: 2017-12-01 12:15+0300\n"
+"PO-Revision-Date: 2018-01-06 12:55+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid ""
+"Allow SPA clients to request access to services through an iptables firewall "
+"instead of just to it."
+msgstr ""
+"Разрешить SPA клиентам запрашивать доступ к сервисам через файрвол iptables, "
+"а не напрямую."
+
+msgid "Allow SPA clients to request forwarding destination by DNS name."
+msgstr ""
+"Разрешить SPA клиентам запрашивать проброс назначения используя DNS имена."
+
+msgid "Base 64 key"
+msgstr "64-битный ключ"
+
+msgid ""
+"Define a set of ports and protocols (tcp or udp) that will be opened if a "
+"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
+"to honor any proto/port request specified in the SPA data (unless of it "
+"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
+msgstr ""
+"Определите порты и протоколы (TCP или UDP), которые будут открыты, если "
+"отображается допустимая последовательность защищенного постукивания. Если "
+"этот параметр не задан, fwknopd постарается исполнить любой прото/порт "
+"запрос, указанный в SPA данных (если он соответствует любой “RESTRICT_PORTS” "
+"записи). Последовательность данных, разделенных запятыми."
+
+msgid ""
+"Define the length of time access will be granted by fwknopd through the "
+"firewall after a valid knock sequence from a source IP address. If "
+"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
+"automatically be set."
+msgstr ""
+"Определите, какой срок доступа будет предоставлен fwknopd через файрвол, "
+"после допустимой последовательности защищенного постукивания из исходящего "
+"IP-адреса. Если параметр “FW_ACCESS_TIMEOUT” не установлен, то автоматически "
+"устанавливается тайм-аут по умолчанию в 30 секунд."
+
+msgid ""
+"Define the symmetric key used for decrypting an incoming SPA packet that is "
+"encrypted by the fwknop client with Rijndael."
+msgstr ""
+"Определите симметричный ключ, используемый для расшифровки входящего SPA "
+"пакета зашифрованного fwknop клиентом с помощью Rijndael."
+
+msgid "Enable Uci/Luci control"
+msgstr "Включить управление в Uci/Luci"
+
+msgid "Enable config overwrite"
+msgstr "Включить перезапись config файла"
+
+msgid "Firewall Knock Daemon"
+msgstr "Firewall Knock Daemon"
+
+msgid "Firewall Knock Operator"
+msgstr "Настройка защищенного постукивания файрвола"
+
+msgid ""
+"Force all SPA packets to contain a real IP address within the encrypted "
+"data. This makes it impossible to use the -s command line argument on the "
+"fwknop client command line, so either -R has to be used to automatically "
+"resolve the external address (if the client behind a NAT) or the client must "
+"know the external IP and set it via the -a argument."
+msgstr ""
+"Обязать все SPA пакеты содержать реальный IP-адрес в зашифрованных данных. "
+"Это делает невозможным использование аргумента командной строки -s в "
+"командной строке fwknop клиента, поэтому либо -R должен использоваться для "
+"автоматического разрешения внешнего адреса (если клиент за NAT), либо клиент "
+"должен знать внешний IP и установить его используя аргумент -a."
+
+msgid ""
+"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
+"seconds"
+msgstr ""
+"Максимальное время в секундах, в течение которых будет принят SPA пакет, по "
+"умолчанию 120 секунд."
+
+msgid "Normal Key"
+msgstr "Нормальный ключ"
+
+msgid "Specify the ethernet interface on which fwknopd will sniff packets."
+msgstr "Укажите ethernet интерфейс, пакеты которого fwknopd будет снифить."
+
+msgid "The base64 hmac key"
+msgstr "Основной 64-битный hmac ключ."
+
+msgid "Use ANY for any source ip"
+msgstr "Использовать ЛЮБОЙ, для любого исходящего IP."
+
+msgid ""
+"When unchecked, the config files in /etc/fwknopd will be used as is, "
+"ignoring any settings here."
+msgstr ""
+"Если эта галочка не установлена, config файл /etc/fwknopd будет "
+"использоваться как есть, игнорируя любые изменения настроек fwknopd здесь. "
+
+msgid "access.conf stanzas"
+msgstr "Код доступа access.conf"
+
+msgid "fwknopd.conf config options"
+msgstr "Настройка config файла - fwknopd.conf"
diff --git a/applications/luci-app-hd-idle/po/ru/hd_idle.po b/applications/luci-app-hd-idle/po/ru/hd_idle.po
index e58a32f1de..e776760f0c 100644
--- a/applications/luci-app-hd-idle/po/ru/hd_idle.po
+++ b/applications/luci-app-hd-idle/po/ru/hd_idle.po
@@ -1,19 +1,17 @@
msgid ""
msgstr ""
-"Project-Id-Version: LuCI: hd_idle\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-14 10:33+0200\n"
-"PO-Revision-Date: 2012-08-15 11:24+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: hd_idle\n"
+"POT-Creation-Date: 2012-08-15 11:24+0300\n"
+"PO-Revision-Date: 2018-01-07 19:56+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Disk"
msgstr "Диск"
@@ -38,15 +36,10 @@ msgid "Idle time unit"
msgstr "Единицы времени бездействия"
msgid "Settings"
-msgstr "Настройки"
+msgstr "Настройка"
-# Hours
msgid "h"
msgstr "ч"
-# Minutes (not minimum)
msgid "min"
msgstr "мин"
-
-#~ msgid "Enable debug"
-#~ msgstr "Включить отладку"
diff --git a/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
new file mode 100644
index 0000000000..55de0ad894
--- /dev/null
+++ b/applications/luci-app-mjpg-streamer/po/ru/mjpg-streamer.po
@@ -0,0 +1,174 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: mjpg-streamer\n"
+"POT-Creation-Date: 2017-10-17 14:30+0300\n"
+"PO-Revision-Date: 2018-01-05 19:39+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Allow ringbuffer to exceed limit by this amount"
+msgstr ""
+"Позволить кольцевому буферу превысить ограничение, установив данное значение."
+
+msgid "Ask for username and password on connect"
+msgstr "Задать доступ по имени и паролю."
+
+msgid "Authentication required"
+msgstr "Логин и пароль"
+
+msgid "Auto"
+msgstr "Автоматически"
+
+msgid "Automatic disabling of MJPEG mode"
+msgstr "Автоматически отключится MJPEG."
+
+msgid "Blink"
+msgstr "Мигает"
+
+msgid "Check to save the stream to an mjpeg file"
+msgstr "Проверка сохранения потока в mjpeg файл."
+
+msgid "Command to run"
+msgstr "Введите команду"
+
+msgid "Device"
+msgstr "Устройство"
+
+msgid "Do not initalize dynctrls of Linux-UVC driver"
+msgstr "Не задействует dynctrls драйвера Linux-UVC."
+
+msgid "Don't initalize dynctrls"
+msgstr "Отключить dynctrls"
+
+msgid "Drop frames smaller then this limit"
+msgstr "Ограничить кол-во кадров"
+
+msgid "Enable MJPG-streamer"
+msgstr "Включить MJPG-streamer"
+
+msgid "Enable YUYV format"
+msgstr "Включить YUYV формат"
+
+msgid "Enabled"
+msgstr "Включить"
+
+msgid "Exceed"
+msgstr "Превышение"
+
+msgid ""
+"Execute command after saving picture. Mjpg-streamer parse the filename as "
+"first parameter to your script."
+msgstr ""
+"Выполнить команду после сохранения изображения. Mjpg-streamer задаст имя "
+"файла в качестве первого параметра вашего скрипта."
+
+msgid "File input"
+msgstr "Файл ввода"
+
+msgid "File output"
+msgstr "Вывод в файл"
+
+msgid "Folder"
+msgstr "Папка"
+
+msgid "Folder that contains webpages"
+msgstr "Содержимое вебстраницы, находится в этой папке."
+
+msgid "Frames per second"
+msgstr "Кадров в секунду"
+
+msgid "General"
+msgstr "Основные настройки"
+
+msgid "HTTP output"
+msgstr "HTTP вывод"
+
+msgid "Input plugin"
+msgstr "Плагин ввода"
+
+msgid "Interval between saving pictures"
+msgstr "Интервал между снимками"
+
+msgid "JPEG compression quality"
+msgstr "Качество JPEG"
+
+msgid "Led control"
+msgstr "Управление светодиодным индикатором вебкамеры"
+
+msgid "MJPG-streamer"
+msgstr "MJPG-streamer"
+
+msgid "Max. number of pictures to hold"
+msgstr "Размер кольцевого буфера."
+
+msgid "Mjpeg output"
+msgstr "Mjpeg вывод"
+
+msgid "Off"
+msgstr "Выключить"
+
+msgid "On"
+msgstr "Включить"
+
+msgid "Output plugin"
+msgstr "Плагин вывода"
+
+msgid "Password"
+msgstr "Пароль"
+
+msgid "Plugin settings"
+msgstr "Настроить плагины"
+
+msgid "Port"
+msgstr "Порт"
+
+msgid "Resolution"
+msgstr "Разрешение"
+
+msgid "Ring buffer size"
+msgstr "Задать размер буфера"
+
+msgid "Set folder to save pictures"
+msgstr "Задать папку для сохранения снимков."
+
+msgid "Set the inteval in millisecond"
+msgstr "Задать интервал в миллисекундах."
+
+msgid ""
+"Set the minimum size if the webcam produces small-sized garbage frames. May "
+"happen under low light conditions"
+msgstr ""
+"Задайте минимальное значение, если вебкамера не справляется при плохом "
+"освещении."
+
+msgid ""
+"Set the quality in percent. This setting activates YUYV format, disables "
+"MJPEG"
+msgstr ""
+"Задать качество в процентах. Данная настройка активирует YUYV формат "
+"отключая MJPEG."
+
+msgid "TCP port for this HTTP server"
+msgstr "Задать TCP порт для HTTP сервера."
+
+msgid "UVC input"
+msgstr "UVC ввод"
+
+msgid "Username"
+msgstr "Логин"
+
+msgid "WWW folder"
+msgstr "WWW папка"
+
+msgid ""
+"mjpg streamer is a streaming application for Linux-UVC compatible webcams"
+msgstr ""
+"Приложение для трансляции потокового видео, для Linux-UVC совместимых веб-"
+"камер. Просмотр http://192.168.1.1:8080/?action=stream"
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua
index eb6f417afe..dc2e0da447 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua
@@ -27,8 +27,8 @@ interface = mwan_member:option(Value, "interface", translate("Interface"))
cbi_add_interface(interface)
metric = mwan_member:option(Value, "metric", translate("Metric"),
- translate("Acceptable values: 1-1000. Defaults to 1 if not set"))
- metric.datatype = "range(1, 1000)"
+ translate("Acceptable values: 1-256. Defaults to 1 if not set"))
+ metric.datatype = "range(1, 256)"
weight = mwan_member:option(Value, "weight", translate("Weight"),
translate("Acceptable values: 1-1000. Defaults to 1 if not set"))
diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po
index 34a9f1f3b3..841a5e701f 100644
--- a/applications/luci-app-mwan3/po/ja/mwan3.po
+++ b/applications/luci-app-mwan3/po/ja/mwan3.po
@@ -37,6 +37,9 @@ msgstr ""
msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
msgstr "利用可能な値: 1-1000。空欄の場合のデフォルトは1です。"
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "利用可能な値: 1-256。空欄の場合のデフォルトは1です。"
+
msgid "Advanced"
msgstr "詳細設定"
diff --git a/applications/luci-app-mwan3/po/ru/mwan3.po b/applications/luci-app-mwan3/po/ru/mwan3.po
new file mode 100644
index 0000000000..f3f7a551d2
--- /dev/null
+++ b/applications/luci-app-mwan3/po/ru/mwan3.po
@@ -0,0 +1,663 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: mwan3\n"
+"POT-Creation-Date: 2017-09-14 16:00+0300\n"
+"PO-Revision-Date: 2018-01-05 17:54+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "%d hour"
+msgstr "%d час"
+
+msgid "%d minute"
+msgstr "%d минута"
+
+msgid "%d minutes"
+msgstr "%d минуты"
+
+msgid "%d second"
+msgstr "%d секунда"
+
+msgid "%d seconds"
+msgstr "%d секунды"
+
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Допустимые значения: 1-100. Установите количество ответов IP-адресов. "
+"Сколько раз они должны ответить, чтобы соединение было признано активным."
+
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Допустимые значения: 1-1000. По умолчанию 1, если значение не задано."
+
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Допустимые значения: 1-256 По умолчанию 1, если значение не задано."
+
+msgid "Advanced"
+msgstr "Дополнительно"
+
+msgid "Check IP rules"
+msgstr "Проверить правила IP"
+
+msgid "Check routing table"
+msgstr "Проверить таблицу маршрутизации"
+
+msgid "Collecting data..."
+msgstr "Сбор информации..."
+
+msgid "Configuration"
+msgstr "Настройка config файла"
+
+msgid "Currently Configured Interfaces"
+msgstr "Настроенные интерфейсы"
+
+msgid "Currently Configured Members"
+msgstr "Настроенные узлы"
+
+msgid "Currently Configured Policies"
+msgstr "Настроенных политики"
+
+msgid "Destination address"
+msgstr "Адрес назначения"
+
+msgid "Destination port"
+msgstr "Порт назначения"
+
+msgid "Detailed Status"
+msgstr "Подробная Информация"
+
+msgid "Diagnostic Results"
+msgstr "Результаты диагностики"
+
+msgid "Diagnostics"
+msgstr "Диагностика"
+
+msgid "Disabled"
+msgstr "Отключено"
+
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr "Интерфейс будет считаться отключенным, после продолжительного пинга."
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Введите значение в шестнадцатеричной форме, начиная с <code>0x</code>."
+
+msgid "Error collecting troubleshooting information"
+msgstr "Сбор сведений об устранении неполадок."
+
+msgid "Errors"
+msgstr "Ошибки"
+
+msgid "Expect interface state on up event"
+msgstr "Ожидание "
+
+msgid "Failure interval"
+msgstr "Интервал отказа"
+
+msgid "Firewall mask"
+msgstr "Маска межсетевого экрана"
+
+msgid "Flush conntrack table"
+msgstr "Сбросьте conntrack таблицу"
+
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Сбросьте глобальные настройки межсетевого экрана conntrack таблицы по "
+"истории интерфейса."
+
+msgid "Globals"
+msgstr "Общие"
+
+msgid "Globals mwan3 options"
+msgstr "Общие mwan3 настройки"
+
+msgid "Hotplug Script"
+msgstr "Скрипт Hotplug"
+
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+msgid "IPset"
+msgstr "IPset"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Initial state"
+msgstr "Исходное состояние"
+
+msgid "Interface"
+msgstr "Интерфейс"
+
+msgid "Interface Status"
+msgstr "Состояние интерфейса"
+
+msgid "Interface down"
+msgstr "Интерфейс отключить"
+
+msgid "Interface up"
+msgstr "Интерфейс включить"
+
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "Интерфейс будут считать отключенным, после данного количества пингов."
+
+msgid "Interfaces"
+msgstr "Интерфейсы"
+
+msgid "Internet Protocol"
+msgstr "Протокол интернета"
+
+msgid "Keep failure interval"
+msgstr "Сохранить интервал сбоя"
+
+msgid "Keep ping failure interval during failure state"
+msgstr "Сохранить интервал сбоя ping-а, во время состояния сбоя"
+
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr ""
+"Последние 50 systemlog записей MWAN . Новые записи расположены сверху :"
+
+msgid "Last resort"
+msgstr "Последнее средство"
+
+msgid "Load Balancing"
+msgstr "Балансировка нагрузки"
+
+msgid "Loading"
+msgstr "Загрузка"
+
+msgid "Local source interface"
+msgstr "Локальный исходящий интефейс"
+
+msgid "MWAN Config"
+msgstr "MWAN config файл"
+
+msgid "MWAN Detailed Status"
+msgstr "Состояние MWAN"
+
+msgid "MWAN Interface Configuration"
+msgstr "Настройка интерфейса MWAN"
+
+msgid "MWAN Interface Configuration - %s"
+msgstr "Настройка интерфейса MWAN - %s"
+
+msgid "MWAN Interface Diagnostics"
+msgstr "Диагностика интерфейса MWAN"
+
+msgid "MWAN Interface Live Status"
+msgstr "Состояние интерфейса MWAN"
+
+msgid "MWAN Interface Systemlog"
+msgstr "Systemlog MWAN интерфейса "
+
+msgid "MWAN Member Configuration"
+msgstr "MWAN настройка узла"
+
+msgid "MWAN Member Configuration - %s"
+msgstr "MWAN настройка узла - %s"
+
+msgid "MWAN Policy Configuration"
+msgstr "MWAN настройка политики"
+
+msgid "MWAN Policy Configuration - %s"
+msgstr "MWAN настройка политики - %s"
+
+msgid "MWAN Rule Configuration"
+msgstr "MWAN настройка правила"
+
+msgid "MWAN Rule Configuration - %s"
+msgstr "MWAN настройка правила - %s"
+
+msgid "MWAN Service Control"
+msgstr "Управление службой MWAN"
+
+msgid ""
+"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN "
+"requires that all interfaces have a unique metric configured in /etc/config/"
+"network<br />Names must match the interface name found in /etc/config/"
+"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, "
+"_ and no spaces<br />Interfaces may not share the same name as configured "
+"members, policies or rules"
+msgstr ""
+"MWAN поддерживает до 250 физических и / или логических интерфейсов<br />MWAN "
+"требует, чтобы все интерфейсы имели уникальную метрику, сконфигурированную "
+"в /etc/config/network<br />Имена должны соответствовать имени интерфейса, "
+"найденному в /etc/config/network (см. соответствующую страницу)<br />Имена "
+"могут содержать символы A-Z, a-z, 0-9, _ и пробелы<br />Интерфейсы могут не "
+"совпадать с тем же именем, что и для настроенных узлов, политик или правил."
+
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Может быть введено как один или несколько портов (например, \"22\" или "
+"\"80,443\") или как диапазон портов (например, \"1024:2048\") без кавычек."
+
+msgid "Member"
+msgstr "Узел"
+
+msgid "Member used"
+msgstr "Используемый узел"
+
+msgid "Members"
+msgstr "Узлы"
+
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Members "
+"may not share the same name as configured interfaces, policies or rules"
+msgstr ""
+"Узлы имеют профили, содержащие метрику и вес к интерфейсу MWAN<br />Имена "
+"могут содержать символы A-Z, a-z, 0-9, _ и пробелы<br />Узлы могут не иметь "
+"то же имя, что и настроенные интерфейсы, политики или правила."
+
+msgid "Members assigned"
+msgstr "Назначенные узлы"
+
+msgid "Metric"
+msgstr "Metric"
+
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Имя IPset правила. Требуется правило IPset в /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")."
+
+msgid "Network Config"
+msgstr "Config файл сети"
+
+msgid "No"
+msgstr "Нет"
+
+msgid "No MWAN interfaces found"
+msgstr "Интерфейсы MWAN не найдены"
+
+msgid "No MWAN systemlog history found"
+msgstr "Не найдено истории - systemlog MWAN"
+
+msgid "No detailed status information available"
+msgstr "Подробная информация о состоянии отсутствует"
+
+msgid "No diagnostic results returned"
+msgstr "Результаты диагностики не возвращаются"
+
+msgid "No protocol specified"
+msgstr "Протокол не указан"
+
+msgid "Offline"
+msgstr "Отключен"
+
+msgid "Online"
+msgstr "Включен"
+
+msgid "Online (tracking active)"
+msgstr "Включен (отслеживание активно)"
+
+msgid "Online (tracking off)"
+msgstr "Включен (отслеживание отключено)"
+
+msgid "Overview"
+msgstr "Главное меню"
+
+msgid "Ping count"
+msgstr "Кол-во пингов"
+
+msgid "Ping default gateway"
+msgstr "Пинг шлюза по умолчанию"
+
+msgid "Ping interval"
+msgstr "Интервал пинга"
+
+msgid "Ping interval during failure detection"
+msgstr "Интервал пинга во время обнаружения отказов"
+
+msgid "Ping interval during failure recovering"
+msgstr "Интервал пинга во время восстановления отказа"
+
+msgid "Ping size"
+msgstr "Размер пинга"
+
+msgid "Ping timeout"
+msgstr "Таймаут пинга"
+
+msgid "Ping tracking IP"
+msgstr "Пинг отслеживания IP"
+
+msgid "Policies"
+msgstr "Политики"
+
+msgid ""
+"Policies are profiles grouping one or more members controlling how MWAN "
+"distributes traffic<br />Member interfaces with lower metrics are used "
+"first. Interfaces with the same metric load-balance<br />Load-balanced "
+"member interfaces distribute more traffic out those with higher weights<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be "
+"15 characters or less<br />Policies may not share the same name as "
+"configured interfaces, members or rules"
+msgstr ""
+"Политики-это профили, группирующие один или несколько узлов, контролирующие "
+"распределение трафика MWAN<br />Интерфейсы узлов с более низкими метриками "
+"используются сначала. Интерфейсы с тем же метрическим балансом загрузки<br /"
+">Интерфейсы элементов с балансировкой нагрузки распределяют больше трафика с "
+"более высокими значениями<br />Имена могут содержать символы A-Z, a-z, 0-9, "
+"_ и пробелы. Имена должны быть не более 15 символов<br />Политики могут не "
+"иметь то же имя, что и настроенные интерфейсы, узлы или правила."
+
+msgid "Policy"
+msgstr "Политика"
+
+msgid "Policy assigned"
+msgstr "Назначенная политика"
+
+msgid "Protocol"
+msgstr "Протокол"
+
+msgid "Recovery interval"
+msgstr "Интервал восстановления"
+
+msgid "Restart MWAN"
+msgstr "Рестарт MWAN."
+
+msgid "Rule"
+msgstr "Правило"
+
+msgid "Rules"
+msgstr "Правила"
+
+msgid ""
+"Rules specify which traffic will use a particular MWAN policy based on IP "
+"address, port or protocol<br />Rules are matched from top to bottom. Rules "
+"below a matching rule are ignored. Traffic not matching any rule is routed "
+"using the main routing table<br />Traffic destined for known (other than "
+"default) networks is handled by the main routing table. Traffic matching a "
+"rule, but all WAN interfaces for that policy are down will be blackholed<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may "
+"not share the same name as configured interfaces, members or policies"
+msgstr ""
+"Правила определяют, какой трафик будет использовать определенную политику "
+"MWAN на основе IP-адреса, порта и протокола<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, если значение не "
+"установлено."
+
+msgid "Source address"
+msgstr "Исходящий адрес"
+
+msgid "Source port"
+msgstr "Исходящий порт"
+
+msgid "Start MWAN"
+msgstr "Старт MWAN."
+
+msgid "Sticky"
+msgstr "Липкий"
+
+msgid "Sticky timeout"
+msgstr "Липкое значение таймаута"
+
+msgid "Stop MWAN"
+msgstr "Стоп MWAN."
+
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Поддерживает CIDR нотацию (например \"192.168.100.0/24\") без кавычек."
+
+msgid "There are currently %d of 250 supported interfaces configured"
+msgstr "В настоящее время настроен %d из 250 поддерживаемых интерфейсов."
+
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Страница отображает метрики назначения этого интерфейса в /etc/config/"
+"network."
+
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Это имя хоста или IP-адрес для пинга, чтобы определить активно ли соединение "
+"или нет. Оставьте пустым, чтобы предположить, что интерфейс всегда находится "
+"в сети."
+
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE 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 />выполняться с каждым событием netifd "
+"hotplug интерфейса<br />на интерфейсах, для которых включен mwan3.<br /><br /"
+">В этот сценарий передаются три основные переменные среды.<br /><br />"
+"$ACTION либо \"ifup\" или \"ifdown\"<br />$INTERFACE - имя интерфейса, "
+"который включили или отключили (например, \"wan\" или \"wwan\") <br />"
+"$DEVICE - имя физического устройства, чей интерфейс включили или отключили "
+"(например, \"wan\" или \"wwan\")<br /><br />."
+
+msgid "This section allows you to modify the contents of /etc/config/mwan3"
+msgstr "Страница позволяет изменять содержимое config файла /etc/config/mwan3."
+
+msgid "This section allows you to modify the contents of /etc/config/network"
+msgstr ""
+"Страница позволяет изменять содержимое config файла /etc/config/network."
+
+msgid "This section allows you to modify the contents of /etc/config/wireless"
+msgstr ""
+"Страница позволяет изменять содержимое config файла /etc/config/wireless."
+
+msgid "Tracking IP"
+msgstr "Отслеживание IP"
+
+msgid "Tracking hostname or IP address"
+msgstr "Отслеживание имени хоста или IP-адреса"
+
+msgid "Tracking method"
+msgstr "Метод отслеживания"
+
+msgid "Tracking reliability"
+msgstr "Надежность отслеживания"
+
+msgid "Traffic Rules"
+msgstr "Правила трафика"
+
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Трафик с того же IP-адреса источника, который ранее соответствовал этому "
+"правилу в период тайм-аута sticky, будет использовать тот же интерфейс WAN."
+
+msgid "Troubleshooting"
+msgstr "Устранение неполадок"
+
+msgid "Troubleshooting Data"
+msgstr "Устранение неполадок данных"
+
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+"Используйте IP-адрес этого интерфейса в качестве IP-адреса источника для "
+"трафика, инициированного самим роутером."
+
+msgid "View the contents of /etc/protocols for protocol descriptions"
+msgstr "Просмотреть содержимое файла /etc/protocols для описания протокола."
+
+msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!"
+msgstr "ВНИМАНИЕ: интерфейсы %d настроены, превышая максимум 250!"
+
+msgid ""
+"WARNING: Some interfaces are configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые интерфейсы настроены неправильно или вовсе не в /etc/"
+"config/network!"
+
+msgid ""
+"WARNING: Some interfaces have a higher reliability requirement than there "
+"are tracking IP addresses!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые интерфейсы имеют более высокое требование к надежности "
+"чем отслеживая IP-адреса!"
+
+msgid ""
+"WARNING: Some interfaces have duplicate metrics configured in /etc/config/"
+"network!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые интерфейсы имеют повторяющиеся метрики, настроенные в /"
+"etc/config/network!"
+
+msgid ""
+"WARNING: Some interfaces have no default route in the main routing table!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые интерфейсы не имеют маршрута по умолчанию в основной "
+"таблице маршрутизации!"
+
+msgid ""
+"WARNING: Some interfaces have no metric configured in /etc/config/network!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые интерфейсы не имеют метрики, настроенной в /etc/config/"
+"network!"
+
+msgid ""
+"WARNING: Some policies have names exceeding the maximum of 15 characters!"
+msgstr ""
+"ВНИМАНИЕ: Некоторые политики имеют имена, превышающие максимум 15 символов!"
+
+msgid ""
+"WARNING: Some rules have a port configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr ""
+"ВНИМАНИЕ: некоторые правила имеют порт, настроенный без или неправильный "
+"протокол указан! Пожалуйста, настройте конкретный протокол!"
+
+msgid ""
+"WARNING: This and other interfaces have duplicate metrics configured in /etc/"
+"config/network!"
+msgstr ""
+"ВНИМАНИЕ: этот и другие интерфейсы имеют повторяющиеся метрики, настроенные "
+"в /etc/config/network!"
+
+msgid ""
+"WARNING: This interface has a higher reliability requirement than there are "
+"tracking IP addresses!"
+msgstr ""
+"ВНИМАНИЕ: этот интерфейс имеет более высокое требование к надежности, чем "
+"есть отслеживание IP-адресов!"
+
+msgid "WARNING: This interface has no default route in the main routing table!"
+msgstr ""
+"ВНИМАНИЕ: этот интерфейс не имеет маршрута по умолчанию в основной таблице "
+"маршрутизации!"
+
+msgid ""
+"WARNING: This interface has no metric configured in /etc/config/network!"
+msgstr ""
+"ВНИМАНИЕ: этот интерфейс не имеет метрики, настроенной в /etc/config/network!"
+
+msgid ""
+"WARNING: This interface is configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+"ВНИМАНИЕ: этот интерфейс настроен неправильно или его вообще нет в /etc/"
+"config/network!"
+
+msgid ""
+"WARNING: This policy's name is %d characters exceeding the maximum of 15!"
+msgstr "ВНИМАНИЕ: имя этой политики- % D символов, превышающих максимум 15!"
+
+msgid ""
+"WARNING: This rule is incorrectly configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr ""
+"ВНИМАНИЕ: это правило неправильно настроено или неправильно указан протокол! "
+"Пожалуйста, настройте конкретный протокол!"
+
+msgid "Waiting for MWAN to %s..."
+msgstr "Ожидание MWAN до %s..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "Ожидание результатов диагностики..."
+
+msgid "Weight"
+msgstr "Вес"
+
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Когда все члены политики находятся в автономном режиме, используйте это "
+"поведение для сопоставленного трафика."
+
+msgid "Wireless Config"
+msgstr "Настройка беспроводного соединения"
+
+msgid "Yes"
+msgstr "Да"
+
+msgid "always"
+msgstr "всегда"
+
+msgid "blackhole (drop)"
+msgstr "blackhole (drop)"
+
+msgid "default (use main routing table)"
+msgstr "по умолчанию (использовать основную таблицу маршрутизации)"
+
+msgid "ifdown"
+msgstr "ifdown"
+
+msgid "ifup"
+msgstr "ifup"
+
+msgid "never"
+msgstr "никогда"
+
+msgid "restart"
+msgstr "рестарт"
+
+msgid "start"
+msgstr "cтарт"
+
+msgid "stop"
+msgstr "стоп"
+
+msgid "unreachable (reject)"
+msgstr "недоступен (отклонить)"
diff --git a/applications/luci-app-mwan3/po/templates/mwan3.pot b/applications/luci-app-mwan3/po/templates/mwan3.pot
index ed9fdb131d..a993a81b63 100644
--- a/applications/luci-app-mwan3/po/templates/mwan3.pot
+++ b/applications/luci-app-mwan3/po/templates/mwan3.pot
@@ -24,6 +24,9 @@ msgstr ""
msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
msgstr ""
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
msgid "Advanced"
msgstr ""
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
index d0b92a6df1..966f53c711 100644
--- a/applications/luci-app-mwan3/po/zh-cn/mwan3.po
+++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
@@ -33,7 +33,10 @@ msgstr ""
"取值范围:1-100。这个设置项指定了当多少个 IP 地址能够连通时接口会被认为在线"
msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
-msgstr "取值范围:1-100。如果不填写,默认值为 1"
+msgstr "取值范围:1-1000。如果不填写,默认值为 1"
+
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "取值范围:1-256。如果不填写,默认值为 1"
msgid "Advanced"
msgstr "高级"
diff --git a/applications/luci-app-mwan3/po/zh-tw/mwan3.po b/applications/luci-app-mwan3/po/zh-tw/mwan3.po
index 04711ac3d7..d4a652a5dc 100644
--- a/applications/luci-app-mwan3/po/zh-tw/mwan3.po
+++ b/applications/luci-app-mwan3/po/zh-tw/mwan3.po
@@ -33,7 +33,10 @@ msgstr ""
"取值範圍:1-100。這個設定項指定了當多少個 IP 位址能夠連通時介面會被認為線上"
msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
-msgstr "取值範圍:1-100。如果不填寫,預設值為 1"
+msgstr "取值範圍:1-1000。如果不填寫,預設值為 1"
+
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "取值範圍:1-256。如果不填寫,預設值為 1"
msgid "Advanced"
msgstr "高階"
diff --git a/applications/luci-app-privoxy/po/ru/privoxy.po b/applications/luci-app-privoxy/po/ru/privoxy.po
new file mode 100644
index 0000000000..76fd9f6fde
--- /dev/null
+++ b/applications/luci-app-privoxy/po/ru/privoxy.po
@@ -0,0 +1,512 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: privoxy\n"
+"POT-Creation-Date: 2017-12-14 16:00+0300\n"
+"PO-Revision-Date: 2018-01-05 17:40+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid ""
+"A URL to be displayed in the error page that users will see if access to an "
+"untrusted page is denied."
+msgstr ""
+"URL-адрес, отображаемый на странице ошибки, который пользователи будут "
+"видеть, если доступ к ненадежной странице запрещен."
+
+msgid ""
+"A URL to documentation about the local Privoxy setup, configuration or "
+"policies."
+msgstr ""
+"URL-адрес к документации о локальной настройке, конфигурации или политиках "
+"Privoxy."
+
+msgid "A directory where Privoxy can create temporary files."
+msgstr "Папка в которой Privoxy может создавать временные файлы."
+
+msgid "Access Control"
+msgstr "Контроль доступа"
+
+msgid "Actions that are applied to all sites and maybe overruled later on."
+msgstr ""
+"Действия, которые применяются ко всем сайтам и могут быть отменены позже."
+
+msgid "An alternative directory where the templates are loaded from."
+msgstr "Альтернативный каталог, из которого загружаются шаблоны."
+
+msgid "An email address to reach the Privoxy administrator."
+msgstr "Адрес электронной почты, чтобы связаться с администратором Privoxy."
+
+msgid ""
+"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
+"server."
+msgstr ""
+"Взятый на стороне сервера keep-alive тайм-аут (в секундах), если не указан "
+"сервер."
+
+msgid "Boot delay"
+msgstr "Задержка загрузки"
+
+msgid "CGI user interface"
+msgstr "Пользовательский интерфейс CGI."
+
+msgid "Common Log Format"
+msgstr "Типичный формат системного журнала."
+
+msgid ""
+"Configure here the routing of HTTP requests through a chain of multiple "
+"proxies. Note that parent proxies can severely decrease your privacy level. "
+"Also specified here are SOCKS proxies."
+msgstr ""
+"Страница настройки маршрутизации HTTP-запросов через цепочку из нескольких "
+"прокси-серверов. Обратите внимание, что родительские прокси могут "
+"значительно снизить уровень конфиденциальности. Здесь же настройка SOCKS "
+"прокси."
+
+msgid "Debug GIF de-animation"
+msgstr "Отладка GIF де-анимации."
+
+msgid "Debug force feature"
+msgstr "Отладка функции назначения."
+
+msgid "Debug redirects"
+msgstr "Отладка пере направлений."
+
+msgid "Debug regular expression filters"
+msgstr "Отладка фильтров регулярных выражений."
+
+msgid "Delay (in seconds) during system boot before Privoxy start"
+msgstr "Задержка (в секундах) во время загрузки системы до запуска Privoxy."
+
+msgid "Directory does not exist!"
+msgstr "Папка не существует!"
+
+msgid "Disabled == Transparent Proxy Mode"
+msgstr "Отключен == Прозрачный Режим Прокси-Сервера."
+
+msgid "Documentation"
+msgstr "Информация"
+
+msgid "During delay ifup-events are not monitored !"
+msgstr "Во время задержки ifup-events не отслеживаются!"
+
+msgid "Enable proxy authentication forwarding"
+msgstr "Включить проверку подлинности прокси-сервера пере адресации."
+
+msgid ""
+"Enable/Disable autostart of Privoxy on system startup and interface events"
+msgstr ""
+"Включить / Выключить авто запуск Privoxy, при старте системы и событиях "
+"интерфейса."
+
+msgid "Enable/Disable filtering when Privoxy starts."
+msgstr "Включить / Выключить фильтрацию при запуске Privoxy."
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid ""
+"Enabling this option is NOT recommended if there is no parent proxy that "
+"requires authentication!"
+msgstr ""
+"Включение этой опции не рекомендуется, если отсутствует родительский прокси, "
+"который требует аутентификации!"
+
+msgid "File '%s' not found inside Configuration Directory"
+msgstr "Файл \"%S \" не найден в папке с config файлами"
+
+msgid "File not found or empty"
+msgstr "Файл не найден или пустой"
+
+msgid "Files and Directories"
+msgstr "Файлы и папки"
+
+msgid "For help use link at the relevant option"
+msgstr "Для помощи используйте ссылку по соответствующей опции."
+
+msgid "Forwarding"
+msgstr "Маршрутизация"
+
+msgid ""
+"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
+"should not be able to bypass any blocks."
+msgstr ""
+"Если включено, Privoxy скрывает \"идти туда в любом случае\". Пользователь "
+"не сможет обойти блокировку."
+
+msgid ""
+"If you intend to operate Privoxy for more users than just yourself, it might "
+"be a good idea to let them know how to reach you, what you block and why you "
+"do that, your policies, etc."
+msgstr ""
+"Если вы используете Privoxy, вы сможете сообщить большому количеству "
+"пользователей, как связаться с вами, что вы блокируете и почему вы это "
+"делаете, ваши политики и т.д."
+
+msgid "Invalid email address"
+msgstr "Неверный email адрес"
+
+msgid "It is NOT recommended for the casual user."
+msgstr "Нельзя использовать случайному пользователю."
+
+msgid "Location of the Privoxy User Manual."
+msgstr "Расположение руководства пользователя Privoxy."
+
+msgid "Log File Viewer"
+msgstr "Просмотр системного журнала"
+
+msgid "Log all data read from the network"
+msgstr "Записывать в системный журнал все данные, считываемые сетью."
+
+msgid "Log all data written to the network"
+msgstr "Записывать в системный журнал все данные, отправленные в сеть."
+
+msgid "Log the applying actions"
+msgstr "Записывать в системный журнал все действия."
+
+msgid ""
+"Log the destination for each request Privoxy let through. See also 'Debug "
+"1024'."
+msgstr ""
+"Записывать в системный журнал места назначения для каждого запроса, который "
+"передает Privoxy. См. также \"Debug 1024\"."
+
+msgid ""
+"Log the destination for requests Privoxy didn't let through, and the reason "
+"why."
+msgstr "Записывать в системный журнал неудачные попытки Privoxy и их причины."
+
+msgid "Logging"
+msgstr "Настройка системного журнала"
+
+msgid "Main actions file"
+msgstr "Дефолтные действия."
+
+msgid "Mandatory Input: No Data given!"
+msgstr "Обязательный ввод: не указаны данные!"
+
+msgid "Mandatory Input: No Directory given!"
+msgstr "Обязательный ввод: не указана папка!"
+
+msgid "Mandatory Input: No File given!"
+msgstr "Обязательный ввод: не указан файл!"
+
+msgid "Mandatory Input: No Port given!"
+msgstr "Обязательный ввод: Не указан порт!"
+
+msgid "Mandatory Input: No files given!"
+msgstr "Обязательный ввод: не указаны файлы!"
+
+msgid "Mandatory Input: No valid IPv4 address or host given!"
+msgstr "Обязательный ввод: Не указан действительный IPv4 адрес или хост!"
+
+msgid "Mandatory Input: No valid IPv6 address given!"
+msgstr "Обязательный ввод: Не указан действительный IPv6 адрес!"
+
+msgid "Mandatory Input: No valid Port given!"
+msgstr "Обязательный ввод: Не указан действительный порт!"
+
+msgid "Maximum number of client connections that will be served."
+msgstr "Максимальное число обслуживаемых клиентских подключений."
+
+msgid "Maximum size (in KB) of the buffer for content filtering."
+msgstr "Максимальный размер буфера для фильтрации содержимого (в KB)."
+
+msgid "Miscellaneous"
+msgstr "Дополнительно"
+
+msgid "NOT installed"
+msgstr "Не установлена"
+
+msgid "No trailing '/', please."
+msgstr "Не используйте символ '/'."
+
+msgid "Non-fatal errors - *we highly recommended enabling this*"
+msgstr ""
+"Отсутствуют неустранимые ошибки - *мы настоятельно рекомендуем включить эту "
+"функцию*."
+
+msgid ""
+"Number of seconds after which a socket times out if no data is received."
+msgstr ""
+"Количество секунд по истечении которых, время сокета истекает, если данные "
+"не получены."
+
+msgid ""
+"Number of seconds after which an open connection will no longer be reused."
+msgstr ""
+"Количество секунд по истечении которых, соединение не будет использоваться "
+"повторно."
+
+msgid ""
+"Only when using 'external filters', Privoxy has to create temporary files."
+msgstr ""
+"Только когда используются 'сторонние фильтры', Privoxy должен создавать "
+"временные файлы."
+
+msgid "Please install current version !"
+msgstr "Установите текущую версию !"
+
+msgid "Please press [Read] button"
+msgstr "Нажмите кнопку [Читать / Перечитывать системный журнал]"
+
+msgid "Please read Privoxy manual for details!"
+msgstr "Ознакомьтесь с руководством Privoxy!"
+
+msgid "Please update to the current version!"
+msgstr "Обновите до текущей версии!"
+
+msgid "Privoxy WEB proxy"
+msgstr "Privoxy WEB proxy"
+
+msgid ""
+"Privoxy can (and normally does) use a number of other files for additional "
+"configuration, help and logging. This section of the configuration file "
+"tells Privoxy where to find those other files."
+msgstr ""
+"Страница настройки расположения вспомогательных файлов Privoxy. Privoxy - "
+"использует ряд других файлов для дополнительной настройки, оказания помощи и "
+"ведения системного журнала. "
+
+msgid ""
+"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
+"enhancing privacy, modifying web page data and HTTP headers, controlling "
+"access, and removing ads and other obnoxious Internet junk."
+msgstr ""
+"Privoxy - это свободный веб-прокси с расширенными возможностями фильтрации "
+"интернет-контента для защиты конфиденциальности (приватности) пользователей "
+"сети Интернет. Изменения содержания веб-страниц, управления cookies, "
+"ограничения доступа к некоторым сайтам и удаления рекламы, баннеров, "
+"всплывающих окон, а также любого другого нежелательного контента («интернет-"
+"мусора»)."
+
+msgid "Read / Reread log file"
+msgstr "Читать / Перечитывать системный журнал"
+
+msgid "Show I/O status"
+msgstr "Показать статус ввода-вывода."
+
+msgid "Show each connection status"
+msgstr "Показать состояние каждого соединения."
+
+msgid "Show header parsing"
+msgstr "Показать анализ заголовка."
+
+msgid "Software package '%s' is not installed."
+msgstr "Пакет программного обеспечения '%s' не установлен."
+
+msgid "Software package '%s' is outdated."
+msgstr "Пакет программного обеспечения '%s' устарел."
+
+msgid "Start"
+msgstr "Старт"
+
+msgid "Start / Stop"
+msgstr "Старт / Стоп"
+
+msgid "Start/Stop Privoxy WEB Proxy"
+msgstr "Старт / Стоп Privoxy WEB proxy."
+
+msgid "Startup banner and warnings."
+msgstr "Баннер запуска и предупреждения."
+
+msgid "Syntax:"
+msgstr "Синтаксис:"
+
+msgid "Syntax: Client header names delimited by spaces."
+msgstr "Синтаксис: имя заголовка клиента, разделенное пробелами."
+
+msgid "Syntax: target_pattern http_parent[:port]"
+msgstr "Синтаксис: target_pattern http_parent[:port]"
+
+msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
+msgstr "Синтаксис: target_pattern socks_proxy[:port] http_parent[:port]"
+
+msgid "System"
+msgstr "Система"
+
+msgid ""
+"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
+"are in fact recommended!"
+msgstr ""
+"Файл (или файлы) действий для использования. Желательно использовать "
+"несколько строк 'Action Files'."
+
+msgid ""
+"The address and TCP port on which Privoxy will listen for client requests."
+msgstr ""
+"Адрес и TCP-порт, на котором Privoxy будет прослушивать запросы клиентов."
+
+msgid ""
+"The compression level that is passed to the zlib library when compressing "
+"buffered content."
+msgstr ""
+"Уровень сжатия, который передается в библиотеку zlib при сжатии содержимого "
+"буфера."
+
+msgid ""
+"The directory where all logging takes place (i.e. where the logfile is "
+"located)."
+msgstr "Папка в которой находится системный журнал (т. е. его файл)."
+
+msgid "The directory where the other configuration files are located."
+msgstr "Папка, в которой находятся другие config файлы."
+
+msgid ""
+"The filter files contain content modification rules that use regular "
+"expressions."
+msgstr ""
+"Файлы фильтров содержат правила изменения содержимого, использующие "
+"регулярные выражения."
+
+msgid "The hostname shown on the CGI pages."
+msgstr "Имя хоста, показанное на страницах CGI."
+
+msgid "The log file to use. File name, relative to log directory."
+msgstr ""
+"Используемый файл системного журнала. Имя файла относительно папки системных "
+"журналов."
+
+msgid "The order in which client headers are sorted before forwarding them."
+msgstr "Порядок сортировки заголовков клиентов перед их пересылкой."
+
+msgid ""
+"The status code Privoxy returns for pages blocked with +handle-as-empty-"
+"document."
+msgstr ""
+"Код статуса заблокированных Privoxy страниц с пометкой +handle-as-empty-"
+"document."
+
+msgid ""
+"The trust mechanism is an experimental feature for building white-lists and "
+"should be used with care."
+msgstr ""
+"Механизм доверия, является экспериментальной функцией для построения Белых "
+"списков и должен использоваться с осторожностью."
+
+msgid ""
+"The value of this option only matters if the experimental trust mechanism "
+"has been activated."
+msgstr ""
+"Этот параметр будет задействован, только если активирован экспериментальный "
+"механизм доверия."
+
+msgid ""
+"This option is only there for debugging purposes. It will drastically reduce "
+"performance."
+msgstr ""
+"Этот режим доступен только для отладки. Он существенно снизит "
+"производительность."
+
+msgid ""
+"This option will be removed in future releases as it has been obsoleted by "
+"the more general header taggers."
+msgstr ""
+"Этот параметр будет удален в будущих выпусках, поскольку он устарел "
+"благодаря введению основных меток заголовков."
+
+msgid ""
+"This tab controls the security-relevant aspects of Privoxy's configuration."
+msgstr "Страница контролирует безопасность, важные аспекты настройки Privoxy."
+
+msgid ""
+"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
+"specific requests should be routed."
+msgstr ""
+"Через какой SOCKS прокси (как вариант, с каким из родительских http-прокси) "
+"конкретные запросы должны быть направлены."
+
+msgid "To which parent HTTP proxy specific requests should be routed."
+msgstr ""
+"На какой родительский прокси HTTP должны быть направлены определенные "
+"запросы."
+
+msgid "User customizations"
+msgstr "Пользовательские действия."
+
+msgid "Value is not a number"
+msgstr "Значение не является числом"
+
+msgid "Value not between 0 and 300"
+msgstr "Значение не от 0 до 300"
+
+msgid "Value not between 0 and 9"
+msgstr "Значение не от 0 до 9"
+
+msgid "Value not between 1 and 4096"
+msgstr "Значения не от 1 до 4096"
+
+msgid "Value not greater 0 or empty"
+msgstr "Значение не больше 0 или пустое"
+
+msgid "Value range 1 to 4096, no entry defaults to 4096"
+msgstr "Диапазон значений от 1 до 4096, значение по умолчанию 4096."
+
+msgid "Version"
+msgstr "Версия"
+
+msgid "Version Information"
+msgstr "Информация о версии"
+
+msgid "Whether intercepted requests should be treated as valid."
+msgstr "Следует ли рассматривать перехваченные запросы как действительные."
+
+msgid ""
+"Whether or not Privoxy recognizes special HTTP headers to change toggle "
+"state."
+msgstr ""
+"Распознает ли Privoxy специальные заголовки HTTP для изменения состояния "
+"переключения."
+
+msgid "Whether or not buffered content is compressed before delivery."
+msgstr "Сжатие буферизованного содержимого перед доставкой."
+
+msgid ""
+"Whether or not outgoing connections that have been kept alive should be "
+"shared between different incoming connections."
+msgstr ""
+"Должны ли исходящие соединения, сохраненные в действующих, совместно "
+"использоваться различными входящими соединениями."
+
+msgid "Whether or not pipelined requests should be served."
+msgstr "Могут или нет подаваться pipelined запросы."
+
+msgid "Whether or not proxy authentication through Privoxy should work."
+msgstr "Должена ли работать прокси-аутентификация через Privoxy."
+
+msgid "Whether or not the web-based actions file editor may be used."
+msgstr "Может ли использоваться редактор файлов веб-действий."
+
+msgid "Whether or not the web-based toggle feature may be used."
+msgstr "Может ли использоваться веб-функция переключения."
+
+msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
+msgstr ""
+"Могут ли запросы на CGI-страницы Privoxy быть заблокированы или "
+"перенаправлены."
+
+msgid ""
+"Whether the CGI interface should stay compatible with broken HTTP clients."
+msgstr ""
+"Должен ли CGI интерфейс оставаться совместимым со сломанными http-клиентами."
+
+msgid "Whether to run only one server thread."
+msgstr "Должен ли выполняться только один серверный поток."
+
+msgid "Who can access what."
+msgstr "Кто имеет доступ."
+
+msgid "installed"
+msgstr "установлено"
+
+msgid "or higher"
+msgstr "или выше"
+
+msgid "required"
+msgstr "требовать"
diff --git a/applications/luci-app-radicale/po/ru/radicale.po b/applications/luci-app-radicale/po/ru/radicale.po
new file mode 100644
index 0000000000..85f010e7ff
--- /dev/null
+++ b/applications/luci-app-radicale/po/ru/radicale.po
@@ -0,0 +1,448 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: radicale\n"
+"POT-Creation-Date: 2018-01-08 23:00+0300\n"
+"PO-Revision-Date: 2018-01-09 01:11+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid ""
+"'AUTO' selects the highest protocol version that client and server support."
+msgstr ""
+"'АВТО' выбирает самую высокую версию протокола, которую поддерживают клиент "
+"и сервер."
+
+msgid ""
+"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
+msgstr ""
+"Задайте 'Имя_хоста:порт' или 'адрес IPv4:порт' или 'адрес IPv6:порт' - адрес "
+"и порт работы сервера Radicale."
+
+msgid "AUTO"
+msgstr "АВТО"
+
+msgid "Access-Control-Allow-Headers"
+msgstr "Доступ-Контроль-Разрешить-Заголовки"
+
+msgid "Access-Control-Allow-Methods"
+msgstr "Доступ-Контроль-Разрешить-Методы"
+
+msgid "Access-Control-Allow-Origin"
+msgstr "Доступ-Контроль-Разрешить-Источник"
+
+msgid "Access-Control-Expose-Headers"
+msgstr "Доступ-Контроль-Подвергать-Заголовки"
+
+msgid "Additional HTTP headers"
+msgstr "Дополнительные заголовки HTTP"
+
+msgid "Address:Port"
+msgstr "Адрес:Порт"
+
+msgid "Authentication"
+msgstr "Аутентификация"
+
+msgid ""
+"Authentication login is matched against the 'user' key, and collection's "
+"path is matched against the 'collection' key."
+msgstr ""
+"Имя входа для проверки подлинности сопоставляется с ключом 'пользователь', и "
+"пути коллекции сопоставляется с ключом 'коллекция'."
+
+msgid "Authentication method"
+msgstr "Метод аутентификации"
+
+msgid "Authentication method to allow access to Radicale server."
+msgstr "Методы аутентификации для разрешения доступа к серверу Radicale."
+
+msgid "Auto-start"
+msgstr "Авто-старт"
+
+msgid "Boot delay"
+msgstr "Задержка загрузки"
+
+msgid "CalDAV/CardDAV"
+msgstr "CalDAV/CardDAV"
+
+msgid ""
+"Calendars and address books are available for both local and remote access, "
+"possibly limited through authentication policies."
+msgstr ""
+"Календари и адресные книги доступны как для локального, так и для удаленного "
+"доступа, возможно ограниченного с помощью политик проверки подлинности."
+
+msgid "Certificate file"
+msgstr "Файл сертификата"
+
+msgid ""
+"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
+"to the client and/or to store data inside collections."
+msgstr ""
+"Выбранный здесь стандарт кодирования текстов, будет использоваться вместо "
+"'UTF-8' для ответов клиенту и/или для хранения данных внутри коллекций."
+
+msgid "Ciphers"
+msgstr "Протоколы шифрования"
+
+msgid "Console Log level"
+msgstr "Уровень журнала консоли"
+
+msgid "Control the access to data collections."
+msgstr "Управляйте доступом к сбору данных коллекций."
+
+msgid "Critical"
+msgstr "Критический"
+
+msgid ""
+"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
+"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
+"another domain outside the domain from which the resource originated."
+msgstr ""
+"Cross-Origin Resource Sharing (CORS) - это механизм совместного "
+"использования ресурсов между разными источниками, позволяющий использовать "
+"ограниченные ресурсы (например, шрифты, JavaScript и т.д.) на веб-странице, "
+"запрашиваемой из другого домена, за пределами домена, из которого был создан "
+"ресурс."
+
+msgid "Custom"
+msgstr "Пользовательский"
+
+msgid "Database"
+msgstr "База данных"
+
+msgid "Debug"
+msgstr "Отладка"
+
+msgid "Delay (in seconds) during system boot before Radicale start"
+msgstr ""
+"Задержка (в секундах) во время загрузки системы перед стартом Radicale."
+
+msgid "Directory"
+msgstr "Папка"
+
+msgid "Directory not exists/found !"
+msgstr "Папка не существует / не найдена !"
+
+msgid "Directory required !"
+msgstr "Папка требуется !"
+
+msgid "Directory where the rotating log-files are stored"
+msgstr "Папка в которой хранятся перезаписываемые файлы системного журнала."
+
+msgid "During delay ifup-events are not monitored !"
+msgstr "Во время задержки ifup-события не отслеживаются!"
+
+msgid "Enable HTTPS"
+msgstr "Включить HTTPS"
+
+msgid ""
+"Enable/Disable auto-start of Radicale on system start-up and interface events"
+msgstr "Авто-старт Radicale сервера при запуске прошивки устройства."
+
+msgid "Encoding"
+msgstr "Кодировка"
+
+msgid "Encoding for responding requests."
+msgstr "Кодировка для ответов на запросы."
+
+msgid "Encoding for storing local collections."
+msgstr "Кодировка для хранения локальных данных коллекций."
+
+msgid "Encryption method"
+msgstr "Метод шифрования"
+
+msgid "Error"
+msgstr "Ошибка"
+
+msgid "File '%s' not found !"
+msgstr "Файл '%s' не найден !"
+
+msgid "File Log level"
+msgstr "Уровень лог файла"
+
+msgid "File not found !"
+msgstr "Файл не найден !"
+
+msgid "File-system"
+msgstr "Файловая система"
+
+msgid ""
+"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
+"means 'anybody' (including anonymous users)."
+msgstr ""
+"Например для ключа 'пользователь', '+' означает 'аутентифицированный "
+"пользователь' и '.*' означает 'кто угодно' (включая анонимных пользователей)."
+
+msgid "Full access for Owner only"
+msgstr "Полный доступ только для владельца"
+
+msgid "Full access for authenticated Users"
+msgstr "Полный доступ для авторизованных пользователей"
+
+msgid "Full access for everybody (including anonymous)"
+msgstr "Полный доступ для всех (включая анонимных)"
+
+msgid "Full path and file name of certificate"
+msgstr "Полный путь и имя файла сертификата"
+
+msgid "Full path and file name of private key"
+msgstr "Полный путь и имя файла личного ключа"
+
+msgid "Info"
+msgstr "Информация"
+
+msgid "Keep in mind to use the correct hashing algorithm !"
+msgstr "Используйте только правильный алгоритм хэширования!"
+
+msgid "Leading or ending slashes are trimmed from collection's path."
+msgstr "Начальные или конечные '/' - удаляются при указании пути."
+
+msgid "Log-backup Count"
+msgstr "Количество резервных копий журнала"
+
+msgid "Log-file Viewer"
+msgstr "Показ файла системного журнала"
+
+msgid "Log-file directory"
+msgstr "Папка файла журналов"
+
+msgid "Log-file size"
+msgstr "Размер файла журнала"
+
+msgid "Logging"
+msgstr "Журналирование"
+
+msgid "Logon message"
+msgstr "Сообщение входа в систему"
+
+msgid "Maximum size of each rotation log-file."
+msgstr "Максимальный размер каждой перезаписи файла журнала."
+
+msgid "Message displayed in the client when a password is needed."
+msgstr "Отображаемое сообщение клиенту, когда требуется пароль."
+
+msgid "NOT installed"
+msgstr "Не установлена"
+
+msgid "None"
+msgstr "Нет"
+
+msgid "Number of backup files of log to create."
+msgstr "Количество резервных копий журнала."
+
+msgid "OPTIONAL: See python's ssl module for available ciphers"
+msgstr ""
+"Необязательно: используйте SSL Python плагин для доступных протоколов "
+"шифрования."
+
+msgid "One or more missing/invalid fields on tab"
+msgstr "Одно или несколько отсутствующих/недопустимых полей на странице."
+
+msgid "Owner allow write, authenticated users allow read"
+msgstr ""
+"Владелец разрешает запись, прошедшие проверку пользователи разрешают чтение"
+
+msgid "Path/File required !"
+msgstr "Путь/файл требуется!"
+
+msgid ""
+"Place here the 'user:password' pairs for your users which should have access "
+"to Radicale."
+msgstr ""
+"Разместите здесь пары 'логин:пароль' для ваших пользователей, которые должны "
+"иметь доступ к Radicale."
+
+msgid "Please install current version !"
+msgstr "Установите текущую версию!"
+
+msgid "Please press [Reload] button below to reread the file."
+msgstr "Нажмите кнопку [Перезагрузить], чтобы перечитать файл."
+
+msgid "Please update to current version !"
+msgstr "Обновите текущую версию!"
+
+msgid "Port numbers below 1024 (Privileged ports) are not supported"
+msgstr "Номера портов менее 1024 (привилегированные порты) не поддерживаются."
+
+msgid "Private key file"
+msgstr "Файл Личного Ключа"
+
+msgid "Radicale CalDAV/CardDAV Server"
+msgstr "Radicale CalDAV/CardDAV сервер"
+
+msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
+msgstr ""
+"Radicale использует '/etc/radicale/rights' в качестве файла на основе "
+"регулярного выражения (RegExp)."
+
+msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
+msgstr "Radicale использует '/etc/radicale/users' как htpasswd файл."
+
+msgid "Read only!"
+msgstr "Только для чтения!"
+
+msgid "RegExp file"
+msgstr "Файл регулярного выражения (RegExp)"
+
+msgid "Reload"
+msgstr "Перезагрузить"
+
+msgid "Response Encoding"
+msgstr "Кодировка ответов"
+
+msgid "Rights"
+msgstr "Права"
+
+msgid "Rights are based on a regexp-based file"
+msgstr "Права основаны на файле, основанном на регулярных выражениях"
+
+msgid "Rights backend"
+msgstr "Права доступа"
+
+msgid "SHA-1"
+msgstr "SHA-1"
+
+msgid "SSL Protocol"
+msgstr "SSL протокол"
+
+msgid "Save"
+msgstr "Сохранить"
+
+msgid "Section names are only used for naming the rule."
+msgstr "Имена строк используются только для переименования правила."
+
+msgid "Server"
+msgstr "Сервер"
+
+msgid "Setting this parameter to '0' will disable rotation of log-file."
+msgstr ""
+"Установка этого параметра в значение '0' приведет к отключению перезаписи "
+"файла журнала."
+
+msgid "Software package '%s' is not installed."
+msgstr "Программный пакет '%s' не установлен."
+
+msgid "Software package '%s' is outdated."
+msgstr "Программный пакет '%s' устарел."
+
+msgid "Software update required"
+msgstr "Требуется обновление программного обеспечения"
+
+msgid "Start"
+msgstr "Старт"
+
+msgid "Start / Stop"
+msgstr "Старт / Стоп"
+
+msgid "Start/Stop Radicale server"
+msgstr "Запуск и остановка сервера Radicale."
+
+msgid "Storage"
+msgstr "Хранилище"
+
+msgid "Storage Encoding"
+msgstr "Кодировка хранилища"
+
+msgid "Storage backend"
+msgstr "Сервер хранения"
+
+msgid "Syslog Log level"
+msgstr "Уровень системного журнала"
+
+msgid "System"
+msgstr "Система"
+
+msgid ""
+"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
+"server solution."
+msgstr ""
+"Radicale - это сервер, объединяющий в себе CalDAV (календарь) и CardDAV "
+"(контакты)."
+
+msgid ""
+"They can be viewed and edited by calendar and contact clients on mobile "
+"phones or computers."
+msgstr ""
+"Их можно просматривать и редактировать по календарю и связываться с "
+"клиентами на мобильных телефонах или компьютерах."
+
+msgid "To edit the file follow this link!"
+msgstr "Чтобы отредактировать файл, следуйте по этой ссылке!"
+
+msgid "To view latest log file follow this link!"
+msgstr "Для просмотра последних записей в журнале, следуйте по этой ссылке!"
+
+msgid "Value is not a number"
+msgstr "Значение не является числом"
+
+msgid "Value is not an Integer >= 0 !"
+msgstr "Значение не является целым числом > = 0!"
+
+msgid "Value not between 0 and 300"
+msgstr "Значение не между 0 и 300"
+
+msgid "Value required ! Integer >= 0 !"
+msgstr "Требуемое значение ! Целое число >= 0 !"
+
+msgid "Version"
+msgstr "Версия"
+
+msgid "Version Information"
+msgstr "Информация о версии"
+
+msgid ""
+"WARNING: Only 'File-system' is documented and tested by Radicale development"
+msgstr ""
+"ВНИМАНИЕ: только 'Файловая система' документирована и протестирована "
+"сообществом Radicale."
+
+msgid "Warning"
+msgstr "Внимание"
+
+msgid ""
+"You can also get groups from the user regex in the collection with {0}, {1}, "
+"etc."
+msgstr ""
+"Можно также получить группы из пользовательского regex вместе с {0}, {1} и т."
+"д."
+
+msgid ""
+"You can use Python's ConfigParser interpolation values %(login)s and "
+"%(path)s."
+msgstr ""
+"Вы можете использовать ConfigParser интерполяции Python значений %(логин)ы и "
+"%(путь)и."
+
+msgid "crypt"
+msgstr "crypt"
+
+msgid "custom"
+msgstr "пользовательский"
+
+msgid "htpasswd file"
+msgstr "htpasswd файл"
+
+msgid "installed"
+msgstr "установлено"
+
+msgid "no valid path given!"
+msgstr "не указан допустимый путь!"
+
+msgid "or higher"
+msgstr "или выше"
+
+msgid "plain"
+msgstr "простой"
+
+msgid "required"
+msgstr "требовать"
+
+msgid "salted SHA-1"
+msgstr "salted SHA-1"
diff --git a/applications/luci-app-samba/po/ru/samba.po b/applications/luci-app-samba/po/ru/samba.po
index 534770f5f1..9e6d1341d3 100644
--- a/applications/luci-app-samba/po/ru/samba.po
+++ b/applications/luci-app-samba/po/ru/samba.po
@@ -1,32 +1,31 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: samba\n"
-"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-08-15 13:48+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"PO-Revision-Date: 2018-01-05 19:07+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Allow guests"
msgstr "Разрешить гостевой вход"
msgid "Allow system users to reach their home directories via network shares"
msgstr ""
-"Разрешить пользователям получать доступ к их домашним директориям через сеть"
+"Разрешить пользователям получать доступ к их домашним папкам, через "
+"локальную сеть."
msgid "Allowed users"
-msgstr "Разрешённые пользователи"
+msgstr "Разрешенные пользователи"
msgid "Browseable"
-msgstr ""
+msgstr "Виден в списке доступных ресурсов"
msgid "Create mask"
msgstr "Создать маску"
@@ -35,22 +34,22 @@ msgid "Description"
msgstr "Описание"
msgid "Directory mask"
-msgstr "Маска директории"
+msgstr "Маска папок"
msgid "Edit Template"
-msgstr "Редактировать шаблон"
+msgstr "Настройка config файла"
msgid "Edit the template that is used for generating the samba configuration."
-msgstr "Редактировать шаблон, используемый для генерации конфигурации samba."
+msgstr "Настройка config файла samba."
msgid "General Settings"
-msgstr "Общие настройки"
+msgstr "Основные настройки"
msgid "Hostname"
msgstr "Имя хоста"
msgid "Mask for new directories"
-msgstr "Маска для новых директорий"
+msgstr "Маска для новых папок"
msgid "Mask for new files"
msgstr "Маска для новых файлов"
@@ -68,15 +67,17 @@ msgid ""
"Please add directories to share. Each directory refers to a folder on a "
"mounted device."
msgstr ""
+"Добавьте папки для совместного доступа. Каждая папка - соответствует разделу "
+"на подключенном устройстве."
msgid "Read-only"
msgstr "Только для чтения"
msgid "Share home-directories"
-msgstr "Совместно использовать домашние директории"
+msgstr "Совместно использовать домашние папки"
msgid "Shared Directories"
-msgstr "Совместно используемые директории"
+msgstr "Совместно используемые папки"
msgid ""
"This is the content of the file '/etc/samba/smb.conf.template' from which "
@@ -85,9 +86,9 @@ msgid ""
"Settings' tab."
msgstr ""
"Это содержимое файла '/etc/samba/smb.conf.template', из которого "
-"генерируется конфигурация samba. Значения, заключённые в символы \"|\", не "
-"должны быть изменены. Они будут автоматически заменены на значения из "
-"вкладки 'Общие настройки'."
+"генерируется config файл - samba. Значения, заключенные в символы ('|'), не "
+"должны быть изменены. Они будут автоматически заменены на значения со "
+"страницы 'Основные настройки'."
msgid "Workgroup"
msgstr "Рабочая группа"
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
index 22f3106d03..19f5ddc319 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
@@ -34,8 +34,6 @@ if stype == "ss_server" then
o.datatype = "ipaddr"
o.placeholder = "0.0.0.0"
ss.values_ipaddr(o)
- o = s:taboption("general", Value, "manager_address", translate("Manager address"))
- o.datatype = "hostport"
else
ss.options_client(s, "general")
if stype == "ss_tunnel" then
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
index 7ba6b40c53..fc51dcd469 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
@@ -42,7 +42,8 @@ function values_serverlist(o)
local server = sdata["server"]
local server_port = sdata["server_port"]
if server and server_port then
- local desc = "%s - %s:%s" % {sname, sdata["server"], sdata["server_port"]}
+ local disabled = ucival_to_bool(sdata[".disabled"]) and " - disabled" or ""
+ local desc = "%s - %s:%s%s" % {sname, server, server_port, disabled}
o:value(sname, desc)
end
end)
@@ -121,6 +122,7 @@ function options_common(s, tab)
s:taboption(tab, Flag, "verbose", translate("Verbose"))
s:taboption(tab, Flag, "ipv6_first", translate("IPv6 First"), translate("Prefer IPv6 addresses when resolving names"))
s:taboption(tab, Flag, "fast_open", translate("Enable TCP Fast Open"))
+ s:taboption(tab, Flag, "no_delay", translate("Enable TCP_NODELAY"))
s:taboption(tab, Flag, "reuse_port", translate("Enable SO_REUSEPORT"))
end
@@ -137,7 +139,6 @@ function cfgvalue_overview(sdata)
cfgvalue_overview_(sdata, lines, names_options_common)
cfgvalue_overview_(sdata, lines, {
"bind_address",
- "manager_address",
})
elseif stype == "ss_local" or stype == "ss_redir" or stype == "ss_tunnel" then
cfgvalue_overview_(sdata, lines, names_options_client)
diff --git a/applications/luci-app-shairplay/po/ru/shairplay.po b/applications/luci-app-shairplay/po/ru/shairplay.po
new file mode 100644
index 0000000000..da06322e88
--- /dev/null
+++ b/applications/luci-app-shairplay/po/ru/shairplay.po
@@ -0,0 +1,54 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: shairplay\n"
+"POT-Creation-Date: 2017-12-06 11:15+0300\n"
+"PO-Revision-Date: 2018-01-05 22:43+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "AO Device ID"
+msgstr "AO ID устройства"
+
+msgid "AO Device Name"
+msgstr "AO имя устройства"
+
+msgid "AO Driver"
+msgstr "AO драйвер"
+
+msgid "Airport Name"
+msgstr "Имя Air-порта"
+
+msgid "Default"
+msgstr "По умолчанию"
+
+msgid "Enabled"
+msgstr "Включено"
+
+msgid "HW Address"
+msgstr "HW адрес"
+
+msgid "Password"
+msgstr "Пароль"
+
+msgid "Port"
+msgstr "Порт"
+
+msgid "Respawn"
+msgstr "Перерождение"
+
+msgid "Shairplay"
+msgstr "Shairplay"
+
+msgid ""
+"Shairplay is a simple AirPlay server implementation, here you can configure "
+"the settings."
+msgstr ""
+"Shairplay является простой реализацией сервера AirPlay, здесь вы можете его "
+"настроить."
diff --git a/applications/luci-app-simple-adblock/po/ru/simple-adblock.po b/applications/luci-app-simple-adblock/po/ru/simple-adblock.po
new file mode 100644
index 0000000000..51e56b3d10
--- /dev/null
+++ b/applications/luci-app-simple-adblock/po/ru/simple-adblock.po
@@ -0,0 +1,94 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: simple-adblock\n"
+"POT-Creation-Date: 2017-12-07 14:00+0300\n"
+"PO-Revision-Date: 2018-01-06 13:04+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "Черный список доменных URL адресов"
+
+msgid "Blacklisted Domains"
+msgstr "Черный список доменов"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "Черный список хостов URL адресов"
+
+msgid "Controls system log and console output verbosity"
+msgstr "Проверка системного журнала и уровень детализации вывода консоли."
+
+msgid "Enable/start service"
+msgstr "Включение / Запуск утилиты"
+
+msgid "Force Router DNS"
+msgstr "Назначить DNS роутера"
+
+msgid "Force Router DNS server to all local devices"
+msgstr "Назначить DNS роутера всем локальным устройствам"
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+"Назначить DNS роутера всем локальным устройствам, методом DNS Hijacking."
+
+msgid "Individual domains to be blacklisted"
+msgstr "Домены добавленные пользователем в Черный список."
+
+msgid "Individual domains to be whitelisted"
+msgstr "Домены добавленные пользователем в Белый список."
+
+msgid "LED to indicate status"
+msgstr "LED индикация состояния"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+"Разрешить локальным устройствам использовать собственные DNS, если они "
+"прописаны в настройках сети устройства"
+
+msgid "Output Verbosity Setting"
+msgstr "Настройка детализации вывода"
+
+msgid "Pick the LED not already used in"
+msgstr "Выберите LED не используется в "
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Simple AdBlock настройки"
+
+msgid "Some output"
+msgstr "Неполный вывод"
+
+msgid "Suppress output"
+msgstr "Подавить вывод"
+
+msgid "System LED Configuration"
+msgstr "Настройка LED индикации системы."
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr "URL адреса доменов для Черного списка."
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr "URL адреса доменов для Белого списка."
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr "URL адреса хостов для Черного списка."
+
+msgid "Verbose output"
+msgstr "Подробный вывод"
+
+msgid "Whitelisted Domain URLs"
+msgstr "URLs доменов Белого списка"
+
+msgid "Whitelisted Domains"
+msgstr "Белый список доменов"
+
+msgid "none"
+msgstr "Нет"
diff --git a/applications/luci-app-splash/po/ru/splash.po b/applications/luci-app-splash/po/ru/splash.po
index 3f470dba0d..bfee7ef599 100644
--- a/applications/luci-app-splash/po/ru/splash.po
+++ b/applications/luci-app-splash/po/ru/splash.po
@@ -1,19 +1,17 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: splash\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-26 15:10+0200\n"
-"PO-Revision-Date: 2013-11-13 18:52+0200\n"
-"Last-Translator: Роман <x.wserfer@gmail.com>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2013-11-13 18:52+0200\n"
+"PO-Revision-Date: 2018-01-08 19:21+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Accept"
msgstr "Принять"
@@ -35,17 +33,23 @@ msgid ""
"without notice for any reason, for certain devices, and/or may be blocked "
"for certain users."
msgstr ""
+"Доступ к сети не гарантируется. Он может быть прерван в любое время без "
+"предварительного уведомления по любой причине, для определенных устройств, и/"
+"или может быть заблокирован для определенных пользователей."
msgid "Active Clients"
msgstr "Активные клиенты"
msgid "Allowed hosts/subnets"
-msgstr "Разрешённые хосты/подсети"
+msgstr "Разрешенные хосты/подсети"
msgid ""
"As an alternative to editing the complete splash text you can also just "
"include some custom text in the default splash page by entering it here."
msgstr ""
+"В качестве альтернативы редактированию полного текста заставки, можно также "
+"просто включить некоторый пользовательский текст на странице заставки по "
+"умолчанию, введя его здесь."
msgid ""
"Bandwidth limit for clients is only activated when both up- and download "
@@ -53,14 +57,14 @@ msgid ""
"Whitelisted clients are not limited."
msgstr ""
"Ограничение полосы для клиентов активируется только при указанных лимитах "
-"нисходящего и восходящего каналов. Значение 0 полностью отключает "
-"ограничение. Клиенты из \"белого\" списка не имеют ограничений."
+"нисходящего и восходящего каналов. Значение '0' полностью отключает "
+"ограничение. Клиенты из Белого списка не имеют ограничений."
msgid ""
"Become an active member of this community and help by operating your own node"
msgstr ""
"Станьте активным участником данного сообщества и окажите содействие, "
-"запустив свой узел сети"
+"запустив свой узел сети."
msgid "Blacklist"
msgstr "Чёрный список"
@@ -72,24 +76,29 @@ msgid ""
"By accepting these rules you can use this network for %s hour(s). After this "
"time you need to accept these rules again."
msgstr ""
+"Приняв эти правила, вы можете использовать эту сеть для %s час (ы). По "
+"истечении этого времени вам необходимо снова принять эти правила."
msgid "Clearance time"
msgstr "Разрешённое время"
msgid "Client-Splash"
-msgstr "Client-Splash"
+msgstr "Splash-Клиент"
msgid ""
"Client-Splash is a hotspot authentification system for wireless mesh "
"networks."
msgstr ""
-"Client-Splash - это система аутентификации точек доступа для беспроводных "
+"Splash-Клиент - это система аутентификации точек доступа для беспроводных "
"ячеистых сетей."
msgid ""
"Clients are redirected to this page after they have accepted the splash. If "
"this is left empty they are redirected to the page they had requested."
msgstr ""
+"Клиенты перенаправляются на эту страницу после того, как они вступили в "
+"Splash. Если эта страница пуста, они перенаправляются на запрашиваемую "
+"страницу."
msgid "Clients download speed is limited to this value (kbyte/s)"
msgstr ""
@@ -99,7 +108,7 @@ msgid ""
"Clients that have accepted the splash are allowed to use the network for "
"that many hours."
msgstr ""
-"Клиенты, принявшие приглашение splash-экрана, могут использовать сеть данное "
+"Клиенты, принявшие приглашение Splash-экрана, могут использовать сеть данное "
"количество часов."
msgid "Clients upload speed is limited to this value (kbyte/s)"
@@ -116,6 +125,8 @@ msgid ""
"Destination hosts and networks that are excluded from splashing, i.e. they "
"are always allowed."
msgstr ""
+"Назначенные хосты и сети, которые исключены из Splash, т.е. они всегда "
+"разрешены."
msgid "Donate some money to help us keep this project alive."
msgstr "Пожертвовать деньги на поддержку этого проекта."
@@ -124,7 +135,7 @@ msgid "Download limit"
msgstr "Лимит загрузки"
msgid "Edit the complete splash text"
-msgstr ""
+msgstr "Изменение полного текста заставки"
msgid "Fair Use Policy"
msgstr "Политика добровольного использования"
@@ -136,7 +147,7 @@ msgid "General"
msgstr "Общие"
msgid "Get in %s with the operator of this access point."
-msgstr ""
+msgstr "Получить в% s с оператором этой точки доступа."
msgid "Hostname"
msgstr "Имя хоста"
@@ -154,7 +165,7 @@ msgid "If you use this network on a regular basis we ask for your support:"
msgstr "Если вы используете эту сеть регулярно, мы просим вашей поддержки:"
msgid "Include your own text in the default splash"
-msgstr ""
+msgstr "Включить собственный текст в заставку по умолчанию"
msgid "Intercept client traffic on this Interface"
msgstr "Перехватывать клиентский трафик на этом интерфейсе"
@@ -173,7 +184,7 @@ msgstr ""
"участии в этом проекте."
msgid "Legally Prohibited Activities"
-msgstr ""
+msgstr "Запрещенные законом виды деятельности"
msgid "Legally Prohibited content"
msgstr "Юридически запрещенный контент"
@@ -188,8 +199,8 @@ msgid ""
"MAC addresses of whitelisted clients. These do not need to accept the splash "
"and are not bandwidth limited."
msgstr ""
-"MAC-адреса клиентов из \"белого\" списка. Данные клиенты не имеют "
-"ограничений пропускной способности."
+"MAC-адреса клиентов из Белого списка. Данных клиентов не нужно принимать в "
+"Splash и они не имеют ограничений по пропускной способности."
msgid "Netmask"
msgstr "Маска сети"
@@ -204,14 +215,14 @@ msgid ""
"Please note that we are not an internet service provider but an experimental "
"community network."
msgstr ""
-"Пожалуйста, обратите внимание, что мы не интернет-провайдер, а "
-"экспериментальная сеть сообщества."
+"Обратите внимание, что мы не интернет-провайдер, а сообщество "
+"экспериментальной сети ."
msgid "Policy"
msgstr "Политика"
msgid "Redirect target"
-msgstr ""
+msgstr "Назначение перенаправления"
msgid "Safety"
msgstr "Безопасный"
@@ -223,44 +234,59 @@ msgid "Splash rules are integrated in this firewall zone"
msgstr "Правила Splash интегрированы в зону этого межсетевого экрана"
msgid "Splashtext"
-msgstr "Текст splash-экрана"
+msgstr "Текст Splash-экрана"
msgid ""
"The network, like the Internet, is unencrypted and open. Each participant is "
"responsible for the safety of their own connections and devices."
msgstr ""
+"Сеть, как и Интернет, не зашифрована и открыта. Каждый участник несет "
+"ответственность за безопасность своих собственных подключений и устройств."
msgid ""
"The open and free wireless network of volunteers (\"Operators\") provides "
"the necessary equipment and Internet connections (\"Infrastructure\") at "
"their own expense."
msgstr ""
+"Открытая и бесплатная беспроводная сеть волонтеров 'операторы' обеспечивает "
+"необходимое оборудование и подключение к Интернету 'инфраструктура' за свой "
+"счет."
msgid ""
"The operator claims no liability for loss of data, unauthorized access/"
"damage to devices, or financial losses that participants may suffer from the "
"use of the network."
msgstr ""
+"Оператор не несет ответственности за потерю данных, несанкционированного "
+"доступа/повреждения устройств или финансовых потерь, которые участники могут "
+"пострадать от использования сети."
msgid ""
"The participant agrees to not perform any action and refrain from acts which "
"may violate the law or infringe upon the rights of third parties."
msgstr ""
+"Участник соглашается не предпринимать никаких действий и воздерживаться от "
+"действий, которые могут нарушать закон или нарушать права третьих лиц."
msgid ""
"The participant agrees to not transfer content over the network which "
"violates the law."
-msgstr ""
+msgstr "Участник соглашается не передавать контент по сети, нарушающей закон."
msgid ""
"The participant agrees to not use the network in any way which will harm the "
"infrastructure, the network itself, its operators or other participants."
msgstr ""
+"Участник соглашается не использовать сеть любым способом, который нанесет "
+"ущерб инфраструктуре, самой сети, ее операторам или другим участникам."
msgid ""
"These Terms of Use govern the use of the network by its participants' "
"computer, PDA, or similar device (\"Devices\") within the network."
msgstr ""
+"Настоящие условия использования регулируют использование сети компьютером "
+"участников, КПК, смартфоном или аналогичным устройством 'устройствами' в "
+"сети."
msgid "Time remaining"
msgstr "Оставшееся время"
@@ -276,29 +302,28 @@ msgid "Traffic in/out"
msgstr "Трафик вх/исх"
msgid "Upload limit"
-msgstr "Лимит отдачи"
+msgstr "Предел загрузки"
msgid "Usage Agreement"
-msgstr ""
+msgstr "Соглашение об использовании"
msgid "Welcome"
msgstr "Добро пожаловать"
msgid "Whitelist"
-msgstr "\"Белый\" список"
+msgstr "Белый список"
msgid "You are now connected to the free wireless mesh network"
-msgstr "Теперь вы подключены к бесплатной беспроводной ячеистой сети"
+msgstr "Теперь вы подключены к свободной беспроводной сети Mesh."
msgid ""
"You can enter your own text that is displayed to clients here.<br />It is "
"possible to use the following markers: ###COMMUNITY###, ###COMMUNITY_URL###, "
"###CONTACTURL###, ###LEASETIME###, ###LIMIT### and ###ACCEPT###."
msgstr ""
-"Здесь вы можете указать свой текст, который будет отображаться клиентам.<br /"
-">Возможно использовать следующие маркеры: ###COMMUNITY###, "
-"###COMMUNITY_URL###, ###CONTACTURL###, ###LEASETIME###, ###LIMIT### and "
-"###ACCEPT###."
+"Здесь можно ввести собственный текст, отображаемый для клиентов.<br />Можно "
+"использовать следующие маркеры: ###COMMUNITY###, ###COMMUNITY_URL###, "
+"###CONTACTURL###, ###LEASETIME###, ###LIMIT### и ###ACCEPT###."
msgid ""
"Your access to this network has been blocked, most likely because you did "
@@ -311,7 +336,7 @@ msgid "Your bandwidth is limited to"
msgstr "Ваша полоса пропускания ограничена значением"
msgid "blacklisted"
-msgstr "в \"чёрном\" списке"
+msgstr "в Черном списке"
msgid "expired"
msgstr "истёк"
@@ -323,7 +348,7 @@ msgid "perform any kind of illegal activities"
msgstr "выполнять любые незаконные действия"
msgid "splashed"
-msgstr "уже в splash"
+msgstr "вы в Splash"
msgid "temporarily blocked"
msgstr "временно заблокирован"
@@ -338,25 +363,4 @@ msgid "waste bandwidth with unneccesary downloads or streams"
msgstr "тратить пропускную способность на ненужные загрузки или потоки"
msgid "whitelisted"
-msgstr "в \"белом\" списке"
-
-#~ msgid ""
-#~ "Hosts and Networks that are listed here are excluded from splashing, i.e. "
-#~ "they are always allowed."
-#~ msgstr ""
-#~ "Перечисленные хосты и сети не получают приглашения splash-экрана, т.е. они "
-#~ "всегда разрешены."
-
-#~ msgid "By accepting these rules you can use this network for"
-#~ msgstr "Принимая эти правила, вы можете использовать данную сеть для"
-
-#~ msgid "Edit Splash text"
-#~ msgstr "Редактировать текст splash-экрана"
-
-#~ msgid "hour(s). After this time you need to accept these rules again."
-#~ msgstr ""
-#~ "час(ы). После указанного времени Вы должны вновь принять эти правила."
-
-# Здесь наверняка нужно склонить в другом падеже, надо смотреть по контексту
-#~ msgid "the owner of this access point."
-#~ msgstr "с владельцем этой точки доступа."
+msgstr "в Белом списке"
diff --git a/applications/luci-app-statistics/po/ru/rrdtool.po b/applications/luci-app-statistics/po/ru/rrdtool.po
index a63a850806..098ed4cedf 100644
--- a/applications/luci-app-statistics/po/ru/rrdtool.po
+++ b/applications/luci-app-statistics/po/ru/rrdtool.po
@@ -1,18 +1,18 @@
+# rrdtool.pot
+# generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua
msgid ""
msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-03-26 15:36+0200\n"
-"Last-Translator: Anonymous Pootle User\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: rrdtool\n"
+"POT-Creation-Date: 2017-10-17 22:00+0300\n"
+"PO-Revision-Date: 2018-01-06 01:05+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
"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.4\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
#. %H: Wireless - Signal Noise Ratio
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1
@@ -187,7 +187,7 @@ msgstr "%di"
#. %H: Process %pi - used cpu time
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35
msgid "stat_dg_title_processes__ps_cputime"
-msgstr "%H: Процесс %pi - время ЦП"
+msgstr "%H: Процесс %pi - время CPU"
#. Jiffies
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36
@@ -197,12 +197,12 @@ msgstr "Jiffies"
#. system
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37
msgid "stat_ds_ps_cputime__syst"
-msgstr "система"
+msgstr "Система"
#. user
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38
msgid "stat_ds_ps_cputime__user"
-msgstr "пользователь"
+msgstr "Пользователь"
#. %H: Process %pi - threads and processes
#: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39
diff --git a/applications/luci-app-statistics/po/ru/statistics.po b/applications/luci-app-statistics/po/ru/statistics.po
index 9d0ff9fdf2..702dbe7f86 100644
--- a/applications/luci-app-statistics/po/ru/statistics.po
+++ b/applications/luci-app-statistics/po/ru/statistics.po
@@ -1,25 +1,23 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: statistics\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2013-12-05 17:11+0200\n"
-"Last-Translator: Dmitri <4glitch@gmail.com>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2017-10-17 22:00+0300\n"
+"PO-Revision-Date: 2018-01-06 13:32+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "APC UPS"
-msgstr ""
+msgstr "APC ИБП"
msgid "APCUPS Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина APCUPS"
msgid "Action (target)"
msgstr "Действие (цель)"
@@ -37,34 +35,34 @@ msgid "Add notification command"
msgstr "Добавить команду уведомления"
msgid "Aggregate number of connected users"
-msgstr ""
+msgstr "Общее число подключенных пользователей"
msgid "Base Directory"
-msgstr "Базовая директория"
+msgstr "Основная папка приложения"
msgid "Basic monitoring"
msgstr "Базовая статистика"
msgid "CPU Context Switches Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина контекстных переключателей CPU"
msgid "CPU Frequency"
-msgstr ""
+msgstr "Частота CPU"
msgid "CPU Frequency Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина частоты CPU"
msgid "CPU Plugin Configuration"
-msgstr "Конфигурация модуля CPU"
+msgstr "Настройка плагина 'CPU'"
msgid "CSV Output"
-msgstr "Вывод в CSV"
+msgstr "CSV вывод"
msgid "CSV Plugin Configuration"
-msgstr "Конфигурация модуля CSV"
+msgstr "Настройка плагина CSV"
msgid "Cache collected data for"
-msgstr "Кэшировать собранную статистику в течение"
+msgstr "Кэшировать собранную статистику в течении"
msgid "Cache flush interval"
msgstr "Интервал сброса кэша"
@@ -89,8 +87,8 @@ msgid ""
"different plugins. On this page you can change general settings for the "
"collectd daemon."
msgstr ""
-"Collectd - это сервис для сбора данных с разных модулей. На этой странице вы "
-"можете изменить настройки Сollectd."
+"Collectd - это сервис для сбора данных с разных плагинов. На этой странице "
+"вы можете изменить настройки Сollectd."
msgid "Conntrack"
msgstr "Отслеживание подключения (Conntrack)"
@@ -99,16 +97,16 @@ msgid "Conntrack Plugin Configuration"
msgstr "Настройка плагина Conntrack"
msgid "Context Switches"
-msgstr ""
+msgstr "Переключатели контекста"
msgid "DF Plugin Configuration"
-msgstr "Конфигурация модуля DF"
+msgstr "Настройка плагина DF"
msgid "DNS"
msgstr "DNS"
msgid "DNS Plugin Configuration"
-msgstr "Конфигурация модуля DNS"
+msgstr "Настройка плагина DNS"
msgid "Data collection interval"
msgstr "Интервал сбора данных"
@@ -120,56 +118,55 @@ msgid "Destination ip range"
msgstr "Диапазон IP-адресов назначения"
msgid "Directory for collectd plugins"
-msgstr "Директория с модулями collectd"
+msgstr "Папка с плагинами collectd"
msgid "Directory for sub-configurations"
-msgstr "Директория конфигураций"
+msgstr "Папка с config файлом"
msgid "Disk Plugin Configuration"
-msgstr "Конфигурация модуля Disk"
+msgstr "Настройка плагина Disk"
msgid "Disk Space Usage"
-msgstr "Использование диска"
+msgstr "Использовано места на диске"
msgid "Disk Usage"
msgstr "Использование диска"
msgid "Display Host »"
-msgstr "Показать узел »"
+msgstr "Показать хост »"
msgid "Display timespan »"
msgstr "Показать за промежуток »"
msgid "E-Mail Plugin Configuration"
-msgstr "Конфигурация модуля E-Mail"
+msgstr "Настройка плагина E-Mail"
msgid "Email"
msgstr "E-mail"
msgid "Empty value = monitor all"
-msgstr ""
+msgstr "Если пусто = monitor all"
msgid "Enable this plugin"
-msgstr "Включить этот модуль"
+msgstr "Включить этот плагин"
msgid "Entropy"
-msgstr ""
+msgstr "Entropy"
msgid "Entropy Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина Entropy"
msgid "Exec"
msgstr "Exec"
msgid "Exec Plugin Configuration"
-msgstr "Конфигурация модуля Exec"
+msgstr "Настройка плагина Exec"
-#, fuzzy
msgid "Filter class monitoring"
-msgstr "Мониторинг классов фильтров"
+msgstr "Мониторинг класса фильтров"
msgid "Firewall"
-msgstr "Firewall"
+msgstr "Фаервол"
msgid "Flush cache after"
msgstr "Сбросить кэш после"
@@ -178,13 +175,13 @@ msgid "Forwarding between listen and server addresses"
msgstr "Перенаправление между локальным адресом и адресом сервера"
msgid "Gather compression statistics"
-msgstr ""
+msgstr "Сбор статистики сжатия"
msgid "General plugins"
-msgstr ""
+msgstr "Основные плагины"
msgid "Generate a separate graph for each logged user"
-msgstr ""
+msgstr "Создать отдельный график для каждого пользователя"
msgid "Graphs"
msgstr "Графики"
@@ -196,27 +193,30 @@ msgid ""
"Here you can define external commands which will be started by collectd in "
"order to read certain values. The values will be read from stdout."
msgstr ""
-"Здесь вы можете определить внешние команды, которые будут выполнены для "
-"чтения определённых значений. Значения будут считаны со стандартного вывода."
+"На странице вы можете определить внешние команды, которые будут выполнены "
+"для чтения определенных значений. Значения будут считаны со стандартного "
+"вывода."
msgid ""
"Here you can define external commands which will be started by collectd when "
"certain threshold values have been reached. The values leading to invokation "
"will be feeded to the the called programs stdin."
msgstr ""
-"Здесь вы можете определить внешние команды, которые будут выполнены, когда "
-"значения достигнут определённого порога. Значения будут переданы на "
+"На странице вы можете определить внешние команды, которые будут выполнены, "
+"когда значения достигнут определенного порога. Значения будут переданы на "
"стандартный ввод вызванным программам."
msgid ""
"Here you can define various criteria by which the monitored iptables rules "
"are selected."
msgstr ""
-"Здесь вы можете указать различные критерии, по которым будут выбраны правила "
-"для сбора статистики."
+"На странице вы можете указать различные критерии, по которым будут выбраны "
+"правила для сбора статистики."
msgid "Hold Ctrl to select multiple items or to deselect entries."
msgstr ""
+"Удерживая нажатой клавишу Ctrl, выберите несколько элементов или отмените "
+"выбор записей."
msgid "Host"
msgstr "Хост"
@@ -228,16 +228,16 @@ msgid "IP or hostname where to get the txtinfo output from"
msgstr "IP-адрес или имя хоста, с которых получать текстовый вывод"
msgid "IRQ Plugin Configuration"
-msgstr "Конфигурация модуля IRQ"
+msgstr "Настройка плагина IRQ"
msgid "Ignore source addresses"
-msgstr "Игнорировать адреса-источники"
+msgstr "Игнорировать исходящие адреса"
msgid "Incoming interface"
msgstr "Входящий интерфейс"
msgid "Interface Plugin Configuration"
-msgstr "Конфигурация модуля Interface"
+msgstr "Настройка плагина 'Интерфейсы'"
msgid "Interfaces"
msgstr "Интерфейсы"
@@ -249,7 +249,7 @@ msgid "Interval for pings"
msgstr "Интервал для ping-запросов"
msgid "Iptables Plugin Configuration"
-msgstr "Конфигурация модуля Iptables"
+msgstr "Настройка плагина Iptables"
msgid "Leave unselected to automatically determine interfaces to monitor."
msgstr ""
@@ -257,30 +257,32 @@ msgstr ""
"мониторинга."
msgid "Listen host"
-msgstr "Хост"
+msgstr "Слушать хост"
msgid "Listen port"
-msgstr "Порт"
+msgstr "Слушать порт"
msgid "Listener interfaces"
-msgstr "Использовать интерфейсы"
+msgstr "Прослушивать интерфейсы"
msgid "Load Plugin Configuration"
-msgstr "Конфигурация модуля Load"
+msgstr "Настройка плагина 'Загрузка системы'"
msgid ""
"Max values for a period can be used instead of averages when not using 'only "
"average RRAs'"
msgstr ""
+"Максимальные значения для периода, могут использоваться вместо средних "
+"значений, когда не используется 'only average RRAs'"
msgid "Maximum allowed connections"
-msgstr "Максимальное число соединений"
+msgstr "Максимум разрешенных соединений"
msgid "Memory"
msgstr "Память"
msgid "Memory Plugin Configuration"
-msgstr "Конфигурация модуля Memory"
+msgstr "Настройка плагина 'Память'"
msgid "Monitor all except specified"
msgstr "Собирать статистику со всех, кроме указанных"
@@ -289,61 +291,61 @@ msgid "Monitor all local listen ports"
msgstr "Собирать статистику со всех портов, ожидающих соединения"
msgid "Monitor all sensors"
-msgstr ""
+msgstr "Мониторить все сенсоры"
msgid "Monitor device(s) / thermal zone(s)"
-msgstr ""
+msgstr "Мониторить устройство(а) / зону(ы) нагрева"
msgid "Monitor devices"
-msgstr "Собирать статистику с устройств"
+msgstr "Мониторить устройства"
msgid "Monitor disks and partitions"
-msgstr "Собирать статистику с дисков и разделов"
+msgstr "Мониторить диски и разделы"
msgid "Monitor filesystem types"
-msgstr "Собирать статистику с файловых систем"
+msgstr "Монитоить типы файловых систем"
msgid "Monitor host"
-msgstr ""
+msgstr "Мониторить хост"
msgid "Monitor hosts"
-msgstr "Собирать статистику с хостов"
+msgstr "Мониторить хосты"
msgid "Monitor interfaces"
-msgstr "Собирать статистику с интерфейсов"
+msgstr "Мониторить интерфейсы"
msgid "Monitor interrupts"
-msgstr "Собирать статистику по прерываниям"
+msgstr "Мониторить прерывания"
msgid "Monitor local ports"
-msgstr "Собирать статистику с локальных портов"
+msgstr "Мониторить локальные порты"
msgid "Monitor mount points"
-msgstr "Собирать статистику с точек монтирования"
+msgstr "Мониторить точки монтирования"
msgid "Monitor processes"
-msgstr "Собирать статистику с процессов"
+msgstr "Мониторить процессы"
msgid "Monitor remote ports"
-msgstr "Собирать статистику с удалённых портов"
+msgstr "Мониторить удаленные порты"
msgid "Name of the rule"
-msgstr "Название правила"
+msgstr "Имя правила"
msgid "Netlink"
msgstr "Netlink"
msgid "Netlink Plugin Configuration"
-msgstr "Конфигурация модуля Netlink"
+msgstr "Настройка плагина 'Netlink'"
msgid "Network"
msgstr "Network"
msgid "Network Plugin Configuration"
-msgstr "Конфигурация модуля Network"
+msgstr "Настройка плагина 'Сеть'"
msgid "Network plugins"
-msgstr "Сетевые модули"
+msgstr "Сетевые плагины"
msgid "Network protocol"
msgstr "Сетевой протокол"
@@ -352,6 +354,8 @@ msgid ""
"Note: as pages are rendered by user 'nobody', the *.rrd files, the storage "
"directory and all its parent directories need to be world readable."
msgstr ""
+"Внимание: все операции осуществляются под пользователем 'nobody', "
+"соответственно все файлы *.rrd и папки будут доступны любому пользователю."
msgid "Number of threads for data collection"
msgstr "Количество потоков сбора данных"
@@ -366,69 +370,67 @@ msgid "Only create average RRAs"
msgstr "Создавать только средние RRA"
msgid "OpenVPN"
-msgstr ""
+msgstr "OpenVPN"
msgid "OpenVPN Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина OpenVPN"
msgid "OpenVPN status files"
-msgstr ""
+msgstr "Состояние файлов OpenVPN"
msgid "Options"
-msgstr "Опции"
+msgstr "Настройки"
msgid "Outgoing interface"
msgstr "Исходящий интерфейс"
msgid "Output plugins"
-msgstr "Модули вывода"
+msgstr "Плагины вывода"
msgid "Ping"
msgstr "Ping"
msgid "Ping Plugin Configuration"
-msgstr "Конфигурация модуля Ping"
+msgstr "Настройка плагина Ping"
msgid "Port"
msgstr "Порт"
msgid "Port for apcupsd communication"
-msgstr ""
+msgstr "Порт для связи apcupsd"
msgid "Processes"
msgstr "Процессы"
msgid "Processes Plugin Configuration"
-msgstr "Конфигурация модуля Processes"
+msgstr "Настройка плагина Processes"
msgid "Processes to monitor separated by space"
msgstr "Процессы для мониторинга (разделённые пробелом)"
msgid "Processor"
-msgstr "Processor"
+msgstr "CPU"
msgid "Qdisc monitoring"
msgstr "Мониторинг Qdisc"
-#, fuzzy
msgid "RRD XFiles Factor"
-msgstr "Фактор XFiles RRD"
+msgstr "RRD XFiles Factor"
-#, fuzzy
msgid "RRD heart beat interval"
-msgstr "Интервал heartbeat RRD"
+msgstr "RRD heartbeat interval"
msgid "RRD step interval"
-msgstr "Интервал шага RRD"
+msgstr "RRD step interval"
msgid "RRDTool"
msgstr "RRDTool"
msgid "RRDTool Plugin Configuration"
-msgstr "Конфигурация модуля RRDTool"
+msgstr "Настройка плагина 'RRDTool'"
msgid "Rows per RRA"
-msgstr "Количество строк в RRA"
+msgstr "Rows per RRA"
msgid "Script"
msgstr "Скрипт"
@@ -437,13 +439,13 @@ msgid "Seconds"
msgstr "Секунды"
msgid "Sensor list"
-msgstr ""
+msgstr "Список сенсоров"
msgid "Sensors"
-msgstr ""
+msgstr "Сенсоры"
msgid "Sensors Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина сенсоров"
msgid "Server host"
msgstr "Хост сервера"
@@ -452,13 +454,13 @@ msgid "Server port"
msgstr "Порт сервера"
msgid "Setup"
-msgstr ""
+msgstr "Настройка"
msgid "Shaping class monitoring"
-msgstr "Мониторинг классов шейпинга"
+msgstr "Мониторинг классов Shaping"
msgid "Show max values instead of averages"
-msgstr ""
+msgstr "Показывают максимальные значения, а не средние"
msgid "Socket file"
msgstr "Файл сокета"
@@ -482,19 +484,19 @@ msgid "Specifies what information to collect about the global topology."
msgstr "Указывает, какую информацию собирать о глобальной топологии."
msgid "Splash Leases"
-msgstr ""
+msgstr "Splash Leases"
msgid "Splash Leases Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина Splash Leases"
msgid "Statistics"
msgstr "Статистика"
msgid "Storage directory"
-msgstr "Директория с данными"
+msgstr "Папка с данными"
msgid "Storage directory for the csv files"
-msgstr "Директория для CSV-файлов"
+msgstr "Папка для CSV-файлов"
msgid "Store data values as rates instead of absolute values"
msgstr "Хранить данные в виде коэффициентов вместо абсолютных значений"
@@ -509,7 +511,7 @@ msgid "TCP Connections"
msgstr "TCPConns"
msgid "TCPConns Plugin Configuration"
-msgstr "Конфигурация модуля TCPConns"
+msgstr "Настройка плагина TCPConns"
msgid "TTL for network packets"
msgstr "TTL для сетевых пакетов"
@@ -521,56 +523,58 @@ msgid "Table"
msgstr "Таблица"
msgid "The APCUPS plugin collects statistics about the APC UPS."
-msgstr ""
+msgstr "Плагин 'APCUPS' собирает статистику об ИБП APC."
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
+"Плагин 'NUT' считывает информацию об источниках бесперебойного питания."
msgid ""
"The OLSRd plugin reads information about meshed networks from the txtinfo "
"plugin of OLSRd."
msgstr ""
-"Модуль OLSRd считывает информацию о узловых сетях с модуля txtinfo OLSRd."
+"Плагин 'OLSRd' считывает информацию о узловых сетях с плагина txtinfo OLSRd."
msgid ""
"The OpenVPN plugin gathers information about the current vpn connection "
"status."
msgstr ""
+"Плагин 'OpenVPN' собирает информацию о текущем состоянии VPN подключения."
msgid ""
"The conntrack plugin collects statistics about the number of tracked "
"connections."
msgstr ""
-"Модуль Conntrack собирает статистику о количестве отслеживаемых соединений."
+"Плагин 'Conntrack' собирает статистику о количестве отслеживаемых соединений."
msgid "The cpu plugin collects basic statistics about the processor usage."
-msgstr "Модуль CPU собирает статистику по использованию процессора."
+msgstr "Плагин 'CPU' собирает статистику об использовании процессора."
msgid ""
"The csv plugin stores collected data in csv file format for further "
"processing by external programs."
msgstr ""
-"Модуль CSV позволяет сохранить статистику в формате CSV для последующей "
+"Плагин 'CSV' позволяет сохранить статистику в формате CSV для последующей "
"обработки."
msgid ""
"The df plugin collects statistics about the disk space usage on different "
"devices, mount points or filesystem types."
msgstr ""
-"Модуль DF собирает статистику о доступном пространстве на различных "
+"Плагин 'DF' собирает статистику о доступном пространстве на различных "
"устройствах, точках монтирования или файловых системах."
msgid ""
"The disk plugin collects detailled usage statistics for selected partitions "
"or whole disks."
msgstr ""
-"Модуль Disk собирает подробную статистику для выбранных разделов или дисков."
+"Плагин 'Disk' собирает подробную статистику по выбранным разделам или дискам."
msgid ""
"The dns plugin collects detailled statistics about dns related traffic on "
"selected interfaces."
msgstr ""
-"Модуль DNS собирает подробную статистику о DNS-трафике на выбранных "
+"Плагин 'DNS' собирает подробную статистику о DNS трафике на выбранных "
"интерфейсах."
msgid ""
@@ -579,55 +583,58 @@ msgid ""
"to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can "
"be used in other ways as well."
msgstr ""
-"Модуль E-mail создает Unix-сокет, который может быть использован для "
-"передачи статистики эл. почты работающему сервису collectd. В основном, этот "
-"модуль предназначен для использования вместе с Mail::SpamAssasin::Plugin::"
+"Плагин 'E-mail' создает Unix-сокет, который может быть использован для "
+"передачи статистики email работающему сервису collectd. В основном, этот "
+"плагин предназначен для использования вместе с Mail::SpamAssasin::Plugin::"
"Collectd."
msgid "The entropy plugin collects statistics about the available entropy."
-msgstr ""
+msgstr "Плагин 'Entropy' собирает статистику о доступной энтропии."
msgid ""
"The exec plugin starts external commands to read values from or to notify "
"external processes when certain threshold values have been reached."
msgstr ""
-"Модуль Exec выполняет внешнюю команду в случае, когда определённые значения "
-"достигают заданного порога."
+"Плагин 'Exec' выполняет внешнюю команду в случае, когда определенные "
+"значения достигают заданного порога."
msgid ""
"The interface plugin collects traffic statistics on selected interfaces."
-msgstr "Модуль Interface собирает статистику на выбранных сетевых интерфейсах."
+msgstr ""
+"Плагин 'Интерфейсы' собирает статистику на выбранных сетевых интерфейсах."
msgid ""
"The iptables plugin will monitor selected firewall rules and collect "
"informations about processed bytes and packets per rule."
msgstr ""
-"Модуль Iptables собирает статистику с определённых правил межсетевого экрана."
+"Плагин 'Iptables' собирает статистику с определенных правил межсетевого "
+"экрана."
msgid ""
"The irq plugin will monitor the rate of issues per second for each selected "
"interrupt. If no interrupt is selected then all interrupts are monitored."
msgstr ""
-"Модуль IRQ собирает статистику по выбранным прерываниям. Если ни одно "
+"Плагин 'IRQ' собирает статистику по выбранным прерываниям. Если ни одно "
"прерывание не выбрано, сбор статистики будет проводиться по всем прерываниям."
msgid ""
"The iwinfo plugin collects statistics about wireless signal strength, noise "
"and quality."
msgstr ""
-"Модуль Iwinfo собирает статистику о беспроводном сигнале, шуме и качестве."
+"Плагин 'Беспроводные соединения' собирает статистику о беспроводном сигнале, "
+"шуме и качестве."
msgid "The load plugin collects statistics about the general system load."
-msgstr "Модуль Load собирает статистику о загрузке системы."
+msgstr "Плагин 'Загрузка системы' собирает статистику о загрузке системы."
msgid "The memory plugin collects statistics about the memory usage."
-msgstr "Модуль Memory собирает статистику об использовании памяти."
+msgstr "Плагин 'Память' собирает статистику об использовании памяти."
msgid ""
"The netlink plugin collects extended informations like qdisc-, class- and "
"filter-statistics for selected interfaces."
msgstr ""
-"Модуль Netlink собирает расширенную статистику с выбранных интерфейсов."
+"Плагин 'Netlink' собирает расширенную статистику с выбранных интерфейсов."
msgid ""
"The network plugin provides network based communication between different "
@@ -635,23 +642,24 @@ msgid ""
"client mode locally collected data is transferred to a collectd server "
"instance, in server mode the local instance receives data from other hosts."
msgstr ""
-"Модуль Network предоставляет возможность сетевого обмена данными между "
+"Плагин 'Сеть' предоставляет возможность сетевого обмена данными между "
"разными сервисами collectd. Collectd может работать в режиме сервера или "
"клиента. В режиме клиента, локальная статистика передается collectd-серверу, "
-"в режиме сервера collectd собирает статистику с удалённых хостов."
+"в режиме сервера collectd собирает статистику с удаленных хостов."
msgid ""
"The ping plugin will send icmp echo replies to selected hosts and measure "
"the roundtrip time for each host."
msgstr ""
-"Модуль Ping посылает ICMP-запросы выбранным хостам и измеряет время отклика."
+"Плагин 'Ping' посылает ICMP-запросы выбранным хостам и измеряет время "
+"отклика."
msgid ""
"The processes plugin collects informations like cpu time, page faults and "
"memory usage of selected processes."
msgstr ""
-"Модуль Processes собирает статистику для выбранных процессов об "
-"использовании ЦП, ошибках обращения к страницам памяти, использовании памяти."
+"Плагин 'Processes' собирает информацию, такую как время CPU, ошибки страницы "
+"и использование памяти выбранных процессов."
msgid ""
"The rrdtool plugin stores the collected data in rrd database files, the "
@@ -659,61 +667,70 @@ msgid ""
"values will result in a very high memory consumption in the temporary "
"directory. This can render the device unusable!</strong>"
msgstr ""
-"Модуль Rrdtool сохраняет статистику в формате rrd для последующего "
+"Плагин 'Rrdtool' сохраняет статистику в формате rrd для последующего "
"построения диаграмм.<br /><br /><strong>Внимание: установка неверных "
-"параметров может привезти к высокому потреблению памяти во временной "
-"директории. Это, в свою очередь, может привести к отказу устройства!</strong>"
+"параметров может привезти к высокому потреблению памяти при считывании "
+"данных из temp. Что в свою очередь, может привести к зависанию устройства!</"
+"strong>"
msgid ""
"The sensors plugin uses the Linux Sensors framework to gather environmental "
"statistics."
msgstr ""
+"Плагин 'Sensors' использует сенсоры Linux, чтобы собрать статистику "
+"состояния устройства."
msgid ""
"The splash leases plugin uses libuci to collect statistics about splash "
"leases."
-msgstr ""
+msgstr "Плагин 'Splash' использует libuci для сбора статистики работы splash."
msgid ""
"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
"render diagram images."
msgstr ""
+"Страница 'Статистика' использует <a href=\"https://collectd.org/\">Collectd</"
+"a> для сбора данных и <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> "
+"для от рисовки графиков."
msgid ""
"The tcpconns plugin collects informations about open tcp connections on "
"selected ports."
msgstr ""
-"Модуль TCPConns собирает информацию об открытых TCP-соединениях на выбранных "
-"портах."
+"Плагин 'TCPConns' собирает информацию об открытых TCP соединениях на "
+"выбранных портах."
msgid ""
"The thermal plugin will monitor temperature of the system. Data is typically "
"read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be "
"read, e.g. thermal_zone1 )"
msgstr ""
+"Плагин 'Thermal', будет контролировать температурные сенсоры. Данные будут "
+"считываются из /sys/class/thermal/*/temp ( '*' обозначает сенсор "
+"устройства , как-то thermal_zone1 )"
msgid ""
"The unixsock plugin creates a unix socket which can be used to read "
"collected data from a running collectd instance."
msgstr ""
-"Модуль UnixSock создает Unix-сокет, который может быть использован для "
+"Плагин 'UnixSock' создает Unix-сокет, который может быть использован для "
"получения статистики от работающего сервиса collectd."
msgid "The uptime plugin collects statistics about the uptime of the system."
-msgstr ""
+msgstr "Плагин 'Uptime' собирает статистику о времени работы системы."
msgid "Thermal"
-msgstr ""
+msgstr "Thermal"
msgid "Thermal Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина Thermal"
msgid "This plugin collects statistics about the processor context switches."
-msgstr ""
+msgstr "Данный плагин собирает статистику о переключение контекста процессора."
msgid "This plugin collects statistics about the processor frequency scaling."
-msgstr ""
+msgstr "Этот плагин собирает статистику о частоте процессора масштабирования."
msgid ""
"This section defines on which interfaces collectd will wait for incoming "
@@ -735,26 +752,25 @@ msgid "UPS"
msgstr "ИБП"
msgid "UPS Plugin Configuration"
-msgstr "Настройка плагина ИБП"
+msgstr "Настройка плагина UPS"
-#, fuzzy
msgid "UPS name in NUT ups@host format"
-msgstr "Имя ИБП в ups@host NUT-формате"
+msgstr "Имя ИБП в формате NUT ups@host"
msgid "UnixSock"
msgstr "UnixSock"
msgid "Unixsock Plugin Configuration"
-msgstr "Конфигурация модуля UnixSock"
+msgstr "Настройка плагина UnixSock"
msgid "Uptime"
-msgstr ""
+msgstr "Uptime"
msgid "Uptime Plugin Configuration"
-msgstr ""
+msgstr "Настройка плагина Uptime"
msgid "Use improved naming schema"
-msgstr ""
+msgstr "Используйте улучшенную схему наименования"
msgid "Used PID file"
msgstr "Используемый PID-файл"
@@ -766,14 +782,16 @@ msgid "Verbose monitoring"
msgstr "Расширенная статистика"
msgid "Wireless"
-msgstr "Wireless"
+msgstr "Беспроводные соединения"
msgid "Wireless iwinfo Plugin Configuration"
-msgstr "Конфигурация модуля Iwinfo"
+msgstr "Настройка плагина 'Беспроводные соединения'"
msgid ""
"You can install additional collectd-mod-* plugins to enable more statistics."
msgstr ""
+"Вы можете установить плагины collectd-mod-* для включения дополнительной "
+"статистики."
msgid "e.g. br-ff"
msgstr "напр. br-ff"
@@ -790,64 +808,8 @@ msgstr "не более 16 символов"
msgid "reduces rrd size"
msgstr "уменьшает размер rrd"
-#, fuzzy
msgid "seconds; multiple separated by space"
-msgstr "секунды; разделяются пробелом"
+msgstr "секунд; значения разделенные пробелом"
msgid "server interfaces"
msgstr "интерфейсы сервера"
-
-#~ msgid "Collectd"
-#~ msgstr "Collectd"
-
-#~ msgid "System plugins"
-#~ msgstr "Системные модули"
-
-#~ msgid ""
-#~ "The statistics package is based on <a href=\"http://collectd.org/index."
-#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/"
-#~ "\">RRD Tool</a> to render diagram images from collected data."
-#~ msgstr ""
-#~ "Данная статистика основана на программе <a href=\"http://collectd.org/"
-#~ "index.shtml\">Collectd</a> и использует <a href=\"http://oss.oetiker.ch/"
-#~ "rrdtool/\">RRD Tool</a> для построения диаграмм."
-
-#~ msgid "Installed network plugins:"
-#~ msgstr "Установленные сетевые модули:"
-
-#~ msgid "Installed output plugins:"
-#~ msgstr "Установленные модули вывода:"
-
-#~ msgid ""
-#~ "Network plugins are used to collect information about open tcp "
-#~ "connections, interface traffic, iptables rules etc."
-#~ msgstr ""
-#~ "Сетевые модули используются для сбора информации об открытых TCP-"
-#~ "соединениях, трафике, правилах iptables и т.п."
-
-#~ msgid ""
-#~ "Output plugins provide different possibilities to store collected data. "
-#~ "It is possible to enable multiple plugin at one, for example to store "
-#~ "collected data in rrd databases and to transmit the data over the network "
-#~ "to other collectd instances."
-#~ msgstr ""
-#~ "Модули вывода обеспечивают различные варианты сохранения собранных "
-#~ "данных. Можно включить несколько модулей, например, чтобы сохранить "
-#~ "собранные данные в базе данных RRD и передать их по сети другим "
-#~ "инстанциям collectd."
-
-#~ msgid ""
-#~ "System plugins collecting values about system state and ressource usage "
-#~ "on the device.:"
-#~ msgstr ""
-#~ "Системные модули, собирающие данные о состоянии системы и использовании "
-#~ "ресурсов устройства:"
-
-#~ msgid ""
-#~ "The wireless plugin collects statistics about wireless signal strength, "
-#~ "noise and quality."
-#~ msgstr ""
-#~ "Модуль Wireless собирает статистику о силе, шуме и качестве сигнала."
-
-#~ msgid "Wireless Plugin Configuration"
-#~ msgstr "Конфигурация модуля Wireless"
diff --git a/applications/luci-app-tinyproxy/po/ru/tinyproxy.po b/applications/luci-app-tinyproxy/po/ru/tinyproxy.po
index f9a3c23d16..1e177f7c9c 100644
--- a/applications/luci-app-tinyproxy/po/ru/tinyproxy.po
+++ b/applications/luci-app-tinyproxy/po/ru/tinyproxy.po
@@ -1,82 +1,80 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: tinyproxy\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-08-15 20:24+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 20:24+0300\n"
+"PO-Revision-Date: 2018-01-08 17:50+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid ""
"<em>Via proxy</em> routes requests to the given target via the specifed "
"upstream proxy, <em>Reject access</em> disables any upstream proxy for the "
"target"
msgstr ""
-"<em>Через прокси</em> перенаправляет запросы на заданные узлы через "
-"указанный прокси, <em>Отклонять доступ</em> отключает использование прокси "
-"для всех узлов"
+"<em>'Через прокси'</em> перенаправляет запросы на заданные узлы через "
+"указанный восходящий прокси-сервер, <em>'Отклонять доступ'</em> отключает "
+"использование прокси-сервер для всех узлов."
msgid ""
"Adds an \"X-Tinyproxy\" HTTP header with the client IP address to forwarded "
"requests"
msgstr ""
-"Добавляет HTTP-заголовок \"X-Tinyproxy\" с IP-адресом клиента ко всем "
-"перенаправленным запросам"
+"Добавляет HTTP-заголовок 'X-Tinyproxy' с IP-адресом клиента ко всем "
+"перенаправленным запросам."
msgid "Allowed clients"
-msgstr "Разрешённые клиенты"
+msgstr "Разрешенные клиенты"
msgid "Allowed connect ports"
-msgstr "Разрешённые порты подключения"
+msgstr "Разрешенные порты подключения"
msgid "Bind address"
-msgstr "Адрес привязки"
+msgstr "Привязка адреса"
msgid ""
"By default, basic POSIX expressions are used for filtering. Enable this to "
"activate extended regular expressions"
msgstr ""
-"Разрешить использование расширенных регулярных выражений для фильтрации. По "
-"умолчанию, используются базовые POSIX-выражения"
+"По умолчанию для фильтрации используются базовые POSIX-выражения. Включить "
+"эту функцию для активации расширенных регулярных выражений."
msgid ""
"By default, filter strings are treated as case-insensitive. Enable this to "
"make the matching case-sensitive"
msgstr ""
-"По умолчанию, строки фильтрации регистро-независимы. Включите эту опцию, "
-"чтобы сделать сравнение регистро-зависимым"
+"По умолчанию строки фильтрации регистро-независимы. Включите эту опцию, "
+"чтобы сделать сравнение регистро-зависимым."
msgid ""
"By default, filtering is done based on domain names. Enable this to match "
"against URLs instead"
msgstr ""
-"По умолчанию, фильтрация выполняется на основе имени домена. Включите эту "
-"опцию, чтобы фильтровать при помощи URL"
+"По умолчанию фильтрация выполняется на основе доменных имен. Включите это "
+"для сопоставления с URL-адресами."
msgid ""
"By default, the filter rules act as blacklist. Enable this option to only "
"allow matched URLs or domain names"
msgstr ""
-"По умолчанию, фильтрация работает в режиме чёрного списка. Включите эту "
-"опцию, чтобы разрешить только опредёленные URL или доменные имена"
+"По умолчанию правила фильтрации действуют как Черный список. Включите эту "
+"опцию, чтобы разрешить только совпадающие URL-адреса или имена доменов."
msgid ""
"Can be either an IP address or range, a domain name or \".\" for any host "
"without domain"
msgstr ""
-"Может быть IP-адресом, диапазоном, именем домена или \".\" для любого хоста "
+"Может быть IP-адресом, диапазоном, именем домена или '.' для любого хоста "
"без домена"
msgid "Configuration"
-msgstr "Конфигурация"
+msgstr "Настройка"
msgid "Connection timeout"
msgstr "Таймаут соединения"
@@ -91,34 +89,34 @@ msgid "Error page"
msgstr "Страница ошибки"
msgid "Failed to retrieve statistics from url:"
-msgstr "Ошибка получения статистики по URL:"
+msgstr "Не удалось получить статистику по URL-адресу:"
msgid "Filter by RegExp"
-msgstr "Фильтровать при помощи регулярных выражений"
+msgstr "Фильтровать по регулярным выражениям (RegExp)"
msgid "Filter by URLs"
-msgstr "Фильтровать по URL"
+msgstr "Фильтровать по URL-адресам"
msgid "Filter case-sensitive"
-msgstr "Фильтровать с учётом регистра"
+msgstr "Фильтровать с учетом регистра"
msgid "Filter file"
msgstr "Файл фильтрации"
msgid "Filtering and ACLs"
-msgstr "Фильтрация и ACL"
+msgstr "Фильтрация и ACL-ы"
msgid "General settings"
-msgstr "Общие настройки"
+msgstr "Основные настройки"
msgid "Group"
msgstr "Группа"
msgid "HTML template file to serve for stat host requests"
-msgstr "HTML-шаблон для статистики хостов"
+msgstr "HTML-файл шаблона для вывода статистики хостов."
msgid "HTML template file to serve when HTTP errors occur"
-msgstr "HTML-шаблон для вывода ошибок HTTP"
+msgstr "HTML-файл шаблона для вывода ошибок HTTP."
msgid "Header whitelist"
msgstr "Белый список заголовков"
@@ -126,32 +124,32 @@ msgstr "Белый список заголовков"
msgid ""
"List of IP addresses or ranges which are allowed to use the proxy server"
msgstr ""
-"Список или диапазон IP-адресов, которым разрешено использовать прокси-сервер"
+"Список или диапазон IP-адресов, которым разрешено использовать прокси-сервер."
msgid ""
"List of allowed ports for the CONNECT method. A single value \"0\" allows "
"all ports"
msgstr ""
-"Список разрешённых портов для метода CONNECT. Значение \"0\" разрешает все "
-"порты"
+"Список разрешенных портов для опции 'CONNECT'. Значение '0' разрешает все "
+"порты."
msgid "Listen address"
-msgstr "Адрес"
+msgstr "Слушать адрес"
msgid "Listen port"
-msgstr "Порт"
+msgstr "Слушать порт"
msgid "Log file"
-msgstr "Файл журналирования"
+msgstr "Файл системного журнала"
msgid "Log file to use for dumping messages"
-msgstr "Файл для записи сообщений"
+msgstr "Файл системного журнала, используемый для сброса сообщений"
msgid "Log level"
-msgstr "Уровень журналирования"
+msgstr "Настройка журналирования"
msgid "Logging verbosity of the Tinyproxy process"
-msgstr "Уровень подробности журналирования процесса Tinyproxy"
+msgstr "Настройка подробного журналирования процессов Tinyproxy."
msgid "Max. clients"
msgstr "Макс. кол-во клиентов"
@@ -163,34 +161,37 @@ msgid "Max. spare servers"
msgstr "Макс. кол-во серверов ожидания"
msgid "Maximum allowed number of concurrently connected clients"
-msgstr "Максимально допустимое количество одновременно подключенных клиентов"
+msgstr "Максимально допустимое число параллельно подключенных клиентов."
msgid ""
"Maximum allowed number of requests per process. If it is exeeded, the "
"process is restarted. Zero means unlimited."
msgstr ""
-"Максимально допустимое количество запросов на процесс. Если превышено, "
-"процесс будет перезапущен. Ноль отключает данное ограничение."
+"Максимальное допустимое число запросов для каждого процесса. Если превышено, "
+"процесс будет перезапущен. Ноль означает неограниченное."
msgid "Maximum number of prepared idle processes"
-msgstr "Максимальное количество готовых к обработке процессов"
+msgstr "Максимальное количество подготовленных бездействующих процессов"
msgid "Maximum number of seconds an inactive connection is held open"
msgstr ""
"Максимальное количество секунд, в течение которых неактивное соединение "
-"остаётся открытым"
+"удерживается открытым."
msgid "Min. spare servers"
-msgstr "Мин. кол-во серверов ожидания"
+msgstr "Мин. количество серверов ожидания"
msgid "Minimum number of prepared idle processes"
-msgstr "Минимальное количество готовых к обработке процессов"
+msgstr "Минимальное количество подготовленных бездействующих процессов"
msgid "Number of idle processes to start when launching Tinyproxy"
-msgstr "Количество готовых к обработке процессов при старте Tinyproxy"
+msgstr ""
+"Количество бездействующих процессов, запускаемых при запуске Tinyproxy."
msgid "Plaintext file with URLs or domains to filter. One entry per line"
-msgstr "Файл с URL или доменами для фильтрации. Одна запись на строку"
+msgstr ""
+"Текстовый файл с URL-адресами или доменами для фильтрации. Одна запись - "
+"одна строка."
msgid "Policy"
msgstr "Политика"
@@ -211,25 +212,25 @@ msgid ""
"Specifies HTTP header names which are allowed to pass-through, all others "
"are discarded. Leave empty to disable header filtering"
msgstr ""
-"Определяет HTTP-заголовки, которым разрешено проходить через прокси. "
-"Оставьте пустым, чтобы не фильтровать заголовки"
+"Определяет имена HTTP-заголовков, которые разрешено передавать, все "
+"остальные отбрасываются. Оставьте пустым, чтобы отключить фильтрацию "
+"заголовков."
msgid "Specifies the HTTP port Tinyproxy is listening on for requests"
-msgstr "Определяет порт HTTP, на котором Tinyproxy ожидает запросы"
+msgstr "Указывает HTTP-порт Tinyproxy, который прослушивает запросы"
msgid "Specifies the Tinyproxy hostname to use in the Via HTTP header"
msgstr ""
-"Определяет имя хоста Tinyproxy, которое будет использовано в HTTP-заголовке "
-"Via"
+"Определяет имя хоста Tinyproxy, которое будет использовано в HTTP-заголовке."
msgid ""
"Specifies the address Tinyproxy binds to for outbound forwarded requests"
msgstr ""
-"Определяет адрес, к которому привязывается Tinyproxy для отправки исходящих "
-"запросов"
+"Определяет адрес, к которому привязывается Tinyproxy для отправки "
+"перенаправленных исходящих запросов."
msgid "Specifies the addresses Tinyproxy is listening on for requests"
-msgstr "Определяет адрес, на котором Tinyproxy ожидает запросы"
+msgstr "Определяет адрес, на котором Tinyproxy ожидает запросы."
msgid "Specifies the group name the Tinyproxy process is running as"
msgstr "Определяет имя группы, в которой работает Tinyproxy"
@@ -238,14 +239,14 @@ msgid ""
"Specifies the upstream proxy to use for accessing the target host. Format is "
"<code>address:port</code>"
msgstr ""
-"Определяет прокси восходящего канала для доступа к хосту в формате "
-"<code>адрес:порт</code>"
+"Определяет восходящий прокси-сервер, используемый для доступа к хосту "
+"назначения. Формат <code>'адрес:порт'</code>."
msgid "Specifies the user name the Tinyproxy process is running as"
-msgstr "Определяет пользователя, от имени которого работает Tinyproxy"
+msgstr "Задать пользователя, от имени которого работает Tinyproxy"
msgid "Start spare servers"
-msgstr "Запустить указанное количество готовых к обработке процессов"
+msgstr "Запустить запасные серверы"
msgid "Statistics page"
msgstr "Страница статистики"
@@ -263,7 +264,7 @@ msgid "Tinyproxy Status"
msgstr "Состояние Tinyproxy"
msgid "Tinyproxy is a small and fast non-caching HTTP(S)-Proxy"
-msgstr "Tinyproxy - быстрый HTTP(S)-прокси, не использующий кэш"
+msgstr "Tinyproxy - небольшой и быстрый HTTP(S)-прокси, не использующий кэш."
msgid "Upstream Proxies"
msgstr "Прокси для исходящего трафика"
@@ -272,23 +273,25 @@ msgid ""
"Upstream proxy rules define proxy servers to use when accessing certain IP "
"addresses or domains."
msgstr ""
-"Прокси для исходящего трафика при обращении к определённым IP-адресам или "
-"доменам."
+"Правила исходящего трафика прокси-серверов для использования при доступе к "
+"определенным IP-адресам или доменам."
msgid "Use syslog"
-msgstr "Использовать системный журнал"
+msgstr "Системный журнал"
msgid "User"
msgstr "Пользователь"
msgid "Via hostname"
-msgstr "Имя хоста Via"
+msgstr "Через имя хоста"
msgid "Via proxy"
msgstr "Через прокси"
msgid "Writes log messages to syslog instead of a log file"
-msgstr "Записывать сообщения журнала в системный журнал вместо файла"
+msgstr ""
+"Записывать сообщения журнала в общий системный журнал, вместо файла "
+"отдельного файла Tinyproxy."
msgid "X-Tinyproxy header"
msgstr "Заголовок X-Tinyproxy"
diff --git a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
index a418a8ec61..ef79c7406b 100644
--- a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
+++ b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
@@ -1,11 +1,11 @@
--- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
module("luci.controller.travelmate", package.seeall)
-local fs = require("nixio.fs")
-local util = require("luci.util")
-local i18n = require("luci.i18n")
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local i18n = require("luci.i18n")
local templ = require("luci.template")
function index()
@@ -30,6 +30,12 @@ function index()
end
function logread()
- local logfile = util.trim(util.exec("logread -e 'travelmate'"))
+ local logfile
+
+ if nixio.fs.access("/var/log/messages") then
+ logfile = util.trim(util.exec("cat /var/log/messages | grep 'travelmate-'"))
+ else
+ logfile = util.trim(util.exec("logread -e 'travelmate-'"))
+ end
templ.render("travelmate/logread", {title = i18n.translate("Travelmate Logfile"), content = logfile})
end
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
index 27971dfdad..e715a2ba06 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
@@ -1,15 +1,17 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
-local fs = require("nixio.fs")
-local uci = require("luci.model.uci").cursor()
-local json = require("luci.jsonc")
-local nw = require("luci.model.network").init()
-local fw = require("luci.model.firewall").init()
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local json = require("luci.jsonc")
+local util = require("luci.util")
+local nw = require("luci.model.network").init()
+local fw = require("luci.model.firewall").init()
+local dump = util.ubus("network.interface", "dump", {})
local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
-local uplink = uci.get("network", trmiface) or ""
-local parse = json.parse(fs.readfile(trminput) or "")
+local uplink = uci.get("network", trmiface) or ""
+local parse = json.parse(fs.readfile(trminput) or "")
m = Map("travelmate", translate("Travelmate"),
translate("Configuration of the travelmate package to to enable travel router functionality. ")
@@ -22,26 +24,24 @@ function m.on_after_commit(self)
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
-s = m:section(NamedSection, "global", "travelmate")
-
-- Interface Wizard
if uplink == "" then
- dv = s:option(DummyValue, "", translate("Interface Wizard"))
- dv.template = "cbi/nullsection"
+ ds = m:section(NamedSection, "global", "travelmate", translate("Interface Wizard"))
- o = s:option(Value, "", translate("Uplink interface"))
+ o = ds:option(Value, "", translate("Uplink interface"))
o.datatype = "and(uciname,rangelength(3,15))"
o.default = trmiface
o.rmempty = false
- btn = s:option(Button, "trm_iface", translate("Create Uplink Interface"),
+ btn = ds:option(Button, "trm_iface", translate("Create Uplink Interface"),
translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
.. translate("add it to the wan zone of the firewall. This step has only to be done once."))
btn.inputtitle = translate("Add Interface")
btn.inputstyle = "apply"
btn.disabled = false
- function btn.write(self, section, value)
+
+ function btn.write(self, section)
local iface = o:formvalue(section)
if iface then
uci:set("travelmate", section, "trm_iface", iface)
@@ -67,6 +67,8 @@ end
-- Main travelmate options
+s = m:section(NamedSection, "global", "travelmate")
+
o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
o1.default = o1.disabled
o1.rmempty = false
@@ -76,19 +78,16 @@ o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
o2.default = o2.enabled
o2.rmempty = false
-btn = s:option(Button, "", translate("Manual Rescan"))
-btn:depends("trm_automatic", "")
-btn.inputtitle = translate("Rescan")
-btn.inputstyle = "find"
-btn.disabled = false
-function btn.write()
- luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+o3 = s:option(ListValue, "trm_iface", translate("Uplink / Trigger interface"),
+ translate("Name of the used uplink interface."))
+if dump then
+ local i, v
+ for i, v in ipairs(dump.interface) do
+ if v.interface ~= "loopback" and v.interface ~= "lan" then
+ o3:value(v.interface)
+ end
+ end
end
-
-o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
- translate("Name of the uplink interface that triggers travelmate processing in 'manual' mode."))
-o3.datatype = "and(uciname,rangelength(3,15))"
o3.default = trmiface
o3.rmempty = false
@@ -98,16 +97,23 @@ o4.default = 2
o4.datatype = "range(1,90)"
o4.rmempty = false
-o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
-o5.default = o5.disabled
-o5.rmempty = false
+btn = s:option(Button, "", translate("Manual Rescan"),
+ translate("Force a manual uplink rescan / reconnect in 'trigger' mode."))
+btn:depends("trm_automatic", "")
+btn.inputtitle = translate("Rescan")
+btn.inputstyle = "find"
+btn.disabled = false
+
+function btn.write()
+ luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+end
-- Runtime information
-ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
-ds.template = "cbi/nullsection"
+ds = m:section(NamedSection, "global", "travelmate", translate("Runtime Information"))
-dv1 = s:option(DummyValue, "status", translate("Online Status"))
+dv1 = ds:option(DummyValue, "status", translate("Online Status"))
dv1.template = "travelmate/runtime"
if parse == nil then
dv1.value = translate("n/a")
@@ -117,7 +123,7 @@ else
dv1.value = translate("not connected")
end
-dv2 = s:option(DummyValue, "travelmate_version", translate("Travelmate version"))
+dv2 = ds:option(DummyValue, "travelmate_version", translate("Travelmate version"))
dv2.template = "travelmate/runtime"
if parse ~= nil then
dv2.value = parse.data.travelmate_version or translate("n/a")
@@ -125,15 +131,15 @@ else
dv2.value = translate("n/a")
end
-dv3 = s:option(DummyValue, "station_ssid", translate("Station SSID"))
+dv3 = ds:option(DummyValue, "station_id", translate("Station ID (SSID/BSSID)"))
dv3.template = "travelmate/runtime"
if parse ~= nil then
- dv3.value = parse.data.station_ssid or translate("n/a")
+ dv3.value = parse.data.station_id or translate("n/a")
else
dv3.value = translate("n/a")
end
-dv4 = s:option(DummyValue, "station_interface", translate("Station Interface"))
+dv4 = ds:option(DummyValue, "station_interface", translate("Station Interface"))
dv4.template = "travelmate/runtime"
if parse ~= nil then
dv4.value = parse.data.station_interface or translate("n/a")
@@ -141,7 +147,7 @@ else
dv4.value = translate("n/a")
end
-dv5 = s:option(DummyValue, "station_radio", translate("Station Radio"))
+dv5 = ds:option(DummyValue, "station_radio", translate("Station Radio"))
dv5.template = "travelmate/runtime"
if parse ~= nil then
dv5.value = parse.data.station_radio or translate("n/a")
@@ -149,7 +155,7 @@ else
dv5.value = translate("n/a")
end
-dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
+dv6 = ds:option(DummyValue, "last_rundate", translate("Last rundate"))
dv6.template = "travelmate/runtime"
if parse ~= nil then
dv6.value = parse.data.last_rundate or translate("n/a")
@@ -162,28 +168,32 @@ end
e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
translate("Options for further tweaking in case the defaults are not suitable for you."))
-e1 = e:option(Value, "trm_radio", translate("Radio selection"),
+e1 = e:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
+e1.default = e1.disabled
+e1.rmempty = false
+
+e2 = e:option(Value, "trm_radio", translate("Radio selection"),
translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'."))
-e1.datatype = "and(uciname,rangelength(6,6))"
-e1.rmempty = true
+e2.datatype = "and(uciname,rangelength(6,6))"
+e2.rmempty = true
-e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
+e3 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
translate("How many times should travelmate try to connect to an Uplink. ")
.. translate("To disable this feature set it to '0' which means unlimited retries."))
-e2.default = 3
-e2.datatype = "range(0,30)"
-e2.rmempty = false
+e3.default = 3
+e3.datatype = "range(0,30)"
+e3.rmempty = false
-e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
+e4 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
translate("How long should travelmate wait for a successful wlan interface reload."))
-e3.default = 30
-e3.datatype = "range(5,60)"
-e3.rmempty = false
+e4.default = 30
+e4.datatype = "range(5,60)"
+e4.rmempty = false
-e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
+e5 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
translate("Timeout in seconds between retries in 'automatic' mode."))
-e4.default = 60
-e4.datatype = "range(60,300)"
-e4.rmempty = false
+e5.default = 60
+e5.datatype = "range(60,300)"
+e5.rmempty = false
return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
index dcfa17c8b5..1e8bd7ec68 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
@@ -1,10 +1,12 @@
--- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
-local fs = require("nixio.fs")
-local uci = require("luci.model.uci").cursor()
-local http = require("luci.http")
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
+local encr_psk = {"psk", "psk2", "psk-mixed"}
+local encr_wpa = {"wpa", "wpa2", "wpa-mixed"}
m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
m.submit = translate("Save")
@@ -18,6 +20,7 @@ end
m.hidden = {
device = http.formvalue("device"),
ssid = http.formvalue("ssid"),
+ bssid = http.formvalue("bssid"),
wep = http.formvalue("wep"),
wpa_suites = http.formvalue("wpa_suites"),
wpa_version = http.formvalue("wpa_version")
@@ -25,23 +28,104 @@ m.hidden = {
if m.hidden.ssid ~= "" then
wssid = m:field(Value, "ssid", translate("SSID"))
- wssid.default = m.hidden.ssid
+ wssid.datatype = "rangelength(1,32)"
+ wssid.default = m.hidden.ssid or ""
else
wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
end
+nobssid = m:field(Flag, "no_bssid", translate("Ignore BSSID"))
+nobssid.default = nobssid.enabled
+
+bssid = m:field(Value, "bssid", translate("BSSID"))
+bssid:depends("no_bssid", 0)
+bssid.datatype = "macaddr"
+bssid.default = m.hidden.bssid or ""
+
if (tonumber(m.hidden.wep) or 0) == 1 then
- wkey = m:field(Value, "key", translate("WEP passphrase"),
- translate("Specify the secret encryption key here."))
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wep", "WEP")
+ encr:value("wep+open", "WEP Open System")
+ encr:value("wep+mixed", "WEP mixed")
+ encr:value("wep+shared", "WEP Shared Key")
+ encr.default = "wep+open"
+
+ wkey = m:field(Value, "key", translate("WEP-Passphrase"))
wkey.password = true
wkey.datatype = "wepkey"
-elseif (tonumber(m.hidden.wpa_version) or 0) > 0 and
- (m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2")
-then
- wkey = m:field(Value, "key", translate("WPA passphrase"),
- translate("Specify the secret encryption key here."))
- wkey.password = true
- wkey.datatype = "wpakey"
+elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
+ if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("psk2", "WPA2 PSK")
+ encr.default = encr_psk[tonumber(m.hidden.wpa_version)] or "psk2"
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = "auto"
+
+ wkey = m:field(Value, "key", translate("WPA-Passphrase"))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+ elseif m.hidden.wpa_suites == "802.1X" then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wpa", "WPA Enterprise")
+ encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
+ encr:value("wpa2", "WPA2 Enterprise")
+ encr.default = encr_wpa[tonumber(m.hidden.wpa_version)] or "wpa2"
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = "auto"
+
+ eaptype = m:field(ListValue, "eap_type", translate("EAP-Method"))
+ eaptype:value("tls", "TLS")
+ eaptype:value("ttls", "TTLS")
+ eaptype:value("peap", "PEAP")
+ eaptype:value("fast", "FAST")
+ eaptype.default = "peap"
+
+ authentication = m:field(ListValue, "auth", translate("Authentication"))
+ authentication:value("PAP")
+ authentication:value("CHAP")
+ authentication:value("MSCHAP")
+ authentication:value("MSCHAPV2")
+ authentication:value("EAP-GTC")
+ authentication:value("EAP-MD5")
+ authentication:value("EAP-MSCHAPV2")
+ authentication:value("EAP-TLS")
+ authentication.default = "EAP-MSCHAPV2"
+
+ ident = m:field(Value, "identity", translate("Identity"))
+
+ wkey = m:field(Value, "password", translate("Password"))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+
+ cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
+ cacert.rmempty = true
+
+ clientcert = m:field(Value, "client_cert", translate("Path to Client-Certificate"))
+ clientcert:depends("eap_type","tls")
+ clientcert.rmempty = true
+
+ privkey = m:field(Value, "priv_key", translate("Path to Private Key"))
+ privkey:depends("eap_type","tls")
+ privkey.rmempty = true
+
+ privkeypwd = m:field(Value, "priv_key_pwd", translate("Password of Private Key"))
+ privkeypwd:depends("eap_type","tls")
+ privkeypwd.datatype = "wpakey"
+ privkeypwd.password = true
+ privkeypwd.rmempty = true
+ end
end
function wssid.write(self, section, value)
@@ -50,15 +134,36 @@ function wssid.write(self, section, value)
network = trmiface,
device = m.hidden.device,
ssid = wssid:formvalue(section),
+ bssid = bssid:formvalue(section),
disabled = "1"
})
+
if (tonumber(m.hidden.wep) or 0) == 1 then
- uci:set("wireless", newsection, "encryption", "wep-open")
- uci:set("wireless", newsection, "key", "1")
- uci:set("wireless", newsection, "key1", wkey:formvalue(section))
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
- uci:set("wireless", newsection, "encryption", "psk2")
- uci:set("wireless", newsection, "key", wkey:formvalue(section))
+ if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
+ elseif m.hidden.wpa_suites == "802.1X" then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", newsection, "eap_type", eaptype:formvalue(section))
+ uci:set("wireless", newsection, "auth", authentication:formvalue(section))
+ uci:set("wireless", newsection, "identity", ident:formvalue(section) or "")
+ uci:set("wireless", newsection, "password", wkey:formvalue(section) or "")
+ uci:set("wireless", newsection, "ca_cert", cacert:formvalue(section) or "")
+ uci:set("wireless", newsection, "client_cert", clientcert:formvalue(section) or "")
+ uci:set("wireless", newsection, "priv_key", privkey:formvalue(section) or "")
+ uci:set("wireless", newsection, "priv_key_pwd", privkeypwd:formvalue(section) or "")
+ end
else
uci:set("wireless", newsection, "encryption", "none")
end
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
index c60ff22c4d..b8e0f11b3a 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
@@ -1,8 +1,8 @@
-- Copyright 2017 Dirk Brenken (dev@brenken.org)
-- This is free software, licensed under the Apache License, Version 2.0
-local fs = require("nixio.fs")
-local uci = require("luci.model.uci").cursor()
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
local http = require("luci.http")
m = SimpleForm("edit", translate("Edit Wireless Uplink Configuration"))
@@ -21,21 +21,108 @@ m.hidden = {
local s = uci:get_all("wireless", m.hidden.cfg)
if s ~= nil then
wssid = m:field(Value, "ssid", translate("SSID"))
- wssid.default = s.ssid
wssid.datatype = "rangelength(1,32)"
- if s.encryption and s.key then
- wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
- elseif s.encryption and s.password then
- wkey = m:field(Value, "password", translatef("Passphrase (%s)", s.encryption))
+ wssid.default = s.ssid or ""
+
+ bssid = m:field(Value, "bssid", translate("BSSID"))
+ bssid.datatype = "macaddr"
+ bssid.default = s.bssid or ""
+
+ s.cipher = "auto"
+ if string.match(s.encryption, '\+') and not string.match(s.encryption, '^wep') then
+ s.pos = string.find(s.encryption, '\+')
+ s.cipher = string.sub(s.encryption, s.pos + 1)
+ s.encryption = string.sub(s.encryption, 0, s.pos - 1)
end
- if s.encryption and (s.key or s.password) then
- wkey.password = true
- wkey.default = s.key or s.password
- if s.encryption == "wep" then
+
+ if s.encryption and s.encryption ~= "none" then
+ if string.match(s.encryption, '^wep') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wep", "WEP")
+ encr:value("wep+open", "WEP Open System")
+ encr:value("wep+mixed", "WEP mixed")
+ encr:value("wep+shared", "WEP Shared Key")
+ encr.default = s.encryption
+
+ wkey = m:field(Value, "key", translate("Passphrase"))
wkey.datatype = "wepkey"
- else
+ elseif string.match(s.encryption, '^psk') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("psk2", "WPA2 PSK")
+ encr.default = s.encryption
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = s.cipher
+
+ wkey = m:field(Value, "key", translate("Passphrase"))
+ wkey.datatype = "wpakey"
+ elseif string.match(s.encryption, '^wpa') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wpa", "WPA Enterprise")
+ encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
+ encr:value("wpa2", "WPA2 Enterprise")
+ encr.default = s.encryption
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = s.cipher
+
+ eaptype = m:field(ListValue, "eap_type", translate("EAP-Method"))
+ eaptype:value("tls", "TLS")
+ eaptype:value("ttls", "TTLS")
+ eaptype:value("peap", "PEAP")
+ eaptype:value("fast", "FAST")
+ eaptype.default = s.eap_type or "peap"
+
+ authentication = m:field(ListValue, "auth", translate("Authentication"))
+ authentication:value("PAP")
+ authentication:value("CHAP")
+ authentication:value("MSCHAP")
+ authentication:value("MSCHAPV2")
+ authentication:value("EAP-GTC")
+ authentication:value("EAP-MD5")
+ authentication:value("EAP-MSCHAPV2")
+ authentication:value("EAP-TLS")
+ authentication.default = s.auth or "EAP-MSCHAPV2"
+
+ ident = m:field(Value, "identity", translate("Identity"))
+ ident.default = s.identity or ""
+
+ wkey = m:field(Value, "password", translate("Passphrase"))
wkey.datatype = "wpakey"
+
+ cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
+ cacert.rmempty = true
+ cacert.default = s.ca_cert or ""
+
+ clientcert = m:field(Value, "client_cert", translate("Path to Client-Certificate"))
+ clientcert:depends("eap_type","tls")
+ clientcert.rmempty = true
+ clientcert.default = s.client_cert or ""
+
+ privkey = m:field(Value, "priv_key", translate("Path to Private Key"))
+ privkey:depends("eap_type","tls")
+ privkey.rmempty = true
+ privkey.default = s.priv_key or ""
+
+ privkeypwd = m:field(Value, "priv_key_pwd", translate("Password of Private Key"))
+ privkeypwd:depends("eap_type","tls")
+ privkeypwd.datatype = "wpakey"
+ privkeypwd.password = true
+ privkeypwd.rmempty = true
+ privkeypwd.default = s.priv_key_pwd or ""
end
+ wkey.password = true
+ wkey.default = s.key or s.password
end
else
m.on_cancel()
@@ -43,10 +130,33 @@ end
function wssid.write(self, section, value)
uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
- if s.encryption and s.key then
- uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section))
- elseif s.encryption and s.password then
- uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "bssid", bssid:formvalue(section))
+ if s.encryption and s.encryption ~= "none" then
+ if string.match(s.encryption, '^wep') then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
+ elseif string.match(s.encryption, '^psk') then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
+ elseif string.match(s.encryption, '^wpa') then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", m.hidden.cfg, "eap_type", eaptype:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "auth", authentication:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "identity", ident:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "ca_cert", cacert:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "client_cert", clientcert:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "priv_key", privkey:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "priv_key_pwd", privkeypwd:formvalue(section) or "")
+ end
end
uci:save("wireless")
uci:commit("wireless")
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
index 53493a18fb..2233a15e31 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
@@ -6,5 +6,8 @@
font-size: 12px;
font-family: monospace;
resize: none;
+ white-space: pre;
+ overflow-wrap: normal;
+ overflow-x: scroll;
}
</style>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
index 7f6ff7776d..6cbeaffde6 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
@@ -1,5 +1,5 @@
<%#
-Copyright 2017 Dirk Brenken (dev@brenken.org)
+Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
This is free software, licensed under the Apache License, Version 2.0
-%>
@@ -12,4 +12,9 @@ This is free software, licensed under the Apache License, Version 2.0
</fieldset>
</div>
+<script type="text/javascript">
+ var textarea = document.getElementById('logread_id');
+ textarea.scrollTop = textarea.scrollHeight;
+</script>
+
<%+footer%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
index cbb6c189b8..11c36d427c 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
@@ -4,8 +4,8 @@ This is free software, licensed under the Apache License, Version 2.0
-%>
<%-
- local write = io.write
- local uci = require("luci.model.uci").cursor()
+ local write = io.write
+ local uci = require("luci.model.uci").cursor()
local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
-%>
@@ -22,6 +22,7 @@ This is free software, licensed under the Apache License, Version 2.0
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell" style="text-align:left"><%:Device%></th>
<th class="cbi-section-table-cell" style="text-align:left"><%:SSID%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:BSSID%></th>
<th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
<th class="cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></th>
</tr>
@@ -30,9 +31,10 @@ This is free software, licensed under the Apache License, Version 2.0
local iface = s.network or ""
if iface == trmiface then
local section = s['.name'] or ""
- local device = s.device or ""
- local ssid = s.ssid or ""
- local encryption = s.encryption or ""
+ local device = s.device or "-"
+ local ssid = s.ssid or "-"
+ local bssid = s.bssid or "-"
+ local encryption = s.encryption or "-"
local disabled = s.disabled or ""
local style = "color:#000000"
if disabled == "0" then
@@ -42,14 +44,15 @@ This is free software, licensed under the Apache License, Version 2.0
<tr class="cbi-section-table-row cbi-rowstyle-1" style="<%=style%>">
<td style="text-align:left"><%=device%></td>
<td style="text-align:left"><%=ssid%></td>
+ <td style="text-align:left"><%=bssid%></td>
<td style="text-align:left"><%=encryption%></td>
<td class="cbi-value-field" style="width:70px;text-align:right">
- <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
- <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
+ <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
+ <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
</td>
<td class="cbi-value-field" style="width:150px;text-align:right">
- <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/>
- <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
+ <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/>
+ <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
</td>
</tr>
<%
@@ -63,7 +66,7 @@ This is free software, licensed under the Apache License, Version 2.0
uci:foreach("wireless", "wifi-device", function(s)
local device = s[".name"]
%>
- <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+ <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post">
<input type="hidden" name="device" value="<%=device%>"/>
<input type="hidden" name="token" value="<%=token%>"/>
<input type="submit" class="cbi-button cbi-button-find" title="<%:Find and join network on %><%=device%>" value="<%:Scan %><%=device%>"/>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
index af90c18d23..a8f63a17e2 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
@@ -7,7 +7,8 @@ This is free software, licensed under the Apache License, Version 2.0
local sys = require("luci.sys")
local utl = require("luci.util")
local dev = luci.http.formvalue("device")
- local iw = luci.sys.wifi.getiwinfo(dev)
+ local iw = luci.sys.wifi.getiwinfo(dev)
+ local wpa_label = {translate("WPA"), translate("WPA2"), translate("WPA/WPA2")}
if not iw then
luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
@@ -17,7 +18,7 @@ This is free software, licensed under the Apache License, Version 2.0
if info.wep == true then
return translate("WEP")
elseif info.wpa > 0 then
- return translate("WPA / WPA2")
+ return "%s (%s/%s)" %{wpa_label[info.wpa], table.concat(info.auth_suites), table.concat(info.group_ciphers)}
elseif info.enabled then
return translate("Unknown")
else
@@ -28,7 +29,7 @@ This is free software, licensed under the Apache License, Version 2.0
function percent_wifi_signal(info)
local qc = info.quality or 0
local qm = info.quality_max or 0
- if info.ssid and qc > 0 and qm > 0 then
+ if info.bssid and qc > 0 and qm > 0 then
return math.floor((100 / qm) * qc)
else
return 0
@@ -44,13 +45,17 @@ This is free software, licensed under the Apache License, Version 2.0
<table class="cbi-section-table" style="empty-cells:hide">
<tr class="cbi-section-table-titles">
<th class="cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink BSSID%></th>
<th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
<th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
</tr>
<% for i, net in ipairs(iw.scanlist or { }) do %>
<tr class="cbi-section-table-row cbi-rowstyle-1">
<td class="cbi-value-field" style="text-align:left">
- <strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>
+ <%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%>
+ </td>
+ <td class="cbi-value-field" style="text-align:left">
+ <%=net.bssid and utl.pcdata(net.bssid)%>
</td>
<td class="cbi-value-field" style="text-align:left">
<%=format_wifi_encryption(net.encryption)%>
@@ -59,15 +64,16 @@ This is free software, licensed under the Apache License, Version 2.0
<%=percent_wifi_signal(net)%> %
</td>
<td class="cbi-value-field" style="width:100px;text-align:right">
- <form class="inline" action="<%=url('admin/services/travelmate/wifiadd')%>" method="post">
+ <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiadd')%>" method="post">
<input type="hidden" name="token" value="<%=token%>"/>
<input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
<input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>"/>
+ <input type="hidden" name="bssid" value="<%=utl.pcdata(net.bssid)%>"/>
<input type="hidden" name="wep" value="<%=net.encryption.wep and 1 or 0%>"/>
<% if net.encryption.wpa then %>
- <input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/>
- <% for _, v in ipairs(net.encryption.auth_suites) do %><input type="hidden" name="wpa_suites" value="<%=v%>"/>
- <% end; end %>
+ <input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/>
+ <% for _, v in ipairs(net.encryption.auth_suites) do %><input type="hidden" name="wpa_suites" value="<%=v%>"/><% end %>
+ <% end %>
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Add Uplink%>"/>
</form>
</td>
@@ -76,12 +82,12 @@ This is free software, licensed under the Apache License, Version 2.0
</table>
</fieldset>
<div class="cbi-page-actions right">
- <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+ <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post">
<input type="hidden" name="token" value="<%=token%>"/>
<input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
<input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>"/>
</form>
- <form class="inline" action="<%=url('admin/services/travelmate/stations')%>" method="post">
+ <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/stations')%>" method="post">
<input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/>
</form>
</div>
diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index febdbd5833..0e497c1caa 100644
--- a/applications/luci-app-travelmate/po/ja/travelmate.po
+++ b/applications/luci-app-travelmate/po/ja/travelmate.po
@@ -7,7 +7,7 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.3\n"
+"X-Generator: Poedit 2.0.5\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ja\n"
@@ -31,9 +31,21 @@ msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間
msgid "Advanced"
msgstr "詳細設定"
+msgid "Authentication"
+msgstr "認証"
+
+msgid "Automatic"
+msgstr "自動"
+
+msgid "BSSID"
+msgstr "BSSID"
+
msgid "Back to overview"
msgstr "概要へ戻る"
+msgid "Cipher"
+msgstr "暗号化方式"
+
msgid ""
"Configuration of the travelmate package to to enable travel router "
"functionality."
@@ -61,6 +73,9 @@ msgstr "このアップリンクを削除"
msgid "Device"
msgstr "デバイス"
+msgid "EAP-Method"
+msgstr "EAP メソッド"
+
msgid "Edit"
msgstr "編集"
@@ -107,6 +122,19 @@ msgstr ""
"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a> を"
"確認してください。"
+msgid "Force CCMP (AES)"
+msgstr "CCMP (AES)"
+
+msgid "Force TKIP"
+msgstr "TKIP"
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr "TKIP と CCMP (AES)"
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+"'trigger' モード時に、手動でアップリンクの再スキャンと再接続を行います。"
+
msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
"無線LAN インターフェースのリロードが成功するまでの、Travelmate の待機時間で"
@@ -115,6 +143,12 @@ msgstr ""
msgid "How many times should travelmate try to connect to an Uplink."
msgstr "Travelmate がアップリンクへの接続を試行する回数です。"
+msgid "Identity"
+msgstr "ID"
+
+msgid "Ignore BSSID"
+msgstr ""
+
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
@@ -143,12 +177,8 @@ msgstr "下へ"
msgid "Move up"
msgstr "上へ"
-msgid ""
-"Name of the uplink interface that triggers travelmate processing in 'manual' "
-"mode."
-msgstr ""
-"'manual' モード時に Travelmate の処理のトリガーとなる、アップリンク インター"
-"フェースの名前です。"
+msgid "Name of the used uplink interface."
+msgstr "使用されるアップリンク インターフェースの名前です。"
msgid "Online Status"
msgstr "オンライン ステータス"
@@ -166,8 +196,23 @@ msgstr "実行間隔"
msgid "Overview"
msgstr "概要"
-msgid "Passphrase (%s)"
-msgstr "暗号フレーズ (%s)"
+msgid "Passphrase"
+msgstr "パスフレーズ"
+
+msgid "Password"
+msgstr "パスワード"
+
+msgid "Password of Private Key"
+msgstr "秘密鍵のパスワード"
+
+msgid "Path to CA-Certificate"
+msgstr "CA 証明書へのパス"
+
+msgid "Path to Client-Certificate"
+msgstr "クライアント証明書へのパス"
+
+msgid "Path to Private Key"
+msgstr "秘密鍵へのパス"
msgid ""
"Provides an overview of all configured uplinks for the travelmate interface "
@@ -191,7 +236,7 @@ msgstr "再スキャン"
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
-msgid "Runtime information"
+msgid "Runtime Information"
msgstr "実行情報"
msgid "SSID"
@@ -209,8 +254,8 @@ msgstr "スキャン:"
msgid "Signal strength"
msgstr "信号強度"
-msgid "Specify the secret encryption key here."
-msgstr "暗号キーを設定します。"
+msgid "Station ID (SSID/BSSID)"
+msgstr "ステーション ID (SSID / BSSID)"
msgid "Station Interface"
msgstr "ステーション インターフェース"
@@ -218,9 +263,6 @@ msgstr "ステーション インターフェース"
msgid "Station Radio"
msgstr "ステーション電波"
-msgid "Station SSID"
-msgstr "ステーション SSID"
-
msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
@@ -281,6 +323,9 @@ msgstr "不明"
msgid "Uplink / Trigger interface"
msgstr "アップリンク / トリガー インターフェース"
+msgid "Uplink BSSID"
+msgstr "アップリンク BSSID"
+
msgid "Uplink SSID"
msgstr "アップリンク SSID"
@@ -293,14 +338,20 @@ msgstr "ログファイルの確認"
msgid "WEP"
msgstr "WEP"
-msgid "WEP passphrase"
-msgstr "WEP 暗号キー"
+msgid "WEP-Passphrase"
+msgstr "WEP パスフレーズ"
+
+msgid "WPA"
+msgstr "WPA"
+
+msgid "WPA-Passphrase"
+msgstr "WPA パスフレーズ"
-msgid "WPA / WPA2"
-msgstr "WPA / WPA2"
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
-msgid "WPA passphrase"
-msgstr "WPA 暗号キー"
+msgid "WPA2"
+msgstr "WPA2"
msgid "Wireless Scan"
msgstr "無線スキャン"
diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po
index 41fab70149..c4e9b9852d 100644
--- a/applications/luci-app-travelmate/po/pt-br/travelmate.po
+++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po
@@ -31,9 +31,21 @@ msgstr ""
msgid "Advanced"
msgstr ""
+msgid "Authentication"
+msgstr ""
+
+msgid "Automatic"
+msgstr ""
+
+msgid "BSSID"
+msgstr ""
+
msgid "Back to overview"
msgstr ""
+msgid "Cipher"
+msgstr ""
+
msgid ""
"Configuration of the travelmate package to to enable travel router "
"functionality."
@@ -58,6 +70,9 @@ msgstr ""
msgid "Device"
msgstr ""
+msgid "EAP-Method"
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -102,12 +117,30 @@ msgid ""
"documentation</a>"
msgstr ""
+msgid "Force CCMP (AES)"
+msgstr ""
+
+msgid "Force TKIP"
+msgstr ""
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr ""
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+
msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
msgid "How many times should travelmate try to connect to an Uplink."
msgstr ""
+msgid "Identity"
+msgstr ""
+
+msgid "Ignore BSSID"
+msgstr ""
+
msgid "Input file not found, please check your configuration."
msgstr ""
@@ -134,9 +167,7 @@ msgstr ""
msgid "Move up"
msgstr ""
-msgid ""
-"Name of the uplink interface that triggers travelmate processing in 'manual' "
-"mode."
+msgid "Name of the used uplink interface."
msgstr ""
msgid "Online Status"
@@ -155,7 +186,22 @@ msgstr ""
msgid "Overview"
msgstr ""
-msgid "Passphrase (%s)"
+msgid "Passphrase"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password of Private Key"
+msgstr ""
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
+msgid "Path to Client-Certificate"
+msgstr ""
+
+msgid "Path to Private Key"
msgstr ""
msgid ""
@@ -176,7 +222,7 @@ msgstr ""
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
-msgid "Runtime information"
+msgid "Runtime Information"
msgstr ""
msgid "SSID"
@@ -194,7 +240,7 @@ msgstr ""
msgid "Signal strength"
msgstr ""
-msgid "Specify the secret encryption key here."
+msgid "Station ID (SSID/BSSID)"
msgstr ""
msgid "Station Interface"
@@ -203,9 +249,6 @@ msgstr ""
msgid "Station Radio"
msgstr ""
-msgid "Station SSID"
-msgstr ""
-
msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
@@ -255,6 +298,9 @@ msgstr ""
msgid "Uplink / Trigger interface"
msgstr ""
+msgid "Uplink BSSID"
+msgstr ""
+
msgid "Uplink SSID"
msgstr ""
@@ -267,13 +313,19 @@ msgstr ""
msgid "WEP"
msgstr ""
-msgid "WEP passphrase"
+msgid "WEP-Passphrase"
+msgstr ""
+
+msgid "WPA"
+msgstr ""
+
+msgid "WPA-Passphrase"
msgstr ""
-msgid "WPA / WPA2"
+msgid "WPA/WPA2"
msgstr ""
-msgid "WPA passphrase"
+msgid "WPA2"
msgstr ""
msgid "Wireless Scan"
diff --git a/applications/luci-app-travelmate/po/ru/travelmate.po b/applications/luci-app-travelmate/po/ru/travelmate.po
new file mode 100644
index 0000000000..3e8429c5b1
--- /dev/null
+++ b/applications/luci-app-travelmate/po/ru/travelmate.po
@@ -0,0 +1,382 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: travelmate\n"
+"POT-Creation-Date: 2017-12-07 21:00+0300\n"
+"PO-Revision-Date: 2018-01-07 19:15+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Actions"
+msgstr "Действия"
+
+msgid "Add Interface"
+msgstr "Добавить интерфейс"
+
+msgid "Add Uplink"
+msgstr "Подключение к сети"
+
+msgid "Add Wireless Uplink Configuration"
+msgstr "Добавить настройку беспроводной сети"
+
+msgid ""
+"Additional trigger delay in seconds before travelmate processing begins."
+msgstr "Дополнительная задержка в секундах до запуска TravelMate."
+
+msgid "Advanced"
+msgstr "Дополнительно"
+
+msgid "Authentication"
+msgstr "Аутентификация"
+
+msgid "Automatic"
+msgstr "Автоматически"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Back to overview"
+msgstr "Вернуться в главное меню"
+
+msgid "Cipher"
+msgstr "Шифрование"
+
+msgid ""
+"Configuration of the travelmate package to to enable travel router "
+"functionality."
+msgstr "Настройка утилиты TravelMate - помощника путешественника. "
+
+msgid "Connection Limit"
+msgstr "Ограничение соединений"
+
+msgid "Create Uplink Interface"
+msgstr "Создать интерфейс сети"
+
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+"Создать новый wwan интерфейс беспроводной сети, настроить его на "
+"использование с DHCP и"
+
+msgid "Delete"
+msgstr "Удалить"
+
+msgid "Delete this Uplink"
+msgstr "Удалить сеть"
+
+msgid "Device"
+msgstr "Устройство"
+
+msgid "EAP-Method"
+msgstr "Метод EAP"
+
+msgid "Edit"
+msgstr "Редактировать"
+
+msgid "Edit Firewall Configuration"
+msgstr "Редактировать настройки фаервола"
+
+msgid "Edit Network Configuration"
+msgstr "Редактировать настройки сети"
+
+msgid "Edit Travelmate Configuration"
+msgstr "Редактировать настройки Travelmate"
+
+msgid "Edit Wireless Configuration"
+msgstr "Редактировать настройки беспроводного соединения"
+
+msgid "Edit Wireless Uplink Configuration"
+msgstr "Редактировать настройки беспроводной сети"
+
+msgid "Edit this Uplink"
+msgstr "Редактировать настройки сети"
+
+msgid "Enable 'automatic' mode"
+msgstr "Включить режим 'автоматически'"
+
+msgid "Enable travelmate"
+msgstr "Включить Travelmate"
+
+msgid "Enable verbose debug logging"
+msgstr "Включить подробное ведение журнала отладки"
+
+msgid "Encryption"
+msgstr "Шифрование"
+
+msgid "Extra options"
+msgstr "Дополнительные настройки"
+
+msgid "Find and join network on"
+msgstr "Найти сеть и подключится к ней"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Для получения дополнительной информации <a href=\"%s\" target=\"_blank\"> "
+"смотрите онлайн документацию</a>."
+
+msgid "Force CCMP (AES)"
+msgstr "Назначить CCMP (AES)"
+
+msgid "Force TKIP"
+msgstr "Назначить TKIP"
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr "Назначить TKIP и CCMP (AES)"
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+"Назначить ручное повторное сканирование / повторное подключение в режиме "
+"'ручной'."
+
+msgid "How long should travelmate wait for a successful wlan interface reload."
+msgstr ""
+"Временная задержка TravelMate неоходимая для полной перезагрузки wlan "
+"интерфейса."
+
+msgid "How many times should travelmate try to connect to an Uplink."
+msgstr "Сколько раз TravelMate должен пытаться подключиться к сети. "
+
+msgid "Identity"
+msgstr "Идентификация EAP"
+
+msgid "Ignore BSSID"
+msgstr "Игнорировать BSSID"
+
+msgid "Input file not found, please check your configuration."
+msgstr "Входной файл не найден, проверьте настройки."
+
+msgid "Interface Timeout"
+msgstr "Временная задержка интерфейса"
+
+msgid "Interface Wizard"
+msgstr "Помощник настройки интерфейса"
+
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
+msgstr ""
+"Поддержка TravelMate в активном состоянии. Проверка состояния соединения "
+"каждые n секунд, т.е. доступность сети."
+
+msgid "Last rundate"
+msgstr "Дата последнего запуска"
+
+msgid "Manual Rescan"
+msgstr "Пересканировать вручную"
+
+msgid "Move down"
+msgstr "Двигаться вниз"
+
+msgid "Move up"
+msgstr "Двигаться вверх"
+
+msgid "Name of the used uplink interface."
+msgstr "Имя используемого интерфейса сети."
+
+msgid "Online Status"
+msgstr "Онлайн состояние"
+
+msgid "Open"
+msgstr "Открыть"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Возможные варианты детальной настройки, если значения по умолчанию не "
+"подходят для вас."
+
+msgid "Overall Timeout"
+msgstr "Общее время ожидания"
+
+msgid "Overview"
+msgstr "Главное меню"
+
+msgid "Passphrase"
+msgstr "Парольная фраза"
+
+msgid "Password"
+msgstr "Пароль"
+
+msgid "Password of Private Key"
+msgstr "Пароль к Личному Ключу"
+
+msgid "Path to CA-Certificate"
+msgstr "Путь к CA-Сертификатам"
+
+msgid "Path to Client-Certificate"
+msgstr "Путь к Client-Сертификатам"
+
+msgid "Path to Private Key"
+msgstr "Путь к личному ключу"
+
+msgid ""
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
+msgstr ""
+"Общие сведения обо всех настроенных сетевых соединениях интерфейса "
+"TravelMate (%s). Вы можете редактировать, удалять или переупорядочивать "
+"существующие сети или сканировать их. Используемое сетевое соединение "
+"подчеркнуто синим цветом."
+
+msgid "Radio selection"
+msgstr "Выбор Wi-Fi устройства"
+
+msgid "Repeat scan"
+msgstr "Повторить сканирование"
+
+msgid "Rescan"
+msgstr "Пересканировать"
+
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr "Выделить TravelMate-у конкретное Wi-Fi устройство, например 'radio0'."
+
+msgid "Runtime Information"
+msgstr "Информация о состоянии"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID (hidden)"
+msgstr "SSID (скрытый)"
+
+msgid "Save"
+msgstr "Сохранить"
+
+msgid "Scan"
+msgstr "Сканировать"
+
+msgid "Signal strength"
+msgstr "Мощность сигнала"
+
+msgid "Station ID (SSID/BSSID)"
+msgstr "ID (SSID/BSSID) клиента"
+
+msgid "Station Interface"
+msgstr "Интерфейс клиента"
+
+msgid "Station Radio"
+msgstr "Wi-Fi устройство клиента"
+
+msgid ""
+"This form allows you to modify the content of the main firewall "
+"configuration file (/etc/config/firewall)."
+msgstr ""
+"Страница настройки фаервола, изменение содержимого config файла настройки "
+"фаервола (/etc/config/firewall)."
+
+msgid ""
+"This form allows you to modify the content of the main network configuration "
+"file (/etc/config/network)."
+msgstr ""
+"Страница настройки сети, изменение содержимого config файла настройки сети (/"
+"etc/config/network)."
+
+msgid ""
+"This form allows you to modify the content of the main travelmate "
+"configuration file (/etc/config/travelmate)."
+msgstr ""
+"Страница настройки Travelmate, изменение содержимого config файла настройки "
+"Travelmate (/etc/config/travelmate)."
+
+msgid ""
+"This form allows you to modify the content of the main wireless "
+"configuration file (/etc/config/wireless)."
+msgstr ""
+"Страница настройки беспроводных соединений, изменение содержимого config "
+"файла настройки беспроводных сетей (/etc/config/wireless)."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for travelmate related "
+"messages only."
+msgstr ""
+"Страница просмотра системного журнала, показаны только события связанные с "
+"работой утилиты TravelMate."
+
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr ""
+"Время ожидания в секундах между повторными попытками соединения в режиме "
+"'автоматически'."
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
+msgstr ""
+"Чтобы отключить эту функцию, установите значение '0', что означает "
+"неограниченное количество попыток."
+
+msgid "Travelmate"
+msgstr "TravelMate"
+
+msgid "Travelmate Logfile"
+msgstr "Системный журнал TravelMate"
+
+msgid "Travelmate version"
+msgstr "Версия TravelMate"
+
+msgid "Trigger delay"
+msgstr "Задержка запуска"
+
+msgid "Unknown"
+msgstr "Неизвестно"
+
+msgid "Uplink / Trigger interface"
+msgstr "Сеть / Включить интерфейс"
+
+msgid "Uplink BSSID"
+msgstr "BSSID сети"
+
+msgid "Uplink SSID"
+msgstr "SSID сети"
+
+msgid "Uplink interface"
+msgstr "Интерфейс сети"
+
+msgid "View Logfile"
+msgstr "Просмотр системного журнала"
+
+msgid "WEP"
+msgstr "WEP"
+
+msgid "WEP-Passphrase"
+msgstr "Пароль WEP"
+
+msgid "WPA"
+msgstr "WPA"
+
+msgid "WPA-Passphrase"
+msgstr "Пароль WPA"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+msgid "Wireless Scan"
+msgstr "Сканирование беспроводных сетей"
+
+msgid "Wireless Stations"
+msgstr "Клиенты беспроводной сети"
+
+msgid ""
+"add it to the wan zone of the firewall. This step has only to be done once."
+msgstr "добавить в wan зону фаервола. Можно сделать только один раз."
+
+msgid "connected"
+msgstr "подключен"
+
+msgid "hidden"
+msgstr "скрытый"
+
+msgid "n/a"
+msgstr "нет данных"
+
+msgid "not connected"
+msgstr "не подключено"
diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot
index a9ceafe237..13e10dee8f 100644
--- a/applications/luci-app-travelmate/po/templates/travelmate.pot
+++ b/applications/luci-app-travelmate/po/templates/travelmate.pot
@@ -20,9 +20,21 @@ msgstr ""
msgid "Advanced"
msgstr ""
+msgid "Authentication"
+msgstr ""
+
+msgid "Automatic"
+msgstr ""
+
+msgid "BSSID"
+msgstr ""
+
msgid "Back to overview"
msgstr ""
+msgid "Cipher"
+msgstr ""
+
msgid ""
"Configuration of the travelmate package to to enable travel router "
"functionality."
@@ -47,6 +59,9 @@ msgstr ""
msgid "Device"
msgstr ""
+msgid "EAP-Method"
+msgstr ""
+
msgid "Edit"
msgstr ""
@@ -91,12 +106,30 @@ msgid ""
"documentation</a>"
msgstr ""
+msgid "Force CCMP (AES)"
+msgstr ""
+
+msgid "Force TKIP"
+msgstr ""
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr ""
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+
msgid "How long should travelmate wait for a successful wlan interface reload."
msgstr ""
msgid "How many times should travelmate try to connect to an Uplink."
msgstr ""
+msgid "Identity"
+msgstr ""
+
+msgid "Ignore BSSID"
+msgstr ""
+
msgid "Input file not found, please check your configuration."
msgstr ""
@@ -123,9 +156,7 @@ msgstr ""
msgid "Move up"
msgstr ""
-msgid ""
-"Name of the uplink interface that triggers travelmate processing in 'manual' "
-"mode."
+msgid "Name of the used uplink interface."
msgstr ""
msgid "Online Status"
@@ -144,7 +175,22 @@ msgstr ""
msgid "Overview"
msgstr ""
-msgid "Passphrase (%s)"
+msgid "Passphrase"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password of Private Key"
+msgstr ""
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
+msgid "Path to Client-Certificate"
+msgstr ""
+
+msgid "Path to Private Key"
msgstr ""
msgid ""
@@ -165,7 +211,7 @@ msgstr ""
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
msgstr ""
-msgid "Runtime information"
+msgid "Runtime Information"
msgstr ""
msgid "SSID"
@@ -183,7 +229,7 @@ msgstr ""
msgid "Signal strength"
msgstr ""
-msgid "Specify the secret encryption key here."
+msgid "Station ID (SSID/BSSID)"
msgstr ""
msgid "Station Interface"
@@ -192,9 +238,6 @@ msgstr ""
msgid "Station Radio"
msgstr ""
-msgid "Station SSID"
-msgstr ""
-
msgid ""
"This form allows you to modify the content of the main firewall "
"configuration file (/etc/config/firewall)."
@@ -244,6 +287,9 @@ msgstr ""
msgid "Uplink / Trigger interface"
msgstr ""
+msgid "Uplink BSSID"
+msgstr ""
+
msgid "Uplink SSID"
msgstr ""
@@ -256,13 +302,19 @@ msgstr ""
msgid "WEP"
msgstr ""
-msgid "WEP passphrase"
+msgid "WEP-Passphrase"
+msgstr ""
+
+msgid "WPA"
+msgstr ""
+
+msgid "WPA-Passphrase"
msgstr ""
-msgid "WPA / WPA2"
+msgid "WPA/WPA2"
msgstr ""
-msgid "WPA passphrase"
+msgid "WPA2"
msgstr ""
msgid "Wireless Scan"
diff --git a/applications/luci-app-uhttpd/po/ru/uhttpd.po b/applications/luci-app-uhttpd/po/ru/uhttpd.po
new file mode 100644
index 0000000000..cf9bc57ec4
--- /dev/null
+++ b/applications/luci-app-uhttpd/po/ru/uhttpd.po
@@ -0,0 +1,214 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: uhttpd\n"
+"POT-Creation-Date: 2017-12-06 22:30+0300\n"
+"PO-Revision-Date: 2018-01-07 19:05+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid ""
+"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)"
+msgstr ""
+"(/старый/путь=/новый/путь) или (просто /старый/путь становится /cgi-prefix/"
+"старый/путь)."
+
+msgid "404 Error"
+msgstr "Ошибка 404"
+
+msgid "A lightweight single-threaded HTTP(S) server"
+msgstr "Легкий однопоточный HTTP(S) сервер."
+
+msgid "Advanced Settings"
+msgstr "Дополнительные настройки"
+
+msgid "Aliases"
+msgstr "Псевдонимы (Aliases)"
+
+msgid "Base directory for files to be served"
+msgstr "Основная папка для файлов, которые будут обслуживаться сервером."
+
+msgid "Bind to specific interface:port (by specifying interface address"
+msgstr "Привязка к конкретному интерфейсу:порту."
+
+msgid "CGI filetype handler"
+msgstr "Интерпретатор файла CGI"
+
+msgid "CGI is disabled if not present."
+msgstr "CGI отключается, если он отсутствует."
+
+msgid "Config file (e.g. for credentials for Basic Auth)"
+msgstr "Config файл"
+
+msgid "Connection reuse"
+msgstr "Повторное использование соединения"
+
+msgid "Country"
+msgstr "Страна"
+
+msgid "Disable JSON-RPC authorization via ubus session API"
+msgstr "Отключение авторизации JSON-RPC через API в систему ubus"
+
+msgid "Do not follow symlinks outside document root"
+msgstr ""
+"Не следовать по символическим ссылкам вне корневого каталога документов"
+
+msgid "Do not generate directory listings."
+msgstr "Не создавать списки папок"
+
+msgid "Document root"
+msgstr "Основная папка"
+
+msgid "E.g specify with index.html and index.php when using PHP"
+msgstr "Например, укажите index.html и index.php если использовуется PHP."
+
+msgid "Embedded Lua interpreter is disabled if not present."
+msgstr "Встроенный интерпретатор Lua отключается, если скрипт отсутствует."
+
+msgid "Enable JSON-RPC Cross-Origin Resource Support"
+msgstr "Включение поддержки JSON-RPC разных источников"
+
+msgid "For settings primarily geared to serving more than the web UI"
+msgstr ""
+"Страница предназначена для настройки обслуживания, а не веб-интерфейса."
+
+msgid "Full Web Server Settings"
+msgstr "Полные настройки web сервера"
+
+msgid "Full real path to handler for Lua scripts"
+msgstr "Полный путь к интерпретатору скриптов Lua"
+
+msgid "General Settings"
+msgstr "Основные настройки"
+
+msgid "HTTP listeners (address:port)"
+msgstr "Слушать HTTP (адрес:порт)"
+
+msgid "HTTPS Certificate (DER Encoded)"
+msgstr "HTTPS сертификат (кодировка DER)"
+
+msgid "HTTPS Private Key (DER Encoded)"
+msgstr "HTTPS частный ключ (кодировка DER)"
+
+msgid "HTTPS listener (address:port)"
+msgstr "Слушать HTTPS (адрес:порт)"
+
+msgid "Ignore private IPs on public interface"
+msgstr "Игнорировать частный IPS на публичном интерфейсе"
+
+msgid "Index page(s)"
+msgstr "Страница(ы) индекса"
+
+msgid ""
+"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/"
+"usr/bin/php-cgi')"
+msgstr ""
+"Интерпретатор для сопоставления расширений файлов ('суффикс=обработчик', "
+"например: '.php=/usr/bin/php-cgi')."
+
+msgid "Length of key in bits"
+msgstr "Длина ключа в битах"
+
+msgid "Location"
+msgstr "Расположение"
+
+msgid "Maximum number of connections"
+msgstr "Максимальное количество соединений"
+
+msgid "Maximum number of script requests"
+msgstr "Максимальное количество запросов скрипта"
+
+msgid "Maximum wait time for Lua, CGI, or ubus execution"
+msgstr "Максимальное время ожидания для Lua, CGI, или выполнение ubus"
+
+msgid "Maximum wait time for network activity"
+msgstr "Максимальное время ожидания сетевой активности"
+
+msgid "Override path for ubus socket"
+msgstr "Переопределить путь для сокета ubus"
+
+msgid "Path prefix for CGI scripts"
+msgstr "Префикс пути для CGI скриптов"
+
+msgid ""
+"Prevent access from private (RFC1918) IPs on an interface if it has an "
+"public IP address"
+msgstr ""
+"Запретить доступ к частному интерфейсу IPS (RFC1918), если он имеет "
+"общедоступный IP-адрес."
+
+msgid "Realm for Basic Auth"
+msgstr "Хост для аутентификации"
+
+msgid "Redirect all HTTP to HTTPS"
+msgstr "Перенаправление всех HTTP на HTTPS"
+
+msgid "Remove configuration for certificate and key"
+msgstr "Удалить настройки для сертификата и ключа"
+
+msgid "Remove old certificate and key"
+msgstr "Удалить старый сертификат и ключ"
+
+msgid "Server Hostname"
+msgstr "Имя хоста"
+
+msgid ""
+"Settings which are either rarely needed or which affect serving the WebUI"
+msgstr ""
+"Страница содержит параметры, которые редко используются или влияют на "
+"обслуживание веб-интерфейса."
+
+msgid "State"
+msgstr "Указывать"
+
+msgid "TCP Keepalive"
+msgstr "TCP активность"
+
+msgid "This permanently deletes the cert, key, and configuration to use same."
+msgstr "Полное удаление сертификата, ключа и настроек вкладки меню внизу."
+
+msgid "Valid for # of Days"
+msgstr "Действителен в течение указанного кол-ва дней"
+
+msgid ""
+"Virtual URL or CGI script to display on status '404 Not Found'. Must begin "
+"with '/'"
+msgstr ""
+"Виртуальный URL-адрес или CGI скрипт для отображения статуса '404 не "
+"найдено'. Надо начинать с '/'."
+
+msgid "Virtual path prefix for Lua scripts"
+msgstr "Виртуальный путь префикса для скриптов Lua"
+
+msgid "Virtual path prefix for ubus via JSON-RPC integration"
+msgstr "Виртуальный префикс пути для ubus через для JSON-RPC интеграции"
+
+msgid "Will not use HTTP authentication if not present"
+msgstr ""
+"Например, учетные данные для основной авторизации. Не будет использоваться "
+"проверка подлинности HTTP, если она отсутствует."
+
+msgid "a.k.a CommonName"
+msgstr "Имя хоста сервера, так называемое - 'CommonName'."
+
+msgid "uHTTPd"
+msgstr "uHTTPd"
+
+msgid "uHTTPd Self-signed Certificate Parameters"
+msgstr "Параметры самозаверяющего сертификата uHTTPd"
+
+msgid ""
+"uHTTPd will generate a new self-signed certificate using the configuration "
+"shown below."
+msgstr ""
+"uHTTPd создаст самозаверяющий сертификат используя вкладку расположенную "
+"ниже."
+
+msgid "ubus integration is disabled if not present"
+msgstr "Интеграция с ubus будет отключена, если она отсутствует."
diff --git a/applications/luci-app-upnp/po/ja/upnp.po b/applications/luci-app-upnp/po/ja/upnp.po
index b9dae4f8d6..fe2dd64566 100644
--- a/applications/luci-app-upnp/po/ja/upnp.po
+++ b/applications/luci-app-upnp/po/ja/upnp.po
@@ -17,8 +17,8 @@ msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
-"アクセス制御リスト(ACL) は、どの外部ポートからどの内部アドレス及びポートへ"
-"リダイレクトするかを設定します。"
+"アクセス制御リスト(ACL) は、どの外部ポートからどの内部アドレス及びポートへリ"
+"ダイレクトするかを設定します。"
msgid "Action"
msgstr "動作"
@@ -132,8 +132,8 @@ msgid ""
"UPnP allows clients in the local network to automatically configure the "
"router."
msgstr ""
-"UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータ"
-"を構成することができます。"
+"UPnPを使用することで、ローカルネットワーク内のクライアントが自動的にルータを"
+"構成することができます。"
msgid "UPnP lease file"
msgstr "UPnP リースファイル"
diff --git a/applications/luci-app-upnp/po/ru/upnp.po b/applications/luci-app-upnp/po/ru/upnp.po
index 0c195ad85b..6800a1ab78 100644
--- a/applications/luci-app-upnp/po/ru/upnp.po
+++ b/applications/luci-app-upnp/po/ru/upnp.po
@@ -1,26 +1,24 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: upnp\n"
-"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-08-15 15:20+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"PO-Revision-Date: 2018-01-07 18:46+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid ""
"ACLs specify which external ports may be redirected to which internal "
"addresses and ports"
msgstr ""
"Список доступа определяет, какие внешние порты могут быть перенаправлены на "
-"внутренние адреса и порты"
+"внутренние адреса и порты."
msgid "Action"
msgstr "Действие"
@@ -29,10 +27,10 @@ msgid "Active UPnP Redirects"
msgstr "Активные UPnP-переадресации"
msgid "Advanced Settings"
-msgstr "Расширенные настройки"
+msgstr "Дополнительные настройки"
msgid "Allow adding forwards only to requesting ip addresses"
-msgstr "Разрешить перенаправление только для запрашивающих IP-адресов"
+msgstr "Разрешить перенаправление только для запрашивающих IP-адресов."
msgid "Announced model number"
msgstr "Номер модели"
@@ -53,22 +51,22 @@ msgid "Client Port"
msgstr "Порт клиента"
msgid "Collecting data..."
-msgstr "Сбор данных..."
+msgstr "Сбор информации..."
msgid "Comment"
msgstr "Комментарий"
msgid "Delete"
-msgstr ""
+msgstr "Удалить"
msgid "Description"
-msgstr ""
+msgstr "Описание"
msgid "Device UUID"
msgstr "UUID устройства"
msgid "Downlink"
-msgstr "Нисходящий канал"
+msgstr "Входящее соединение"
msgid "Enable NAT-PMP functionality"
msgstr "Включить NAT-PMP"
@@ -89,7 +87,7 @@ msgid "External ports"
msgstr "Внешние порты"
msgid "General Settings"
-msgstr "Общие настройки"
+msgstr "Основные настройки"
msgid "Internal addresses"
msgstr "Внутренние адреса"
@@ -116,7 +114,7 @@ msgid "Protocol"
msgstr "Протокол"
msgid "Puts extra debugging information into the system log"
-msgstr "Добавлять дополнительную отладочную информацию в системный журнал"
+msgstr "Добавлять дополнительную отладочную информацию в системный журнал."
msgid "Report system instead of daemon uptime"
msgstr "Сообщать время работы системы вместо сервиса"
@@ -144,21 +142,7 @@ msgid "Universal Plug & Play"
msgstr "Universal Plug & Play"
msgid "Uplink"
-msgstr "Восходящий канал"
+msgstr "Исходящее соединение"
msgid "Value in KByte/s, informational only"
msgstr "Значение в КБ/с, только для информации"
-
-#~ msgid "Delete Redirect"
-#~ msgstr "Удалить переадресацию"
-
-# Used in upnpmini.lua, which is marked broken, thus can be removed
-#~ msgid ""
-#~ "UPNP allows clients in the local network to automatically configure the "
-#~ "router."
-#~ msgstr ""
-#~ "UPnP позволяет клиентам в локальной сети автоматически настраивать "
-#~ "маршрутизатор."
-
-#~ msgid "enable"
-#~ msgstr "включить"
diff --git a/applications/luci-app-ushare/po/ru/ushare.po b/applications/luci-app-ushare/po/ru/ushare.po
index ac08e946d5..42b16fbe1a 100644
--- a/applications/luci-app-ushare/po/ru/ushare.po
+++ b/applications/luci-app-ushare/po/ru/ushare.po
@@ -1,22 +1,20 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: ushare\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-08-15 11:29+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 11:29+0300\n"
+"PO-Revision-Date: 2018-01-08 00:25+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Content directories"
-msgstr "Директории с содержимым"
+msgstr "Папки с содержимым"
msgid "Disable telnet console"
msgstr "Выключить telnet-консоль"
diff --git a/applications/luci-app-vnstat/po/ru/vnstat.po b/applications/luci-app-vnstat/po/ru/vnstat.po
index 5254ca1ee1..78f3a24b71 100644
--- a/applications/luci-app-vnstat/po/ru/vnstat.po
+++ b/applications/luci-app-vnstat/po/ru/vnstat.po
@@ -1,21 +1,20 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: vnstat\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2012-08-15 11:48+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 11:48+0300\n"
+"PO-Revision-Date: 2018-01-07 17:38+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Configuration"
-msgstr "Конфигурация"
+msgstr "Настройка"
msgid "Daily traffic"
msgstr "Трафик за день"
@@ -36,8 +35,8 @@ msgid ""
"No database has been set up yet. Go to the VnStat configuration and enable "
"monitoring for one or more interfaces."
msgstr ""
-"База данных не настроена. Перейдите в конфигурацию и укажите интерфейсы для "
-"сбора статистики."
+"База данных не настроена. Выполните настройки и укажите интерфейсы для сбора "
+"статистики."
msgid "Restart VnStat"
msgstr "Перезапустить VnStat"
@@ -66,6 +65,3 @@ msgid ""
msgstr ""
"VnStat - монитор сетевого трафика для Linux, собирающий статистику по "
"выбранным интерфейсам."
-
-#~ msgid "The VnStat service has been restarted."
-#~ msgstr "VnStat сервис перезапущен."
diff --git a/applications/luci-app-voice-core/po/ru/voice_core.po b/applications/luci-app-voice-core/po/ru/voice_core.po
index b6631dfc05..4b89c62225 100644
--- a/applications/luci-app-voice-core/po/ru/voice_core.po
+++ b/applications/luci-app-voice-core/po/ru/voice_core.po
@@ -1,24 +1,19 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: voice_core\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2012-08-15 11:23+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 11:23+0300\n"
+"PO-Revision-Date: 2018-01-08 00:20+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Phones"
msgstr "Телефоны"
msgid "Voice"
msgstr "Голос"
-
-#~ msgid "l_v_adminphones"
-#~ msgstr "l_v_adminphones"
diff --git a/applications/luci-app-voice-diag/po/ru/voice_diag.po b/applications/luci-app-voice-diag/po/ru/voice_diag.po
index 5c98de0157..2b8b808dbf 100644
--- a/applications/luci-app-voice-diag/po/ru/voice_diag.po
+++ b/applications/luci-app-voice-diag/po/ru/voice_diag.po
@@ -1,18 +1,17 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: voice_diag\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2012-08-15 11:22+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2012-08-15 11:22+0300\n"
+"PO-Revision-Date: 2018-01-08 00:17+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Diagnostics"
msgstr "Диагностика"
@@ -20,14 +19,11 @@ msgstr "Диагностика"
msgid ""
"The diagnostics available on your device depend on the modules that you have "
"installed."
-msgstr "Доступные виды диагностики зависят от установленных модулей."
+msgstr "Доступные виды диагностики зависят от установленных плагинов."
msgid ""
"Under this menu are options that allow you to configure and perform tests on "
"the voice operations of your system. These are known as diagnostics."
msgstr ""
-"В данном меню содержатся опции, которые позволяют вам протестировать "
-"голосовые службы вашей системы. Это известно как \"диагностика\"."
-
-#~ msgid "l_v_d_admindiag"
-#~ msgstr "l_v_d_admindiag"
+"Утилита Диагностика, позволит вам протестировать голосовые службы вашей "
+"системы."
diff --git a/applications/luci-app-vpnbypass/po/ru/vpnbypass.po b/applications/luci-app-vpnbypass/po/ru/vpnbypass.po
new file mode 100644
index 0000000000..a50ea8b9f1
--- /dev/null
+++ b/applications/luci-app-vpnbypass/po/ru/vpnbypass.po
@@ -0,0 +1,95 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: vpnbypass\n"
+"POT-Creation-Date: 2017-09-14 16:00+0300\n"
+"PO-Revision-Date: 2017-10-17 21:00+0300\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 2.0.4\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"
+"Language: ru\n"
+
+msgid "Domains to Bypass"
+msgstr "Домены, для обхода блокировки"
+
+msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
+msgstr "Домены должны быть доступны напрямую (вне VPN-туннеля), см."
+
+msgid "Enable/start service"
+msgstr "Включить/запустить сервис"
+
+msgid "Local IP Addresses to Bypass"
+msgstr "Локальный IP адрес обхода VPN"
+
+msgid ""
+"Local IP addresses or subnets with direct internet access (outside of the "
+"VPN tunnel)"
+msgstr ""
+"Локальные IP адреса или подсети с прямым доступом в интернет (вне VPN-"
+"туннеля)."
+
+msgid "Local Ports to Bypass"
+msgstr "Локальные порты для обхода VPN"
+
+msgid "Local ports to trigger VPN Bypass"
+msgstr "Локальные порты для запуска обхода VPN"
+
+msgid "README"
+msgstr "Описание"
+
+msgid "Remote IP Addresses to Bypass"
+msgstr "Удаленные IP адреса обхода VPN"
+
+msgid ""
+"Remote IP addresses or subnets which will be accessed directly (outside of "
+"the VPN tunnel)"
+msgstr ""
+"Удаленные IP-адреса или подсети, которые будут доступны напрямую (вне "
+"туннеля VPN)."
+
+msgid "Remote Ports to Bypass"
+msgstr "Удаленные порты для обхода VPN"
+
+msgid "Remote ports to trigger VPN Bypass"
+msgstr "Удаленные порты для запуска обхода VPN"
+
+msgid "VPN Bypass"
+msgstr "Обход VPN"
+
+msgid "VPN Bypass Settings"
+msgstr "Настройки обхода VPN"
+
+msgid "for syntax"
+msgstr "для синтаксиса"
+
+#~ msgid "Enable VPN Bypass"
+#~ msgstr "Habilitar o VPN Bypass"
+
+#~ msgid "Configuration of VPN Bypass Settings"
+#~ msgstr "Configurações do VPN Bypass"
+
+#~ msgid "Domains which will be accessed directly (outside of the VPN tunnel)"
+#~ msgstr "Domínios que serão acessados diretamente (fora do túnel VPN)"
+
+#~ msgid "Local IP Subnets to Bypass"
+#~ msgstr "Subredes IP locais para evitar a VPN"
+
+#~ msgid ""
+#~ "Local IP ranges with direct internet access (outside of the VPN tunnel)"
+#~ msgstr ""
+#~ "Faixa de endereços IP locais que terão acesso internet direto (fora do "
+#~ "túnel VPN)"
+
+#~ msgid "Remote IP Subnets to Bypass"
+#~ msgstr "Subredes IP remotas para evitar a VPN"
+
+#~ msgid ""
+#~ "Remote IP ranges which will be accessed directly (outside of the VPN "
+#~ "tunnel)"
+#~ msgstr ""
+#~ "Faixa de endereços IP remotos que serão acessados diretamente (fora do "
+#~ "túnel VPN)"
diff --git a/applications/luci-app-watchcat/po/ru/watchcat.po b/applications/luci-app-watchcat/po/ru/watchcat.po
index 83b95e2015..5616baf421 100644
--- a/applications/luci-app-watchcat/po/ru/watchcat.po
+++ b/applications/luci-app-watchcat/po/ru/watchcat.po
@@ -1,17 +1,17 @@
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: watchcat\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"POT-Creation-Date: 2013-10-06 11:15+0300\n"
+"PO-Revision-Date: 2018-01-07 22:46+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Forced reboot delay"
msgstr "Задержка принудительной перезагрузки"
@@ -25,7 +25,7 @@ msgid ""
msgstr ""
"Как часто проверять интернет-соединение. По умолчанию значение в секундах, "
"вы можете использовать суффикс 'm' для указания минут, 'h' - часов, 'd' - "
-"дней"
+"дней."
msgid ""
"In periodic mode, it defines the reboot period. In internet mode, it defines "
@@ -37,7 +37,7 @@ msgstr ""
"интернет-режиме, данная настройка определяет максимальный период времени без "
"доступа в интернет, после которого устройство перезагружается. По умолчанию "
"значение в секундах, вы можете использовать суффикс 'm' для указания минут, "
-"'h' - часов, 'd' - дней"
+"'h' - часов, 'd' - дней."
msgid "Operating mode"
msgstr "Режим работы"
@@ -54,21 +54,19 @@ msgstr "Период опроса"
msgid "Watchcat"
msgstr "Watchcat"
-#, fuzzy
msgid ""
"Watchcat allows configuring a periodic reboot when the Internet connection "
"has been lost for a certain period of time."
msgstr ""
-"Watchcat позволяет настроить периодическую перезагрузку устройства и/или "
-"перезагрузку при потере интернет-соединения на определённое время."
+"Watchcat позволяет настроить периодическую перезагрузку, при потере Интернет "
+"соединения на определенное время."
-#, fuzzy
msgid ""
"When rebooting the system, the watchcat will trigger a soft reboot. Entering "
"a non zero value here will trigger a delayed hard reboot if the soft reboot "
"fails. Enter a number of seconds to enable, use 0 to disable"
msgstr ""
-"При необходимости перезагрузке системы, watchcat вызовет программную "
-"перезагрузку. При установке ненулевого значения, будет выполнена отложенная "
-"аппаратная перезагрузка при неудачной программной. Установите количество "
-"секунд для отложенной аппаратной перезагрузки или значение 0 для программной."
+"При перезагрузке системы, watchcat вызовет программную перезагрузку. Ввод "
+"ненулевого значения здесь, вызовет отложенную аппаратную перезагрузку, если "
+"программная перезагрузка не удастся. Введите количество секунд, чтобы "
+"включить, используйте '0', чтобы отключить."
diff --git a/applications/luci-app-wifischedule/po/ru/wifischedule.po b/applications/luci-app-wifischedule/po/ru/wifischedule.po
new file mode 100644
index 0000000000..a5fd3ed406
--- /dev/null
+++ b/applications/luci-app-wifischedule/po/ru/wifischedule.po
@@ -0,0 +1,113 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: wifischedule\n"
+"POT-Creation-Date: 2017-11-30 15:30+0300\n"
+"PO-Revision-Date: 2018-01-07 17:52+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+
+msgid "Activate wifi"
+msgstr "Включить Wi-Fi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Не удалось найти файл /usr/bin/wifi_schedule.sh или /sbin/wifi"
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr "Не удалось найти требуемую программу /usr/bin/iwinfo"
+
+msgid "Cron Jobs"
+msgstr "Cron задания"
+
+msgid "Day(s) of Week"
+msgstr "День (дни) недели"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Определяет расписание включения и выключения Wi-Fi."
+
+msgid "Determine Modules Automatically"
+msgstr "Автоматическое определение модулей"
+
+msgid "Disable wifi gracefully"
+msgstr "Отключить Wi-Fi корректно"
+
+msgid "Disabled wifi forced"
+msgstr "Отключить Wi-Fi принудительно"
+
+msgid "Enable"
+msgstr "Включить"
+
+msgid "Enable Wifi Schedule"
+msgstr "Включить Wi-Fi планировщик"
+
+msgid "Enable logging"
+msgstr "Включить ведение системного журнала"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr "Принудительно отключить Wi-Fi даже если имеются подключенные клиенты"
+
+msgid "Friday"
+msgstr "Пятница"
+
+msgid "Global Settings"
+msgstr "Основные настройки"
+
+msgid "Monday"
+msgstr "Понедельник"
+
+msgid "Saturday"
+msgstr "Суббота"
+
+msgid "Schedule"
+msgstr "Планировщик"
+
+msgid "Schedule events"
+msgstr "Планировщик событий"
+
+msgid "Start Time"
+msgstr "Время начала"
+
+msgid "Start WiFi"
+msgstr "Время включения Wi-Fi"
+
+msgid "Stop Time"
+msgstr "Время окончания"
+
+msgid "Stop WiFi"
+msgstr "Время отключения Wi-Fi"
+
+msgid "Sunday"
+msgstr "Воскресенье"
+
+msgid "The value %s is invalid"
+msgstr "Значение %s является недействительным"
+
+msgid "Thursday"
+msgstr "Четверг"
+
+msgid "Tuesday"
+msgstr "Вторник"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+"Плагины не загружаются (экспериментальная опция; экономит больше энергии)"
+
+msgid "View Cron Jobs"
+msgstr "Показать сron задания"
+
+msgid "View Logfile"
+msgstr "Показать системный журнал"
+
+msgid "Wednesday"
+msgstr "Среда"
+
+msgid "Wifi Schedule"
+msgstr "Wi-Fi планировщик"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Системный журнал Wi-Fi планировщика"
diff --git a/applications/luci-app-wireguard/po/ru/wireguard.po b/applications/luci-app-wireguard/po/ru/wireguard.po
new file mode 100644
index 0000000000..0cbc8bb75e
--- /dev/null
+++ b/applications/luci-app-wireguard/po/ru/wireguard.po
@@ -0,0 +1,77 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: wireguard\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-19 19:36+0200\n"
+"PO-Revision-Date: 2017-11-30 21:48+0300\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
+"Language-Team: http://cyber-place.ru\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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.4\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+msgid "Allowed IPs"
+msgstr "Разрешенные IP адреса"
+
+msgid "Collecting data..."
+msgstr "Сбор информации..."
+
+msgid "Configuration"
+msgstr "Настройка config файла"
+
+msgid "Data Received"
+msgstr "Полученные данные"
+
+msgid "Data Transmitted"
+msgstr "Переданные данные"
+
+msgid "Endpoint"
+msgstr "Конечная точка"
+
+msgid "Firewall Mark"
+msgstr "Метка фаервола"
+
+msgid "Interface"
+msgstr "Интерфейс"
+
+msgid "Interface does not have a public key!"
+msgstr "Интерфейс не имеет Публичного Ключа!"
+
+msgid "Latest Handshake"
+msgstr "Последний хендшейк"
+
+msgid "Listen Port"
+msgstr "Слушать порт"
+
+msgid "Never"
+msgstr "Никогда"
+
+msgid "Peer"
+msgstr "Пир"
+
+msgid "Persistent Keepalive"
+msgstr "Постоянные Проверки Активности"
+
+msgid "Public Key"
+msgstr "Публичный ключ"
+
+msgid "WireGuard Status"
+msgstr "Состояние WireGuard"
+
+msgid "h ago"
+msgstr "час назад"
+
+msgid "m ago"
+msgstr "минуту назад"
+
+msgid "over a day ago"
+msgstr "более суток назад"
+
+msgid "s ago"
+msgstr "секунду назад"
+
diff --git a/applications/luci-app-wol/po/ru/wol.po b/applications/luci-app-wol/po/ru/wol.po
index 9d3e08d563..b454a133ae 100644
--- a/applications/luci-app-wol/po/ru/wol.po
+++ b/applications/luci-app-wol/po/ru/wol.po
@@ -1,46 +1,42 @@
-# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
-#
msgid ""
msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: LuCI: wol\n"
-"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-19 00:29+0200\n"
-"PO-Revision-Date: 2012-08-15 12:07+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
+"PO-Revision-Date: 2018-01-07 18:00+0300\n"
+"Language-Team: http://cyber-place.ru\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
"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.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
msgid "Broadcast on all interfaces"
msgstr "Использовать широковещательную передачу на все интерфейсы"
msgid "Choose the host to wake up or enter a custom MAC address to use"
-msgstr "Выберите хост, который необходимо разбудить, или введите его MAC-адрес"
+msgstr ""
+"Задать хост, который необходимо разбудить. Можно использовать MAC-адрес или "
+"имя хоста."
msgid "Host to wake up"
-msgstr "Хост, который необходимо разбудить"
+msgstr "Выбрать хост"
msgid "Network interface to use"
-msgstr "Используемый сетевой интерфейс"
+msgstr "Выбрать интерфейс"
msgid "Send to broadcast address"
-msgstr ""
+msgstr "Отправить на широковещательный адрес"
-#, fuzzy
msgid ""
"Sometimes only one of the two tools works. If one fails, try the other one"
msgstr ""
-"Иногда только одна из двух утилит работает. В случае ошибки, попробуйте "
-"использовать другую"
+"Иногда работает только один из двух инструментов. Если один терпит неудачу, "
+"попробуйте другой."
msgid "Specifies the interface the WoL packet is sent on"
-msgstr "Определяет интерфейс, по которому будут посланы пакеты WoL"
+msgstr "Задать сетевой интерфейс, по которому будут посланы пакеты WoL."
msgid "Starting WoL utility:"
msgstr "Запуск WoL утилиты:"
@@ -59,4 +55,4 @@ msgid "Wake up host"
msgstr "Разбудить хост"
msgid "WoL program"
-msgstr "Программа WoL"
+msgstr "Утилита WoL"