1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00

Update to 18.06

This commit is contained in:
Ycarus 2018-07-31 17:18:00 +02:00
parent ce9432d93b
commit 110470cb85
50 changed files with 335 additions and 367 deletions

View file

@ -37,13 +37,14 @@ endef
define Host/Compile define Host/Compile
$(MAKE) -C src/ clean po2lmo $(MAKE) -C src/ clean po2lmo
$(MAKE) -C $(HOST_BUILD_DIR) bin/luasrcdiet
endef endef
define Host/Install define Host/Install
$(INSTALL_DIR) $(1)/bin $(INSTALL_DIR) $(1)/bin
$(INSTALL_DIR) $(1)/lib/lua/5.1
$(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo $(INSTALL_BIN) src/po2lmo $(1)/bin/po2lmo
$(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet $(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/luasrcdiet $(1)/bin/luasrcdiet
$(CP) $(HOST_BUILD_DIR)/luasrcdiet $(1)/lib/lua/5.1/
endef endef
$(eval $(call HostBuild)) $(eval $(call HostBuild))

View file

@ -627,6 +627,18 @@ function cbi_init() {
s.parentNode.classList.add('cbi-tooltip-container'); s.parentNode.classList.add('cbi-tooltip-container');
}); });
document.querySelectorAll('.cbi-section-remove > input[name^="cbi.rts"]').forEach(function(i) {
var handler = function(ev) {
var bits = this.name.split(/\./),
section = document.getElementById('cbi-' + bits[2] + '-' + bits[3]);
section.style.opacity = (ev.type === 'mouseover') ? 0.5 : '';
};
i.addEventListener('mouseover', handler);
i.addEventListener('mouseout', handler);
});
cbi_d_update(); cbi_d_update();
} }
@ -818,9 +830,9 @@ function cbi_dynlist_init(parent, datatype, optional, choices)
t.placeholder = holder; t.placeholder = holder;
} }
var b = document.createElement('img'); var b = E('div', {
b.src = cbi_strings.path.resource + ((i+1) < values.length ? '/cbi/remove.gif' : '/cbi/add.gif'); class: 'cbi-button cbi-button-' + ((i+1) < values.length ? 'remove' : 'add')
b.className = 'cbi-image-button'; }, (i+1) < values.length ? '×' : '+');
parent.appendChild(t); parent.appendChild(t);
parent.appendChild(b); parent.appendChild(b);
@ -986,8 +998,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices)
input = input.previousSibling; input = input.previousSibling;
} }
if (se.src.indexOf('remove') > -1) if (se.classList.contains('cbi-button-remove')) {
{
input.value = ''; input.value = '';
cbi_dynlist_keydown({ cbi_dynlist_keydown({
@ -995,8 +1006,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices)
keyCode: 8 keyCode: 8
}); });
} }
else else {
{
cbi_dynlist_keydown({ cbi_dynlist_keydown({
target: input, target: input,
keyCode: 13 keyCode: 13

View file

@ -65,12 +65,8 @@ XHR = function()
if (xhr.readyState == 4) { if (xhr.readyState == 4) {
var json = null; var json = null;
if (xhr.getResponseHeader("Content-Type") == "application/json") { if (xhr.getResponseHeader("Content-Type") == "application/json") {
try { try { json = JSON.parse(xhr.responseText); }
json = JSON.parse(xhr.responseText); catch(e) { json = null; }
}
catch(e) {
json = null;
}
} }
callback(xhr, json, Date.now() - ts); callback(xhr, json, Date.now() - ts);
@ -90,8 +86,15 @@ XHR = function()
xhr.onreadystatechange = function() xhr.onreadystatechange = function()
{ {
if (xhr.readyState == 4) if (xhr.readyState == 4) {
callback(xhr, null, Date.now() - ts); var json = null;
if (xhr.getResponseHeader("Content-Type") == "application/json") {
try { json = JSON.parse(xhr.responseText); }
catch(e) { json = null; }
}
callback(xhr, json, Date.now() - ts);
}
} }
xhr.open('POST', url, true); xhr.open('POST', url, true);

View file

@ -893,8 +893,6 @@ local function _cbi(self, ...)
local pageaction = true local pageaction = true
local parsechain = { } local parsechain = { }
local is_rollback, time_remaining = uci:rollback_pending()
for i, res in ipairs(maps) do for i, res in ipairs(maps) do
if res.apply_needed and res.parsechain then if res.apply_needed and res.parsechain then
local c local c
@ -921,8 +919,6 @@ local function _cbi(self, ...)
for i, res in ipairs(maps) do for i, res in ipairs(maps) do
res:render({ res:render({
firstmap = (i == 1), firstmap = (i == 1),
applymap = applymap,
confirmmap = (is_rollback and time_remaining or nil),
redirect = redirect, redirect = redirect,
messages = messages, messages = messages,
pageaction = pageaction, pageaction = pageaction,
@ -936,7 +932,8 @@ local function _cbi(self, ...)
pageaction = pageaction, pageaction = pageaction,
redirect = redirect, redirect = redirect,
state = state, state = state,
autoapply = config.autoapply autoapply = config.autoapply,
trigger_apply = applymap
}) })
end end
end end

View file

@ -147,8 +147,9 @@ function apply(self, rollback)
local _, err local _, err
if rollback then if rollback then
local sys = require "luci.sys"
local conf = require "luci.config" local conf = require "luci.config"
local timeout = tonumber(conf and conf.apply and conf.apply.rollback or "") or 0 local timeout = tonumber(conf and conf.apply and conf.apply.rollback or 30) or 0
_, err = call("apply", { _, err = call("apply", {
timeout = (timeout > 30) and timeout or 30, timeout = (timeout > 30) and timeout or 30,
@ -156,10 +157,21 @@ function apply(self, rollback)
}) })
if not err then if not err then
local now = os.time()
local token = sys.uniqueid(16)
util.ubus("session", "set", { util.ubus("session", "set", {
ubus_rpc_session = session_id, ubus_rpc_session = "00000000000000000000000000000000",
values = { rollback = os.time() + timeout } values = {
rollback = {
token = token,
session = session_id,
timeout = now + timeout
}
}
}) })
return token
end end
else else
_, err = call("changes", {}) _, err = call("changes", {})
@ -184,40 +196,72 @@ function apply(self, rollback)
return (err == nil), ERRSTR[err] return (err == nil), ERRSTR[err]
end end
function confirm(self) function confirm(self, token)
local _, err = call("confirm", {}) local is_pending, time_remaining, rollback_sid, rollback_token = self:rollback_pending()
if is_pending then
if token ~= rollback_token then
return false, "Permission denied"
end
local _, err = util.ubus("uci", "confirm", {
ubus_rpc_session = rollback_sid
})
if not err then if not err then
util.ubus("session", "set", { util.ubus("session", "set", {
ubus_rpc_session = session_id, ubus_rpc_session = "00000000000000000000000000000000",
values = { rollback = 0 } values = { rollback = {} }
}) })
end end
return (err == nil), ERRSTR[err] return (err == nil), ERRSTR[err]
end
return false, "No data"
end end
function rollback(self) function rollback(self)
local _, err = call("rollback", {}) local is_pending, time_remaining, rollback_sid = self:rollback_pending()
if is_pending then
local _, err = util.ubus("uci", "rollback", {
ubus_rpc_session = rollback_sid
})
if not err then if not err then
util.ubus("session", "set", { util.ubus("session", "set", {
ubus_rpc_session = session_id, ubus_rpc_session = "00000000000000000000000000000000",
values = { rollback = 0 } values = { rollback = {} }
}) })
end end
return (err == nil), ERRSTR[err] return (err == nil), ERRSTR[err]
end
return false, "No data"
end end
function rollback_pending(self) function rollback_pending(self)
local deadline, err = util.ubus("session", "get", { local rv, err = util.ubus("session", "get", {
ubus_rpc_session = session_id, ubus_rpc_session = "00000000000000000000000000000000",
keys = { "rollback" } keys = { "rollback" }
}) })
if type(deadline) == "table" and local now = os.time()
type(deadline.values) == "table" and
type(deadline.values.rollback) == "number" and if type(rv) == "table" and
deadline.values.rollback > os.time() type(rv.values) == "table" and
type(rv.values.rollback) == "table" and
type(rv.values.rollback.token) == "string" and
type(rv.values.rollback.session) == "string" and
type(rv.values.rollback.timeout) == "number" and
rv.values.rollback.timeout > now
then then
return true, deadline.values.rollback - os.time() return true,
rv.values.rollback.timeout - now,
rv.values.rollback.session,
rv.values.rollback.token
end end
return false, ERRSTR[err] return false, ERRSTR[err]

View file

@ -16,7 +16,7 @@ local _ubus = require "ubus"
local _ubus_connection = nil local _ubus_connection = nil
local getmetatable, setmetatable = getmetatable, setmetatable local getmetatable, setmetatable = getmetatable, setmetatable
local rawget, rawset, unpack = rawget, rawset, unpack local rawget, rawset, unpack, select = rawget, rawset, unpack, select
local tostring, type, assert, error = tostring, type, assert, error local tostring, type, assert, error = tostring, type, assert, error
local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring local ipairs, pairs, next, loadstring = ipairs, pairs, next, loadstring
local require, pcall, xpcall = require, pcall, xpcall local require, pcall, xpcall = require, pcall, xpcall
@ -647,6 +647,17 @@ local ubus_codes = {
"CONNECTION_FAILED" "CONNECTION_FAILED"
} }
local function ubus_return(...)
if select('#', ...) == 2 then
local rv, err = select(1, ...), select(2, ...)
if rv == nil and type(err) == "number" then
return nil, err, ubus_codes[err]
end
end
return ...
end
function ubus(object, method, data) function ubus(object, method, data)
if not _ubus_connection then if not _ubus_connection then
_ubus_connection = _ubus.connect() _ubus_connection = _ubus.connect()
@ -657,8 +668,7 @@ function ubus(object, method, data)
if type(data) ~= "table" then if type(data) ~= "table" then
data = { } data = { }
end end
local rv, err = _ubus_connection:call(object, method, data) return ubus_return(_ubus_connection:call(object, method, data))
return rv, err, ubus_codes[err]
elseif object then elseif object then
return _ubus_connection:signatures(object) return _ubus_connection:signatures(object)
else else

View file

@ -1,4 +1,4 @@
<% export("cbi_apply_widget", function(redirect_ok) -%> <% export("cbi_apply_widget", function(redirect_ok, rollback_token) -%>
<style type="text/css"> <style type="text/css">
#cbi_apply_overlay { #cbi_apply_overlay {
position: absolute; position: absolute;
@ -51,6 +51,7 @@
uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>, uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>,
uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>, uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>,
uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>, uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>,
uci_confirm_auth = <% if rollback_token then %>{ token: '<%=rollback_token%>' }<% else %>null<% end %>,
was_xhr_poll_running = false; was_xhr_poll_running = false;
function uci_status_message(type, content) { function uci_status_message(type, content) {
@ -148,7 +149,7 @@
var delay = isNaN(duration) ? 0 : Math.max(1000 - duration, 0); var delay = isNaN(duration) ? 0 : Math.max(1000 - duration, 0);
window.setTimeout(function() { window.setTimeout(function() {
xhr.post('<%=url("admin/uci/confirm")%>', uci_apply_auth, call, uci_apply_timeout * 1000); xhr.post('<%=url("admin/uci/confirm")%>', uci_confirm_auth, call, uci_apply_timeout * 1000);
}, delay); }, delay);
}; };
@ -177,8 +178,11 @@
'<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' +
'<%:Starting configuration apply…%>'); '<%:Starting configuration apply…%>');
xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r) { xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r, tok) {
if (r.status === (checked ? 200 : 204)) { if (r.status === (checked ? 200 : 204)) {
if (checked && tok !== null && typeof(tok) === 'object' && typeof(tok.token) === 'string')
uci_confirm_auth = tok;
uci_confirm(checked, Date.now() + uci_apply_rollback * 1000); uci_confirm(checked, Date.now() + uci_apply_rollback * 1000);
} }
else if (checked && r.status === 204) { else if (checked && r.status === 204) {

View file

@ -1,10 +1,12 @@
<%- <%-
local title = luci.util.trim(striptags(self.title)) local title = luci.util.trim(striptags(self.title))
local ftype = self.template and self.template:gsub("^.+/", "") local descr = luci.util.trim(striptags(self.description))
local ftype = self.typename or (self.template and self.template:gsub("^.+/", ""))
-%> -%>
<div class="td cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"<%= <div class="td cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"<%=
attr("data-name", self.option) .. attr("data-name", self.option) ..
ifattr(ftype and #ftype > 0, "data-type", ftype) .. ifattr(ftype and #ftype > 0, "data-type", ftype) ..
ifattr(title and #title > 0, "data-title", title) ifattr(title and #title > 0, "data-title", title) ..
ifattr(descr and #descr > 0, "data-description", descr)
%>> %>>
<div id="cbi-<%=self.config.."-"..section.."-"..self.option%>" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> <div id="cbi-<%=self.config.."-"..section.."-"..self.option%>" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>">

View file

@ -5,21 +5,6 @@
<div class="cbi-map" id="cbi-<%=self.config%>"> <div class="cbi-map" id="cbi-<%=self.config%>">
<% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %> <% if self.title and #self.title > 0 then %><h2 name="content"><%=self.title%></h2><% end %>
<% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %> <% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
<%- if firstmap and (applymap or confirmmap) then -%>
<%+cbi/apply_widget%>
<% cbi_apply_widget(redirect) %>
<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
<% if confirmmap then -%>
uci_confirm(true, Date.now() + <%=confirmmap%> * 1000);
<%- else -%>
uci_apply(true);
<%- end %>
});
</script>
<%- end -%>
<% if self.tabbed then %> <% if self.tabbed then %>
<ul class="cbi-tabmenu map"> <ul class="cbi-tabmenu map">
<%- self.selected_tab = luci.http.formvalue("tab.m-" .. self.config) %> <%- self.selected_tab = luci.http.formvalue("tab.m-" .. self.config) %>

View file

@ -32,25 +32,25 @@
<% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %> <% if self.optionals[section] and #self.optionals[section] > 0 or self.dynamic then %>
<div class="cbi-optionals" data-index="<%=#self.children + 1%>"> <div class="cbi-optionals" data-index="<%=#self.children + 1%>">
<% <%-
if self.dynamic then if self.dynamic then
local keys, vals, name, opt = { }, { } local keys, vals, name, opt = { }, { }
for name, opt in pairs(self.optionals[section]) do for name, opt in pairs(self.optionals[section]) do
keys[#keys+1] = name keys[#keys+1] = name
vals[#vals+1] = opt.title vals[#vals+1] = opt.title
end end
%> -%>
<input type="text" id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-type="uciname" data-optional="true"<%= <input type="text" id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-type="uciname" data-optional="true"<%=
ifattr(#keys > 0, "data-choices", luci.util.json_encode({keys, vals})) ifattr(#keys > 0, "data-choices", luci.util.json_encode({keys, vals}))
%> /> %> />
<% else %> <%- else -%>
<select id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-optionals="true"> <select id="cbi.opt.<%=self.config%>.<%=section%>" name="cbi.opt.<%=self.config%>.<%=section%>" data-optionals="true">
<option><%: -- Additional Field -- %></option> <option><%: -- Additional Field -- %></option>
<% for key, val in pairs(self.optionals[section]) do -%> <% for key, val in pairs(self.optionals[section]) do -%>
<option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>" data-index="<%=val.index%>" data-depends="<%=pcdata(val:deplist2json(section))%>"><%=striptags(val.title)%></option> <option id="cbi-<%=self.config.."-"..section.."-"..val.option%>" value="<%=val.option%>" data-index="<%=val.index%>" data-depends="<%=pcdata(val:deplist2json(section))%>"><%=striptags(val.title)%></option>
<%- end %> <%- end %>
</select> </select>
<% end %> <%- end -%>
<input type="submit" class="cbi-button cbi-button-fieldadd" value="<%:Add%>" /> <input type="submit" class="cbi-button cbi-button-fieldadd" value="<%:Add%>" />
</div> </div>
<% end %> <% end %>

View file

@ -1,10 +1,16 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<%- if self.password then -%>
<input type="password" style="position:absolute; left:-1000px"<%=
attr("name", "password." .. cbid)
%> />
<%- end -%>
<input data-update="change"<%= <input data-update="change"<%=
attr("id", cbid) .. attr("id", cbid) ..
attr("name", cbid) .. attr("name", cbid) ..
attr("type", self.password and "password" or "text") .. attr("type", self.password and "password" or "text") ..
attr("class", self.password and "cbi-input-password" or "cbi-input-text") .. attr("class", self.password and "cbi-input-password" or "cbi-input-text") ..
attr("value", self:cfgvalue(section) or self.default) .. attr("value", self:cfgvalue(section) or self.default) ..
ifattr(self.password, "autocomplete", "new-password") ..
ifattr(self.size, "size") .. ifattr(self.size, "size") ..
ifattr(self.placeholder, "placeholder") .. ifattr(self.placeholder, "placeholder") ..
ifattr(self.readonly, "readonly") .. ifattr(self.readonly, "readonly") ..
@ -14,5 +20,7 @@
ifattr(self.combobox_manual, "data-manual", self.combobox_manual) .. ifattr(self.combobox_manual, "data-manual", self.combobox_manual) ..
ifattr(#self.keylist > 0, "data-choices", { self.keylist, self.vallist }) ifattr(#self.keylist > 0, "data-choices", { self.keylist, self.vallist })
%> /> %> />
<% if self.password then %><img src="<%=resource%>/cbi/reload.gif" style="vertical-align:middle" title="<%:Reveal/hide password%>" onclick="var e = document.getElementById('<%=cbid%>'); e.type = (e.type=='password') ? 'text' : 'password';" /><% end %> <%- if self.password then -%>
<div class="cbi-button cbi-button-neutral" title="<%:Reveal/hide password%>" onclick="var e = this.previousElementSibling; e.type = (e.type === 'password') ? 'text' : 'password'"></div>
<% end %>
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View file

@ -4,4 +4,27 @@
Licensed to the public under the Apache License 2.0. Licensed to the public under the Apache License 2.0.
-%> -%>
<% include("themes/" .. theme .. "/footer") %> <%
local is_rollback_pending, rollback_time_remaining, rollback_session, rollback_token = luci.model.uci:rollback_pending()
if is_rollback_pending or trigger_apply or trigger_revert then
include("cbi/apply_widget")
cbi_apply_widget(redirect, rollback_token)
%>
<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
<% if trigger_apply then -%>
uci_apply(true);
<%- elseif trigger_revert then -%>
uci_revert();
<%- else -%>
uci_confirm(true, Date.now() + <%=rollback_time_remaining%> * 1000);
<%- end %>
});
</script>
<%
end
include("themes/" .. theme .. "/footer")
%>

View file

@ -274,9 +274,6 @@ msgstr "Alerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -272,9 +272,6 @@ msgstr "Upozornění"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -271,9 +271,6 @@ msgid "Alert"
msgstr "Alarm" msgstr "Alarm"
msgid "Alias Interface" msgid "Alias Interface"
msgstr ""
msgid "Alias interface"
msgstr "Alias-Schnittstelle" msgstr "Alias-Schnittstelle"
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""

View file

@ -274,9 +274,6 @@ msgstr "Ειδοποίηση"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -271,9 +271,6 @@ msgstr "Alert"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -275,9 +275,6 @@ msgstr "Alerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -277,9 +277,6 @@ msgstr "Alerte"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -269,9 +269,6 @@ msgstr "אזעקה"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -272,9 +272,6 @@ msgstr "Riasztás"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -281,9 +281,6 @@ msgstr "Allerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -275,9 +275,6 @@ msgstr "警告"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -266,9 +266,6 @@ msgstr ""
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -261,9 +261,6 @@ msgstr ""
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -270,9 +270,6 @@ msgstr "Varsle"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: LuCI\n" "Project-Id-Version: LuCI\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-20 09:40+0200\n" "POT-Creation-Date: 2010-04-20 09:40+0200\n"
"PO-Revision-Date: 2018-07-14 21:35+0200\n" "PO-Revision-Date: 2018-07-21 18:35+0200\n"
"Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n" "Last-Translator: Rixerx <krystian.kozak20@gmail.com>\n"
"Language-Team: Polish\n" "Language-Team: Polish\n"
"Language: pl\n" "Language: pl\n"
@ -279,16 +279,13 @@ msgid "Alert"
msgstr "Alarm" msgstr "Alarm"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr "Alias Interfejsu"
msgid "Alias interface"
msgstr "Alias interfejsu"
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr "Alias \"%s\""
msgid "All Servers" msgid "All Servers"
msgstr "" msgstr "Wszystkie serwery"
msgid "" msgid ""
"Allocate IP addresses sequentially, starting from the lowest available " "Allocate IP addresses sequentially, starting from the lowest available "
@ -303,7 +300,7 @@ msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
msgstr "Pozwól na logowanie <abbr title=\"Secure Shell\">SSH</abbr>" msgstr "Pozwól na logowanie <abbr title=\"Secure Shell\">SSH</abbr>"
msgid "Allow AP mode to disconnect STAs based on low ACK condition" msgid "Allow AP mode to disconnect STAs based on low ACK condition"
msgstr "" msgstr "Pozwól aby tryb AP rozłączał stacje STA w oparciu o niski stan ACK"
msgid "Allow all except listed" msgid "Allow all except listed"
msgstr "Pozwól wszystkim oprócz wymienionych" msgstr "Pozwól wszystkim oprócz wymienionych"
@ -342,6 +339,8 @@ msgid ""
"Always use 40MHz channels even if the secondary channel overlaps. Using this " "Always use 40MHz channels even if the secondary channel overlaps. Using this "
"option does not comply with IEEE 802.11n-2009!" "option does not comply with IEEE 802.11n-2009!"
msgstr "" msgstr ""
"Zawsze używaj kanału 40 MHz, nawet jeśli kanał dodatkowy nachodzi na inny. "
"Używanie tej opcji nie jest zgodne z IEEE 802.11n-2009!"
msgid "Annex" msgid "Annex"
msgstr "" msgstr ""
@ -541,7 +540,7 @@ msgid "Band"
msgstr "" msgstr ""
msgid "Beacon Interval" msgid "Beacon Interval"
msgstr "" msgstr "Interwał Beaconu"
msgid "" msgid ""
"Below is the determined list of files to backup. It consists of changed " "Below is the determined list of files to backup. It consists of changed "
@ -577,7 +576,6 @@ msgstr "Interfejs mostu"
msgid "Bridge unit number" msgid "Bridge unit number"
msgstr "Numer Mostu (urządzenia)" msgstr "Numer Mostu (urządzenia)"
# Podejrzewam że chodzi o interfejs? mam rację?
msgid "Bring up on boot" msgid "Bring up on boot"
msgstr "Podnieś przy stracie" msgstr "Podnieś przy stracie"
@ -860,7 +858,7 @@ msgid "DSL line mode"
msgstr "" msgstr ""
msgid "DTIM Interval" msgid "DTIM Interval"
msgstr "" msgstr "Interwał DTIM"
msgid "DUID" msgid "DUID"
msgstr "DUID" msgstr "DUID"
@ -901,12 +899,11 @@ msgid "Delete this network"
msgstr "Usuń tą sieć" msgstr "Usuń tą sieć"
msgid "Delivery Traffic Indication Message Interval" msgid "Delivery Traffic Indication Message Interval"
msgstr "" msgstr "Interwał komunikatu o wskazaniu dostawy ruchu"
msgid "Description" msgid "Description"
msgstr "Opis" msgstr "Opis"
# Ktoś tłumaczył bez zobaczenia tego w gui. Dotyczy zmiany motywu ten opis.
msgid "Design" msgid "Design"
msgstr "Motyw" msgstr "Motyw"
@ -963,7 +960,7 @@ msgid "Disabled (default)"
msgstr "Wyłączone (domyślnie)" msgstr "Wyłączone (domyślnie)"
msgid "Disassociate On Low Acknowledgement" msgid "Disassociate On Low Acknowledgement"
msgstr "" msgstr "Rozłączaj przy niskim stanie ramek ACK"
msgid "Discard upstream RFC1918 responses" msgid "Discard upstream RFC1918 responses"
msgstr "Odrzuć wychodzące odpowiedzi RFC1918" msgstr "Odrzuć wychodzące odpowiedzi RFC1918"
@ -990,15 +987,14 @@ msgstr ""
msgid "Diversity" msgid "Diversity"
msgstr "Wielorakość" msgstr "Wielorakość"
# Nie wiem czy nie zamotałem ja rozumiem;)
msgid "" msgid ""
"Dnsmasq is a combined <abbr title=\"Dynamic Host Configuration Protocol" "Dnsmasq is a combined <abbr title=\"Dynamic Host Configuration Protocol"
"\">DHCP</abbr>-Server and <abbr title=\"Domain Name System\">DNS</abbr>-" "\">DHCP</abbr>-Server and <abbr title=\"Domain Name System\">DNS</abbr>-"
"Forwarder for <abbr title=\"Network Address Translation\">NAT</abbr> " "Forwarder for <abbr title=\"Network Address Translation\">NAT</abbr> "
"firewalls" "firewalls"
msgstr "" msgstr ""
"Dnsmasq jest to serwer <abbr title=\"Dynamic Host Configuration Protocol" "Dnsmasq jest kombajnem serwera <abbr title=\"Dynamic Host Configuration Protocol"
"\">DHCP</abbr> połączony z serwerem <abbr title=\"Domain Name System\">DNS</" "\">DHCP</abbr> połączonym z serwerem <abbr title=\"Domain Name System\">DNS</"
"abbr>. Jest to serwer przekazujący (Fowarder) dla firewalli <abbr title=" "abbr>. Jest to serwer przekazujący (Fowarder) dla firewalli <abbr title="
"\"Network Address Translation\">NAT</abbr>" "\"Network Address Translation\">NAT</abbr>"
@ -1055,7 +1051,6 @@ msgstr ""
msgid "Dual-Stack Lite (RFC6333)" msgid "Dual-Stack Lite (RFC6333)"
msgstr "" msgstr ""
# "n" brakowało...
msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>" msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
msgstr "" msgstr ""
"<abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> dynamiczne" "<abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> dynamiczne"
@ -1334,7 +1329,7 @@ msgid "Force"
msgstr "Wymuś" msgstr "Wymuś"
msgid "Force 40MHz mode" msgid "Force 40MHz mode"
msgstr "" msgstr "Wymuś tryb 40MHz"
msgid "Force CCMP (AES)" msgid "Force CCMP (AES)"
msgstr "Wymuś CCMP (AES)" msgstr "Wymuś CCMP (AES)"
@ -1733,7 +1728,6 @@ msgstr ""
msgid "Interface Configuration" msgid "Interface Configuration"
msgstr "Konfiguracja Interfejsu" msgstr "Konfiguracja Interfejsu"
# Tam jest lista interfejsów....
msgid "Interface Overview" msgid "Interface Overview"
msgstr "Przegląd Interfejsów" msgstr "Przegląd Interfejsów"
@ -1752,7 +1746,6 @@ msgstr "Interfejsy"
msgid "Internal" msgid "Internal"
msgstr "" msgstr ""
# Nadużycie tagu abbr uważam za uzasadnione.
msgid "Internal Server Error" msgid "Internal Server Error"
msgstr "Wewnętrzny błąd serwera" msgstr "Wewnętrzny błąd serwera"
@ -2013,7 +2006,7 @@ msgid "Lowest leased address as offset from the network address."
msgstr "Najniższy wydzierżawiony adres jako offset dla adresu sieci." msgstr "Najniższy wydzierżawiony adres jako offset dla adresu sieci."
msgid "MAC" msgid "MAC"
msgstr "" msgstr "MAC"
msgid "MAC-Address" msgid "MAC-Address"
msgstr "Adres MAC" msgstr "Adres MAC"
@ -2260,7 +2253,7 @@ msgid "No rules in this chain"
msgstr "Brak zasad w tym łańcuchu" msgstr "Brak zasad w tym łańcuchu"
msgid "No scan results available yet..." msgid "No scan results available yet..."
msgstr "" msgstr "Brak wyników skanowania..."
msgid "No zone assigned" msgid "No zone assigned"
msgstr "Brak przypisanej strefy" msgstr "Brak przypisanej strefy"
@ -2699,6 +2692,7 @@ msgid ""
"Query all available upstream <abbr title=\"Domain Name System\">DNS</abbr> " "Query all available upstream <abbr title=\"Domain Name System\">DNS</abbr> "
"servers" "servers"
msgstr "" msgstr ""
"Zapytaj o wszystkie dostępne serwery <abbr title=\"Domain Name System\">DNS</abbr> "
msgid "R0 Key Lifetime" msgid "R0 Key Lifetime"
msgstr "" msgstr ""
@ -2995,11 +2989,10 @@ msgid "Scan"
msgstr "Skanuj" msgstr "Skanuj"
msgid "Scan request failed" msgid "Scan request failed"
msgstr "" msgstr "Próba skanowania nie powiodła się"
# Raczej nie stosuje się kilku dużych liter w tym samym
msgid "Scheduled Tasks" msgid "Scheduled Tasks"
msgstr "Zaplanowane zadania" msgstr "Zaplanowane Zadania"
msgid "Section added" msgid "Section added"
msgstr "Dodano sekcję" msgstr "Dodano sekcję"
@ -3059,7 +3052,7 @@ msgid "Short GI"
msgstr "" msgstr ""
msgid "Short Preamble" msgid "Short Preamble"
msgstr "" msgstr "Krótki Wstęp"
msgid "Show current backup file list" msgid "Show current backup file list"
msgstr "Pokaż aktualną listę plików do backupu" msgstr "Pokaż aktualną listę plików do backupu"
@ -3169,7 +3162,7 @@ msgid "Starting configuration apply…"
msgstr "" msgstr ""
msgid "Starting wireless scan..." msgid "Starting wireless scan..."
msgstr "" msgstr "Rozpoczynanie skanowania..."
msgid "Startup" msgid "Startup"
msgstr "Autostart" msgstr "Autostart"
@ -3935,7 +3928,7 @@ msgid ""
msgstr "" msgstr ""
"Tutaj można włączyć lub wyłączyć zainstalowane skrypty. Zmiany zostaną " "Tutaj można włączyć lub wyłączyć zainstalowane skrypty. Zmiany zostaną "
"zastosowane po ponownym uruchomieniu urządzenia.<br /><strong>Ostrzeżenie: " "zastosowane po ponownym uruchomieniu urządzenia.<br /><strong>Ostrzeżenie: "
"Jeśli wyłączysz podstawowe skrypty typu \"networks\", urządzenie może stać " "Jeśli wyłączysz podstawowe skrypty typu \"network\", urządzenie może stać "
"się nieosiągalne!</strong>" "się nieosiągalne!</strong>"
msgid "" msgid ""
@ -4033,7 +4026,7 @@ msgid "minutes"
msgstr "minuty" msgstr "minuty"
msgid "mixed WPA/WPA2" msgid "mixed WPA/WPA2"
msgstr "" msgstr "mieszany WPA/WPA2"
msgid "no" msgid "no"
msgstr "nie" msgstr "nie"

View file

@ -294,9 +294,6 @@ msgstr "Alerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -280,9 +280,6 @@ msgstr "Alerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -267,9 +267,6 @@ msgstr "Alerta"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -276,9 +276,6 @@ msgstr "Тревога"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -255,9 +255,6 @@ msgstr ""
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -263,9 +263,6 @@ msgstr "Varning"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -248,9 +248,6 @@ msgstr ""
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -266,9 +266,6 @@ msgstr "Uyarı"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -291,9 +291,6 @@ msgstr "Тривога"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "Інтерфейс псевдоніма" msgstr "Інтерфейс псевдоніма"
msgid "Alias interface"
msgstr "Інтерфейс псевдоніма"
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "Псевдонім \"%s\"" msgstr "Псевдонім \"%s\""

View file

@ -262,9 +262,6 @@ msgstr ""
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

View file

@ -4,7 +4,7 @@ msgstr ""
"Last-Translator: Hsing-Wang Liao <kuoruan@gmail.com>\n" "Last-Translator: Hsing-Wang Liao <kuoruan@gmail.com>\n"
msgid "%.1f dB" msgid "%.1f dB"
msgstr "" msgstr "%.1f dB"
msgid "%s is untagged in multiple VLANs!" msgid "%s is untagged in multiple VLANs!"
msgstr "%s 在多个 VLAN 中均未标记!" msgstr "%s 在多个 VLAN 中均未标记!"
@ -40,7 +40,7 @@ msgid "-- match by uuid --"
msgstr "-- 根据 UUID 匹配 --" msgstr "-- 根据 UUID 匹配 --"
msgid "-- please select --" msgid "-- please select --"
msgstr "" msgstr "-- 请选择 --"
msgid "1 Minute Load:" msgid "1 Minute Load:"
msgstr "1 分钟负载:" msgstr "1 分钟负载:"
@ -258,16 +258,13 @@ msgid "Alert"
msgstr "警戒" msgstr "警戒"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr "接口别名"
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr "\"%s\" 的别名"
msgid "All Servers" msgid "All Servers"
msgstr "" msgstr "所有服务器"
msgid "" msgid ""
"Allocate IP addresses sequentially, starting from the lowest available " "Allocate IP addresses sequentially, starting from the lowest available "
@ -281,7 +278,7 @@ msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
msgstr "允许 <abbr title=\"Secure Shell\">SSH</abbr> 密码验证" msgstr "允许 <abbr title=\"Secure Shell\">SSH</abbr> 密码验证"
msgid "Allow AP mode to disconnect STAs based on low ACK condition" msgid "Allow AP mode to disconnect STAs based on low ACK condition"
msgstr "" msgstr "允许 AP 模式时在 low ACK 的情况下断开无线终端"
msgid "Allow all except listed" msgid "Allow all except listed"
msgstr "仅允许列表外" msgstr "仅允许列表外"
@ -318,6 +315,7 @@ msgid ""
"Always use 40MHz channels even if the secondary channel overlaps. Using this " "Always use 40MHz channels even if the secondary channel overlaps. Using this "
"option does not comply with IEEE 802.11n-2009!" "option does not comply with IEEE 802.11n-2009!"
msgstr "" msgstr ""
"即使辅助信道重叠,也始终使用 40MHz 信道。使用此选项不符合IEEE 802.11n-2009"
msgid "Annex" msgid "Annex"
msgstr "Annex" msgstr "Annex"
@ -398,7 +396,7 @@ msgid "Apply request failed with status <code>%h</code>"
msgstr "应用请求失败,状态 <code>%h</code>" msgstr "应用请求失败,状态 <code>%h</code>"
msgid "Apply unchecked" msgid "Apply unchecked"
msgstr "应用未选中" msgstr "强制应用"
msgid "Architecture" msgid "Architecture"
msgstr "架构" msgstr "架构"
@ -511,7 +509,7 @@ msgid "Band"
msgstr "频宽" msgstr "频宽"
msgid "Beacon Interval" msgid "Beacon Interval"
msgstr "" msgstr "Beacon 间隔"
msgid "" msgid ""
"Below is the determined list of files to backup. It consists of changed " "Below is the determined list of files to backup. It consists of changed "
@ -569,7 +567,7 @@ msgid "CPU usage (%)"
msgstr "CPU 使用率(%" msgstr "CPU 使用率(%"
msgid "Call failed" msgid "Call failed"
msgstr "" msgstr "调用失败"
msgid "Cancel" msgid "Cancel"
msgstr "取消" msgstr "取消"
@ -581,16 +579,16 @@ msgid "Chain"
msgstr "链" msgstr "链"
msgid "Changes" msgid "Changes"
msgstr "改数" msgstr "改数"
msgid "Changes applied." msgid "Changes applied."
msgstr "更改已应用。" msgstr "更改已应用。"
msgid "Changes have been reverted." msgid "Changes have been reverted."
msgstr "更改已取消。" msgstr "更改已恢复。"
msgid "Changes the administrator password for accessing the device" msgid "Changes the administrator password for accessing the device"
msgstr "改访问设备的管理员密码" msgstr "改访问设备的管理员密码"
msgid "Channel" msgid "Channel"
msgstr "信道" msgstr "信道"
@ -674,7 +672,7 @@ msgid "Configuration"
msgstr "配置" msgstr "配置"
msgid "Configuration failed" msgid "Configuration failed"
msgstr "" msgstr "配置失败"
msgid "Configuration files will be kept." msgid "Configuration files will be kept."
msgstr "配置文件将被保留。" msgstr "配置文件将被保留。"
@ -698,7 +696,7 @@ msgid "Connection Limit"
msgstr "连接数限制" msgstr "连接数限制"
msgid "Connection attempt failed" msgid "Connection attempt failed"
msgstr "" msgstr "尝试连接失败"
msgid "Connections" msgid "Connections"
msgstr "连接" msgstr "连接"
@ -708,7 +706,7 @@ msgid ""
"changes. You might need to reconnect if you modified network related " "changes. You might need to reconnect if you modified network related "
"settings such as the IP address or wireless security credentials." "settings such as the IP address or wireless security credentials."
msgstr "" msgstr ""
"应用配置更改后,无法重新获得对设备的访问权限。如果您改了网络相关设置如 IP " "应用配置更改后,无法重新获得对设备的访问权限。如果您改了网络相关设置如 IP "
"地址或无线安全证书,则可能需要重新连接。" "地址或无线安全证书,则可能需要重新连接。"
msgid "Country" msgid "Country"
@ -815,7 +813,7 @@ msgid "DSL line mode"
msgstr "DSL 线路模式" msgstr "DSL 线路模式"
msgid "DTIM Interval" msgid "DTIM Interval"
msgstr "" msgstr "DTIM 间隔"
msgid "DUID" msgid "DUID"
msgstr "DUID" msgstr "DUID"
@ -856,7 +854,7 @@ msgid "Delete this network"
msgstr "删除此网络" msgstr "删除此网络"
msgid "Delivery Traffic Indication Message Interval" msgid "Delivery Traffic Indication Message Interval"
msgstr "" msgstr "发送流量指示消息间隔"
msgid "Description" msgid "Description"
msgstr "描述" msgstr "描述"
@ -880,7 +878,7 @@ msgid "Device unreachable!"
msgstr "无法连接到设备" msgstr "无法连接到设备"
msgid "Device unreachable! Still waiting for device..." msgid "Device unreachable! Still waiting for device..."
msgstr "" msgstr "无法连接到设备!仍旧等待设备..."
msgid "Diagnostics" msgid "Diagnostics"
msgstr "网络诊断" msgstr "网络诊断"
@ -914,16 +912,16 @@ msgid "Disabled"
msgstr "已禁用" msgstr "已禁用"
msgid "Disabled (default)" msgid "Disabled (default)"
msgstr "禁用(默认)" msgstr "禁用(默认)"
msgid "Disassociate On Low Acknowledgement" msgid "Disassociate On Low Acknowledgement"
msgstr "" msgstr "在 Low Acknowledgement 时断开连接"
msgid "Discard upstream RFC1918 responses" msgid "Discard upstream RFC1918 responses"
msgstr "丢弃 RFC1918 上行响应数据" msgstr "丢弃 RFC1918 上行响应数据"
msgid "Disconnection attempt failed" msgid "Disconnection attempt failed"
msgstr "" msgstr "尝试断开连接失败"
msgid "Dismiss" msgid "Dismiss"
msgstr "解除" msgstr "解除"
@ -978,7 +976,7 @@ msgstr ""
"不转发没有 <abbr title=\"Domain Name System\">DNS</abbr> 名称的解析请求" "不转发没有 <abbr title=\"Domain Name System\">DNS</abbr> 名称的解析请求"
msgid "Down" msgid "Down"
msgstr "" msgstr "向下"
msgid "Download and install package" msgid "Download and install package"
msgstr "下载并安装软件包" msgstr "下载并安装软件包"
@ -1021,7 +1019,7 @@ msgid "EAP-Method"
msgstr "EAP 类型" msgstr "EAP 类型"
msgid "Edit" msgid "Edit"
msgstr "修改" msgstr "编辑"
msgid "" msgid ""
"Edit the raw configuration data above to fix any error and hit \"Save\" to " "Edit the raw configuration data above to fix any error and hit \"Save\" to "
@ -1029,10 +1027,10 @@ msgid ""
msgstr "编辑上方的原始配置数据来修复错误,点击“保存”按钮以重新载入此页面。" msgstr "编辑上方的原始配置数据来修复错误,点击“保存”按钮以重新载入此页面。"
msgid "Edit this interface" msgid "Edit this interface"
msgstr "修改此接口" msgstr "编辑此接口"
msgid "Edit this network" msgid "Edit this network"
msgstr "修改此网络" msgstr "编辑此网络"
msgid "Emergency" msgid "Emergency"
msgstr "紧急" msgstr "紧急"
@ -1095,7 +1093,7 @@ msgid "Enable this mount"
msgstr "启用此挂载点" msgstr "启用此挂载点"
msgid "Enable this network" msgid "Enable this network"
msgstr "" msgstr "启用此网络"
msgid "Enable this swap" msgid "Enable this swap"
msgstr "启用此 swap 分区" msgstr "启用此 swap 分区"
@ -1130,10 +1128,10 @@ msgid "Endpoint Port"
msgstr "端点端口" msgstr "端点端口"
msgid "Enter custom value" msgid "Enter custom value"
msgstr "" msgstr "输入自定义值"
msgid "Enter custom values" msgid "Enter custom values"
msgstr "" msgstr "输入自定义值"
msgid "Erasing..." msgid "Erasing..."
msgstr "擦除中..." msgstr "擦除中..."
@ -1185,10 +1183,10 @@ msgid "Extra SSH command options"
msgstr "额外的 SSH 命令选项" msgstr "额外的 SSH 命令选项"
msgid "FT over DS" msgid "FT over DS"
msgstr "" msgstr "FT over DS"
msgid "FT over the Air" msgid "FT over the Air"
msgstr "" msgstr "FT over the Air"
msgid "FT protocol" msgid "FT protocol"
msgstr "FT 协议" msgstr "FT 协议"
@ -1215,7 +1213,7 @@ msgid "Filter useless"
msgstr "过滤无用包" msgstr "过滤无用包"
msgid "Finalizing failed" msgid "Finalizing failed"
msgstr "" msgstr "最终确认失败"
msgid "" msgid ""
"Find all currently attached filesystems and swap and replace configuration " "Find all currently attached filesystems and swap and replace configuration "
@ -1271,7 +1269,7 @@ msgid "Force"
msgstr "强制" msgstr "强制"
msgid "Force 40MHz mode" msgid "Force 40MHz mode"
msgstr "" msgstr "强制 40MHz 模式"
msgid "Force CCMP (AES)" msgid "Force CCMP (AES)"
msgstr "强制 CCMPAES" msgstr "强制 CCMPAES"
@ -1338,7 +1336,7 @@ msgid "Gateway"
msgstr "网关" msgstr "网关"
msgid "Gateway address is invalid" msgid "Gateway address is invalid"
msgstr "" msgstr "网关地址无效"
msgid "Gateway ports" msgid "Gateway ports"
msgstr "网关端口" msgstr "网关端口"
@ -1426,7 +1424,7 @@ msgid "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network"
msgstr "主机 <abbr title=\"Internet Protocol Address\">IP</abbr> 或网络" msgstr "主机 <abbr title=\"Internet Protocol Address\">IP</abbr> 或网络"
msgid "Host-Uniq tag content" msgid "Host-Uniq tag content"
msgstr "" msgstr "Host-Uniq 标签内容"
msgid "Hostname" msgid "Hostname"
msgstr "主机名" msgstr "主机名"
@ -1450,10 +1448,10 @@ msgid "IP address"
msgstr "IP 地址" msgstr "IP 地址"
msgid "IP address in invalid" msgid "IP address in invalid"
msgstr "" msgstr "IP 地址无效"
msgid "IP address is missing" msgid "IP address is missing"
msgstr "" msgstr "IP 地址缺失"
msgid "IPv4" msgid "IPv4"
msgstr "IPv4" msgstr "IPv4"
@ -1625,7 +1623,7 @@ msgid "Info"
msgstr "信息" msgstr "信息"
msgid "Initialization failure" msgid "Initialization failure"
msgstr "" msgstr "初始化失败"
msgid "Initscript" msgid "Initscript"
msgstr "启动脚本" msgstr "启动脚本"
@ -1863,7 +1861,7 @@ msgid "Loading"
msgstr "加载中" msgstr "加载中"
msgid "Local IP address is invalid" msgid "Local IP address is invalid"
msgstr "" msgstr "本地 IP 地址无效"
msgid "Local IP address to assign" msgid "Local IP address to assign"
msgstr "要分配的本地 IP 地址" msgstr "要分配的本地 IP 地址"
@ -1930,7 +1928,7 @@ msgid "Lowest leased address as offset from the network address."
msgstr "网络地址的起始分配基址。" msgstr "网络地址的起始分配基址。"
msgid "MAC" msgid "MAC"
msgstr "" msgstr "MAC"
msgid "MAC-Address" msgid "MAC-Address"
msgstr "MAC 地址" msgstr "MAC 地址"
@ -1948,7 +1946,7 @@ msgid "MAP / LW4over6"
msgstr "MAP / LW4over6" msgstr "MAP / LW4over6"
msgid "MAP rule is invalid" msgid "MAP rule is invalid"
msgstr "" msgstr "MAP 规则无效"
msgid "MB/s" msgid "MB/s"
msgstr "MB/s" msgstr "MB/s"
@ -2032,7 +2030,7 @@ msgid "Modem device"
msgstr "调制解调器节点" msgstr "调制解调器节点"
msgid "Modem information query failed" msgid "Modem information query failed"
msgstr "" msgstr "调制解调器信息查询失败"
msgid "Modem init timeout" msgid "Modem init timeout"
msgstr "调制解调器初始化超时" msgstr "调制解调器初始化超时"
@ -2130,7 +2128,7 @@ msgid "Network boot image"
msgstr "网络启动镜像" msgstr "网络启动镜像"
msgid "Network device is not present" msgid "Network device is not present"
msgstr "" msgstr "网络设备不存在"
msgid "Network without interfaces." msgid "Network without interfaces."
msgstr "无接口的网络。" msgstr "无接口的网络。"
@ -2154,7 +2152,7 @@ msgid "No information available"
msgstr "无可用信息" msgstr "无可用信息"
msgid "No matching prefix delegation" msgid "No matching prefix delegation"
msgstr "" msgstr "无匹配的前缀委托"
msgid "No negative cache" msgid "No negative cache"
msgstr "禁用无效信息缓存" msgstr "禁用无效信息缓存"
@ -2175,7 +2173,7 @@ msgid "No rules in this chain"
msgstr "本链没有规则" msgstr "本链没有规则"
msgid "No scan results available yet..." msgid "No scan results available yet..."
msgstr "" msgstr "还没有可用的扫描结果..."
msgid "No zone assigned" msgid "No zone assigned"
msgstr "未指定区域" msgstr "未指定区域"
@ -2281,10 +2279,10 @@ msgid "Operating frequency"
msgstr "工作频率" msgstr "工作频率"
msgid "Option changed" msgid "Option changed"
msgstr "修改的选项" msgstr "选项已更改"
msgid "Option removed" msgid "Option removed"
msgstr "移除的选项" msgstr "选项已移除"
msgid "Optional" msgid "Optional"
msgstr "可选" msgstr "可选"
@ -2314,7 +2312,7 @@ msgid "Optional. Create routes for Allowed IPs for this peer."
msgstr "可选,为此 Peer 创建允许 IP 的路由。" msgstr "可选,为此 Peer 创建允许 IP 的路由。"
msgid "Optional. Description of peer." msgid "Optional. Description of peer."
msgstr "" msgstr "可选Peer 的描述。"
msgid "" msgid ""
"Optional. Host of peer. Names are resolved prior to bringing up the " "Optional. Host of peer. Names are resolved prior to bringing up the "
@ -2397,7 +2395,7 @@ msgid "PIN"
msgstr "PIN" msgstr "PIN"
msgid "PIN code rejected" msgid "PIN code rejected"
msgstr "" msgstr "PIN 码被拒绝"
msgid "PMK R1 Push" msgid "PMK R1 Push"
msgstr "R1 推送 PMK" msgstr "R1 推送 PMK"
@ -2457,7 +2455,7 @@ msgid "Password of inner Private Key"
msgstr "内部私钥的密码" msgstr "内部私钥的密码"
msgid "Password successfully changed!" msgid "Password successfully changed!"
msgstr "密码改成功!" msgstr "密码改成功!"
msgid "Password2" msgid "Password2"
msgstr "密码 2" msgstr "密码 2"
@ -2487,7 +2485,7 @@ msgid "Peer IP address to assign"
msgstr "要分配的 Peer IP 地址" msgstr "要分配的 Peer IP 地址"
msgid "Peer address is missing" msgid "Peer address is missing"
msgstr "" msgstr "Peer 地址缺失"
msgid "Peers" msgid "Peers"
msgstr "Peers" msgstr "Peers"
@ -2608,7 +2606,7 @@ msgstr "质量"
msgid "" msgid ""
"Query all available upstream <abbr title=\"Domain Name System\">DNS</abbr> " "Query all available upstream <abbr title=\"Domain Name System\">DNS</abbr> "
"servers" "servers"
msgstr "" msgstr "查询所有可用的上游 <abbr title=\"Domain Name System\">DNS</abbr> 服务器"
msgid "R0 Key Lifetime" msgid "R0 Key Lifetime"
msgstr "R0 密钥生存期" msgstr "R0 密钥生存期"
@ -2647,7 +2645,7 @@ msgid "Radius-Authentication-Server"
msgstr "Radius 认证服务器" msgstr "Radius 认证服务器"
msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this" msgid "Raw hex-encoded bytes. Leave empty unless your ISP require this"
msgstr "" msgstr "原始 16 进制编码的字节。除非您的 ISP 要求,否则请留空"
msgid "" msgid ""
"Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host " "Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host "
@ -2660,13 +2658,14 @@ msgid ""
"Really delete this interface? The deletion cannot be undone! You might lose " "Really delete this interface? The deletion cannot be undone! You might lose "
"access to this device if you are connected via this interface" "access to this device if you are connected via this interface"
msgstr "" msgstr ""
"确定要删除此接口?删除操作无法撤消!若您删除此接口,可能导致无法再访问此设备"
msgid "" msgid ""
"Really delete this wireless network? The deletion cannot be undone! You " "Really delete this wireless network? The deletion cannot be undone! You "
"might lose access to this device if you are connected via this network." "might lose access to this device if you are connected via this network."
msgstr "" msgstr ""
"确定要删除此无线网络?删除操作无法撤销!\\n删除此无线网络,可能导致无法再访问" "确定要删除此无线网络?删除操作无法撤销!若您删除此无线网络,可能导致无法再访问"
"路由器!" "此设备。"
msgid "Really reset all changes?" msgid "Really reset all changes?"
msgstr "确定要放弃所有更改?" msgstr "确定要放弃所有更改?"
@ -2809,7 +2808,7 @@ msgid "Restart Firewall"
msgstr "重启防火墙" msgstr "重启防火墙"
msgid "Restart radio interface" msgid "Restart radio interface"
msgstr "" msgstr "重启无线接口"
msgid "Restore" msgid "Restore"
msgstr "恢复" msgstr "恢复"
@ -2901,7 +2900,7 @@ msgid "Scan"
msgstr "扫描" msgstr "扫描"
msgid "Scan request failed" msgid "Scan request failed"
msgstr "" msgstr "扫描请求失败"
msgid "Scheduled Tasks" msgid "Scheduled Tasks"
msgstr "计划任务" msgstr "计划任务"
@ -2946,10 +2945,10 @@ msgid "Set up Time Synchronization"
msgstr "设置时间同步" msgstr "设置时间同步"
msgid "Setting PLMN failed" msgid "Setting PLMN failed"
msgstr "" msgstr "设置 PLMN 失败"
msgid "Setting operation mode failed" msgid "Setting operation mode failed"
msgstr "" msgstr "设置操作模式失败"
msgid "Setup DHCP Server" msgid "Setup DHCP Server"
msgstr "配置 DHCP 服务器" msgstr "配置 DHCP 服务器"
@ -2961,7 +2960,7 @@ msgid "Short GI"
msgstr "Short GI" msgstr "Short GI"
msgid "Short Preamble" msgid "Short Preamble"
msgstr "" msgstr "Short Preamble"
msgid "Show current backup file list" msgid "Show current backup file list"
msgstr "显示当前备份文件列表" msgstr "显示当前备份文件列表"
@ -3067,7 +3066,7 @@ msgid "Starting configuration apply…"
msgstr "开始应用配置..." msgstr "开始应用配置..."
msgid "Starting wireless scan..." msgid "Starting wireless scan..."
msgstr "" msgstr "正在启动无线扫描..."
msgid "Startup" msgid "Startup"
msgstr "启动项" msgstr "启动项"
@ -3223,7 +3222,7 @@ msgstr ""
"code>" "code>"
msgid "The backup archive does not appear to be a valid gzip file." msgid "The backup archive does not appear to be a valid gzip file."
msgstr "" msgstr "备份存档似乎不是有效的 gzip 文件。"
msgid "The configuration file could not be loaded due to the following error:" msgid "The configuration file could not be loaded due to the following error:"
msgstr "由于以下错误,配置文件无法被加载:" msgstr "由于以下错误,配置文件无法被加载:"
@ -3237,9 +3236,9 @@ msgid ""
"or revert all pending changes to keep the currently working configuration " "or revert all pending changes to keep the currently working configuration "
"state." "state."
msgstr "" msgstr ""
"在应用挂起的更改后 %d 秒内无法到达该设备,出于安全原因导致配置回滚。如果您认" "在应用挂起的更改后 %d 秒内无法连接到此设备,出于安全原因导致配置回滚。如果您认"
"为配置更改仍然正确,请执行未选中的配置应用。或者您可以在尝试再次应用之前解除" "为配置的更改是正确的,请执行强制应用。或者您可以在再次尝试应用之前解除"
"此警告并编辑更改,或者还原所有未完成的更改以保持当前正在工作的配置状态。" "此警告并编辑配置,或者恢复所有挂起的更改以保持当前正在工作的配置状态。"
msgid "" msgid ""
"The device file of the memory or partition (<abbr title=\"for example\">e.g." "The device file of the memory or partition (<abbr title=\"for example\">e.g."
@ -3263,7 +3262,7 @@ msgstr ""
"过程中切勿断电!" "过程中切勿断电!"
msgid "The following changes have been reverted" msgid "The following changes have been reverted"
msgstr "以下更改已放弃" msgstr "以下更改已恢复"
msgid "The following rules are currently active on this system." msgid "The following rules are currently active on this system."
msgstr "以下规则当前在系统中处于活动状态。" msgstr "以下规则当前在系统中处于活动状态。"
@ -3329,13 +3328,13 @@ msgid "There are no active leases."
msgstr "没有已分配的租约。" msgstr "没有已分配的租约。"
msgid "There are no changes to apply." msgid "There are no changes to apply."
msgstr "没有待生效的更改。" msgstr "没有待应用的更改。"
msgid "There are no pending changes to revert!" msgid "There are no pending changes to revert!"
msgstr "没有可放弃的更改" msgstr "没有挂起的更改可恢复"
msgid "There are no pending changes!" msgid "There are no pending changes!"
msgstr "没有待生效的更改!" msgstr "没有挂起的更改!"
msgid "" msgid ""
"There is no device assigned yet, please attach a network device in the " "There is no device assigned yet, please attach a network device in the "
@ -3363,7 +3362,7 @@ msgid ""
"include during sysupgrade. Modified files in /etc/config/ and certain other " "include during sysupgrade. Modified files in /etc/config/ and certain other "
"configurations are automatically preserved." "configurations are automatically preserved."
msgstr "" msgstr ""
"系统升级时要保存的配置文件和目录的清单。目录 /etc/config/ 内改过的文件以及" "系统升级时要保存的配置文件和目录的清单。目录 /etc/config/ 内改过的文件以及"
"部分其他配置会被自动保存。" "部分其他配置会被自动保存。"
msgid "" msgid ""
@ -3497,25 +3496,25 @@ msgid "UUID"
msgstr "UUID" msgstr "UUID"
msgid "Unable to determine device name" msgid "Unable to determine device name"
msgstr "" msgstr "无法确认设备名称"
msgid "Unable to determine external IP address" msgid "Unable to determine external IP address"
msgstr "" msgstr "无法确认外部 IP 地址"
msgid "Unable to determine upstream interface" msgid "Unable to determine upstream interface"
msgstr "" msgstr "无法确认上游接口"
msgid "Unable to dispatch" msgid "Unable to dispatch"
msgstr "无法调度" msgstr "无法调度"
msgid "Unable to obtain client ID" msgid "Unable to obtain client ID"
msgstr "" msgstr "无法获取客户端 ID"
msgid "Unable to resolve AFTR host name" msgid "Unable to resolve AFTR host name"
msgstr "" msgstr "无法解析 AFTR 主机名"
msgid "Unable to resolve peer host name" msgid "Unable to resolve peer host name"
msgstr "" msgstr "无法解析 Pear 主机名"
msgid "Unavailable Seconds (UAS)" msgid "Unavailable Seconds (UAS)"
msgstr "不可用秒数UAS" msgstr "不可用秒数UAS"
@ -3527,7 +3526,7 @@ msgid "Unknown Error, password not changed!"
msgstr "未知错误,密码未更改!" msgstr "未知错误,密码未更改!"
msgid "Unknown error (%s)" msgid "Unknown error (%s)"
msgstr "" msgstr "未知错误(%s"
msgid "Unmanaged" msgid "Unmanaged"
msgstr "不配置协议" msgstr "不配置协议"
@ -3539,16 +3538,16 @@ msgid "Unsaved Changes"
msgstr "未保存的配置" msgstr "未保存的配置"
msgid "Unsupported MAP type" msgid "Unsupported MAP type"
msgstr "" msgstr "不支持的 MAP 类型"
msgid "Unsupported modem" msgid "Unsupported modem"
msgstr "" msgstr "不支持的调制解调器"
msgid "Unsupported protocol type." msgid "Unsupported protocol type."
msgstr "不支持的协议类型" msgstr "不支持的协议类型"
msgid "Up" msgid "Up"
msgstr "" msgstr "向上"
msgid "Update lists" msgid "Update lists"
msgstr "刷新列表" msgstr "刷新列表"
@ -3688,7 +3687,7 @@ msgid "Version"
msgstr "版本" msgstr "版本"
msgid "Virtual dynamic interface" msgid "Virtual dynamic interface"
msgstr "" msgstr "虚拟动态接口"
msgid "WDS" msgid "WDS"
msgstr "WDS" msgstr "WDS"
@ -3813,7 +3812,7 @@ msgid "bridged"
msgstr "桥接的" msgstr "桥接的"
msgid "create" msgid "create"
msgstr "" msgstr "创建"
msgid "create:" msgid "create:"
msgstr "创建:" msgstr "创建:"
@ -3880,7 +3879,7 @@ msgid "minutes"
msgstr "分钟" msgstr "分钟"
msgid "mixed WPA/WPA2" msgid "mixed WPA/WPA2"
msgstr "" msgstr "mixed WPA/WPA2"
msgid "no" msgid "no"
msgstr "否" msgstr "否"
@ -3904,7 +3903,7 @@ msgid "open"
msgstr "开放式" msgstr "开放式"
msgid "output" msgid "output"
msgstr "" msgstr "输出"
msgid "overlay" msgid "overlay"
msgstr "覆盖" msgstr "覆盖"

View file

@ -265,9 +265,6 @@ msgstr "警示"
msgid "Alias Interface" msgid "Alias Interface"
msgstr "" msgstr ""
msgid "Alias interface"
msgstr ""
msgid "Alias of \"%s\"" msgid "Alias of \"%s\""
msgstr "" msgstr ""

BIN
luci-base/src/po2lmo Executable file

Binary file not shown.

BIN
luci-base/src/po2lmo.o Normal file

Binary file not shown.

Binary file not shown.

View file

@ -9,7 +9,7 @@ function index()
or table.concat(luci.dispatcher.context.request, "/") or table.concat(luci.dispatcher.context.request, "/")
entry({"admin", "uci"}, nil, _("Configuration")) entry({"admin", "uci"}, nil, _("Configuration"))
entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir} entry({"admin", "uci", "changes"}, post_on({ trigger_apply = true }, "action_changes"), _("Changes"), 40).query = {redir=redir}
entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir} entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir}
local node local node
@ -25,9 +25,9 @@ function index()
node.cors = true node.cors = true
node.sysauth_authenticator = authen node.sysauth_authenticator = authen
node = entry({"admin", "uci", "confirm"}, post("action_confirm"), nil) node = entry({"admin", "uci", "confirm"}, call("action_confirm"), nil)
node.cors = true node.cors = true
node.sysauth_authenticator = authen node.sysauth = false
end end
@ -37,7 +37,8 @@ function action_changes()
luci.template.render("admin_uci/changes", { luci.template.render("admin_uci/changes", {
changes = next(changes) and changes, changes = next(changes) and changes,
timeout = timeout timeout = timeout,
trigger_apply = luci.http.formvalue("trigger_apply") and true or false
}) })
end end
@ -52,7 +53,8 @@ function action_revert()
end end
luci.template.render("admin_uci/revert", { luci.template.render("admin_uci/revert", {
changes = next(changes) and changes changes = next(changes) and changes,
trigger_revert = true
}) })
end end
@ -84,8 +86,13 @@ end
function action_apply_rollback() function action_apply_rollback()
local uci = require "luci.model.uci" local uci = require "luci.model.uci"
local _, errstr = uci:apply(true) local token, errstr = uci:apply(true)
if token then
luci.http.prepare_content("application/json")
luci.http.write_json({ token = token })
else
ubus_state_to_http(errstr) ubus_state_to_http(errstr)
end
end end
function action_apply_unchecked() function action_apply_unchecked()
@ -96,6 +103,7 @@ end
function action_confirm() function action_confirm()
local uci = require "luci.model.uci" local uci = require "luci.model.uci"
local _, errstr = uci:confirm() local token = luci.http.formvalue("token")
local _, errstr = uci:confirm(token)
ubus_state_to_http(errstr) ubus_state_to_http(errstr)
end end

View file

@ -70,7 +70,7 @@ local tpl_radio = tpl.Template(nil, [[
<!-- physical device --> <!-- physical device -->
<div class="tr cbi-rowstyle-2"> <div class="tr cbi-rowstyle-2">
<div class="td col-2 center middle"> <div class="td col-2 center middle">
<span class="ifacebadge"><img src="<%=resource%>/icons/wifi_toggled.png" id="<%=dev:name()%>-iw-upstate" /> <%=dev:name()%></span> <span class="ifacebadge"><img src="<%=resource%>/icons/wifi_disabled.png" id="<%=dev:name()%>-iw-upstate" /> <%=dev:name()%></span>
</div> </div>
<div class="td col-7 left middle"> <div class="td col-7 left middle">
<big><strong><%=hw%></strong></big><br /> <big><strong><%=hw%></strong></big><br />
@ -115,8 +115,8 @@ local tpl_radio = tpl.Template(nil, [[
</div> </div>
<% end %> <% end %>
<% else %> <% else %>
<div class="tr cbi-rowstyle-2"> <div class="tr placeholder">
<div class="td left"> <div class="td">
<em><%:No network configured on this device%></em> <em><%:No network configured on this device%></em>
</div> </div>
</div> </div>

View file

@ -94,7 +94,7 @@
if (ifc.is_dynamic) if (ifc.is_dynamic)
desc = '<%:Virtual dynamic interface%>'; desc = '<%:Virtual dynamic interface%>';
else if (ifc.is_alias) else if (ifc.is_alias)
desc = '<%:Alias interface%>'; desc = '<%:Alias Interface%>';
if (ifc.desc) if (ifc.desc)
desc = desc ? '%s (%s)'.format(desc, ifc.desc) : ifc.desc; desc = desc ? '%s (%s)'.format(desc, ifc.desc) : ifc.desc;
@ -110,7 +110,7 @@
if (!ifc.is_dynamic && !ifc.is_alias) if (!ifc.is_dynamic && !ifc.is_alias)
{ {
if (ifc.macaddr) if (ifc.macaddr)
html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); html += String.format('<strong><%:MAC%>:</strong> %s<br />', ifc.macaddr);
html += String.format( html += String.format(
'<strong><%:RX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />' + '<strong><%:RX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />' +

View file

@ -17,7 +17,7 @@
html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime);
if (ifc.macaddr) if (ifc.macaddr)
html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); html += String.format('<strong><%:MAC%>:</strong> %s<br />', ifc.macaddr);
html += String.format( html += String.format(
'<strong><%:RX%></strong>: %.2mB (%d <%:Pkts.%>)<br />' + '<strong><%:RX%></strong>: %.2mB (%d <%:Pkts.%>)<br />' +

View file

@ -224,63 +224,36 @@
<% end %> <% end %>
<% if has_dsl then %> <% if has_dsl then %>
var dsl_i = document.getElementById('dsl_i'); var ds = document.getElementById('dsl_status_table');
var dsl_s = document.getElementById('dsl_s');
var s = String.format( while (ds.lastElementChild)
'<strong><%:Status%>: </strong>%s<br />' + ds.removeChild(ds.lastElementChild);
'<strong><%:Line State%>: </strong>%s [0x%x]<br />' +
'<strong><%:Line Mode%>: </strong>%s<br />' +
'<strong><%:Annex%>: </strong>%s<br />' +
'<strong><%:Profile%>: </strong>%s<br />' +
'<strong><%:Data Rate%>: </strong>%s/s / %s/s<br />' +
'<strong><%:Max. Attainable Data Rate (ATTNDR)%>: </strong>%s/s / %s/s<br />' +
'<strong><%:Latency%>: </strong>%s / %s<br />' +
'<strong><%:Line Attenuation (LATN)%>: </strong>%s dB / %s dB<br />' +
'<strong><%:Signal Attenuation (SATN)%>: </strong>%s dB / %s dB<br />' +
'<strong><%:Noise Margin (SNR)%>: </strong>%s dB / %s dB<br />' +
'<strong><%:Aggregate Transmit Power(ACTATP)%>: </strong>%s dB / %s dB<br />' +
'<strong><%:Forward Error Correction Seconds (FECS)%>: </strong>%s / %s<br />' +
'<strong><%:Errored seconds (ES)%>: </strong>%s / %s<br />' +
'<strong><%:Severely Errored Seconds (SES)%>: </strong>%s / %s<br />' +
'<strong><%:Loss of Signal Seconds (LOSS)%>: </strong>%s / %s<br />' +
'<strong><%:Unavailable Seconds (UAS)%>: </strong>%s / %s<br />' +
'<strong><%:Header Error Code Errors (HEC)%>: </strong>%s / %s<br />' +
'<strong><%:Non Pre-emtive CRC errors (CRC_P)%>: </strong>%s / %s<br />' +
'<strong><%:Pre-emtive CRC errors (CRCP_P)%>: </strong>%s / %s<br />' +
'<strong><%:Line Uptime%>: </strong>%s<br />' +
'<strong><%:ATU-C System Vendor ID%>: </strong>%s<br />' +
'<strong><%:Power Management Mode%>: </strong>%s<br />',
info.dsl.line_state, info.dsl.line_state_detail,
info.dsl.line_state_num,
info.dsl.line_mode_s,
info.dsl.annex_s,
info.dsl.profile_s,
info.dsl.data_rate_down_s, info.dsl.data_rate_up_s,
info.dsl.max_data_rate_down_s, info.dsl.max_data_rate_up_s,
info.dsl.latency_num_down, info.dsl.latency_num_up,
info.dsl.line_attenuation_down, info.dsl.line_attenuation_up,
info.dsl.signal_attenuation_down, info.dsl.signal_attenuation_up,
info.dsl.noise_margin_down, info.dsl.noise_margin_up,
info.dsl.actatp_down, info.dsl.actatp_up,
info.dsl.errors_fec_near, info.dsl.errors_fec_far,
info.dsl.errors_es_near, info.dsl.errors_es_far,
info.dsl.errors_ses_near, info.dsl.errors_ses_far,
info.dsl.errors_loss_near, info.dsl.errors_loss_far,
info.dsl.errors_uas_near, info.dsl.errors_uas_far,
info.dsl.errors_hec_near, info.dsl.errors_hec_far,
info.dsl.errors_crc_p_near, info.dsl.errors_crc_p_far,
info.dsl.errors_crcp_p_near, info.dsl.errors_crcp_p_far,
info.dsl.line_uptime_s,
info.dsl.atuc_vendor_id,
info.dsl.power_mode_s
);
dsl_s.innerHTML = String.format('<small>%s</small>', s); ds.appendChild(renderBox(
dsl_i.innerHTML = String.format( '<%:DSL Status%>',
'<img src="<%=resource%>/icons/ethernet.png" />' + (info.dsl.line_state === 'UP'), [ ],
'<br /><small>DSL</small>' '<%:Line State%>', '%s [0x%x]'.format(info.dsl.line_state, info.dsl.line_state_detail),
); '<%:Line Mode%>', info.dsl.line_mode_s || '-',
'<%:Line Uptime%>', info.dsl.line_uptime_s || '-',
'<%:Annex%>', info.dsl.annex_s || '-',
'<%:Profile%>', info.dsl.profile_s || '-',
'<%:Data Rate%>', '%s/s / %s/s'.format(info.dsl.data_rate_down_s, info.dsl.data_rate_up_s),
'<%:Max. Attainable Data Rate (ATTNDR)%>', '%s/s / %s/s'.format(info.dsl.max_data_rate_down_s, info.dsl.max_data_rate_up_s),
'<%:Latency%>', '%s / %s'.format(info.dsl.latency_num_down, info.dsl.latency_num_up),
'<%:Line Attenuation (LATN)%>', '%d dB / %d dB'.format(info.dsl.line_attenuation_down, info.dsl.line_attenuation_up),
'<%:Signal Attenuation (SATN)%>', '%d dB / %d dB'.format(info.dsl.signal_attenuation_down, info.dsl.signal_attenuation_up),
'<%:Noise Margin (SNR)%>', '%d dB / %d dB'.format(info.dsl.noise_margin_down, info.dsl.noise_margin_up),
'<%:Aggregate Transmit Power(ACTATP)%>', '%d dB / %d dB'.format(info.dsl.actatp_down, info.dsl.actatp_up),
'<%:Forward Error Correction Seconds (FECS)%>', '%d / %d'.format(info.dsl.errors_fec_near, info.dsl.errors_fec_far),
'<%:Errored seconds (ES)%>', '%d / %d'.format(info.dsl.errors_es_near, info.dsl.errors_es_far),
'<%:Severely Errored Seconds (SES)%>', '%d / %d'.format(info.dsl.errors_ses_near, info.dsl.errors_ses_far),
'<%:Loss of Signal Seconds (LOSS)%>', '%d / %d'.format(info.dsl.errors_loss_near, info.dsl.errors_loss_far),
'<%:Unavailable Seconds (UAS)%>', '%d / %d'.format(info.dsl.errors_uas_near, info.dsl.errors_uas_far),
'<%:Header Error Code Errors (HEC)%>', '%d / %d'.format(info.dsl.errors_hec_near, info.dsl.errors_hec_far),
'<%:Non Pre-emtive CRC errors (CRC_P)%>', '%d / %d'.format(info.dsl.errors_crc_p_near, info.dsl.errors_crc_p_far),
'<%:Pre-emtive CRC errors (CRCP_P)%>', '%d / %d'.format(info.dsl.errors_crcp_p_near, info.dsl.errors_crcp_p_far),
'<%:ATU-C System Vendor ID%>', info.dsl.atuc_vendor_id,
'<%:Power Management Mode%>', info.dsl.power_mode_s));
<% end %> <% end %>
<% if has_wifi then %> <% if has_wifi then %>
@ -457,18 +430,8 @@
<div class="cbi-section"> <div class="cbi-section">
<h3><%:DSL%></h3> <h3><%:DSL%></h3>
<div class="table" width="100%"> <div id="dsl_status_table" class="network-status-table">
<div class="tr"> <p><em><%:Collecting data...%></em></p>
<div class="td left" width="33%" style="vertical-align:top"><%:DSL Status%></div>
<div class="td">
<div class="table">
<div class="tr">
<div class="td" id="dsl_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></div>
<div class="td left" id="dsl_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></div>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
<% end %> <% end %>

View file

@ -102,7 +102,7 @@ end
<div class="cbi-value"> <div class="cbi-value">
<label class="cbi-value-title"><%:Download and install package%>:</label> <label class="cbi-value-title"><%:Download and install package%>:</label>
<div class="cbi-value-field"> <div class="cbi-value-field">
<input type="text" name="url" size="30" value="" /> <span><input type="text" name="url" size="30" value="" /></span>
<input class="cbi-button cbi-button-save" type="submit" name="go" value="<%:OK%>" /> <input class="cbi-button cbi-button-save" type="submit" name="go" value="<%:OK%>" />
</div> </div>
</div> </div>
@ -110,7 +110,7 @@ end
<div class="cbi-value cbi-value-last"> <div class="cbi-value cbi-value-last">
<label class="cbi-value-title"><%:Filter%>:</label> <label class="cbi-value-title"><%:Filter%>:</label>
<div class="cbi-value-field"> <div class="cbi-value-field">
<input type="text" name="query" size="20" value="<%=pcdata(query)%>" /> <span><input type="text" name="query" size="20" value="<%=pcdata(query)%>" /></span>
<input type="submit" class="cbi-button cbi-button-action" name="search" value="<%:Find package%>" /> <input type="submit" class="cbi-button cbi-button-action" name="search" value="<%:Find package%>" />
</div> </div>
</div> </div>

View file

@ -8,11 +8,9 @@
<%- <%-
local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir")) local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
export("redirect", redir_url or url("admin/uci/changes"))
include("cbi/apply_widget")
include("admin_uci/changelog") include("admin_uci/changelog")
cbi_apply_widget(redir_url or url("admin/uci/changes"))
-%> -%>
<h2 name="content"><%:Configuration%> / <%:Changes%></h2> <h2 name="content"><%:Configuration%> / <%:Changes%></h2>
@ -32,7 +30,11 @@
</form> </form>
<% end %> <% end %>
<input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" /> <form method="post" action="<%=url("admin/uci/changes")%>">
<input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />
<input class="cbi-button cbi-button-save" type="submit" name="trigger_apply" value="<%:Save & Apply%>" />
</form>
<form method="post" action="<%=url("admin/uci/revert")%>"> <form method="post" action="<%=url("admin/uci/revert")%>">
<input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="token" value="<%=token%>" />
<input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" />

View file

@ -8,11 +8,9 @@
<%- <%-
local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir")) local node, redir_url = luci.dispatcher.lookup(luci.http.formvalue("redir"))
export("redirect", redir_url or url("admin/uci/changes"))
include("cbi/apply_widget")
include("admin_uci/changelog") include("admin_uci/changelog")
cbi_apply_widget(redir_url or url("admin/uci/revert"))
-%> -%>
<h2 name="content"><%:Configuration%> / <%:Revert%></h2> <h2 name="content"><%:Configuration%> / <%:Revert%></h2>
@ -24,13 +22,6 @@
<p><strong><%:There are no pending changes to revert!%></strong></p> <p><strong><%:There are no pending changes to revert!%></strong></p>
<% end %> <% end %>
<div class="alert-message" id="cbi_apply_status" style="display:none"></div>
<script type="text/javascript">
document.addEventListener("DOMContentLoaded", function() {
uci_revert();
});
</script>
<% if redir_url then %> <% if redir_url then %>
<div class="cbi-page-actions"> <div class="cbi-page-actions">
<form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>"> <form class="inline" method="get" action="<%=luci.util.pcdata(redir_url)%>">