Compare commits
348 commits
master
...
openwrt-18
Author | SHA1 | Date | |
---|---|---|---|
|
20b3600d4d | ||
|
19f304cd96 | ||
|
0656431081 | ||
|
e41efc3ee3 | ||
|
d7dc59a154 | ||
|
52f7b0ef4d | ||
|
1259bb147f | ||
|
7d58cea58c | ||
|
6fbb5966f4 | ||
|
ca5ddba3ad | ||
|
ab22243b49 | ||
|
3864cced13 | ||
|
4a5217f93e | ||
|
423a5b19fd | ||
|
479154eb34 | ||
|
baa4f38333 | ||
|
80157d34a8 | ||
|
07edc55cdd | ||
|
d6c95855de | ||
|
8401f59e03 | ||
|
dc51a2f845 | ||
|
adfc142841 | ||
|
2223f8b397 | ||
|
523770c5aa | ||
|
16dfb55ace | ||
|
ac723a12a5 | ||
|
774c92e08a | ||
|
0c92a924cd | ||
|
23f30cf9ca | ||
|
c215f31619 | ||
|
5d4442fae2 | ||
|
058c3e2387 | ||
|
5af651b614 | ||
|
563bd75178 | ||
|
f541468525 | ||
|
a972bdb9b9 | ||
|
ca50085e4a | ||
|
f990543f8c | ||
|
e5c2e49610 | ||
|
a1994dac44 | ||
|
69d17199e8 | ||
|
d4424f8847 | ||
|
cdfb78685c | ||
|
f5f1ea3316 | ||
|
bacf57bad1 | ||
|
de2df034e1 | ||
|
b4dbbb432e | ||
|
9b69e8f9cc | ||
|
733734ab20 | ||
|
3e26f34ad8 | ||
|
6d9a0488d6 | ||
|
ae3949669b | ||
|
786dd7928d | ||
|
292c6d7bb0 | ||
|
bbf8e1e76d | ||
|
a2185b378d | ||
|
0c35ed08e5 | ||
|
a1c1e2d336 | ||
|
1e59ed1799 | ||
|
f8a3ce0be5 | ||
|
7cc22e1a65 | ||
|
805cf64805 | ||
|
103da80a18 | ||
|
9e850c7633 | ||
|
9778609d68 | ||
|
a461961ae1 | ||
|
a89e4ce332 | ||
|
35c14af547 | ||
|
b3184860e1 | ||
|
3252808722 | ||
|
be69e1ac46 | ||
|
e0a6127cea | ||
|
6d2a667205 | ||
|
b27d5e0a90 | ||
|
a06b27d5f8 | ||
|
13bc6982bd | ||
|
a9f8500720 | ||
|
4fc4c794a0 | ||
|
e513230622 | ||
|
41e2258d6d | ||
|
868abc1a56 | ||
|
6070efe485 | ||
|
3a3d8f4939 | ||
|
f01d93b331 | ||
|
8b4d454ac6 | ||
|
ab9c8128d8 | ||
|
b6e00b7a21 | ||
|
af8310fd15 | ||
|
71e229e2cb | ||
|
7a3f0dd6d4 | ||
|
9866be5204 | ||
|
10cdd01378 | ||
|
3961268597 | ||
|
ca98eae724 | ||
|
bc060f931b | ||
|
ef819b5039 | ||
|
bc17ef673f | ||
|
a32190c0b2 | ||
|
50788da24e | ||
|
f6bf361ec5 | ||
|
9a1a190aee | ||
|
fbefeed973 | ||
|
ca781af2f8 | ||
|
205de70600 | ||
|
ceb1f80710 | ||
|
42c1228875 | ||
|
11421536cd | ||
|
afee71bd60 | ||
|
3b6317db27 | ||
|
ee38da958a | ||
|
48f58d9e35 | ||
|
4ac8e206e4 | ||
|
f8775ee5fe | ||
|
a79659fdda | ||
|
f72558b55e | ||
|
825daeb199 | ||
|
c048f23bad | ||
|
14d2f9b216 | ||
|
ff4c722a21 | ||
|
c731cc24bb | ||
|
38f5f4b970 | ||
|
a631579969 | ||
|
668c820fed | ||
|
924cbef577 | ||
|
557988815d | ||
|
88e87f6d2c | ||
|
7995ef34b5 | ||
|
cb54693a77 | ||
|
4608d789f2 | ||
|
0545392d50 | ||
|
3c25ab8f7b | ||
|
44683453b9 | ||
|
0cbc51f297 | ||
|
89e029c59f | ||
|
44efaf5777 | ||
|
28ab21dd8d | ||
|
a388be0f28 | ||
|
35357e4e41 | ||
|
0dab6af45a | ||
|
9c5162d596 | ||
|
7d8df17dfa | ||
|
e277f936db | ||
|
dbaae4a815 | ||
|
4235fb0125 | ||
|
9e3f710cac | ||
|
b836c15a3d | ||
|
8d88f77dc6 | ||
|
cbc000bc5c | ||
|
0593f93526 | ||
|
9bab4ba393 | ||
|
4d6d8bc5b0 | ||
|
e84dc64f9a | ||
|
1d599a7d88 | ||
|
115c4e3751 | ||
|
9fc05682f6 | ||
|
0dd8878837 | ||
|
7e9de0d25f | ||
|
84692e5bf6 | ||
|
b99e77d5c3 | ||
|
5248d3719e | ||
|
de3be23883 | ||
|
071e540e37 | ||
|
76cf6533d0 | ||
|
30d9bc02b2 | ||
|
23029f5163 | ||
|
28e852f4e0 | ||
|
a0ae6c97f3 | ||
|
ac90b1bc37 | ||
|
449d5ad6d5 | ||
|
98ae788eb3 | ||
|
4c45a52592 | ||
|
43959e3abd | ||
|
3ff3b9e860 | ||
|
6f6641d97d | ||
|
a11f4ac2eb | ||
|
f1a5b179dd | ||
|
1f423b1141 | ||
|
8fe6f04d61 | ||
|
14456d30fb | ||
|
fb9721244c | ||
|
04d60f2144 | ||
|
3dea6b5bc7 | ||
|
12534ad03f | ||
|
a3bfc596bf | ||
|
94a1673fc5 | ||
|
68fb3b279a | ||
|
02bd34be15 | ||
|
e98580b058 | ||
|
f7e420150f | ||
|
bfad302463 | ||
|
34d13c0c67 | ||
|
2dd31c4ff2 | ||
|
12b0b31bb3 | ||
|
bcfd7cf05a | ||
|
63a72b3bff | ||
|
60dfc7348e | ||
|
5e8708345e | ||
|
3787301e3f | ||
|
44f91bb26c | ||
|
3dc653cd8c | ||
|
d6925de333 | ||
|
1fe70f3b4d | ||
|
8e1579c557 | ||
|
59383800ef | ||
|
0cfd99cb0f | ||
|
9f94fe3a77 | ||
|
197827ffe4 | ||
|
01fe783494 | ||
|
b3d4b84aaf | ||
|
463fb04116 | ||
|
55ebe88f4c | ||
|
b3cbe89b29 | ||
|
69325c11b5 | ||
|
9541751f7a | ||
|
650375611f | ||
|
4f4b28b789 | ||
|
f64b152344 | ||
|
f4da0b8cfb | ||
|
e0599d5064 | ||
|
f9121fd86c | ||
|
199eac4166 | ||
|
a49e4e4d56 | ||
|
8bb4873326 | ||
|
8407d90aa1 | ||
|
5d1d6915ca | ||
|
3d5d9dc574 | ||
|
7d69fa6a50 | ||
|
2da3f93feb | ||
|
5ec72617ee | ||
|
9beff0720e | ||
|
cc4310817e | ||
|
e290fe917d | ||
|
1983dc615e | ||
|
d844d51323 | ||
|
7f5b296e30 | ||
|
b0dce7a681 | ||
|
56266d0707 | ||
|
bf5dd58377 | ||
|
6df9a57ef0 | ||
|
c26709a850 | ||
|
db5bde618b | ||
|
d05f442ad5 | ||
|
ea09513095 | ||
|
680a6d2ad3 | ||
|
520afa4c39 | ||
|
7e5331f154 | ||
|
64e3fe9f6b | ||
|
186228e365 | ||
|
58bd130a80 | ||
|
198474f690 | ||
|
667f73a428 | ||
|
df614ffd43 | ||
|
867fcff8bb | ||
|
97b3e5773d | ||
|
6cf7d11e15 | ||
|
d7d15f6c5c | ||
|
97e647bb25 | ||
|
b8a0b617ad | ||
|
516ce4af78 | ||
|
bcb8d8969c | ||
|
024fa3cf30 | ||
|
81682971dc | ||
|
03b6d77ee3 | ||
|
ffed0206b9 | ||
|
a6b2b29dc6 | ||
|
cd72e1d973 | ||
|
7501bf6f5b | ||
|
d6f8ac1a76 | ||
|
ad0d3f5031 | ||
|
14c73faf31 | ||
|
1d32ea9b03 | ||
|
9724d76619 | ||
|
4c87b8345c | ||
|
ed4f4644ee | ||
|
4b267cecfd | ||
|
968f9dc0aa | ||
|
11e9a5503e | ||
|
18c8e1fe58 | ||
|
c81359898e | ||
|
39401a7615 | ||
|
5b34fbaab7 | ||
|
5bbf669c85 | ||
|
da600939fc | ||
|
beb9ab2daa | ||
|
16837a5d0c | ||
|
758c66b9da | ||
|
69a4c258f4 | ||
|
b9166ca964 | ||
|
5fc6bc7d90 | ||
|
d3bfc5d03e | ||
|
91238dccc7 | ||
|
5d4c365f13 | ||
|
8d88802b83 | ||
|
5ea795a4b8 | ||
|
fbc02d33a3 | ||
|
0b44d33dd7 | ||
|
d7c868a05e | ||
|
bea5187f3d | ||
|
24b924bfe4 | ||
|
392fd02383 | ||
|
c0612e8208 | ||
|
94b6aa2a8e | ||
|
53686fd492 | ||
|
0b00ceef01 | ||
|
984a1afcf7 | ||
|
a7e1edf936 | ||
|
8d882e5593 | ||
|
b49c62b2eb | ||
|
bf2c25e440 | ||
|
edbcdef15c | ||
|
efff0139be | ||
|
b8b87182f6 | ||
|
4da137e892 | ||
|
911219898f | ||
|
9cc24e6c62 | ||
|
cd8fc00130 | ||
|
d03537c2dd | ||
|
8a7cd70d4d | ||
|
98adc98f75 | ||
|
f974cfe093 | ||
|
16aa088cab | ||
|
fb817df836 | ||
|
4ba85e3d82 | ||
|
c379f00e86 | ||
|
21a1cc9d9b | ||
|
ef35d85971 | ||
|
d1c436df3f | ||
|
987a3a0a82 | ||
|
4e9271d5e8 | ||
|
29b4c7146b | ||
|
452c95cdc7 | ||
|
485f411b4e | ||
|
e1ab470f4c | ||
|
f569e7fc6a | ||
|
2742a1efa6 | ||
|
1a918d8fae | ||
|
deae048c94 | ||
|
9699dd7d33 | ||
|
d843063e4a | ||
|
fdb008123f | ||
|
1341412893 | ||
|
c5459f52f4 | ||
|
690c7c71dc | ||
|
b2a247a1e9 | ||
|
7ebf84a17b | ||
|
1faa9a3cb6 | ||
|
211d7bb9e4 | ||
|
9105d78603 |
882 changed files with 30351 additions and 37729 deletions
|
@ -3,9 +3,12 @@
|
|||
|
||||
module("luci.controller.adblock", package.seeall)
|
||||
|
||||
local sys = require("luci.sys")
|
||||
local util = require("luci.util")
|
||||
local templ = require("luci.template")
|
||||
local http = require("luci.http")
|
||||
local i18n = require("luci.i18n")
|
||||
local json = require("luci.jsonc")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/adblock") then
|
||||
|
@ -13,24 +16,56 @@ function index()
|
|||
end
|
||||
entry({"admin", "services", "adblock"}, firstchild(), _("Adblock"), 30).dependent = false
|
||||
entry({"admin", "services", "adblock", "tab_from_cbi"}, cbi("adblock/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
|
||||
entry({"admin", "services", "adblock", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
|
||||
entry({"admin", "services", "adblock", "log"}, template("adblock/logread"), _("View Logfile"), 20).leaf = true
|
||||
entry({"admin", "services", "adblock", "advanced"}, firstchild(), _("Advanced"), 100)
|
||||
entry({"admin", "services", "adblock", "advanced", "blacklist"}, form("adblock/blacklist_tab"), _("Edit Blacklist"), 110).leaf = true
|
||||
entry({"admin", "services", "adblock", "advanced", "whitelist"}, form("adblock/whitelist_tab"), _("Edit Whitelist"), 120).leaf = true
|
||||
entry({"admin", "services", "adblock", "advanced", "configuration"}, form("adblock/configuration_tab"), _("Edit Configuration"), 130).leaf = true
|
||||
entry({"admin", "services", "adblock", "advanced", "query"}, template("adblock/query"), _("Query domains"), 140).leaf = true
|
||||
entry({"admin", "services", "adblock", "advanced", "result"}, call("queryData"), nil, 150).leaf = true
|
||||
entry({"admin", "services", "adblock", "logread"}, call("logread"), nil).leaf = true
|
||||
entry({"admin", "services", "adblock", "status"}, call("status_update"), nil).leaf = true
|
||||
entry({"admin", "services", "adblock", "action"}, call("adb_action"), nil).leaf = true
|
||||
end
|
||||
|
||||
function adb_action(name)
|
||||
if name == "do_suspend" then
|
||||
luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
|
||||
elseif name == "do_resume" then
|
||||
luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
|
||||
elseif name == "do_refresh" then
|
||||
luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
|
||||
end
|
||||
luci.http.prepare_content("text/plain")
|
||||
luci.http.write("0")
|
||||
end
|
||||
|
||||
function status_update()
|
||||
local rt_file
|
||||
local content
|
||||
|
||||
rt_file = uci:get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
|
||||
|
||||
if nixio.fs.access(rt_file) then
|
||||
content = json.parse(nixio.fs.readfile(rt_file) or "")
|
||||
http.prepare_content("application/json")
|
||||
http.write_json(content)
|
||||
end
|
||||
end
|
||||
|
||||
function logread()
|
||||
local logfile
|
||||
local content
|
||||
|
||||
if nixio.fs.access("/var/log/messages") then
|
||||
logfile = util.trim(util.exec("grep -F 'adblock-' /var/log/messages"))
|
||||
content = util.trim(util.exec("grep -F 'adblock-' /var/log/messages"))
|
||||
else
|
||||
logfile = util.trim(util.exec("logread -e 'adblock-'"))
|
||||
content = util.trim(util.exec("logread -e 'adblock-'"))
|
||||
end
|
||||
templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
|
||||
|
||||
if content == "" then
|
||||
content = "No adblock related logs yet!"
|
||||
end
|
||||
http.write(content)
|
||||
end
|
||||
|
||||
function queryData(domain)
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
-- 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 util = require("luci.util")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local adbinput = uci:get("adblock", "blacklist", "adb_src") or "/etc/adblock/adblock.blacklist"
|
||||
local fs = require("nixio.fs")
|
||||
local util = require("luci.util")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local input = uci:get("adblock", "blacklist", "adb_src") or "/etc/adblock/adblock.blacklist"
|
||||
|
||||
if not fs.access(adbinput) then
|
||||
if not fs.access(input) then
|
||||
m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
return m
|
||||
end
|
||||
|
||||
if fs.stat(adbinput).size >= 102400 then
|
||||
if fs.stat(input).size >= 102400 then
|
||||
m = SimpleForm("error", nil,
|
||||
translate("The file size is too large for online editing in LuCI (≥ 100 KB). ")
|
||||
.. translate("Please edit this file directly in a terminal session."))
|
||||
|
@ -28,7 +28,7 @@ m.submit = translate("Save")
|
|||
m.reset = false
|
||||
|
||||
s = m:section(SimpleSection, nil,
|
||||
translatef("This form allows you to modify the content of the adblock blacklist (%s).<br />", adbinput)
|
||||
translatef("This form allows you to modify the content of the adblock blacklist (%s). ", input)
|
||||
.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
|
||||
|
||||
f = s:option(TextValue, "data")
|
||||
|
@ -37,11 +37,15 @@ f.rows = 20
|
|||
f.rmempty = true
|
||||
|
||||
function f.cfgvalue()
|
||||
return fs.readfile(adbinput) or ""
|
||||
return fs.readfile(input) or ""
|
||||
end
|
||||
|
||||
function f.write(self, section, data)
|
||||
return fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
return fs.writefile(input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
end
|
||||
|
||||
function f.remove(self, section, value)
|
||||
return fs.writefile(input, "")
|
||||
end
|
||||
|
||||
function s.handle(self, state, data)
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
-- 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 util = require("luci.util")
|
||||
local adbinput = "/etc/config/adblock"
|
||||
local fs = require("nixio.fs")
|
||||
local util = require("luci.util")
|
||||
local input = "/etc/config/adblock"
|
||||
|
||||
if not fs.access(adbinput) then
|
||||
if not fs.access(input) then
|
||||
m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
return m
|
||||
end
|
||||
|
||||
if fs.stat(adbinput).size >= 102400 then
|
||||
if fs.stat(input).size >= 102400 then
|
||||
m = SimpleForm("error", nil,
|
||||
translate("The file size is too large for online editing in LuCI (≥ 100 KB). ")
|
||||
.. translate("Please edit this file directly in a terminal session."))
|
||||
|
@ -34,11 +34,15 @@ f.rows = 20
|
|||
f.rmempty = true
|
||||
|
||||
function f.cfgvalue()
|
||||
return fs.readfile(adbinput) or ""
|
||||
return fs.readfile(input) or ""
|
||||
end
|
||||
|
||||
function f.write(self, section, data)
|
||||
return fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
return fs.writefile(input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
end
|
||||
|
||||
function f.remove(self, section, value)
|
||||
return fs.writefile(input, "")
|
||||
end
|
||||
|
||||
function s.handle(self, state, data)
|
||||
|
|
|
@ -1,69 +1,27 @@
|
|||
-- 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 sys = require("luci.sys")
|
||||
local util = require("luci.util")
|
||||
local dump = util.ubus("network.interface", "dump", {})
|
||||
local json = require("luci.jsonc")
|
||||
local adbinput = uci:get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
|
||||
local fs = require("nixio.fs")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local util = require("luci.util")
|
||||
local dump = util.ubus("network.interface", "dump", {})
|
||||
|
||||
m = Map("adblock", translate("Adblock"),
|
||||
translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
|
||||
.. translatef("For further information "
|
||||
.. "<a href=\"%s\" target=\"_blank\">"
|
||||
.. "check the online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
|
||||
m.apply_on_parse = true
|
||||
|
||||
function m.on_apply(self)
|
||||
luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
|
||||
end
|
||||
|
||||
-- Main adblock options
|
||||
|
||||
s = m:section(NamedSection, "global", "adblock")
|
||||
|
||||
local parse = json.parse(fs.readfile(adbinput) or "")
|
||||
if parse then
|
||||
status = parse.data.adblock_status
|
||||
version = parse.data.adblock_version
|
||||
domains = parse.data.overall_domains
|
||||
fetch = parse.data.fetch_utility
|
||||
backend = parse.data.dns_backend
|
||||
rundate = parse.data.last_rundate
|
||||
end
|
||||
|
||||
o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
|
||||
o1.default = o1.disabled
|
||||
o1.rmempty = false
|
||||
|
||||
btn = s:option(Button, "", translate("Suspend / Resume Adblock"))
|
||||
if parse and status == "enabled" then
|
||||
btn.inputtitle = translate("Suspend")
|
||||
btn.inputstyle = "reset"
|
||||
btn.disabled = false
|
||||
function btn.write()
|
||||
luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
|
||||
end
|
||||
elseif parse and status == "paused" then
|
||||
btn.inputtitle = translate("Resume")
|
||||
btn.inputstyle = "apply"
|
||||
btn.disabled = false
|
||||
function btn.write()
|
||||
luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
|
||||
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
|
||||
end
|
||||
else
|
||||
btn.inputtitle = translate("-------")
|
||||
btn.inputstyle = "button"
|
||||
btn.disabled = true
|
||||
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("List of supported DNS backends with their default list export directory. ")
|
||||
.. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
|
||||
o2:value("dnsmasq", "dnsmasq (/tmp)")
|
||||
o2:value("unbound", "unbound (/var/lib/unbound)")
|
||||
|
@ -85,7 +43,7 @@ o3.default = "uclient-fetch"
|
|||
o3.rmempty = false
|
||||
|
||||
o4 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
|
||||
translate("List of available network interfaces. Usually the startup will be triggered by the 'wan' interface.<br />")
|
||||
translate("List of available network interfaces. Usually the startup will be triggered by the 'wan' interface. ")
|
||||
.. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
|
||||
o4:value("none")
|
||||
o4:value("timed")
|
||||
|
@ -101,66 +59,8 @@ o4.rmempty = false
|
|||
|
||||
-- Runtime information
|
||||
|
||||
ds = m:section(NamedSection, "global", "adblock", translate("Runtime Information"))
|
||||
|
||||
dv1 = ds:option(DummyValue, "", translate("Adblock Status"))
|
||||
dv1.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv1.value = translate("n/a")
|
||||
else
|
||||
if status == "error" then
|
||||
dv1.value = translate("error")
|
||||
elseif status == "disabled" then
|
||||
dv1.value = translate("disabled")
|
||||
elseif status == "paused" then
|
||||
dv1.value = translate("paused")
|
||||
elseif status == "running" then
|
||||
dv1.value = translate("running")
|
||||
else
|
||||
dv1.value = translate("enabled")
|
||||
end
|
||||
end
|
||||
|
||||
dv2 = ds:option(DummyValue, "", translate("Adblock Version"))
|
||||
dv2.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv2.value = translate("n/a")
|
||||
else
|
||||
dv2.value = version
|
||||
end
|
||||
|
||||
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 'built-in'."))
|
||||
dv3.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv3.value = translate("n/a")
|
||||
else
|
||||
dv3.value = fetch
|
||||
end
|
||||
|
||||
dv4 = ds:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
|
||||
dv4.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv4.value = translate("n/a")
|
||||
else
|
||||
dv4.value = backend
|
||||
end
|
||||
|
||||
dv5 = ds:option(DummyValue, "", translate("Overall Domains"))
|
||||
dv5.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv5.value = translate("n/a")
|
||||
else
|
||||
dv5.value = domains
|
||||
end
|
||||
|
||||
dv6 = ds:option(DummyValue, "", translate("Last Run"))
|
||||
dv6.template = "adblock/runtime"
|
||||
if parse == nil then
|
||||
dv6.value = translate("n/a")
|
||||
else
|
||||
dv6.value = rundate
|
||||
end
|
||||
ds = s:option(DummyValue, "_dummy")
|
||||
ds.template = "adblock/runtime"
|
||||
|
||||
-- Blocklist table
|
||||
|
||||
|
@ -197,46 +97,54 @@ e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
|
|||
e1.default = e1.disabled
|
||||
e1.rmempty = false
|
||||
|
||||
e2 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
|
||||
translate("Redirect all DNS queries from 'lan' zone to the local resolver."))
|
||||
e2 = e:option(Flag, "adb_nice", translate("Low Priority Service"),
|
||||
translate("Set the nice level to 'low priority' and the adblock background processing will take less resources from the system. ")
|
||||
..translate("This change requires a manual service stop/re-start to take effect."))
|
||||
e2.default = e2.disabled
|
||||
e2.disabled = "0"
|
||||
e2.enabled = "10"
|
||||
e2.rmempty = false
|
||||
|
||||
e3 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
|
||||
translate("Enable memory intense overall sort / duplicate removal on low memory devices (< 64 MB free RAM)"))
|
||||
e3 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
|
||||
translate("Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp and tcp protocol on ports 53, 853 and 5353."))
|
||||
e3.default = e3.disabled
|
||||
e3.rmempty = false
|
||||
|
||||
e4 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
|
||||
translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in backup mode."))
|
||||
e4 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
|
||||
translate("Enable memory intense overall sort / duplicate removal on low memory devices (< 64 MB free RAM)"))
|
||||
e4.default = e4.disabled
|
||||
e4.rmempty = false
|
||||
|
||||
e5 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
|
||||
e5 = e:option(Flag, "adb_backup", translate("Enable Blocklist Backup"),
|
||||
translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in backup mode."))
|
||||
e5.default = e5.disabled
|
||||
e5.rmempty = false
|
||||
|
||||
e6 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
|
||||
translate("Target directory for adblock backups. Please use only non-volatile disks, e.g. an external usb stick."))
|
||||
e5:depends("adb_backup", 1)
|
||||
e5.datatype = "directory"
|
||||
e5.default = "/mnt"
|
||||
e6:depends("adb_backup", 1)
|
||||
e6.datatype = "directory"
|
||||
e6.default = "/mnt"
|
||||
e5.rmempty = true
|
||||
|
||||
e6 = e:option(Flag, "adb_backup_mode", translate("Backup Mode"),
|
||||
e7 = e:option(Flag, "adb_backup_mode", translate("Backup Mode"),
|
||||
translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
|
||||
e6:depends("adb_backup", 1)
|
||||
e6.default = e6.disabled
|
||||
e6.rmempty = true
|
||||
e7:depends("adb_backup", 1)
|
||||
e7.default = e7.disabled
|
||||
e7.rmempty = true
|
||||
|
||||
e7 = e:option(Value, "adb_maxqueue", translate("Max. Download Queue"),
|
||||
translate("Size of the download queue to handle downloads & list processing in parallel (default '4').<br />")
|
||||
e8 = e:option(Value, "adb_maxqueue", translate("Max. Download Queue"),
|
||||
translate("Size of the download queue to handle downloads & list processing in parallel (default '4'). ")
|
||||
.. translate("For further performance improvements you can raise this value, e.g. '8' or '16' should be safe."))
|
||||
e7.default = 4
|
||||
e7.datatype = "range(1,32)"
|
||||
e7.rmempty = false
|
||||
e8.default = 4
|
||||
e8.datatype = "range(1,32)"
|
||||
e8.rmempty = false
|
||||
|
||||
e8 = e:option(Flag, "adb_jail", translate("'Jail' Blocklist Creation"),
|
||||
translate("Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all domains except those listed in the whitelist file.<br />")
|
||||
e9 = e:option(Flag, "adb_jail", translate("'Jail' Blocklist Creation"),
|
||||
translate("Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all domains except those listed in the whitelist file. ")
|
||||
.. translate("You can use this restrictive blocklist manually e.g. for guest wifi or kidsafe configurations."))
|
||||
e8.default = e8.disabled
|
||||
e8.rmempty = true
|
||||
e9.default = e9.disabled
|
||||
e9.rmempty = true
|
||||
|
||||
e9 = e:option(Flag, "adb_dnsflush", translate("Flush DNS Cache"),
|
||||
translate("Flush DNS Cache after adblock processing."))
|
||||
|
@ -244,13 +152,13 @@ e9.default = e9.disabled
|
|||
e9.rmempty = true
|
||||
|
||||
e10 = e:option(Flag, "adb_notify", translate("Email Notification"),
|
||||
translate("Send notification emails in case of a processing error or if domain count is ≤ 0.<br />")
|
||||
translate("Send notification emails in case of a processing error or if domain count is ≤ 0. ")
|
||||
.. translate("Please note: this needs additional 'msmtp' package installation and setup."))
|
||||
e10.default = e10.disabled
|
||||
e10.rmempty = true
|
||||
|
||||
e11 = 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("Raise the minimum email notification count, to get emails if the overall count is less or equal to the given limit (default 0), ")
|
||||
.. translate("e.g. to receive an email notification with every adblock update set this value to 150000."))
|
||||
e11.default = 0
|
||||
e11.datatype = "min(0)"
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
-- 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 util = require("luci.util")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local adbinput = uci:get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist"
|
||||
local fs = require("nixio.fs")
|
||||
local util = require("luci.util")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local input = uci:get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist"
|
||||
|
||||
if not fs.access(adbinput) then
|
||||
if not fs.access(input) then
|
||||
m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
|
||||
m.reset = false
|
||||
m.submit = false
|
||||
return m
|
||||
end
|
||||
|
||||
if fs.stat(adbinput).size >= 102400 then
|
||||
if fs.stat(input).size >= 102400 then
|
||||
m = SimpleForm("error", nil,
|
||||
translate("The file size is too large for online editing in LuCI (≥ 100 KB). ")
|
||||
.. translate("Please edit this file directly in a terminal session."))
|
||||
|
@ -28,7 +28,7 @@ m.submit = translate("Save")
|
|||
m.reset = false
|
||||
|
||||
s = m:section(SimpleSection, nil,
|
||||
translatef("This form allows you to modify the content of the adblock whitelist (%s).<br />", adbinput)
|
||||
translatef("This form allows you to modify the content of the adblock whitelist (%s). ", input)
|
||||
.. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
|
||||
|
||||
f = s:option(TextValue, "data")
|
||||
|
@ -37,11 +37,15 @@ f.rows = 20
|
|||
f.rmempty = true
|
||||
|
||||
function f.cfgvalue()
|
||||
return fs.readfile(adbinput) or ""
|
||||
return fs.readfile(input) or ""
|
||||
end
|
||||
|
||||
function f.write(self, section, data)
|
||||
return fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
return fs.writefile(input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
|
||||
end
|
||||
|
||||
function f.remove(self, section, value)
|
||||
return fs.writefile(input, "")
|
||||
end
|
||||
|
||||
function s.handle(self, state, data)
|
||||
|
|
|
@ -4,81 +4,65 @@ 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
|
||||
local anonclass = (not self.anonymous or self.sectiontitle) and "named" or "anonymous"
|
||||
-%>
|
||||
|
||||
<style type="text/css">
|
||||
.table.cbi-section-table .th,
|
||||
.table.cbi-section-table .td,
|
||||
.cbi-section-table-cell,
|
||||
.cbi-section-table-row
|
||||
.cbi-section-table-row,
|
||||
.tr[data-title]::before
|
||||
{
|
||||
text-align:left;
|
||||
vertical-align:top;
|
||||
margin-right:auto;
|
||||
margin-left:0px;
|
||||
padding-left:2px;
|
||||
line-height:20px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
margin-left: 0px;
|
||||
padding-left: 2px;
|
||||
}
|
||||
.table.cbi-section-table .th
|
||||
{
|
||||
white-space:nowrap;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.table.cbi-section-table input
|
||||
{
|
||||
width:7em;
|
||||
width: 7em;
|
||||
}
|
||||
.cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
|
||||
.table.cbi-section-table input
|
||||
{
|
||||
width: 7em;
|
||||
}
|
||||
|
||||
.cbi-input-text
|
||||
{
|
||||
text-align:left;
|
||||
padding-left:2px;
|
||||
outline:none;
|
||||
box-shadow:none;
|
||||
background:transparent;
|
||||
height:20px;
|
||||
width:10em;
|
||||
text-align: left;
|
||||
padding-left: 2px;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
background: transparent;
|
||||
width: 7em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<%-
|
||||
local anonclass = (not self.anonymous or self.sectiontitle) and "named" or "anonymous"
|
||||
local titlename = ifattr(not self.anonymous or self.sectiontitle, "data-title", translate("Name"))
|
||||
-%>
|
||||
|
||||
<fieldset class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
|
||||
<div class="cbi-section" id="cbi-<%=self.config%>-<%=self.sectiontype%>">
|
||||
<% if self.title then -%>
|
||||
<legend><%=self.title%></legend>
|
||||
<h3><%=self.title%></h3>
|
||||
<%- end %>
|
||||
<div class="cbi-section-descr"><%=self.description%></div>
|
||||
<div class="cbi-section-node">
|
||||
<div class="table cbi-section-table">
|
||||
<div class="tr cbi-section-table-titles <%=anonclass%>"<%=titlename%>>
|
||||
<div class="tr cbi-section-table-titles <%=anonclass%>">
|
||||
<%- for i, k in pairs(self.children) do -%>
|
||||
<div class="th cbi-section-table-cell"<%=width(k)%>>
|
||||
<div class="th cbi-section-table-cell">
|
||||
<%-=k.title-%>
|
||||
</div>
|
||||
<%- end -%>
|
||||
</div>
|
||||
<%- local isempty = true
|
||||
<%- local section, scope, isempty = true
|
||||
for i, k in ipairs(self:cfgsections()) do
|
||||
local section = k
|
||||
local sectionname = striptags((type(self.sectiontitle) == "function") and self:sectiontitle(section) or k)
|
||||
local sectiontitle = ifattr(sectionname and (not self.anonymous or self.sectiontitle), "data-title", sectionname)
|
||||
|
||||
section = k
|
||||
local sectionname = striptags((type(self.sectiontitle) == "function") and self:sectiontitle(section) or k)
|
||||
local sectiontitle = ifattr(sectionname and (not self.anonymous or self.sectiontitle), "data-title", sectionname, true)
|
||||
isempty = false
|
||||
scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" }
|
||||
-%>
|
||||
|
@ -95,4 +79,4 @@ end
|
|||
<%- end -%>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
|
|
@ -4,17 +4,47 @@ This is free software, licensed under the Apache License, Version 2.0
|
|||
-%>
|
||||
|
||||
<%+header%>
|
||||
|
||||
<div class="cbi-map">
|
||||
<fieldset class="cbi-section">
|
||||
<div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for adblock related messages only.%></div>
|
||||
<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>
|
||||
<style type="text/css">
|
||||
select[readonly],
|
||||
textarea[readonly]
|
||||
{
|
||||
width: 100%;
|
||||
height: 450px;
|
||||
border: 1px solid #cccccc;
|
||||
padding: 5px;
|
||||
font-size: 12px;
|
||||
font-family: monospace;
|
||||
resize: none;
|
||||
pointer-events: auto;
|
||||
cursor: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
var textarea = document.getElementById('logread_id');
|
||||
textarea.scrollTop = textarea.scrollHeight;
|
||||
//<![CDATA[
|
||||
function log_update()
|
||||
{
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "adblock", "logread")%>', null,
|
||||
function(x)
|
||||
{
|
||||
if (!x)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var view = document.getElementById("view_id");
|
||||
view.value = x.responseText;
|
||||
view.scrollTop = view.scrollHeight;
|
||||
});
|
||||
}
|
||||
window.onload = log_update();
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
<div class="cbi-map">
|
||||
<div class="cbi-section">
|
||||
<div class="cbi-section-descr"><%:The syslog output, pre-filtered for adblock related messages only.%></div>
|
||||
<textarea id="view_id" readonly="readonly" wrap="off" value=""></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%+footer%>
|
||||
|
|
|
@ -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,7 +12,7 @@ This is free software, licensed under the Apache License, Version 2.0
|
|||
function update_status(data)
|
||||
{
|
||||
var domain = data.value;
|
||||
var input = document.getElementById('query_input');
|
||||
var input = document.getElementById('query_input');
|
||||
var output = document.getElementById('query_output');
|
||||
|
||||
if (input && output)
|
||||
|
@ -45,20 +45,20 @@ This is free software, licensed under the Apache License, Version 2.0
|
|||
|
||||
<form method="post" action="<%=REQUEST_URI%>">
|
||||
<div class="cbi-map">
|
||||
<fieldset class="cbi-section">
|
||||
<div class="cbi-section">
|
||||
<div class="cbi-section-descr"><%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%></div>
|
||||
<div style="width:33%; float:left;">
|
||||
<input style="margin: 5px 0" type="text" value="google.com" name="input" />
|
||||
<input type="text" value="google.com" name="input" />
|
||||
<input type="button" value="<%:Query%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.input)" />
|
||||
</div>
|
||||
<br style="clear:both" />
|
||||
<br />
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<fieldset class="cbi-section" style="display:none">
|
||||
<legend id="query_input"><%:Collecting data...%></legend>
|
||||
<div class="cbi-section" style="display:none">
|
||||
<h3 id="query_input"><%:Collecting data...%></h3>
|
||||
<span id="query_output"></span>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<%+footer%>
|
||||
|
|
|
@ -3,8 +3,199 @@ Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
|
|||
This is free software, licensed under the Apache License, Version 2.0
|
||||
-%>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
<style type="text/css">
|
||||
.runtime
|
||||
{
|
||||
color: #37c;
|
||||
font-weight: bold;
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
padding-top: 0.5rem;
|
||||
}
|
||||
</style>
|
||||
|
||||
<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="outline:none;border:none;box-shadow:none;background:transparent;color:#0069d6;font-weight:bold;line-height:30px;height:30px;width:20em;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
function status_update(json)
|
||||
{
|
||||
var btn1 = document.getElementById("btn1");
|
||||
var btn1_running = document.getElementById("btn1_running");
|
||||
var btn2 = document.getElementById("btn2");
|
||||
var btn2_running = document.getElementById("btn2_running");
|
||||
var input = json.data.adblock_status || "-";
|
||||
|
||||
<%+cbi/valuefooter%>
|
||||
document.getElementById("value_1").innerHTML = input;
|
||||
if (input === "enabled")
|
||||
{
|
||||
btn1.value = "<%:Suspend%>";
|
||||
btn1.name = "do_suspend";
|
||||
btn2.value = "<%:Refresh%>";
|
||||
btn2.name = "do_refresh";
|
||||
btn1.disabled = false;
|
||||
running(btn1_running, 0);
|
||||
btn2.disabled = false;
|
||||
running(btn2_running, 0);
|
||||
}
|
||||
else if (input === "paused")
|
||||
{
|
||||
btn1.value = "<%:Resume%>";
|
||||
btn1.name = "do_resume";
|
||||
btn2.value = "<%:Refresh%>";
|
||||
btn2.name = "do_refresh";
|
||||
btn1.disabled = false;
|
||||
running(btn1_running, 0);
|
||||
btn2.disabled = false;
|
||||
running(btn2_running, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
btn1.value = "<%:Suspend%>";
|
||||
btn1.name = "do_suspend";
|
||||
btn2.value = "<%:Refresh%>";
|
||||
btn2.name = "do_refresh";
|
||||
btn1.disabled = true;
|
||||
btn2.disabled = true;
|
||||
}
|
||||
|
||||
document.getElementById("value_2").innerHTML = json.data.adblock_version || "-";
|
||||
document.getElementById("value_3").innerHTML = json.data.fetch_utility || "-";
|
||||
document.getElementById("value_4").innerHTML = json.data.dns_backend || "-";
|
||||
document.getElementById("value_5").innerHTML = json.data.overall_domains || "-";
|
||||
document.getElementById("value_6").innerHTML = json.data.last_rundate || "-";
|
||||
}
|
||||
|
||||
function btn_action(action)
|
||||
{
|
||||
var btn1 = document.getElementById("btn1");
|
||||
var btn1_running = document.getElementById("btn1_running");
|
||||
var btn2 = document.getElementById("btn2");
|
||||
var btn2_running = document.getElementById("btn2_running");
|
||||
|
||||
btn1.disabled = true;
|
||||
btn2.disabled = true;
|
||||
|
||||
if (action.name === "do_refresh")
|
||||
{
|
||||
running(btn2_running, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
running(btn1_running, 1);
|
||||
}
|
||||
|
||||
new XHR.get('<%=luci.dispatcher.build_url("admin", "services", "adblock")%>/action/' + action.name, null,
|
||||
function(x)
|
||||
{
|
||||
if (!x)
|
||||
{
|
||||
return;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function running(element, state)
|
||||
{
|
||||
if (state === 1)
|
||||
{
|
||||
var running_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
|
||||
element.innerHTML = running_html;
|
||||
}
|
||||
else
|
||||
{
|
||||
element.innerHTML = '';
|
||||
}
|
||||
}
|
||||
|
||||
function reset_view()
|
||||
{
|
||||
document.getElementById("btn1").value = "<%:Suspend%>";
|
||||
document.getElementById("btn1").name = "do_suspend";
|
||||
document.getElementById("btn2").value = "<%:Refresh%>";
|
||||
document.getElementById("btn2").name = "do_refresh";
|
||||
document.getElementById("btn1").disabled = true;
|
||||
document.getElementById("btn2").disabled = true;
|
||||
document.getElementById("value_1").innerHTML = "-";
|
||||
document.getElementById("value_2").innerHTML = "-";
|
||||
document.getElementById("value_3").innerHTML = "-";
|
||||
document.getElementById("value_4").innerHTML = "-";
|
||||
document.getElementById("value_5").innerHTML = "-";
|
||||
document.getElementById("value_6").innerHTML = "-";
|
||||
}
|
||||
|
||||
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "adblock", "status")%>', null,
|
||||
function(x, json_info)
|
||||
{
|
||||
if (!x || !json_info || !json_info.data)
|
||||
{
|
||||
reset_view();
|
||||
return;
|
||||
}
|
||||
status_update(json_info);
|
||||
});
|
||||
|
||||
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "adblock", "status")%>', null,
|
||||
function(x, json_info)
|
||||
{
|
||||
if (!x || !json_info || !json_info.data)
|
||||
{
|
||||
reset_view();
|
||||
return;
|
||||
}
|
||||
status_update(json_info);
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
<h3><%:Runtime Information%></h3>
|
||||
<div class="cbi-value" id="status_1">
|
||||
<label class="cbi-value-title" for="status_1"><%:Adblock Status%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_1">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="status_2">
|
||||
<label class="cbi-value-title" for="status_2"><%:Adblock Version%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_2">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="status_3">
|
||||
<label class="cbi-value-title" for="status_3"><%:Download Utility (SSL Library)%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_3">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="status_4">
|
||||
<label class="cbi-value-title" for="status_4"><%:DNS Backend (DNS Directory)%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_4">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="status_5">
|
||||
<label class="cbi-value-title" for="status_5"><%:Overall Domains%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_5">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="status_6">
|
||||
<label class="cbi-value-title" for="status_6"><%:Last Run%></label>
|
||||
<div class="cbi-value-field">
|
||||
<span class="runtime" id="value_6">-</span>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="cbi-value" id="button_1">
|
||||
<label class="cbi-value-title" for="button_1"><%:Suspend / Resume Adblock%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input class="cbi-button cbi-button-reset" id="btn1" type="button" value="" onclick="btn_action(this)" />
|
||||
<span id="btn1_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
|
||||
</div>
|
||||
</div>
|
||||
<p />
|
||||
<div class="cbi-value" id="button_2">
|
||||
<label class="cbi-value-title" for="button_2"><%:Refresh Blocklist Sources%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input class="cbi-button cbi-button-apply" id="btn2" type="button" value="" onclick="btn_action(this)" />
|
||||
<span id="btn2_running" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,33 +1,31 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 17/09/2017\n"
|
||||
"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.3\n"
|
||||
"PO-Revision-Date: 2020-11-12 02:29+0000\n"
|
||||
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadblock/it/>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
|
||||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr ""
|
||||
|
||||
msgid "-------"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
msgstr ""
|
||||
"<b>Attenzione:</b> al fine di prevenire errori OOM su dispositivi con meno "
|
||||
"di 64 MB RAM disponibili, per favore selezionane solamente alcune!"
|
||||
|
||||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Registro Adblock"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Status Adblock"
|
||||
|
||||
|
@ -41,7 +39,7 @@ msgid "Advanced"
|
|||
msgstr "Avanzato"
|
||||
|
||||
msgid "Archive Categories"
|
||||
msgstr ""
|
||||
msgstr "Archivia Categorie"
|
||||
|
||||
msgid "Backup Directory"
|
||||
msgstr "Directory del Backup"
|
||||
|
@ -53,11 +51,11 @@ msgid "Blocklist Sources"
|
|||
msgstr "Fonti lista di Blocco"
|
||||
|
||||
msgid "Blocklist not found!"
|
||||
msgstr ""
|
||||
msgstr "Lista di Blocco non trovata!"
|
||||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -68,7 +66,7 @@ msgstr ""
|
|||
"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Raccogliendo dati..."
|
||||
msgstr "Raccolta dati..."
|
||||
|
||||
msgid ""
|
||||
"Configuration of the adblock package to block ad/abuse domains by using DNS."
|
||||
|
@ -82,7 +80,7 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "DNS Backend (DNS Directory)"
|
||||
msgstr ""
|
||||
msgstr "Backend DNS (Directory DNS)"
|
||||
|
||||
msgid "DNS Directory"
|
||||
msgstr "Directory DNS"
|
||||
|
@ -98,10 +96,10 @@ msgstr ""
|
|||
"della lista di blocco."
|
||||
|
||||
msgid "Download Utility"
|
||||
msgstr ""
|
||||
msgstr "Utilità di Scaricamento"
|
||||
|
||||
msgid "Download Utility (SSL Library)"
|
||||
msgstr ""
|
||||
msgstr "Utilità di scaricamento (Libreria SSL)"
|
||||
|
||||
msgid "Edit Blacklist"
|
||||
msgstr "Modifica Lista Nera"
|
||||
|
@ -140,25 +138,24 @@ msgid "Extra Options"
|
|||
msgstr "Opzioni Extra"
|
||||
|
||||
msgid "Flush DNS Cache"
|
||||
msgstr ""
|
||||
msgstr "Pulisci Cache DNS"
|
||||
|
||||
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 'built-in'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
msgstr ""
|
||||
"Per saperne di più, <a href=\"%s\" target=\"_blank\">consultare la "
|
||||
"documentazione su internet</a>"
|
||||
|
||||
msgid ""
|
||||
"For further performance improvements you can raise this value, e.g. '8' or "
|
||||
"'16' should be safe."
|
||||
msgstr ""
|
||||
"Per mingliorare le performance in futuro puoi aumentare questo valore, '8' o "
|
||||
"'16' dovrebbero essere sicuri."
|
||||
|
||||
msgid "Force Local DNS"
|
||||
msgstr "Forza DNS Locale"
|
||||
|
@ -167,7 +164,7 @@ msgid "Force Overall Sort"
|
|||
msgstr "Forza Ordinamento Globale"
|
||||
|
||||
msgid "Full path to the whitelist file."
|
||||
msgstr ""
|
||||
msgstr "Percorso completo del file della whitelist."
|
||||
|
||||
msgid "Input file not found, please check your configuration."
|
||||
msgstr "File di input non trovato, per favore controlla la tua configurazione."
|
||||
|
@ -177,21 +174,26 @@ msgstr "Ultimo Avvio"
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
"Elenco delle interfacce di rete disponibili. Di solito l'avvio verrà "
|
||||
"attivato dall'interfaccia 'wan'."
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr ""
|
||||
"Lista dei backend DNS supportati con la loro directory di default di esporto "
|
||||
"della lista.<br />"
|
||||
"Elenco di backend DNS supportati con la directory di esportazione "
|
||||
"dell'elenco predefinito."
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr ""
|
||||
"Elenco delle utility di download supportate e completamente preconfigurate."
|
||||
|
||||
msgid "Loading"
|
||||
msgstr "Caricando"
|
||||
msgstr "Caricamento"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr "Serviio a bassa priorità"
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr ""
|
||||
|
@ -234,12 +236,19 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "Ricaricare"
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr "Aggiorna fonti Blocklist"
|
||||
|
||||
msgid "Resume"
|
||||
msgstr "Riprendi"
|
||||
|
@ -255,12 +264,17 @@ msgstr "Salva"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup Trigger"
|
||||
|
@ -283,19 +297,26 @@ msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
|
|||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr ""
|
||||
"L'output di syslog, pre-filtrato solo per i messaggi relativi ad adblock."
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
"Per rendere effettiva questa modifica è necessario arrestare/riavviare il "
|
||||
"servizio manualmente."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Questo form ti consente di modificare il contenuto della lista nera di "
|
||||
"adblock (%s).<br />"
|
||||
"Questo modulo consente di modificare il contenuto della lista nera di blocco "
|
||||
"degli annunci (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Questo form ti consente di modificare il contenuto della lista bianca di "
|
||||
"adblock (%s).<br />"
|
||||
"Questo modulo consente di modificare il contenuto della whitelist di blocco "
|
||||
"degli annunci (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the main adblock configuration "
|
||||
|
@ -311,13 +332,6 @@ msgstr ""
|
|||
"Questo form ti consente di interrogare le liste di blocco attive per "
|
||||
"determinati domini, p.e. per metterli nella lista bianca."
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr ""
|
||||
"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
|
||||
"solo ad adblock."
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -338,7 +352,7 @@ msgid "Waiting for command to complete..."
|
|||
msgstr "Aspettando che il comando venga completato..."
|
||||
|
||||
msgid "Whitelist File"
|
||||
msgstr ""
|
||||
msgstr "File lista bianca"
|
||||
|
||||
msgid "Yes"
|
||||
msgstr "Sì"
|
||||
|
@ -348,31 +362,32 @@ msgid ""
|
|||
"kidsafe configurations."
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Registro Adblock"
|
||||
|
||||
msgid "error"
|
||||
msgstr "errore"
|
||||
#~ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
#~ msgstr ""
|
||||
#~ "Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "n/d"
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "disabilitato"
|
||||
|
||||
msgid "paused"
|
||||
msgstr "in pausa"
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "abilitato"
|
||||
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
#~ msgid "error"
|
||||
#~ msgstr "errore"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "Dominio invalido specificato!"
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "n/d"
|
||||
|
||||
#~ msgid "paused"
|
||||
#~ msgstr "in pausa"
|
||||
|
||||
#~ msgid "Available blocklist sources."
|
||||
#~ msgstr "Fonti lista di blocco disponibili."
|
||||
|
@ -384,11 +399,6 @@ msgstr ""
|
|||
#~ "Le selezioni degli URL delle liste e categorie Shallalist sono "
|
||||
#~ "configurabili nella sezione 'Avanzato'.<br />"
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr ""
|
||||
#~ "La grandezza del file è troppo grande per modificarla online in LuCI "
|
||||
#~ "(> 512 KB)."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
#~ "'libustream-ssl' or the wget 'built-in'."
|
||||
|
|
|
@ -1,22 +1,21 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.7\n"
|
||||
"PO-Revision-Date: 2020-11-04 00:26+0000\n"
|
||||
"Last-Translator: RyotaGamer <21ryotagamer@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadblock/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr "'Jail' ブロックリストの作成"
|
||||
|
||||
msgid "-------"
|
||||
msgstr "(利用不可)"
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
|
@ -27,9 +26,6 @@ msgstr ""
|
|||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Adblock ログファイル"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Adblock ステータス"
|
||||
|
||||
|
@ -43,7 +39,7 @@ msgid "Advanced"
|
|||
msgstr "詳細設定"
|
||||
|
||||
msgid "Archive Categories"
|
||||
msgstr ""
|
||||
msgstr "アーカイブ カテゴリ"
|
||||
|
||||
msgid "Backup Directory"
|
||||
msgstr "バックアップ先 ディレクトリ"
|
||||
|
@ -55,14 +51,14 @@ msgid "Blocklist Sources"
|
|||
msgstr "ブロックリスト提供元"
|
||||
|
||||
msgid "Blocklist not found!"
|
||||
msgstr ""
|
||||
msgstr "ブロックリストが見つかりません!"
|
||||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
"ホワイトリストに存在しない全ドメインへのアクセスをブロックするために、追加で "
|
||||
"'Jail' リスト (/tmp/adb_list.jail) を作成します。<br />"
|
||||
"'Jail' リスト (/tmp/adb_list.jail) を作成します。"
|
||||
|
||||
msgid ""
|
||||
"Choose 'none' to disable automatic startups, 'timed' to use a classic "
|
||||
|
@ -106,7 +102,7 @@ msgstr ""
|
|||
"ブロックリストを使用します。"
|
||||
|
||||
msgid "Download Utility"
|
||||
msgstr "ダウンロード ユーティリティ"
|
||||
msgstr "ダウンロードユーティリティ"
|
||||
|
||||
msgid "Download Utility (SSL Library)"
|
||||
msgstr "ダウンロード ユーティリティ(SSL ライブラリ)"
|
||||
|
@ -155,13 +151,6 @@ msgstr "DNS キャッシュのクリア"
|
|||
msgid "Flush DNS Cache after adblock processing."
|
||||
msgstr "Adblock 処理の後に DNS キャッシュをクリアします。"
|
||||
|
||||
msgid ""
|
||||
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
"'libustream-ssl' or 'built-in'."
|
||||
msgstr ""
|
||||
"SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要です。"
|
||||
"例: 'libustream-ssl' または 'built-in'"
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
|
@ -193,17 +182,16 @@ msgstr "最終実行"
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
"利用可能なネットワーク インターフェースの一覧です。通常、 'wan' インター"
|
||||
"フェースによりスタートアップがトリガされます。<br />"
|
||||
"利用可能なネットワーク インターフェースの一覧です。通常、スタートアップは "
|
||||
"'wan' インターフェースによってトリガされます。"
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr ""
|
||||
"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク"
|
||||
"トリのリストです<br />"
|
||||
"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先の一覧で"
|
||||
"す。"
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr "サポートされ、かつ設定済のダウンロード ユーティリティの一覧です。"
|
||||
|
@ -211,6 +199,9 @@ msgstr "サポートされ、かつ設定済のダウンロード ユーティ
|
|||
msgid "Loading"
|
||||
msgstr "読込中"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr "優先度が低いサービス"
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr "ダウンロード キューの上限"
|
||||
|
||||
|
@ -251,20 +242,27 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
"メール通知を行うドメイン カウントの下限を設定します。全体カウントが指定された"
|
||||
"値以下の場合、メールを受け取ります(規定値: 0)。<br />"
|
||||
"値以下の場合、メールを受け取ります(規定値: 0)。"
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "リフレッシュ"
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr "ブロックリスト提供元のリフレッシュ"
|
||||
|
||||
msgid "Resume"
|
||||
msgstr "再開"
|
||||
|
||||
msgid "Runtime Information"
|
||||
msgstr "実行情報"
|
||||
msgstr "ランタイム情報"
|
||||
|
||||
msgid "SSL req."
|
||||
msgstr "SSL 必須"
|
||||
|
@ -274,16 +272,20 @@ msgstr "保存"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr "処理エラーまたはドメイン カウントが0以下の場合、メールを送信します。"
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
"処理エラーまたはドメイン カウントが0以下の場合、メールを送信します。<br />"
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
"ダウンロードの制御とリストの処理を同時並行的に行うダウンロード キューのサイズ"
|
||||
"です(既定値: '4')。<br />"
|
||||
"ダウンロードの制御とリストの処理を同時並行的に行う、ダウンロードキューのサイ"
|
||||
"ズです。(規定値: '4')"
|
||||
|
||||
msgid "Startup Trigger"
|
||||
msgstr "スタートアップ トリガ"
|
||||
|
@ -309,19 +311,23 @@ msgstr ""
|
|||
"LuCI上でのオンライン編集を行うには、ファイルサイズが大きすぎます (≥ 100 "
|
||||
"KB)。"
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr "Adblock に関連するメッセージのみが抽出された、システムログ出力です。"
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr "この変更の反映には、手動でのサービスの停止 / 再起動が必要です。"
|
||||
|
||||
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 "
|
||||
|
@ -337,13 +343,6 @@ msgstr ""
|
|||
"このフォームでは、現在有効なリスト内で特定のドメインを検索することができま"
|
||||
"す。例: ホワイトリスト内"
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr ""
|
||||
"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
|
||||
"ます。"
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -376,32 +375,46 @@ msgstr ""
|
|||
"この制約の厳しいブロックリストを、ゲスト WiFi や子供の安全を守る設定などに手"
|
||||
"動で利用することができます。"
|
||||
|
||||
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 "-------"
|
||||
#~ msgstr "(利用不可)"
|
||||
|
||||
msgid "error"
|
||||
msgstr "エラー"
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "利用不可"
|
||||
|
||||
msgid "paused"
|
||||
msgstr "一時停止"
|
||||
|
||||
msgid "running"
|
||||
msgstr "実行中"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Adblock ログファイル"
|
||||
|
||||
#~ msgid "Categories"
|
||||
#~ msgstr "カテゴリー"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "無効なドメインが指定されています!"
|
||||
#~ msgid ""
|
||||
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
#~ "'libustream-ssl' or 'built-in'."
|
||||
#~ msgstr ""
|
||||
#~ "SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要で"
|
||||
#~ "す。例: 'libustream-ssl' または 'built-in'"
|
||||
|
||||
#~ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
#~ msgstr ""
|
||||
#~ "'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
|
||||
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "無効"
|
||||
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "有効"
|
||||
|
||||
#~ msgid "error"
|
||||
#~ msgstr "エラー"
|
||||
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "利用不可"
|
||||
|
||||
#~ msgid "paused"
|
||||
#~ msgstr "一時停止"
|
||||
|
||||
#~ msgid "running"
|
||||
#~ msgstr "実行中"
|
||||
|
|
|
@ -15,9 +15,6 @@ msgstr ""
|
|||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr ""
|
||||
|
||||
msgid "-------"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
|
@ -26,9 +23,6 @@ msgstr ""
|
|||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Arquivo de log do Adblock"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr ""
|
||||
|
||||
|
@ -60,7 +54,7 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -145,11 +139,6 @@ 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 'built-in'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
|
@ -177,12 +166,11 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr ""
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
|
@ -191,6 +179,9 @@ msgstr ""
|
|||
msgid "Loading"
|
||||
msgstr "Carregando"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr ""
|
||||
|
||||
|
@ -229,10 +220,18 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr ""
|
||||
|
||||
msgid "Resume"
|
||||
|
@ -249,12 +248,17 @@ msgstr "Salvar"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup Trigger"
|
||||
|
@ -277,19 +281,25 @@ msgstr ""
|
|||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr ""
|
||||
"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
|
||||
"adblock apenas."
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Esse formulário permite que você modifique o conteúdo das listas de bloqueio "
|
||||
"do adblock (%s).<br />"
|
||||
"do adblock (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Esse formulário permite que você modifique o conteúdo das listas de "
|
||||
"permissão do adblock (%s).<br />"
|
||||
"permissão do adblock (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the main adblock configuration "
|
||||
|
@ -305,13 +315,6 @@ msgstr ""
|
|||
"Esse formulário permite que você consulte listas de blocos ativos para "
|
||||
"certos domínios, e.x. para listas de permissão."
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr ""
|
||||
"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
|
||||
"adblock apenas."
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -340,40 +343,20 @@ msgid ""
|
|||
"kidsafe configurations."
|
||||
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 ""
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Arquivo de log do Adblock"
|
||||
|
||||
msgid "error"
|
||||
msgstr ""
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "n/d"
|
||||
|
||||
msgid "paused"
|
||||
msgstr ""
|
||||
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "Domínio especificado inválido!"
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "n/d"
|
||||
|
||||
#~ msgid "Available blocklist sources."
|
||||
#~ msgstr "Fontes de listas de bloqueio disponíveis."
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr ""
|
||||
#~ "O tamanho do arquivo é muito grande para edição online no LuCI (> 512 "
|
||||
#~ "KB)."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
#~ "'libustream-ssl' or the wget 'built-in'."
|
||||
|
|
|
@ -1,79 +1,77 @@
|
|||
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-02-07 00:23+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"
|
||||
"PO-Revision-Date: 2020-10-09 00:10+0000\n"
|
||||
"Last-Translator: Artem <KovalevArtem.ru@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadblock/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: Weblate 4.3-dev\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr "Создание Черного<br />списка 'Jail'"
|
||||
|
||||
msgid "-------"
|
||||
msgstr "-------"
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
msgstr ""
|
||||
"<b>Внимание:</b> Для предотвращения переполнения оперативной памяти, на "
|
||||
"устройствах с менее 64 MB, выбирайте только необходимый минимум списков!"
|
||||
|
||||
msgid "Adblock"
|
||||
msgstr "AdBlock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Ведение системного журала Adblock-ом"
|
||||
msgstr "Adblock Блокировщик рекламы"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Состояние Adblock-а"
|
||||
msgstr "Состояние Adblock"
|
||||
|
||||
msgid "Adblock Version"
|
||||
msgstr "Версия Adblock-а"
|
||||
msgstr "Версия Adblock"
|
||||
|
||||
msgid "Additional trigger delay in seconds before adblock processing begins."
|
||||
msgstr "Дополнительная задержка в секундах до начала работы Adblock-a."
|
||||
msgstr "Дополнительная задержка в секундах до начала работы Adblock."
|
||||
|
||||
msgid "Advanced"
|
||||
msgstr "Дополнительно"
|
||||
|
||||
msgid "Archive Categories"
|
||||
msgstr ""
|
||||
msgstr "Категории списков"
|
||||
|
||||
msgid "Backup Directory"
|
||||
msgstr "Папка для бэкапа"
|
||||
msgstr "Папка для резервных копий"
|
||||
|
||||
msgid "Backup Mode"
|
||||
msgstr "Режим сохранения бекапа"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Blocklist Sources"
|
||||
msgstr "Источники списков блокировки"
|
||||
msgstr "Источники черных списков"
|
||||
|
||||
msgid "Blocklist not found!"
|
||||
msgstr ""
|
||||
msgstr "Список блокировок не найден!"
|
||||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
"Создать дополнительный Черный список 'Jail' (/tmp/adb_list.jail), чтобы "
|
||||
"заблокировать доступ ко всем доменам, кроме тех что перечислены в файле "
|
||||
"Белого списка.<br />"
|
||||
"Белого списка."
|
||||
|
||||
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 сек.) или выберите другой "
|
||||
"интерфейс запуска."
|
||||
"использовать стандартную задержку (по умолчанию 30 сек.) или выберите другой "
|
||||
"интерфейс для запуска."
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Сбор данных..."
|
||||
|
@ -81,15 +79,15 @@ msgstr "Сбор данных..."
|
|||
msgid ""
|
||||
"Configuration of the adblock package to block ad/abuse domains by using DNS."
|
||||
msgstr ""
|
||||
"Настройка Adblock. Приложения для блокировки ненадежных или добавления "
|
||||
"доверенных доменов используя DNS. "
|
||||
"Настройка 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)"
|
||||
|
@ -104,14 +102,14 @@ msgid ""
|
|||
"Do not automatically update blocklists during startup, use blocklist backups "
|
||||
"instead."
|
||||
msgstr ""
|
||||
"Не обновляйте списки блокировок автоматически во время запуска, вместо этого "
|
||||
"используйте резервные копии списков блокировок."
|
||||
"Не обновлять списки блокировок автоматически во время запуска, вместо этого "
|
||||
"использовать резервные копии списков блокировок."
|
||||
|
||||
msgid "Download Utility"
|
||||
msgstr "Скачать утилиту"
|
||||
msgstr "Утилита для скачивания"
|
||||
|
||||
msgid "Download Utility (SSL Library)"
|
||||
msgstr "Загрузить утилиту (библиотека SSL)"
|
||||
msgstr "Утилита для скачивания (с библиотекой SSL)"
|
||||
|
||||
msgid "Edit Blacklist"
|
||||
msgstr "Редактировать Черный список"
|
||||
|
@ -123,26 +121,28 @@ msgid "Edit Whitelist"
|
|||
msgstr "Редактировать Белый список"
|
||||
|
||||
msgid "Email Notification"
|
||||
msgstr "Уведомление на email"
|
||||
msgstr "Email уведомления"
|
||||
|
||||
msgid "Email Notification Count"
|
||||
msgstr "Кол-во уведомлений на email"
|
||||
msgstr "Кол-во email уведомлений"
|
||||
|
||||
msgid "Enable Adblock"
|
||||
msgstr "Включить Adblock"
|
||||
|
||||
msgid "Enable Blocklist Backup"
|
||||
msgstr "Включить сохранение<br />списка блокировок"
|
||||
msgstr "Бэкап списка блокировок"
|
||||
|
||||
msgid ""
|
||||
"Enable memory intense overall sort / duplicate removal on low memory devices "
|
||||
"(< 64 MB free RAM)"
|
||||
msgstr ""
|
||||
"Включите полную сортировку / удаление дубликатов памяти на устройствах с "
|
||||
"низким объемом памяти (< 64 MB свободной оперативной памяти)."
|
||||
"Включить полную сортировку / удаление дубликатов в памяти. Используйте на "
|
||||
"устройствах с низким объемом памяти (< 64 MB свободной оперативной "
|
||||
"памяти)."
|
||||
|
||||
msgid "Enable verbose debug logging in case of any processing error."
|
||||
msgstr "Включите подробное ведение журнала отладки в случае ошибки обработки."
|
||||
msgstr ""
|
||||
"Включить ведение подробного журнала для отладки в случае ошибок обработки."
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Включено"
|
||||
|
@ -154,14 +154,7 @@ 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 'built-in'."
|
||||
msgstr ""
|
||||
"Для SSL-защищенных источников списков блокировки, вам нужны подходящие SSL "
|
||||
"библиотеки, например 'libustream-ssl' или 'built-in'."
|
||||
msgstr "Очистка DNS-кэша после обработки Adblock-ом."
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
|
@ -174,46 +167,49 @@ msgid ""
|
|||
"For further performance improvements you can raise this value, e.g. '8' or "
|
||||
"'16' should be safe."
|
||||
msgstr ""
|
||||
"Для повышения производительности вы можете увеличить это значение, например "
|
||||
"значения '8' или '16' повысят безопасность."
|
||||
"<br />Для повышения производительности вы можете увеличить это значение, "
|
||||
"например значения '8' или '16' должны быть безопасными."
|
||||
|
||||
msgid "Force Local DNS"
|
||||
msgstr "Назначить локальный DNS"
|
||||
msgstr "Локальный DNS"
|
||||
|
||||
msgid "Force Overall Sort"
|
||||
msgstr "Назначить полную сортировку"
|
||||
msgstr "Принудительная полная сортировка"
|
||||
|
||||
msgid "Full path to the whitelist file."
|
||||
msgstr "Полный путь к файлу Белого списка."
|
||||
|
||||
msgid "Input file not found, please check your configuration."
|
||||
msgstr "Config файл не найден, настройте config файл."
|
||||
msgstr "Config файл не найден, пожалуйста, проверьте ваши настройки."
|
||||
|
||||
msgid "Last Run"
|
||||
msgstr "Последнее время запуска"
|
||||
msgstr "Последний запуск"
|
||||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
"Список доступных сетевых интерфейсов. По умолчанию установлен 'wan' "
|
||||
"интерфейс.<br />"
|
||||
"Список доступных сетевых интерфейсов. \tОбычно запускается ‘wan’ интерфейсом."
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr ""
|
||||
"Список поддерживаемых серверов DNS перемещается в папку по умолчанию.<br />"
|
||||
"Список поддерживаемых бэкэндов DNS с каталогом экспортных директорий по "
|
||||
"умолчанию."
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr ""
|
||||
"Список поддерживаемых и полностью предварительно настроенных утилит загрузки."
|
||||
"Список поддерживаемых и полностью предварительно настроенных утилит для "
|
||||
"скачивания."
|
||||
|
||||
msgid "Loading"
|
||||
msgstr "Загрузка"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr "Низкий приоритет службы"
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr "Максимальное значение очереди загрузки"
|
||||
msgstr "Макс. очередь загрузки"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Нет"
|
||||
|
@ -225,20 +221,20 @@ msgstr ""
|
|||
"подходят для вас."
|
||||
|
||||
msgid "Overall Domains"
|
||||
msgstr "Итоговые домены"
|
||||
msgstr "Всего доменов"
|
||||
|
||||
msgid "Overview"
|
||||
msgstr "Главное меню"
|
||||
msgstr "Обзор"
|
||||
|
||||
msgid ""
|
||||
"Please add only one domain per line. Comments introduced with '#' are "
|
||||
"allowed - ip addresses, wildcards and regex are not."
|
||||
msgstr ""
|
||||
"Добавляйте только один домен в строке. Комментарии вводятся используя '#' "
|
||||
"разрешенные - ip адреса, метасимволы и нерегулярные выражения."
|
||||
"Добавляйте только один домен на строку. Комментарии вводятся используя '#'. "
|
||||
"IP адреса, wildcard и регулярные выражения запрещены."
|
||||
|
||||
msgid "Please edit this file directly in a terminal session."
|
||||
msgstr "Отредактируйте данный файл, строго в терминале."
|
||||
msgstr "Редактируйте данный файл только в терминале."
|
||||
|
||||
msgid ""
|
||||
"Please note: this needs additional 'msmtp' package installation and setup."
|
||||
|
@ -252,14 +248,21 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
"Увеличьте количество уведомлений по email, чтобы получить сообщения, если "
|
||||
"общее количество меньше или равно заданному пределу (по умолчанию 0),<br />"
|
||||
"Увеличьте количество email уведомлений, чтобы получить сообщения, если общее "
|
||||
"количество меньше или равно заданному пределу (по умолчанию 0),"
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
"Перенаправлять все DNS запросы с интерфейса 'lan' на обработку Adblock-ом."
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "Обновить"
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr "Обновить источники списков блокировок"
|
||||
|
||||
msgid "Resume"
|
||||
msgstr "Возобновить"
|
||||
|
@ -275,20 +278,23 @@ msgstr "Сохранить"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
"Отправлять email уведомления в случае ошибки обработки или если количество "
|
||||
"обработанных доменов равно 0."
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
"Отправлять по email уведомления в случае ошибки обработки или если домен "
|
||||
"≤ 0.<br />"
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
msgstr ""
|
||||
"Значение очереди загрузки для выполнения параллельных загрузок (по умолчанию "
|
||||
"'4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr "Размер очереди параллельных загрузок & ('4' по умолчанию)."
|
||||
|
||||
msgid "Startup Trigger"
|
||||
msgstr "Назначить"
|
||||
msgstr "Автозапуск после"
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Приостановить"
|
||||
|
@ -300,61 +306,64 @@ msgid ""
|
|||
"Target directory for adblock backups. Please use only non-volatile disks, e."
|
||||
"g. an external usb stick."
|
||||
msgstr ""
|
||||
"Назначить папку для резервного копирования Adblock. Используйте такие "
|
||||
"накопители, как usb флешка."
|
||||
"Папка для бэкапов списков блокировок. Используйте такие накопители, как usb "
|
||||
"флешка."
|
||||
|
||||
msgid "Target directory for the generated blocklist 'adb_list.overall'."
|
||||
msgstr "Назначить папку для создания списка блокировки 'adb_list.overall'."
|
||||
msgstr "Папка для созданного списка блокировки 'adb_list.overall'."
|
||||
|
||||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
"Этот файл слишком большой для редактирования в Web-интерфейсе LuCI (≥ 100 "
|
||||
"KB)."
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr ""
|
||||
"Вывод системного журнала, предварительно отфильтрованный только для "
|
||||
"сообщений, связанных с adblock."
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
"Это изменение требует ручной остановки и повторного запуска, чтобы вступить "
|
||||
"в силу."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Страница позволяет изменять содержимое Черного списка Adblock (%s).<br />"
|
||||
msgstr "Эта форма позволяет изменять содержимое черного списка adblock (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Страница позволяет изменять содержимое Белого списка Adblock (%s).<br />"
|
||||
msgstr "Эта форма позволяет изменять содержимое белого списка adblock (%s)."
|
||||
|
||||
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-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 ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
msgstr ""
|
||||
"Чтобы заменить дефолтный путь, используйте строку ниже 'Папка DNS' в разделе "
|
||||
"Чтобы заменить путь по умолчанию, используйте пункт 'Папка DNS' в разделе "
|
||||
"'Дополнительные настройки'."
|
||||
|
||||
msgid "Trigger Delay"
|
||||
msgstr "Задержка запуска"
|
||||
|
||||
msgid "Verbose Debug Logging"
|
||||
msgstr "Подробное ведение<br />журнала отладки"
|
||||
msgstr "Подробный журнал отладки"
|
||||
|
||||
msgid "View Logfile"
|
||||
msgstr "Показать системный журнал"
|
||||
msgstr "Системный журнал"
|
||||
|
||||
msgid "Waiting for command to complete..."
|
||||
msgstr "Ожидание завершения выполнения команды..."
|
||||
|
@ -372,33 +381,47 @@ msgstr ""
|
|||
"Вы можете вручную настраивать и использовать этот Черный список, например "
|
||||
"для гостевой wifi сети или режима родительского контроля."
|
||||
|
||||
msgid "disabled"
|
||||
msgstr "отключено"
|
||||
|
||||
msgid ""
|
||||
"e.g. to receive an email notification with every adblock update set this "
|
||||
"value to 150000."
|
||||
msgstr ""
|
||||
"например, чтобы получать уведомления по электронной почте при каждом "
|
||||
"обновлении Adblock-а установите значение 150000."
|
||||
"например, чтобы получать email уведомления при каждом обновлении Adblock-а "
|
||||
"установите значение 150000."
|
||||
|
||||
msgid "enabled"
|
||||
msgstr "включено"
|
||||
#~ msgid "-------"
|
||||
#~ msgstr "-------"
|
||||
|
||||
msgid "error"
|
||||
msgstr "ошибка"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Системный журнал Adblock"
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "нет данных"
|
||||
#~ msgid ""
|
||||
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
#~ "'libustream-ssl' or 'built-in'."
|
||||
#~ msgstr ""
|
||||
#~ "Для SSL-защищенных источников списков блокировки, вам нужны подходящие "
|
||||
#~ "SSL библиотеки, например 'libustream-ssl' или 'built-in'."
|
||||
|
||||
msgid "paused"
|
||||
msgstr "остановлено"
|
||||
#~ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
#~ msgstr ""
|
||||
#~ "Перенаправлять все DNS запросы с интерфейса 'lan' на обработку Adblock-ом."
|
||||
|
||||
msgid "running"
|
||||
msgstr "работает"
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "отключено"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "Задан недопустимый домен!"
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "включено"
|
||||
|
||||
#~ msgid "error"
|
||||
#~ msgstr "ошибка"
|
||||
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "нет данных"
|
||||
|
||||
#~ msgid "paused"
|
||||
#~ msgstr "приостановлено"
|
||||
|
||||
#~ msgid "running"
|
||||
#~ msgstr "работает"
|
||||
|
||||
#~ msgid "Available blocklist sources."
|
||||
#~ msgstr "Источники списков блокировки. "
|
||||
|
@ -430,10 +453,5 @@ msgstr "работает"
|
|||
#~ msgid "Please update your adblock config file to use this package.<br />"
|
||||
#~ msgstr "Обновите config файл Adblock, чтобы использовать этот пакет.<br />"
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr ""
|
||||
#~ "Размер файла слишком большой, для онлайн редактирования в LuCI (> 512 "
|
||||
#~ "KB)."
|
||||
|
||||
#~ msgid "This section contains no values yet"
|
||||
#~ msgstr "Здесь не содержатся необходимые значения"
|
||||
|
|
|
@ -1,23 +1,28 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-09-23 14:41+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <dsmusicever@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadblock/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3-dev\n"
|
||||
|
||||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr ""
|
||||
|
||||
msgid "-------"
|
||||
msgstr "-------"
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
msgstr ""
|
||||
"<b>Varning:</b> För att förhindra OOM-undantag på enheter med lågt minne med "
|
||||
"mindre än 64 MB ledigt RAM-minne, välj bara några av dem!"
|
||||
|
||||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Adblock's loggfil"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Status för Adblock"
|
||||
|
||||
|
@ -26,12 +31,14 @@ msgstr "Version av Adblock"
|
|||
|
||||
msgid "Additional trigger delay in seconds before adblock processing begins."
|
||||
msgstr ""
|
||||
"Ytterligare trigger fördröjning i sekunder innan Adblock-bearbetningen "
|
||||
"påbörjas."
|
||||
|
||||
msgid "Advanced"
|
||||
msgstr "Avancerat"
|
||||
|
||||
msgid "Archive Categories"
|
||||
msgstr ""
|
||||
msgstr "Arkiv kategorier"
|
||||
|
||||
msgid "Backup Directory"
|
||||
msgstr "Säkerhetskopiera mapp"
|
||||
|
@ -43,11 +50,11 @@ msgid "Blocklist Sources"
|
|||
msgstr "Källor för blockeringslistor"
|
||||
|
||||
msgid "Blocklist not found!"
|
||||
msgstr ""
|
||||
msgstr "Blocklista hittades inte!"
|
||||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -89,7 +96,7 @@ msgstr ""
|
|||
"säkerhetskopierade blockeringslistor istället."
|
||||
|
||||
msgid "Download Utility"
|
||||
msgstr ""
|
||||
msgstr "Ladda ner verktyget"
|
||||
|
||||
msgid "Download Utility (SSL Library)"
|
||||
msgstr "Nerladdningsprogram (SSL-bibliotek)"
|
||||
|
@ -121,7 +128,7 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
msgid "Enable verbose debug logging in case of any processing error."
|
||||
msgstr ""
|
||||
msgstr "Aktivera utförlig felsökningsloggning vid eventuella bearbetningsfel."
|
||||
|
||||
msgid "Enabled"
|
||||
msgstr "Aktiverad"
|
||||
|
@ -130,25 +137,24 @@ msgid "Extra Options"
|
|||
msgstr "Extra alternativ"
|
||||
|
||||
msgid "Flush DNS Cache"
|
||||
msgstr ""
|
||||
msgstr "Töm DNS-cache"
|
||||
|
||||
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 'built-in'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
msgstr ""
|
||||
"För ytterligare information <a href=\"%s\" target=\"_blank\">läs online-"
|
||||
"dokumentationen</a>"
|
||||
|
||||
msgid ""
|
||||
"For further performance improvements you can raise this value, e.g. '8' or "
|
||||
"'16' should be safe."
|
||||
msgstr ""
|
||||
"För ytterligare prestandaförbättringar kan du höja detta värde, t.ex. \"8\" "
|
||||
"eller \"16\" bör vara säkra."
|
||||
|
||||
msgid "Force Local DNS"
|
||||
msgstr "Tvinga lokal DNS"
|
||||
|
@ -157,7 +163,7 @@ msgid "Force Overall Sort"
|
|||
msgstr ""
|
||||
|
||||
msgid "Full path to the whitelist file."
|
||||
msgstr ""
|
||||
msgstr "Full sökväg till vitliste-filen."
|
||||
|
||||
msgid "Input file not found, please check your configuration."
|
||||
msgstr ""
|
||||
|
@ -168,22 +174,26 @@ msgstr "Kördes senast"
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
"Lista över tillgängliga nätverksgränssnitt. Vanligtvis kommer uppstarten att "
|
||||
"utlösas av gränssnittet 'wan'."
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
msgstr ""
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr "Lista med stödda DNS-backends med deras standardlista exportkatalog."
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr ""
|
||||
msgstr "Lista över stödda och helt förkonfigurerade nedladdningsverktyg."
|
||||
|
||||
msgid "Loading"
|
||||
msgstr "Laddar"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr "Lågprioriterad tjänst"
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr ""
|
||||
msgstr "Max. Nedladdningskö"
|
||||
|
||||
msgid "No"
|
||||
msgstr "Nej"
|
||||
|
@ -191,9 +201,10 @@ msgstr "Nej"
|
|||
msgid ""
|
||||
"Options for further tweaking in case the defaults are not suitable for you."
|
||||
msgstr ""
|
||||
"Alternativ för ytterligare finjustering om standardvärdena inte passar dig."
|
||||
|
||||
msgid "Overall Domains"
|
||||
msgstr ""
|
||||
msgstr "Övergripande domäner"
|
||||
|
||||
msgid "Overview"
|
||||
msgstr "Översikt"
|
||||
|
@ -202,6 +213,8 @@ msgid ""
|
|||
"Please add only one domain per line. Comments introduced with '#' are "
|
||||
"allowed - ip addresses, wildcards and regex are not."
|
||||
msgstr ""
|
||||
"Lägg bara till en domän per rad. Kommentarer introducerade med '#' är "
|
||||
"tillåtna - ip-adresser, jokertecken och regex är inte."
|
||||
|
||||
msgid "Please edit this file directly in a terminal session."
|
||||
msgstr "Vänligen redigera den här filen direkt i en terminal-session."
|
||||
|
@ -218,10 +231,18 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr "Uppdatera"
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr ""
|
||||
|
||||
msgid "Resume"
|
||||
|
@ -238,12 +259,17 @@ msgstr "Spara"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup Trigger"
|
||||
|
@ -266,19 +292,23 @@ msgstr ""
|
|||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr ""
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Det här formuläret tillåter dig att förändra innehållet i adblock's "
|
||||
"svartlista (%s).<br />"
|
||||
"svartlista (%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista "
|
||||
"(%s).<br />"
|
||||
"(%s)."
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the main adblock configuration "
|
||||
|
@ -292,11 +322,6 @@ msgid ""
|
|||
"for whitelisting."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -325,120 +350,25 @@ msgid ""
|
|||
"kidsafe configurations."
|
||||
msgstr ""
|
||||
|
||||
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"
|
||||
#~ msgid "-------"
|
||||
#~ msgstr "-------"
|
||||
|
||||
msgid "error"
|
||||
msgstr "fel"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Adblock's loggfil"
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "n/a"
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "inaktiverad"
|
||||
|
||||
msgid "paused"
|
||||
msgstr "pausad"
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "aktiverad"
|
||||
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
#~ msgid "error"
|
||||
#~ msgstr "fel"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "Ogiltig domän angiven!"
|
||||
|
||||
#~ msgid "Available blocklist sources."
|
||||
#~ msgstr "Tillgängliga källor för blockeringslistor"
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr ""
|
||||
#~ "Filstorleken är för stor för online-redigering i LuCi (> 512 KB)."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Caution: Please don't select big lists or many lists at once on low "
|
||||
#~ "memory devices to prevent OOM exceptions!"
|
||||
#~ msgstr ""
|
||||
#~ "Försiktig: Vänligen välj inte stora listor eller många listor på samma "
|
||||
#~ "gång för enheter med lite minne för att undvika OOM-undantag!"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
|
||||
#~ "documentation</a>"
|
||||
#~ msgstr ""
|
||||
#~ "För mer information <a href=\"%s\" target=\"_blank\">se dokumentationen "
|
||||
#~ "på internet</a>"
|
||||
|
||||
#~ msgid "Manual / Backup mode"
|
||||
#~ msgstr "Manuell / Säkerhetskopieringsläge"
|
||||
|
||||
#~ msgid "Please update your adblock config file to use this package."
|
||||
#~ msgstr ""
|
||||
#~ "Vänligen uppdatera din adblock's konfigurationsfil till att använda det "
|
||||
#~ "här paketet."
|
||||
|
||||
#~ msgid "Blocked domains (overall)"
|
||||
#~ msgstr "Blockerade domäner (övergripande)"
|
||||
|
||||
#~ msgid "DNS backend"
|
||||
#~ msgstr "Bakände för DNS"
|
||||
|
||||
#~ msgid "Enable verbose debug logging"
|
||||
#~ msgstr "Aktivera utförlig loggning för avlusning"
|
||||
|
||||
#~ msgid "Last rundate"
|
||||
#~ msgstr "Senaste kördatum"
|
||||
|
||||
#~ msgid "Redirect all DNS queries to the local resolver."
|
||||
#~ msgstr "Dirigera om alla DNS-förfrågningar till den lokala "
|
||||
|
||||
#~ msgid "Resume adblock"
|
||||
#~ msgstr "Återuppta adblock"
|
||||
|
||||
#~ msgid "Status"
|
||||
#~ msgstr "Status"
|
||||
|
||||
#~ msgid "Suspend adblock"
|
||||
#~ msgstr "Upphäv adblock"
|
||||
|
||||
#~ msgid "active"
|
||||
#~ msgstr "aktiv"
|
||||
|
||||
#~ msgid "no domains blocked"
|
||||
#~ msgstr "inga domäner blockerades"
|
||||
|
||||
#~ msgid "suspended"
|
||||
#~ msgstr "upphävd"
|
||||
|
||||
#~ msgid "."
|
||||
#~ msgstr "."
|
||||
|
||||
#~ msgid "For further information"
|
||||
#~ msgstr "För mer information"
|
||||
|
||||
#~ msgid "Backup options"
|
||||
#~ msgstr "Alternativ för säkerhetskopiering"
|
||||
|
||||
#~ msgid "Available blocklist sources ("
|
||||
#~ msgstr "Tillgängliga källor för blockeringslistor ("
|
||||
|
||||
#~ msgid "Global options"
|
||||
#~ msgstr "Globala alternativ"
|
||||
|
||||
#~ msgid "Whitelist file"
|
||||
#~ msgstr "Vitlista fil"
|
||||
|
||||
#~ msgid "see list details"
|
||||
#~ msgstr "se listans detaljer"
|
||||
|
||||
#~ msgid "Count"
|
||||
#~ msgstr "Räkna"
|
||||
|
||||
#~ msgid "Do not write status info to flash"
|
||||
#~ msgstr "Skriv inte status info till flash"
|
||||
|
||||
#~ msgid "Redirect all DNS queries to the local resolver"
|
||||
#~ msgstr "Dirigera om alla DNS-förfrågning till den lokala resolvern"
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "n/a"
|
||||
|
|
|
@ -4,9 +4,6 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
|
|||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr ""
|
||||
|
||||
msgid "-------"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
|
@ -15,9 +12,6 @@ msgstr ""
|
|||
msgid "Adblock"
|
||||
msgstr ""
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr ""
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr ""
|
||||
|
||||
|
@ -47,7 +41,7 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -128,11 +122,6 @@ 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 'built-in'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
|
@ -160,12 +149,11 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr ""
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
|
@ -174,6 +162,9 @@ msgstr ""
|
|||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr ""
|
||||
|
||||
|
@ -210,10 +201,18 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr ""
|
||||
|
||||
msgid "Resume"
|
||||
|
@ -230,12 +229,17 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup Trigger"
|
||||
|
@ -258,14 +262,18 @@ msgstr ""
|
|||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr ""
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -278,11 +286,6 @@ msgid ""
|
|||
"for whitelisting."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -311,25 +314,7 @@ msgid ""
|
|||
"kidsafe configurations."
|
||||
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 ""
|
||||
|
||||
msgid "error"
|
||||
msgstr ""
|
||||
|
||||
msgid "n/a"
|
||||
msgstr ""
|
||||
|
||||
msgid "paused"
|
||||
msgstr ""
|
||||
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
|
|
|
@ -18,21 +18,16 @@ msgstr ""
|
|||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr "“Jail” 拦截名单创建"
|
||||
|
||||
msgid "-------"
|
||||
msgstr "-------"
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
msgstr ""
|
||||
"<b>注意:</b>为防止在小于 64M 空闲内存的设备上出现内存不足异常,请只选择其中的几个!"
|
||||
"<b>注意:</b>为防止在小于 64M 空闲内存的设备上出现内存不足异常,请只选择其中"
|
||||
"的几个!"
|
||||
|
||||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Adblock 日志文件"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Adblock 状态"
|
||||
|
||||
|
@ -62,7 +57,7 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -82,8 +77,7 @@ msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
|
|||
msgid ""
|
||||
"Create compressed blocklist backups, they will be used in case of download "
|
||||
"errors or during startup in backup mode."
|
||||
msgstr ""
|
||||
"创建压缩的拦截列表备份,它们将在下载错误或备份模式启动期间使用。"
|
||||
msgstr "创建压缩的拦截列表备份,它们将在下载错误或备份模式启动期间使用。"
|
||||
|
||||
msgid "DNS Backend (DNS Directory)"
|
||||
msgstr "DNS 后端(DNS 目录)"
|
||||
|
@ -129,8 +123,7 @@ msgstr "启用 Blocklist 备份"
|
|||
msgid ""
|
||||
"Enable memory intense overall sort / duplicate removal on low memory devices "
|
||||
"(< 64 MB free RAM)"
|
||||
msgstr ""
|
||||
"在低内存设备上启用积极的内存整体排序/重复移除(< 64 MB 空闲内存)"
|
||||
msgstr "在低内存设备上启用积极的内存整体排序/重复移除(< 64 MB 空闲内存)"
|
||||
|
||||
msgid "Enable verbose debug logging in case of any processing error."
|
||||
msgstr "在出现任何处理错误的情况下启用详细调试日志记录。"
|
||||
|
@ -147,24 +140,15 @@ msgstr "清空 DNS 缓存"
|
|||
msgid "Flush DNS Cache after adblock processing."
|
||||
msgstr "在 adblock 进程启动后清空 DNS 缓存。"
|
||||
|
||||
msgid ""
|
||||
"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
"'libustream-ssl' or 'built-in'."
|
||||
msgstr ""
|
||||
"对受 SSL 保护的拦截列表源,您需要一个合适的 SSL 库,如 “libustream-ssl” 或 "
|
||||
"“built-in”。"
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
msgstr ""
|
||||
"进一步信息<a href=\"%s\" target=\"_blank\">请访问在线文档"
|
||||
msgstr "进一步信息<a href=\"%s\" target=\"_blank\">请访问在线文档</a>"
|
||||
|
||||
msgid ""
|
||||
"For further performance improvements you can raise this value, e.g. '8' or "
|
||||
"'16' should be safe."
|
||||
msgstr ""
|
||||
"为了进一步提高性能,您可以提高此值,例如:8 或 16 应该是安全的。"
|
||||
msgstr "为了进一步提高性能,您可以提高此值,例如:8 或 16 应该是安全的。"
|
||||
|
||||
msgid "Force Local DNS"
|
||||
msgstr "强制本地 DNS"
|
||||
|
@ -183,14 +167,12 @@ msgstr "最后运行"
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
msgstr ""
|
||||
"可用网络接口列表。通常启动将由 “wan” 接口触发。<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr "可用网络接口列表。通常启动将由 “wan” 接口触发。"
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
msgstr "支持的 DNS 后端列表及其默认列表导出目录。<br />"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr "支持的 DNS 后端列表及其默认列表导出目录。"
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr "支持和完全预配置的下载工具列表。"
|
||||
|
@ -198,6 +180,9 @@ msgstr "支持和完全预配置的下载工具列表。"
|
|||
msgid "Loading"
|
||||
msgstr "加载中"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr "最大下载队列"
|
||||
|
||||
|
@ -226,8 +211,7 @@ msgstr "请在终端会话中直接编辑此文件。"
|
|||
|
||||
msgid ""
|
||||
"Please note: this needs additional 'msmtp' package installation and setup."
|
||||
msgstr ""
|
||||
"请注意:这需要额外的 “msmtp” 软件包安装和设置。"
|
||||
msgstr "请注意:这需要额外的 “msmtp” 软件包安装和设置。"
|
||||
|
||||
msgid "Query"
|
||||
msgstr "查询"
|
||||
|
@ -237,12 +221,21 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
"如果总数小于或等于给定限制(默认为 0),请提高最小电子邮件通知数,以获取电子邮件。"
|
||||
"如果总数小于或等于给定限制(默认为 0),请提高最小电子邮件通知数,以获取电子"
|
||||
"邮件。"
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr ""
|
||||
|
||||
msgid "Resume"
|
||||
msgstr "恢复"
|
||||
|
@ -258,15 +251,18 @@ msgstr "保存"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr "如果发生错误或域计数 ≤ 0,发送通知电子邮件。"
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
"如果发生错误或域计数 ≤ 0,发送通知电子邮件。<br />"
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
msgstr ""
|
||||
"处理下载队列的大小 &amp; 并行处理列表(默认 “4”)。<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr "处理下载队列的大小 &amp; 并行处理列表(默认 “4”)。"
|
||||
|
||||
msgid "Startup Trigger"
|
||||
msgstr "启动触发器"
|
||||
|
@ -280,24 +276,26 @@ msgstr "暂停/恢复 Adblock"
|
|||
msgid ""
|
||||
"Target directory for adblock backups. Please use only non-volatile disks, e."
|
||||
"g. an external usb stick."
|
||||
msgstr ""
|
||||
"adblock 备份的目标目录。 请仅使用非易失性磁盘,例如:一个外置 U 盘。"
|
||||
msgstr "adblock 备份的目标目录。 请仅使用非易失性磁盘,例如:一个外置 U 盘。"
|
||||
|
||||
msgid "Target directory for the generated blocklist 'adb_list.overall'."
|
||||
msgstr "生成的 blocklist 'adb_list.overall'的目标目录。"
|
||||
|
||||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr "文件过大,无法使用 LuCI 的在线编辑(≥ 100 KB)。"
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr "此表单显示系统日志输出,仅针对 adblock 相关的消息进行了预筛选。"
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
"文件过大,无法使用 LuCI 的在线编辑(≥ 100 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 ""
|
||||
|
@ -310,11 +308,6 @@ msgid ""
|
|||
"for whitelisting."
|
||||
msgstr "此表单允许您查询某些域的活动块列表,例如用于列出白名单。"
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr "此表单显示系统日志输出,仅针对 adblock 相关的消息进行了预筛选。"
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -344,28 +337,44 @@ msgid ""
|
|||
msgstr ""
|
||||
"您可以手动使用此限制性拦截列表,例如:为客人提供 wifi 或 kidsafe 配置。"
|
||||
|
||||
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 "-------"
|
||||
#~ msgstr "-------"
|
||||
|
||||
msgid "error"
|
||||
msgstr "错误"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Adblock 日志文件"
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "不可用"
|
||||
#~ msgid ""
|
||||
#~ "For SSL protected blocklist sources you need a suitable SSL library, e.g. "
|
||||
#~ "'libustream-ssl' or 'built-in'."
|
||||
#~ msgstr ""
|
||||
#~ "对受 SSL 保护的拦截列表源,您需要一个合适的 SSL 库,如 “libustream-ssl” "
|
||||
#~ "或 “built-in”。"
|
||||
|
||||
msgid "paused"
|
||||
msgstr "已暂停"
|
||||
#~ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
#~ msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
|
||||
|
||||
msgid "running"
|
||||
msgstr "运行中"
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "已禁用"
|
||||
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "已启用"
|
||||
|
||||
#~ msgid "error"
|
||||
#~ msgstr "错误"
|
||||
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "不可用"
|
||||
|
||||
#~ msgid "paused"
|
||||
#~ msgstr "已暂停"
|
||||
|
||||
#~ msgid "running"
|
||||
#~ msgstr "运行中"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "无效域名!"
|
||||
|
@ -377,6 +386,3 @@ msgstr "运行中"
|
|||
#~ "List URLs and Shallalist category selections are configurable in the "
|
||||
#~ "'Advanced' section.<br />"
|
||||
#~ msgstr "列表 URL 和 Shallalist 类别选择可在“高级”选项卡中配置。<br />"
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr "文件大小太大,无法在 LuCI(> 512 KB)中进行在线编辑。"
|
||||
|
|
|
@ -18,9 +18,6 @@ msgstr ""
|
|||
msgid "'Jail' Blocklist Creation"
|
||||
msgstr ""
|
||||
|
||||
msgid "-------"
|
||||
msgstr "-------"
|
||||
|
||||
msgid ""
|
||||
"<b>Caution:</b> To prevent OOM exceptions on low memory devices with less "
|
||||
"than 64 MB free RAM, please only select a few of them!"
|
||||
|
@ -29,9 +26,6 @@ msgstr ""
|
|||
msgid "Adblock"
|
||||
msgstr "Adblock"
|
||||
|
||||
msgid "Adblock Logfile"
|
||||
msgstr "Adblock 日誌檔案"
|
||||
|
||||
msgid "Adblock Status"
|
||||
msgstr "Adblock 狀態"
|
||||
|
||||
|
@ -61,7 +55,7 @@ msgstr ""
|
|||
|
||||
msgid ""
|
||||
"Builds an additional 'Jail' list (/tmp/adb_list.jail) to block access to all "
|
||||
"domains except those listed in the whitelist file.<br />"
|
||||
"domains except those listed in the whitelist file."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -144,11 +138,6 @@ 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 'built-in'."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"For further information <a href=\"%s\" target=\"_blank\">check the online "
|
||||
"documentation</a>"
|
||||
|
@ -176,13 +165,12 @@ msgstr "最後執行"
|
|||
|
||||
msgid ""
|
||||
"List of available network interfaces. Usually the startup will be triggered "
|
||||
"by the 'wan' interface.<br />"
|
||||
"by the 'wan' interface."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"List of supported DNS backends with their default list export directory.<br /"
|
||||
">"
|
||||
msgstr "支援的 DNS 後端列表及其預設列表匯出目錄。<br />"
|
||||
"List of supported DNS backends with their default list export directory."
|
||||
msgstr "支援的 DNS 後端列表及其預設列表匯出目錄。"
|
||||
|
||||
msgid "List of supported and fully pre-configured download utilities."
|
||||
msgstr ""
|
||||
|
@ -190,6 +178,9 @@ msgstr ""
|
|||
msgid "Loading"
|
||||
msgstr "載入中"
|
||||
|
||||
msgid "Low Priority Service"
|
||||
msgstr ""
|
||||
|
||||
msgid "Max. Download Queue"
|
||||
msgstr ""
|
||||
|
||||
|
@ -228,11 +219,19 @@ 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 />"
|
||||
"count is less or equal to the given limit (default 0),"
|
||||
msgstr ""
|
||||
|
||||
msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
msgstr "將所有 DNS 查詢從“lan”區域重定向到本地解析器。"
|
||||
msgid ""
|
||||
"Redirect all DNS queries from 'lan' zone to the local resolver, apply to udp "
|
||||
"and tcp protocol on ports 53, 853 and 5353."
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
msgid "Refresh Blocklist Sources"
|
||||
msgstr ""
|
||||
|
||||
msgid "Resume"
|
||||
msgstr "恢復"
|
||||
|
@ -248,12 +247,17 @@ msgstr "儲存"
|
|||
|
||||
msgid ""
|
||||
"Send notification emails in case of a processing error or if domain count is "
|
||||
"≤ 0.<br />"
|
||||
"≤ 0."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Set the nice level to 'low priority' and the adblock background processing "
|
||||
"will take less resources from the system."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"Size of the download queue to handle downloads & list processing in "
|
||||
"parallel (default '4').<br />"
|
||||
"parallel (default '4')."
|
||||
msgstr ""
|
||||
|
||||
msgid "Startup Trigger"
|
||||
|
@ -276,15 +280,19 @@ msgstr "生成的 blocklist 'adb_list.overall'的目標目錄。"
|
|||
msgid "The file size is too large for online editing in LuCI (≥ 100 KB)."
|
||||
msgstr ""
|
||||
|
||||
msgid "The syslog output, pre-filtered for adblock related messages only."
|
||||
msgstr "此表單顯示系統日誌輸出,僅針對 adblock 相關的訊息進行了預篩選。"
|
||||
|
||||
msgid "This change requires a manual service stop/re-start to take effect."
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock blacklist (%s)."
|
||||
"<br />"
|
||||
msgstr "此表單允許您修改 adblock 黑名單(%s)的內容。<br />"
|
||||
msgstr "此表單允許您修改 adblock 黑名單(%s)的內容。"
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the adblock whitelist (%s)."
|
||||
"<br />"
|
||||
msgstr "此表單允許您修改 adblock 白名單(%s)的內容。<br />"
|
||||
msgstr "此表單允許您修改 adblock 白名單(%s)的內容。"
|
||||
|
||||
msgid ""
|
||||
"This form allows you to modify the content of the main adblock configuration "
|
||||
|
@ -296,11 +304,6 @@ msgid ""
|
|||
"for whitelisting."
|
||||
msgstr "此表單允許您查詢某些域的活動塊列表,例如用於列出白名單。"
|
||||
|
||||
msgid ""
|
||||
"This form shows the syslog output, pre-filtered for adblock related messages "
|
||||
"only."
|
||||
msgstr "此表單顯示系統日誌輸出,僅針對 adblock 相關的訊息進行了預篩選。"
|
||||
|
||||
msgid ""
|
||||
"To overwrite the default path use the 'DNS Directory' option in the extra "
|
||||
"section below."
|
||||
|
@ -329,31 +332,34 @@ msgid ""
|
|||
"kidsafe configurations."
|
||||
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 "已啟用"
|
||||
#~ msgid "-------"
|
||||
#~ msgstr "-------"
|
||||
|
||||
msgid "error"
|
||||
msgstr "錯誤"
|
||||
#~ msgid "Adblock Logfile"
|
||||
#~ msgstr "Adblock 日誌檔案"
|
||||
|
||||
msgid "n/a"
|
||||
msgstr "不可用"
|
||||
#~ msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
|
||||
#~ msgstr "將所有 DNS 查詢從“lan”區域重定向到本地解析器。"
|
||||
|
||||
msgid "paused"
|
||||
msgstr "已暫停"
|
||||
#~ msgid "disabled"
|
||||
#~ msgstr "已禁用"
|
||||
|
||||
msgid "running"
|
||||
msgstr ""
|
||||
#~ msgid "enabled"
|
||||
#~ msgstr "已啟用"
|
||||
|
||||
#~ msgid "Invalid domain specified!"
|
||||
#~ msgstr "無效域名!"
|
||||
#~ msgid "error"
|
||||
#~ msgstr "錯誤"
|
||||
|
||||
#~ msgid "n/a"
|
||||
#~ msgstr "不可用"
|
||||
|
||||
#~ msgid "paused"
|
||||
#~ msgstr "已暫停"
|
||||
|
||||
#~ msgid "Available blocklist sources."
|
||||
#~ msgstr "可用的 blocklist 來源。"
|
||||
|
@ -362,6 +368,3 @@ msgstr ""
|
|||
#~ "List URLs and Shallalist category selections are configurable in the "
|
||||
#~ "'Advanced' section.<br />"
|
||||
#~ msgstr "列表 URL 和 Shallalist 類別選擇可在“高階”選項卡中配置。<br />"
|
||||
|
||||
#~ msgid "The file size is too large for online editing in LuCI (> 512 KB)."
|
||||
#~ msgstr "檔案大小太大,無法在 LuCI(> 512 KB)中進行線上編輯。"
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
|
||||
# Copyright 2017-2018 Stan Grishin (stangri@melmac.net)
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_LICENSE:=GPL-3.0+
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
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 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
|
||||
an alternative partition. Also provides Web UI to shut down (power off) your device. Supported dual-partition\
|
||||
routers are listed at https://github.com/openwrt/luci/blob/master/applications/luci-app-advanced-reboot/README.md
|
||||
|
||||
LUCI_DEPENDS:=+luci-mod-admin-full
|
||||
LUCI_DEPENDS:=+luci-compat +luci-mod-admin-full
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_RELEASE:=32
|
||||
PKG_RELEASE:=52
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
|
|
|
@ -1,13 +1,18 @@
|
|||
# Advanced Reboot Web UI (luci-app-advanced-reboot)
|
||||
|
||||
## Description
|
||||
This package allows you to reboot to an alternative partition on the supported (dual-partition) routers and to power off (power down) your OpenWrt/LEDE Project device.
|
||||
|
||||
This package allows you to reboot to an alternative partition on the supported (dual-partition) routers and to power off (power down) your OpenWrt device.
|
||||
|
||||
## Supported Devices
|
||||
|
||||
Currently supported dual-partition devices include:
|
||||
|
||||
- Linksys EA3500
|
||||
- Linksys E4200v2
|
||||
- Linksys EA4500
|
||||
- Linksys EA6350v3
|
||||
- Linksys EA8300
|
||||
- Linksys EA8500
|
||||
- Linksys WRT1200AC
|
||||
- Linksys WRT1900AC
|
||||
|
@ -17,22 +22,58 @@ Currently supported dual-partition devices include:
|
|||
- Linksys WRT32X
|
||||
- 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).
|
||||
If your device is not in the list above, however it is a [dual-firmware device](https://openwrt.org/tag/dual_firmware?do=showtag&tag=dual_firmware) and you're interested in having your device supported, please post in [OpenWrt Forum Support Thread](https://forum.openwrt.org/t/web-ui-to-reboot-to-another-partition-dual-partition-routers/3423).
|
||||
|
||||
## Screenshot (luci-app-advanced-reboot)
|
||||

|
||||
|
||||

|
||||
|
||||
## How to install
|
||||
|
||||
Install ```luci-app-advanced-reboot``` from Web UI or connect to your router via ssh and run the following commands:
|
||||
|
||||
```sh
|
||||
opkg update
|
||||
opkg install luci-app-advanced-reboot
|
||||
```
|
||||
|
||||
If the ```luci-app-advanced-reboot``` package is not found in the official feed/repo for your version of OpenWrt/LEDE Project, you will need to [add a custom repo to your router](https://github.com/stangri/openwrt_packages/blob/master/README.md#on-your-router) first.
|
||||
|
||||
## 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 vendor firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, losing 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 unless you reflash it, losing all the settings.
|
||||
- Some devices allow you to trigger reboot to an 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.
|
||||
- Newer versions of this package try to mount alternative partition on compatible NAND routers in order to retrieve detailed firmware information. When that happens, it is normal to have messages similar to the below in the system log:
|
||||
|
||||
```sh
|
||||
Tue Nov 19 15:45:03 2019 user.notice luci-app-advanced-reboot: attempting to mount alternative partition (mtd6)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.673826] ubi2: attaching mtd6
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.876698] ubi2: scanning is finished
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.885267] ubi2: attached mtd6 (name "rootfs1", size 74 MiB)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.891063] ubi2: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.898011] ubi2: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.904878] ubi2: VID header offset: 2048 (aligned 2048), data offset: 4096
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.911928] ubi2: good PEBs: 592, bad PEBs: 0, corrupted PEBs: 0
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.917962] ubi2: user volume: 2, internal volumes: 1, max. volumes count: 128
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.925252] ubi2: max/mean erase counter: 48/32, WL threshold: 4096, image sequence number: 1659081076
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.934623] ubi2: available PEBs: 0, total reserved PEBs: 592, PEBs reserved for bad PEB handling: 40
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.944346] ubi2: background thread "ubi_bgt2d" started, PID 26780
|
||||
Tue Nov 19 15:45:03 2019 kern.info kernel: [30392.952596] block ubiblock2_0: created from ubi2:0 (rootfs)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30392.964083] UBIFS (ubi2:1): background thread "ubifs_bgt2_1" started, PID 26787
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.009298] UBIFS (ubi2:1): UBIFS: mounted UBI device 2, volume 1, name "rootfs_data"
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.017185] UBIFS (ubi2:1): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.027213] UBIFS (ubi2:1): FS size: 61075456 bytes (58 MiB, 481 LEBs), journal size 3047424 bytes (2 MiB, 24 LEBs)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.037733] UBIFS (ubi2:1): reserved for root: 2884744 bytes (2817 KiB)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.044389] UBIFS (ubi2:1): media format: w4/r0 (latest is w5/r0), UUID 76F0C52C-6197-4E00-B306-747262B06545, small LPT model
|
||||
Tue Nov 19 15:45:03 2019 user.notice luci-app-advanced-reboot: attempting to unmount alternative partition (mtd6)
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.132743] UBIFS (ubi2:1): un-mount UBI device 2
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.137481] UBIFS (ubi2:1): background thread "ubifs_bgt2_1" stops
|
||||
Tue Nov 19 15:45:03 2019 kern.info kernel: [30393.390961] block ubiblock2_0: released
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.396576] ubi2: detaching mtd6
|
||||
Tue Nov 19 15:45:03 2019 kern.notice kernel: [30393.400117] ubi2: mtd6 is detached
|
||||
```
|
||||
|
||||
## Thanks
|
||||
I'd like to thank everyone who helped create, test and troubleshoot this package. Without help from [@hnyman](https://github.com/hnyman), [@jpstyves](https://github.com/jpstyves) and many contributions from [@slh](https://github.com/pkgadd) it wouldn't have been possible.
|
||||
|
||||
I'd like to thank everyone who helped create, test and troubleshoot this package. Without help from [@hnyman](https://github.com/hnyman), [@jpstyves](https://github.com/jpstyves), [@imi2003](https://github.com/imi2003), [@jeffsf](https://github.com/jeffsf) and many contributions from [@slh](https://github.com/pkgadd) it wouldn't have been possible.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "EA9500",
|
||||
boardName = "linksys-panamera",
|
||||
partition1MTD = "mtd3",
|
||||
partition2MTD = "mtd6",
|
||||
labelOffset = 28,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = nil,
|
||||
bootEnv2Partition1Value = nil,
|
||||
bootEnv2Partition2Value = nil
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "E4200v2/EA4500",
|
||||
boardName = "linksys-viper",
|
||||
partition1MTD = "mtd3",
|
||||
partition2MTD = "mtd5",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "EA3500",
|
||||
boardName = "linksys-audi",
|
||||
partition1MTD = "mtd3",
|
||||
partition2MTD = "mtd5",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "EA6350v3",
|
||||
boardName = "linksys-ea6350v3",
|
||||
partition1MTD = "mtd10",
|
||||
partition2MTD = "mtd12",
|
||||
labelOffset = 192,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = nil,
|
||||
bootEnv2Partition1Value = nil,
|
||||
bootEnv2Partition2Value = nil
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "EA8300",
|
||||
boardName = "linksys-ea8300",
|
||||
partition1MTD = "mtd10",
|
||||
partition2MTD = "mtd12",
|
||||
labelOffset = 192,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = nil,
|
||||
bootEnv2Partition1Value = nil,
|
||||
bootEnv2Partition2Value = nil
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "EA8500",
|
||||
boardName = "linksys-ea8500",
|
||||
partition1MTD = "mtd13",
|
||||
partition2MTD = "mtd15",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = nil,
|
||||
bootEnv2Partition1Value = nil,
|
||||
bootEnv2Partition2Value = nil
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT1200AC",
|
||||
boardName = "linksys-caiman",
|
||||
partition1MTD = "mtd4",
|
||||
partition2MTD = "mtd6",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT1900AC",
|
||||
boardName = "linksys-mamba",
|
||||
partition1MTD = "mtd4",
|
||||
partition2MTD = "mtd6",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT1900ACS",
|
||||
boardName = "linksys-shelby",
|
||||
partition1MTD = "mtd4",
|
||||
partition2MTD = "mtd6",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT1900ACv2",
|
||||
boardName = "linksys-cobra",
|
||||
partition1MTD = "mtd4",
|
||||
partition2MTD = "mtd6",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT3200ACM",
|
||||
boardName = "linksys-rango",
|
||||
partition1MTD = "mtd5",
|
||||
partition2MTD = "mtd7",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "Linksys",
|
||||
deviceName = "WRT32X",
|
||||
boardName = "linksys-venom",
|
||||
partition1MTD = "mtd5",
|
||||
partition2MTD = "mtd7",
|
||||
labelOffset = nil,
|
||||
bootEnv1 = "boot_part",
|
||||
bootEnv1Partition1Value = 1,
|
||||
bootEnv1Partition2Value = 2,
|
||||
bootEnv2 = "bootcmd",
|
||||
bootEnv2Partition1Value = "run nandboot",
|
||||
bootEnv2Partition2Value = "run altnandboot"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
return {
|
||||
vendorName = "ZyXEL",
|
||||
deviceName = "NBG6817",
|
||||
boardName = "nbg6817",
|
||||
partition1MTD = "mmcblk0p4",
|
||||
partition2MTD = "mmcblk0p7",
|
||||
labelOffset = 32,
|
||||
bootEnv1 = nil,
|
||||
bootEnv1Partition1Value = 255,
|
||||
bootEnv1Partition2Value = 1,
|
||||
bootEnv2 = nil,
|
||||
bootEnv2Partition1Value = nil,
|
||||
bootEnv2Partition2Value = nil
|
||||
}
|
|
@ -1,202 +1,295 @@
|
|||
-- Copyright 2017 Stan Grishin <stangri@melmac.net>
|
||||
-- Copyright 2017-2018 Stan Grishin <stangri@melmac.net>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
module("luci.controller.advanced_reboot", package.seeall)
|
||||
|
||||
devices = {
|
||||
-- deviceName, boardName, partition1, partition2, offset, envVar1, envVar1Value1, envVar1Value2, envVar2, envVar2Value1, envVar2Value2
|
||||
{"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 EA9500", "linksys-panamera", "mtd3", "mtd6", 28, "boot_part", 1, 2},
|
||||
{"Linksys WRT1200AC", "linksys-caiman", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"Linksys WRT1900AC", "linksys-mamba", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"Linksys WRT1900ACv2", "linksys-cobra", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"Linksys WRT1900ACS", "linksys-shelby", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"Linksys WRT3200ACM", "linksys-rango", "mtd5", "mtd7", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"Linksys WRT32X", "linksys-venom", "mtd5", "mtd7", nil, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
|
||||
{"ZyXEL NBG6817","nbg6817","mmcblk0p4","mmcblk0p7", 32, nil, 255, 1}
|
||||
}
|
||||
local util = require "luci.util"
|
||||
local fs = require "nixio.fs"
|
||||
local sys = require "luci.sys"
|
||||
local http = require "luci.http"
|
||||
local dispatcher = require "luci.dispatcher"
|
||||
local i18n = require "luci.i18n"
|
||||
local ltemplate = require "luci.template"
|
||||
local ip = require "luci.ip"
|
||||
local http = require "luci.http"
|
||||
local sys = require "luci.sys"
|
||||
local dispatcher = require "luci.dispatcher"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local packageName = "advanced-reboot"
|
||||
local devices_dir = "/usr/lib/lua/luci/" .. packageName .. "/devices/"
|
||||
|
||||
errorMessage = nil
|
||||
rom_board_name = luci.util.trim(luci.sys.exec("cat /tmp/sysinfo/board_name"))
|
||||
for i=1, #devices do
|
||||
device_board_name = devices[i][2]:gsub('%p','')
|
||||
if rom_board_name and rom_board_name:gsub('%p',''):match(device_board_name) then
|
||||
device_name = devices[i][1]
|
||||
partition_one_mtd = devices[i][3] or nil
|
||||
partition_two_mtd = devices[i][4] or nil
|
||||
partition_skip = devices[i][5] or nil
|
||||
boot_envvar1 = devices[i][6] or nil
|
||||
boot_envvar1_partition_one = tonumber(devices[i][7]) or nil
|
||||
boot_envvar1_partition_two = tonumber(devices[i][8]) or nil
|
||||
boot_envvar2 = devices[i][9] or nil
|
||||
boot_envvar2_partition_one = devices[i][10] or nil
|
||||
boot_envvar2_partition_two = devices[i][11] or nil
|
||||
if partition_one_mtd and partition_skip then
|
||||
partition_one_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_one_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
|
||||
n, partition_one_version = string.match(partition_one_label, '(Linux)-([%d|.]+)')
|
||||
end
|
||||
if partition_two_mtd and partition_skip then
|
||||
partition_two_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_two_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
|
||||
n, partition_two_version = string.match(partition_two_label, '(Linux)-([%d|.]+)')
|
||||
end
|
||||
if partition_one_label and string.find(partition_one_label, "LEDE") then partition_one_os = "LEDE" end
|
||||
if partition_one_label and string.find(partition_one_label, "OpenWrt") then partition_one_os = "OpenWrt" end
|
||||
if partition_one_label and string.find(partition_one_label, "Linksys") then partition_one_os = "Linksys" end
|
||||
if partition_two_label and string.find(partition_two_label, "LEDE") then partition_two_os = "LEDE" end
|
||||
if partition_two_label and string.find(partition_two_label, "OpenWrt") then partition_two_os = "OpenWrt" end
|
||||
if partition_two_label and 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 device_name and device_name == "Linksys WRT32X" then
|
||||
if not partition_one_os then partition_one_os = "Unknown/Compressed" end
|
||||
if not partition_two_os then partition_two_os = "Unknown/Compressed" 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
|
||||
function logger(t)
|
||||
util.exec("logger -t " .. packageName .. " '" .. tostring(t) .. "'")
|
||||
end
|
||||
|
||||
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
|
||||
function is_alt_mountable(p1_mtd, p2_mtd)
|
||||
if p1_mtd:sub(1,3) == "mtd" and
|
||||
p2_mtd:sub(1,3) == "mtd" and
|
||||
fs.access("/usr/sbin/ubiattach") and
|
||||
fs.access("/usr/sbin/ubiblock") and
|
||||
fs.access("/bin/mount") then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function get_partition_os_info(op_ubi)
|
||||
local cp_info, op_info
|
||||
if fs.access("/etc/os-release") then
|
||||
cp_info = util.trim(util.exec('. /etc/os-release && echo "$PRETTY_NAME"'))
|
||||
if cp_info:find("SNAPSHOT") then
|
||||
cp_info = util.trim(util.exec('. /etc/os-release && echo "$OPENWRT_RELEASE"'))
|
||||
end
|
||||
end
|
||||
logger(i18n.translatef("attempting to mount alternative partition (mtd%s)", tostring(op_ubi)))
|
||||
alt_partition_unmount(op_ubi)
|
||||
alt_partition_mount(op_ubi)
|
||||
if fs.access("/alt/rom/etc/os-release") then
|
||||
op_info = util.trim(util.exec('. /alt/rom/etc/os-release && echo "$PRETTY_NAME"'))
|
||||
if op_info:find("SNAPSHOT") then
|
||||
op_info = util.trim(util.exec('. /alt/rom/etc/os-release && echo "$OPENWRT_RELEASE"'))
|
||||
end
|
||||
end
|
||||
logger(i18n.translatef("attempting to unmount alternative partition (mtd%s)", tostring(op_ubi)))
|
||||
alt_partition_unmount(op_ubi)
|
||||
return cp_info, op_info
|
||||
end
|
||||
|
||||
function alt_partition_mount(op_ubi)
|
||||
local ubi_dev
|
||||
util.exec('for i in rom overlay firmware; do [ ! -d "$i" ] && mkdir -p "/alt/${i}"; done')
|
||||
ubi_dev = tostring(util.exec("ubiattach -m " .. tostring(op_ubi)))
|
||||
_, _, ubi_dev = ubi_dev:find("UBI device number (%d+)")
|
||||
if not ubi_dev then
|
||||
util.exec("ubidetach -m " .. tostring(op_ubi))
|
||||
return
|
||||
end
|
||||
util.exec("ubiblock --create /dev/ubi" .. ubi_dev .. "_0")
|
||||
util.exec("mount -t squashfs -o ro /dev/ubiblock" .. ubi_dev .. "_0 /alt/rom")
|
||||
util.exec("mount -t ubifs /dev/ubi" .. ubi_dev .. "_1 /alt/overlay")
|
||||
-- util.exec("mount -t overlay overlay -o noatime,lowerdir=/alt/rom,upperdir=/alt/overlay/upper,workdir=/alt/overlay/work /alt/firmware")
|
||||
end
|
||||
|
||||
function alt_partition_unmount(op_ubi)
|
||||
local i
|
||||
local mtdCount = tonumber(util.exec("ubinfo | grep 'Present UBI devices' | grep -c ','"))
|
||||
mtdCount = mtdCount and mtdCount + 1 or 10
|
||||
-- util.exec("[ -d /alt/firmware ] && umount /alt/firmware")
|
||||
util.exec("[ -d /alt/overlay ] && umount /alt/overlay")
|
||||
util.exec("[ -d /alt/rom ] && umount /alt/rom")
|
||||
for i = 0, mtdCount do
|
||||
if not fs.access("/sys/devices/virtual/ubi/ubi" .. tostring(i) .. "/mtd_num") then break end
|
||||
ubi_mtd = tonumber(util.trim(util.exec("cat /sys/devices/virtual/ubi/ubi" .. i .. "/mtd_num")))
|
||||
if ubi_mtd and ubi_mtd == op_ubi then
|
||||
util.exec("ubiblock --remove /dev/ubi" .. tostring(i) .. "_0")
|
||||
util.exec("ubidetach -m " .. tostring(op_ubi))
|
||||
util.exec('rm -rf /alt')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function obtain_device_info()
|
||||
local p, boardName, n, p1_label, p1_version, p2_label, p2_version, p1_os, p2_os
|
||||
local errorMessage, current_partition
|
||||
local op_ubi, cp_info, op_info, zyxelFlagPartition
|
||||
local romBoardName = util.trim(util.exec("cat /tmp/sysinfo/board_name"))
|
||||
for filename in fs.dir(devices_dir) do
|
||||
local p_func = loadfile(devices_dir .. filename)
|
||||
setfenv(p_func, { _ = i18n.translate })
|
||||
p = p_func()
|
||||
boardName = p.boardName:gsub('%p','')
|
||||
if romBoardName and romBoardName:gsub('%p',''):match(boardName) then
|
||||
if p.labelOffset then
|
||||
if p.partition1MTD then
|
||||
p1_label = util.trim(util.exec("dd if=/dev/" .. p.partition1MTD .. " bs=1 skip=" .. p.labelOffset .. " count=128" .. " 2>/dev/null"))
|
||||
n, p1_version = p1_label:match('(Linux)-([%d|.]+)')
|
||||
end
|
||||
if p.partition2MTD then
|
||||
p2_label = util.trim(util.exec("dd if=/dev/" .. p.partition2MTD .. " bs=1 skip=" .. p.labelOffset .. " count=128" .. " 2>/dev/null"))
|
||||
n, p2_version = p2_label:match('(Linux)-([%d|.]+)')
|
||||
end
|
||||
if p1_label and p1_label:find("LEDE") then p1_os = "LEDE" end
|
||||
if p1_label and p1_label:find("OpenWrt") then p1_os = "OpenWrt" end
|
||||
if p1_label and p.vendorName and p1_label:find(p.vendorName) then p1_os = p.vendorName end
|
||||
if p2_label and p2_label:find("LEDE") then p2_os = "LEDE" end
|
||||
if p2_label and p2_label:find("OpenWrt") then p2_os = "OpenWrt" end
|
||||
if p2_label and p.vendorName and p2_label:find(p.vendorName) then p2_os = p.vendorName end
|
||||
if not p1_os then p1_os = p.vendorName .. "/" .. i18n.translate("Unknown") end
|
||||
if not p2_os then p2_os = p.vendorName .. "/" .. i18n.translate("Unknown") end
|
||||
if p1_os and p1_version then p1_os = p1_os .. " (Linux " .. p1_version .. ")" end
|
||||
if p2_os and p2_version then p2_os = p2_os .. " (Linux " .. p2_version .. ")" end
|
||||
else
|
||||
p1_os = p.vendorName .. "/" .. i18n.translate("Unknown") .. " (" .. i18n.translate("Compressed") .. ")"
|
||||
p2_os = p.vendorName .. "/" .. i18n.translate("Unknown") .. " (" .. i18n.translate("Compressed") .. ")"
|
||||
end
|
||||
|
||||
if p.bootEnv1 then
|
||||
if fs.access("/usr/sbin/fw_printenv") and fs.access("/usr/sbin/fw_setenv") then
|
||||
current_partition = tonumber(util.trim(util.exec("fw_printenv -n " .. p.bootEnv1)))
|
||||
end
|
||||
else
|
||||
if not zyxelFlagPartition then zyxelFlagPartition = util.trim(util.exec(". /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
|
||||
if zyxelFlagPartition then
|
||||
current_partition = tonumber(util.exec("dd if=" .. zyxelFlagPartition .. " bs=1 count=1 2>/dev/null | hexdump -n 1 -e '1/1 \"%d\"'"))
|
||||
else
|
||||
errorMessage = errorMessage or i18n.translate("Unable to find Dual Boot Flag Partition.")
|
||||
util.perror(i18n.translate("Unable to find Dual Boot Flag Partition."))
|
||||
end
|
||||
end
|
||||
|
||||
if is_alt_mountable(p.partition1MTD, p.partition2MTD) then
|
||||
if current_partition == p.bootEnv1Partition1Value then
|
||||
op_ubi = tonumber(p.partition2MTD:sub(4)) + 1
|
||||
else
|
||||
op_ubi = tonumber(p.partition1MTD:sub(4)) + 1
|
||||
end
|
||||
local cp_info, op_info = get_partition_os_info(op_ubi)
|
||||
if current_partition == p.bootEnv1Partition1Value then
|
||||
p1_os = cp_info or p1_os
|
||||
p2_os = op_info or p2_os
|
||||
else
|
||||
p1_os = op_info or p1_os
|
||||
p2_os = cp_info or p2_os
|
||||
end
|
||||
end
|
||||
return romBoardName, p.vendorName .. " " .. p.deviceName, p.bootEnv1, p.bootEnv1Partition1Value, p1_os, p.bootEnv1Partition2Value, p2_os, p.bootEnv2, p.bootEnv2Partition1Value, p.bootEnv2Partition1Value, current_partition
|
||||
end
|
||||
end
|
||||
return romBoardName, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil
|
||||
end
|
||||
|
||||
function index()
|
||||
entry({"admin", "system", "advanced_reboot"}, template("advanced_reboot/advanced_reboot"), _("Advanced Reboot"), 90)
|
||||
entry({"admin", "system", "advanced_reboot", "reboot"}, post("action_reboot"))
|
||||
entry({"admin", "system", "advanced_reboot", "alternative_reboot"}, post("action_altreboot"))
|
||||
entry({"admin", "system", "advanced_reboot", "power_off"}, post("action_poweroff"))
|
||||
entry({"admin", "system", "advanced_reboot"}, call("action_template"), _("Advanced Reboot"), 90)
|
||||
entry({"admin", "system", "advanced_reboot", "reboot"}, post("action_reboot"))
|
||||
entry({"admin", "system", "advanced_reboot", "alternative_reboot"}, post("action_altreboot"))
|
||||
entry({"admin", "system", "advanced_reboot", "power_off"}, post("action_poweroff"))
|
||||
end
|
||||
|
||||
function action_template()
|
||||
local romBoardName, device_name, bev1, bev1p1, p1_os, bev1p2, p2_os, bev2, bev2p1, bev2p2, current_partition = obtain_device_info()
|
||||
ltemplate.render("advanced_reboot/advanced_reboot",{
|
||||
romBoardName=romBoardName,
|
||||
device_name=device_name,
|
||||
bev1p1=bev1p1,
|
||||
p1_os=p1_os,
|
||||
bev1p2=bev1p2,
|
||||
p2_os=p2_os,
|
||||
current_partition=current_partition,
|
||||
errorMessage=errorMessage})
|
||||
end
|
||||
|
||||
function action_reboot()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
luci.template.render("admin_system/applyreboot", {
|
||||
title = luci.i18n.translate("Rebooting..."),
|
||||
msg = luci.i18n.translate("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."),
|
||||
addr = luci.ip.new(uci:get("network", "lan", "ipaddr")) or "192.168.1.1"
|
||||
})
|
||||
luci.sys.reboot()
|
||||
ltemplate.render("advanced_reboot/applyreboot", {
|
||||
title = i18n.translate("Rebooting..."),
|
||||
msg = i18n.translate("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."),
|
||||
addr = ip.new(util.imatch(uci:get("network", "lan", "ipaddr"))() or "192.168.1.1")
|
||||
})
|
||||
sys.reboot()
|
||||
end
|
||||
|
||||
function action_altreboot()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local zyxelFlagPartition, zyxelBootFlag, zyxelNewBootFlag, errorCode, curEnvSetting, newEnvSetting
|
||||
errorMessage = nil
|
||||
errorCode = 0
|
||||
if luci.http.formvalue("cancel") then
|
||||
luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
|
||||
return
|
||||
end
|
||||
local step = tonumber(luci.http.formvalue("step") or 1)
|
||||
if step == 1 then
|
||||
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",{errorMessage = luci.i18n.translate("No access to fw_printenv or fw_printenv!")})
|
||||
end
|
||||
elseif step == 2 then
|
||||
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 not 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:get("network", "lan", "ipaddr")) or "192.168.1.1"
|
||||
})
|
||||
luci.sys.reboot()
|
||||
else
|
||||
luci.template.render("advanced_reboot/advanced_reboot",{
|
||||
rom_board_name=rom_board_name,
|
||||
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
|
||||
local romBoardName, device_name, bev1, bev1p1, p1_os, bev1p2, p2_os, bev2, bev2p1, bev2p2, current_partition = obtain_device_info()
|
||||
local zyxelFlagPartition, zyxelBootFlag, zyxelNewBootFlag, errorCode, curEnvSetting, newEnvSetting
|
||||
errorMessage = nil
|
||||
errorCode = 0
|
||||
if http.formvalue("cancel") then
|
||||
http.redirect(dispatcher.build_url('admin/system/advanced_reboot'))
|
||||
return
|
||||
end
|
||||
local step = tonumber(http.formvalue("step") or 1)
|
||||
if step == 1 then
|
||||
if fs.access("/usr/sbin/fw_printenv") and fs.access("/usr/sbin/fw_setenv") then
|
||||
ltemplate.render("advanced_reboot/alternative_reboot",{})
|
||||
else
|
||||
ltemplate.render("advanced_reboot/advanced_reboot",{errorMessage = i18n.translate("No access to fw_printenv or fw_printenv!")})
|
||||
end
|
||||
elseif step == 2 then
|
||||
if bev1 or bev2 then -- Linksys devices
|
||||
if bev1 then
|
||||
curEnvSetting = tonumber(util.trim(util.exec("fw_printenv -n " .. bev1)))
|
||||
if not curEnvSetting then
|
||||
errorMessage = errorMessage .. i18n.translatef("Unable to obtain firmware environment variable: %s.", bev1)
|
||||
util.perror(i18n.translatef("Unable to obtain firmware environment variable: %s.", bev1))
|
||||
else
|
||||
newEnvSetting = curEnvSetting == bev1p1 and bev1p2 or bev1p1
|
||||
errorCode = sys.call("fw_setenv " .. bev1 .. " " .. newEnvSetting)
|
||||
if errorCode ~= 0 then
|
||||
errorMessage = errorMessage or "" .. i18n.translatef("Unable to set firmware environment variable: %s to %s.", bev1, newEnvSetting)
|
||||
util.perror(i18n.translatef("Unable to set firmware environment variable: %s to %s.", bev1, newEnvSetting))
|
||||
end
|
||||
end
|
||||
end
|
||||
if bev2 then
|
||||
curEnvSetting = util.trim(util.exec("fw_printenv -n " .. bev2))
|
||||
if not curEnvSetting then
|
||||
errorMessage = errorMessage or "" .. i18n.translatef("Unable to obtain firmware environment variable: %s.", bev2)
|
||||
util.perror(i18n.translatef("Unable to obtain firmware environment variable: %s.", bev2))
|
||||
else
|
||||
newEnvSetting = curEnvSetting == bev2p1 and bev2p2 or bev2p1
|
||||
errorCode = sys.call("fw_setenv " .. bev2 .. " '" .. newEnvSetting .. "'")
|
||||
if errorCode ~= 0 then
|
||||
errorMessage = errorMessage or "" .. i18n.translatef("Unable to set firmware environment variable: %s to %s.", bev2, newEnvSetting)
|
||||
util.perror(i18n.translatef("Unable to set firmware environment variable: %s to %s.", bev2, newEnvSetting))
|
||||
end
|
||||
end
|
||||
end
|
||||
else -- NetGear device
|
||||
if not zyxelFlagPartition then zyxelFlagPartition = util.trim(util.exec(". /lib/functions.sh; find_mtd_part 0:DUAL_FLAG")) end
|
||||
if not zyxelFlagPartition then
|
||||
errorMessage = errorMessage .. i18n.translate("Unable to find Dual Boot Flag Partition." .. " ")
|
||||
util.perror(i18n.translate("Unable to find Dual Boot Flag Partition."))
|
||||
else
|
||||
zyxelBootFlag = tonumber(util.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 = sys.call("printf \"" .. zyxelNewBootFlag .. "\" >" .. zyxelFlagPartition )
|
||||
if errorCode ~= 0 then
|
||||
errorMessage = errorMessage or "" .. i18n.translatef("Unable to set Dual Boot Flag Partition entry for partition: %s.", zyxelFlagPartition)
|
||||
util.perror(i18n.translatef("Unable to set Dual Boot Flag Partition entry for partition: %s.", zyxelFlagPartition))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if not errorMessage then
|
||||
ltemplate.render("advanced_reboot/applyreboot", {
|
||||
title = i18n.translate("Rebooting..."),
|
||||
msg = 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 = ip.new(util.imatch(uci:get("network", "lan", "ipaddr"))() or "192.168.1.1")
|
||||
})
|
||||
sys.reboot()
|
||||
else
|
||||
ltemplate.render("advanced_reboot/advanced_reboot",{
|
||||
romBoardName=romBoardName,
|
||||
device_name=device_name,
|
||||
bev1p1=bev1p1,
|
||||
p1_os=p1_os,
|
||||
bev1p2=bev1p2,
|
||||
p2_os=p2_os,
|
||||
current_partition=current_partition,
|
||||
errorMessage = errorMessage})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function action_poweroff()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
if luci.http.formvalue("cancel") then
|
||||
luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
|
||||
return
|
||||
end
|
||||
local step = tonumber(luci.http.formvalue("step") or 1)
|
||||
if step == 1 then
|
||||
if nixio.fs.access("/sbin/poweroff") then
|
||||
luci.template.render("advanced_reboot/power_off",{})
|
||||
else
|
||||
luci.template.render("advanced_reboot/advanced_reboot",{})
|
||||
end
|
||||
elseif step == 2 then
|
||||
luci.template.render("admin_system/applyreboot", {
|
||||
title = luci.i18n.translate("Shutting down..."),
|
||||
msg = luci.i18n.translate("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."),
|
||||
addr = luci.ip.new(uci:get("network", "lan", "ipaddr")) or "192.168.1.1"
|
||||
})
|
||||
luci.sys.call("/sbin/poweroff")
|
||||
end
|
||||
if http.formvalue("cancel") then
|
||||
http.redirect(dispatcher.build_url('admin/system/advanced_reboot'))
|
||||
return
|
||||
end
|
||||
local step = tonumber(http.formvalue("step") or 1)
|
||||
if step == 1 then
|
||||
if fs.access("/sbin/poweroff") then
|
||||
ltemplate.render("advanced_reboot/power_off",{})
|
||||
else
|
||||
ltemplate.render("advanced_reboot/advanced_reboot",{})
|
||||
end
|
||||
elseif step == 2 then
|
||||
ltemplate.render("advanced_reboot/applyreboot", {
|
||||
title = i18n.translate("Shutting down..."),
|
||||
msg = i18n.translate("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."),
|
||||
addr = ip.new(util.imatch(uci:get("network", "lan", "ipaddr"))() or "192.168.1.1")
|
||||
})
|
||||
sys.call("/sbin/poweroff")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Copyright 2017 Stan Grishin <stangri@melmac.net>
|
||||
Copyright 2017-2020 Stan Grishin <stangri@melmac.net>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
|
@ -20,70 +20,70 @@
|
|||
|
||||
<%- if device_name then -%>
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%=device_name%><%: Partitions%></legend>
|
||||
<div class="table cbi-section-table" id="partitions">
|
||||
<div class="tr cbi-section-table-titles">
|
||||
<div class="th cbi-section-table-cell"><%:Partition%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Status%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Firmware/OS (Kernel)%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Action%></div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row">
|
||||
<div class="td">
|
||||
<%=string.format("%X", boot_envvar1_partition_one)%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%=partition_one_os%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if boot_envvar1_partition_one == current_partition then -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
|
||||
</form>
|
||||
<%- else -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
|
||||
</form>
|
||||
<%- end -%>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row">
|
||||
<div class="td">
|
||||
<%=string.format("%X", boot_envvar1_partition_two)%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%=partition_two_os%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if boot_envvar1_partition_two == current_partition then -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
|
||||
</form>
|
||||
<%- else -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
|
||||
</form>
|
||||
<%- end -%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<legend><%=device_name%><%: Partitions%></legend>
|
||||
<div class="table cbi-section-table" id="partitions">
|
||||
<div class="tr cbi-section-table-titles">
|
||||
<div class="th cbi-section-table-cell"><%:Partition%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Status%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Firmware%></div>
|
||||
<div class="th cbi-section-table-cell"><%:Reboot%></div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row cbi-rowstyle-<%- if bev1p1 == current_partition then -%><%=1%><%- else -%><%=2%><%- end -%>">
|
||||
<div class="td">
|
||||
<%=string.format("%X", bev1p1)%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if bev1p1 == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%=p1_os%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if bev1p1 == current_partition then -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply important" value="<%:Reboot to current partition%>" />
|
||||
</form>
|
||||
<%- else -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply important" value="<%:Reboot to alternative partition...%>" />
|
||||
</form>
|
||||
<%- end -%>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row cbi-rowstyle-<%- if bev1p2 == current_partition then -%><%=1%><%- else -%><%=2%><%- end -%>">
|
||||
<div class="td">
|
||||
<%=string.format("%X", bev1p2)%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if bev1p2 == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%=p2_os%>
|
||||
</div>
|
||||
<div class="td">
|
||||
<%- if bev1p2 == current_partition then -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="reboot-button" type="submit" class="cbi-button cbi-button-apply important" value="<%:Reboot to current partition%>" />
|
||||
</form>
|
||||
<%- else -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply important" value="<%:Reboot to alternative partition...%>" />
|
||||
</form>
|
||||
<%- end -%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<%- else -%>
|
||||
<%- if rom_board_name then -%>
|
||||
<p class="alert-message warning"><%=pcdata(translatef("Warning: Device (%s) is unknown or isn't a dual-partition device!", rom_board_name))%></p>
|
||||
<%- else -%>
|
||||
<p class="alert-message warning"><%:Warning: Unable to obtain device information!%></p>
|
||||
<%- end -%>
|
||||
<%- if rom_board_name then -%>
|
||||
<p class="alert-message warning"><%=pcdata(translatef("Warning: Device (%s) is unknown or isn't a dual-partition device!", rom_board_name))%></p>
|
||||
<%- else -%>
|
||||
<p class="alert-message warning"><%=pcdata(translatef("Warning: Unable to obtain device information!"))%></p>
|
||||
<%- end -%>
|
||||
<%- end -%>
|
||||
|
||||
<hr />
|
||||
|
@ -91,10 +91,10 @@
|
|||
<%- if nixio.fs.access("/sbin/poweroff") then -%>
|
||||
<form method="post" action="<%=url('admin/system/advanced_reboot/power_off')%>">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input id="poweroff-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Perform power off...%>" />
|
||||
<input id="poweroff-button" type="submit" class="cbi-button cbi-button-apply important" value="<%:Perform power off...%>" />
|
||||
</form>
|
||||
<%- else -%>
|
||||
<p class="alert-message warning"><%:Warning: This system does not support powering off!%></p>
|
||||
<p class="alert-message warning"><%:Warning: This system does not support powering off!%></p>
|
||||
<%- end -%>
|
||||
|
||||
<%+footer%>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Copyright 2017 Stan Grishin <stangri@melmac.net>
|
||||
Copyright 2017-2018 Stan Grishin <stangri@melmac.net>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
|
@ -10,10 +10,10 @@
|
|||
<h2 name="content"><%:Reboot Device to an Alternative Partition%> - <%:Confirm%></h2>
|
||||
<p>
|
||||
<%_ 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 />
|
||||
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. %>
|
||||
</p>
|
||||
|
||||
|
@ -21,8 +21,8 @@
|
|||
<form class="inline" action="<%=REQUEST_URI%>" method="post">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input type="hidden" name="step" value="2" />
|
||||
<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
|
||||
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
|
||||
<input class="cbi-button cbi-button-reset important" name="cancel" type="submit" value="<%:Cancel%>" />
|
||||
<input class="cbi-button cbi-button-apply important" type="submit" value="<%:Proceed%>" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title><%=luci.sys.hostname()%> - <%= title or translate("Rebooting...") %></title>
|
||||
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css?v=git-19.271.68204-f8775ee" />
|
||||
<script type="text/javascript" src="<%=resource%>/xhr.js?v=git-19.271.68204-f8775ee"></script>
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
var interval = window.setInterval(function() {
|
||||
var img = new Image();
|
||||
var target = ('https:' == document.location.protocol ? 'https://' : 'http://') + <%=addr and "'%s'" % addr or "window.location.host"%>;
|
||||
|
||||
img.onload = function() {
|
||||
window.clearInterval(interval);
|
||||
window.location.replace(target);
|
||||
};
|
||||
|
||||
img.src = target + '<%=resource%>/icons/loading.gif?' + Math.random();
|
||||
|
||||
}, 5000);
|
||||
//]]></script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="fill">
|
||||
<div class="container">
|
||||
<p class="brand"><%=luci.sys.hostname() or "?"%></p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
 
|
||||
<div class="main">
|
||||
<div id="maincontainer">
|
||||
<div id="maincontent" class="container">
|
||||
<h2 name="content" id="applyreboot-container" ><%:System%> - <%= title or translate("Rebooting...") %></h2>
|
||||
<div class="cbi-section" id="applyreboot-section">
|
||||
<div>
|
||||
<%= msg or translate("Changes applied.") %>
|
||||
</div>
|
||||
<div>
|
||||
<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
|
||||
<%:Waiting for changes to be applied...%>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,7 +1,7 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Copyright 2017 Stan Grishin <stangri@melmac.net>
|
||||
Copyright 2017-2018 Stan Grishin <stangri@melmac.net>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
|
@ -17,8 +17,8 @@
|
|||
<form class="inline" action="<%=REQUEST_URI%>" method="post">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<input type="hidden" name="step" value="2" />
|
||||
<input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
|
||||
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
|
||||
<input class="cbi-button cbi-button-reset important" name="cancel" type="submit" value="<%:Cancel%>" />
|
||||
<input class="cbi-button cbi-button-apply important" type="submit" value="<%:Proceed%>" />
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,20 +1,18 @@
|
|||
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"
|
||||
"PO-Revision-Date: 2020-10-29 08:32+0000\n"
|
||||
"Last-Translator: sergio <sergio+it@outerface.net>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadvanced-reboot/ru/>\n"
|
||||
"Language: ru\n"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Действие"
|
||||
"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: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "Advanced Reboot"
|
||||
msgstr "Дополнительная перезагрузка"
|
||||
|
@ -22,11 +20,14 @@ msgstr "Дополнительная перезагрузка"
|
|||
msgid "Alternative"
|
||||
msgstr "Альтернатива"
|
||||
|
||||
msgid "Alternative reboot cancelled."
|
||||
msgstr "Альтернативная перезагрузка отменена."
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr "Отменить"
|
||||
msgstr "Отмена"
|
||||
|
||||
msgid "Changes applied."
|
||||
msgstr "Изменения установлены."
|
||||
|
||||
msgid "Compressed"
|
||||
msgstr "Сжатый"
|
||||
|
||||
msgid "Confirm"
|
||||
msgstr "Подтвердить"
|
||||
|
@ -37,8 +38,11 @@ msgstr "Текущий"
|
|||
msgid "ERROR:"
|
||||
msgstr "ОШИБКА:"
|
||||
|
||||
msgid "Firmware/OS (Kernel)"
|
||||
msgstr "Прошивка/ОС (Ядро)"
|
||||
msgid "Firmware"
|
||||
msgstr "Прошивка"
|
||||
|
||||
msgid "Loading"
|
||||
msgstr "Загрузка"
|
||||
|
||||
msgid "No access to fw_printenv or fw_printenv!"
|
||||
msgstr "Нет доступа к fw_printenv или fw_printenv!"
|
||||
|
@ -58,6 +62,9 @@ msgstr "Отключить питание устройства"
|
|||
msgid "Proceed"
|
||||
msgstr "Продолжить"
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr "Перезагрузка"
|
||||
|
||||
msgid "Reboot Device to an Alternative Partition"
|
||||
msgstr "Перезагрузить устройство в альтернативный раздел"
|
||||
|
||||
|
@ -71,21 +78,24 @@ msgid "Rebooting..."
|
|||
msgstr "Перезагрузка..."
|
||||
|
||||
msgid "Shutting down..."
|
||||
msgstr "Отключается..."
|
||||
msgstr "Выключение..."
|
||||
|
||||
msgid "Status"
|
||||
msgstr "Состояние"
|
||||
|
||||
msgid "System"
|
||||
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 /"
|
||||
"> Подождите несколько минут, прежде чем попытаться установить соединение "
|
||||
"снова. Возможно, потребуется обновить адрес компьютера для повторного "
|
||||
"доступа к устройству в зависимости от ваших настроек."
|
||||
"Система перезагружается.<br /> НЕ ВЫКЛЮЧАЙТЕ УСТРОЙСТВО!<br /> Подождите "
|
||||
"несколько минут, прежде чем попытаться установить соединение снова. "
|
||||
"Возможно, потребуется обновить адрес компьютера для повторного доступа к "
|
||||
"устройству в зависимости от настроек."
|
||||
|
||||
msgid ""
|
||||
"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
|
||||
|
@ -93,31 +103,34 @@ msgid ""
|
|||
"might be necessary to renew the address of your computer to reach the device "
|
||||
"again, depending on your settings."
|
||||
msgstr ""
|
||||
"Система перезагружается на альтернативный раздел сейчас.<br /> НЕ ОТКЛЮЧАЙТЕ "
|
||||
"ПИТАНИЕ УСТРОЙСТВА!<br /> Подождите несколько минут, прежде чем попытаться "
|
||||
"установить соединение снова. Возможно, потребуется обновить адрес компьютера "
|
||||
"для повторного доступа к устройству в зависимости от ваших настроек."
|
||||
"Система перезагружается на альтернативный раздел.<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 /> "
|
||||
"Возможно, потребуется обновить адрес компьютера для повторного доступа к "
|
||||
"устройству в зависимости от настроек."
|
||||
"Система завершает работу.<br /> НЕ ВЫКЛЮЧАЙТЕ УСТРОЙСТВО!<br /> Возможно, "
|
||||
"потребуется обновить адрес компьютера для повторного доступа к устройству в "
|
||||
"зависимости от настроек."
|
||||
|
||||
msgid "Unable to find Dual Boot Flag Partition."
|
||||
msgstr "Невозможно найти Dual Boot раздел."
|
||||
|
||||
msgid "Unable to obtain firmware environment variable"
|
||||
msgstr "Невозможно получить переменную среды прошивки"
|
||||
msgid "Unable to obtain firmware environment variable: %s."
|
||||
msgstr "Невозможно получить переменную окружения прошивки: %s."
|
||||
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition"
|
||||
msgstr "Невозможно использовать Dual Boot раздел."
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition: %s."
|
||||
msgstr "Невозможно установить точку входа Dual Boot для раздела: %s."
|
||||
|
||||
msgid "Unable to set firmware environment variable"
|
||||
msgstr "Невозможно установить переменную среды прошивки"
|
||||
msgid "Unable to set firmware environment variable: %s to %s."
|
||||
msgstr "Невозможно установить переменную окружения прошивки: %s в %s."
|
||||
|
||||
msgid "Unknown"
|
||||
msgstr "Неизвестно"
|
||||
|
||||
msgid ""
|
||||
"WARNING: An alternative partition might have its own settings and completely "
|
||||
|
@ -148,16 +161,26 @@ msgstr ""
|
|||
"которое не поддерживает выключение питания.<br /><br /> Нажмите \"Продолжить"
|
||||
"\" ниже, чтобы выключить устройство."
|
||||
|
||||
msgid "Waiting for changes to be applied..."
|
||||
msgstr "Ждём установления изменений..."
|
||||
|
||||
msgid "Warning: Device (%s) is unknown or isn't a dual-partition device!"
|
||||
msgstr ""
|
||||
"Внимание: Устройство (%s) не известно или не имеет двойной раздел памяти!"
|
||||
|
||||
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 ""
|
||||
msgid "Warning: Unable to obtain device information!"
|
||||
msgstr "Внимание: Невозможно получить информацию об устройстве!"
|
||||
|
||||
msgid "attempting to mount alternative partition (mtd%s)"
|
||||
msgstr "попытка монтирования альтернативного раздела (mtd%s)"
|
||||
|
||||
msgid "attempting to unmount alternative partition (mtd%s)"
|
||||
msgstr "попытка размонтирования альтернативного раздела (mtd%s)"
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Åtgärd"
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-20 15:36+0000\n"
|
||||
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsadvanced-reboot/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1-dev\n"
|
||||
|
||||
msgid "Advanced Reboot"
|
||||
msgstr "Avancerad omstart"
|
||||
|
@ -10,12 +16,15 @@ msgstr "Avancerad omstart"
|
|||
msgid "Alternative"
|
||||
msgstr "Alternativ"
|
||||
|
||||
msgid "Alternative reboot cancelled."
|
||||
msgstr ""
|
||||
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
msgid "Changes applied."
|
||||
msgstr "Ändringar tillämpade. "
|
||||
|
||||
msgid "Compressed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm"
|
||||
msgstr "Bekräfta"
|
||||
|
||||
|
@ -23,13 +32,16 @@ msgid "Current"
|
|||
msgstr "Nuvarande"
|
||||
|
||||
msgid "ERROR:"
|
||||
msgstr ""
|
||||
msgstr "FEL:"
|
||||
|
||||
msgid "Firmware/OS (Kernel)"
|
||||
msgstr "Inre mjukvara/OS (Kärna)"
|
||||
msgid "Firmware"
|
||||
msgstr "Firmware"
|
||||
|
||||
msgid "Loading"
|
||||
msgstr "Laddar"
|
||||
|
||||
msgid "No access to fw_printenv or fw_printenv!"
|
||||
msgstr ""
|
||||
msgstr "Ingen åtkomst till fw_printenv eller fw_printenv! "
|
||||
|
||||
msgid "Partition"
|
||||
msgstr "Partition"
|
||||
|
@ -46,6 +58,9 @@ msgstr "Stäng av enhet"
|
|||
msgid "Proceed"
|
||||
msgstr "Fortsätt"
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr "Starta om"
|
||||
|
||||
msgid "Reboot Device to an Alternative Partition"
|
||||
msgstr "Starta om enheten till en alternativ partition"
|
||||
|
||||
|
@ -64,12 +79,18 @@ msgstr "Stänger av..."
|
|||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
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 ""
|
||||
"Systemet startar om nu. <br /> STÄNG INTE AV ENHETEN!<br /> Vänta ett par "
|
||||
"minuter innan du försöker ansluta. Du kan behöva förnya adressen på din "
|
||||
"dator för att nå enheten igen, beroende på inställningarna."
|
||||
|
||||
msgid ""
|
||||
"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
|
||||
|
@ -77,6 +98,10 @@ msgid ""
|
|||
"might be necessary to renew the address of your computer to reach the device "
|
||||
"again, depending on your settings."
|
||||
msgstr ""
|
||||
"Systemet startar om till en alternativ partition nu.<br />STÄNG INTE AV "
|
||||
"ENHETEN!<br /> Vänta ett par minuter innan du försöker ansluta. Du kan "
|
||||
"behöva förnya adressen på din dator för att nå enheten igen, beroende på "
|
||||
"inställningarna. "
|
||||
|
||||
msgid ""
|
||||
"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
|
||||
|
@ -88,15 +113,18 @@ msgstr ""
|
|||
"att nå enheten igen."
|
||||
|
||||
msgid "Unable to find Dual Boot Flag Partition."
|
||||
msgstr "Det gick inte att hitta Dual Boot Flag Partition."
|
||||
|
||||
msgid "Unable to obtain firmware environment variable: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to obtain firmware environment variable"
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition"
|
||||
msgid "Unable to set firmware environment variable: %s to %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to set firmware environment variable"
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -109,6 +137,15 @@ msgid ""
|
|||
"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
|
||||
"to reboot device to an alternative partition."
|
||||
msgstr ""
|
||||
"VARNING: En alternativ partition kan ha sina egna inställningar och helt "
|
||||
"annan firmware.<br /> <br />Eftersom din nätverkskonfiguration och WiFi "
|
||||
"SSID / lösenord på alternativ partition kan vara annorlunda, kan du behöva "
|
||||
"justera dina datorinställningar för att kunna nå din enhet igen efter "
|
||||
"omstart.\n"
|
||||
"<br /> <br /> Tänk också på att en alternativ partition firmware kanske inte "
|
||||
"är ett enkelt sätt att växla aktiv partition och starta tillbaka till den "
|
||||
"aktiva partitionen. <br /> <br / > Klicka på \"Fortsätt\" nedan för att "
|
||||
"starta om enheten till en alternativ partition."
|
||||
|
||||
msgid ""
|
||||
"WARNING: Power off might result in a reboot on a device which doesn't "
|
||||
|
@ -119,15 +156,26 @@ msgstr ""
|
|||
"stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att "
|
||||
"stänga av din enhet."
|
||||
|
||||
msgid "Waiting for changes to be applied..."
|
||||
msgstr "Väntar på att ändringarna ska bli verkställda..."
|
||||
|
||||
msgid "Warning: Device (%s) is unknown or isn't a dual-partition device!"
|
||||
msgstr ""
|
||||
"Varning: Enheten (% s) är okänd eller är inte en enhet med dubbla "
|
||||
"partitioner!"
|
||||
|
||||
msgid "Warning: There are unsaved changes that will get lost on reboot!"
|
||||
msgstr ""
|
||||
"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
|
||||
|
||||
msgid "Warning: This system does not have two partitions!"
|
||||
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"
|
||||
msgid "Warning: Unable to obtain device information!"
|
||||
msgstr "Varning: Det går inte att få information om enheten!"
|
||||
|
||||
msgid "attempting to mount alternative partition (mtd%s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "attempting to unmount alternative partition (mtd%s)"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
msgid ") is unknown or isn't a dual-partition device!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
msgid "Advanced Reboot"
|
||||
msgstr ""
|
||||
|
||||
|
@ -16,6 +10,12 @@ msgstr ""
|
|||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
msgid "Changes applied."
|
||||
msgstr ""
|
||||
|
||||
msgid "Compressed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm"
|
||||
msgstr ""
|
||||
|
||||
|
@ -25,7 +25,10 @@ msgstr ""
|
|||
msgid "ERROR:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Firmware/OS (Kernel)"
|
||||
msgid "Firmware"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
msgid "No access to fw_printenv or fw_printenv!"
|
||||
|
@ -46,6 +49,9 @@ msgstr ""
|
|||
msgid "Proceed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reboot Device to an Alternative Partition"
|
||||
msgstr ""
|
||||
|
||||
|
@ -64,6 +70,9 @@ msgstr ""
|
|||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
msgid "System"
|
||||
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 "
|
||||
|
@ -87,13 +96,16 @@ msgstr ""
|
|||
msgid "Unable to find Dual Boot Flag Partition."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to obtain firmware environment variable"
|
||||
msgid "Unable to obtain firmware environment variable: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition"
|
||||
msgid "Unable to set Dual Boot Flag Partition entry for partition: %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unable to set firmware environment variable"
|
||||
msgid "Unable to set firmware environment variable: %s to %s."
|
||||
msgstr ""
|
||||
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
msgid ""
|
||||
|
@ -113,7 +125,10 @@ msgid ""
|
|||
"device."
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning: Device ("
|
||||
msgid "Waiting for changes to be applied..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning: Device (%s) is unknown or isn't a dual-partition device!"
|
||||
msgstr ""
|
||||
|
||||
msgid "Warning: There are unsaved changes that will get lost on reboot!"
|
||||
|
@ -125,5 +140,8 @@ msgstr ""
|
|||
msgid "Warning: Unable to obtain device information!"
|
||||
msgstr ""
|
||||
|
||||
msgid "to"
|
||||
msgid "attempting to mount alternative partition (mtd%s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "attempting to unmount alternative partition (mtd%s)"
|
||||
msgstr ""
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
rm -rf /var/luci-modulecache/; rm -f /var/luci-indexcache;
|
||||
exit 0
|
||||
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2014-06-02 21:34+0200\n"
|
||||
"Last-Translator: Alex <alexhenrie24@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2019-10-20 13:07+0000\n"
|
||||
"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
|
||||
"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/ca/>\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 3.9.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Servidor AHCP"
|
||||
|
@ -51,7 +52,7 @@ msgid "Announced prefixes"
|
|||
msgstr "Prefixos anunciats"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Recopilant informació..."
|
||||
msgstr "S’estan recollint dades…"
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Retransmissor"
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2014-04-23 23:01+0200\n"
|
||||
"Last-Translator: koli <lukas.koluch@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-02-04 05:03+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/cs/>\n"
|
||||
"Language: cs\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Generator: Weblate 3.11-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP Server"
|
||||
|
@ -33,7 +34,7 @@ msgid "Address"
|
|||
msgstr "Adresa"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Pokročilé nastavení"
|
||||
msgstr "Pokročilá nastavení"
|
||||
|
||||
msgid "Age"
|
||||
msgstr "Stáří"
|
||||
|
@ -48,7 +49,7 @@ msgid "Announced prefixes"
|
|||
msgstr "Oznámené předčíslí"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Probíhá shromažďování dat..."
|
||||
msgstr "Shromažďování údajů…"
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Přesměrování"
|
||||
|
@ -63,7 +64,7 @@ msgid "IPv4 only"
|
|||
msgstr "pouze IPv4"
|
||||
|
||||
msgid "IPv6 only"
|
||||
msgstr "Pouze IPv6"
|
||||
msgstr "pouze IPv6"
|
||||
|
||||
msgid "Lease directory"
|
||||
msgstr "Zapůjčené adresáře"
|
||||
|
@ -72,7 +73,7 @@ msgid "Lease validity time"
|
|||
msgstr "Doba platnosti zapujčení"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Soubor protokolu"
|
||||
msgstr "Soubor pro záznam událostí"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Vícesměrové adresy"
|
||||
|
@ -90,13 +91,13 @@ msgid "Served interfaces"
|
|||
msgstr "Obsluhované rozhraní"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Servr"
|
||||
msgstr "Server"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
|
||||
msgstr "Specifikuje ohlášené IPv4 a IPv6 NTP servery"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 name servers"
|
||||
msgstr "Specifikuje ohlášené IPv4 a IPv6 názvové servery"
|
||||
msgstr "Specifikuje ohlášené IPv4 a IPv6 name servery"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr "Specifikuje ohlášené IPv4 a IPv6 sítě předpony v CIDR notaci"
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-01-30 18:21+0200\n"
|
||||
"Last-Translator: DAC324 <gerd_roethig@web.de>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-07-11 21:29+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/de/>\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP Server"
|
||||
msgstr "AHCP-Server"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
|
@ -100,7 +100,7 @@ msgstr "Konfiguriert die bekannt gegebenen IPv4- und IPv6-DNS-Server"
|
|||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr ""
|
||||
"Konfiguriert die bekannt gegebenen IPv4- und IPv6-Netzwerkprefixe. Angabe in "
|
||||
"CIDR-Notation."
|
||||
"CIDR-Notation"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "Der AHCP-Dienst läuft nicht."
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-03-18 16:25+0200\n"
|
||||
"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-04-25 16:36+0000\n"
|
||||
"Last-Translator: george k <norhorn@gmail.com>\n"
|
||||
"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/el/>\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Εξυπηρετητής AHCP"
|
||||
|
@ -20,6 +21,11 @@ msgid ""
|
|||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"Το AHCP είναι ένα πρωτόκολλο αυτόματης διαμόρφωσης για δίκτυα με διευθύνσεις "
|
||||
"IPv6 και διπλού πρωτοκόλλου IPv6/IPv4 σχεδιασμένο για αντικατάσταση τoυ "
|
||||
"αυτόματου εντοπισμού του δρομολογητή ή του DHCP, όταν είναι δύσκολο να "
|
||||
"λειτουργήσει ένας διακομιστής σε κάθε τομέα μετάδοσης, για παράδειγμα για "
|
||||
"κινητά ad-hoc δίκτυα."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Ενεργά AHCP Leases"
|
||||
|
@ -28,22 +34,22 @@ msgid "Address"
|
|||
msgstr "Διεύθυνση"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr ""
|
||||
msgstr "Ρυθμίσεις για προχωρημένους"
|
||||
|
||||
msgid "Age"
|
||||
msgstr ""
|
||||
msgstr "Ηλικία"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr ""
|
||||
msgstr "Ενεργοί διακομιστές DNS"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr ""
|
||||
msgstr "Ενεργοί διακομιστές NTP"
|
||||
|
||||
msgid "Announced prefixes"
|
||||
msgstr ""
|
||||
msgstr "Ενεργά προθέματα δικτύου"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Συλλέγονται δεδομένα..."
|
||||
msgstr "Συλλογή δεδομένων..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Προωθητής"
|
||||
|
@ -55,14 +61,13 @@ msgid "IPv4 and IPv6"
|
|||
msgstr "IPv4 και IPv6"
|
||||
|
||||
msgid "IPv4 only"
|
||||
msgstr "μόνο IPv4"
|
||||
msgstr "Μόνο IPv4"
|
||||
|
||||
msgid "IPv6 only"
|
||||
msgstr "μόνο IPv6"
|
||||
msgstr "Μόνο IPv6"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Lease directory"
|
||||
msgstr "Κατάλογος leases"
|
||||
msgstr "Κατάλογος δεσμευμένων διευθύνσεων"
|
||||
|
||||
msgid "Lease validity time"
|
||||
msgstr "Χρόνος εγκυρότητας lease"
|
||||
|
@ -74,7 +79,7 @@ msgid "Multicast address"
|
|||
msgstr "Διεύθυνση multicast"
|
||||
|
||||
msgid "Operation mode"
|
||||
msgstr ""
|
||||
msgstr "Τρόπος λειτουργίας"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Θύρα"
|
||||
|
@ -86,7 +91,7 @@ msgid "Served interfaces"
|
|||
msgstr "Εξυπηρετούμενες διεπαφές"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Εξυπηρετητής"
|
||||
msgstr "Διακομιστής"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
|
||||
msgstr "Καθορίζει τους εξυπηρετητές NTP σε IPv4 και IPv6 που ανακοινώνονται"
|
||||
|
@ -94,21 +99,19 @@ msgstr "Καθορίζει τους εξυπηρετητές NTP σε IPv4 κα
|
|||
msgid "Specifies the announced IPv4 and IPv6 name servers"
|
||||
msgstr "Καθορίζει τους εξυπηρετητές DNS σε IPv4 και IPv6 που ανακοινώνονται"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr ""
|
||||
"Καθορίζει τα προθέματα διευθύνσεων IPv4 και IPv6 που ανακοινώνονται, σε "
|
||||
"μορφή CIDR"
|
||||
"Καθορίζει ποιες διευθύνσεις δικτύου IPv4 και IPv6 θα ανακοινωθούν, σε μορφή "
|
||||
"CIDR"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr ""
|
||||
msgstr "Η υπηρεσία AHCP δεν εκτελείται."
|
||||
|
||||
msgid "The AHCP Service is running with ID %s."
|
||||
msgstr ""
|
||||
msgstr "Η υπηρεσία AHCP εκτελείται με ID %s."
|
||||
|
||||
#, fuzzy
|
||||
msgid "There are no active leases."
|
||||
msgstr "Δεν υπάρχουν ενεργά leases"
|
||||
msgstr "Δεν υπάρχουν ενεργές συνδέσεις."
|
||||
|
||||
msgid "Unique ID file"
|
||||
msgstr "Αρχείο μοναδικού αναγνωριστικού"
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-04-15 11:31+0200\n"
|
||||
"Last-Translator: madanadam <madanadam@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-11-04 00:26+0000\n"
|
||||
"Last-Translator: Igor Benek-Lins <beneklins@protonmail.ch>\n"
|
||||
"Language-Team: English <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/en/>\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP Server"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
|
@ -22,7 +22,7 @@ msgid ""
|
|||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery and DHCP on "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
|
||||
|
|
|
@ -1,34 +1,36 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-09-14 19:30+0200\n"
|
||||
"Last-Translator: José Vicente <josevteg@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-10-31 10:05+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Servidor AHCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP es un protocolo de autoconfiguración para redes con IPv6 o duales IPv6/"
|
||||
"IPv4 diseñado para ser usado en lugar de router discovery o DHCP en redes en "
|
||||
"las que es difícil o imposible configurar un servidor en cada capa de enlace "
|
||||
"del dominio de propagación como las redes móviles ad-hoc."
|
||||
"AHCP es un protocolo de configuración automática para redes IPv6 e IPv4/IPv6 "
|
||||
"diseñado para utilizarse en sustitución del descubrimiento de enrutador y "
|
||||
"DHCP en redes donde es difícil o imposible configurar un servidor en todos "
|
||||
"los dominios de difusión de capas de enlaces; por ejemplo, en redes «ad hoc» "
|
||||
"móviles."
|
||||
|
||||
# "Lease" en el sentido usado en DHCP no tiene una traducción clara en español y se puede usar la misma palabra en que en inglés.
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Cesiones activas AHCP"
|
||||
msgstr "Concesiones AHCP activas"
|
||||
|
||||
msgid "Address"
|
||||
msgstr "Dirección"
|
||||
|
@ -40,7 +42,7 @@ msgid "Age"
|
|||
msgstr "Vida"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Servidores DNS declarados"
|
||||
msgstr "Servidores DNS anunciados"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "Servidores NTP declarados"
|
||||
|
@ -49,7 +51,7 @@ msgid "Announced prefixes"
|
|||
msgstr "Prefijos declarados"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Obteniendo datos..."
|
||||
msgstr "Recolectando datos…"
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Transmisor"
|
||||
|
@ -67,13 +69,13 @@ msgid "IPv6 only"
|
|||
msgstr "Sólo IPv6"
|
||||
|
||||
msgid "Lease directory"
|
||||
msgstr "Directorio de cesiones"
|
||||
msgstr "Directorio de direcciones"
|
||||
|
||||
msgid "Lease validity time"
|
||||
msgstr "Tiempo de validez de la cesión"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Fichero de registro"
|
||||
msgstr "Archivo de registro"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Dirección multicast"
|
||||
|
@ -109,7 +111,7 @@ msgid "The AHCP Service is running with ID %s."
|
|||
msgstr "El Servicio AHCP está funcionando con el ID %s."
|
||||
|
||||
msgid "There are no active leases."
|
||||
msgstr "No hay cesiones activas."
|
||||
msgstr "No hay ninguna concesión activa."
|
||||
|
||||
msgid "Unique ID file"
|
||||
msgstr "ID único de fichero"
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-11-06 13:06+0200\n"
|
||||
"Last-Translator: hogsim <hogsim@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-05-10 12:47+0000\n"
|
||||
"Last-Translator: viking76 <liaudetgael@gmail.com>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Serveur AHCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
|
@ -22,7 +22,7 @@ msgid ""
|
|||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP est un protocole d'auto-configuration pour les réseaux IPv6 et double-"
|
||||
"pile IPv6/IPv4, destiné à remplacer la recherche de routeur et le service "
|
||||
"pile IPv6/IPv4, destiné à remplacer la recherche de routeur ou le service "
|
||||
"DHCP sur des réseaux où il est difficile, voire impossible de configurer un "
|
||||
"tel serveur pour tous les domaines de diffusion au niveau lien, par exemple "
|
||||
"pour des réseaux ad-hoc mobiles."
|
||||
|
@ -37,7 +37,7 @@ msgid "Advanced Settings"
|
|||
msgstr "Paramètres avancés"
|
||||
|
||||
msgid "Age"
|
||||
msgstr "Age"
|
||||
msgstr "Âge"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Serveurs DNS publiés"
|
||||
|
@ -73,7 +73,7 @@ msgid "Lease validity time"
|
|||
msgstr "Date de validité d'un bail"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Fichier journal"
|
||||
msgstr "Fichier de journal"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Adresse multidiffusion"
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-09-10 03:44+0200\n"
|
||||
"Last-Translator: Snoof <sagim9@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-10-17 15:26+0000\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/he/>\n"
|
||||
"Language: he\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Generator: Weblate 4.3.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "שרת AHCP"
|
||||
|
@ -49,7 +50,7 @@ msgid "Announced prefixes"
|
|||
msgstr "קידומות מוכרזות"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "אוסף נתונים..."
|
||||
msgstr "נאספים נתונים…"
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,31 +1,33 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-03-31 15:46+0200\n"
|
||||
"Last-Translator: juhosg <juhosg@openwrt.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/openwrt/luci/issues\n"
|
||||
"POT-Creation-Date: 2020-01-05 23:41+0000\n"
|
||||
"PO-Revision-Date: 2020-08-12 21:32+0000\n"
|
||||
"Last-Translator: Balázs Úr <balazs@urbalazs.hu>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/hu/>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP kiszolgáló"
|
||||
msgstr "AHCP-kiszolgáló"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"Az AHCP egy olyan automatikus konfigurációs protokoll IPv6 és kettős IPv6/"
|
||||
"IPv4 hálózatokhoz, mely a DHCP és a router dicovery protokoll helyett "
|
||||
"használható olyan hálózatokok ahol nehéz vagy lehetetlen beállítani külön "
|
||||
"kiszolgálót minden kapcsolati réteg tartományon belül, mint például a mobil "
|
||||
"eseti hálózatok."
|
||||
"Az AHCP egy automatikus beállítási protokoll IPv6 és kettős IPv6/IPv4 "
|
||||
"hálózatokhoz, amelyet az útválasztó-felfedezés vagy DHCP helyett történő "
|
||||
"használathoz terveztek olyan hálózatokon, ahol nehéz vagy lehetetlen "
|
||||
"beállítani egy kiszolgálót minden egyes kapcsolati réteg üzenetszórásos "
|
||||
"tartományán belül, például mobil eseti hálózatoknál."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Aktív AHCP bérletek"
|
||||
|
@ -34,46 +36,46 @@ msgid "Address"
|
|||
msgstr "Cím"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Haladó beállítások"
|
||||
msgstr "Speciális beállítások"
|
||||
|
||||
msgid "Age"
|
||||
msgstr "Kor"
|
||||
msgstr "Életkor"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Bejelentett névkiszolgálók"
|
||||
msgstr "Bejelentett DNS-kiszolgálók"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "Bejelentett NTP kiszolgálók"
|
||||
msgstr "Bejelentett NTP-kiszolgálók"
|
||||
|
||||
msgid "Announced prefixes"
|
||||
msgstr "Bejelentett előtagok"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Adatok összegyűjtése..."
|
||||
msgstr "Adatok összegyűjtése…"
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Továbbító"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Általános beállítások"
|
||||
msgstr "Általános beállítás"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 és IPv6"
|
||||
|
||||
msgid "IPv4 only"
|
||||
msgstr "csak IPv4"
|
||||
msgstr "Csak IPv4"
|
||||
|
||||
msgid "IPv6 only"
|
||||
msgstr "csak IPv6"
|
||||
msgstr "Csak IPv6"
|
||||
|
||||
msgid "Lease directory"
|
||||
msgstr "Bérlet könytár"
|
||||
msgstr "Bérlet könyvtár"
|
||||
|
||||
msgid "Lease validity time"
|
||||
msgstr "Bérlet érvényességi ideje"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Napló fájl"
|
||||
msgstr "Naplófájl"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Multicast cím"
|
||||
|
@ -85,32 +87,32 @@ msgid "Port"
|
|||
msgstr "Port"
|
||||
|
||||
msgid "Protocol family"
|
||||
msgstr "Protokoll család"
|
||||
msgstr "Protokollcsalád"
|
||||
|
||||
msgid "Served interfaces"
|
||||
msgstr "Kiszolgált interfészek"
|
||||
msgstr "Kiszolgált csatolók"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Kiszolgáló"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
|
||||
msgstr "A bejelentett IPv4 és IPv6 NTP kiszolgálók részletezése"
|
||||
msgstr "Meghatározza a bejelentett IPv4 és IPv6 NTP-kiszolgálókat"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 name servers"
|
||||
msgstr "A bejelentett IPv4 és IPv6 névkiszolgálók részletezése"
|
||||
msgstr "Meghatározza a bejelentett IPv4 és IPv6 névkiszolgálókat"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr ""
|
||||
"A bejelentett IPv4 és IPv6 hálózati előtagok részletezése CIDR jelölésben"
|
||||
"Meghatározza a bejelentett IPv4 és IPv6 hálózati előtagokat CIDR jelölésben"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "Az AHCP szolgáltatás nem fut"
|
||||
msgstr "Az AHCP szolgáltatás nem fut."
|
||||
|
||||
msgid "The AHCP Service is running with ID %s."
|
||||
msgstr "Az AHCP szolgáltatás fut, azonosítója:%s."
|
||||
msgstr "Az AHCP szolgáltatás fut ezzel az azonosítóval: %s."
|
||||
|
||||
msgid "There are no active leases."
|
||||
msgstr "Nincsenek aktív bérletek."
|
||||
|
||||
msgid "Unique ID file"
|
||||
msgstr "Egyedi azonosító fájl"
|
||||
msgstr "Egyedi azonosítófájl"
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-02-03 12:53+0200\n"
|
||||
"Last-Translator: Francesco <3gasas@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-11-12 02:29+0000\n"
|
||||
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/it/>\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Server AHCP"
|
||||
|
@ -48,13 +49,13 @@ msgid "Announced prefixes"
|
|||
msgstr "Prefissi indicati"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Raccolta dei dati..."
|
||||
msgstr "Raccolta dati..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Mittente"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Setup Generale"
|
||||
msgstr "Configurazione generale"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 e IPv6"
|
||||
|
@ -81,7 +82,7 @@ msgid "Operation mode"
|
|||
msgstr "Modalità di funzionamento"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
msgstr "Port"
|
||||
|
||||
msgid "Protocol family"
|
||||
msgstr "Protocollo famiglia"
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-04-19 07:54+0200\n"
|
||||
"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-11-14 12:48+0000\n"
|
||||
"Last-Translator: RyotaGamer <21ryotagamer@gmail.com>\n"
|
||||
"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"X-Generator: Weblate 4.4-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCPサーバー"
|
||||
|
@ -40,7 +41,7 @@ msgid "Age"
|
|||
msgstr "Age"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "通知するDNSサーバー"
|
||||
msgstr "アナウンスされたDNSサーバー"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "通知するNTPサーバー"
|
||||
|
@ -49,7 +50,7 @@ msgid "Announced prefixes"
|
|||
msgstr "通知するプレフィクス"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "データ収集中です..."
|
||||
msgstr "データを収集中..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "転送"
|
||||
|
@ -108,7 +109,7 @@ msgid "The AHCP Service is not running."
|
|||
msgstr "AHCP サービスは稼働していません。"
|
||||
|
||||
msgid "The AHCP Service is running with ID %s."
|
||||
msgstr "AHCP サービスは稼働中です。(ID %s)"
|
||||
msgstr "AHCP サービスは ID %s で稼働中です。"
|
||||
|
||||
msgid "There are no active leases."
|
||||
msgstr "有効なリースはありません。"
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2019-12-16 23:24+0000\n"
|
||||
"Last-Translator: Pusak Hitam <thegame.gamesky@gmail.com>\n"
|
||||
"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/ms/>\n"
|
||||
"Language: ms\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 3.10-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr ""
|
||||
|
@ -39,7 +44,7 @@ msgid "Announced prefixes"
|
|||
msgstr ""
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr ""
|
||||
msgstr "Mengumpul data..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-04-14 16:40+0200\n"
|
||||
"Last-Translator: Tomecki <przykryweczka@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-05-02 15:56+0000\n"
|
||||
"Last-Translator: Marcin Net <marcin.net@linux.pl>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/pl/>\n"
|
||||
"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Pootle 2.0.4\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Serwer AHCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP to protokół automatycznej konfiguracji sieci IPv6 i IPv6/IPv4 "
|
||||
"przeznaczone do stosowania zamiast DHCP w sieciach, w których jest trudne "
|
||||
"lub wręcz niemożliwe, aby skonfigurować serwer w każdej warstwie łącza "
|
||||
"domeny rozgłoszeniowej, na przykład w mobilnych sieciach ad-hoc."
|
||||
"AHCP jest protokołem autokonfiguracji dla sieci IPv6 i dual-stack IPv6/IPv4, "
|
||||
"przeznaczonym do wykorzystania w miejsce wykrywania routera lub DHCP w "
|
||||
"sieciach, w których konfiguracja serwera w każdej domenie nadawczej warstwy "
|
||||
"łączącej, np. w sieciach mobilnych ad-hoc, jest trudna lub niemożliwa."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Aktywne dzierżawy AHCP"
|
||||
|
@ -40,7 +40,7 @@ msgid "Age"
|
|||
msgstr "Wiek"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Rozgłaszane serwery DNS"
|
||||
msgstr "Rozgłaszaj serwery DNS"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "Rozgłaszane serwery NTP"
|
||||
|
@ -49,16 +49,16 @@ msgid "Announced prefixes"
|
|||
msgstr "Rozgłaszane prefiksy"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Zbieranie informacji..."
|
||||
msgstr "Trwa zbieranie danych..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Przekierowanie"
|
||||
msgstr "Przekazywanie"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Ustawienia podstawowe"
|
||||
msgstr "Ustawienia ogólne"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 oraz IPv6"
|
||||
msgstr "IPv4 i IPv6"
|
||||
|
||||
msgid "IPv4 only"
|
||||
msgstr "Tylko IPv4"
|
||||
|
@ -70,7 +70,7 @@ msgid "Lease directory"
|
|||
msgstr "Katalog dzierżaw"
|
||||
|
||||
msgid "Lease validity time"
|
||||
msgstr "Czas dzierżawy"
|
||||
msgstr "Czas ważności dzierżawy"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Plik dziennika"
|
||||
|
@ -94,13 +94,13 @@ msgid "Server"
|
|||
msgstr "Serwer"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
|
||||
msgstr "Określa rozgłaszane adresy IPv4/6 serwerów NTP"
|
||||
msgstr "Określa rozgłaszane adresy IPv4/IPv6 serwerów NTP"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 name servers"
|
||||
msgstr "Określa rozgłaszane adresy IPv4/6 serwerów nazw"
|
||||
msgstr "Określa rozgłaszane adresy IPv4/IPv6 serwerów nazw"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr "Określa rozgłaszane prefiksy sieciowe w notacji CIDR"
|
||||
msgstr "Określa rozgłaszane prefiksy sieciowe IPv4 i IPv6 w notacji CIDR"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "Usługa AHCP nie jest uruchomiona."
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-06-02 21:12+0200\n"
|
||||
"Last-Translator: joao.f.vieira <joao.f.vieira@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-05-02 10:21+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/pt/>\n"
|
||||
"Language: pt\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Servidor AHCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
"networks where it is difficult or impossible to configure a server within "
|
||||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"O AHCP é um protocolo de auto-configuração para redes IPv6 e IPv6/IPv4 dual-"
|
||||
"stack foi desenhado para ser usado no lugar do router discovery e DHCP nas "
|
||||
"redes onde é difícil ou impossível configurar o servidor dentro de cada "
|
||||
"camada de ligação no dominio de broadcast, por exemplo, redes ad-hoc móveis."
|
||||
"O AHCP é um protocolo de auto configuração para IPv6 e redes dual-stack de "
|
||||
"IPv6/IPv4, projetado para ser utilizado em vez da descoberta de roteador ou "
|
||||
"DHCP em redes onde é difícil ou impossível configurar um servidor dentro de "
|
||||
"cada domínio de broadcast no link-layer, por exemplo, redes móveis ad-hoc."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Concessões AHCP Ativas"
|
||||
|
@ -48,7 +48,7 @@ msgid "Announced prefixes"
|
|||
msgstr "Prefixos anunciados"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "A obter dados..."
|
||||
msgstr "A recolher dados..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Encaminhador"
|
||||
|
@ -72,7 +72,7 @@ msgid "Lease validity time"
|
|||
msgstr "Prazo de validade das concessões"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Ficheiro log"
|
||||
msgstr "Ficheiro de log"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Endereço de multicast"
|
||||
|
@ -107,10 +107,10 @@ msgid "The AHCP Service is not running."
|
|||
msgstr "O serviço AHCP não está a correr."
|
||||
|
||||
msgid "The AHCP Service is running with ID %s."
|
||||
msgstr "O serviço AHCP está a correr com o ID %s"
|
||||
msgstr "O serviço AHCP está executado com o ID %s."
|
||||
|
||||
msgid "There are no active leases."
|
||||
msgstr "Não existem concessões activas."
|
||||
msgstr "Não existem concessões ativas."
|
||||
|
||||
msgid "Unique ID file"
|
||||
msgstr "Ficheiro de ID único"
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2014-06-28 19:14+0200\n"
|
||||
"Last-Translator: xxvirusxx <condor20_05@yahoo.it>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-01-10 12:22+0000\n"
|
||||
"Last-Translator: Alexandru Stan <alex9457sn@gmail.com>\n"
|
||||
"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/ro/>\n"
|
||||
"Language: ro\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==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2);;\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
|
||||
"20)) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 3.10.1\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Server AHCP"
|
||||
|
@ -49,13 +50,13 @@ msgid "Announced prefixes"
|
|||
msgstr "Prefixe anuntate"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Colectare date.."
|
||||
msgstr "Colectare date..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Forwarder"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Configurare generala"
|
||||
msgstr "Configurare generală"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 si IPv6"
|
||||
|
|
|
@ -2,16 +2,17 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: LuCI: ahcp\n"
|
||||
"POT-Creation-Date: 2013-09-05 15:29+0200\n"
|
||||
"PO-Revision-Date: 2018-01-24 14:59+0300\n"
|
||||
"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\n"
|
||||
"Language-Team: http://cyber-place.ru\n"
|
||||
"PO-Revision-Date: 2020-06-07 13:45+0000\n"
|
||||
"Last-Translator: Artem <KovalevArtem.ru@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/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: Poedit 1.8.7.1\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: Weblate 4.1-dev\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
@ -77,7 +78,7 @@ msgid "Lease validity time"
|
|||
msgstr "Срок действия аренды"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Файл журнала"
|
||||
msgstr "Файл журнала приложения"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Адрес мультивещания"
|
||||
|
@ -98,13 +99,13 @@ msgid "Server"
|
|||
msgstr "Сервер"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 NTP servers"
|
||||
msgstr "Задайте IPv4 и IPv6 NTP сервера."
|
||||
msgstr "Задайте IPv4 и IPv6 NTP серверы"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 name servers"
|
||||
msgstr "Задайте IPv4 и IPv6 DNS сервера."
|
||||
msgstr "Задайте IPv4 и IPv6 DNS серверы"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr "Задайте IPv4 и IPv6 префиксы сети в нотации CIDR."
|
||||
msgstr "Задайте IPv4 и IPv6 префиксы сети в нотации CIDR"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "Служба AHCP не запущена."
|
||||
|
|
|
@ -1,12 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-04-04 17:34+0000\n"
|
||||
"Last-Translator: Dušan Kazik <prescott66@gmail.com>\n"
|
||||
"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/sk/>\n"
|
||||
"Language: sk\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==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.0-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr ""
|
||||
|
@ -22,10 +26,10 @@ msgid "Active AHCP Leases"
|
|||
msgstr ""
|
||||
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
msgstr "Adresa"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr ""
|
||||
msgstr "Pokročilé nastavenia"
|
||||
|
||||
msgid "Age"
|
||||
msgstr ""
|
||||
|
@ -40,19 +44,19 @@ msgid "Announced prefixes"
|
|||
msgstr ""
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr ""
|
||||
msgstr "Zbieram dáta..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr ""
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr ""
|
||||
msgstr "Všeobecné nastavenie"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr ""
|
||||
|
||||
msgid "IPv4 only"
|
||||
msgstr ""
|
||||
msgstr "Iba IPv4"
|
||||
|
||||
msgid "IPv6 only"
|
||||
msgstr ""
|
||||
|
@ -73,7 +77,7 @@ msgid "Operation mode"
|
|||
msgstr ""
|
||||
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
msgstr "Port"
|
||||
|
||||
msgid "Protocol family"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2014-04-27 22:52+0200\n"
|
||||
"Last-Translator: Umeaboy <hamnisdude@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-08-20 15:36+0000\n"
|
||||
"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.2.1-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP-server"
|
||||
|
@ -22,8 +23,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"AHCP är ett autokonfigurationsprotokoll för IPv6 och dual-stack IPv6/IPv4- "
|
||||
"nätverk designade för att användas vid upptäckt av router eller DHCP på "
|
||||
"nätverk där det är svårt eller omöjligt att ställa in en server inom "
|
||||
"varje sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
|
||||
"nätverk där det är svårt eller omöjligt att ställa in en server inom varje "
|
||||
"sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Aktiva AHCP-hyror"
|
||||
|
@ -71,7 +72,7 @@ msgid "Lease validity time"
|
|||
msgstr "Giltighetstid för hyran"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Logg-fil"
|
||||
msgstr "Loggfil"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Multicast-adress"
|
||||
|
@ -98,7 +99,8 @@ msgid "Specifies the announced IPv4 and IPv6 name servers"
|
|||
msgstr "Specificerar de aviserade IPv4 och IPv6 namn-servrarna"
|
||||
|
||||
msgid "Specifies the announced IPv4 and IPv6 network prefixes in CIDR notation"
|
||||
msgstr "Specificerar de aviserade IPv4 och IPv6 nätverksprefixen i CIDR-noteringen"
|
||||
msgstr ""
|
||||
"Specificerar de aviserade IPv4 och IPv6 nätverksprefixen i CIDR-noteringen"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "AHCP-tjänsten körs inte."
|
||||
|
@ -107,7 +109,7 @@ msgid "The AHCP Service is running with ID %s."
|
|||
msgstr "AHCP-tjänsten körs med ID %s."
|
||||
|
||||
msgid "There are no active leases."
|
||||
msgstr "Det finns inga aktiva hyror."
|
||||
msgstr "Det finns inga aktiva kontrakt."
|
||||
|
||||
msgid "Unique ID file"
|
||||
msgstr "Unik ID-fil"
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-11-25 14:51+0200\n"
|
||||
"Last-Translator: qbilay <qbilay@mynet.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-09-25 07:41+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/tr/>\n"
|
||||
"Language: tr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Generator: Weblate 4.3-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP Sunucusu"
|
||||
|
@ -47,7 +48,7 @@ msgid "Announced prefixes"
|
|||
msgstr ""
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Veriler toplanıyor..."
|
||||
msgstr "Veri alınıyor..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr ""
|
||||
|
@ -80,7 +81,7 @@ msgid "Operation mode"
|
|||
msgstr "Çalışma Modu"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
msgstr "Bağlantı noktası"
|
||||
|
||||
msgid "Protocol family"
|
||||
msgstr "Protokol Ailesi"
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2012-04-28 21:17+0200\n"
|
||||
"Last-Translator: Yurii <yuripet@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-10-27 21:26+0000\n"
|
||||
"Last-Translator: Yevhen Chebotarev <gekinadres@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/uk/>\n"
|
||||
"Language: uk\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"
|
||||
"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: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "Сервер AHCP"
|
||||
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
|
||||
"networks designed to be used in place of router discovery or DHCP on "
|
||||
|
@ -23,8 +23,10 @@ msgid ""
|
|||
"every link-layer broadcast domain, for example mobile ad-hoc networks."
|
||||
msgstr ""
|
||||
"AHCP є протоколом автоматичної конфігурації мереж IPv6 та IPv6/IPv4, що "
|
||||
"разраблений для використання замість DHCP. Наприклад, він використовується у "
|
||||
"стільникових ad-hoc мережах."
|
||||
"розроблений для використання замість DHCP та протоколів виявлення "
|
||||
"маршрутизаторів в мережах, де складно чи неможливо налаштувати сервер в "
|
||||
"середині кожної широкомовної зони канального рівня, наприклад в мобільних ad-"
|
||||
"hoc мережах."
|
||||
|
||||
msgid "Active AHCP Leases"
|
||||
msgstr "Активні оренди AHCP"
|
||||
|
@ -33,13 +35,13 @@ msgid "Address"
|
|||
msgstr "Адреса"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Додаткові параметри"
|
||||
msgstr "Розширені налаштування"
|
||||
|
||||
msgid "Age"
|
||||
msgstr "Вік"
|
||||
|
||||
msgid "Announced DNS servers"
|
||||
msgstr "Оголошені DNS-сервери"
|
||||
msgstr "Оголошено DNS-сервери"
|
||||
|
||||
msgid "Announced NTP servers"
|
||||
msgstr "Оголошені NTP-сервери"
|
||||
|
@ -54,16 +56,16 @@ msgid "Forwarder"
|
|||
msgstr "Спрямовувач"
|
||||
|
||||
msgid "General Setup"
|
||||
msgstr "Загальні параметри"
|
||||
msgstr "Загальні налаштування"
|
||||
|
||||
msgid "IPv4 and IPv6"
|
||||
msgstr "IPv4 та IPv6"
|
||||
|
||||
msgid "IPv4 only"
|
||||
msgstr "Тільки IPv4"
|
||||
msgstr "Лише IPv4"
|
||||
|
||||
msgid "IPv6 only"
|
||||
msgstr "Тільки IPv6"
|
||||
msgstr "Лише IPv6"
|
||||
|
||||
msgid "Lease directory"
|
||||
msgstr "Каталог оренд"
|
||||
|
@ -72,7 +74,7 @@ msgid "Lease validity time"
|
|||
msgstr "Термін дії оренди"
|
||||
|
||||
msgid "Log file"
|
||||
msgstr "Файл журналу"
|
||||
msgstr "Файл звіту"
|
||||
|
||||
msgid "Multicast address"
|
||||
msgstr "Групова адреса"
|
||||
|
@ -103,7 +105,7 @@ msgstr ""
|
|||
"Дозволяє вказати оголошувані IPv4 та IPv6 префікси мережі в нотації CIDR"
|
||||
|
||||
msgid "The AHCP Service is not running."
|
||||
msgstr "Сервіс AHCP не запущено"
|
||||
msgstr "Сервіс AHCP не запущено."
|
||||
|
||||
msgid "The AHCP Service is running with ID %s."
|
||||
msgstr "Сервіс AHCP запущено з ID %s."
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"PO-Revision-Date: 2013-12-05 04:46+0200\n"
|
||||
"Last-Translator: Thành <tienthanh.dqc@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"PO-Revision-Date: 2020-10-26 20:34+0000\n"
|
||||
"Last-Translator: 0x2f0713 <namhaiha0308@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsahcp/vi/>\n"
|
||||
"Language: vi\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Pootle 2.0.6\n"
|
||||
"X-Generator: Weblate 4.3.2-dev\n"
|
||||
|
||||
msgid "AHCP Server"
|
||||
msgstr "AHCP Server"
|
||||
|
@ -33,7 +34,7 @@ msgid "Address"
|
|||
msgstr "Địa chỉ"
|
||||
|
||||
msgid "Advanced Settings"
|
||||
msgstr "Thiết lập nâng cao"
|
||||
msgstr "Cài đặt nâng cao"
|
||||
|
||||
msgid "Age"
|
||||
msgstr "Thời gian thuê"
|
||||
|
@ -48,7 +49,7 @@ msgid "Announced prefixes"
|
|||
msgstr "Quảng bá tiền tố"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "Đang kết xuất dữ liệu..."
|
||||
msgstr "Đang lấy dữ liệu..."
|
||||
|
||||
msgid "Forwarder"
|
||||
msgstr "Chuyển tiếp"
|
||||
|
|
|
@ -135,7 +135,7 @@ o = s:taboption("task", Value, "max_concurrent_downloads", translate("Max concur
|
|||
o.placeholder = "5"
|
||||
|
||||
o = s:taboption("task", Value, "max_connection_per_server", translate("Max connection per server"), "1-16")
|
||||
o.datetype = "range(1, 16)"
|
||||
o.datatype = "range(1, 16)"
|
||||
o.placeholder = "1"
|
||||
|
||||
o = s:taboption("task", Value, "min_split_size", translate("Min split size"), "1M-1024M")
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
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-31 18:33+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"
|
||||
"PO-Revision-Date: 2020-09-29 14:41+0000\n"
|
||||
"Last-Translator: sergio <sergio+it@outerface.net>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsaria2/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: Weblate 4.3-dev\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
|
@ -107,7 +108,7 @@ msgid "Log file is in the config file dir."
|
|||
msgstr "Файл системного журнала находится в папке с config файлом."
|
||||
|
||||
msgid "Log level"
|
||||
msgstr "Записывать в журнал"
|
||||
msgstr "Уровень журналирования"
|
||||
|
||||
msgid "Max concurrent downloads"
|
||||
msgstr "Максимальное количество одновременных загрузок"
|
||||
|
@ -128,7 +129,7 @@ msgid "No Authentication"
|
|||
msgstr "Без проверки подлинности"
|
||||
|
||||
msgid "Notice"
|
||||
msgstr "Заметка"
|
||||
msgstr "Сообщение"
|
||||
|
||||
msgid "Off"
|
||||
msgstr "Выключено"
|
||||
|
@ -182,7 +183,7 @@ msgid "RPC username"
|
|||
msgstr "Логин для доступа к удаленному управлению (RPC)"
|
||||
|
||||
msgid "Run daemon as user"
|
||||
msgstr "Запуск демона<br />от имени пользователя"
|
||||
msgstr "Запуск демона от имени пользователя"
|
||||
|
||||
msgid "Sec"
|
||||
msgstr "Секунды"
|
||||
|
|
|
@ -1,5 +1,15 @@
|
|||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-02-13 10:27+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <kristoffer.grundstrom1983@gmail."
|
||||
"com>\n"
|
||||
"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsaria2/sv/>\n"
|
||||
"Language: sv\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 3.11-dev\n"
|
||||
|
||||
msgid "\"Falloc\" is not available in all cases."
|
||||
msgstr ""
|
||||
|
@ -8,7 +18,7 @@ msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
|
|||
msgstr ""
|
||||
|
||||
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
|
||||
msgstr ""
|
||||
msgstr "<abbr title=\"Local Peer Discovery\">LPD</abbr> aktiverat"
|
||||
|
||||
msgid "Additional Bt tracker enabled"
|
||||
msgstr ""
|
||||
|
@ -43,7 +53,7 @@ msgid "Config file directory"
|
|||
msgstr "Ställ in fil-mapp"
|
||||
|
||||
msgid "Debug"
|
||||
msgstr "Avlusa"
|
||||
msgstr "Felsök"
|
||||
|
||||
msgid "Default download directory"
|
||||
msgstr "Standard nerladdningsmapp"
|
||||
|
@ -166,7 +176,7 @@ msgid "RPC username"
|
|||
msgstr "RPC-användarnamn"
|
||||
|
||||
msgid "Run daemon as user"
|
||||
msgstr "Kör daemonen som användare"
|
||||
msgstr "Kör daemon som användare"
|
||||
|
||||
msgid "Sec"
|
||||
msgstr "Sek"
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
#
|
||||
# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Support for Asterisk
|
||||
|
||||
include ../../luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
|
@ -1,746 +0,0 @@
|
|||
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
module("luci.asterisk", package.seeall)
|
||||
require("luci.asterisk.cc_idd")
|
||||
|
||||
local _io = require("io")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local sys = require("luci.sys")
|
||||
local util = require("luci.util")
|
||||
|
||||
AST_BIN = "/usr/sbin/asterisk"
|
||||
AST_FLAGS = "-r -x"
|
||||
|
||||
|
||||
--- LuCI Asterisk - Resync uci context
|
||||
function uci_resync()
|
||||
uci = luci.model.uci.cursor()
|
||||
end
|
||||
|
||||
--- LuCI Asterisk io interface
|
||||
-- Handles low level io.
|
||||
-- @type module
|
||||
io = luci.util.class()
|
||||
|
||||
--- Execute command and return output
|
||||
-- @param command String containing the command to execute
|
||||
-- @return String containing the command output
|
||||
function io.exec(command)
|
||||
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
|
||||
assert(fh, "Failed to invoke asterisk")
|
||||
|
||||
local buffer = fh:read("*a")
|
||||
fh:close()
|
||||
return buffer
|
||||
end
|
||||
|
||||
--- Execute command and invoke given callback for each readed line
|
||||
-- @param command String containing the command to execute
|
||||
-- @param callback Function to call back for each line
|
||||
-- @return Always true
|
||||
function io.execl(command, callback)
|
||||
local ln
|
||||
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
|
||||
assert(fh, "Failed to invoke asterisk")
|
||||
|
||||
repeat
|
||||
ln = fh:read("*l")
|
||||
callback(ln)
|
||||
until not ln
|
||||
|
||||
fh:close()
|
||||
return true
|
||||
end
|
||||
|
||||
--- Execute command and return an iterator that returns one line per invokation
|
||||
-- @param command String containing the command to execute
|
||||
-- @return Iterator function
|
||||
function io.execi(command)
|
||||
local fh = _io.popen( "%s %s %q" %{ AST_BIN, AST_FLAGS, command }, "r" )
|
||||
assert(fh, "Failed to invoke asterisk")
|
||||
|
||||
return function()
|
||||
local ln = fh:read("*l")
|
||||
if not ln then fh:close() end
|
||||
return ln
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - core status
|
||||
core = luci.util.class()
|
||||
|
||||
--- Retrive version string.
|
||||
-- @return String containing the reported asterisk version
|
||||
function core.version(self)
|
||||
local version = io.exec("core show version")
|
||||
return version:gsub(" *\n", "")
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - SIP information.
|
||||
-- @type module
|
||||
sip = luci.util.class()
|
||||
|
||||
--- Get a list of known SIP peers
|
||||
-- @return Table containing each SIP peer
|
||||
function sip.peers(self)
|
||||
local head = false
|
||||
local peers = { }
|
||||
|
||||
for line in io.execi("sip show peers") do
|
||||
if not head then
|
||||
head = true
|
||||
elseif not line:match(" sip peers ") then
|
||||
local online, delay, id, uid
|
||||
local name, host, dyn, nat, acl, port, status =
|
||||
line:match("(.-) +(.-) +([D ]) ([N ]) (.) (%d+) +(.+)")
|
||||
|
||||
if host == '(Unspecified)' then host = nil end
|
||||
if port == '0' then port = nil else port = tonumber(port) end
|
||||
|
||||
dyn = ( dyn == 'D' and true or false )
|
||||
nat = ( nat == 'N' and true or false )
|
||||
acl = ( acl ~= ' ' and true or false )
|
||||
|
||||
online, delay = status:match("(OK) %((%d+) ms%)")
|
||||
|
||||
if online == 'OK' then
|
||||
online = true
|
||||
delay = tonumber(delay)
|
||||
elseif status ~= 'Unmonitored' then
|
||||
online = false
|
||||
delay = 0
|
||||
else
|
||||
online = nil
|
||||
delay = 0
|
||||
end
|
||||
|
||||
id, uid = name:match("(.+)/(.+)")
|
||||
|
||||
if not ( id and uid ) then
|
||||
id = name .. "..."
|
||||
uid = nil
|
||||
end
|
||||
|
||||
peers[#peers+1] = {
|
||||
online = online,
|
||||
delay = delay,
|
||||
name = id,
|
||||
user = uid,
|
||||
dynamic = dyn,
|
||||
nat = nat,
|
||||
acl = acl,
|
||||
host = host,
|
||||
port = port
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
return peers
|
||||
end
|
||||
|
||||
--- Get informations of given SIP peer
|
||||
-- @param peer String containing the name of the SIP peer
|
||||
function sip.peer(peer)
|
||||
local info = { }
|
||||
local keys = { }
|
||||
|
||||
for line in io.execi("sip show peer " .. peer) do
|
||||
if #line > 0 then
|
||||
local key, val = line:match("(.-) *: +(.*)")
|
||||
if key and val then
|
||||
|
||||
key = key:gsub("^ +",""):gsub(" +$", "")
|
||||
val = val:gsub("^ +",""):gsub(" +$", "")
|
||||
|
||||
if key == "* Name" then
|
||||
key = "Name"
|
||||
elseif key == "Addr->IP" then
|
||||
info.address, info.port = val:match("(.+) Port (.+)")
|
||||
info.port = tonumber(info.port)
|
||||
elseif key == "Status" then
|
||||
info.online, info.delay = val:match("(OK) %((%d+) ms%)")
|
||||
if info.online == 'OK' then
|
||||
info.online = true
|
||||
info.delay = tonumber(info.delay)
|
||||
elseif status ~= 'Unmonitored' then
|
||||
info.online = false
|
||||
info.delay = 0
|
||||
else
|
||||
info.online = nil
|
||||
info.delay = 0
|
||||
end
|
||||
end
|
||||
|
||||
if val == 'Yes' or val == 'yes' or val == '<Set>' then
|
||||
val = true
|
||||
elseif val == 'No' or val == 'no' then
|
||||
val = false
|
||||
elseif val == '<Not set>' or val == '(none)' then
|
||||
val = nil
|
||||
end
|
||||
|
||||
keys[#keys+1] = key
|
||||
info[key] = val
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return info, keys
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - Internal helpers
|
||||
-- @type module
|
||||
tools = luci.util.class()
|
||||
|
||||
--- Convert given value to a list of tokens. Split by white space.
|
||||
-- @param val String or table value
|
||||
-- @return Table containing tokens
|
||||
function tools.parse_list(v)
|
||||
local tokens = { }
|
||||
|
||||
v = type(v) == "table" and v or { v }
|
||||
for _, v in ipairs(v) do
|
||||
if type(v) == "string" then
|
||||
for v in v:gmatch("(%S+)") do
|
||||
tokens[#tokens+1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return tokens
|
||||
end
|
||||
|
||||
--- Convert given list to a collection of hyperlinks
|
||||
-- @param list Table of tokens
|
||||
-- @param url String pattern or callback function to construct urls (optional)
|
||||
-- @param sep String containing the seperator (optional, default is ", ")
|
||||
-- @return String containing the html fragment
|
||||
function tools.hyperlinks(list, url, sep)
|
||||
local html
|
||||
|
||||
local function mkurl(p, t)
|
||||
if type(p) == "string" then
|
||||
return p:format(t)
|
||||
elseif type(p) == "function" then
|
||||
return p(t)
|
||||
else
|
||||
return '#'
|
||||
end
|
||||
end
|
||||
|
||||
list = list or { }
|
||||
url = url or "%s"
|
||||
sep = sep or ", "
|
||||
|
||||
for _, token in ipairs(list) do
|
||||
html = ( html and html .. sep or '' ) ..
|
||||
'<a href="%s">%s</a>' %{ mkurl(url, token), token }
|
||||
end
|
||||
|
||||
return html or ''
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - International Direct Dialing Prefixes
|
||||
-- @type module
|
||||
idd = luci.util.class()
|
||||
|
||||
--- Lookup the country name for the given IDD code.
|
||||
-- @param country String containing IDD code
|
||||
-- @return String containing the country name
|
||||
function idd.country(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[3]) == "table" then
|
||||
for _, v2 in ipairs(v[3]) do
|
||||
if v2 == tostring(c) then
|
||||
return v[1]
|
||||
end
|
||||
end
|
||||
elseif v[3] == tostring(c) then
|
||||
return v[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Lookup the country code for the given IDD code.
|
||||
-- @param country String containing IDD code
|
||||
-- @return Table containing the country code(s)
|
||||
function idd.cc(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[3]) == "table" then
|
||||
for _, v2 in ipairs(v[3]) do
|
||||
if v2 == tostring(c) then
|
||||
return type(v[2]) == "table"
|
||||
and v[2] or { v[2] }
|
||||
end
|
||||
end
|
||||
elseif v[3] == tostring(c) then
|
||||
return type(v[2]) == "table"
|
||||
and v[2] or { v[2] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Lookup the IDD code(s) for the given country.
|
||||
-- @param idd String containing the country name
|
||||
-- @return Table containing the IDD code(s)
|
||||
function idd.idd(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if v[1]:lower():match(c:lower()) then
|
||||
return type(v[3]) == "table"
|
||||
and v[3] or { v[3] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Populate given CBI field with IDD codes.
|
||||
-- @param field CBI option object
|
||||
-- @return (nothing)
|
||||
function idd.cbifill(o)
|
||||
for i, v in ipairs(cc_idd.CC_IDD) do
|
||||
o:value("_%i" % i, util.pcdata(v[1]))
|
||||
end
|
||||
|
||||
o.formvalue = function(...)
|
||||
local val = luci.cbi.Value.formvalue(...)
|
||||
if val:sub(1,1) == "_" then
|
||||
val = tonumber((val:gsub("^_", "")))
|
||||
if val then
|
||||
return type(cc_idd.CC_IDD[val][3]) == "table"
|
||||
and cc_idd.CC_IDD[val][3] or { cc_idd.CC_IDD[val][3] }
|
||||
end
|
||||
end
|
||||
return val
|
||||
end
|
||||
|
||||
o.cfgvalue = function(...)
|
||||
local val = luci.cbi.Value.cfgvalue(...)
|
||||
if val then
|
||||
val = tools.parse_list(val)
|
||||
for i, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[3]) == "table" then
|
||||
if v[3][1] == val[1] then
|
||||
return "_%i" % i
|
||||
end
|
||||
else
|
||||
if v[3] == val[1] then
|
||||
return "_%i" % i
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return val
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - Country Code Prefixes
|
||||
-- @type module
|
||||
cc = luci.util.class()
|
||||
|
||||
--- Lookup the country name for the given CC code.
|
||||
-- @param country String containing CC code
|
||||
-- @return String containing the country name
|
||||
function cc.country(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[2]) == "table" then
|
||||
for _, v2 in ipairs(v[2]) do
|
||||
if v2 == tostring(c) then
|
||||
return v[1]
|
||||
end
|
||||
end
|
||||
elseif v[2] == tostring(c) then
|
||||
return v[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Lookup the international dialing code for the given CC code.
|
||||
-- @param cc String containing CC code
|
||||
-- @return String containing IDD code
|
||||
function cc.idd(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[2]) == "table" then
|
||||
for _, v2 in ipairs(v[2]) do
|
||||
if v2 == tostring(c) then
|
||||
return type(v[3]) == "table"
|
||||
and v[3] or { v[3] }
|
||||
end
|
||||
end
|
||||
elseif v[2] == tostring(c) then
|
||||
return type(v[3]) == "table"
|
||||
and v[3] or { v[3] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Lookup the CC code(s) for the given country.
|
||||
-- @param country String containing the country name
|
||||
-- @return Table containing the CC code(s)
|
||||
function cc.cc(c)
|
||||
for _, v in ipairs(cc_idd.CC_IDD) do
|
||||
if v[1]:lower():match(c:lower()) then
|
||||
return type(v[2]) == "table"
|
||||
and v[2] or { v[2] }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--- Populate given CBI field with CC codes.
|
||||
-- @param field CBI option object
|
||||
-- @return (nothing)
|
||||
function cc.cbifill(o)
|
||||
for i, v in ipairs(cc_idd.CC_IDD) do
|
||||
o:value("_%i" % i, util.pcdata(v[1]))
|
||||
end
|
||||
|
||||
o.formvalue = function(...)
|
||||
local val = luci.cbi.Value.formvalue(...)
|
||||
if val:sub(1,1) == "_" then
|
||||
val = tonumber((val:gsub("^_", "")))
|
||||
if val then
|
||||
return type(cc_idd.CC_IDD[val][2]) == "table"
|
||||
and cc_idd.CC_IDD[val][2] or { cc_idd.CC_IDD[val][2] }
|
||||
end
|
||||
end
|
||||
return val
|
||||
end
|
||||
|
||||
o.cfgvalue = function(...)
|
||||
local val = luci.cbi.Value.cfgvalue(...)
|
||||
if val then
|
||||
val = tools.parse_list(val)
|
||||
for i, v in ipairs(cc_idd.CC_IDD) do
|
||||
if type(v[2]) == "table" then
|
||||
if v[2][1] == val[1] then
|
||||
return "_%i" % i
|
||||
end
|
||||
else
|
||||
if v[2] == val[1] then
|
||||
return "_%i" % i
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return val
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - Dialzone
|
||||
-- @type module
|
||||
dialzone = luci.util.class()
|
||||
|
||||
--- Parse a dialzone section
|
||||
-- @param zone Table containing the zone info
|
||||
-- @return Table with parsed information
|
||||
function dialzone.parse(z)
|
||||
if z['.name'] then
|
||||
return {
|
||||
trunks = tools.parse_list(z.uses),
|
||||
name = z['.name'],
|
||||
description = z.description or z['.name'],
|
||||
addprefix = z.addprefix,
|
||||
matches = tools.parse_list(z.match),
|
||||
intlmatches = tools.parse_list(z.international),
|
||||
countrycode = z.countrycode,
|
||||
localzone = z.localzone,
|
||||
localprefix = z.localprefix
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a list of known dial zones
|
||||
-- @return Associative table of zones and table of zone names
|
||||
function dialzone.zones()
|
||||
local zones = { }
|
||||
local znames = { }
|
||||
uci:foreach("asterisk", "dialzone",
|
||||
function(z)
|
||||
zones[z['.name']] = dialzone.parse(z)
|
||||
znames[#znames+1] = z['.name']
|
||||
end)
|
||||
return zones, znames
|
||||
end
|
||||
|
||||
--- Get a specific dial zone
|
||||
-- @param name Name of the dial zone
|
||||
-- @return Table containing zone information
|
||||
function dialzone.zone(n)
|
||||
local zone
|
||||
uci:foreach("asterisk", "dialzone",
|
||||
function(z)
|
||||
if z['.name'] == n then
|
||||
zone = dialzone.parse(z)
|
||||
end
|
||||
end)
|
||||
return zone
|
||||
end
|
||||
|
||||
--- Find uci section hash for given zone number
|
||||
-- @param idx Zone number
|
||||
-- @return String containing the uci hash pointing to the section
|
||||
function dialzone.ucisection(i)
|
||||
local hash
|
||||
local index = 1
|
||||
i = tonumber(i)
|
||||
uci:foreach("asterisk", "dialzone",
|
||||
function(z)
|
||||
if not hash and index == i then
|
||||
hash = z['.name']
|
||||
end
|
||||
index = index + 1
|
||||
end)
|
||||
return hash
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - Voicemailbox
|
||||
-- @type module
|
||||
voicemail = luci.util.class()
|
||||
|
||||
--- Parse a voicemail section
|
||||
-- @param zone Table containing the mailbox info
|
||||
-- @return Table with parsed information
|
||||
function voicemail.parse(z)
|
||||
if z.number and #z.number > 0 then
|
||||
local v = {
|
||||
id = '%s@%s' %{ z.number, z.context or 'default' },
|
||||
number = z.number,
|
||||
context = z.context or 'default',
|
||||
name = z.name or z['.name'] or 'OpenWrt',
|
||||
zone = z.zone or 'homeloc',
|
||||
password = z.password or '0000',
|
||||
email = z.email or '',
|
||||
page = z.page or '',
|
||||
dialplans = { }
|
||||
}
|
||||
|
||||
uci:foreach("asterisk", "dialplanvoice",
|
||||
function(s)
|
||||
if s.dialplan and #s.dialplan > 0 and
|
||||
s.voicebox == v.number
|
||||
then
|
||||
v.dialplans[#v.dialplans+1] = s.dialplan
|
||||
end
|
||||
end)
|
||||
|
||||
return v
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a list of known voicemail boxes
|
||||
-- @return Associative table of boxes and table of box numbers
|
||||
function voicemail.boxes()
|
||||
local vboxes = { }
|
||||
local vnames = { }
|
||||
uci:foreach("asterisk", "voicemail",
|
||||
function(z)
|
||||
local v = voicemail.parse(z)
|
||||
if v then
|
||||
local n = '%s@%s' %{ v.number, v.context }
|
||||
vboxes[n] = v
|
||||
vnames[#vnames+1] = n
|
||||
end
|
||||
end)
|
||||
return vboxes, vnames
|
||||
end
|
||||
|
||||
--- Get a specific voicemailbox
|
||||
-- @param number Number of the voicemailbox
|
||||
-- @return Table containing mailbox information
|
||||
function voicemail.box(n)
|
||||
local box
|
||||
n = n:gsub("@.+$","")
|
||||
uci:foreach("asterisk", "voicemail",
|
||||
function(z)
|
||||
if z.number == tostring(n) then
|
||||
box = voicemail.parse(z)
|
||||
end
|
||||
end)
|
||||
return box
|
||||
end
|
||||
|
||||
--- Find all voicemailboxes within the given dialplan
|
||||
-- @param plan Dialplan name or table
|
||||
-- @return Associative table containing extensions mapped to mailbox info
|
||||
function voicemail.in_dialplan(p)
|
||||
local plan = type(p) == "string" and p or p.name
|
||||
local boxes = { }
|
||||
uci:foreach("asterisk", "dialplanvoice",
|
||||
function(s)
|
||||
if s.extension and #s.extension > 0 and s.dialplan == plan then
|
||||
local box = voicemail.box(s.voicebox)
|
||||
if box then
|
||||
boxes[s.extension] = box
|
||||
end
|
||||
end
|
||||
end)
|
||||
return boxes
|
||||
end
|
||||
|
||||
--- Remove voicemailbox and associated extensions from config
|
||||
-- @param box Voicemailbox number or table
|
||||
-- @param ctx UCI context to use (optional)
|
||||
-- @return Boolean indicating success
|
||||
function voicemail.remove(v, ctx)
|
||||
ctx = ctx or uci
|
||||
local box = type(v) == "string" and v or v.number
|
||||
local ok1 = ctx:delete_all("asterisk", "voicemail", {number=box})
|
||||
local ok2 = ctx:delete_all("asterisk", "dialplanvoice", {voicebox=box})
|
||||
return ( ok1 or ok2 ) and true or false
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - MeetMe Conferences
|
||||
-- @type module
|
||||
meetme = luci.util.class()
|
||||
|
||||
--- Parse a meetme section
|
||||
-- @param room Table containing the room info
|
||||
-- @return Table with parsed information
|
||||
function meetme.parse(r)
|
||||
if r.room and #r.room > 0 then
|
||||
local v = {
|
||||
room = r.room,
|
||||
pin = r.pin or '',
|
||||
adminpin = r.adminpin or '',
|
||||
description = r._description or '',
|
||||
dialplans = { }
|
||||
}
|
||||
|
||||
uci:foreach("asterisk", "dialplanmeetme",
|
||||
function(s)
|
||||
if s.dialplan and #s.dialplan > 0 and s.room == v.room then
|
||||
v.dialplans[#v.dialplans+1] = s.dialplan
|
||||
end
|
||||
end)
|
||||
|
||||
return v
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a list of known meetme rooms
|
||||
-- @return Associative table of rooms and table of room numbers
|
||||
function meetme.rooms()
|
||||
local mrooms = { }
|
||||
local mnames = { }
|
||||
uci:foreach("asterisk", "meetme",
|
||||
function(r)
|
||||
local v = meetme.parse(r)
|
||||
if v then
|
||||
mrooms[v.room] = v
|
||||
mnames[#mnames+1] = v.room
|
||||
end
|
||||
end)
|
||||
return mrooms, mnames
|
||||
end
|
||||
|
||||
--- Get a specific meetme room
|
||||
-- @param number Number of the room
|
||||
-- @return Table containing room information
|
||||
function meetme.room(n)
|
||||
local room
|
||||
uci:foreach("asterisk", "meetme",
|
||||
function(r)
|
||||
if r.room == tostring(n) then
|
||||
room = meetme.parse(r)
|
||||
end
|
||||
end)
|
||||
return room
|
||||
end
|
||||
|
||||
--- Find all meetme rooms within the given dialplan
|
||||
-- @param plan Dialplan name or table
|
||||
-- @return Associative table containing extensions mapped to room info
|
||||
function meetme.in_dialplan(p)
|
||||
local plan = type(p) == "string" and p or p.name
|
||||
local rooms = { }
|
||||
uci:foreach("asterisk", "dialplanmeetme",
|
||||
function(s)
|
||||
if s.extension and #s.extension > 0 and s.dialplan == plan then
|
||||
local room = meetme.room(s.room)
|
||||
if room then
|
||||
rooms[s.extension] = room
|
||||
end
|
||||
end
|
||||
end)
|
||||
return rooms
|
||||
end
|
||||
|
||||
--- Remove meetme room and associated extensions from config
|
||||
-- @param room Voicemailbox number or table
|
||||
-- @param ctx UCI context to use (optional)
|
||||
-- @return Boolean indicating success
|
||||
function meetme.remove(v, ctx)
|
||||
ctx = ctx or uci
|
||||
local room = type(v) == "string" and v or v.number
|
||||
local ok1 = ctx:delete_all("asterisk", "meetme", {room=room})
|
||||
local ok2 = ctx:delete_all("asterisk", "dialplanmeetme", {room=room})
|
||||
return ( ok1 or ok2 ) and true or false
|
||||
end
|
||||
|
||||
|
||||
--- LuCI Asterisk - Dialplan
|
||||
-- @type module
|
||||
dialplan = luci.util.class()
|
||||
|
||||
--- Parse a dialplan section
|
||||
-- @param plan Table containing the plan info
|
||||
-- @return Table with parsed information
|
||||
function dialplan.parse(z)
|
||||
if z['.name'] then
|
||||
local plan = {
|
||||
zones = { },
|
||||
name = z['.name'],
|
||||
description = z.description or z['.name']
|
||||
}
|
||||
|
||||
-- dialzones
|
||||
for _, name in ipairs(tools.parse_list(z.include)) do
|
||||
local zone = dialzone.zone(name)
|
||||
if zone then
|
||||
plan.zones[#plan.zones+1] = zone
|
||||
end
|
||||
end
|
||||
|
||||
-- voicemailboxes
|
||||
plan.voicemailboxes = voicemail.in_dialplan(plan)
|
||||
|
||||
-- meetme conferences
|
||||
plan.meetmerooms = meetme.in_dialplan(plan)
|
||||
|
||||
return plan
|
||||
end
|
||||
end
|
||||
|
||||
--- Get a list of known dial plans
|
||||
-- @return Associative table of plans and table of plan names
|
||||
function dialplan.plans()
|
||||
local plans = { }
|
||||
local pnames = { }
|
||||
uci:foreach("asterisk", "dialplan",
|
||||
function(p)
|
||||
plans[p['.name']] = dialplan.parse(p)
|
||||
pnames[#pnames+1] = p['.name']
|
||||
end)
|
||||
return plans, pnames
|
||||
end
|
||||
|
||||
--- Get a specific dial plan
|
||||
-- @param name Name of the dial plan
|
||||
-- @return Table containing plan information
|
||||
function dialplan.plan(n)
|
||||
local plan
|
||||
uci:foreach("asterisk", "dialplan",
|
||||
function(p)
|
||||
if p['.name'] == n then
|
||||
plan = dialplan.parse(p)
|
||||
end
|
||||
end)
|
||||
return plan
|
||||
end
|
|
@ -1,245 +0,0 @@
|
|||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
module "luci.asterisk.cc_idd"
|
||||
|
||||
CC_IDD = {
|
||||
-- Country, CC, IDD
|
||||
{ "Afghanistan", "93", "00" },
|
||||
{ "Albania", "355", "00" },
|
||||
{ "Algeria", "213", "00" },
|
||||
{ "American Samoa", "684", "00" },
|
||||
{ "Andorra", "376", "00" },
|
||||
{ "Angola", "244", "00" },
|
||||
{ "Anguilla", "264", "011" },
|
||||
{ "Antarctica", "672", "" },
|
||||
{ "Antigua", "268", "011" },
|
||||
{ "Argentina", "54", "00" },
|
||||
{ "Armenia", "374", "00" },
|
||||
{ "Aruba", "297", "00" },
|
||||
{ "Ascension Island", "247", "00" },
|
||||
{ "Australia", "61", "0011" },
|
||||
{ "Austria", "43", "00" },
|
||||
{ "Azberbaijan", "994", "00" },
|
||||
{ "Bahamas", "242", "011" },
|
||||
{ "Bahrain", "973", "00" },
|
||||
{ "Bangladesh", "880", "00" },
|
||||
{ "Barbados", "246", "011" },
|
||||
{ "Barbuda", "268", "011" },
|
||||
{ "Belarus", "375", "810" },
|
||||
{ "Belgium", "32", "00" },
|
||||
{ "Belize", "501", "00" },
|
||||
{ "Benin", "229", "00" },
|
||||
{ "Bermuda", "441", "011" },
|
||||
{ "Bhutan", "975", "00" },
|
||||
{ "Bolivia", "591", "00" },
|
||||
{ "Bosnia", "387", "00" },
|
||||
{ "Botswana", "267", "00" },
|
||||
{ "Brazil", "55", "00" },
|
||||
{ "British Virgin Islands", "284", "011" },
|
||||
{ "Brunei", "673", "00" },
|
||||
{ "Bulgaria", "359", "00" },
|
||||
{ "Burkina Faso", "226", "00" },
|
||||
{ "Burma (Myanmar)", "95", "00" },
|
||||
{ "Burundi", "257", "00" },
|
||||
{ "Cambodia", "855", "001" },
|
||||
{ "Cameroon", "237", "00" },
|
||||
{ "Canada", "1", "011" },
|
||||
{ "Cape Verde Islands", "238", "0" },
|
||||
{ "Cayman Islands", "345", "011" },
|
||||
{ "Central African Rep.", "236", "00" },
|
||||
{ "Chad", "235", "15" },
|
||||
{ "Chile", "56", "00" },
|
||||
{ "China", "86", "00" },
|
||||
{ "Christmas Island", "61", "0011" },
|
||||
{ "Cocos Islands", "61", "0011" },
|
||||
{ "Colombia", "57", "00" },
|
||||
{ "Comoros", "269", "00" },
|
||||
{ "Congo", "242", "00" },
|
||||
{ "Congo, Dem. Rep. of", "243", "00" },
|
||||
{ "Cook Islands", "682", "00" },
|
||||
{ "Costa Rica", "506", "00" },
|
||||
{ "Croatia", "385", "00" },
|
||||
{ "Cuba", "53", "119" },
|
||||
{ "Cyprus", "357", "00" },
|
||||
{ "Czech Republic", "420", "00" },
|
||||
{ "Denmark", "45", "00" },
|
||||
{ "Diego Garcia", "246", "00" },
|
||||
{ "Djibouti", "253", "00" },
|
||||
{ "Dominica", "767", "011" },
|
||||
{ "Dominican Rep.", "809", "011" },
|
||||
{ "Ecuador", "593", "00" },
|
||||
{ "Egypt", "20", "00" },
|
||||
{ "El Salvador", "503", "00" },
|
||||
{ "Equatorial Guinea", "240", "00" },
|
||||
{ "Eritrea", "291", "00" },
|
||||
{ "Estonia", "372", "00" },
|
||||
{ "Ethiopia", "251", "00" },
|
||||
{ "Faeroe Islands", "298", "00" },
|
||||
{ "Falkland Islands", "500", "00" },
|
||||
{ "Fiji Islands", "679", "00" },
|
||||
{ "Finland", "358", "00" },
|
||||
{ "France", "33", "00" },
|
||||
{ "French Antilles", "596", "00" },
|
||||
{ "French Guiana", "594", "00" },
|
||||
{ "French Polynesia", "689", "00" },
|
||||
{ "Gabon", "241", "00" },
|
||||
{ "Gambia", "220", "00" },
|
||||
{ "Georgia", "995", "810" },
|
||||
{ "Germany", "49", "00" },
|
||||
{ "Ghana", "233", "00" },
|
||||
{ "Gibraltar", "350", "00" },
|
||||
{ "Greece", "30", "00" },
|
||||
{ "Greenland", "299", "00" },
|
||||
{ "Grenada", "473", "011" },
|
||||
{ "Guadeloupe", "590", "00" },
|
||||
{ "Guam", "671", "011" },
|
||||
{ "Guantanamo Bay", "5399", "00" },
|
||||
{ "Guatemala", "502", "00" },
|
||||
{ "Guinea", "224", "00" },
|
||||
{ "Guinea Bissau", "245", "00" },
|
||||
{ "Guyana", "592", "001" },
|
||||
{ "Haiti", "509", "00" },
|
||||
{ "Honduras", "504", "00" },
|
||||
{ "Hong Kong", "852", "001" },
|
||||
{ "Hungary", "36", "00" },
|
||||
{ "Iceland", "354", "00" },
|
||||
{ "India", "91", "00" },
|
||||
{ "Indonesia", "62", { "001", "008" } },
|
||||
{ "Iran", "98", "00" },
|
||||
{ "Iraq", "964", "00" },
|
||||
{ "Ireland", "353", "00" },
|
||||
{ "Israel", "972", "00" },
|
||||
{ "Italy", "39", "00" },
|
||||
{ "Ivory Coast", "225", "00" },
|
||||
{ "Jamaica", "876", "011" },
|
||||
{ "Japan", "81", "001" },
|
||||
{ "Jordan", "962", "00" },
|
||||
{ "Kazakhstan", "7", "810" },
|
||||
{ "Kenya", "254", "000" },
|
||||
{ "Kiribati", "686", "00" },
|
||||
{ "Korea, North", "850", "00" },
|
||||
{ "Korea, South", "82", "001" },
|
||||
{ "Kuwait", "965", "00" },
|
||||
{ "Kyrgyzstan", "996", "00" },
|
||||
{ "Laos", "856", "00" },
|
||||
{ "Latvia", "371", "00" },
|
||||
{ "Lebanon", "961", "00" },
|
||||
{ "Lesotho", "266", "00" },
|
||||
{ "Liberia", "231", "00" },
|
||||
{ "Libya", "218", "00" },
|
||||
{ "Liechtenstein", "423", "00" },
|
||||
{ "Lithuania", "370", "00" },
|
||||
{ "Luxembourg", "352", "00" },
|
||||
{ "Macau", "853", "00" },
|
||||
{ "Macedonia", "389", "00" },
|
||||
{ "Madagascar", "261", "00" },
|
||||
{ "Malawi", "265", "00" },
|
||||
{ "Malaysia", "60", "00" },
|
||||
{ "Maldives", "960", "00" },
|
||||
{ "Mali", "223", "00" },
|
||||
{ "Malta", "356", "00" },
|
||||
{ "Mariana Islands", "670", "011" },
|
||||
{ "Marshall Islands", "692", "011" },
|
||||
{ "Martinique", "596", "00" },
|
||||
{ "Mauritania", "222", "00" },
|
||||
{ "Mauritius", "230", "00" },
|
||||
{ "Mayotte Islands", "269", "00" },
|
||||
{ "Mexico", "52", "00" },
|
||||
{ "Micronesia", "691", "011" },
|
||||
{ "Midway Island", "808", "011" },
|
||||
{ "Moldova", "373", "00" },
|
||||
{ "Monaco", "377", "00" },
|
||||
{ "Mongolia", "976", "001" },
|
||||
{ "Montserrat", "664", "011" },
|
||||
{ "Morocco", "212", "00" },
|
||||
{ "Mozambique", "258", "00" },
|
||||
{ "Myanmar (Burma)", "95", "00" },
|
||||
{ "Namibia", "264", "00" },
|
||||
{ "Nauru", "674", "00" },
|
||||
{ "Nepal", "977", "00" },
|
||||
{ "Netherlands", "31", "00" },
|
||||
{ "Netherlands Antilles", "599", "00" },
|
||||
{ "Nevis", "869", "011" },
|
||||
{ "New Caledonia", "687", "00" },
|
||||
{ "New Zealand", "64", "00" },
|
||||
{ "Nicaragua", "505", "00" },
|
||||
{ "Niger", "227", "00" },
|
||||
{ "Nigeria", "234", "009" },
|
||||
{ "Niue", "683", "00" },
|
||||
{ "Norfolk Island", "672", "00" },
|
||||
{ "Norway", "47", "00" },
|
||||
{ "Oman", "968", "00" },
|
||||
{ "Pakistan", "92", "00" },
|
||||
{ "Palau", "680", "011" },
|
||||
{ "Palestine", "970", "00" },
|
||||
{ "Panama", "507", "00" },
|
||||
{ "Papua New Guinea", "675", "05" },
|
||||
{ "Paraguay", "595", "002" },
|
||||
{ "Peru", "51", "00" },
|
||||
{ "Philippines", "63", "00" },
|
||||
{ "Poland", "48", "00" },
|
||||
{ "Portugal", "351", "00" },
|
||||
{ "Puerto Rico", { "787", "939" }, "011" },
|
||||
{ "Qatar", "974", "00" },
|
||||
{ "Reunion Island", "262", "00" },
|
||||
{ "Romania", "40", "00" },
|
||||
{ "Russia", "7", "810" },
|
||||
{ "Rwanda", "250", "00" },
|
||||
{ "St. Helena", "290", "00" },
|
||||
{ "St. Kitts", "869", "011" },
|
||||
{ "St. Lucia", "758", "011" },
|
||||
{ "St. Perre & Miquelon", "508", "00" },
|
||||
{ "St. Vincent", "784", "011" },
|
||||
{ "San Marino", "378", "00" },
|
||||
{ "Sao Tome & Principe", "239", "00" },
|
||||
{ "Saudi Arabia", "966", "00" },
|
||||
{ "Senegal", "221", "00" },
|
||||
{ "Serbia", "381", "99" },
|
||||
{ "Seychelles", "248", "00" },
|
||||
{ "Sierra Leone", "232", "00" },
|
||||
{ "Singapore", "65", "001" },
|
||||
{ "Slovakia", "421", "00" },
|
||||
{ "Slovenia", "386", "00" },
|
||||
{ "Solomon Islands", "677", "00" },
|
||||
{ "Somalia", "252", "00" },
|
||||
{ "South Africa", "27", "09" },
|
||||
{ "Spain", "34", "00" },
|
||||
{ "Sri Lanka", "94", "00" },
|
||||
{ "Sudan", "249", "00" },
|
||||
{ "Suriname", "597", "00" },
|
||||
{ "Swaziland", "268", "00" },
|
||||
{ "Sweden", "46", "00" },
|
||||
{ "Switzerland", "41", "00" },
|
||||
{ "Syria", "963", "00" },
|
||||
{ "Taiwan", "886", "002" },
|
||||
{ "Tajikistan", "992", "810" },
|
||||
{ "Tanzania", "255", "00" },
|
||||
{ "Thailand", "66", "001" },
|
||||
{ "Togo", "228", "00" },
|
||||
{ "Tonga", "676", "00" },
|
||||
{ "Trinidad & Tobago", "868", "011" },
|
||||
{ "Tunisia", "216", "00" },
|
||||
{ "Turkey", "90", "00" },
|
||||
{ "Turkmenistan", "993", "810" },
|
||||
{ "Turks & Caicos", "649", "011" },
|
||||
{ "Tuvalu", "688", "00" },
|
||||
{ "Uganda", "256", "000" },
|
||||
{ "Ukraine", "380", "810" },
|
||||
{ "United Arab Emirates", "971", "00" },
|
||||
{ "United Kingdom", "44", "00" },
|
||||
{ "Uruguay", "598", "00" },
|
||||
{ "USA", "1", "011" },
|
||||
{ "US Virgin Islands", "340", "011" },
|
||||
{ "Uzbekistan", "998", "810" },
|
||||
{ "Vanuatu", "678", "00" },
|
||||
{ "Vatican City", "39", "00" },
|
||||
{ "Venezuela", "58", "00" },
|
||||
{ "Vietnam", "84", "00" },
|
||||
{ "Wake Island", "808", "00" },
|
||||
{ "Wallis & Futuna", "681", "19" },
|
||||
{ "Western Samoa", "685", "00" },
|
||||
{ "Yemen", "967", "00" },
|
||||
{ "Yugoslavia", "381", "99" },
|
||||
{ "Zambia", "260", "00" },
|
||||
{ "Zimbabwe", "263", "00" }
|
||||
}
|
|
@ -1,194 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
module("luci.controller.asterisk", package.seeall)
|
||||
|
||||
function index()
|
||||
|
||||
entry({"admin", "services", "asterisk"}, cbi("asterisk"), "Asterisk", 80)
|
||||
|
||||
entry({"admin", "services", "asterisk", "voice"}, cbi("asterisk-voice"), "Voice Functions", 1)
|
||||
entry({"admin", "services", "asterisk", "meetme"}, cbi("asterisk-meetme"), "Meetme Conferences", 2)
|
||||
|
||||
entry({"admin", "services", "asterisk", "iax-conns"}, cbi("asterisk-iax-connections"), "IAX Connections", 3)
|
||||
entry({"admin", "services", "asterisk", "sip-conns"}, cbi("asterisk-sip-connections"), "SIP Connections", 4)
|
||||
|
||||
entry({"admin", "services", "asterisk", "dialplans"}, cbi("asterisk-dialplans"), "Dial Plans", 5)
|
||||
|
||||
entry({"admin", "services", "asterisk", "mod"}, cbi("asterisk-mod-app"), "Modules", 4)
|
||||
entry({"admin", "services", "asterisk", "mod", "app"}, cbi("asterisk-mod-app"), "Applications", 1)
|
||||
entry({"admin", "services", "asterisk", "mod", "cdr"}, cbi("asterisk-mod-cdr"), "Call Detail Records", 2)
|
||||
entry({"admin", "services", "asterisk", "mod", "chan"}, cbi("asterisk-mod-chan"), "Channels", 3)
|
||||
entry({"admin", "services", "asterisk", "mod", "codec"}, cbi("asterisk-mod-codec"), "Codecs", 4)
|
||||
entry({"admin", "services", "asterisk", "mod", "format"}, cbi("asterisk-mod-format"), "Format", 5)
|
||||
entry({"admin", "services", "asterisk", "mod", "func"}, cbi("asterisk-mod-func"), "Functions", 6)
|
||||
entry({"admin", "services", "asterisk", "mod", "pbx"}, cbi("asterisk-mod-pbx"), "PBX", 7)
|
||||
entry({"admin", "services", "asterisk", "mod", "res"}, cbi("asterisk-mod-res"), "Resources", 8)
|
||||
entry({"admin", "services", "asterisk", "mod", "res", "feature"},
|
||||
cbi("asterisk-mod-res-feature"), "Feature Module Configuration", 9 )
|
||||
|
||||
|
||||
entry({"admin", "asterisk"}, cbi("asterisk/main"), "Asterisk", 99).i18n = "asterisk"
|
||||
|
||||
entry({"admin", "asterisk", "phones"}, cbi("asterisk/phones"), "Phones", 1)
|
||||
entry({"admin", "asterisk", "phones", "sip"}, cbi("asterisk/phone_sip"), nil, 1).leaf = true
|
||||
--entry({"admin", "asterisk", "phones", "exten"}, cbi("asterisk/phone_exten"), "Extensions", 2).leaf = true
|
||||
|
||||
entry({"admin", "asterisk", "trunks"}, cbi("asterisk/trunks"), "Trunks", 2)
|
||||
entry({"admin", "asterisk", "trunks", "sip"}, cbi("asterisk/trunk_sip"), nil, 1).leaf = true
|
||||
|
||||
entry({"admin", "asterisk", "voicemail"}, cbi("asterisk/voicemail"), "Voicemail", 3)
|
||||
entry({"admin", "asterisk", "voicemail", "mailboxes"}, cbi("asterisk/voicemail"), "Mailboxes", 1)
|
||||
entry({"admin", "asterisk", "voicemail", "settings"}, cbi("asterisk/voicemail_settings"), "Settings", 2)
|
||||
|
||||
entry({"admin", "asterisk", "meetme"}, cbi("asterisk/meetme"), "MeetMe", 4)
|
||||
entry({"admin", "asterisk", "meetme", "rooms"}, cbi("asterisk/meetme"), "Rooms", 1)
|
||||
entry({"admin", "asterisk", "meetme", "settings"}, cbi("asterisk/meetme_settings"), "Settings", 2)
|
||||
|
||||
entry({"admin", "asterisk", "dialplans"}, call("handle_dialplan"), "Call Routing", 5)
|
||||
entry({"admin", "asterisk", "dialplans", "out"}, cbi("asterisk/dialplan_out"), nil, 1).leaf = true
|
||||
entry({"admin", "asterisk", "dialplans", "zones"}, call("handle_dialzones"), "Dial Zones", 2).leaf = true
|
||||
|
||||
end
|
||||
|
||||
|
||||
function handle_dialplan()
|
||||
local uci = luci.model.uci.cursor()
|
||||
local ast = require "luci.asterisk"
|
||||
local err = false
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("delzone")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
if #v > 0 and plan then
|
||||
local newinc = { }
|
||||
|
||||
for _, z in ipairs(plan.zones) do
|
||||
if z.name ~= v then
|
||||
newinc[#newinc+1] = z.name
|
||||
end
|
||||
end
|
||||
|
||||
uci:delete("asterisk", plan.name, "include")
|
||||
|
||||
if #newinc > 0 then
|
||||
uci:set("asterisk", plan.name, "include", newinc)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("addzone")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
local zone = ast.dialzone.zone(v)
|
||||
if #v > 0 and plan and zone then
|
||||
local newinc = { zone.name }
|
||||
|
||||
for _, z in ipairs(plan.zones) do
|
||||
newinc[#newinc+1] = z.name
|
||||
end
|
||||
|
||||
uci:delete("asterisk", plan.name, "include")
|
||||
|
||||
if #newinc > 0 then
|
||||
uci:set("asterisk", plan.name, "include", newinc)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("delvbox")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
if #v > 0 and plan then
|
||||
uci:delete_all("asterisk", "dialplanvoice",
|
||||
{ extension=v, dialplan=plan.name })
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("addvbox")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
local vbox = ast.voicemail.box(v)
|
||||
if plan and vbox then
|
||||
local vext = luci.http.formvalue("addvboxext.%s" % plan.name)
|
||||
vext = ( vext and #vext > 0 ) and vext or vbox.number
|
||||
uci:section("asterisk", "dialplanvoice", nil, {
|
||||
dialplan = plan.name,
|
||||
extension = vext,
|
||||
voicebox = vbox.number,
|
||||
voicecontext = vbox.context
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("delmeetme")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
if #v > 0 and plan then
|
||||
uci:delete_all("asterisk", "dialplanmeetme",
|
||||
{ extension=v, dialplan=plan.name })
|
||||
end
|
||||
end
|
||||
|
||||
for k, v in pairs(luci.http.formvaluetable("addmeetme")) do
|
||||
local plan = ast.dialplan.plan(k)
|
||||
local meetme = ast.meetme.room(v)
|
||||
if plan and meetme then
|
||||
local mext = luci.http.formvalue("addmeetmeext.%s" % plan.name)
|
||||
mext = ( mext and #mext > 0 ) and mext or meetme.room
|
||||
uci:section("asterisk", "dialplanmeetme", nil, {
|
||||
dialplan = plan.name,
|
||||
extension = mext,
|
||||
room = meetme.room
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local aname = luci.http.formvalue("addplan")
|
||||
if aname and #aname > 0 then
|
||||
if aname:match("^[a-zA-Z0-9_]+$") then
|
||||
uci:section("asterisk", "dialplan", aname, { })
|
||||
else
|
||||
err = true
|
||||
end
|
||||
end
|
||||
|
||||
local dname = luci.http.formvalue("delplan")
|
||||
if dname and #dname > 0 then
|
||||
if uci:get("asterisk", dname) == "dialplan" then
|
||||
uci:delete("asterisk", dname)
|
||||
uci:delete_all("asterisk", "dialplanvoice", { dialplan=dname })
|
||||
uci:delete_all("asterisk", "dialplanmeetme", { dialplan=dname })
|
||||
end
|
||||
end
|
||||
|
||||
uci:save("asterisk")
|
||||
ast.uci_resync()
|
||||
|
||||
luci.template.render("asterisk/dialplans", { create_error = err })
|
||||
end
|
||||
|
||||
function handle_dialzones()
|
||||
local ast = require "luci.asterisk"
|
||||
local uci = luci.model.uci.cursor()
|
||||
local err = false
|
||||
|
||||
if luci.http.formvalue("newzone") then
|
||||
local name = luci.http.formvalue("newzone_name")
|
||||
if name and name:match("^[a-zA-Z0-9_]+$") then
|
||||
uci:section("asterisk", "dialzone", name, {
|
||||
uses = ast.tools.parse_list(luci.http.formvalue("newzone_uses") or {}),
|
||||
match = ast.tools.parse_list(luci.http.formvalue("newzone_match") or {})
|
||||
})
|
||||
uci:save("asterisk")
|
||||
else
|
||||
err = true
|
||||
end
|
||||
end
|
||||
|
||||
if luci.http.formvalue("delzone") then
|
||||
local name = luci.http.formvalue("delzone")
|
||||
if uci:get("asterisk", name) == "dialzone" then
|
||||
uci:delete("asterisk", name)
|
||||
uci:save("asterisk")
|
||||
end
|
||||
end
|
||||
|
||||
luci.template.render("asterisk/dialzones", { create_error = err })
|
||||
end
|
|
@ -1,91 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
dialplan = cbimap:section(TypedSection, "dialplan", "Section dialplan", "")
|
||||
dialplan.addremove = true
|
||||
dialplan.dynamic = true
|
||||
|
||||
include = dialplan:option(MultiValue, "include", "Include zones and plans", "")
|
||||
cbimap.uci:foreach( "asterisk", "dialplan", function(s) include:value(s['.name']) end )
|
||||
cbimap.uci:foreach( "asterisk", "dialzone", function(s) include:value(s['.name']) end )
|
||||
|
||||
dialplanexten = cbimap:section(TypedSection, "dialplanexten", "Dialplan Extension", "")
|
||||
dialplanexten.anonymous = true
|
||||
dialplanexten.addremove = true
|
||||
dialplanexten.dynamic = true
|
||||
|
||||
|
||||
dialplangeneral = cbimap:section(TypedSection, "dialplangeneral", "Dialplan General Options", "")
|
||||
dialplangeneral.anonymous = true
|
||||
dialplangeneral.addremove = true
|
||||
|
||||
allowtransfer = dialplangeneral:option(Flag, "allowtransfer", "Allow transfer", "")
|
||||
allowtransfer.rmempty = true
|
||||
|
||||
canreinvite = dialplangeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
|
||||
canreinvite:value("yes", "Yes")
|
||||
canreinvite:value("nonat", "Yes when not behind NAT")
|
||||
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
|
||||
canreinvite:value("no", "No")
|
||||
canreinvite.rmempty = true
|
||||
|
||||
clearglobalvars = dialplangeneral:option(Flag, "clearglobalvars", "Clear global vars", "")
|
||||
clearglobalvars.rmempty = true
|
||||
|
||||
|
||||
dialplangoto = cbimap:section(TypedSection, "dialplangoto", "Dialplan Goto", "")
|
||||
dialplangoto.anonymous = true
|
||||
dialplangoto.addremove = true
|
||||
dialplangoto.dynamic = true
|
||||
|
||||
|
||||
dialplanmeetme = cbimap:section(TypedSection, "dialplanmeetme", "Dialplan Conference", "")
|
||||
dialplanmeetme.anonymous = true
|
||||
dialplanmeetme.addremove = true
|
||||
dialplanmeetme.dynamic = true
|
||||
|
||||
|
||||
dialplansaytime = cbimap:section(TypedSection, "dialplansaytime", "Dialplan Time", "")
|
||||
dialplansaytime.anonymous = true
|
||||
dialplansaytime.addremove = true
|
||||
dialplansaytime.dynamic = true
|
||||
|
||||
|
||||
dialplanvoice = cbimap:section(TypedSection, "dialplanvoice", "Dialplan Voicemail", "")
|
||||
dialplanvoice.anonymous = true
|
||||
dialplanvoice.addremove = true
|
||||
dialplanvoice.dynamic = true
|
||||
|
||||
|
||||
dialzone = cbimap:section(TypedSection, "dialzone", "Dial Zones for Dialplan", "")
|
||||
dialzone.addremove = true
|
||||
dialzone.template = "cbi/tblsection"
|
||||
|
||||
addprefix = dialzone:option(Value, "addprefix", "Prefix to add matching dialplans", "")
|
||||
addprefix.rmempty = true
|
||||
|
||||
--international = dialzone:option(DynamicList, "international", "Match International prefix", "")
|
||||
international = dialzone:option(Value, "international", "Match International prefix", "")
|
||||
international.rmempty = true
|
||||
|
||||
localprefix = dialzone:option(Value, "localprefix", "Prefix (0) to add/remove to/from intl. numbers", "")
|
||||
localprefix.rmempty = true
|
||||
|
||||
localzone = dialzone:option(Value, "localzone", "Dialzone for intl. numbers matched as local", "")
|
||||
localzone.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
|
||||
cbimap.uci:foreach( "asterisk", "dialplan", function(s) localzone:value(s['.name']) end )
|
||||
cbimap.uci:foreach( "asterisk", "dialzone", function(s) localzone:value(s['.name']) end )
|
||||
|
||||
match = dialzone:option(Value, "match", "Match plan", "")
|
||||
match.rmempty = true
|
||||
|
||||
uses = dialzone:option(ListValue, "uses", "Connection to use", "")
|
||||
uses.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "sip-conns" )
|
||||
cbimap.uci:foreach( "asterisk", "sip", function(s) uses:value('SIP/'..s['.name']) end )
|
||||
cbimap.uci:foreach( "asterisk", "iax", function(s) uses:value('IAX/'..s['.name']) end )
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,49 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
iax = cbimap:section(TypedSection, "iax", "IAX Connection", "")
|
||||
iax.addremove = true
|
||||
|
||||
alwaysinternational = iax:option(Flag, "alwaysinternational", "Always Dial International", "")
|
||||
alwaysinternational.optional = true
|
||||
|
||||
context = iax:option(ListValue, "context", "Context to use", "")
|
||||
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
|
||||
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
|
||||
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
|
||||
|
||||
countrycode = iax:option(Value, "countrycode", "Country Code for connection", "")
|
||||
countrycode.optional = true
|
||||
|
||||
extension = iax:option(Value, "extension", "Add as Extension", "")
|
||||
extension.optional = true
|
||||
|
||||
host = iax:option(Value, "host", "Host name (or blank)", "")
|
||||
host.optional = true
|
||||
|
||||
internationalprefix = iax:option(Value, "internationalprefix", "International Dial Prefix", "")
|
||||
internationalprefix.optional = true
|
||||
|
||||
prefix = iax:option(Value, "prefix", "Dial Prefix (for external line)", "")
|
||||
prefix.optional = true
|
||||
|
||||
secret = iax:option(Value, "secret", "Secret", "")
|
||||
secret.optional = true
|
||||
|
||||
timeout = iax:option(Value, "timeout", "Dial Timeout (sec)", "")
|
||||
timeout.optional = true
|
||||
|
||||
type = iax:option(ListValue, "type", "Option type", "")
|
||||
type:value("friend", "Friend (outbound/inbound)")
|
||||
type:value("user", "User (inbound - authenticate by \"from\")")
|
||||
type:value("peer", "Peer (outbound - match by host)")
|
||||
type.optional = true
|
||||
|
||||
username = iax:option(Value, "username", "User name", "")
|
||||
username.optional = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,22 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
meetmegeneral = cbimap:section(TypedSection, "meetmegeneral", "Meetme Conference General Options", "")
|
||||
|
||||
audiobuffers = meetmegeneral:option(Value, "audiobuffers", "Number of 20ms audio buffers to be used", "")
|
||||
|
||||
|
||||
meetme = cbimap:section(TypedSection, "meetme", "Meetme Conference", "")
|
||||
meetme.addremove = true
|
||||
|
||||
adminpin = meetme:option(Value, "adminpin", "Admin PIN", "")
|
||||
adminpin.password = true
|
||||
|
||||
pin = meetme:option(Value, "pin", "Meeting PIN", "")
|
||||
pin.password = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,391 +0,0 @@
|
|||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
app_alarmreceiver = module:option(ListValue, "app_alarmreceiver", "Alarm Receiver Application", "")
|
||||
app_alarmreceiver:value("yes", "Load")
|
||||
app_alarmreceiver:value("no", "Do Not Load")
|
||||
app_alarmreceiver:value("auto", "Load as Required")
|
||||
app_alarmreceiver.rmempty = true
|
||||
|
||||
app_authenticate = module:option(ListValue, "app_authenticate", "Authentication Application", "")
|
||||
app_authenticate:value("yes", "Load")
|
||||
app_authenticate:value("no", "Do Not Load")
|
||||
app_authenticate:value("auto", "Load as Required")
|
||||
app_authenticate.rmempty = true
|
||||
|
||||
app_cdr = module:option(ListValue, "app_cdr", "Make sure asterisk doesn't save CDR", "")
|
||||
app_cdr:value("yes", "Load")
|
||||
app_cdr:value("no", "Do Not Load")
|
||||
app_cdr:value("auto", "Load as Required")
|
||||
app_cdr.rmempty = true
|
||||
|
||||
app_chanisavail = module:option(ListValue, "app_chanisavail", "Check if channel is available", "")
|
||||
app_chanisavail:value("yes", "Load")
|
||||
app_chanisavail:value("no", "Do Not Load")
|
||||
app_chanisavail:value("auto", "Load as Required")
|
||||
app_chanisavail.rmempty = true
|
||||
|
||||
app_chanspy = module:option(ListValue, "app_chanspy", "Listen in on any channel", "")
|
||||
app_chanspy:value("yes", "Load")
|
||||
app_chanspy:value("no", "Do Not Load")
|
||||
app_chanspy:value("auto", "Load as Required")
|
||||
app_chanspy.rmempty = true
|
||||
|
||||
app_controlplayback = module:option(ListValue, "app_controlplayback", "Control Playback Application", "")
|
||||
app_controlplayback:value("yes", "Load")
|
||||
app_controlplayback:value("no", "Do Not Load")
|
||||
app_controlplayback:value("auto", "Load as Required")
|
||||
app_controlplayback.rmempty = true
|
||||
|
||||
app_cut = module:option(ListValue, "app_cut", "Cuts up variables", "")
|
||||
app_cut:value("yes", "Load")
|
||||
app_cut:value("no", "Do Not Load")
|
||||
app_cut:value("auto", "Load as Required")
|
||||
app_cut.rmempty = true
|
||||
|
||||
app_db = module:option(ListValue, "app_db", "Database access functions", "")
|
||||
app_db:value("yes", "Load")
|
||||
app_db:value("no", "Do Not Load")
|
||||
app_db:value("auto", "Load as Required")
|
||||
app_db.rmempty = true
|
||||
|
||||
app_dial = module:option(ListValue, "app_dial", "Dialing Application", "")
|
||||
app_dial:value("yes", "Load")
|
||||
app_dial:value("no", "Do Not Load")
|
||||
app_dial:value("auto", "Load as Required")
|
||||
app_dial.rmempty = true
|
||||
|
||||
app_dictate = module:option(ListValue, "app_dictate", "Virtual Dictation Machine Application", "")
|
||||
app_dictate:value("yes", "Load")
|
||||
app_dictate:value("no", "Do Not Load")
|
||||
app_dictate:value("auto", "Load as Required")
|
||||
app_dictate.rmempty = true
|
||||
|
||||
app_directed_pickup = module:option(ListValue, "app_directed_pickup", "Directed Call Pickup Support", "")
|
||||
app_directed_pickup:value("yes", "Load")
|
||||
app_directed_pickup:value("no", "Do Not Load")
|
||||
app_directed_pickup:value("auto", "Load as Required")
|
||||
app_directed_pickup.rmempty = true
|
||||
|
||||
app_directory = module:option(ListValue, "app_directory", "Extension Directory", "")
|
||||
app_directory:value("yes", "Load")
|
||||
app_directory:value("no", "Do Not Load")
|
||||
app_directory:value("auto", "Load as Required")
|
||||
app_directory.rmempty = true
|
||||
|
||||
app_disa = module:option(ListValue, "app_disa", "DISA (Direct Inward System Access) Application", "")
|
||||
app_disa:value("yes", "Load")
|
||||
app_disa:value("no", "Do Not Load")
|
||||
app_disa:value("auto", "Load as Required")
|
||||
app_disa.rmempty = true
|
||||
|
||||
app_dumpchan = module:option(ListValue, "app_dumpchan", "Dump channel variables Application", "")
|
||||
app_dumpchan:value("yes", "Load")
|
||||
app_dumpchan:value("no", "Do Not Load")
|
||||
app_dumpchan:value("auto", "Load as Required")
|
||||
app_dumpchan.rmempty = true
|
||||
|
||||
app_echo = module:option(ListValue, "app_echo", "Simple Echo Application", "")
|
||||
app_echo:value("yes", "Load")
|
||||
app_echo:value("no", "Do Not Load")
|
||||
app_echo:value("auto", "Load as Required")
|
||||
app_echo.rmempty = true
|
||||
|
||||
app_enumlookup = module:option(ListValue, "app_enumlookup", "ENUM Lookup", "")
|
||||
app_enumlookup:value("yes", "Load")
|
||||
app_enumlookup:value("no", "Do Not Load")
|
||||
app_enumlookup:value("auto", "Load as Required")
|
||||
app_enumlookup.rmempty = true
|
||||
|
||||
app_eval = module:option(ListValue, "app_eval", "Reevaluates strings", "")
|
||||
app_eval:value("yes", "Load")
|
||||
app_eval:value("no", "Do Not Load")
|
||||
app_eval:value("auto", "Load as Required")
|
||||
app_eval.rmempty = true
|
||||
|
||||
app_exec = module:option(ListValue, "app_exec", "Executes applications", "")
|
||||
app_exec:value("yes", "Load")
|
||||
app_exec:value("no", "Do Not Load")
|
||||
app_exec:value("auto", "Load as Required")
|
||||
app_exec.rmempty = true
|
||||
|
||||
app_externalivr = module:option(ListValue, "app_externalivr", "External IVR application interface", "")
|
||||
app_externalivr:value("yes", "Load")
|
||||
app_externalivr:value("no", "Do Not Load")
|
||||
app_externalivr:value("auto", "Load as Required")
|
||||
app_externalivr.rmempty = true
|
||||
|
||||
app_forkcdr = module:option(ListValue, "app_forkcdr", "Fork The CDR into 2 separate entities", "")
|
||||
app_forkcdr:value("yes", "Load")
|
||||
app_forkcdr:value("no", "Do Not Load")
|
||||
app_forkcdr:value("auto", "Load as Required")
|
||||
app_forkcdr.rmempty = true
|
||||
|
||||
app_getcpeid = module:option(ListValue, "app_getcpeid", "Get ADSI CPE ID", "")
|
||||
app_getcpeid:value("yes", "Load")
|
||||
app_getcpeid:value("no", "Do Not Load")
|
||||
app_getcpeid:value("auto", "Load as Required")
|
||||
app_getcpeid.rmempty = true
|
||||
|
||||
app_groupcount = module:option(ListValue, "app_groupcount", "Group Management Routines", "")
|
||||
app_groupcount:value("yes", "Load")
|
||||
app_groupcount:value("no", "Do Not Load")
|
||||
app_groupcount:value("auto", "Load as Required")
|
||||
app_groupcount.rmempty = true
|
||||
|
||||
app_ices = module:option(ListValue, "app_ices", "Encode and Stream via icecast and ices", "")
|
||||
app_ices:value("yes", "Load")
|
||||
app_ices:value("no", "Do Not Load")
|
||||
app_ices:value("auto", "Load as Required")
|
||||
app_ices.rmempty = true
|
||||
|
||||
app_image = module:option(ListValue, "app_image", "Image Transmission Application", "")
|
||||
app_image:value("yes", "Load")
|
||||
app_image:value("no", "Do Not Load")
|
||||
app_image:value("auto", "Load as Required")
|
||||
app_image.rmempty = true
|
||||
|
||||
app_lookupblacklist = module:option(ListValue, "app_lookupblacklist", "Look up Caller*ID name/number from black", "")
|
||||
app_lookupblacklist:value("yes", "Load")
|
||||
app_lookupblacklist:value("no", "Do Not Load")
|
||||
app_lookupblacklist:value("auto", "Load as Required")
|
||||
app_lookupblacklist.rmempty = true
|
||||
|
||||
app_lookupcidname = module:option(ListValue, "app_lookupcidname", "Look up CallerID Name from local databas", "")
|
||||
app_lookupcidname:value("yes", "Load")
|
||||
app_lookupcidname:value("no", "Do Not Load")
|
||||
app_lookupcidname:value("auto", "Load as Required")
|
||||
app_lookupcidname.rmempty = true
|
||||
|
||||
app_macro = module:option(ListValue, "app_macro", "Extension Macros", "")
|
||||
app_macro:value("yes", "Load")
|
||||
app_macro:value("no", "Do Not Load")
|
||||
app_macro:value("auto", "Load as Required")
|
||||
app_macro.rmempty = true
|
||||
|
||||
app_math = module:option(ListValue, "app_math", "A simple math Application", "")
|
||||
app_math:value("yes", "Load")
|
||||
app_math:value("no", "Do Not Load")
|
||||
app_math:value("auto", "Load as Required")
|
||||
app_math.rmempty = true
|
||||
|
||||
app_md5 = module:option(ListValue, "app_md5", "MD5 checksum Application", "")
|
||||
app_md5:value("yes", "Load")
|
||||
app_md5:value("no", "Do Not Load")
|
||||
app_md5:value("auto", "Load as Required")
|
||||
app_md5.rmempty = true
|
||||
|
||||
app_milliwatt = module:option(ListValue, "app_milliwatt", "Digital Milliwatt (mu-law) Test Application", "")
|
||||
app_milliwatt:value("yes", "Load")
|
||||
app_milliwatt:value("no", "Do Not Load")
|
||||
app_milliwatt:value("auto", "Load as Required")
|
||||
app_milliwatt.rmempty = true
|
||||
|
||||
app_mixmonitor = module:option(ListValue, "app_mixmonitor", "Record a call and mix the audio during the recording", "")
|
||||
app_mixmonitor:value("yes", "Load")
|
||||
app_mixmonitor:value("no", "Do Not Load")
|
||||
app_mixmonitor:value("auto", "Load as Required")
|
||||
app_mixmonitor.rmempty = true
|
||||
|
||||
app_parkandannounce = module:option(ListValue, "app_parkandannounce", "Call Parking and Announce Application", "")
|
||||
app_parkandannounce:value("yes", "Load")
|
||||
app_parkandannounce:value("no", "Do Not Load")
|
||||
app_parkandannounce:value("auto", "Load as Required")
|
||||
app_parkandannounce.rmempty = true
|
||||
|
||||
app_playback = module:option(ListValue, "app_playback", "Trivial Playback Application", "")
|
||||
app_playback:value("yes", "Load")
|
||||
app_playback:value("no", "Do Not Load")
|
||||
app_playback:value("auto", "Load as Required")
|
||||
app_playback.rmempty = true
|
||||
|
||||
app_privacy = module:option(ListValue, "app_privacy", "Require phone number to be entered", "")
|
||||
app_privacy:value("yes", "Load")
|
||||
app_privacy:value("no", "Do Not Load")
|
||||
app_privacy:value("auto", "Load as Required")
|
||||
app_privacy.rmempty = true
|
||||
|
||||
app_queue = module:option(ListValue, "app_queue", "True Call Queueing", "")
|
||||
app_queue:value("yes", "Load")
|
||||
app_queue:value("no", "Do Not Load")
|
||||
app_queue:value("auto", "Load as Required")
|
||||
app_queue.rmempty = true
|
||||
|
||||
app_random = module:option(ListValue, "app_random", "Random goto", "")
|
||||
app_random:value("yes", "Load")
|
||||
app_random:value("no", "Do Not Load")
|
||||
app_random:value("auto", "Load as Required")
|
||||
app_random.rmempty = true
|
||||
|
||||
app_read = module:option(ListValue, "app_read", "Read Variable Application", "")
|
||||
app_read:value("yes", "Load")
|
||||
app_read:value("no", "Do Not Load")
|
||||
app_read:value("auto", "Load as Required")
|
||||
app_read.rmempty = true
|
||||
|
||||
app_readfile = module:option(ListValue, "app_readfile", "Read in a file", "")
|
||||
app_readfile:value("yes", "Load")
|
||||
app_readfile:value("no", "Do Not Load")
|
||||
app_readfile:value("auto", "Load as Required")
|
||||
app_readfile.rmempty = true
|
||||
|
||||
app_realtime = module:option(ListValue, "app_realtime", "Realtime Data Lookup/Rewrite", "")
|
||||
app_realtime:value("yes", "Load")
|
||||
app_realtime:value("no", "Do Not Load")
|
||||
app_realtime:value("auto", "Load as Required")
|
||||
app_realtime.rmempty = true
|
||||
|
||||
app_record = module:option(ListValue, "app_record", "Trivial Record Application", "")
|
||||
app_record:value("yes", "Load")
|
||||
app_record:value("no", "Do Not Load")
|
||||
app_record:value("auto", "Load as Required")
|
||||
app_record.rmempty = true
|
||||
|
||||
app_sayunixtime = module:option(ListValue, "app_sayunixtime", "Say time", "")
|
||||
app_sayunixtime:value("yes", "Load")
|
||||
app_sayunixtime:value("no", "Do Not Load")
|
||||
app_sayunixtime:value("auto", "Load as Required")
|
||||
app_sayunixtime.rmempty = true
|
||||
|
||||
app_senddtmf = module:option(ListValue, "app_senddtmf", "Send DTMF digits Application", "")
|
||||
app_senddtmf:value("yes", "Load")
|
||||
app_senddtmf:value("no", "Do Not Load")
|
||||
app_senddtmf:value("auto", "Load as Required")
|
||||
app_senddtmf.rmempty = true
|
||||
|
||||
app_sendtext = module:option(ListValue, "app_sendtext", "Send Text Applications", "")
|
||||
app_sendtext:value("yes", "Load")
|
||||
app_sendtext:value("no", "Do Not Load")
|
||||
app_sendtext:value("auto", "Load as Required")
|
||||
app_sendtext.rmempty = true
|
||||
|
||||
app_setcallerid = module:option(ListValue, "app_setcallerid", "Set CallerID Application", "")
|
||||
app_setcallerid:value("yes", "Load")
|
||||
app_setcallerid:value("no", "Do Not Load")
|
||||
app_setcallerid:value("auto", "Load as Required")
|
||||
app_setcallerid.rmempty = true
|
||||
|
||||
app_setcdruserfield = module:option(ListValue, "app_setcdruserfield", "CDR user field apps", "")
|
||||
app_setcdruserfield:value("yes", "Load")
|
||||
app_setcdruserfield:value("no", "Do Not Load")
|
||||
app_setcdruserfield:value("auto", "Load as Required")
|
||||
app_setcdruserfield.rmempty = true
|
||||
|
||||
app_setcidname = module:option(ListValue, "app_setcidname", "load => .so ; Set CallerID Name", "")
|
||||
app_setcidname:value("yes", "Load")
|
||||
app_setcidname:value("no", "Do Not Load")
|
||||
app_setcidname:value("auto", "Load as Required")
|
||||
app_setcidname.rmempty = true
|
||||
|
||||
app_setcidnum = module:option(ListValue, "app_setcidnum", "load => .so ; Set CallerID Number", "")
|
||||
app_setcidnum:value("yes", "Load")
|
||||
app_setcidnum:value("no", "Do Not Load")
|
||||
app_setcidnum:value("auto", "Load as Required")
|
||||
app_setcidnum.rmempty = true
|
||||
|
||||
app_setrdnis = module:option(ListValue, "app_setrdnis", "Set RDNIS Number", "")
|
||||
app_setrdnis:value("yes", "Load")
|
||||
app_setrdnis:value("no", "Do Not Load")
|
||||
app_setrdnis:value("auto", "Load as Required")
|
||||
app_setrdnis.rmempty = true
|
||||
|
||||
app_settransfercapability = module:option(ListValue, "app_settransfercapability", "Set ISDN Transfer Capability", "")
|
||||
app_settransfercapability:value("yes", "Load")
|
||||
app_settransfercapability:value("no", "Do Not Load")
|
||||
app_settransfercapability:value("auto", "Load as Required")
|
||||
app_settransfercapability.rmempty = true
|
||||
|
||||
app_sms = module:option(ListValue, "app_sms", "SMS/PSTN handler", "")
|
||||
app_sms:value("yes", "Load")
|
||||
app_sms:value("no", "Do Not Load")
|
||||
app_sms:value("auto", "Load as Required")
|
||||
app_sms.rmempty = true
|
||||
|
||||
app_softhangup = module:option(ListValue, "app_softhangup", "Hangs up the requested channel", "")
|
||||
app_softhangup:value("yes", "Load")
|
||||
app_softhangup:value("no", "Do Not Load")
|
||||
app_softhangup:value("auto", "Load as Required")
|
||||
app_softhangup.rmempty = true
|
||||
|
||||
app_stack = module:option(ListValue, "app_stack", "Stack Routines", "")
|
||||
app_stack:value("yes", "Load")
|
||||
app_stack:value("no", "Do Not Load")
|
||||
app_stack:value("auto", "Load as Required")
|
||||
app_stack.rmempty = true
|
||||
|
||||
app_system = module:option(ListValue, "app_system", "Generic System() application", "")
|
||||
app_system:value("yes", "Load")
|
||||
app_system:value("no", "Do Not Load")
|
||||
app_system:value("auto", "Load as Required")
|
||||
app_system.rmempty = true
|
||||
|
||||
app_talkdetect = module:option(ListValue, "app_talkdetect", "Playback with Talk Detection", "")
|
||||
app_talkdetect:value("yes", "Load")
|
||||
app_talkdetect:value("no", "Do Not Load")
|
||||
app_talkdetect:value("auto", "Load as Required")
|
||||
app_talkdetect.rmempty = true
|
||||
|
||||
app_test = module:option(ListValue, "app_test", "Interface Test Application", "")
|
||||
app_test:value("yes", "Load")
|
||||
app_test:value("no", "Do Not Load")
|
||||
app_test:value("auto", "Load as Required")
|
||||
app_test.rmempty = true
|
||||
|
||||
app_transfer = module:option(ListValue, "app_transfer", "Transfer", "")
|
||||
app_transfer:value("yes", "Load")
|
||||
app_transfer:value("no", "Do Not Load")
|
||||
app_transfer:value("auto", "Load as Required")
|
||||
app_transfer.rmempty = true
|
||||
|
||||
app_txtcidname = module:option(ListValue, "app_txtcidname", "TXTCIDName", "")
|
||||
app_txtcidname:value("yes", "Load")
|
||||
app_txtcidname:value("no", "Do Not Load")
|
||||
app_txtcidname:value("auto", "Load as Required")
|
||||
app_txtcidname.rmempty = true
|
||||
|
||||
app_url = module:option(ListValue, "app_url", "Send URL Applications", "")
|
||||
app_url:value("yes", "Load")
|
||||
app_url:value("no", "Do Not Load")
|
||||
app_url:value("auto", "Load as Required")
|
||||
app_url.rmempty = true
|
||||
|
||||
app_userevent = module:option(ListValue, "app_userevent", "Custom User Event Application", "")
|
||||
app_userevent:value("yes", "Load")
|
||||
app_userevent:value("no", "Do Not Load")
|
||||
app_userevent:value("auto", "Load as Required")
|
||||
app_userevent.rmempty = true
|
||||
|
||||
app_verbose = module:option(ListValue, "app_verbose", "Send verbose output", "")
|
||||
app_verbose:value("yes", "Load")
|
||||
app_verbose:value("no", "Do Not Load")
|
||||
app_verbose:value("auto", "Load as Required")
|
||||
app_verbose.rmempty = true
|
||||
|
||||
app_voicemail = module:option(ListValue, "app_voicemail", "Voicemail", "")
|
||||
app_voicemail:value("yes", "Load")
|
||||
app_voicemail:value("no", "Do Not Load")
|
||||
app_voicemail:value("auto", "Load as Required")
|
||||
app_voicemail.rmempty = true
|
||||
|
||||
app_waitforring = module:option(ListValue, "app_waitforring", "Waits until first ring after time", "")
|
||||
app_waitforring:value("yes", "Load")
|
||||
app_waitforring:value("no", "Do Not Load")
|
||||
app_waitforring:value("auto", "Load as Required")
|
||||
app_waitforring.rmempty = true
|
||||
|
||||
app_waitforsilence = module:option(ListValue, "app_waitforsilence", "Wait For Silence Application", "")
|
||||
app_waitforsilence:value("yes", "Load")
|
||||
app_waitforsilence:value("no", "Do Not Load")
|
||||
app_waitforsilence:value("auto", "Load as Required")
|
||||
app_waitforsilence.rmempty = true
|
||||
|
||||
app_while = module:option(ListValue, "app_while", "While Loops and Conditional Execution", "")
|
||||
app_while:value("yes", "Load")
|
||||
app_while:value("no", "Do Not Load")
|
||||
app_while:value("auto", "Load as Required")
|
||||
app_while.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,47 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
cdr_csv = module:option(ListValue, "cdr_csv", "Comma Separated Values CDR Backend", "")
|
||||
cdr_csv:value("yes", "Load")
|
||||
cdr_csv:value("no", "Do Not Load")
|
||||
cdr_csv:value("auto", "Load as Required")
|
||||
cdr_csv.rmempty = true
|
||||
|
||||
cdr_custom = module:option(ListValue, "cdr_custom", "Customizable Comma Separated Values CDR Backend", "")
|
||||
cdr_custom:value("yes", "Load")
|
||||
cdr_custom:value("no", "Do Not Load")
|
||||
cdr_custom:value("auto", "Load as Required")
|
||||
cdr_custom.rmempty = true
|
||||
|
||||
cdr_manager = module:option(ListValue, "cdr_manager", "Asterisk Call Manager CDR Backend", "")
|
||||
cdr_manager:value("yes", "Load")
|
||||
cdr_manager:value("no", "Do Not Load")
|
||||
cdr_manager:value("auto", "Load as Required")
|
||||
cdr_manager.rmempty = true
|
||||
|
||||
cdr_mysql = module:option(ListValue, "cdr_mysql", "MySQL CDR Backend", "")
|
||||
cdr_mysql:value("yes", "Load")
|
||||
cdr_mysql:value("no", "Do Not Load")
|
||||
cdr_mysql:value("auto", "Load as Required")
|
||||
cdr_mysql.rmempty = true
|
||||
|
||||
cdr_pgsql = module:option(ListValue, "cdr_pgsql", "PostgreSQL CDR Backend", "")
|
||||
cdr_pgsql:value("yes", "Load")
|
||||
cdr_pgsql:value("no", "Do Not Load")
|
||||
cdr_pgsql:value("auto", "Load as Required")
|
||||
cdr_pgsql.rmempty = true
|
||||
|
||||
cdr_sqlite = module:option(ListValue, "cdr_sqlite", "SQLite CDR Backend", "")
|
||||
cdr_sqlite:value("yes", "Load")
|
||||
cdr_sqlite:value("no", "Do Not Load")
|
||||
cdr_sqlite:value("auto", "Load as Required")
|
||||
cdr_sqlite.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,45 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
chan_agent = module:option(ListValue, "chan_agent", "Agent Proxy Channel", "")
|
||||
chan_agent:value("yes", "Load")
|
||||
chan_agent:value("no", "Do Not Load")
|
||||
chan_agent:value("auto", "Load as Required")
|
||||
chan_agent.rmempty = true
|
||||
|
||||
chan_alsa = module:option(ListValue, "chan_alsa", "Channel driver for GTalk", "")
|
||||
chan_alsa:value("yes", "Load")
|
||||
chan_alsa:value("no", "Do Not Load")
|
||||
chan_alsa:value("auto", "Load as Required")
|
||||
chan_alsa.rmempty = true
|
||||
|
||||
chan_gtalk = module:option(ListValue, "chan_gtalk", "Channel driver for GTalk", "")
|
||||
chan_gtalk:value("yes", "Load")
|
||||
chan_gtalk:value("no", "Do Not Load")
|
||||
chan_gtalk:value("auto", "Load as Required")
|
||||
chan_gtalk.rmempty = true
|
||||
|
||||
chan_iax2 = module:option(Flag, "chan_iax2", "Option chan_iax2", "")
|
||||
chan_iax2.rmempty = true
|
||||
|
||||
chan_local = module:option(ListValue, "chan_local", "Local Proxy Channel", "")
|
||||
chan_local:value("yes", "Load")
|
||||
chan_local:value("no", "Do Not Load")
|
||||
chan_local:value("auto", "Load as Required")
|
||||
chan_local.rmempty = true
|
||||
|
||||
chan_sip = module:option(ListValue, "chan_sip", "Session Initiation Protocol (SIP)", "")
|
||||
chan_sip:value("yes", "Load")
|
||||
chan_sip:value("no", "Do Not Load")
|
||||
chan_sip:value("auto", "Load as Required")
|
||||
chan_sip.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,53 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
codec_a_mu = module:option(ListValue, "codec_a_mu", "A-law and Mulaw direct Coder/Decoder", "")
|
||||
codec_a_mu:value("yes", "Load")
|
||||
codec_a_mu:value("no", "Do Not Load")
|
||||
codec_a_mu:value("auto", "Load as Required")
|
||||
codec_a_mu.rmempty = true
|
||||
|
||||
codec_adpcm = module:option(ListValue, "codec_adpcm", "Adaptive Differential PCM Coder/Decoder", "")
|
||||
codec_adpcm:value("yes", "Load")
|
||||
codec_adpcm:value("no", "Do Not Load")
|
||||
codec_adpcm:value("auto", "Load as Required")
|
||||
codec_adpcm.rmempty = true
|
||||
|
||||
codec_alaw = module:option(ListValue, "codec_alaw", "A-law Coder/Decoder", "")
|
||||
codec_alaw:value("yes", "Load")
|
||||
codec_alaw:value("no", "Do Not Load")
|
||||
codec_alaw:value("auto", "Load as Required")
|
||||
codec_alaw.rmempty = true
|
||||
|
||||
codec_g726 = module:option(ListValue, "codec_g726", "ITU G.726-32kbps G726 Transcoder", "")
|
||||
codec_g726:value("yes", "Load")
|
||||
codec_g726:value("no", "Do Not Load")
|
||||
codec_g726:value("auto", "Load as Required")
|
||||
codec_g726.rmempty = true
|
||||
|
||||
codec_gsm = module:option(ListValue, "codec_gsm", "GSM/PCM16 (signed linear) Codec Translation", "")
|
||||
codec_gsm:value("yes", "Load")
|
||||
codec_gsm:value("no", "Do Not Load")
|
||||
codec_gsm:value("auto", "Load as Required")
|
||||
codec_gsm.rmempty = true
|
||||
|
||||
codec_speex = module:option(ListValue, "codec_speex", "Speex/PCM16 (signed linear) Codec Translator", "")
|
||||
codec_speex:value("yes", "Load")
|
||||
codec_speex:value("no", "Do Not Load")
|
||||
codec_speex:value("auto", "Load as Required")
|
||||
codec_speex.rmempty = true
|
||||
|
||||
codec_ulaw = module:option(ListValue, "codec_ulaw", "Mu-law Coder/Decoder", "")
|
||||
codec_ulaw:value("yes", "Load")
|
||||
codec_ulaw:value("no", "Do Not Load")
|
||||
codec_ulaw:value("auto", "Load as Required")
|
||||
codec_ulaw.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,89 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
format_au = module:option(ListValue, "format_au", "Sun Microsystems AU format (signed linear)", "")
|
||||
format_au:value("yes", "Load")
|
||||
format_au:value("no", "Do Not Load")
|
||||
format_au:value("auto", "Load as Required")
|
||||
format_au.rmempty = true
|
||||
|
||||
format_g723 = module:option(ListValue, "format_g723", "G.723.1 Simple Timestamp File Format", "")
|
||||
format_g723:value("yes", "Load")
|
||||
format_g723:value("no", "Do Not Load")
|
||||
format_g723:value("auto", "Load as Required")
|
||||
format_g723.rmempty = true
|
||||
|
||||
format_g726 = module:option(ListValue, "format_g726", "Raw G.726 (16/24/32/40kbps) data", "")
|
||||
format_g726:value("yes", "Load")
|
||||
format_g726:value("no", "Do Not Load")
|
||||
format_g726:value("auto", "Load as Required")
|
||||
format_g726.rmempty = true
|
||||
|
||||
format_g729 = module:option(ListValue, "format_g729", "Raw G729 data", "")
|
||||
format_g729:value("yes", "Load")
|
||||
format_g729:value("no", "Do Not Load")
|
||||
format_g729:value("auto", "Load as Required")
|
||||
format_g729.rmempty = true
|
||||
|
||||
format_gsm = module:option(ListValue, "format_gsm", "Raw GSM data", "")
|
||||
format_gsm:value("yes", "Load")
|
||||
format_gsm:value("no", "Do Not Load")
|
||||
format_gsm:value("auto", "Load as Required")
|
||||
format_gsm.rmempty = true
|
||||
|
||||
format_h263 = module:option(ListValue, "format_h263", "Raw h263 data", "")
|
||||
format_h263:value("yes", "Load")
|
||||
format_h263:value("no", "Do Not Load")
|
||||
format_h263:value("auto", "Load as Required")
|
||||
format_h263.rmempty = true
|
||||
|
||||
format_jpeg = module:option(ListValue, "format_jpeg", "JPEG (Joint Picture Experts Group) Image", "")
|
||||
format_jpeg:value("yes", "Load")
|
||||
format_jpeg:value("no", "Do Not Load")
|
||||
format_jpeg:value("auto", "Load as Required")
|
||||
format_jpeg.rmempty = true
|
||||
|
||||
format_pcm = module:option(ListValue, "format_pcm", "Raw uLaw 8khz Audio support (PCM)", "")
|
||||
format_pcm:value("yes", "Load")
|
||||
format_pcm:value("no", "Do Not Load")
|
||||
format_pcm:value("auto", "Load as Required")
|
||||
format_pcm.rmempty = true
|
||||
|
||||
format_pcm_alaw = module:option(ListValue, "format_pcm_alaw", "load => .so ; Raw aLaw 8khz PCM Audio support", "")
|
||||
format_pcm_alaw:value("yes", "Load")
|
||||
format_pcm_alaw:value("no", "Do Not Load")
|
||||
format_pcm_alaw:value("auto", "Load as Required")
|
||||
format_pcm_alaw.rmempty = true
|
||||
|
||||
format_sln = module:option(ListValue, "format_sln", "Raw Signed Linear Audio support (SLN)", "")
|
||||
format_sln:value("yes", "Load")
|
||||
format_sln:value("no", "Do Not Load")
|
||||
format_sln:value("auto", "Load as Required")
|
||||
format_sln.rmempty = true
|
||||
|
||||
format_vox = module:option(ListValue, "format_vox", "Dialogic VOX (ADPCM) File Format", "")
|
||||
format_vox:value("yes", "Load")
|
||||
format_vox:value("no", "Do Not Load")
|
||||
format_vox:value("auto", "Load as Required")
|
||||
format_vox.rmempty = true
|
||||
|
||||
format_wav = module:option(ListValue, "format_wav", "Microsoft WAV format (8000hz Signed Line", "")
|
||||
format_wav:value("yes", "Load")
|
||||
format_wav:value("no", "Do Not Load")
|
||||
format_wav:value("auto", "Load as Required")
|
||||
format_wav.rmempty = true
|
||||
|
||||
format_wav_gsm = module:option(ListValue, "format_wav_gsm", "Microsoft WAV format (Proprietary GSM)", "")
|
||||
format_wav_gsm:value("yes", "Load")
|
||||
format_wav_gsm:value("no", "Do Not Load")
|
||||
format_wav_gsm:value("auto", "Load as Required")
|
||||
format_wav_gsm.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,29 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
func_callerid = module:option(ListValue, "func_callerid", "Caller ID related dialplan functions", "")
|
||||
func_callerid:value("yes", "Load")
|
||||
func_callerid:value("no", "Do Not Load")
|
||||
func_callerid:value("auto", "Load as Required")
|
||||
func_callerid.rmempty = true
|
||||
|
||||
func_enum = module:option(ListValue, "func_enum", "ENUM Functions", "")
|
||||
func_enum:value("yes", "Load")
|
||||
func_enum:value("no", "Do Not Load")
|
||||
func_enum:value("auto", "Load as Required")
|
||||
func_enum.rmempty = true
|
||||
|
||||
func_uri = module:option(ListValue, "func_uri", "URI encoding / decoding functions", "")
|
||||
func_uri:value("yes", "Load")
|
||||
func_uri:value("no", "Do Not Load")
|
||||
func_uri:value("auto", "Load as Required")
|
||||
func_uri.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,53 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
pbx_ael = module:option(ListValue, "pbx_ael", "Asterisk Extension Language Compiler", "")
|
||||
pbx_ael:value("yes", "Load")
|
||||
pbx_ael:value("no", "Do Not Load")
|
||||
pbx_ael:value("auto", "Load as Required")
|
||||
pbx_ael.rmempty = true
|
||||
|
||||
pbx_config = module:option(ListValue, "pbx_config", "Text Extension Configuration", "")
|
||||
pbx_config:value("yes", "Load")
|
||||
pbx_config:value("no", "Do Not Load")
|
||||
pbx_config:value("auto", "Load as Required")
|
||||
pbx_config.rmempty = true
|
||||
|
||||
pbx_functions = module:option(ListValue, "pbx_functions", "load => .so ; Builtin dialplan functions", "")
|
||||
pbx_functions:value("yes", "Load")
|
||||
pbx_functions:value("no", "Do Not Load")
|
||||
pbx_functions:value("auto", "Load as Required")
|
||||
pbx_functions.rmempty = true
|
||||
|
||||
pbx_loopback = module:option(ListValue, "pbx_loopback", "Loopback Switch", "")
|
||||
pbx_loopback:value("yes", "Load")
|
||||
pbx_loopback:value("no", "Do Not Load")
|
||||
pbx_loopback:value("auto", "Load as Required")
|
||||
pbx_loopback.rmempty = true
|
||||
|
||||
pbx_realtime = module:option(ListValue, "pbx_realtime", "Realtime Switch", "")
|
||||
pbx_realtime:value("yes", "Load")
|
||||
pbx_realtime:value("no", "Do Not Load")
|
||||
pbx_realtime:value("auto", "Load as Required")
|
||||
pbx_realtime.rmempty = true
|
||||
|
||||
pbx_spool = module:option(ListValue, "pbx_spool", "Outgoing Spool Support", "")
|
||||
pbx_spool:value("yes", "Load")
|
||||
pbx_spool:value("no", "Do Not Load")
|
||||
pbx_spool:value("auto", "Load as Required")
|
||||
pbx_spool.rmempty = true
|
||||
|
||||
pbx_wilcalu = module:option(ListValue, "pbx_wilcalu", "Wil Cal U (Auto Dialer)", "")
|
||||
pbx_wilcalu:value("yes", "Load")
|
||||
pbx_wilcalu:value("no", "Do Not Load")
|
||||
pbx_wilcalu:value("auto", "Load as Required")
|
||||
pbx_wilcalu.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,100 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
featuremap = cbimap:section(TypedSection, "featuremap", "Feature Key maps", "")
|
||||
featuremap.anonymous = true
|
||||
featuremap.addremove = true
|
||||
|
||||
atxfer = featuremap:option(Value, "atxfer", "Attended transfer key", "")
|
||||
atxfer.rmempty = true
|
||||
|
||||
blindxfer = featuremap:option(Value, "blindxfer", "Blind transfer key", "")
|
||||
blindxfer.rmempty = true
|
||||
|
||||
disconnect = featuremap:option(Value, "disconnect", "Key to Disconnect call", "")
|
||||
disconnect.rmempty = true
|
||||
|
||||
parkcall = featuremap:option(Value, "parkcall", "Key to Park call", "")
|
||||
parkcall.rmempty = true
|
||||
|
||||
|
||||
featurepark = cbimap:section(TypedSection, "featurepark", "Parking Feature", "")
|
||||
featurepark.anonymous = true
|
||||
|
||||
parkenabled = featurepark:option(Flag, "parkenabled", "Enable Parking", "")
|
||||
|
||||
adsipark = featurepark:option(Flag, "adsipark", "ADSI Park", "")
|
||||
adsipark.rmempty = true
|
||||
adsipark:depends({ parkenabled = "1" })
|
||||
|
||||
atxfernoanswertimeout = featurepark:option(Value, "atxfernoanswertimeout", "Attended transfer timeout (sec)", "")
|
||||
atxfernoanswertimeout.rmempty = true
|
||||
atxfernoanswertimeout:depends({ parkenabled = "1" })
|
||||
|
||||
automon = featurepark:option(Value, "automon", "One touch record key", "")
|
||||
automon.rmempty = true
|
||||
automon:depends({ parkenabled = "1" })
|
||||
|
||||
context = featurepark:option(Value, "context", "Name of call context for parking", "")
|
||||
context.rmempty = true
|
||||
context:depends({ parkenabled = "1" })
|
||||
|
||||
courtesytone = featurepark:option(Value, "courtesytone", "Sound file to play to parked caller", "")
|
||||
courtesytone.rmempty = true
|
||||
courtesytone:depends({ parkenabled = "1" })
|
||||
|
||||
featuredigittimeout = featurepark:option(Value, "featuredigittimeout", "Max time (ms) between digits for feature activation", "")
|
||||
featuredigittimeout.rmempty = true
|
||||
featuredigittimeout:depends({ parkenabled = "1" })
|
||||
|
||||
findslot = featurepark:option(ListValue, "findslot", "Method to Find Parking slot", "")
|
||||
findslot:value("first", "First available slot")
|
||||
findslot:value("next", "Next free parking space")
|
||||
findslot.rmempty = true
|
||||
findslot:depends({ parkenabled = "1" })
|
||||
|
||||
parkedmusicclass = featurepark:option(ListValue, "parkedmusicclass", "Music on Hold class for the parked channel", "")
|
||||
parkedmusicclass.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk" )
|
||||
parkedmusicclass:depends({ parkenabled = "1" })
|
||||
cbimap.uci:foreach( "asterisk", "moh", function(s) parkedmusicclass:value(s['.name']) end )
|
||||
|
||||
parkedplay = featurepark:option(ListValue, "parkedplay", "Play courtesy tone to", "")
|
||||
parkedplay:value("caller", "Caller")
|
||||
parkedplay:value("parked", "Parked user")
|
||||
parkedplay:value("both", "Both")
|
||||
parkedplay.rmempty = true
|
||||
parkedplay:depends({ parkenabled = "1" })
|
||||
|
||||
parkext = featurepark:option(Value, "parkext", "Extension to dial to park", "")
|
||||
parkext.rmempty = true
|
||||
parkext:depends({ parkenabled = "1" })
|
||||
|
||||
parkingtime = featurepark:option(Value, "parkingtime", "Parking time (secs)", "")
|
||||
parkingtime.rmempty = true
|
||||
parkingtime:depends({ parkenabled = "1" })
|
||||
|
||||
parkpos = featurepark:option(Value, "parkpos", "Range of extensions for call parking", "")
|
||||
parkpos.rmempty = true
|
||||
parkpos:depends({ parkenabled = "1" })
|
||||
|
||||
pickupexten = featurepark:option(Value, "pickupexten", "Pickup extension", "")
|
||||
pickupexten.rmempty = true
|
||||
pickupexten:depends({ parkenabled = "1" })
|
||||
|
||||
transferdigittimeout = featurepark:option(Value, "transferdigittimeout", "Seconds to wait between digits when transferring", "")
|
||||
transferdigittimeout.rmempty = true
|
||||
transferdigittimeout:depends({ parkenabled = "1" })
|
||||
|
||||
xferfailsound = featurepark:option(Value, "xferfailsound", "sound when attended transfer is complete", "")
|
||||
xferfailsound.rmempty = true
|
||||
xferfailsound:depends({ parkenabled = "1" })
|
||||
|
||||
xfersound = featurepark:option(Value, "xfersound", "Sound when attended transfer fails", "")
|
||||
xfersound.rmempty = true
|
||||
xfersound:depends({ parkenabled = "1" })
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,77 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
module = cbimap:section(TypedSection, "module", "Modules", "")
|
||||
module.anonymous = true
|
||||
|
||||
res_config_mysql = module:option(ListValue, "res_config_mysql", "MySQL Config Resource", "")
|
||||
res_config_mysql:value("yes", "Load")
|
||||
res_config_mysql:value("no", "Do Not Load")
|
||||
res_config_mysql:value("auto", "Load as Required")
|
||||
res_config_mysql.rmempty = true
|
||||
|
||||
res_config_odbc = module:option(ListValue, "res_config_odbc", "ODBC Config Resource", "")
|
||||
res_config_odbc:value("yes", "Load")
|
||||
res_config_odbc:value("no", "Do Not Load")
|
||||
res_config_odbc:value("auto", "Load as Required")
|
||||
res_config_odbc.rmempty = true
|
||||
|
||||
res_config_pgsql = module:option(ListValue, "res_config_pgsql", "PGSQL Module", "")
|
||||
res_config_pgsql:value("yes", "Load")
|
||||
res_config_pgsql:value("no", "Do Not Load")
|
||||
res_config_pgsql:value("auto", "Load as Required")
|
||||
res_config_pgsql.rmempty = true
|
||||
|
||||
res_crypto = module:option(ListValue, "res_crypto", "Cryptographic Digital Signatures", "")
|
||||
res_crypto:value("yes", "Load")
|
||||
res_crypto:value("no", "Do Not Load")
|
||||
res_crypto:value("auto", "Load as Required")
|
||||
res_crypto.rmempty = true
|
||||
|
||||
res_features = module:option(ListValue, "res_features", "Call Parking Resource", "")
|
||||
res_features:value("yes", "Load")
|
||||
res_features:value("no", "Do Not Load")
|
||||
res_features:value("auto", "Load as Required")
|
||||
res_features.rmempty = true
|
||||
|
||||
res_indications = module:option(ListValue, "res_indications", "Indications Configuration", "")
|
||||
res_indications:value("yes", "Load")
|
||||
res_indications:value("no", "Do Not Load")
|
||||
res_indications:value("auto", "Load as Required")
|
||||
res_indications.rmempty = true
|
||||
|
||||
res_monitor = module:option(ListValue, "res_monitor", "Call Monitoring Resource", "")
|
||||
res_monitor:value("yes", "Load")
|
||||
res_monitor:value("no", "Do Not Load")
|
||||
res_monitor:value("auto", "Load as Required")
|
||||
res_monitor.rmempty = true
|
||||
|
||||
res_musiconhold = module:option(ListValue, "res_musiconhold", "Music On Hold Resource", "")
|
||||
res_musiconhold:value("yes", "Load")
|
||||
res_musiconhold:value("no", "Do Not Load")
|
||||
res_musiconhold:value("auto", "Load as Required")
|
||||
res_musiconhold.rmempty = true
|
||||
|
||||
res_odbc = module:option(ListValue, "res_odbc", "ODBC Resource", "")
|
||||
res_odbc:value("yes", "Load")
|
||||
res_odbc:value("no", "Do Not Load")
|
||||
res_odbc:value("auto", "Load as Required")
|
||||
res_odbc.rmempty = true
|
||||
|
||||
res_smdi = module:option(ListValue, "res_smdi", "SMDI Module", "")
|
||||
res_smdi:value("yes", "Load")
|
||||
res_smdi:value("no", "Do Not Load")
|
||||
res_smdi:value("auto", "Load as Required")
|
||||
res_smdi.rmempty = true
|
||||
|
||||
res_snmp = module:option(ListValue, "res_snmp", "SNMP Module", "")
|
||||
res_snmp:value("yes", "Load")
|
||||
res_snmp:value("no", "Do Not Load")
|
||||
res_snmp:value("auto", "Load as Required")
|
||||
res_snmp.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,98 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
sip = cbimap:section(TypedSection, "sip", "SIP Connection", "")
|
||||
sip.addremove = true
|
||||
|
||||
alwaysinternational = sip:option(Flag, "alwaysinternational", "Always Dial International", "")
|
||||
alwaysinternational.optional = true
|
||||
|
||||
canreinvite = sip:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
|
||||
canreinvite:value("yes", "Yes")
|
||||
canreinvite:value("nonat", "Yes when not behind NAT")
|
||||
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
|
||||
canreinvite:value("no", "No")
|
||||
canreinvite.optional = true
|
||||
|
||||
context = sip:option(ListValue, "context", "Context to use", "")
|
||||
context.titleref = luci.dispatcher.build_url( "admin", "services", "asterisk", "dialplans" )
|
||||
cbimap.uci:foreach( "asterisk", "dialplan", function(s) context:value(s['.name']) end )
|
||||
cbimap.uci:foreach( "asterisk", "dialzone", function(s) context:value(s['.name']) end )
|
||||
|
||||
countrycode = sip:option(Value, "countrycode", "Country Code for connection", "")
|
||||
countrycode.optional = true
|
||||
|
||||
dtmfmode = sip:option(ListValue, "dtmfmode", "DTMF mode", "")
|
||||
dtmfmode:value("info", "Use RFC2833 or INFO for the BudgeTone")
|
||||
dtmfmode:value("rfc2833", "Use RFC2833 for the BudgeTone")
|
||||
dtmfmode:value("inband", "Use Inband (only with ulaw/alaw)")
|
||||
dtmfmode.optional = true
|
||||
|
||||
extension = sip:option(Value, "extension", "Add as Extension", "")
|
||||
extension.optional = true
|
||||
|
||||
fromdomain = sip:option(Value, "fromdomain", "Primary domain identity for From: headers", "")
|
||||
fromdomain.optional = true
|
||||
|
||||
fromuser = sip:option(Value, "fromuser", "From user (required by many SIP providers)", "")
|
||||
fromuser.optional = true
|
||||
|
||||
host = sip:option(Value, "host", "Host name (or blank)", "")
|
||||
host.optional = true
|
||||
|
||||
incoming = sip:option(DynamicList, "incoming", "Ring on incoming dialplan contexts", "")
|
||||
incoming.optional = true
|
||||
|
||||
insecure = sip:option(ListValue, "insecure", "Allow Insecure for", "")
|
||||
insecure:value("port", "Allow mismatched port number")
|
||||
insecure:value("invite", "Do not require auth of incoming INVITE")
|
||||
insecure:value("port,invite", "Allow mismatched port and Do not require auth of incoming INVITE")
|
||||
insecure.optional = true
|
||||
|
||||
internationalprefix = sip:option(Value, "internationalprefix", "International Dial Prefix", "")
|
||||
internationalprefix.optional = true
|
||||
|
||||
mailbox = sip:option(Value, "mailbox", "Mailbox for MWI", "")
|
||||
mailbox.optional = true
|
||||
|
||||
nat = sip:option(Flag, "nat", "NAT between phone and Asterisk", "")
|
||||
nat.optional = true
|
||||
|
||||
pedantic = sip:option(Flag, "pedantic", "Check tags in headers", "")
|
||||
pedantic.optional = true
|
||||
|
||||
port = sip:option(Value, "port", "SIP Port", "")
|
||||
port.optional = true
|
||||
|
||||
prefix = sip:option(Value, "prefix", "Dial Prefix (for external line)", "")
|
||||
prefix.optional = true
|
||||
|
||||
qualify = sip:option(Value, "qualify", "Reply Timeout (ms) for down connection", "")
|
||||
qualify.optional = true
|
||||
|
||||
register = sip:option(Flag, "register", "Register connection", "")
|
||||
register.optional = true
|
||||
|
||||
secret = sip:option(Value, "secret", "Secret", "")
|
||||
secret.optional = true
|
||||
|
||||
selfmailbox = sip:option(Flag, "selfmailbox", "Dial own extension for mailbox", "")
|
||||
selfmailbox.optional = true
|
||||
|
||||
timeout = sip:option(Value, "timeout", "Dial Timeout (sec)", "")
|
||||
timeout.optional = true
|
||||
|
||||
type = sip:option(ListValue, "type", "Client Type", "")
|
||||
type:value("friend", "Friend (outbound/inbound)")
|
||||
type:value("user", "User (inbound - authenticate by \"from\")")
|
||||
type:value("peer", "Peer (outbound - match by host)")
|
||||
type.optional = true
|
||||
|
||||
username = sip:option(Value, "username", "Username", "")
|
||||
username.optional = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,41 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
voicegeneral = cbimap:section(TypedSection, "voicegeneral", "Voicemail general options", "")
|
||||
|
||||
serveremail = voicegeneral:option(Value, "serveremail", "From Email address of server", "")
|
||||
|
||||
|
||||
voicemail = cbimap:section(TypedSection, "voicemail", "Voice Mail boxes", "")
|
||||
voicemail.addremove = true
|
||||
|
||||
attach = voicemail:option(Flag, "attach", "Email contains attachment", "")
|
||||
attach.rmempty = true
|
||||
|
||||
email = voicemail:option(Value, "email", "Email", "")
|
||||
email.rmempty = true
|
||||
|
||||
name = voicemail:option(Value, "name", "Display Name", "")
|
||||
name.rmempty = true
|
||||
|
||||
password = voicemail:option(Value, "password", "Password", "")
|
||||
password.rmempty = true
|
||||
|
||||
zone = voicemail:option(ListValue, "zone", "Voice Zone", "")
|
||||
cbimap.uci:foreach( "asterisk", "voicezone", function(s) zone:value(s['.name']) end )
|
||||
|
||||
|
||||
voicezone = cbimap:section(TypedSection, "voicezone", "Voice Zone settings", "")
|
||||
voicezone.addremove = true
|
||||
|
||||
message = voicezone:option(Value, "message", "Message Format", "")
|
||||
message.rmempty = true
|
||||
|
||||
zone = voicezone:option(Value, "zone", "Time Zone", "")
|
||||
zone.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,151 +0,0 @@
|
|||
-- Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "asterisk", "")
|
||||
|
||||
asterisk = cbimap:section(TypedSection, "asterisk", "Asterisk General Options", "")
|
||||
asterisk.anonymous = true
|
||||
|
||||
agidir = asterisk:option(Value, "agidir", "AGI directory", "")
|
||||
agidir.rmempty = true
|
||||
|
||||
cache_record_files = asterisk:option(Flag, "cache_record_files", "Cache recorded sound files during recording", "")
|
||||
cache_record_files.rmempty = true
|
||||
|
||||
debug = asterisk:option(Value, "debug", "Debug Level", "")
|
||||
debug.rmempty = true
|
||||
|
||||
dontwarn = asterisk:option(Flag, "dontwarn", "Disable some warnings", "")
|
||||
dontwarn.rmempty = true
|
||||
|
||||
dumpcore = asterisk:option(Flag, "dumpcore", "Dump core on crash", "")
|
||||
dumpcore.rmempty = true
|
||||
|
||||
highpriority = asterisk:option(Flag, "highpriority", "High Priority", "")
|
||||
highpriority.rmempty = true
|
||||
|
||||
initcrypto = asterisk:option(Flag, "initcrypto", "Initialise Crypto", "")
|
||||
initcrypto.rmempty = true
|
||||
|
||||
internal_timing = asterisk:option(Flag, "internal_timing", "Use Internal Timing", "")
|
||||
internal_timing.rmempty = true
|
||||
|
||||
logdir = asterisk:option(Value, "logdir", "Log directory", "")
|
||||
logdir.rmempty = true
|
||||
|
||||
maxcalls = asterisk:option(Value, "maxcalls", "Maximum number of calls allowed", "")
|
||||
maxcalls.rmempty = true
|
||||
|
||||
maxload = asterisk:option(Value, "maxload", "Maximum load to stop accepting new calls", "")
|
||||
maxload.rmempty = true
|
||||
|
||||
nocolor = asterisk:option(Flag, "nocolor", "Disable console colors", "")
|
||||
nocolor.rmempty = true
|
||||
|
||||
record_cache_dir = asterisk:option(Value, "record_cache_dir", "Sound files Cache directory", "")
|
||||
record_cache_dir.rmempty = true
|
||||
record_cache_dir:depends({ ["cache_record_files"] = "true" })
|
||||
|
||||
rungroup = asterisk:option(Flag, "rungroup", "The Group to run as", "")
|
||||
rungroup.rmempty = true
|
||||
|
||||
runuser = asterisk:option(Flag, "runuser", "The User to run as", "")
|
||||
runuser.rmempty = true
|
||||
|
||||
spooldir = asterisk:option(Value, "spooldir", "Voicemail Spool directory", "")
|
||||
spooldir.rmempty = true
|
||||
|
||||
systemname = asterisk:option(Value, "systemname", "Prefix UniquID with system name", "")
|
||||
systemname.rmempty = true
|
||||
|
||||
transcode_via_sln = asterisk:option(Flag, "transcode_via_sln", "Build transcode paths via SLINEAR, not directly", "")
|
||||
transcode_via_sln.rmempty = true
|
||||
|
||||
transmit_silence_during_record = asterisk:option(Flag, "transmit_silence_during_record", "Transmit SLINEAR silence while recording a channel", "")
|
||||
transmit_silence_during_record.rmempty = true
|
||||
|
||||
verbose = asterisk:option(Value, "verbose", "Verbose Level", "")
|
||||
verbose.rmempty = true
|
||||
|
||||
zone = asterisk:option(Value, "zone", "Time Zone", "")
|
||||
zone.rmempty = true
|
||||
|
||||
|
||||
hardwarereboot = cbimap:section(TypedSection, "hardwarereboot", "Reload Hardware Config", "")
|
||||
|
||||
method = hardwarereboot:option(ListValue, "method", "Reboot Method", "")
|
||||
method:value("web", "Web URL (wget)")
|
||||
method:value("system", "program to run")
|
||||
method.rmempty = true
|
||||
|
||||
param = hardwarereboot:option(Value, "param", "Parameter", "")
|
||||
param.rmempty = true
|
||||
|
||||
|
||||
iaxgeneral = cbimap:section(TypedSection, "iaxgeneral", "IAX General Options", "")
|
||||
iaxgeneral.anonymous = true
|
||||
iaxgeneral.addremove = true
|
||||
|
||||
allow = iaxgeneral:option(MultiValue, "allow", "Allow Codecs", "")
|
||||
allow:value("alaw", "alaw")
|
||||
allow:value("gsm", "gsm")
|
||||
allow:value("g726", "g726")
|
||||
allow.rmempty = true
|
||||
|
||||
canreinvite = iaxgeneral:option(ListValue, "canreinvite", "Reinvite/redirect media connections", "")
|
||||
canreinvite:value("yes", "Yes")
|
||||
canreinvite:value("nonat", "Yes when not behind NAT")
|
||||
canreinvite:value("update", "Use UPDATE rather than INVITE for path redirection")
|
||||
canreinvite:value("no", "No")
|
||||
canreinvite.rmempty = true
|
||||
|
||||
static = iaxgeneral:option(Flag, "static", "Static", "")
|
||||
static.rmempty = true
|
||||
|
||||
writeprotect = iaxgeneral:option(Flag, "writeprotect", "Write Protect", "")
|
||||
writeprotect.rmempty = true
|
||||
|
||||
|
||||
sipgeneral = cbimap:section(TypedSection, "sipgeneral", "Section sipgeneral", "")
|
||||
sipgeneral.anonymous = true
|
||||
sipgeneral.addremove = true
|
||||
|
||||
allow = sipgeneral:option(MultiValue, "allow", "Allow codecs", "")
|
||||
allow:value("ulaw", "ulaw")
|
||||
allow:value("alaw", "alaw")
|
||||
allow:value("gsm", "gsm")
|
||||
allow:value("g726", "g726")
|
||||
allow.rmempty = true
|
||||
|
||||
port = sipgeneral:option(Value, "port", "SIP Port", "")
|
||||
port.rmempty = true
|
||||
|
||||
realm = sipgeneral:option(Value, "realm", "SIP realm", "")
|
||||
realm.rmempty = true
|
||||
|
||||
|
||||
moh = cbimap:section(TypedSection, "moh", "Music On Hold", "")
|
||||
|
||||
application = moh:option(Value, "application", "Application", "")
|
||||
application.rmempty = true
|
||||
application:depends({ ["asterisk.moh.mode"] = "custom" })
|
||||
|
||||
directory = moh:option(Value, "directory", "Directory of Music", "")
|
||||
directory.rmempty = true
|
||||
|
||||
mode = moh:option(ListValue, "mode", "Option mode", "")
|
||||
mode:value("system", "program to run")
|
||||
mode:value("files", "Read files from directory")
|
||||
mode:value("quietmp3", "Quite MP3")
|
||||
mode:value("mp3", "Loud MP3")
|
||||
mode:value("mp3nb", "unbuffered MP3")
|
||||
mode:value("quietmp3nb", "Quiet Unbuffered MP3")
|
||||
mode:value("custom", "Run a custom application")
|
||||
mode.rmempty = true
|
||||
|
||||
random = moh:option(Flag, "random", "Random Play", "")
|
||||
random.rmempty = true
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,125 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
local function find_outgoing_contexts(uci)
|
||||
local c = { }
|
||||
local h = { }
|
||||
|
||||
-- uci:foreach("asterisk", "dialplan",
|
||||
-- function(s)
|
||||
-- if not h[s['.name']] then
|
||||
-- c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] }
|
||||
-- h[s['.name']] = true
|
||||
-- end
|
||||
-- end)
|
||||
|
||||
uci:foreach("asterisk", "dialzone",
|
||||
function(s)
|
||||
if not h[s['.name']] then
|
||||
c[#c+1] = { s['.name'], "Dialzone: %s" % s['.name'] }
|
||||
h[s['.name']] = true
|
||||
end
|
||||
end)
|
||||
|
||||
return c
|
||||
end
|
||||
|
||||
local function find_incoming_contexts(uci)
|
||||
local c = { }
|
||||
local h = { }
|
||||
|
||||
uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.context and not h[s.context] and
|
||||
uci:get_bool("asterisk", s['.name'], "provider")
|
||||
then
|
||||
c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context }
|
||||
h[s.context] = true
|
||||
end
|
||||
end)
|
||||
|
||||
return c
|
||||
end
|
||||
|
||||
local function find_trunks(uci)
|
||||
local t = { }
|
||||
|
||||
uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if uci:get_bool("asterisk", s['.name'], "provider") then
|
||||
t[#t+1] = {
|
||||
"SIP/%s" % s['.name'],
|
||||
"SIP: %s" % s['.name']
|
||||
}
|
||||
end
|
||||
end)
|
||||
|
||||
uci:foreach("asterisk", "iax",
|
||||
function(s)
|
||||
t[#t+1] = {
|
||||
"IAX/%s" % s['.name'],
|
||||
"IAX: %s" % s.extension or s['.name']
|
||||
}
|
||||
end)
|
||||
|
||||
return t
|
||||
end
|
||||
|
||||
--[[
|
||||
|
||||
dialzone {name} - Outgoing zone.
|
||||
uses - Outgoing line to use: TYPE/Name
|
||||
match (list) - Number to match
|
||||
countrycode - The effective country code of this dialzone
|
||||
international (list) - International prefix to match
|
||||
localzone - dialzone for local numbers
|
||||
addprefix - Prexix required to dial out.
|
||||
localprefix - Prefix for a local call
|
||||
|
||||
]]
|
||||
|
||||
|
||||
--
|
||||
-- SIP dialzone configuration
|
||||
--
|
||||
if arg[1] then
|
||||
cbimap = Map("asterisk", "Edit Dialplan Entry")
|
||||
|
||||
entry = cbimap:section(NamedSection, arg[1])
|
||||
|
||||
back = entry:option(DummyValue, "_overview", "Back to dialplan overview")
|
||||
back.value = ""
|
||||
back.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans")
|
||||
|
||||
desc = entry:option(Value, "description", "Description")
|
||||
function desc.cfgvalue(self, s, ...)
|
||||
return Value.cfgvalue(self, s, ...) or s
|
||||
end
|
||||
|
||||
match = entry:option(DynamicList, "match", "Number matches")
|
||||
|
||||
intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)")
|
||||
|
||||
trunk = entry:option(MultiValue, "uses", "Used trunk")
|
||||
for _, v in ipairs(find_trunks(cbimap.uci)) do
|
||||
trunk:value(unpack(v))
|
||||
end
|
||||
|
||||
aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)")
|
||||
--ast.idd.cbifill(aprefix)
|
||||
|
||||
ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)")
|
||||
ast.cc.cbifill(ccode)
|
||||
|
||||
lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers")
|
||||
lzone:value("", "no special treatment of local numbers")
|
||||
for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do
|
||||
lzone:value(unpack(v))
|
||||
end
|
||||
|
||||
lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)")
|
||||
|
||||
return cbimap
|
||||
end
|
|
@ -1,103 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
cbimap = Map("asterisk", "Registered Trunks")
|
||||
cbimap.pageaction = false
|
||||
|
||||
local sip_peers = { }
|
||||
cbimap.uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.type == "peer" then
|
||||
s.name = s['.name']
|
||||
s.info = ast.sip.peer(s.name)
|
||||
sip_peers[s.name] = s
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks")
|
||||
sip_table.template = "cbi/tblsection"
|
||||
sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s")
|
||||
sip_table.addremove = true
|
||||
sip_table.sectionhead = "Extension"
|
||||
|
||||
function sip_table.filter(self, s)
|
||||
return s and (
|
||||
cbimap.uci:get("asterisk", s, "type") == nil or
|
||||
cbimap.uci:get_bool("asterisk", s, "provider")
|
||||
)
|
||||
end
|
||||
|
||||
function sip_table.create(self, section)
|
||||
if TypedSection.create(self, section) then
|
||||
created = section
|
||||
else
|
||||
self.invalid_cts = true
|
||||
end
|
||||
end
|
||||
|
||||
function sip_table.parse(self, ...)
|
||||
TypedSection.parse(self, ...)
|
||||
if created then
|
||||
cbimap.uci:tset("asterisk", created, {
|
||||
type = "friend",
|
||||
qualify = "yes",
|
||||
provider = "yes"
|
||||
})
|
||||
|
||||
cbimap.uci:save("asterisk")
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "trunks", "sip", created
|
||||
))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
user = sip_table:option(DummyValue, "username", "Username")
|
||||
|
||||
host = sip_table:option(DummyValue, "host", "Hostname")
|
||||
function host.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.address then
|
||||
return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port }
|
||||
else
|
||||
return "n/a"
|
||||
end
|
||||
end
|
||||
|
||||
context = sip_table:option(DummyValue, "context", "Dialplan")
|
||||
context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
|
||||
function context.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "(default)"
|
||||
end
|
||||
|
||||
online = sip_table:option(DummyValue, "online", "Registered")
|
||||
function online.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online == nil then
|
||||
return "n/a"
|
||||
else
|
||||
return sip_peers[s] and sip_peers[s].info.online
|
||||
and "yes" or "no (%s)" %{
|
||||
sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
delay = sip_table:option(DummyValue, "delay", "Delay")
|
||||
function delay.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online then
|
||||
return "%i ms" % sip_peers[s].info.delay
|
||||
else
|
||||
return "n/a"
|
||||
end
|
||||
end
|
||||
|
||||
info = sip_table:option(Button, "_info", "Info")
|
||||
function info.write(self, s)
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "trunks", "sip", s, "info"
|
||||
))
|
||||
end
|
||||
|
||||
return cbimap
|
|
@ -1,123 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
|
||||
--[[
|
||||
Dialzone overview table
|
||||
]]
|
||||
|
||||
if not arg[1] then
|
||||
zonemap = Map("asterisk", "Dial Zones", [[
|
||||
Dial zones hold patterns of dialed numbers to match.
|
||||
Each zone has one or more trunks assigned. If the first trunk is
|
||||
congested, Asterisk will try to use the next available connection.
|
||||
If all trunks fail, then the following zones in the parent dialplan
|
||||
are tried.
|
||||
]])
|
||||
|
||||
local zones, znames = ast.dialzone.zones()
|
||||
|
||||
zonetbl = zonemap:section(Table, zones, "Zone Overview")
|
||||
zonetbl.sectionhead = "Zone"
|
||||
zonetbl.addremove = true
|
||||
zonetbl.anonymous = false
|
||||
zonetbl.extedit = luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "dialplans", "zones", "%s"
|
||||
)
|
||||
|
||||
function zonetbl.cfgsections(self)
|
||||
return znames
|
||||
end
|
||||
|
||||
function zonetbl.parse(self)
|
||||
for k, v in pairs(self.map:formvaluetable(
|
||||
luci.cbi.REMOVE_PREFIX .. self.config
|
||||
) or {}) do
|
||||
if k:sub(-2) == ".x" then k = k:sub(1, #k - 2) end
|
||||
uci:delete("asterisk", k)
|
||||
uci:save("asterisk")
|
||||
self.data[k] = nil
|
||||
for i = 1,#znames do
|
||||
if znames[i] == k then
|
||||
table.remove(znames, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Table.parse(self)
|
||||
end
|
||||
|
||||
zonetbl:option(DummyValue, "description", "Description")
|
||||
zonetbl:option(DummyValue, "addprefix")
|
||||
|
||||
match = zonetbl:option(DummyValue, "matches")
|
||||
function match.cfgvalue(self, s)
|
||||
return table.concat(zones[s].matches, ", ")
|
||||
end
|
||||
|
||||
trunks = zonetbl:option(DummyValue, "trunk")
|
||||
trunks.template = "asterisk/cbi/cell"
|
||||
function trunks.cfgvalue(self, s)
|
||||
return ast.tools.hyperlinks(zones[s].trunks)
|
||||
end
|
||||
|
||||
return zonemap
|
||||
|
||||
--[[
|
||||
Zone edit form
|
||||
]]
|
||||
|
||||
else
|
||||
zoneedit = Map("asterisk", "Edit Dialzone")
|
||||
|
||||
entry = zoneedit:section(NamedSection, arg[1])
|
||||
entry.title = "Zone %q" % arg[1];
|
||||
|
||||
back = entry:option(DummyValue, "_overview", "Back to dialzone overview")
|
||||
back.value = ""
|
||||
back.titleref = luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "dialplans", "zones"
|
||||
)
|
||||
|
||||
desc = entry:option(Value, "description", "Description")
|
||||
function desc.cfgvalue(self, s, ...)
|
||||
return Value.cfgvalue(self, s, ...) or s
|
||||
end
|
||||
|
||||
trunks = entry:option(MultiValue, "uses", "Used trunks")
|
||||
trunks.widget = "checkbox"
|
||||
uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.provider == "yes" then
|
||||
trunks:value(
|
||||
"SIP/%s" % s['.name'],
|
||||
"SIP/%s (%s)" %{ s['.name'], s.host or 'n/a' }
|
||||
)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
match = entry:option(DynamicList, "match", "Number matches")
|
||||
|
||||
intl = entry:option(DynamicList, "international", "Intl. prefix matches (optional)")
|
||||
|
||||
aprefix = entry:option(Value, "addprefix", "Add prefix to dial out (optional)")
|
||||
ccode = entry:option(Value, "countrycode", "Effective countrycode (optional)")
|
||||
|
||||
lzone = entry:option(ListValue, "localzone", "Dialzone for local numbers")
|
||||
lzone:value("", "no special treatment of local numbers")
|
||||
for _, z in ipairs(ast.dialzone.zones()) do
|
||||
lzone:value(z.name, "%q (%s)" %{ z.name, z.description })
|
||||
end
|
||||
--for _, v in ipairs(find_outgoing_contexts(zoneedit.uci)) do
|
||||
-- lzone:value(unpack(v))
|
||||
--end
|
||||
|
||||
lprefix = entry:option(Value, "localprefix", "Prefix for local calls (optional)")
|
||||
|
||||
return zoneedit
|
||||
|
||||
end
|
|
@ -1,38 +0,0 @@
|
|||
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require "luci.asterisk"
|
||||
|
||||
cbimap = Map("asterisk", "MeetMe - Rooms")
|
||||
|
||||
meetme = cbimap:section(TypedSection, "meetme", "MeetMe Rooms")
|
||||
meetme.addremove = true
|
||||
meetme.anonymous = true
|
||||
meetme.template = "cbi/tblsection"
|
||||
meetme:option(Value, "_description", "Description", "Short room description")
|
||||
|
||||
room = meetme:option(Value, "room", "Room Number", "Unique room identifier")
|
||||
|
||||
function room.write(self, s, val)
|
||||
if val and #val > 0 then
|
||||
local old = self:cfgvalue(s)
|
||||
self.map.uci:foreach("asterisk", "dialplanmeetme",
|
||||
function(v)
|
||||
if v.room == old then
|
||||
self.map:set(v['.name'], "room", val)
|
||||
end
|
||||
end)
|
||||
Value.write(self, s, val)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
meetme:option(Value, "pin", "PIN", "PIN required to access")
|
||||
meetme:option(Value, "adminpin", "Admin PIN", "PIN required for administration")
|
||||
|
||||
function meetme.remove(self, s)
|
||||
return ast.meetme.remove(self.map:get(s, "room"), self.map.uci)
|
||||
end
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,17 +0,0 @@
|
|||
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
cbimap = Map("asterisk", "MeetMe - Common Settings",
|
||||
"Common settings for MeetMe phone conferences.")
|
||||
|
||||
meetme = cbimap:section(TypedSection, "meetmegeneral", "General MeetMe Options")
|
||||
meetme.addremove = false
|
||||
meetme.anonymous = true
|
||||
|
||||
audiobuffers = meetme:option(ListValue, "audiobuffers",
|
||||
"Number of 20ms audio buffers to use for conferences")
|
||||
|
||||
for i = 2, 32 do audiobuffers:value(i) end
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,145 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
local function find_outgoing_contexts(uci)
|
||||
local c = { }
|
||||
local h = { }
|
||||
|
||||
uci:foreach("asterisk", "dialplan",
|
||||
function(s)
|
||||
if not h[s['.name']] then
|
||||
c[#c+1] = { s['.name'], "Dialplan: %s" % s['.name'] }
|
||||
h[s['.name']] = true
|
||||
end
|
||||
end)
|
||||
|
||||
return c
|
||||
end
|
||||
|
||||
local function find_incoming_contexts(uci)
|
||||
local c = { }
|
||||
local h = { }
|
||||
|
||||
uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.context and not h[s.context] and
|
||||
uci:get_bool("asterisk", s['.name'], "provider")
|
||||
then
|
||||
c[#c+1] = { s.context, "Incoming: %s" % s['.name'] or s.context }
|
||||
h[s.context] = true
|
||||
end
|
||||
end)
|
||||
|
||||
return c
|
||||
end
|
||||
|
||||
|
||||
--
|
||||
-- SIP phone info
|
||||
--
|
||||
if arg[2] == "info" then
|
||||
form = SimpleForm("asterisk", "SIP Phone Information")
|
||||
form.reset = false
|
||||
form.submit = "Back to overview"
|
||||
|
||||
local info, keys = ast.sip.peer(arg[1])
|
||||
local data = { }
|
||||
|
||||
for _, key in ipairs(keys) do
|
||||
data[#data+1] = {
|
||||
key = key,
|
||||
val = type(info[key]) == "boolean"
|
||||
and ( info[key] and "yes" or "no" )
|
||||
or ( info[key] == nil or #info[key] == 0 )
|
||||
and "(none)"
|
||||
or tostring(info[key])
|
||||
}
|
||||
end
|
||||
|
||||
itbl = form:section(Table, data, "SIP Phone %q" % arg[1])
|
||||
itbl:option(DummyValue, "key", "Key")
|
||||
itbl:option(DummyValue, "val", "Value")
|
||||
|
||||
function itbl.parse(...)
|
||||
luci.http.redirect(
|
||||
luci.dispatcher.build_url("admin", "asterisk", "phones")
|
||||
)
|
||||
end
|
||||
|
||||
return form
|
||||
|
||||
--
|
||||
-- SIP phone configuration
|
||||
--
|
||||
elseif arg[1] then
|
||||
cbimap = Map("asterisk", "Edit SIP Client")
|
||||
|
||||
peer = cbimap:section(NamedSection, arg[1])
|
||||
peer.hidden = {
|
||||
type = "friend",
|
||||
qualify = "yes",
|
||||
host = "dynamic",
|
||||
nat = "no",
|
||||
canreinvite = "no"
|
||||
}
|
||||
|
||||
back = peer:option(DummyValue, "_overview", "Back to phone overview")
|
||||
back.value = ""
|
||||
back.titleref = luci.dispatcher.build_url("admin", "asterisk", "phones")
|
||||
|
||||
active = peer:option(Flag, "disable", "Account enabled")
|
||||
active.enabled = "yes"
|
||||
active.disabled = "no"
|
||||
function active.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "yes"
|
||||
end
|
||||
|
||||
exten = peer:option(Value, "extension", "Extension Number")
|
||||
cbimap.uci:foreach("asterisk", "dialplanexten",
|
||||
function(s)
|
||||
exten:value(
|
||||
s.extension,
|
||||
"%s (via %s/%s)" %{ s.extension, s.type:upper(), s.target }
|
||||
)
|
||||
end)
|
||||
|
||||
display = peer:option(Value, "callerid", "Display Name")
|
||||
|
||||
username = peer:option(Value, "username", "Authorization ID")
|
||||
password = peer:option(Value, "secret", "Authorization Password")
|
||||
password.password = true
|
||||
|
||||
regtimeout = peer:option(Value, "registertimeout", "Registration Time Value")
|
||||
function regtimeout.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "60"
|
||||
end
|
||||
|
||||
sipport = peer:option(Value, "port", "SIP Port")
|
||||
function sipport.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "5060"
|
||||
end
|
||||
|
||||
linekey = peer:option(ListValue, "_linekey", "Linekey Mode (broken)")
|
||||
linekey:value("", "Off")
|
||||
linekey:value("trunk", "Trunk Appearance")
|
||||
linekey:value("call", "Call Appearance")
|
||||
|
||||
dialplan = peer:option(ListValue, "context", "Assign Dialplan")
|
||||
dialplan.titleref = luci.dispatcher.build_url("admin", "asterisk", "dialplans")
|
||||
for _, v in ipairs(find_outgoing_contexts(cbimap.uci)) do
|
||||
dialplan:value(unpack(v))
|
||||
end
|
||||
|
||||
incoming = peer:option(StaticList, "incoming", "Receive incoming calls from")
|
||||
for _, v in ipairs(find_incoming_contexts(cbimap.uci)) do
|
||||
incoming:value(unpack(v))
|
||||
end
|
||||
|
||||
--function incoming.cfgvalue(...)
|
||||
--error(table.concat(MultiValue.cfgvalue(...),"."))
|
||||
--end
|
||||
|
||||
return cbimap
|
||||
end
|
|
@ -1,104 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
cbimap = Map("asterisk", "Registered Phones")
|
||||
cbimap.pageaction = false
|
||||
|
||||
local sip_peers = { }
|
||||
cbimap.uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.type ~= "peer" then
|
||||
s.name = s['.name']
|
||||
s.info = ast.sip.peer(s.name)
|
||||
sip_peers[s.name] = s
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
sip_table = cbimap:section(TypedSection, "sip", "SIP Phones")
|
||||
sip_table.template = "cbi/tblsection"
|
||||
sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "phones", "sip", "%s")
|
||||
sip_table.addremove = true
|
||||
|
||||
function sip_table.filter(self, s)
|
||||
return s and not cbimap.uci:get_bool("asterisk", s, "provider")
|
||||
end
|
||||
|
||||
function sip_table.create(self, section)
|
||||
if TypedSection.create(self, section) then
|
||||
created = section
|
||||
cbimap.uci:tset("asterisk", section, {
|
||||
type = "friend",
|
||||
qualify = "yes",
|
||||
provider = "no",
|
||||
host = "dynamic",
|
||||
nat = "no",
|
||||
canreinvite = "no",
|
||||
extension = section:match("^%d+$") and section or "",
|
||||
username = section:match("^%d+$") and section or ""
|
||||
})
|
||||
else
|
||||
self.invalid_cts = true
|
||||
end
|
||||
end
|
||||
|
||||
function sip_table.parse(self, ...)
|
||||
TypedSection.parse(self, ...)
|
||||
if created then
|
||||
cbimap.uci:save("asterisk")
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "phones", "sip", created
|
||||
))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
user = sip_table:option(DummyValue, "username", "Username")
|
||||
function user.cfgvalue(self, s)
|
||||
return sip_peers[s] and sip_peers[s].callerid or
|
||||
AbstractValue.cfgvalue(self, s)
|
||||
end
|
||||
|
||||
host = sip_table:option(DummyValue, "host", "Hostname")
|
||||
function host.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.address then
|
||||
return "%s:%i" %{ sip_peers[s].info.address, sip_peers[s].info.port }
|
||||
else
|
||||
return "n/a"
|
||||
end
|
||||
end
|
||||
|
||||
context = sip_table:option(DummyValue, "context", "Dialplan")
|
||||
context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
|
||||
|
||||
online = sip_table:option(DummyValue, "online", "Registered")
|
||||
function online.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online == nil then
|
||||
return "n/a"
|
||||
else
|
||||
return sip_peers[s] and sip_peers[s].info.online
|
||||
and "yes" or "no (%s)" % {
|
||||
sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
delay = sip_table:option(DummyValue, "delay", "Delay")
|
||||
function delay.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online then
|
||||
return "%i ms" % sip_peers[s].info.delay
|
||||
else
|
||||
return "n/a"
|
||||
end
|
||||
end
|
||||
|
||||
info = sip_table:option(Button, "_info", "Info")
|
||||
function info.write(self, s)
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "phones", "sip", s, "info"
|
||||
))
|
||||
end
|
||||
|
||||
return cbimap
|
|
@ -1,86 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
--
|
||||
-- SIP trunk info
|
||||
--
|
||||
if arg[2] == "info" then
|
||||
form = SimpleForm("asterisk", "SIP Trunk Information")
|
||||
form.reset = false
|
||||
form.submit = "Back to overview"
|
||||
|
||||
local info, keys = ast.sip.peer(arg[1])
|
||||
local data = { }
|
||||
|
||||
for _, key in ipairs(keys) do
|
||||
data[#data+1] = {
|
||||
key = key,
|
||||
val = type(info[key]) == "boolean"
|
||||
and ( info[key] and "yes" or "no" )
|
||||
or ( info[key] == nil or #info[key] == 0 )
|
||||
and "(none)"
|
||||
or tostring(info[key])
|
||||
}
|
||||
end
|
||||
|
||||
itbl = form:section(Table, data, "SIP Trunk %q" % arg[1])
|
||||
itbl:option(DummyValue, "key", "Key")
|
||||
itbl:option(DummyValue, "val", "Value")
|
||||
|
||||
function itbl.parse(...)
|
||||
luci.http.redirect(
|
||||
luci.dispatcher.build_url("admin", "asterisk", "trunks")
|
||||
)
|
||||
end
|
||||
|
||||
return form
|
||||
|
||||
--
|
||||
-- SIP trunk config
|
||||
--
|
||||
elseif arg[1] then
|
||||
cbimap = Map("asterisk", "Edit SIP Trunk")
|
||||
|
||||
peer = cbimap:section(NamedSection, arg[1])
|
||||
peer.hidden = {
|
||||
type = "peer",
|
||||
qualify = "yes",
|
||||
}
|
||||
|
||||
back = peer:option(DummyValue, "_overview", "Back to trunk overview")
|
||||
back.value = ""
|
||||
back.titleref = luci.dispatcher.build_url("admin", "asterisk", "trunks")
|
||||
|
||||
sipdomain = peer:option(Value, "host", "SIP Domain")
|
||||
sipport = peer:option(Value, "port", "SIP Port")
|
||||
function sipport.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "5060"
|
||||
end
|
||||
|
||||
username = peer:option(Value, "username", "Authorization ID")
|
||||
password = peer:option(Value, "secret", "Authorization Password")
|
||||
password.password = true
|
||||
|
||||
outboundproxy = peer:option(Value, "outboundproxy", "Outbound Proxy")
|
||||
outboundport = peer:option(Value, "outboundproxyport", "Outbound Proxy Port")
|
||||
|
||||
register = peer:option(Flag, "register", "Register with peer")
|
||||
register.enabled = "yes"
|
||||
register.disabled = "no"
|
||||
|
||||
regext = peer:option(Value, "registerextension", "Extension to register (optional)")
|
||||
regext:depends({register="1"})
|
||||
|
||||
didval = peer:option(ListValue, "_did", "Number of assigned DID numbers")
|
||||
didval:value("", "(none)")
|
||||
for i=1,24 do didval:value(i) end
|
||||
|
||||
dialplan = peer:option(ListValue, "context", "Dialplan Context")
|
||||
dialplan:value(arg[1] .. "_inbound", "(default)")
|
||||
cbimap.uci:foreach("asterisk", "dialplan",
|
||||
function(s) dialplan:value(s['.name']) end)
|
||||
|
||||
return cbimap
|
||||
end
|
|
@ -1,94 +0,0 @@
|
|||
-- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
cbimap = Map("asterisk", "Trunks")
|
||||
cbimap.pageaction = false
|
||||
|
||||
local sip_peers = { }
|
||||
cbimap.uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if s.type == "peer" then
|
||||
s.name = s['.name']
|
||||
s.info = ast.sip.peer(s.name)
|
||||
sip_peers[s.name] = s
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
sip_table = cbimap:section(TypedSection, "sip", "SIP Trunks")
|
||||
sip_table.template = "cbi/tblsection"
|
||||
sip_table.extedit = luci.dispatcher.build_url("admin", "asterisk", "trunks", "sip", "%s")
|
||||
sip_table.addremove = true
|
||||
sip_table.sectionhead = "Extension"
|
||||
|
||||
function sip_table.filter(self, s)
|
||||
return s and (
|
||||
cbimap.uci:get("asterisk", s, "type") == nil or
|
||||
cbimap.uci:get_bool("asterisk", s, "provider")
|
||||
)
|
||||
end
|
||||
|
||||
function sip_table.create(self, section)
|
||||
if TypedSection.create(self, section) then
|
||||
created = section
|
||||
else
|
||||
self.invalid_cts = true
|
||||
end
|
||||
end
|
||||
|
||||
function sip_table.parse(self, ...)
|
||||
TypedSection.parse(self, ...)
|
||||
if created then
|
||||
cbimap.uci:tset("asterisk", created, {
|
||||
type = "friend",
|
||||
qualify = "yes",
|
||||
provider = "yes"
|
||||
})
|
||||
|
||||
cbimap.uci:save("asterisk")
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "trunks", "sip", created
|
||||
))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
user = sip_table:option(DummyValue, "username", "Username")
|
||||
|
||||
context = sip_table:option(DummyValue, "context", "Dialplan")
|
||||
context.href = luci.dispatcher.build_url("admin", "asterisk", "dialplan")
|
||||
function context.cfgvalue(...)
|
||||
return AbstractValue.cfgvalue(...) or "(default)"
|
||||
end
|
||||
|
||||
online = sip_table:option(DummyValue, "online", "Registered")
|
||||
function online.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online == nil then
|
||||
return "n/a"
|
||||
else
|
||||
return sip_peers[s] and sip_peers[s].info.online
|
||||
and "yes" or "no (%s)" %{
|
||||
sip_peers[s] and sip_peers[s].info.Status:lower() or "unknown"
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
delay = sip_table:option(DummyValue, "delay", "Delay")
|
||||
function delay.cfgvalue(self, s)
|
||||
if sip_peers[s] and sip_peers[s].info.online then
|
||||
return "%i ms" % sip_peers[s].info.delay
|
||||
else
|
||||
return "n/a"
|
||||
end
|
||||
end
|
||||
|
||||
info = sip_table:option(Button, "_info", "Info")
|
||||
function info.write(self, s)
|
||||
luci.http.redirect(luci.dispatcher.build_url(
|
||||
"admin", "asterisk", "trunks", "sip", s, "info"
|
||||
))
|
||||
end
|
||||
|
||||
return cbimap
|
|
@ -1,48 +0,0 @@
|
|||
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
local ast = require "luci.asterisk"
|
||||
|
||||
cbimap = Map("asterisk", "Voicemail - Mailboxes")
|
||||
|
||||
voicemail = cbimap:section(TypedSection, "voicemail", "Voicemail Boxes")
|
||||
voicemail.addremove = true
|
||||
voicemail.anonymous = true
|
||||
voicemail.template = "cbi/tblsection"
|
||||
|
||||
context = voicemail:option(ListValue, "context", "Context")
|
||||
context:value("default")
|
||||
|
||||
number = voicemail:option(Value, "number",
|
||||
"Mailbox Number", "Unique mailbox identifier")
|
||||
|
||||
function number.write(self, s, val)
|
||||
if val and #val > 0 then
|
||||
local old = self:cfgvalue(s)
|
||||
self.map.uci:foreach("asterisk", "dialplanvoice",
|
||||
function(v)
|
||||
if v.voicebox == old then
|
||||
self.map:set(v['.name'], "voicebox", val)
|
||||
end
|
||||
end)
|
||||
Value.write(self, s, val)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
voicemail:option(Value, "name", "Ownername", "Human readable display name")
|
||||
voicemail:option(Value, "password", "Password", "Access protection")
|
||||
voicemail:option(Value, "email", "eMail", "Where to send voice messages")
|
||||
voicemail:option(Value, "page", "Pager", "Pager number")
|
||||
|
||||
zone = voicemail:option(ListValue, "zone", "Timezone", "Used time format")
|
||||
zone.titleref = luci.dispatcher.build_url("admin/asterisk/voicemail/settings")
|
||||
cbimap.uci:foreach("asterisk", "voicezone",
|
||||
function(s) zone:value(s['.name']) end)
|
||||
|
||||
function voicemail.remove(self, s)
|
||||
return ast.voicemail.remove(self.map:get(s, "number"), self.map.uci)
|
||||
end
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,51 +0,0 @@
|
|||
-- Copyright 2009 Jo-Philipp Wich <jow@openwrt.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
require "luci.sys.zoneinfo"
|
||||
|
||||
|
||||
cbimap = Map("asterisk", "Voicemail - Common Settings")
|
||||
|
||||
voicegeneral = cbimap:section(TypedSection, "voicegeneral",
|
||||
"General Voicemail Options", "Common settings for all mailboxes are " ..
|
||||
"defined here. Most of them are optional. The storage format should " ..
|
||||
"never be changed once set.")
|
||||
|
||||
voicegeneral.anonymous = true
|
||||
voicegeneral.addremove = false
|
||||
|
||||
format = voicegeneral:option(MultiValue, "Used storage formats")
|
||||
format.widget = "checkbox"
|
||||
format:value("wav49")
|
||||
format:value("gsm")
|
||||
format:value("wav")
|
||||
|
||||
voicegeneral:option(Flag, "sendvoicemail", "Enable sending of emails")
|
||||
voicegeneral:option(Flag, "attach", "Attach voice messages to emails")
|
||||
voicegeneral:option(Value, "serveremail", "Used email sender address")
|
||||
voicegeneral:option(Value, "emaildateformat", "Date format used in emails").optional = true
|
||||
voicegeneral:option(Value, "maxlogins", "Max. failed login attempts").optional = true
|
||||
voicegeneral:option(Value, "maxmsg", "Max. allowed messages per mailbox").optional = true
|
||||
voicegeneral:option(Value, "minmessage", "Min. number of seconds for voicemail").optional = true
|
||||
voicegeneral:option(Value, "maxmessage", "Max. number of seconds for voicemail").optional = true
|
||||
voicegeneral:option(Value, "maxsilence", "Seconds of silence until stop recording").optional = true
|
||||
voicegeneral:option(Value, "maxgreet", "Max. number of seconds for greetings").optional = true
|
||||
voicegeneral:option(Value, "skipms", "Milliseconds to skip for rew./ff.").optional = true
|
||||
voicegeneral:option(Value, "silencethreshold", "Threshold to detect silence").optional = true
|
||||
|
||||
|
||||
voicezone = cbimap:section(TypedSection, "voicezone", "Time Zones",
|
||||
"Time zones define how dates and times are expressen when used in " ..
|
||||
"an voice mails. Refer to the asterisk manual for placeholder values.")
|
||||
|
||||
voicezone.addremove = true
|
||||
voicezone.sectionhead = "Name"
|
||||
voicezone.template = "cbi/tblsection"
|
||||
|
||||
tz = voicezone:option(ListValue, "zone", "Location")
|
||||
for _, z in ipairs(luci.sys.zoneinfo.TZ) do tz:value(z[1]) end
|
||||
|
||||
voicezone:option(Value, "message", "Date Format")
|
||||
|
||||
|
||||
return cbimap
|
|
@ -1,13 +0,0 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<%+cbi/valueheader%>
|
||||
<% if self.href then %><a href="<%=self.href%>"><% end -%>
|
||||
<%=self:cfgvalue(section)%>
|
||||
<%- if self.href then %></a><%end%>
|
||||
 
|
||||
<input type="hidden" id="<%=cbid%>" value="<%=luci.util.pcdata(self:cfgvalue(section))%>" />
|
||||
<%+cbi/valuefooter%>
|
|
@ -1,244 +0,0 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<%+header%>
|
||||
|
||||
<%
|
||||
local uci = luci.model.uci.cursor_state()
|
||||
local ast = require "luci.asterisk"
|
||||
|
||||
function digit_pattern(s,t)
|
||||
return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'%s>%s</code>"
|
||||
%{ t and " title='" .. t .. "'" or "", s }
|
||||
end
|
||||
|
||||
function rowstyle(i)
|
||||
return "cbi-rowstyle-%i" %{
|
||||
( i % 2 ) == 0 and 2 or 1
|
||||
}
|
||||
end
|
||||
|
||||
function format_matches(z)
|
||||
local html = { }
|
||||
|
||||
if type(z) ~= "table" then
|
||||
z = { matches = { z } }
|
||||
end
|
||||
|
||||
if z.localprefix then
|
||||
for _, m in ipairs(z.matches) do
|
||||
html[#html+1] =
|
||||
digit_pattern(z.localprefix, "local prefix") .. " " ..
|
||||
digit_pattern(m)
|
||||
end
|
||||
end
|
||||
|
||||
if z.intlmatches and #z.intlmatches > 0 then
|
||||
for _, i in ipairs(z.intlmatches) do
|
||||
for _, m in ipairs(z.matches) do
|
||||
html[#html+1] = "%s %s" %{
|
||||
digit_pattern("(%s)" % i, "intl. prefix"),
|
||||
digit_pattern(m)
|
||||
}
|
||||
end
|
||||
end
|
||||
else
|
||||
for _, m in ipairs(z.matches) do
|
||||
html[#html+1] = digit_pattern(m)
|
||||
end
|
||||
end
|
||||
|
||||
return table.concat(html, "; ")
|
||||
end
|
||||
%>
|
||||
|
||||
|
||||
<form method="post" action="<%=url('admin/asterisk/dialplans')%>" enctype="multipart/form-data">
|
||||
<div>
|
||||
<input type="hidden" name="cbi.submit" value="1" />
|
||||
<input type="submit" value="Save" class="hidden" />
|
||||
</div>
|
||||
|
||||
<div class="cbi-map" id="cbi-asterisk">
|
||||
<h2 name="content">Outgoing Call Routing</h2>
|
||||
<div class="cbi-map-descr">
|
||||
Here you can manage your dial plans which are used to route outgoing calls from your local extensions.<br /><br />
|
||||
Related tasks:<br />
|
||||
<a href="<%=url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> |
|
||||
<a href="<%=url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> |
|
||||
<a href="<%=url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a>
|
||||
</div>
|
||||
<!-- tblsection -->
|
||||
<fieldset class="cbi-section" id="cbi-asterisk-sip">
|
||||
<!--<legend>Dialplans</legend>-->
|
||||
<div class="cbi-section-descr"></div>
|
||||
|
||||
<% for i, plan in pairs(ast.dialplan.plans()) do %>
|
||||
<div class="cbi-section-node">
|
||||
<div class="table cbi-section-table">
|
||||
<div class="tr cbi-section-table-titles">
|
||||
<div style="text-align: left; padding: 3px" class="th cbi-section-table-cell">
|
||||
<big>Dialplan <em><%=plan.name%></em></big>
|
||||
</div>
|
||||
<div class="td">
|
||||
<a href="<%=url('admin/asterisk/dialplans')%>?delplan=<%=plan.name%>">
|
||||
<img style="border:none" alt="Remove this dialplan" title="Remove this dialplan" src="/luci-static/resources/cbi/remove.gif" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- dialzones -->
|
||||
<% local zones_used = { }; local row = 0 %>
|
||||
<% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %>
|
||||
<div class="tr cbi-section-table-row <%=rowstyle(row)%>">
|
||||
<div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
|
||||
<strong>└ Dialzone <em><%=zone.name%></em></strong> (<%=zone.description%>)
|
||||
<p style="padding-left: 1em; margin-bottom:0">
|
||||
Lines:
|
||||
<%=ast.tools.hyperlinks(
|
||||
zone.trunks, function(v)
|
||||
return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
|
||||
end
|
||||
)%><br />
|
||||
Matches:
|
||||
<%=format_matches(zone)%>
|
||||
</p>
|
||||
</div>
|
||||
<div style="width:5%" class="td cbi-value-field">
|
||||
<a href="<%=url('admin/asterisk/dialplans/out', zone.name)%>">
|
||||
<img style="border:none" alt="Edit dialzone" title="Edit dialzone" src="/luci-static/resources/cbi/edit.gif" />
|
||||
</a>
|
||||
<a href="<%=url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>">
|
||||
<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% row = row + 1; end %>
|
||||
<!-- /dialzones -->
|
||||
|
||||
<!-- voicemail -->
|
||||
<% local boxes_used = { } %>
|
||||
<% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %>
|
||||
<div class="tr cbi-section-table-row <%=rowstyle(row)%>">
|
||||
<div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
|
||||
<strong>└ Voicemailbox <em><%=box.id%></em></strong> (<%=box.name%>)
|
||||
<p style="padding-left: 1em; margin-bottom:0">
|
||||
Owner: <%=box.name%> |
|
||||
eMail: <%=#box.email > 0 and box.email or 'n/a'%> |
|
||||
Pager: <%=#box.page > 0 and box.page or 'n/a'%><br />
|
||||
Matches: <%=format_matches(ext)%>
|
||||
</p>
|
||||
</div>
|
||||
<div style="width:5%" class="td cbi-value-field">
|
||||
<a href="<%=url('admin/asterisk/voicemail/mailboxes')%>">
|
||||
<img style="border:none" alt="Manage mailboxes ..." title="Manage mailboxes ..." src="/luci-static/resources/cbi/edit.gif" />
|
||||
</a>
|
||||
<a href="<%=url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>">
|
||||
<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% row = row + 1; end %>
|
||||
<!-- /voicemail -->
|
||||
|
||||
<!-- meetme -->
|
||||
<% local rooms_used = { } %>
|
||||
<% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %>
|
||||
<div class="tr cbi-section-table-row <%=rowstyle(row)%>">
|
||||
<div style="text-align: left; padding: 3px" class="td cbi-section-table-cell">
|
||||
<strong>└ MeetMe Room <em><%=room.room%></em></strong>
|
||||
<% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %>
|
||||
<p style="padding-left: 1em; margin-bottom:0">
|
||||
Matches: <%=format_matches(ext)%>
|
||||
</p>
|
||||
</div>
|
||||
<div style="width:5%" class="td cbi-value-field">
|
||||
<a href="<%=url('admin/asterisk/meetme/rooms')%>">
|
||||
<img style="border:none" alt="Manage conferences ..." title="Manage conferences ..." src="/luci-static/resources/cbi/edit.gif" />
|
||||
</a>
|
||||
<a href="<%=url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>">
|
||||
<img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% row = row + 1; end %>
|
||||
<!-- /meetme -->
|
||||
|
||||
<div class="tr cbi-section-table-row">
|
||||
<div style="text-align: left; padding: 3px" class="td cbi-section-table-cell" colspan="2">
|
||||
<hr style="margin-bottom:0.5em; border-width:0 0 1px 0" />
|
||||
|
||||
Add Dialzone:<br />
|
||||
<select style="width:30%" name="addzone.<%=plan.name%>">
|
||||
<option value="">-- please select --</option>
|
||||
<% for _, zone in luci.util.kspairs(ast.dialzone.zones()) do %>
|
||||
<% if not zones_used[zone.name] then %>
|
||||
<option value="<%=zone.name%>"><%=zone.name%> (<%=zone.description%>)</option>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</select>
|
||||
<br /><br />
|
||||
|
||||
Add Voicemailbox:<br />
|
||||
<select style="width:20%" name="addvbox.<%=plan.name%>" onchange="this.form['addvboxext.<%=plan.name%>'].value=this.options[this.selectedIndex].value.split('@')[0]">
|
||||
<option value="">-- please select --</option>
|
||||
<% for ext, box in luci.util.kspairs(ast.voicemail.boxes()) do %>
|
||||
<% if not boxes_used[box.id] then %>
|
||||
<option value="<%=box.id%>"><%=box.id%> (<%=box.name%>)</option>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</select>
|
||||
as extension
|
||||
<input type="text" style="width:5%" name="addvboxext.<%=plan.name%>" />
|
||||
<br /><br />
|
||||
|
||||
Add MeetMe Conference:<br />
|
||||
<select style="width:20%" name="addmeetme.<%=plan.name%>" onchange="this.form['addmeetmeext.<%=plan.name%>'].value=this.options[this.selectedIndex].value">
|
||||
<option value="">-- please select --</option>
|
||||
<% for ext, room in luci.util.kspairs(ast.meetme.rooms()) do %>
|
||||
<%# if not rooms_used[room.room] then %>
|
||||
<option value="<%=room.room%>">
|
||||
<%=room.room%>
|
||||
<% if room.description and #room.description > 0 then %>(<%=room.description%>)<% end %>
|
||||
</option>
|
||||
<%# end %>
|
||||
<% end %>
|
||||
</select>
|
||||
as extension
|
||||
<input type="text" style="width:5%" name="addmeetmeext.<%=plan.name%>" />
|
||||
<br /><br />
|
||||
|
||||
<input type="submit" class="cbi-button cbi-button-add" value="Add item »" title="Add item ..."/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="cbi-section-create cbi-tblsection-create"></div>
|
||||
</div>
|
||||
<br />
|
||||
<% end %>
|
||||
|
||||
<div class="cbi-section-node">
|
||||
<div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
|
||||
<h3>Create a new dialplan</h3>
|
||||
The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
|
||||
|
||||
<%- if create_error then %>
|
||||
<br /><span style="color:red">Invalid name given!</span><br />
|
||||
<% end -%>
|
||||
|
||||
<br />
|
||||
<input type="text" class="cbi-section-create-name" name="addplan" style="width:200px" />
|
||||
<input type="submit" class="cbi-button cbi-button-add" value="Add dialplan" title="Add dialplan"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
<%+footer%>
|
|
@ -1,164 +0,0 @@
|
|||
<%#
|
||||
Copyright 2008 Steven Barth <steven@midlink.org>
|
||||
Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<%+header%>
|
||||
|
||||
<%
|
||||
local uci = luci.model.uci.cursor_state()
|
||||
local ast = require("luci.asterisk")
|
||||
|
||||
function digit_pattern(s)
|
||||
return "<code style='padding: 2px; border:1px solid #CCCCCC; background-color: #FFFFFF'>%s</code>" % s
|
||||
end
|
||||
|
||||
function rowstyle(i)
|
||||
return "cbi-rowstyle-%i" %{
|
||||
( i % 2 ) == 0 and 2 or 1
|
||||
}
|
||||
end
|
||||
|
||||
local function find_trunks()
|
||||
local t = { }
|
||||
|
||||
uci:foreach("asterisk", "sip",
|
||||
function(s)
|
||||
if uci:get_bool("asterisk", s['.name'], "provider") then
|
||||
t[#t+1] = {
|
||||
"SIP/%s" % s['.name'],
|
||||
"SIP: %s" % s['.name']
|
||||
}
|
||||
end
|
||||
end)
|
||||
|
||||
uci:foreach("asterisk", "iax",
|
||||
function(s)
|
||||
t[#t+1] = {
|
||||
"IAX/%s" % s['.name'],
|
||||
"IAX: %s" % s.extension or s['.name']
|
||||
}
|
||||
end)
|
||||
|
||||
return t
|
||||
end
|
||||
|
||||
%>
|
||||
|
||||
|
||||
<form method="post" action="<%=url('admin/asterisk/dialplans/zones')%>" enctype="multipart/form-data">
|
||||
<div>
|
||||
<input type="hidden" name="cbi.submit" value="1" />
|
||||
<input type="submit" value="Save" class="hidden" />
|
||||
</div>
|
||||
|
||||
<div class="cbi-map" id="cbi-asterisk">
|
||||
<h2 name="content">Dial Zone Management</h2>
|
||||
<div class="cbi-map-descr">
|
||||
<a href="<%=url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br />
|
||||
Here you can manage your dial zones. The zones are used to route outgoing calls to the destination.
|
||||
Each zone groups multiple trunks and number matches to represent a logical destination. Zones can
|
||||
also be used to enforce certain dial restrictions on selected extensions.
|
||||
</div>
|
||||
|
||||
<!-- tblsection -->
|
||||
<fieldset class="cbi-section" id="cbi-asterisk-sip">
|
||||
<div class="cbi-section-node">
|
||||
<div class="table cbi-section-table">
|
||||
<div class="tr cbi-section-table-titles">
|
||||
<div style="text-align: left; padding: 3px" class="th cbi-section-table-cell" colspan="6">
|
||||
<h3>Dialzone Overview</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tr cbi-section-table-descr">
|
||||
<div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Name</div>
|
||||
<div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Prepend</div>
|
||||
<div style="width: 20%; text-align:left" class="th cbi-section-table-cell">- Match</div>
|
||||
<div style="text-align:left" class="th cbi-section-table-cell">Trunk</div>
|
||||
<div style="width: 35%; text-align:left" class="th cbi-section-table-cell">Description</div>
|
||||
<div style="width: 4%; text-align:left" class="th cbi-section-table-cell"></div>
|
||||
</div>
|
||||
|
||||
<% for i, rule in pairs(ast.dialzone.zones()) do %>
|
||||
<div class="tr cbi-section-table-row <%=rowstyle(i)%>">
|
||||
<div style="text-align:right" class="td cbi-value-field">
|
||||
<%=rule.name%>
|
||||
</div>
|
||||
<div style="text-align:right" class="td cbi-value-field">
|
||||
<% for _ in ipairs(rule.matches) do %>
|
||||
<%=rule.addprefix and digit_pattern(rule.addprefix)%> <br />
|
||||
<% end %>
|
||||
</div>
|
||||
<div style="text-align:left" class="td cbi-value-field">
|
||||
<% for _, m in ipairs(rule.matches) do %>
|
||||
<%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%>
|
||||
<%=digit_pattern(m)%><br />
|
||||
<% end %>
|
||||
</div>
|
||||
<div style="text-align:left" class="td cbi-value-field">
|
||||
<%=ast.tools.hyperlinks(
|
||||
rule.trunks, function(v)
|
||||
return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower()
|
||||
end
|
||||
)%>
|
||||
</div>
|
||||
<div style="text-align:left" class="td cbi-value-field">
|
||||
<%=rule.description or rule.name%>
|
||||
</div>
|
||||
<div style="text-align:left" class="td cbi-value-field">
|
||||
<a href="<%=url('admin/asterisk/dialplans/out', rule.name)%>">
|
||||
<img style="border:none" alt="Edit entry" title="Edit entry" src="/luci-static/resources/cbi/edit.gif" />
|
||||
</a>
|
||||
<a href="<%=url('admin/asterisk/dialplans/zones')%>?delzone=<%=rule.name%>">
|
||||
<img style="border:none" alt="Delete entry" title="Delete entry" src="/luci-static/resources/cbi/remove.gif" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="cbi-section-create cbi-tblsection-create"></div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="cbi-section-node">
|
||||
<div class="cbi-section-create cbi-tblsection-create" style="padding: 3px">
|
||||
<h3>Create a new dialzone</h3>
|
||||
The name is required and must be unique. It may only contain the characters A-Z, a-z, 0-9 and _ .<br />
|
||||
You can specifiy multiple number matches by separating them with spaces.<br />
|
||||
|
||||
<%- if create_error then %>
|
||||
<br /><span style="color:red">Invalid name given!</span><br />
|
||||
<% end -%>
|
||||
|
||||
<div class="table">
|
||||
<div class="tr">
|
||||
<div class="td" style="padding:3px">
|
||||
<label for="create1">1) Name</label><br />
|
||||
<input type="text" class="cbi-section-create-name" id="create1" name="newzone_name" style="width:200px" />
|
||||
<br /><br />
|
||||
|
||||
<label for="create2">2) Number Match</label><br />
|
||||
<input type="text" class="cbi-section-create-name" id="create2" name="newzone_match" style="width:200px" />
|
||||
</div>
|
||||
<div class="td" style="padding:3px">
|
||||
<label for="create3">3) Trunks</label><br />
|
||||
<select class="cbi-input-select" multiple="multiple" id="create3" name="newzone_uses" size="4" style="width:200px">
|
||||
<% for i, t in ipairs(find_trunks()) do %>
|
||||
<option value="<%=t[1]%>"><%=t[2]%></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<input type="submit" class="cbi-button cbi-button-add" name="newzone" value="Add entry" title="Add entry"/>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
<%+footer%>
|
|
@ -1,680 +0,0 @@
|
|||
# asterisk.pot
|
||||
# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-06-10 03:40+0200\n"
|
||||
"PO-Revision-Date: 2009-05-31 19:18+0200\n"
|
||||
"Last-Translator: Eduard Duran <iopahopa@gmail.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Pootle 1.1.0\n"
|
||||
|
||||
#~ msgid "Asterisk General Options"
|
||||
#~ msgstr "Opcions Generals d'Asterisk"
|
||||
|
||||
#~ msgid "AGI directory"
|
||||
#~ msgstr "Directori AGI"
|
||||
|
||||
#~ msgid "Cache recorded sound files during recording"
|
||||
#~ msgstr "Desa en memòria cau els sons gravats durant la gravació"
|
||||
|
||||
#~ msgid "Debug Level"
|
||||
#~ msgstr "Nivell de depuració"
|
||||
|
||||
#~ msgid "Disable some warnings"
|
||||
#~ msgstr "Desactiva algunes alertes"
|
||||
|
||||
#~ msgid "Dump core on crash"
|
||||
#~ msgstr "Bolca el nucli en cas de fallada"
|
||||
|
||||
#~ msgid "High Priority"
|
||||
#~ msgstr "Alta Prioritat"
|
||||
|
||||
#~ msgid "Initialise Crypto"
|
||||
#~ msgstr "Inicialitza Crypto"
|
||||
|
||||
#~ msgid "Use Internal Timing"
|
||||
#~ msgstr "Utilitza l'hora interna"
|
||||
|
||||
#~ msgid "Log directory"
|
||||
#~ msgstr "Directori de registres"
|
||||
|
||||
#~ msgid "Maximum number of calls allowed"
|
||||
#~ msgstr "Número màxim de trucades permeses"
|
||||
|
||||
#~ msgid "Maximum load to stop accepting new calls"
|
||||
#~ msgstr "Càrrega màxima per deixar d'acceptar trucades noves"
|
||||
|
||||
#~ msgid "Disable console colors"
|
||||
#~ msgstr "Desactiva els colors de consola"
|
||||
|
||||
#~ msgid "Sound files Cache directory"
|
||||
#~ msgstr "Directori de memòria cau dels fitxers de so"
|
||||
|
||||
#~ msgid "The Group to run as"
|
||||
#~ msgstr "Executa amb els permisos del Grup"
|
||||
|
||||
#~ msgid "The User to run as"
|
||||
#~ msgstr "Executa amb els permisos de l'Usuari"
|
||||
|
||||
#~ msgid "Voicemail Spool directory"
|
||||
#~ msgstr "Directori de bústia de correu"
|
||||
|
||||
#~ msgid "Prefix UniquID with system name"
|
||||
#~ msgstr "Prefixa l'UniquID amb el nom del sistema"
|
||||
|
||||
#~ msgid "Build transcode paths via SLINEAR, not directly"
|
||||
#~ msgstr "Munta les rutes de transcodificació via SLINEAR, no directament"
|
||||
|
||||
#~ msgid "Transmit SLINEAR silence while recording a channel"
|
||||
#~ msgstr "Transmet silenci SLINEAR mentre s'enregistri un canal"
|
||||
|
||||
#~ msgid "Verbose Level"
|
||||
#~ msgstr "Nivell de detall"
|
||||
|
||||
#~ msgid "Section dialplan"
|
||||
#~ msgstr "Secció Dialplan"
|
||||
|
||||
#~ msgid "include"
|
||||
#~ msgstr "inclou"
|
||||
|
||||
#~ msgid "Dialplan Extension"
|
||||
#~ msgstr "Connector Dialplan"
|
||||
|
||||
#~ msgid "Dialplan General Options"
|
||||
#~ msgstr "Opcions generals de Dialplan"
|
||||
|
||||
#~ msgid "Allow transfer"
|
||||
#~ msgstr "Permet la transferència"
|
||||
|
||||
#~ msgid "Clear global vars"
|
||||
#~ msgstr "Buida les variables globals"
|
||||
|
||||
#~ msgid "Dialplan Goto"
|
||||
#~ msgstr "Dialplan Goto"
|
||||
|
||||
#~ msgid "Dialplan Conference"
|
||||
#~ msgstr "Conferència Dialplan"
|
||||
|
||||
#~ msgid "Dialplan Time"
|
||||
#~ msgstr "Dialplan Time"
|
||||
|
||||
#~ msgid "Dialplan Voicemail"
|
||||
#~ msgstr "Bústia de correu Dialplan"
|
||||
|
||||
#~ msgid "Dial Zones for Dialplan"
|
||||
#~ msgstr "Zones de marcatge per Dialplan"
|
||||
|
||||
#~ msgid "Prefix to add matching dialplans"
|
||||
#~ msgstr "Prefix per afegir als Dialplan que coincideixin"
|
||||
|
||||
#~ msgid "Match International prefix"
|
||||
#~ msgstr "Coincideix amb el prefix Internacional"
|
||||
|
||||
#~ msgid "Prefix (0) to add/remove to/from international numbers"
|
||||
#~ msgstr "Prefix (0) per afegir/esborrar a/des de números internacionals"
|
||||
|
||||
#~ msgid "localzone"
|
||||
#~ msgstr "zona local"
|
||||
|
||||
#~ msgid "Match plan"
|
||||
#~ msgstr "Pla coincident"
|
||||
|
||||
#~ msgid "Connection to use"
|
||||
#~ msgstr "Connexió a fer servir"
|
||||
|
||||
#~ msgid "Feature Key maps"
|
||||
#~ msgstr "Mapa de Funcions Principals"
|
||||
|
||||
#~ msgid "Attended transfer key"
|
||||
#~ msgstr "Tecla de transferència assistida"
|
||||
|
||||
#~ msgid "Blind transfer key"
|
||||
#~ msgstr "Tecla de transferència cega"
|
||||
|
||||
#~ msgid "Key to Disconnect call"
|
||||
#~ msgstr "Tecla per desconnectar trucada"
|
||||
|
||||
#~ msgid "Key to Park call"
|
||||
#~ msgstr "Tecla per trucada en espera"
|
||||
|
||||
#~ msgid "Parking Feature"
|
||||
#~ msgstr "Funció de trucada en espera"
|
||||
|
||||
#~ msgid "ADSI Park"
|
||||
#~ msgstr "Trucada en espera ADSI"
|
||||
|
||||
#~ msgid "Attended transfer timeout (sec)"
|
||||
#~ msgstr "Temps d'espera de transferència assistida (seg)"
|
||||
|
||||
#~ msgid "One touch record key"
|
||||
#~ msgstr "Tecla de registre d'un toc"
|
||||
|
||||
#~ msgid "Name of call context for parking"
|
||||
#~ msgstr "Nom del context de la trucada en espera"
|
||||
|
||||
#~ msgid "Sound file to play to parked caller"
|
||||
#~ msgstr "Fitxer de so per reproduir a la trucada en espera"
|
||||
|
||||
#~ msgid "Max time (ms) between digits for feature activation"
|
||||
#~ msgstr "Temps màxim (en ms) entre dígits per l'activació de funció"
|
||||
|
||||
#~ msgid "Method to Find Parking slot"
|
||||
#~ msgstr "Mètode per trobar una ranura de trucada en espera"
|
||||
|
||||
#~ msgid "parkedmusicclass"
|
||||
#~ msgstr "parkedmusicclass"
|
||||
|
||||
#~ msgid "Play courtesy tone to"
|
||||
#~ msgstr "Reprodueix to de cortesia a"
|
||||
|
||||
#~ msgid "Enable Parking"
|
||||
#~ msgstr "Activa les trucades en espera"
|
||||
|
||||
#~ msgid "Extension to dial to park"
|
||||
#~ msgstr "Extensió per marcar per deixar en espera una trucada"
|
||||
|
||||
#~ msgid "Parking time (secs)"
|
||||
#~ msgstr "Temps de trucada en espera (secs)"
|
||||
|
||||
#~ msgid "Range of extensions for call parking"
|
||||
#~ msgstr "Rang d'extensions per trucada en espera"
|
||||
|
||||
#~ msgid "Pickup extension"
|
||||
#~ msgstr "Connector de recol·lecció"
|
||||
|
||||
#~ msgid "Seconds to wait between digits when transferring"
|
||||
#~ msgstr "Segons a esperar entre dígits quan es transfereix"
|
||||
|
||||
#~ msgid "sound when attended transfer is complete"
|
||||
#~ msgstr "so quan es completa la transferència assistida"
|
||||
|
||||
#~ msgid "Sound when attended transfer fails"
|
||||
#~ msgstr "so quan falla la transferència assitida"
|
||||
|
||||
#~ msgid "Reload Hardware Config"
|
||||
#~ msgstr "Recarrega la configuració de maquinari"
|
||||
|
||||
#~ msgid "Reboot Method"
|
||||
#~ msgstr "Mètode de Reinici"
|
||||
|
||||
#~ msgid "Parameter"
|
||||
#~ msgstr "Paràmetre"
|
||||
|
||||
#~ msgid "Option type"
|
||||
#~ msgstr "Tipus d'opció"
|
||||
|
||||
#~ msgid "User name"
|
||||
#~ msgstr "Nom d'usuari"
|
||||
|
||||
#~ msgid "IAX General Options"
|
||||
#~ msgstr "Opcions generals IAX"
|
||||
|
||||
#~ msgid "Allow Codecs"
|
||||
#~ msgstr "Permet Codecs"
|
||||
|
||||
#~ msgid "Static"
|
||||
#~ msgstr "Estàtic"
|
||||
|
||||
#~ msgid "Write Protect"
|
||||
#~ msgstr "Protecció d'escriptura"
|
||||
|
||||
#~ msgid "Meetme Conference"
|
||||
#~ msgstr "Conferència Meetme"
|
||||
|
||||
#~ msgid "Admin PIN"
|
||||
#~ msgstr "PIN d'administrador"
|
||||
|
||||
#~ msgid "Meeting PIN"
|
||||
#~ msgstr "PIN de reunió"
|
||||
|
||||
#~ msgid "Meetme Conference General Options"
|
||||
#~ msgstr "Opcions generals de conferència Meetme"
|
||||
|
||||
#~ msgid "Number of 20ms audio buffers to be used"
|
||||
#~ msgstr "Número de memòries intermitges d'àudio de 20 ms a utilitzar"
|
||||
|
||||
#~ msgid "Modules"
|
||||
#~ msgstr "Mòduls"
|
||||
|
||||
#~ msgid "Alarm Receiver Application"
|
||||
#~ msgstr "Aplicació de recepció d'alarma"
|
||||
|
||||
#~ msgid "Authentication Application"
|
||||
#~ msgstr "Aplicació d'autenticació"
|
||||
|
||||
#~ msgid "Make sure asterisk doesn't save CDR"
|
||||
#~ msgstr "Assegura't que asterisk no desa CDR"
|
||||
|
||||
#~ msgid "Check if channel is available"
|
||||
#~ msgstr "Comprova que el canal estigui disponible"
|
||||
|
||||
#~ msgid "Listen in on any channel"
|
||||
#~ msgstr "Escolta a qualsevol canal"
|
||||
|
||||
#~ msgid "Control Playback Application"
|
||||
#~ msgstr "Aplicació de control de reproducció"
|
||||
|
||||
#~ msgid "Cuts up variables"
|
||||
#~ msgstr "Talla les variables"
|
||||
|
||||
#~ msgid "Database access functions"
|
||||
#~ msgstr "Funcions d'accés a base de dades"
|
||||
|
||||
#~ msgid "Dialing Application"
|
||||
#~ msgstr "Aplicació de marcatge"
|
||||
|
||||
#~ msgid "Virtual Dictation Machine Application"
|
||||
#~ msgstr "Aplicació de màquina de dictat virtual"
|
||||
|
||||
#~ msgid "Directed Call Pickup Support"
|
||||
#~ msgstr "Suport de recollida de trucades adreçades"
|
||||
|
||||
#~ msgid "Extension Directory"
|
||||
#~ msgstr "Directori de connectors"
|
||||
|
||||
#~ msgid "DISA (Direct Inward System Access) Application"
|
||||
#~ msgstr "Aplicació DISA (Direct Inward System Access)"
|
||||
|
||||
#~ msgid "Dump channel variables Application"
|
||||
#~ msgstr "Bolca les variables de canal de l'aplicació"
|
||||
|
||||
#~ msgid "Simple Echo Application"
|
||||
#~ msgstr "Aplicació d'eco simple"
|
||||
|
||||
#~ msgid "ENUM Lookup"
|
||||
#~ msgstr "Consulta ENUM"
|
||||
|
||||
#~ msgid "Reevaluates strings"
|
||||
#~ msgstr "Reavalua cadenes"
|
||||
|
||||
#~ msgid "Executes applications"
|
||||
#~ msgstr "Executa aplicacions"
|
||||
|
||||
#~ msgid "External IVR application interface"
|
||||
#~ msgstr "Interfície d'aplicació IVR externa"
|
||||
|
||||
#~ msgid "Fork The CDR into 2 separate entities"
|
||||
#~ msgstr "Bifurca el CDR en 2 entitats separades"
|
||||
|
||||
#~ msgid "Get ADSI CPE ID"
|
||||
#~ msgstr "Obtingues la ADSI CPE ID"
|
||||
|
||||
#~ msgid "Group Management Routines"
|
||||
#~ msgstr "Rutines de gestió de grup"
|
||||
|
||||
#~ msgid "Encode and Stream via icecast and ices"
|
||||
#~ msgstr "Codifica i emet via icecast i ices"
|
||||
|
||||
#~ msgid "Image Transmission Application"
|
||||
#~ msgstr "Aplicació de transmissió d'imatge"
|
||||
|
||||
#~ msgid "Look up Caller*ID name/number from black"
|
||||
#~ msgstr "Cerca la ID/nom/número de qui truca de negre"
|
||||
|
||||
#~ msgid "Look up CallerID Name from local databas"
|
||||
#~ msgstr "Cerca la ID/nom/número de qui truca de la base de dades local"
|
||||
|
||||
#~ msgid "Extension Macros"
|
||||
#~ msgstr "Macros de connectors"
|
||||
|
||||
#~ msgid "A simple math Application"
|
||||
#~ msgstr "Una aplicació de matemàtiques simple"
|
||||
|
||||
#~ msgid "MD5 checksum Application"
|
||||
#~ msgstr "Aplicació de suma de verificació MD5"
|
||||
|
||||
#~ msgid "Digital Milliwatt (mu-law) Test Application"
|
||||
#~ msgstr "Aplicació de prova de milliwat digital (mu-law)"
|
||||
|
||||
#~ msgid "Record a call and mix the audio during the recording"
|
||||
#~ msgstr "Registra una trucada i mescla l'àudio durant la gravació"
|
||||
|
||||
#~ msgid "Call Parking and Announce Application"
|
||||
#~ msgstr "Aplicació d'anunci de trucades i trucada en espera"
|
||||
|
||||
#~ msgid "Trivial Playback Application"
|
||||
#~ msgstr "Aplicació de reproducció trivial"
|
||||
|
||||
#~ msgid "Require phone number to be entered"
|
||||
#~ msgstr "Requereix que s'entri un número de telèfon"
|
||||
|
||||
#~ msgid "True Call Queueing"
|
||||
#~ msgstr "Encuament de trucades real"
|
||||
|
||||
#~ msgid "Random goto"
|
||||
#~ msgstr "Goto aleatori"
|
||||
|
||||
#~ msgid "Read Variable Application"
|
||||
#~ msgstr "Aplicació de lectura de variables"
|
||||
|
||||
#~ msgid "Read in a file"
|
||||
#~ msgstr "Llegeix en un fitxer"
|
||||
|
||||
#~ msgid "Realtime Data Lookup/Rewrite"
|
||||
#~ msgstr "Cerca/reescriptura de dades en temps real"
|
||||
|
||||
#~ msgid "Trivial Record Application"
|
||||
#~ msgstr "Aplicació d'enregistrament trivial"
|
||||
|
||||
#~ msgid "Say time"
|
||||
#~ msgstr "Digues l'hora"
|
||||
|
||||
#~ msgid "Send DTMF digits Application"
|
||||
#~ msgstr "Envia aplicació de dígits DTMF"
|
||||
|
||||
#~ msgid "Send Text Applications"
|
||||
#~ msgstr "Envia aplicacions de text"
|
||||
|
||||
#~ msgid "Set CallerID Application"
|
||||
#~ msgstr "Estableix l'aplicació CallerID"
|
||||
|
||||
#~ msgid "CDR user field apps"
|
||||
#~ msgstr "Aplicacions de camp d'usuari CDR"
|
||||
|
||||
#~ msgid "load => .so ; Set CallerID Name"
|
||||
#~ msgstr "load => .so ; Estableix el nom CallerID"
|
||||
|
||||
#~ msgid "load => .so ; Set CallerID Number"
|
||||
#~ msgstr "load => .so ; Estableix el número CallerID"
|
||||
|
||||
#~ msgid "Set RDNIS Number"
|
||||
#~ msgstr "Estableix el número RDNIS"
|
||||
|
||||
#~ msgid "Set ISDN Transfer Capability"
|
||||
#~ msgstr "Estableix la capacitat de transferència XDSI"
|
||||
|
||||
#~ msgid "SMS/PSTN handler"
|
||||
#~ msgstr "Gestor SMS/PSTN"
|
||||
|
||||
#~ msgid "Hangs up the requested channel"
|
||||
#~ msgstr "Penja el canal sol·licitat"
|
||||
|
||||
#~ msgid "Stack Routines"
|
||||
#~ msgstr "Rutines de pila"
|
||||
|
||||
#~ msgid "Generic System() application"
|
||||
#~ msgstr "Aplicació genèrica de System()"
|
||||
|
||||
#~ msgid "Playback with Talk Detection"
|
||||
#~ msgstr "Playback amb Detecció de Parla"
|
||||
|
||||
#~ msgid "Interface Test Application"
|
||||
#~ msgstr "Aplicació de proves d'interfície"
|
||||
|
||||
#~ msgid "Transfer"
|
||||
#~ msgstr "Transfereix"
|
||||
|
||||
#~ msgid "TXTCIDName"
|
||||
#~ msgstr "TXTCIDName"
|
||||
|
||||
#~ msgid "Send URL Applications"
|
||||
#~ msgstr "Envia aplicacions d'URL"
|
||||
|
||||
#~ msgid "Custom User Event Application"
|
||||
#~ msgstr "Aplicació d'esdeveniments personalitzats d'usuari"
|
||||
|
||||
#~ msgid "Send verbose output"
|
||||
#~ msgstr "Envia sortida detallada"
|
||||
|
||||
#~ msgid "Voicemail"
|
||||
#~ msgstr "Bústia de veu"
|
||||
|
||||
#~ msgid "Waits until first ring after time"
|
||||
#~ msgstr "Espera fins el primer to després del temps"
|
||||
|
||||
#~ msgid "Wait For Silence Application"
|
||||
#~ msgstr "Espera l'aplicació de silenci"
|
||||
|
||||
#~ msgid "While Loops and Conditional Execution"
|
||||
#~ msgstr "Execució de bucles while i condicionals"
|
||||
|
||||
#~ msgid "Comma Separated Values CDR Backend"
|
||||
#~ msgstr "Valors de Backend CDR separats per comes"
|
||||
|
||||
#~ msgid "Customizable Comma Separated Values CDR Backend"
|
||||
#~ msgstr "Valors de Backend CDR personalitzats separats per comes"
|
||||
|
||||
#~ msgid "Asterisk Call Manager CDR Backend"
|
||||
#~ msgstr "Backend CDR del gestor de trucades Asterisk"
|
||||
|
||||
#~ msgid "MySQL CDR Backend"
|
||||
#~ msgstr "Backend CDR MySQL"
|
||||
|
||||
#~ msgid "PostgreSQL CDR Backend"
|
||||
#~ msgstr "Backend CDR PostgreSQL"
|
||||
|
||||
#~ msgid "SQLite CDR Backend"
|
||||
#~ msgstr "Backend CDR SQLite"
|
||||
|
||||
#~ msgid "Agent Proxy Channel"
|
||||
#~ msgstr "Canal de l'Agent Proxy"
|
||||
|
||||
#~ msgid "Option chan_iax2"
|
||||
#~ msgstr "Opció chan_iax2"
|
||||
|
||||
#~ msgid "Local Proxy Channel"
|
||||
#~ msgstr "Canal de proxy local"
|
||||
|
||||
#~ msgid "Session Initiation Protocol (SIP)"
|
||||
#~ msgstr "Protocol d'inicialització de sessió (SIP)"
|
||||
|
||||
#~ msgid "Adaptive Differential PCM Coder/Decoder"
|
||||
#~ msgstr "Codificador/Decodificador PCM adaptatiu diferencial"
|
||||
|
||||
#~ msgid "A-law Coder/Decoder"
|
||||
#~ msgstr "Codificador/Decodificador de llei A"
|
||||
|
||||
#~ msgid "A-law and Mulaw direct Coder/Decoder"
|
||||
#~ msgstr "Codificador/Decodificador directe de llei A i Mu"
|
||||
|
||||
#~ msgid "ITU G.726-32kbps G726 Transcoder"
|
||||
#~ msgstr "Transcodificador ITU G.726-32kbps G726"
|
||||
|
||||
#~ msgid "GSM/PCM16 (signed linear) Codec Translation"
|
||||
#~ msgstr "Còdec de traducció GSM/PCM16 (lineal amb signe)"
|
||||
|
||||
#~ msgid "Speex/PCM16 (signed linear) Codec Translator"
|
||||
#~ msgstr "Còdec de traducció Speex/PCM16 (lineal amb signe)"
|
||||
|
||||
#~ msgid "Mu-law Coder/Decoder"
|
||||
#~ msgstr "Codificador/Decodificador llei Mu"
|
||||
|
||||
#~ msgid "Sun Microsystems AU format (signed linear)"
|
||||
#~ msgstr "Format AU de Sun Microsystems (lineal amb signe)"
|
||||
|
||||
#~ msgid "G.723.1 Simple Timestamp File Format"
|
||||
#~ msgstr "Format de fitxer de marca de temps simple G.723.1"
|
||||
|
||||
#~ msgid "Raw G.726 (16/24/32/40kbps) data"
|
||||
#~ msgstr "Dades Raw G.726 (16/24/32/40kbps)"
|
||||
|
||||
#~ msgid "Raw G729 data"
|
||||
#~ msgstr "Dades Raw G729"
|
||||
|
||||
#~ msgid "Raw GSM data"
|
||||
#~ msgstr "Dades Raw GSM"
|
||||
|
||||
#~ msgid "Raw h263 data"
|
||||
#~ msgstr "Dades Raw h263"
|
||||
|
||||
#~ msgid "JPEG (Joint Picture Experts Group) Image"
|
||||
#~ msgstr "Imatge JPEG (Joint Picture Experts Group)"
|
||||
|
||||
#~ msgid "Raw uLaw 8khz Audio support (PCM)"
|
||||
#~ msgstr "Suport d'àudio Raw llei-u 8khz (PCM)"
|
||||
|
||||
#~ msgid "load => .so ; Raw aLaw 8khz PCM Audio support"
|
||||
#~ msgstr "load => .so ; suport d'àudio Raw llei-a 8khz PCM"
|
||||
|
||||
#~ msgid "Raw Signed Linear Audio support (SLN)"
|
||||
#~ msgstr "Suport d'àudio Raw amb signe lineal (SLN)"
|
||||
|
||||
#~ msgid "Dialogic VOX (ADPCM) File Format"
|
||||
#~ msgstr "Format de fitxer Dialogic VOX (ADPCM)"
|
||||
|
||||
#~ msgid "Microsoft WAV format (8000hz Signed Line"
|
||||
#~ msgstr "Format Microsoft WAV (8000hz amb signe lineal)"
|
||||
|
||||
#~ msgid "Microsoft WAV format (Proprietary GSM)"
|
||||
#~ msgstr "Format Microsoft WAV (GSM propietari)"
|
||||
|
||||
#~ msgid "Caller ID related dialplan functions"
|
||||
#~ msgstr "Functions de dialplan relacionades amb la ID de qui truca"
|
||||
|
||||
#~ msgid "ENUM Functions"
|
||||
#~ msgstr "Funcions ENUM"
|
||||
|
||||
#~ msgid "URI encoding / decoding functions"
|
||||
#~ msgstr "Funcions de codificació / decodificació d'URI"
|
||||
|
||||
#~ msgid "Asterisk Extension Language Compiler"
|
||||
#~ msgstr "Compilador del llenguatge de connectors d'Asterisk"
|
||||
|
||||
#~ msgid "Text Extension Configuration"
|
||||
#~ msgstr "Configuració del connector de text"
|
||||
|
||||
#~ msgid "load => .so ; Builtin dialplan functions"
|
||||
#~ msgstr "load => .s ; Funcions integrades dialplan"
|
||||
|
||||
#~ msgid "Loopback Switch"
|
||||
#~ msgstr "Switch loopback"
|
||||
|
||||
#~ msgid "Realtime Switch"
|
||||
#~ msgstr "Switch en temps real"
|
||||
|
||||
#~ msgid "Outgoing Spool Support"
|
||||
#~ msgstr "Suport de gestió de cues sortint"
|
||||
|
||||
#~ msgid "Wil Cal U (Auto Dialer)"
|
||||
#~ msgstr "Wil Cal U (Auto Marcatge)"
|
||||
|
||||
#~ msgid "MySQL Config Resource"
|
||||
#~ msgstr "Configuració del recurs MySQL"
|
||||
|
||||
#~ msgid "ODBC Config Resource"
|
||||
#~ msgstr "Configuració del recurs ODBC"
|
||||
|
||||
#~ msgid "PGSQL Module"
|
||||
#~ msgstr "Mòdul PGSQL"
|
||||
|
||||
#~ msgid "Cryptographic Digital Signatures"
|
||||
#~ msgstr "Signatures digitals criptogràfiques"
|
||||
|
||||
#~ msgid "Call Parking Resource"
|
||||
#~ msgstr "Recurs de trucada en espera"
|
||||
|
||||
#~ msgid "Indications Configuration"
|
||||
#~ msgstr "Configuració d'indicacions"
|
||||
|
||||
#~ msgid "Call Monitoring Resource"
|
||||
#~ msgstr "Recurs de monitoreig de trucades"
|
||||
|
||||
#~ msgid "Music On Hold Resource"
|
||||
#~ msgstr "Recurs de música en espera"
|
||||
|
||||
#~ msgid "ODBC Resource"
|
||||
#~ msgstr "Recurs ODBC"
|
||||
|
||||
#~ msgid "SMDI Module"
|
||||
#~ msgstr "Mòdul SMDI"
|
||||
|
||||
#~ msgid "SNMP Module"
|
||||
#~ msgstr "Mòdul SNMP"
|
||||
|
||||
#~ msgid "Music On Hold"
|
||||
#~ msgstr "Música en espera"
|
||||
|
||||
#~ msgid "Application"
|
||||
#~ msgstr "Aplicació"
|
||||
|
||||
#~ msgid "Directory of Music"
|
||||
#~ msgstr "Directori de música"
|
||||
|
||||
#~ msgid "Option mode"
|
||||
#~ msgstr "Mode d'opció"
|
||||
|
||||
#~ msgid "Random Play"
|
||||
#~ msgstr "Reproducció aleatòria"
|
||||
|
||||
#~ msgid "DTMF mode"
|
||||
#~ msgstr "Mode DTMF"
|
||||
|
||||
#~ msgid "Primary domain identity for From: headers"
|
||||
#~ msgstr "Domini d'identitat primari per les capçaleres From:"
|
||||
|
||||
#~ msgid "From user (required by many SIP providers)"
|
||||
#~ msgstr "Usuari d'inici (requerit per diversos proveïdors SIP)"
|
||||
|
||||
#~ msgid "Ring on incoming dialplan contexts"
|
||||
#~ msgstr "Truca en contextos d'entrades dialplan"
|
||||
|
||||
#~ msgid "Allow Insecure for"
|
||||
#~ msgstr "Permet insegur per"
|
||||
|
||||
#~ msgid "Mailbox for MWI"
|
||||
#~ msgstr "Bústia de veu per MWI"
|
||||
|
||||
#~ msgid "NAT between phone and Asterisk"
|
||||
#~ msgstr "NAT entre el telèfon i l'Asterisk"
|
||||
|
||||
#~ msgid "Check tags in headers"
|
||||
#~ msgstr "Comprova etiquetes a les capçaleres"
|
||||
|
||||
#~ msgid "Reply Timeout (ms) for down connection"
|
||||
#~ msgstr "Temps d'esperi per contestar (ms) per caigudes de connexió"
|
||||
|
||||
#~ msgid "Register connection"
|
||||
#~ msgstr "Registra connexió"
|
||||
|
||||
#~ msgid "Dial own extension for mailbox"
|
||||
#~ msgstr "Truca el propi connector per la bústia de veu"
|
||||
|
||||
#~ msgid "Client Type"
|
||||
#~ msgstr "Tipus de client"
|
||||
|
||||
#~ msgid "Username"
|
||||
#~ msgstr "Nom d'usuari"
|
||||
|
||||
#~ msgid "Section sipgeneral"
|
||||
#~ msgstr "Secció sipgeneral"
|
||||
|
||||
#~ msgid "Allow codecs"
|
||||
#~ msgstr "Permet còdecs"
|
||||
|
||||
#~ msgid "SIP realm"
|
||||
#~ msgstr "Reialme SIP"
|
||||
|
||||
#~ msgid "Voicemail general options"
|
||||
#~ msgstr "Opcions generals de bústia de veu"
|
||||
|
||||
#~ msgid "From Email address of server"
|
||||
#~ msgstr "Adreça de correu electrònic d'origen del servidor"
|
||||
|
||||
#~ msgid "Voice Mail boxes"
|
||||
#~ msgstr "Bústies de la bústia de veu"
|
||||
|
||||
#~ msgid "Email contains attachment"
|
||||
#~ msgstr "El correu electrònic conté fitxers adjunts"
|
||||
|
||||
#~ msgid "Email"
|
||||
#~ msgstr "Correu electrònic"
|
||||
|
||||
#~ msgid "Display Name"
|
||||
#~ msgstr "Nom a mostrar"
|
||||
|
||||
#~ msgid "Password"
|
||||
#~ msgstr "Contrasenya"
|
||||
|
||||
#~ msgid "zone"
|
||||
#~ msgstr "zona"
|
||||
|
||||
#~ msgid "Voice Zone settings"
|
||||
#~ msgstr "Configuració de zona de veu"
|
||||
|
||||
#~ msgid "Message Format"
|
||||
#~ msgstr "Format de missatge"
|
|
@ -1,11 +0,0 @@
|
|||
# asterisk.pot
|
||||
# generated from ./applications/luci-asterisk/luasrc/i18n/asterisk.en.lua
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue