diff options
416 files changed, 13559 insertions, 4089 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c4291318..e4edf0c15 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,16 +1,16 @@ # Contributing Guidelines -Patches and pull-requests: +## Patches and Pull requests: If you want to contribute a change to LuCI, please either send a patch using git send-email -or open a pull request against the openwrt/luci repository. +or open a "pull request" against the openwrt/luci repository. Regardless of whether you send a patch or open a pull request, please try to follow these rules: -* Have a useful subject prefixed with the component name - (E.g.: "modules/admin-full: fix wifi channel selection on multiple STA networks") +* Have a useful subject prefixed with the component name + (E.g.: "luci-mod-admin-full: fix wifi channel selection on multiple STA networks") * Shortly explain the changes made and - if applicable - the reasoning behind them -* Include Signed-off-by in the comment +* Commit message of each commit should include a Signed-off-by line (See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>) In case you like to send patches by mail, please use the [LuCI mailinglist](https://lists.subsignal.org/mailman/listinfo/luci) @@ -19,22 +19,41 @@ or the [OpenWrt Development List](https://lists.openwrt.org/cgi-bin/mailman/list If you send via the OpenWrt list, include a "[luci]" tag in your subject line. For general information on patch submission, follow the [OpenWrt patch submission guideline](https://dev.openwrt.org/wiki/SubmittingPatches). +## Advice on pull requests: -If you have commit access: +Pull requests are the easiest way to contribute changes to git repos at Github. They are the preferred contribution method, as they offer a nice way for commenting and amending the proposed changes. + +* You need a local "fork" of the Github repo. +* Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request. Workflow using "feature_x" as the example: + - Update your local git fork to the tip (of the master, usually) + - Create the feature branch with `git checkout -b feature_x` + - Edit changes and commit them locally + - Push them to your Github fork by `git push -u origin feature_x`. That creates the "feature_x" branch at your Github fork and sets it as the remote of this branch + - When you now visit Github, you should see a proposal to create a pull request + +* If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then use `git push` to automatically update the pull request. + +* If you need to change something in the existing pull request (e.g. to add a missing signed-off-by line to the commit message), you can use `git push -f` to overwrite the original commits. That is easy and safe when using a feature branch. Example workflow: + - Checkout the feature branch by `git checkout feature_x` + - Edit changes and commit them locally. If you are just updating the commit message in the last commit, you can use `git commit --amend` to do that + - If you added several new commits or made other changes that require cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to edit) to possibly squash some commits + - Push the changed commits to Github with `git push -f` to overwrite the original commits in the "feature_x" branch with the new ones. The pull request gets automatically updated + +## If you have commit access: * Do NOT use git push --force. * Use Pull Requests if you are unsure and to suggest changes to other developers. -Gaining commit access: +## Gaining commit access: * Commit access will be granted to responsible contributors who have made useful pull requests and / or feedback or patches to this repository or OpenWrt in general. Please include your request for commit access in your next pull request or ticket. -Release Branches: +## Release Branches: -* Branches named "luci-X.Y" (e.g. luci-0.12) are release branches. +* Branches named "for-XX.YY" or "luci-X.Y" (e.g. "for-15.05") are release branches. * These branches are built with the respective OpenWrt release and are created during the release stabilisation phase. * Please ONLY cherry-pick or commit security and bug-fixes to these branches. @@ -17,6 +17,10 @@ To install all its package definitions, run: ./scripts/feeds install -a -p luci ``` +## API Reference + +You can browse the generated API documentation [directly on Github](http://htmlpreview.github.io/?http://raw.githubusercontent.com/openwrt/luci/master/documentation/api/index.html). + ## License See [LICENSE](LICENSE) file. diff --git a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm index 88796cb1c..946828953 100644 --- a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm +++ b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "ahcpd", "status")%>', null, + XHR.poll(5, '<%=url('admin/network/ahcpd/status')%>', null, function(x, st) { var tb = document.getElementById('ahcpd_status_table'); diff --git a/applications/luci-app-ahcp/po/sv/ahcp.po b/applications/luci-app-ahcp/po/sv/ahcp.po index b5f0b7d6d..a7c7a38f7 100644 --- a/applications/luci-app-ahcp/po/sv/ahcp.po +++ b/applications/luci-app-ahcp/po/sv/ahcp.po @@ -22,7 +22,7 @@ msgid "" msgstr "" msgid "Active AHCP Leases" -msgstr "" +msgstr "Aktiva AHCP-hyror" msgid "Address" msgstr "Adress" @@ -40,13 +40,13 @@ msgid "Announced NTP servers" msgstr "Aviserade NTP-servrar" msgid "Announced prefixes" -msgstr "" +msgstr "Aviserade prefix" msgid "Collecting data..." msgstr "Samlar in data..." msgid "Forwarder" -msgstr "" +msgstr "Vidarebefordrare" msgid "General Setup" msgstr "Allmän inställning" @@ -61,16 +61,16 @@ msgid "IPv6 only" msgstr "Endast IPv6" msgid "Lease directory" -msgstr "" +msgstr "Hyr mappen" msgid "Lease validity time" -msgstr "" +msgstr "Giltighetstid för hyran" msgid "Log file" msgstr "Logg-fil" msgid "Multicast address" -msgstr "" +msgstr "Multicast-adress" msgid "Operation mode" msgstr "Driftsläge" @@ -82,7 +82,7 @@ msgid "Protocol family" msgstr "Protokoll-familj" msgid "Served interfaces" -msgstr "" +msgstr "Betjänade gränssnitt" msgid "Server" msgstr "Server" @@ -94,16 +94,16 @@ 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 "" +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." msgid "The AHCP Service is running with ID %s." -msgstr "" +msgstr "AHCP-tjänsten körs med ID %s." msgid "There are no active leases." -msgstr "" +msgstr "Det finns inga aktiva hyror." msgid "Unique ID file" msgstr "Unik ID-fil" diff --git a/applications/luci-app-asterisk/Makefile b/applications/luci-app-asterisk/Makefile index f2f3cd1e7..3434e167f 100644 --- a/applications/luci-app-asterisk/Makefile +++ b/applications/luci-app-asterisk/Makefile @@ -7,7 +7,6 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Support for Asterisk -LUCI_DEPENDS:=+ahcpd include ../../luci.mk diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm index 70f986c5b..9f644ba07 100644 --- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm @@ -56,7 +56,7 @@ %> -<form method="post" action="<%=luci.dispatcher.build_url("admin", "asterisk", "dialplans")%>" enctype="multipart/form-data"> +<form method="post" action="<%=url('admin/asterisk/dialplans')%>" enctype="multipart/form-data"> <div> <script type="text/javascript" src="/luci-static/resources/cbi.js"></script> <input type="hidden" name="cbi.submit" value="1" /> @@ -64,13 +64,13 @@ </div> <div class="cbi-map" id="cbi-asterisk"> - <h2><a id="content" name="content">Outgoing Call Routing</a></h2> + <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="<%=luci.dispatcher.build_url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> | - <a href="<%=luci.dispatcher.build_url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> | - <a href="<%=luci.dispatcher.build_url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a> + <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"> @@ -85,7 +85,7 @@ <big>Dialplan <em><%=plan.name%></em></big> </th> <td> - <a href="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans')%>?delplan=<%=plan.name%>"> + <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> </td> @@ -109,10 +109,10 @@ </p> </td> <td style="width:5%" class="cbi-value-field"> - <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans/out', zone.name)%>"> + <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="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>"> + <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> </td> @@ -134,10 +134,10 @@ </p> </td> <td style="width:5%" class="cbi-value-field"> - <a href="<%=luci.dispatcher.build_url('admin/asterisk/voicemail/mailboxes')%>"> + <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="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>"> + <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> </td> @@ -157,10 +157,10 @@ </p> </td> <td style="width:5%" class="cbi-value-field"> - <a href="<%=luci.dispatcher.build_url('admin/asterisk/meetme/rooms')%>"> + <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="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>"> + <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> </td> diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm index ac527918b..ffdbbcf35 100644 --- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm @@ -47,7 +47,7 @@ %> -<form method="post" action="<%=luci.dispatcher.build_url("admin", "asterisk", "dialplans", "zones")%>" enctype="multipart/form-data"> +<form method="post" action="<%=url('admin/asterisk/dialplans/zones')%>" enctype="multipart/form-data"> <div> <script type="text/javascript" src="/luci-static/resources/cbi.js"></script> <input type="hidden" name="cbi.submit" value="1" /> @@ -55,9 +55,9 @@ </div> <div class="cbi-map" id="cbi-asterisk"> - <h2><a id="content" name="content">Dial Zone Management</a></h2> + <h2 name="content">Dial Zone Management</h2> <div class="cbi-map-descr"> - <a href="<%=luci.dispatcher.build_url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br /> + <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. @@ -109,10 +109,10 @@ <%=rule.description or rule.name%> </td> <td style="text-align:left" class="cbi-value-field"> - <a href="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans', 'out', rule.name)%>"> + <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="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans', 'zones')%>?delzone=<%=rule.name%>"> + <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> </td> diff --git a/applications/luci-app-commands/luasrc/view/commands.htm b/applications/luci-app-commands/luasrc/view/commands.htm index 72f1e1dab..73b9e6a2c 100644 --- a/applications/luci-app-commands/luasrc/view/commands.htm +++ b/applications/luci-app-commands/luasrc/view/commands.htm @@ -58,7 +58,7 @@ legend.parentNode.style.display = 'block'; legend.style.display = 'inline'; - stxhr.get('<%=luci.dispatcher.build_url("admin", "system", "commands", "run")%>/' + id + (args ? '/' + args : ''), null, + stxhr.get('<%=url('admin/system/commands/run')%>/' + id + (args ? '/' + args : ''), null, function(x, st) { if (st) @@ -93,7 +93,7 @@ if (field) args = encodeURIComponent(field.value); - location.href = '<%=luci.dispatcher.build_url("admin", "system", "commands", "download")%>/' + id + (args ? '/' + args : ''); + location.href = '<%=url('admin/system/commands/download')%>/' + id + (args ? '/' + args : ''); } function command_link(id) @@ -135,7 +135,7 @@ <form method="get" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Custom Commands%></a></h2> + <h2 name="content"><%:Custom Commands%></h2> <fieldset class="cbi-section"> <% local _, command; for _, command in ipairs(commands) do %> diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua index 946dfefbc..29598ea8a 100644 --- a/applications/luci-app-ddns/luasrc/controller/ddns.lua +++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -10,39 +10,107 @@ local NX = require "nixio" local NXFS = require "nixio.fs" local DISP = require "luci.dispatcher" local HTTP = require "luci.http" -local UCI = require "luci.model.uci" +local I18N = require "luci.i18n" -- not globally avalible here +local IPKG = require "luci.model.ipkg" local SYS = require "luci.sys" -local DDNS = require "luci.tools.ddns" -- ddns multiused functions +local UCI = require "luci.model.uci" local UTIL = require "luci.util" +local DDNS = require "luci.tools.ddns" -- ddns multiused functions -DDNS_MIN = "2.4.2-1" -- minimum version of service required +local srv_name = "ddns-scripts" +local srv_ver_min = "2.5.0" -- minimum version of service required +local srv_ver_cmd = [[/usr/lib/ddns/dynamic_dns_updater.sh --version | awk {'print $2'}]] +local app_name = "luci-app-ddns" +local app_title = "Dynamic DNS" +local app_version = "2.3.0-1" function index() local nxfs = require "nixio.fs" -- global definitions not available local sys = require "luci.sys" -- in function index() local ddns = require "luci.tools.ddns" -- ddns multiused functions - local verinst = ddns.ipkg_ver_installed("ddns-scripts") - local verok = ddns.ipkg_ver_compare(verinst, ">=", "2.0.0-0") - -- do NOT start it not ddns-scripts version 2.x - if not verok then - return - end + local muci = require "luci.model.uci" + -- no config create an empty one if not nxfs.access("/etc/config/ddns") then nxfs.writefile("/etc/config/ddns", "") end + -- preset new option "lookup_host" if not already defined + local uci = muci.cursor() + local commit = false + uci:foreach("ddns", "service", function (s) + if not s["lookup_host"] and s["domain"] then + uci:set("ddns", s[".name"], "lookup_host", s["domain"]) + commit = true + end + end) + if commit then uci:commit("ddns") end + uci:unload("ddns") + entry( {"admin", "services", "ddns"}, cbi("ddns/overview"), _("Dynamic DNS"), 59) entry( {"admin", "services", "ddns", "detail"}, cbi("ddns/detail"), nil ).leaf = true entry( {"admin", "services", "ddns", "hints"}, cbi("ddns/hints", {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true entry( {"admin", "services", "ddns", "global"}, cbi("ddns/global"), nil ).leaf = true entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true - entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true + entry( {"admin", "services", "ddns", "startstop"}, post("startstop") ).leaf = true entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true end --- function to read all sections status and return data array +-- Application specific information functions +function app_description() + return I18N.translate("Dynamic DNS allows that your router can be reached with " .. + "a fixed hostname while having a dynamically changing IP address.") + .. [[<br />]] + .. I18N.translate("OpenWrt Wiki") .. ": " + .. [[<a href="http://wiki.openwrt.org/doc/howto/ddns.client" target="_blank">]] + .. I18N.translate("DDNS Client Documentation") .. [[</a>]] + .. " --- " + .. [[<a href="http://wiki.openwrt.org/doc/uci/ddns" target="_blank">]] + .. I18N.translate("DDNS Client Configuration") .. [[</a>]] +end +function app_title_back() + return [[<a href="]] + .. DISP.build_url("admin", "services", "ddns") + .. [[">]] + .. I18N.translate(app_title) + .. [[</a>]] +end + +-- Standardized application/service functions +function app_title_main() + return [[<a href="javascript:alert(']] + .. I18N.translate("Version Information") + .. [[\n\n]] .. app_name + .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] .. app_version + .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("required") .. [[:]] + .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] + .. srv_ver_min .. [[ ]] .. I18N.translate("or higher") + .. [[\n\n]] .. srv_name .. [[ ]] .. I18N.translate("installed") .. [[:]] + .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] + .. (service_version() or I18N.translate("NOT installed")) + .. [[\n\n]] + .. [[')">]] + .. I18N.translate(app_title) + .. [[</a>]] +end +function service_version() + local ver = nil + IPKG.list_installed(srv_name, function(n, ver, d) + -- nothing to do + end + ) + if not ver then + ver = UTIL.exec(srv_ver_cmd) + if #ver == 0 then ver = nil end + end + return ver +end +function service_ok() + return IPKG.compare_versions((service_version() or "0"), ">=", srv_ver_min) +end + +-- internal function to read all sections status and return data array local function _get_status() local uci = UCI.cursor() local service = SYS.init.enabled("ddns") and 1 or 0 @@ -118,12 +186,12 @@ local function _get_status() end -- try to get registered IP - local domain = s["domain"] or "_nodomain_" + local lookup_host = s["lookup_host"] or "_nolookup_" local dnsserver = s["dns_server"] or "" local force_ipversion = tonumber(s["force_ipversion"] or 0) local force_dnstcp = tonumber(s["force_dnstcp"] or 0) local command = [[/usr/lib/ddns/dynamic_dns_lucihelper.sh]] - command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 .. + command = command .. [[ get_registered_ip ]] .. lookup_host .. [[ ]] .. use_ipv6 .. [[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver local reg_ip = SYS.exec(command) if reg_ip == "" then @@ -135,7 +203,7 @@ local function _get_status() section = section, enabled = enabled, iface = iface, - domain = domain, + lookup = lookup_host, reg_ip = reg_ip, pid = pid, datelast = datelast, @@ -235,3 +303,4 @@ function status() HTTP.prepare_content("application/json") HTTP.write_json(data) end + diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua index 27f9a9f26..88429fd12 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua @@ -8,13 +8,15 @@ local NX = require "nixio" local NXFS = require "nixio.fs" local SYS = require "luci.sys" local UTIL = require "luci.util" +local HTTP = require "luci.http" local DISP = require "luci.dispatcher" local WADM = require "luci.tools.webadmin" local DTYP = require "luci.cbi.datatypes" +local CTRL = require "luci.controller.ddns" -- this application's controller local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- takeover arguments -- ####################################################### -local section = arg[1] +local section = arg[1] -- check supported options -- ################################################## -- saved to local vars here because doing multiple os calls slow down the system @@ -31,15 +33,15 @@ local bold_on = "<strong>" local bold_off = "</strong>" -- error text constants -- ##################################################### -err_ipv6_plain = translate("IPv6 not supported") .. " - " .. +local err_ipv6_plain = translate("IPv6 not supported") .. " - " .. translate("please select 'IPv4' address version") -err_ipv6_basic = bold_on .. +local err_ipv6_basic = bold_on .. font_red .. translate("IPv6 not supported") .. font_off .. "<br />" .. translate("please select 'IPv4' address version") .. bold_off -err_ipv6_other = bold_on .. +local err_ipv6_other = bold_on .. font_red .. translate("IPv6 not supported") .. font_off .. @@ -52,16 +54,46 @@ err_ipv6_other = bold_on .. [[</a>]] .. bold_off -function err_tab_basic(self) +local function err_tab_basic(self) return translate("Basic Settings") .. " - " .. self.title .. ": " end -function err_tab_adv(self) +local function err_tab_adv(self) return translate("Advanced Settings") .. " - " .. self.title .. ": " end -function err_tab_timer(self) +local function err_tab_timer(self) return translate("Timer Settings") .. " - " .. self.title .. ": " end +-- read services/services_ipv6 files -- ######################################## +local services4 = { } -- IPv4 -- +local fd4 = io.open("/usr/lib/ddns/services", "r") +if fd4 then + local ln, s, t + repeat + ln = fd4:read("*l") + s = ln and ln:match('^%s*".*') -- only handle lines beginning with " + s = s and s:gsub('"','') -- remove " + t = s and UTIL.split(s,"(%s+)",nil,true) -- split on whitespaces + if t then services4[t[1]]=t[2] end + until not ln + fd4:close() +end + +local services6 = { } -- IPv6 -- +local fd6 = io.open("/usr/lib/ddns/services_ipv6", "r") +if fd6 then + local ln, s, t + repeat + ln = fd6:read("*l") + s = ln and ln:match('^%s*".*') -- only handle lines beginning with " + s = s and s:gsub('"','') -- remove " + t = s and UTIL.split(s,"(%s+)",nil,true) -- split on whitespaces + if t then services6[t[1]]=t[2] end + until not ln + fd6:close() +end + +-- multi-used functions -- #################################################### -- function to verify settings around ip_source -- will use dynamic_dns_lucihelper to check if -- local IP can be read @@ -105,18 +137,94 @@ local function _verify_ip_source() end end --- cbi-map definition -- ####################################################### -m = Map("ddns") +-- function to check if option is used inside url or script +-- return -1 on error, 0 NOT required, 1 required +local function _option_used(option, urlscript) + local surl -- search string for url + local ssh -- search string for script + local required -- option used inside url or script --- first need to close <a> from cbi map template our <a> closed by template -m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] .. - translate("Dynamic DNS") + if option == "domain" then surl, ssh = '%[DOMAIN%]', '%$domain' + elseif option == "username" then surl, ssh = '%[USERNAME%]', '%$username' + elseif option == "password" then surl, ssh = '%[PASSWORD%]', '%$password' + elseif option == "param_enc" then surl, ssh = '%[PARAMENC%]', '%$param_enc' + elseif option == "param_opt" then surl, ssh = '%[PARAMOPT%]', '%$param_opt' + else + error("undefined option") + return -1 -- return on error + end -m.description = translate("Dynamic DNS allows that your router can be reached with " .. - "a fixed hostname while having a dynamically changing " .. - "IP address.") + local required = false + -- handle url + if urlscript:find('http') then + required = ( urlscript:find(surl) ) + -- handle script + else + if not urlscript:find("/") then + -- might be inside ddns-scripts directory + urlscript = "/usr/lib/ddns/" .. urlscript + end + -- problem with script exit here + if not NXFS.access(urlscript) then return -1 end + + local f = io.input(urlscript) + -- still problem with script exit here + if not f then return -1 end + for l in f:lines() do + repeat + if l:find('^#') then break end -- continue on comment lines + required = ( l:find(surl) or l:find(ssh) ) + until true + if required then break end + end + f:close() + end + return (required and 1 or 0) +end -m.redirect = DISP.build_url("admin", "services", "ddns") +-- function to verify if option is valid +local function _option_validate(self, value) + -- section is globally defined here be calling agrument (see above) + local fusev6 = usev6:formvalue(section) + local fsvc4 = svc4:formvalue(section) + local fsvc6 = svc6:formvalue(section) + local urlsh, used + + -- IP-Version dependent custom service selected + if (fusev6 == "0" and fsvc4 == "-") or + (fusev6 == "1" and fsvc6 == "-") then + -- read custom url + urlsh = uurl:formvalue(section) + -- no url then read custom script + if not urlsh or (#urlsh == 0) then + urlsh = ush:formvalue(section) + end + -- IPv4 read from services4 table + elseif (fusev6 == "0") then + urlsh = services4[fsvc4] + -- IPv6 read from services6 table + else + urlsh = services6[fsvc6] + end + -- problem with url or script exit here + -- error handled somewhere else + if not urlsh or (#urlsh == 0) then return "" end + + used = _option_used(self.option, urlsh) + -- on error or not used return empty sting + if used < 1 then return "" end + -- needed but no data then return error + if not value or (#value == 0) then + return nil, err_tab_basic(self) .. translate("missing / required") + end + return value +end + +-- cbi-map definition -- ####################################################### +local m = Map("ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") m.on_after_commit = function(self) if self.changed then -- changes ? @@ -127,19 +235,42 @@ m.on_after_commit = function(self) end end +-- provider switch was requested, save and reload page +if m:formvalue("cbid.ddns.%s._switch" % section) then -- section == arg[1] + local fsvc + local fusev6 = m:formvalue("cbid.ddns.%s.use_ipv6" % section) + if fusev6 == "1" then + fsvc = m:formvalue("cbid.ddns.%s.ipv6_service_name" % section) + else + fsvc = m:formvalue("cbid.ddns.%s.ipv4_service_name" % section) + end + + if fusev6 ~= (m:get(section, "use_ipv6") or "0") then -- IPv6 was changed + m:set(section, "use_ipv6", fusev6) -- save it + end + + if fsvc ~= "-" then -- NOT "custom" + m:set(section, "service_name", fsvc) -- save it + else -- else + m:del(section, "service_name") -- delete it + end + m.uci:save(m.config) + + -- reload page + HTTP.redirect( DISP.build_url("admin", "services", "ddns", "detail", section) ) + return +end + -- read application settings -- ################################################ -- date format; if not set use ISO format -date_format = m.uci:get(m.config, "global", "date_format") or "%F %R" +local date_format = m.uci:get(m.config, "global", "date_format") or "%F %R" -- log directory -log_dir = m.uci:get(m.config, "global", "log_dir") or "/var/log/ddns" +local log_dir = m.uci:get(m.config, "global", "log_dir") or "/var/log/ddns" -- cbi-section definition -- ################################################### -ns = m:section( NamedSection, section, "service", +local ns = m:section( NamedSection, section, "service", translate("Details for") .. ([[: <strong>%s</strong>]] % section), - translate("Configure here the details for selected Dynamic DNS service.") - .. [[<br /><a href="http://wiki.openwrt.org/doc/uci/ddns#version_1x" target="_blank">]] - .. translate("For detailed information about parameter settings look here.") - .. [[</a>]] ) + translate("Configure here the details for selected Dynamic DNS service.") ) ns.instance = section -- arg [1] ns:tab("basic", translate("Basic Settings"), nil ) ns:tab("advanced", translate("Advanced Settings"), nil ) @@ -147,17 +278,33 @@ ns:tab("timer", translate("Timer Settings"), nil ) ns:tab("logview", translate("Log File Viewer"), nil ) -- TAB: Basic ##################################################################################### --- enabled -- ################################################################# +-- enabled -- ################################################################# en = ns:taboption("basic", Flag, "enabled", translate("Enabled"), translate("If this service section is disabled it could not be started." .. "<br />" .. "Neither from LuCI interface nor from console") ) en.orientation = "horizontal" -function en.parse(self, section) - DDNS.flag_parse(self, section) + +-- IPv4/IPv6 - lookup_host -- ################################################# +luh = ns:taboption("basic", Value, "lookup_host", + translate("Lookup Hostname"), + translate("Hostname/FQDN to validate, if IP update happen or necessary") ) +luh.rmempty = false +luh.placeholder = "myhost.example.com" +function luh.validate(self, value) + if not value + or not (#value > 0) + or not DTYP.hostname(value) then + return nil, err_tab_basic(self) .. translate("invalid FQDN / required - Sample") .. ": 'myhost.example.com'" + else + return UTIL.trim(value) + end +end +function luh.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end --- use_ipv6 (NEW) -- ########################################################## +-- use_ipv6 -- ################################################################ usev6 = ns:taboption("basic", ListValue, "use_ipv6", translate("IP address version"), translate("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider") ) @@ -180,36 +327,15 @@ function usev6.validate(self, value) end return nil, err_tab_basic(self) .. err_ipv6_plain end -function usev6.write(self, section, value) - if value == "0" then -- force rmempty - return self.map:del(section, self.option) - else - return self.map:set(section, self.option, value) - end +function usev6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end --- IPv4 - service_name -- ###################################################### +-- IPv4 - service_name -- ##################################################### svc4 = ns:taboption("basic", ListValue, "ipv4_service_name", translate("DDNS Service provider") .. " [IPv4]" ) svc4.default = "-" svc4:depends("use_ipv6", "0") -- only show on IPv4 - -local services4 = { } -local fd4 = io.open("/usr/lib/ddns/services", "r") - -if fd4 then - local ln - repeat - ln = fd4:read("*l") - local s = ln and ln:match('^%s*"([^"]+)"') - if s then services4[#services4+1] = s end - until not ln - fd4:close() -end - -for _, v in UTIL.vspairs(services4) do svc4:value(v) end -svc4:value("-", translate("-- custom --") ) - function svc4.cfgvalue(self, section) local v = DDNS.read_value(self, section, "service_name") if not v or #v == 0 then @@ -230,14 +356,18 @@ function svc4.write(self, section, value) self.map:del(section, self.option) -- to be shure if value ~= "-" then -- and write "service_name self.map:del(section, "update_url") -- delete update_url + self.map:del(section, "update_script") -- delete update_script return self.map:set(section, "service_name", value) else return self.map:del(section, "service_name") end end end +function svc4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv6 - service_name -- ###################################################### +-- IPv6 - service_name -- ##################################################### svc6 = ns:taboption("basic", ListValue, "ipv6_service_name", translate("DDNS Service provider") .. " [IPv6]" ) svc6.default = "-" @@ -245,23 +375,6 @@ svc6:depends("use_ipv6", "1") -- only show on IPv6 if not has_ipv6 then svc6.description = err_ipv6_basic end - -local services6 = { } -local fd6 = io.open("/usr/lib/ddns/services_ipv6", "r") - -if fd6 then - local ln - repeat - ln = fd6:read("*l") - local s = ln and ln:match('^%s*"([^"]+)"') - if s then services6[#services6+1] = s end - until not ln - fd6:close() -end - -for _, v in UTIL.vspairs(services6) do svc6:value(v) end -svc6:value("-", translate("-- custom --") ) - function svc6.cfgvalue(self, section) local v = DDNS.read_value(self, section, "service_name") if not v or #v == 0 then @@ -283,33 +396,42 @@ function svc6.write(self, section, value) self.map:del(section, self.option) -- delete "ipv6_service_name" helper if value ~= "-" then -- and write "service_name self.map:del(section, "update_url") -- delete update_url + self.map:del(section, "update_script") -- delete update_script return self.map:set(section, "service_name", value) else return self.map:del(section, "service_name") end end end +function svc6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - change Provider -- ############################################# +svs = ns:taboption("basic", Button, "_switch") +svs.title = translate("Really change DDNS provider?") +svs.inputtitle = translate("Change provider") +svs.inputstyle = "apply" --- IPv4/IPv6 - update_url -- ################################################### +-- IPv4/IPv6 - update_url -- ################################################## uurl = ns:taboption("basic", Value, "update_url", translate("Custom update-URL"), translate("Update URL to be used for updating your DDNS Provider." .. "<br />" .. "Follow instructions you will find on their WEB page.") ) -uurl:depends("ipv4_service_name", "-") -uurl:depends("ipv6_service_name", "-") function uurl.validate(self, value) - local script = ush:formvalue(section) + local fush = ush:formvalue(section) + local fusev6 = usev6:formvalue(section) - if (usev6:formvalue(section) == "0" and svc4:formvalue(section) ~= "-") or - (usev6:formvalue(section) == "1" and svc6:formvalue(section) ~= "-") then + if (fusev6 == "0" and svc4:formvalue(section) ~= "-") or + (fusev6 == "1" and svc6:formvalue(section) ~= "-") then return "" -- suppress validate error elseif not value then - if not script or not (#script > 0) then + if not fush or (#fush == 0) then return nil, err_tab_basic(self) .. translate("missing / required") else return "" -- suppress validate error / update_script is given end - elseif (#script > 0) then + elseif (#fush > 0) then return nil, err_tab_basic(self) .. translate("either url or script could be set") end @@ -326,80 +448,159 @@ function uurl.validate(self, value) return value end +function uurl.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4/IPv6 - update_script -- ################################################ +-- IPv4/IPv6 - update_script -- ############################################### ush = ns:taboption("basic", Value, "update_script", translate("Custom update-script"), translate("Custom update script to be used for updating your DDNS Provider.") ) -ush:depends("ipv4_service_name", "-") -ush:depends("ipv6_service_name", "-") function ush.validate(self, value) - local url = uurl:formvalue(section) + local fuurl = uurl:formvalue(section) + local fusev6 = usev6:formvalue(section) - if (usev6:formvalue(section) == "0" and svc4:formvalue(section) ~= "-") or - (usev6:formvalue(section) == "1" and svc6:formvalue(section) ~= "-") then + if (fusev6 == "0" and svc4:formvalue(section) ~= "-") or + (fusev6 == "1" and svc6:formvalue(section) ~= "-") then return "" -- suppress validate error elseif not value then - if not url or not (#url > 0) then + if not fuurl or (#fuurl == 0) then return nil, err_tab_basic(self) .. translate("missing / required") else return "" -- suppress validate error / update_url is given end - elseif (#url > 0) then + elseif (#fuurl > 0) then return nil, err_tab_basic(self) .. translate("either url or script could be set") elseif not NXFS.access(value) then return nil, err_tab_basic(self) .. translate("File not found") end return value end +function ush.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4/IPv6 - domain -- ####################################################### +-- IPv4/IPv6 - domain -- ###################################################### dom = ns:taboption("basic", Value, "domain", - translate("Hostname/Domain"), + translate("Domain"), translate("Replaces [DOMAIN] in Update-URL") ) -dom.rmempty = false -dom.placeholder = "mypersonaldomain.dyndns.org" +dom.placeholder = "myhost.example.com" function dom.validate(self, value) - if not value - or not (#value > 0) - or not DTYP.hostname(value) then - return nil, err_tab_basic(self) .. translate("invalid - Sample") .. ": 'mypersonaldomain.dyndns.org'" - else - return value - end + return _option_validate(self, value) +end +function dom.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end --- IPv4/IPv6 - username -- ##################################################### +-- IPv4/IPv6 - username -- #################################################### user = ns:taboption("basic", Value, "username", translate("Username"), - translate("Replaces [USERNAME] in Update-URL") ) -user.rmempty = false + translate("Replaces [USERNAME] in Update-URL (URL-encoded)") ) function user.validate(self, value) - if not value then - return nil, err_tab_basic(self) .. translate("missing / required") - end - return value + return _option_validate(self, value) +end +function user.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end --- IPv4/IPv6 - password -- ##################################################### +-- IPv4/IPv6 - password -- #################################################### pw = ns:taboption("basic", Value, "password", translate("Password"), - translate("Replaces [PASSWORD] in Update-URL") ) -pw.rmempty = false + translate("Replaces [PASSWORD] in Update-URL (URL-encoded)") ) pw.password = true function pw.validate(self, value) - if not value then - return nil, err_tab_basic(self) .. translate("missing / required") + return _option_validate(self, value) +end +function pw.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - param_enc -- ################################################### +pe = ns:taboption("basic", Value, "param_enc", + translate("Optional Encoded Parameter"), + translate("Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)") ) +function pe.validate(self, value) + return _option_validate(self, value) +end +function pe.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- IPv4/IPv6 - param_enc -- ################################################### +po = ns:taboption("basic", Value, "param_opt", + translate("Optional Parameter"), + translate("Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)") ) +function po.validate(self, value) + return _option_validate(self, value) +end +function po.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end + +-- handled service dependent show/display -- ################################## +-- IPv4 -- +local cv4 = svc4:cfgvalue(section) +if cv4 ~= "-" then + svs:depends ("ipv4_service_name", "-" ) -- show only if "-" + ush:depends ("ipv4_service_name", "?") + uurl:depends("ipv4_service_name", "?") +else + uurl:depends("ipv4_service_name", "-") + ush:depends ("ipv4_service_name", "-") + dom:depends("ipv4_service_name", "-" ) + user:depends("ipv4_service_name", "-" ) + pw:depends("ipv4_service_name", "-" ) + pe:depends("ipv4_service_name", "-" ) + po:depends("ipv4_service_name", "-" ) +end +for s, u in UTIL.kspairs(services4) do + svc4:value(s) -- fill DropDown-List + if cv4 ~= s then + svs:depends("ipv4_service_name", s ) + else + dom:depends ("ipv4_service_name", ((_option_used(dom.option, u) == 1) and s or "?") ) + user:depends("ipv4_service_name", ((_option_used(user.option, u) == 1) and s or "?") ) + pw:depends ("ipv4_service_name", ((_option_used(pw.option, u) == 1) and s or "?") ) + pe:depends ("ipv4_service_name", ((_option_used(pe.option, u) == 1) and s or "?") ) + po:depends ("ipv4_service_name", ((_option_used(po.option, u) == 1) and s or "?") ) end - return value end +svc4:value("-", translate("-- custom --") ) + +-- IPv6 -- +local cv6 = svc6:cfgvalue(section) +if cv6 ~= "-" then + svs:depends ("ipv6_service_name", "-" ) + uurl:depends("ipv6_service_name", "?") + ush:depends ("ipv6_service_name", "?") +else + uurl:depends("ipv6_service_name", "-") + ush:depends ("ipv6_service_name", "-") + dom:depends("ipv6_service_name", "-" ) + user:depends("ipv6_service_name", "-" ) + pw:depends("ipv6_service_name", "-" ) + pe:depends("ipv6_service_name", "-" ) + po:depends("ipv6_service_name", "-" ) +end +for s, u in UTIL.kspairs(services6) do + svc6:value(s) -- fill DropDown-List + if cv6 ~= s then + svs:depends("ipv6_service_name", s ) + else + dom:depends ("ipv6_service_name", ((_option_used(dom.option, u) == 1) and s or "?") ) + user:depends("ipv6_service_name", ((_option_used(user.option, u) == 1) and s or "?") ) + pw:depends ("ipv6_service_name", ((_option_used(pw.option, u) == 1) and s or "?") ) + pe:depends ("ipv6_service_name", ((_option_used(pe.option, u) == 1) and s or "?") ) + po:depends ("ipv6_service_name", ((_option_used(po.option, u) == 1) and s or "?") ) + end +end +svc6:value("-", translate("-- custom --") ) --- IPv4/IPv6 - use_https (NEW) -- ############################################## +-- IPv4/IPv6 - use_https -- ################################################### if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then https = ns:taboption("basic", Flag, "use_https", translate("Use HTTP Secure") ) https.orientation = "horizontal" - https.rmempty = false -- force validate function function https.cfgvalue(self, section) local value = AbstractValue.cfgvalue(self, section) if not has_ssl and value == "1" then @@ -411,9 +612,6 @@ if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then end return value end - function https.parse(self, section) - DDNS.flag_parse(self, section) - end function https.validate(self, value) if (value == "1" and has_ssl ) or value == "0" then return value end return nil, err_tab_basic(self) .. translate("HTTPS not supported") .. " !" @@ -428,7 +626,7 @@ if has_ssl or ( ( m:get(section, "use_https") or "0" ) == "1" ) then end end --- IPv4/IPv6 - cacert (NEW) -- ################################################# +-- IPv4/IPv6 - cacert -- ###################################################### if has_ssl then cert = ns:taboption("basic", Value, "cacert", translate("Path to CA-Certificate"), @@ -436,8 +634,8 @@ if has_ssl then translate("or") .. bold_on .. " IGNORE " .. bold_off .. translate("to run HTTPS without verification of server certificates (insecure)") ) cert:depends("use_https", "1") - cert.rmempty = false -- force validate function cert.default = "/etc/ssl/certs" + cert.forcewrite = true function cert.validate(self, value) if https:formvalue(section) == "0" then return "" -- supress validate error if NOT https @@ -452,10 +650,13 @@ if has_ssl then return nil, err_tab_basic(self) .. translate("file or directory not found or not 'IGNORE'") .. " !" end + function cert.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end end --- TAB: Advanced ################################################################################## --- IPv4 - ip_source -- ######################################################### +-- TAB: Advanced ################################################################################# +-- IPv4 - ip_source -- ######################################################## src4 = ns:taboption("advanced", ListValue, "ipv4_source", translate("IP address source") .. " [IPv4]", translate("Defines the source to read systems IPv4-Address from, that will be send to the DDNS provider") ) @@ -501,8 +702,11 @@ function src4.write(self, section, value) self.map:del(section, self.option) -- delete "ipv4_source" helper return self.map:set(section, "ip_source", value) -- and write "ip_source end +function src4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv6 - ip_source -- ######################################################### +-- IPv6 - ip_source -- ######################################################## src6 = ns:taboption("advanced", ListValue, "ipv6_source", translate("IP address source") .. " [IPv6]", translate("Defines the source to read systems IPv6-Address from, that will be send to the DDNS provider") ) @@ -553,8 +757,11 @@ function src6.write(self, section, value) self.map:del(section, self.option) -- delete "ipv4_source" helper return self.map:set(section, "ip_source", value) -- and write "ip_source end +function src6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 - ip_network (default "wan") -- ######################################## +-- IPv4 - ip_network (default "wan") -- ####################################### ipn4 = ns:taboption("advanced", ListValue, "ipv4_network", translate("Network") .. " [IPv4]", translate("Defines the network to read systems IPv4-Address from") ) @@ -587,8 +794,11 @@ function ipn4.write(self, section, value) return self.map:set(section, "ip_network", value) -- and write "ip_network" end end +function ipn4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv6 - ip_network (default "wan6") -- ####################################### +-- IPv6 - ip_network (default "wan6") -- ###################################### ipn6 = ns:taboption("advanced", ListValue, "ipv6_network", translate("Network") .. " [IPv6]" ) ipn6:depends("ipv6_source", "network") @@ -627,8 +837,11 @@ function ipn6.write(self, section, value) return self.map:set(section, "ip_network", value) -- and write "ip_network" end end +function ipn6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 - ip_url (default "checkip.dyndns.com") -- ############################# +-- IPv4 - ip_url (default "checkip.dyndns.com") -- ############################ iurl4 = ns:taboption("advanced", Value, "ipv4_url", translate("URL to detect") .. " [IPv4]", translate("Defines the Web page to read systems IPv4-Address from") ) @@ -669,8 +882,11 @@ function iurl4.write(self, section, value) return self.map:set(section, "ip_url", value) -- and write "ip_url" end end +function iurl4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv6 - ip_url (default "checkipv6.dyndns.com") -- ########################### +-- IPv6 - ip_url (default "checkipv6.dyndns.com") -- ########################## iurl6 = ns:taboption("advanced", Value, "ipv6_url", translate("URL to detect") .. " [IPv6]" ) iurl6:depends("ipv6_source", "web") @@ -717,8 +933,11 @@ function iurl6.write(self, section, value) return self.map:set(section, "ip_url", value) -- and write "ip_url" end end +function iurl6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 + IPv6 - ip_interface -- ############################################### +-- IPv4 + IPv6 - ip_interface -- ############################################## ipi = ns:taboption("advanced", ListValue, "ip_interface", translate("Interface"), translate("Defines the interface to read systems IP-Address from") ) @@ -733,16 +952,18 @@ for _, v in pairs(SYS.net.devices()) do end end function ipi.validate(self, value) - if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "interface") - or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "interface") then + local fusev6 = usev6:formvalue(section) + if (fusev6 == "0" and src4:formvalue(section) ~= "interface") + or (fusev6 == "1" and src6:formvalue(section) ~= "interface") then return "" else return value end end function ipi.write(self, section, value) - if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "interface") - or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "interface") then + local fusev6 = usev6:formvalue(section) + if (fusev6 == "0" and src4:formvalue(section) ~= "interface") + or (fusev6 == "1" and src6:formvalue(section) ~= "interface") then return true else -- get network from device to @@ -752,21 +973,24 @@ function ipi.write(self, section, value) return self.map:set(section, self.option, value) end end +function ipi.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 + IPv6 - ip_script (NEW) -- ############################################ +-- IPv4 + IPv6 - ip_script -- ################################################# ips = ns:taboption("advanced", Value, "ip_script", translate("Script"), translate("User defined script to read systems IP-Address") ) ips:depends("ipv4_source", "script") -- IPv4 ips:depends("ipv6_source", "script") -- or IPv6 -ips.rmempty = false ips.placeholder = "/path/to/script.sh" function ips.validate(self, value) + local fusev6 = usev6:formvalue(section) local split if value then split = UTIL.split(value, " ") end - if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "script") - or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "script") then + if (fusev6 == "0" and src4:formvalue(section) ~= "script") + or (fusev6 == "1" and src6:formvalue(section) ~= "script") then return "" elseif not value or not (#value > 0) or not NXFS.access(split[1], "x") then return nil, err_tab_adv(self) .. @@ -776,15 +1000,19 @@ function ips.validate(self, value) end end function ips.write(self, section, value) - if (usev6:formvalue(section) == "0" and src4:formvalue(section) ~= "script") - or (usev6:formvalue(section) == "1" and src6:formvalue(section) ~= "script") then + local fusev6 = usev6:formvalue(section) + if (fusev6 == "0" and src4:formvalue(section) ~= "script") + or (fusev6 == "1" and src6:formvalue(section) ~= "script") then return true else return self.map:set(section, self.option, value) end end +function ips.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 - interface - default "wan" -- ######################################### +-- IPv4 - interface - default "wan" -- ######################################## -- event network to monitor changes/hotplug/dynamic_dns_updater.sh -- only needs to be set if "ip_source"="web" or "script" -- if "ip_source"="network" or "interface" we use their network @@ -799,27 +1027,32 @@ function eif4.cfgvalue(self, section) return DDNS.read_value(self, section, "interface") end function eif4.validate(self, value) + local fsrc4 = src4:formvalue(section) if usev6:formvalue(section) == "1" - or src4:formvalue(section) == "network" - or src4:formvalue(section) == "interface" then + or fsrc4 == "network" + or fsrc4 == "interface" then return "" -- ignore IPv6, network, interface else return value end end function eif4.write(self, section, value) + local fsrc4 = src4:formvalue(section) if usev6:formvalue(section) == "1" - or src4:formvalue(section) == "network" - or src4:formvalue(section) == "interface" then + or fsrc4 == "network" + or fsrc4 == "interface" then return true -- ignore IPv6, network, interface else self.map:del(section, self.option) -- delete "ipv4_interface" helper return self.map:set(section, "interface", value) -- and write "interface" end end +function eif4.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv6 - interface (NEW) - default "wan6" -- ################################## --- event network to monitor changes/hotplug (NEW) +-- IPv6 - interface - default "wan6" -- ####################################### +-- event network to monitor changes/hotplug -- only needs to be set if "ip_source"="web" or "script" -- if "ip_source"="network" or "interface" we use their network eif6 = ns:taboption("advanced", ListValue, "ipv6_interface", @@ -837,9 +1070,10 @@ function eif6.cfgvalue(self, section) return DDNS.read_value(self, section, "interface") end function eif6.validate(self, value) + local fsrc6 = src6:formvalue(section) if usev6:formvalue(section) == "0" - or src4:formvalue(section) == "network" - or src4:formvalue(section) == "interface" then + or fsrc6 == "network" + or fsrc6 == "interface" then return "" -- ignore IPv4, network, interface elseif not has_ipv6 then return nil, err_tab_adv(self) .. err_ipv6_plain @@ -848,23 +1082,26 @@ function eif6.validate(self, value) end end function eif6.write(self, section, value) + local fsrc6 = src6:formvalue(section) if usev6:formvalue(section) == "0" - or src4:formvalue(section) == "network" - or src4:formvalue(section) == "interface" then + or fsrc6 == "network" + or fsrc6 == "interface" then return true -- ignore IPv4, network, interface else self.map:del(section, self.option) -- delete "ipv6_interface" helper return self.map:set(section, "interface", value) -- and write "interface" end end +function eif6.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4/IPv6 - bind_network -- ################################################# +-- IPv4/IPv6 - bind_network -- ################################################ if has_ssl or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then bnet = ns:taboption("advanced", ListValue, "bind_network", translate("Bind Network") ) bnet:depends("ipv4_source", "web") bnet:depends("ipv6_source", "web") - bnet.rmempty = true bnet.default = "" bnet:value("", translate("-- default --")) WADM.cbi_add_networks(bnet) @@ -884,9 +1121,12 @@ if has_ssl or ( ( m:get(section, "bind_network") or "" ) ~= "" ) then if (value ~= "" and has_ssl ) or value == "" then return value end return nil, err_tab_adv(self) .. translate("Binding to a specific network not supported") .. " !" end + function bnet.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end end --- IPv4 + IPv6 - force_ipversion (NEW) -- ###################################### +-- IPv4 + IPv6 - force_ipversion -- ########################################### -- optional to force wget/curl and host to use only selected IP version -- command parameter "-4" or "-6" if has_force or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then @@ -908,19 +1148,9 @@ if has_force or ( ( m:get(section, "force_ipversion") or "0" ) ~= "0" ) then if (value == "1" and has_force) or value == "0" then return value end return nil, err_tab_adv(self) .. translate("Force IP Version not supported") end - function fipv.parse(self, section) - DDNS.flag_parse(self, section) - end - function fipv.write(self, section, value) - if value == "1" then - return self.map:set(section, self.option, value) - else - return self.map:del(section, self.option) - end - end end --- IPv4 + IPv6 - dns_server (NEW) -- ########################################### +-- IPv4 + IPv6 - dns_server -- ################################################ -- optional DNS Server to use resolving my IP if "ip_source"="web" dns = ns:taboption("advanced", Value, "dns_server", translate("DNS-Server"), @@ -929,7 +1159,7 @@ dns = ns:taboption("advanced", Value, "dns_server", dns.placeholder = "mydns.lan" function dns.validate(self, value) -- if .datatype is set, then it is checked before calling this function - if not value then + if not value or (#value == 0) then return "" -- ignore on empty elseif not DTYP.host(value) then return nil, err_tab_adv(self) .. translate("use hostname, FQDN, IPv4- or IPv6-Address") @@ -947,8 +1177,11 @@ function dns.validate(self, value) end end end +function dns.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- IPv4 + IPv6 - force_dnstcp (NEW) -- ######################################### +-- IPv4 + IPv6 - force_dnstcp -- ############################################## if has_dnstcp or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then tcp = ns:taboption("advanced", Flag, "force_dnstcp", translate("Force TCP on DNS") ) @@ -970,12 +1203,9 @@ if has_dnstcp or ( ( m:get(section, "force_dnstcp") or "0" ) ~= "0" ) then end return nil, err_tab_adv(self) .. translate("DNS requests via TCP not supported") end - function tcp.parse(self, section) - DDNS.flag_parse(self, section) - end end --- IPv4 + IPv6 - proxy (NEW) -- ################################################ +-- IPv4 + IPv6 - proxy -- ##################################################### -- optional Proxy to use for http/https requests [user:password@]proxyhost[:port] if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then pxy = ns:taboption("advanced", Value, "proxy", @@ -997,7 +1227,7 @@ if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then end function pxy.validate(self, value) -- if .datatype is set, then it is checked before calling this function - if not value then + if not value or (#value == 0) then return "" -- ignore on empty elseif has_proxy then local ipv6 = usev6:formvalue(section) or "0" @@ -1016,9 +1246,12 @@ if has_proxy or ( ( m:get(section, "proxy") or "" ) ~= "" ) then return nil, err_tab_adv(self) .. translate("PROXY-Server not supported") end end + function pxy.parse(self, section, novld) + DDNS.value_parse(self, section, novld) + end end --- use_syslog -- ############################################################### +-- use_syslog -- ############################################################## slog = ns:taboption("advanced", ListValue, "use_syslog", translate("Log to syslog"), translate("Writes log messages to syslog. Critical Errors will always be written to syslog.") ) @@ -1028,26 +1261,24 @@ slog:value("1", translate("Info")) slog:value("2", translate("Notice")) slog:value("3", translate("Warning")) slog:value("4", translate("Error")) +function slog.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- use_logfile (NEW) -- ######################################################## +-- use_logfile -- ############################################################# logf = ns:taboption("advanced", Flag, "use_logfile", translate("Log to file"), translate("Writes detailed messages to log file. File will be truncated automatically.") .. "<br />" .. translate("File") .. [[: "]] .. log_dir .. [[/]] .. section .. [[.log"]] ) logf.orientation = "horizontal" -logf.rmempty = false -- we want to save in /etc/config/ddns file on "0" because -logf.default = "1" -- if not defined write to log by default -function logf.parse(self, section) - DDNS.flag_parse(self, section) -end +logf.default = "1" -- if not defined write to log by default --- TAB: Timer ##################################################################################### --- check_interval -- ########################################################### +-- TAB: Timer #################################################################################### +-- check_interval -- ########################################################## ci = ns:taboption("timer", Value, "check_interval", translate("Check Interval") ) ci.template = "ddns/detail_value" -ci.default = 10 -ci.rmempty = false -- validate ourselves for translatable error messages +ci.default = "10" function ci.validate(self, value) if not DTYP.uinteger(value) or tonumber(value) < 1 then @@ -1062,7 +1293,7 @@ function ci.validate(self, value) end end function ci.write(self, section, value) - -- simulate rmempty=true remove default + -- remove when default local secs = DDNS.calc_seconds(value, cu:formvalue(section)) if secs ~= 600 then --default 10 minutes return self.map:set(section, self.option, value) @@ -1071,20 +1302,22 @@ function ci.write(self, section, value) return self.map:del(section, self.option) end end +function ci.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- check_unit -- ############################################################### +-- check_unit -- ############################################################## cu = ns:taboption("timer", ListValue, "check_unit", "not displayed, but needed otherwise error", translate("Interval to check for changed IP" .. "<br />" .. "Values below 5 minutes == 300 seconds are not supported") ) cu.template = "ddns/detail_lvalue" cu.default = "minutes" -cu.rmempty = false -- want to control write process cu:value("seconds", translate("seconds")) cu:value("minutes", translate("minutes")) cu:value("hours", translate("hours")) --cu:value("days", translate("days")) function cu.write(self, section, value) - -- simulate rmempty=true remove default + -- remove when default local secs = DDNS.calc_seconds(ci:formvalue(section), value) if secs ~= 600 then --default 10 minutes return self.map:set(section, self.option, value) @@ -1092,13 +1325,16 @@ function cu.write(self, section, value) return true end end +function cu.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- force_interval (modified) -- ################################################ +-- force_interval (modified) -- ############################################### fi = ns:taboption("timer", Value, "force_interval", translate("Force Interval") ) fi.template = "ddns/detail_value" -fi.default = 72 -- see dynamic_dns_updater.sh script -fi.rmempty = false -- validate ourselves for translatable error messages +fi.default = "72" -- see dynamic_dns_updater.sh script +--fi.rmempty = false -- validate ourselves for translatable error messages function fi.validate(self, value) if not DTYP.uinteger(value) or tonumber(value) < 0 then @@ -1132,15 +1368,18 @@ function fi.write(self, section, value) return self.map:del(section, self.option) end end +function fi.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- force_unit -- ############################################################### +-- force_unit -- ############################################################## fu = ns:taboption("timer", ListValue, "force_unit", "not displayed, but needed otherwise error", translate("Interval to force updates send to DDNS Provider" .. "<br />" .. "Setting this parameter to 0 will force the script to only run once" .. "<br />" .. "Values lower 'Check Interval' except '0' are not supported") ) fu.template = "ddns/detail_lvalue" fu.default = "hours" -fu.rmempty = false -- want to control write process +--fu.rmempty = false -- want to control write process --fu:value("seconds", translate("seconds")) fu:value("minutes", translate("minutes")) fu:value("hours", translate("hours")) @@ -1154,15 +1393,17 @@ function fu.write(self, section, value) return true end end +function fu.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- retry_count (NEW) -- ######################################################## +-- retry_count -- ############################################################# rc = ns:taboption("timer", Value, "retry_count") rc.title = translate("Error Retry Counter") rc.description = translate("On Error the script will stop execution after given number of retrys") .. "<br />" .. translate("The default setting of '0' will retry infinite.") -rc.default = 0 -rc.rmempty = false -- validate ourselves for translatable error messages +rc.default = "0" function rc.validate(self, value) if not DTYP.uinteger(value) then return nil, err_tab_timer(self) .. translate("minimum value '0'") @@ -1170,21 +1411,15 @@ function rc.validate(self, value) return value end end -function rc.write(self, section, value) - -- simulate rmempty=true remove default - if tonumber(value) ~= self.default then - return self.map:set(section, self.option, value) - else - return self.map:del(section, self.option) - end +function rc.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end --- retry_interval -- ########################################################### +-- retry_interval -- ########################################################## ri = ns:taboption("timer", Value, "retry_interval", translate("Error Retry Interval") ) ri.template = "ddns/detail_value" -ri.default = 60 -ri.rmempty = false -- validate ourselves for translatable error messages +ri.default = "60" function ri.validate(self, value) if not DTYP.uinteger(value) or tonumber(value) < 1 then @@ -1203,13 +1438,16 @@ function ri.write(self, section, value) return self.map:del(section, self.option) end end +function ri.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- retry_unit -- ############################################################### +-- retry_unit -- ############################################################## ru = ns:taboption("timer", ListValue, "retry_unit", "not displayed, but needed otherwise error", translate("On Error the script will retry the failed action after given time") ) ru.template = "ddns/detail_lvalue" ru.default = "seconds" -ru.rmempty = false -- want to control write process +--ru.rmempty = false -- want to control write process ru:value("seconds", translate("seconds")) ru:value("minutes", translate("minutes")) --ru:value("hours", translate("hours")) @@ -1223,8 +1461,11 @@ function ru.write(self, section, value) return true -- will be deleted by retry_interval end end +function ru.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end --- TAB: LogView (NEW) ############################################################################# +-- TAB: LogView ################################################################################## lv = ns:taboption("logview", DummyValue, "_logview") lv.template = "ddns/detail_logview" lv.inputtitle = translate("Read / Reread log file") diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua index fbd3cb337..23ce4f13f 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua @@ -5,19 +5,14 @@ local NX = require "nixio" local NXFS = require "nixio.fs" local DISP = require "luci.dispatcher" local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- cbi-map definition -- ####################################################### local m = Map("ddns") - --- first need to close <a> from cbi map template our <a> closed by template -m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] - .. translate("Dynamic DNS") - -m.description = translate("Dynamic DNS allows that your router can be reached with " .. - "a fixed hostname while having a dynamically changing IP address.") - -m.redirect = DISP.build_url("admin", "services", "ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") function m.commit_handler(self) if self.changed then -- changes ? @@ -53,17 +48,7 @@ ali.description = translate("Non-public and by default blocked IP's") .. ":" .. "0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16" .. [[<br /><strong>IPv6: </strong>]] .. "::/32, f000::/4" -ali.reempty = true ali.default = "0" -function ali.parse(self, section) - DDNS.flag_parse(self, section) -end -function ali.validate(self, value) - if value == self.default then - return "" -- default = empty - end - return value -end -- date_format -- ############################################################# local df = ns:option(Value, "date_format") @@ -72,7 +57,6 @@ df.description = [[<a href="http://www.cplusplus.com/reference/ctime/strftime/" .. translate("For supported codes look here") .. [[</a>]] df.template = "ddns/global_value" -df.rmempty = true df.default = "%F %R" df.date_string = "" function df.cfgvalue(self, section) @@ -81,55 +65,45 @@ function df.cfgvalue(self, section) self.date_string = DDNS.epoch2date(epoch, value) return value end -function df.validate(self, value) - if value == self.default then - return "" -- default = empty - end - return value +function df.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end -- run_dir -- ################################################################# local rd = ns:option(Value, "run_dir") rd.title = translate("Status directory") rd.description = translate("Directory contains PID and other status information for each running section") -rd.rmempty = true rd.default = "/var/run/ddns" -function rd.validate(self, value) - if value == self.default then - return "" -- default = empty - end - return value +-- no need to validate. if empty default is used everything else created by dns-scripts +function rd.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end -- log_dir -- ################################################################# local ld = ns:option(Value, "log_dir") ld.title = translate("Log directory") ld.description = translate("Directory contains Log files for each running section") -ld.rmempty = true ld.default = "/var/log/ddns" -function ld.validate(self, value) - if value == self.default then - return "" -- default = empty - end - return value +-- no need to validate. if empty default is used everything else created by dns-scripts +function ld.parse(self, section, novld) + DDNS.value_parse(self, section, novld) end -- log_lines -- ############################################################### local ll = ns:option(Value, "log_lines") ll.title = translate("Log length") ll.description = translate("Number of last lines stored in log files") -ll.rmempty = true ll.default = "250" function ll.validate(self, value) local n = tonumber(value) if not n or math.floor(n) ~= n or n < 1 then return nil, self.title .. ": " .. translate("minimum value '1'") end - if value == self.default then - return "" -- default = empty - end return value end +function ll.parse(self, section, novld) + DDNS.value_parse(self, section, novld) +end -- use_curl -- ################################################################ if (SYS.call([[ grep -i "\+ssl" /usr/bin/wget >/dev/null 2>&1 ]]) == 0) @@ -140,17 +114,7 @@ and NXFS.access("/usr/bin/curl") then .. [[<br />]] .. translate("To use cURL activate this option.") pc.orientation = "horizontal" - pc.rmempty = true pc.default = "0" - function pc.parse(self, section) - DDNS.flag_parse(self, section) - end - function pc.validate(self, value) - if value == self.default then - return "" -- default = empty - end - return value - end end return m diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua index ff7aa7a41..031bf513c 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua @@ -1,9 +1,9 @@ -- Copyright 2014 Christian Schoenebeck <christian dot schoenebeck at gmail dot com> -- Licensed to the public under the Apache License 2.0. -local CTRL = require "luci.controller.ddns" -- this application's controller local DISP = require "luci.dispatcher" local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- check supported options -- ################################################## @@ -11,8 +11,6 @@ local DDNS = require "luci.tools.ddns" -- ddns multiused functions has_ssl = DDNS.check_ssl() -- HTTPS support and --bind-network / --interface has_proxy = DDNS.check_proxy() -- Proxy support has_dnstcp = DDNS.check_bind_host() -- DNS TCP support --- correct ddns-scripts version -need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN) -- html constants font_red = [[<font color="red">]] @@ -22,16 +20,9 @@ bold_off = [[</strong>]] -- cbi-map definition -- ####################################################### m = Map("ddns") - --- first need to close <a> from cbi map template our <a> closed by template -m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] .. - translate("Dynamic DNS") - -m.description = translate("Dynamic DNS allows that your router can be reached with " .. - "a fixed hostname while having a dynamically changing " .. - "IP address.") - -m.redirect = DISP.build_url("admin", "services", "ddns") +m.title = CTRL.app_title_back() +m.description = CTRL.app_description() +m.redirect = DISP.build_url("admin", "services", "ddns") -- SimpleSection definition -- ################################################# -- show Hints to optimize installation and script usage @@ -40,7 +31,7 @@ s = m:section( SimpleSection, translate("Below a list of configuration tips for your system to run Dynamic DNS updates without limitations") ) -- ddns_scripts needs to be updated for full functionality -if need_update then +if not CTRL.service_ok() then local dv = s:option(DummyValue, "_update_needed") dv.titleref = DISP.build_url("admin", "system", "packages") dv.rawhtml = true diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua index 9e8df2d08..46fc0a4a2 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua @@ -2,10 +2,10 @@ -- Licensed to the public under the Apache License 2.0. local NXFS = require "nixio.fs" -local CTRL = require "luci.controller.ddns" -- this application's controller local DISP = require "luci.dispatcher" local HTTP = require "luci.http" local SYS = require "luci.sys" +local CTRL = require "luci.controller.ddns" -- this application's controller local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- show hints ? @@ -15,7 +15,7 @@ show_hints = not (DDNS.check_ipv6() -- IPv6 support and DDNS.check_bind_host() -- DNS TCP support ) -- correct ddns-scripts version -need_update = DDNS.ipkg_ver_compare(DDNS.ipkg_ver_installed("ddns-scripts"), "<<", CTRL.DDNS_MIN) +need_update = not CTRL.service_ok() -- html constants font_red = [[<font color="red">]] @@ -25,23 +25,8 @@ bold_off = [[</strong>]] -- cbi-map definition -- ####################################################### m = Map("ddns") - --- first need to close <a> from cbi map template our <a> closed by template -m.title = [[</a><a href="javascript:alert(']] - .. translate("Version Information") - .. [[\n\nluci-app-ddns]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("luci-app-ddns") - .. [[\n\nddns-scripts ]] .. translate("required") .. [[:]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] .. CTRL.DDNS_MIN .. [[ ]] .. translate("or higher") - .. [[\n\nddns-scripts ]] .. translate("installed") .. [[:]] - .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("ddns-scripts") - .. [[\n\n]] - .. [[')">]] - .. translate("Dynamic DNS") - -m.description = translate("Dynamic DNS allows that your router can be reached with " .. - "a fixed hostname while having a dynamically changing " .. - "IP address.") +m.title = CTRL.app_title_main() +m.description = CTRL.app_description() m.on_after_commit = function(self) if self.changed then -- changes ? @@ -123,21 +108,21 @@ function ts.create(self, name) HTTP.redirect( self.extedit:format(name) ) end --- Domain and registered IP -- ################################################# -dom = ts:option(DummyValue, "_domainIP", - translate("Hostname/Domain") .. "<br />" .. translate("Registered IP") ) +-- Lookup_Host and registered IP -- ################################################# +dom = ts:option(DummyValue, "_lookupIP", + translate("Lookup Hostname") .. "<br />" .. translate("Registered IP") ) dom.template = "ddns/overview_doubleline" function dom.set_one(self, section) - local domain = self.map:get(section, "domain") or "" - if domain ~= "" then - return domain + local lookup = self.map:get(section, "lookup_host") or "" + if lookup ~= "" then + return lookup else return [[<em>]] .. translate("config error") .. [[</em>]] end end function dom.set_two(self, section) - local domain = self.map:get(section, "domain") or "" - if domain == "" then return "" end + local lookup = self.map:get(section, "lookup_host") or "" + if lookup == "" then return "" end local dnsserver = self.map:get(section, "dnsserver") or "" local use_ipv6 = tonumber(self.map:get(section, "use_ipv6") or 0) local force_ipversion = tonumber(self.map:get(section, "force_ipversion") or 0) @@ -146,7 +131,7 @@ function dom.set_two(self, section) if not NXFS.access(command, "rwx", "rx", "rx") then NXFS.chmod(command, 755) end - command = command .. [[ get_registered_ip ]] .. domain .. [[ ]] .. use_ipv6 .. + command = command .. [[ get_registered_ip ]] .. lookup .. [[ ]] .. use_ipv6 .. [[ ]] .. force_ipversion .. [[ ]] .. force_dnstcp .. [[ ]] .. dnsserver local ip = SYS.exec(command) if ip == "" then ip = translate("no data") end @@ -158,9 +143,6 @@ ena = ts:option( Flag, "enabled", translate("Enabled")) ena.template = "ddns/overview_enabled" ena.rmempty = false -function ena.parse(self, section) - DDNS.flag_parse(self, section) -end -- show PID and next update upd = ts:option( DummyValue, "_update", diff --git a/applications/luci-app-ddns/luasrc/tools/ddns.lua b/applications/luci-app-ddns/luasrc/tools/ddns.lua index 4466063cb..ecc413136 100644 --- a/applications/luci-app-ddns/luasrc/tools/ddns.lua +++ b/applications/luci-app-ddns/luasrc/tools/ddns.lua @@ -96,58 +96,6 @@ function get_pid(section) return pid end --- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>" -function ipkg_ver_compare(ver1, comp, ver2) - if not ver1 or not ver2 - or not comp or not (#comp > 0) then return nil end - -- correct compare string - if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" - elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<=" - elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">=" - elseif comp == "=" or comp == "==" then comp = "==" - elseif comp == "<<" then comp = "<" - elseif comp == ">>" then comp = ">" - else return nil end - - local av1 = UTIL.split(ver1, "[%.%-]", nil, true) - local av2 = UTIL.split(ver2, "[%.%-]", nil, true) - - for i = 1, math.max(table.getn(av1),table.getn(av2)), 1 do - local s1 = av1[i] or "" - local s2 = av2[i] or "" - - -- first "not equal" found return true - if comp == "~=" and (s1 ~= s2) then return true end - -- first "lower" found return true - if (comp == "<" or comp == "<=") and (s1 < s2) then return true end - -- first "greater" found return true - if (comp == ">" or comp == ">=") and (s1 > s2) then return true end - -- not equal then return false - if (s1 ~= s2) then return false end - end - - -- all equal and not compare greater or lower then true - return not (comp == "<" or comp == ">") -end - --- read version information for given package if installed -function ipkg_ver_installed(pkg) - local version = nil - local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r") - if control then - local ln - repeat - ln = control:read("*l") - if ln and ln:match("^Version: ") then - version = ln:gsub("^Version: ", "") - break - end - until not ln - control:close() - end - return version -end - -- replacement of build-in read of UCI option -- modified AbstractValue.cfgvalue(self, section) from cbi.lua -- needed to read from other option then current value definition @@ -172,24 +120,77 @@ function read_value(self, section, option) end end --- replacement of build-in Flag.parse of cbi.lua --- modified to mark section as changed if value changes --- current parse did not do this, but it is done AbstaractValue.parse() -function flag_parse(self, section) - local fexists = self.map:formvalue( - luci.cbi.FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option) +-- replacement of build-in parse of "Value" +-- modified AbstractValue.parse(self, section, novld) from cbi.lua +-- validate is called if rmempty/optional true or false +-- before write check if forcewrite, value eq default, and more +function value_parse(self, section, novld) + local fvalue = self:formvalue(section) + local fexist = ( fvalue and (#fvalue > 0) ) -- not "nil" and "not empty" + local cvalue = self:cfgvalue(section) + local rm_opt = ( self.rmempty or self.optional ) + local eq_cfg -- flag: equal cfgvalue - if fexists then - local fvalue = self:formvalue(section) and self.enabled or self.disabled - local cvalue = self:cfgvalue(section) - if fvalue ~= self.default or (not self.optional and not self.rmempty) then - self:write(section, fvalue) - else - self:remove(section) + -- If favlue and cvalue are both tables and have the same content + -- make them identical + if type(fvalue) == "table" and type(cvalue) == "table" then + eq_cfg = (#fvalue == #cvalue) + if eq_cfg then + for i=1, #fvalue do + if cvalue[i] ~= fvalue[i] then + eq_cfg = false + end + end end - if (fvalue ~= cvalue) then self.section.changed = true end - else - self:remove(section) + if eq_cfg then + fvalue = cvalue + end + end + + -- removed parameter "section" from function call because used/accepted nowhere + -- also removed call to function "transfer" + local vvalue, errtxt = self:validate(fvalue) + + -- error handling; validate return "nil" + if not vvalue then + if novld then -- and "novld" set + return -- then exit without raising an error + end + + if fexist then -- and there is a formvalue + self:add_error(section, "invalid", errtxt) + return -- so data are invalid + + elseif not rm_opt then -- and empty formvalue but NOT (rmempty or optional) set + self:add_error(section, "missing", errtxt) + return -- so data is missing + end + end + -- for whatever reason errtxt set and not handled above + assert( not (errtxt and (#errtxt > 0)), "unhandled validate error" ) + + -- lets continue with value returned from validate + eq_cfg = ( vvalue == cvalue ) -- update equal_config flag + local vexist = ( vvalue and (#vvalue > 0) ) -- not "nil" and "not empty" + local eq_def = ( vvalue == self.default ) -- equal_default flag + + -- not forcewrite and (rmempty or optional) + -- and (no data or equal_default) + if not self.forcewrite and rm_opt + and (not vexist or eq_def) then + if self:remove(section) then -- remove data from UCI + self.section.changed = true -- and push events + end + return + end + + -- not forcewrite and no changes, so nothing to write + if not self.forcewrite and eq_cfg then + return + end + + -- write data to UCI; raise event only on changes + if self:write(section, vvalue) and not eq_cfg then self.section.changed = true end end diff --git a/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm b/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm index 494b7435c..fd1d5be26 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm @@ -6,7 +6,7 @@ var txt = document.getElementById("cbid.ddns." + section + "._logview.txt"); // TextArea if ( !txt ) { return; } // security check - XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "logview")%>/' + section, null, + XHR.get('<%=url([[admin]], [[services]], [[ddns]], [[logview]])%>/' + section, null, function(x) { if (x.responseText == "_nodata_") txt.value = "<%:File not found or empty%>"; diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm index ea8e4a1e3..b409ed072 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm @@ -19,7 +19,7 @@ var section = data[i].section // Section to handle var cbx = document.getElementById("cbid.ddns." + section + ".enabled"); // Enabled var btn = document.getElementById("cbid.ddns." + section + "._startstop"); // Start/Stop button - var rip = document.getElementById("cbid.ddns." + section + "._domainIP.two"); // Registered IP + var rip = document.getElementById("cbid.ddns." + section + "._lookupIP.two"); // Registered IP var lup = document.getElementById("cbid.ddns." + section + "._update.one"); // Last Update var nup = document.getElementById("cbid.ddns." + section + "._update.two"); // Next Update if ( !(cbx && btn && rip && lup && nup) ) { return; } // security check @@ -76,12 +76,12 @@ break; } - // domain - // (data[i].domain ignored here + // lookup + // (data[i].lookup ignored here // registered IP // rip.innerHTML = "Registered IP"; - if (data[i].domain == "_nodomain_") + if (data[i].lookup == "_nolookup_") rip.innerHTML = ''; else if (data[i].reg_ip == "_nodata_") rip.innerHTML = '<em><%:No data%></em>'; @@ -136,7 +136,7 @@ // do start/stop var btnXHR = new XHR(); - btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "startstop")%>/' + section + '/' + cbx.checked, null, + btnXHR.post('<%=url([[admin]], [[services]], [[ddns]], [[startstop]])%>/' + section + '/' + cbx.checked, { token: '<%=token%>' }, function(x, data) { if (x.responseText == "_uncommitted_") { // we need a trick to display Ampersand "&" in stead of "&" or "&" @@ -155,7 +155,7 @@ } // force to immediate show status on page load (not waiting for XHR.poll) - XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.get('<%=url([[admin]], [[services]], [[ddns]], [[status]])%>', null, function(x, data) { if (data) { _data2elements(data); } } @@ -164,7 +164,7 @@ // define only ONE XHR.poll in a page because if one is running it blocks the other one // optimum is to define on Map or Section Level from here you can reach all elements // we need update every 15 seconds only - XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.poll(5, '<%=url([[admin]], [[services]], [[ddns]], [[status]])%>', null, function(x, data) { if (data) { _data2elements(data); } } diff --git a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm index 4ca0abb0e..5bdcb03e7 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm @@ -69,15 +69,15 @@ break; } - // domain - if (data[j].domain == "_nodomain_") + // lookup + if (data[j].lookup == "_nolookup_") tr.insertCell(-1).innerHTML = '<em><%:config error%></em>'; else - tr.insertCell(-1).innerHTML = data[j].domain; + tr.insertCell(-1).innerHTML = data[j].lookup; // registered IP switch (data[j].reg_ip) { - case "_nodomain_": + case "_nolookup_": tr.insertCell(-1).innerHTML = '<em><%:Config error%></em>'; break; case "_nodata_": @@ -111,13 +111,13 @@ } // force to immediate show status (not waiting for XHR.poll) - XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.get('<%=url([[admin]], [[services]], [[ddns]], [[status]])%>', null, function(x, data) { if (data) { _data2elements(x, data); } } ); - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null, + XHR.poll(15, '<%=url([[admin]], [[services]], [[ddns]], [[status]])%>', null, function(x, data) { if (data) { _data2elements(x, data); } } @@ -126,13 +126,13 @@ //]]></script> <fieldset class="cbi-section" id="ddns_status_section"> - <legend><a href="<%=luci.dispatcher.build_url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend> + <legend><a href="<%=url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend> <table class="cbi-section-table" id="ddns_status_table"> <tr class="cbi-section-table-titles"> <th class="cbi-section-table-cell"><%:Configuration%></th> <th class="cbi-section-table-cell"><%:Next Update%></th> - <th class="cbi-section-table-cell"><%:Hostname/Domain%></th> + <th class="cbi-section-table-cell"><%:Lookup Hostname%></th> <th class="cbi-section-table-cell"><%:Registered IP%></th> <th class="cbi-section-table-cell"><%:Network%></th> </tr> diff --git a/applications/luci-app-ddns/po/ca/ddns.po b/applications/luci-app-ddns/po/ca/ddns.po index 35f13eba5..8e1c8f588 100644 --- a/applications/luci-app-ddns/po/ca/ddns.po +++ b/applications/luci-app-ddns/po/ca/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -111,6 +114,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -164,6 +173,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS dinàmic" @@ -248,7 +260,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -333,6 +345,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -391,6 +409,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -421,16 +454,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -462,6 +498,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -578,7 +617,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/cs/ddns.po b/applications/luci-app-ddns/po/cs/ddns.po index 455c72a6a..bbab2d065 100644 --- a/applications/luci-app-ddns/po/cs/ddns.po +++ b/applications/luci-app-ddns/po/cs/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -110,6 +113,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -163,6 +172,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dynamické DNS" @@ -246,7 +258,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -331,6 +343,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -389,6 +407,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -419,16 +452,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -460,6 +496,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -576,7 +615,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/de/ddns.po b/applications/luci-app-ddns/po/de/ddns.po index 6ffde5d54..e662adc78 100644 --- a/applications/luci-app-ddns/po/de/ddns.po +++ b/applications/luci-app-ddns/po/de/ddns.po @@ -1,15 +1,15 @@ msgid "" msgstr "" "Project-Id-Version: luci-app-ddns\n" -"POT-Creation-Date: 2015-05-08 21:29+0100\n" -"PO-Revision-Date: 2015-05-08 21:47+0100\n" +"POT-Creation-Date: 2015-11-04 19:10-0100\n" +"PO-Revision-Date: 2015-11-14 18:31+0100\n" "Last-Translator: Christian Schoenebeck <christian.schoenebeck@gmail.com>\n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.7.5\n" +"X-Generator: Poedit 1.8.6\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Basepath: .\n" @@ -70,6 +70,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "Standard Benutzer sollten diese Einstellung nicht ändern." +msgid "Change provider" +msgstr "Anbieter wechseln" + msgid "Check Interval" msgstr "Prüfinterval" @@ -125,6 +128,12 @@ msgstr "Eigenes Update-Skript" msgid "DDNS Autostart disabled" msgstr "DDNS Autostart deaktiviert" +msgid "DDNS Client Configuration" +msgstr "DDNS Client Konfiguration" + +msgid "DDNS Client Documentation" +msgstr "DDNS Client Dokumentation" + msgid "DDNS Service provider" msgstr "DDNS-Dienstanbieter" @@ -196,6 +205,9 @@ msgstr "" msgid "Disabled" msgstr "Deaktiviert" +msgid "Domain" +msgstr "Domäne" + msgid "Dynamic DNS" msgstr "Dynamisches DNS" @@ -284,8 +296,10 @@ msgstr "HTTPS nicht unterstützt" msgid "Hints" msgstr "Hinweise" -msgid "Hostname/Domain" -msgstr "Rechnername/Domäne" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" +"Hostname/FQDN um zu überprüfen, ob eine Aktualisierung stattgefunden hat " +"oder notwendig ist" msgid "IP address source" msgstr "IP-Adressquelle" @@ -385,6 +399,12 @@ msgstr "Protokoll in Datei schreiben" msgid "Log to syslog" msgstr "Systemprotokoll verwenden" +msgid "Lookup Hostname" +msgstr "Nachschlage-Hostname" + +msgid "NOT installed" +msgstr "NICHT installiert" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -454,6 +474,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "Das Skript wird nach der gegebenen Anzahl von Fehlversuchen beendet." +msgid "OpenWrt Wiki" +msgstr "OpenWrt Wiki" + +msgid "Optional Encoded Parameter" +msgstr "Optionaler codierten Parameter" + +msgid "Optional Parameter" +msgstr "Optionaler Parameter" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (URL-codiert)" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (NICHT URL-codiert)" + msgid "Overview" msgstr "Übersicht" @@ -484,17 +519,20 @@ msgstr "Prozess ID" msgid "Read / Reread log file" msgstr "Protokolldatei (neu) einlesen" +msgid "Really change DDNS provider?" +msgstr "Wirklich DDNS-Anbieter wechseln?" + msgid "Registered IP" msgstr "Registrierte IP" msgid "Replaces [DOMAIN] in Update-URL" msgstr "Ersetzt [DOMAIN] in der Update-URL" -msgid "Replaces [PASSWORD] in Update-URL" -msgstr "Ersetzt [PASSWORD] in der Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "Ersetzt [PASSWORD] in der Update-URL (URL-codiert)" -msgid "Replaces [USERNAME] in Update-URL" -msgstr "Ersetzt [USERNAME] in der Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "Ersetzt [USERNAME] in der Update-URL (URL-codiert)" msgid "Run once" msgstr "Einmalig ausführen" @@ -528,7 +566,7 @@ msgstr "" "Optionen." msgid "The default setting of '0' will retry infinite." -msgstr "Der Standard-Wert von '0' wird es endlosen erneut versuchen." +msgstr "Beim Standard-Wert von '0' wird es endlos erneut versucht." msgid "There is no service configured." msgstr "Kein Dienst konfiguriert" @@ -661,8 +699,8 @@ msgstr "Stunden" msgid "installed" msgstr "installiert" -msgid "invalid - Sample" -msgstr "ungültig - Beispiel" +msgid "invalid FQDN / required - Sample" +msgstr "ungültige FQDN / Pflichtfeld - Beispiel" msgid "minimum value '0'" msgstr "Minimum Wert '0'" diff --git a/applications/luci-app-ddns/po/el/ddns.po b/applications/luci-app-ddns/po/el/ddns.po index edbe19d14..a8bb5d678 100644 --- a/applications/luci-app-ddns/po/el/ddns.po +++ b/applications/luci-app-ddns/po/el/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Δυναμικό DNS" @@ -245,7 +257,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -330,6 +342,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -388,6 +406,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -418,16 +451,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -459,6 +495,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -575,7 +614,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/en/ddns.po b/applications/luci-app-ddns/po/en/ddns.po index b706fa29e..5cfaee31f 100644 --- a/applications/luci-app-ddns/po/en/ddns.po +++ b/applications/luci-app-ddns/po/en/ddns.po @@ -61,6 +61,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -107,6 +110,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -160,6 +169,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dynamic DNS" @@ -243,7 +255,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -328,6 +340,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -386,6 +404,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -416,16 +449,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -457,6 +493,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -573,7 +612,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/es/ddns.po b/applications/luci-app-ddns/po/es/ddns.po index 1948155d2..7d96297fe 100644 --- a/applications/luci-app-ddns/po/es/ddns.po +++ b/applications/luci-app-ddns/po/es/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS dinámico" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/fr/ddns.po b/applications/luci-app-ddns/po/fr/ddns.po index 94b61b695..67535c6c8 100644 --- a/applications/luci-app-ddns/po/fr/ddns.po +++ b/applications/luci-app-ddns/po/fr/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS Dynamique" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/he/ddns.po b/applications/luci-app-ddns/po/he/ddns.po index a6d20303b..ed696d75b 100644 --- a/applications/luci-app-ddns/po/he/ddns.po +++ b/applications/luci-app-ddns/po/he/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -111,6 +114,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -164,6 +173,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS דינאמי" @@ -247,7 +259,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -332,6 +344,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -390,6 +408,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -420,16 +453,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -461,6 +497,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -577,7 +616,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/hu/ddns.po b/applications/luci-app-ddns/po/hu/ddns.po index fdd9a17a8..6cb398096 100644 --- a/applications/luci-app-ddns/po/hu/ddns.po +++ b/applications/luci-app-ddns/po/hu/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -110,6 +113,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -163,6 +172,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dinamikus DNS" @@ -246,7 +258,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -331,6 +343,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -389,6 +407,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -419,16 +452,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -460,6 +496,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -576,7 +615,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/it/ddns.po b/applications/luci-app-ddns/po/it/ddns.po index 48e680912..5ba86edda 100644 --- a/applications/luci-app-ddns/po/it/ddns.po +++ b/applications/luci-app-ddns/po/it/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS Dinamico" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/ja/ddns.po b/applications/luci-app-ddns/po/ja/ddns.po index 488bac990..04967f988 100644 --- a/applications/luci-app-ddns/po/ja/ddns.po +++ b/applications/luci-app-ddns/po/ja/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "ダイナミックDNS" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/ms/ddns.po b/applications/luci-app-ddns/po/ms/ddns.po index 5b7f0dea6..83cef949b 100644 --- a/applications/luci-app-ddns/po/ms/ddns.po +++ b/applications/luci-app-ddns/po/ms/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "" @@ -242,7 +254,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -327,6 +339,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -385,6 +403,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -415,16 +448,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -456,6 +492,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -572,7 +611,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/no/ddns.po b/applications/luci-app-ddns/po/no/ddns.po index b805aa4f8..303972c7b 100644 --- a/applications/luci-app-ddns/po/no/ddns.po +++ b/applications/luci-app-ddns/po/no/ddns.po @@ -53,6 +53,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -99,6 +102,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -152,6 +161,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dynamisk DNS" @@ -235,7 +247,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -320,6 +332,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -378,6 +396,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -408,16 +441,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -449,6 +485,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -565,7 +604,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/pl/ddns.po b/applications/luci-app-ddns/po/pl/ddns.po index e016cc4a4..53bbb9fae 100644 --- a/applications/luci-app-ddns/po/pl/ddns.po +++ b/applications/luci-app-ddns/po/pl/ddns.po @@ -63,6 +63,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -109,6 +112,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -162,6 +171,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dynamiczny DNS" @@ -245,7 +257,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -330,6 +342,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -388,6 +406,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -418,16 +451,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -459,6 +495,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -575,7 +614,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/pt-br/ddns.po b/applications/luci-app-ddns/po/pt-br/ddns.po index df2fff538..bfd1af2de 100644 --- a/applications/luci-app-ddns/po/pt-br/ddns.po +++ b/applications/luci-app-ddns/po/pt-br/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -108,6 +111,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -161,6 +170,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS Dinâmico" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/pt/ddns.po b/applications/luci-app-ddns/po/pt/ddns.po index 57654928d..b24e68545 100644 --- a/applications/luci-app-ddns/po/pt/ddns.po +++ b/applications/luci-app-ddns/po/pt/ddns.po @@ -62,6 +62,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -109,6 +112,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -162,6 +171,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS Dinâmico" @@ -246,7 +258,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -331,6 +343,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -389,6 +407,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -419,16 +452,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -460,6 +496,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -576,7 +615,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/ro/ddns.po b/applications/luci-app-ddns/po/ro/ddns.po index 78c39d5e9..9d9268858 100644 --- a/applications/luci-app-ddns/po/ro/ddns.po +++ b/applications/luci-app-ddns/po/ro/ddns.po @@ -65,6 +65,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -111,6 +114,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -164,6 +173,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "DNS dinamic" @@ -247,7 +259,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -332,6 +344,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -390,6 +408,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -420,16 +453,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -461,6 +497,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -577,7 +616,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/ru/ddns.po b/applications/luci-app-ddns/po/ru/ddns.po index d4c0eb4a8..2f967802f 100644 --- a/applications/luci-app-ddns/po/ru/ddns.po +++ b/applications/luci-app-ddns/po/ru/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -110,6 +113,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -163,6 +172,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Динамический DNS" @@ -246,7 +258,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -331,6 +343,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -389,6 +407,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -419,16 +452,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -460,6 +496,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -576,7 +615,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/sk/ddns.po b/applications/luci-app-ddns/po/sk/ddns.po index 3cd0f4c2c..c825a5692 100644 --- a/applications/luci-app-ddns/po/sk/ddns.po +++ b/applications/luci-app-ddns/po/sk/ddns.po @@ -57,6 +57,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -103,6 +106,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -156,6 +165,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "" @@ -237,7 +249,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -322,6 +334,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -380,6 +398,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -410,16 +443,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -451,6 +487,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -567,7 +606,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/sv/ddns.po b/applications/luci-app-ddns/po/sv/ddns.po index cee36e725..b46c22bb5 100644 --- a/applications/luci-app-ddns/po/sv/ddns.po +++ b/applications/luci-app-ddns/po/sv/ddns.po @@ -58,6 +58,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -104,6 +107,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -157,6 +166,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "" @@ -238,7 +250,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -323,6 +335,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -381,6 +399,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -411,16 +444,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -452,6 +488,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -568,7 +607,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/templates/ddns.pot b/applications/luci-app-ddns/po/templates/ddns.pot index 35386802b..7ab51dd93 100644 --- a/applications/luci-app-ddns/po/templates/ddns.pot +++ b/applications/luci-app-ddns/po/templates/ddns.pot @@ -50,6 +50,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -96,6 +99,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -149,6 +158,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "" @@ -230,7 +242,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -315,6 +327,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -373,6 +391,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -403,16 +436,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -563,7 +599,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/tr/ddns.po b/applications/luci-app-ddns/po/tr/ddns.po index 10492bccc..8df9a9511 100644 --- a/applications/luci-app-ddns/po/tr/ddns.po +++ b/applications/luci-app-ddns/po/tr/ddns.po @@ -64,6 +64,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -110,6 +113,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -163,6 +172,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "" @@ -244,7 +256,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -329,6 +341,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -387,6 +405,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -417,16 +450,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -458,6 +494,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -574,7 +613,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/uk/ddns.po b/applications/luci-app-ddns/po/uk/ddns.po index 0e2c5804a..1c44ef2d2 100644 --- a/applications/luci-app-ddns/po/uk/ddns.po +++ b/applications/luci-app-ddns/po/uk/ddns.po @@ -65,6 +65,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -111,6 +114,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -164,6 +173,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Динамічний DNS" @@ -247,7 +259,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -332,6 +344,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -390,6 +408,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -420,16 +453,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -461,6 +497,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -577,7 +616,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/vi/ddns.po b/applications/luci-app-ddns/po/vi/ddns.po index 5d5a7ede7..66f7c2c42 100644 --- a/applications/luci-app-ddns/po/vi/ddns.po +++ b/applications/luci-app-ddns/po/vi/ddns.po @@ -63,6 +63,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -110,6 +113,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -163,6 +172,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "Dynamic DNS" @@ -247,7 +259,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -332,6 +344,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -390,6 +408,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -420,16 +453,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -461,6 +497,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -577,7 +616,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-ddns/po/zh-cn/ddns.po b/applications/luci-app-ddns/po/zh-cn/ddns.po index 862c2a052..b1a636adf 100644 --- a/applications/luci-app-ddns/po/zh-cn/ddns.po +++ b/applications/luci-app-ddns/po/zh-cn/ddns.po @@ -12,6 +12,9 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.7.5\n" +msgid "&" +msgstr "" + msgid "-- custom --" msgstr "-- 自定义 --" @@ -30,10 +33,13 @@ msgstr "正在应用更改" msgid "Basic Settings" msgstr "基础设置" -msgid "Below a list of configuration tips for your system to run Dynamic DNS updates without limitations" +msgid "" +"Below a list of configuration tips for your system to run Dynamic DNS " +"updates without limitations" msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士." -msgid "Below is a list of configured DDNS configurations and their current state." +msgid "" +"Below is a list of configured DDNS configurations and their current state." msgstr "一下是当前已经配置好的DDNS设置项列表以及它们的当前状态." msgid "Bind Network" @@ -42,15 +48,22 @@ msgstr "使用的接口" msgid "Binding to a specific network not supported" msgstr "不支持绑定到一个指定的网络" -msgid "BusyBox's nslookup and Wget do not support to specify the IP version to use for communication with DDNS Provider." +msgid "" +"BusyBox's nslookup and Wget do not support to specify the IP version to use " +"for communication with DDNS Provider." msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本." -msgid "BusyBox's nslookup does not support to specify to use TCP instead of default UDP when requesting DNS server" +msgid "" +"BusyBox's nslookup does not support to specify to use TCP instead of default " +"UDP when requesting DNS server" msgstr "BusyBox的nslookup不支持使用TCP协议代替UDP协议请求DNS记录" msgid "Casual users should not change this setting" msgstr "普通用户不应该改变这个设置" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "检查时间周期" @@ -63,7 +76,9 @@ msgstr "配置错误" msgid "Configuration" msgstr "设置" -msgid "Configure here the details for all Dynamic DNS services including this LuCI application." +msgid "" +"Configure here the details for all Dynamic DNS services including this LuCI " +"application." msgstr "在这里修改动态DNS服务的详细配置" msgid "Configure here the details for selected Dynamic DNS service." @@ -72,11 +87,20 @@ msgstr "在这里修改选择的DDNS服务的详细配置" msgid "Current setting" msgstr "当前设置" -msgid "Currently DDNS updates are not started at boot or on interface events.<br />This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')" -msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话(例如使用cron时把force_interval设置为0),这是默认设置." +msgid "" +"Currently DDNS updates are not started at boot or on interface events.<br /" +">This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话" +"(例如使用cron时把force_interval设置为0),这是默认设置." -msgid "Currently DDNS updates are not started at boot or on interface events.<br />You can start/stop each configuration here. It will run until next reboot." -msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个设置的条目.它在下次重启之前一直有效." +msgid "" +"Currently DDNS updates are not started at boot or on interface events.<br /" +">You can start/stop each configuration here. It will run until next reboot." +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个" +"设置的条目.它在下次重启之前一直有效." msgid "Custom update script to be used for updating your DDNS Provider." msgstr "用来更新动态DNS的自定义脚本" @@ -90,6 +114,12 @@ msgstr "自定义更新脚本" msgid "DDNS Autostart disabled" msgstr "DDNS自动启动已禁用." +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "DDNS服务提供商" @@ -117,10 +147,14 @@ msgstr "设定用来读取系统IPv4地址的网络" msgid "Defines the network to read systems IPv6-Address from" msgstr "设定用来读取系统IPv6地址的网络" -msgid "Defines the source to read systems IPv4-Address from, that will be send to the DDNS provider" +msgid "" +"Defines the source to read systems IPv4-Address from, that will be send to " +"the DDNS provider" msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商" -msgid "Defines the source to read systems IPv6-Address from, that will be send to the DDNS provider" +msgid "" +"Defines the source to read systems IPv6-Address from, that will be send to " +"the DDNS provider" msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商" msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider" @@ -132,16 +166,22 @@ msgstr "详情:" msgid "Directory contains Log files for each running section" msgstr "保存每一个运行中的设置的运行日志的目录" -msgid "Directory contains PID and other status information for each running section" +msgid "" +"Directory contains PID and other status information for each running section" msgstr "保存每个运行中的设置的PID以及其它状态信息的目录" msgid "Disabled" msgstr "已禁用" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "动态DNS" -msgid "Dynamic DNS allows that your router can be reached with a fixed hostname while having a dynamically changing IP address." +msgid "" +"Dynamic DNS allows that your router can be reached with a fixed hostname " +"while having a dynamically changing IP address." msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名." msgid "Enable secure communication with DDNS provider" @@ -171,8 +211,12 @@ msgstr "文件未找到" msgid "File not found or empty" msgstr "文件未找到或为空" -msgid "Follow this link<br />You will find more hints to optimize your system to run DDNS scripts with all options" -msgstr "打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS脚本的提示." +msgid "" +"Follow this link<br />You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" +"打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS" +"脚本的提示." msgid "For detailed information about parameter settings look here." msgstr "请看这里获得关于参数设置的详细信息" @@ -201,7 +245,9 @@ msgstr "格式" msgid "Format: IP or FQDN" msgstr "格式:IP或者FQDN" -msgid "GNU Wget will use the IP of given network, cURL will use the physical interface." +msgid "" +"GNU Wget will use the IP of given network, cURL will use the physical " +"interface." msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口" msgid "Global Settings" @@ -213,8 +259,8 @@ msgstr "不支持HTTPS" msgid "Hints" msgstr "提示" -msgid "Hostname/Domain" -msgstr "主机名/域名" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" +msgstr "" msgid "IP address source" msgstr "IP地址来源" @@ -228,8 +274,13 @@ msgstr "IPv4地址" msgid "IPv6 address must be given in square brackets" msgstr "IPv6地址必须填写在中括号(\"[ ]\")内" -msgid "IPv6 is currently not (fully) supported by this system<br />Please follow the instructions on OpenWrt's homepage to enable IPv6 support<br />or update your system to the latest OpenWrt Release" -msgstr "当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持<br />或者更新你的系统到最新OpenWrt版本" +msgid "" +"IPv6 is currently not (fully) supported by this system<br />Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update " +"your system to the latest OpenWrt Release" +msgstr "" +"当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持" +"<br />或者更新你的系统到最新OpenWrt版本" msgid "IPv6 not supported" msgstr "IPv6不被支持" @@ -240,13 +291,21 @@ msgstr "IPv6地址" msgid "If both cURL and GNU Wget are installed, Wget is used by default." msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用." -msgid "If this service section is disabled it could not be started.<br />Neither from LuCI interface nor from console" -msgstr "如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端." +msgid "" +"If this service section is disabled it could not be started.<br />Neither " +"from LuCI interface nor from console" +msgstr "" +"如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端." -msgid "If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" -msgstr "如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例如'myddns_ipv4'和'myddns_ipv6')" +msgid "" +"If you want to send updates for IPv4 and IPv6 you need to define two " +"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'" +msgstr "" +"如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例" +"如'myddns_ipv4'和'myddns_ipv6')" -msgid "In some versions cURL/libcurl in OpenWrt is compiled without proxy support." +msgid "" +"In some versions cURL/libcurl in OpenWrt is compiled without proxy support." msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持" msgid "Info" @@ -255,11 +314,18 @@ msgstr "信息" msgid "Interface" msgstr "接口" -msgid "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds are not supported" +msgid "" +"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds " +"are not supported" msgstr "检查IP是否改变的时间隔<br />不支持低于5分钟(300秒)的数值." -msgid "Interval to force updates send to DDNS Provider<br />Setting this parameter to 0 will force the script to only run once<br />Values lower 'Check Interval' except '0' are not supported" -msgstr "强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次<br />不支持低于\"检查时间周期\"的数值(除了0)." +msgid "" +"Interval to force updates send to DDNS Provider<br />Setting this parameter " +"to 0 will force the script to only run once<br />Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" +"强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次" +"<br />不支持低于\"检查时间周期\"的数值(除了0)." msgid "It is NOT recommended for casual users to change settings on this page." msgstr "强烈不建议初次使用的用户修改本页设定." @@ -285,10 +351,20 @@ msgstr "把日志记录到文件" msgid "Log to syslog" msgstr "把日志记录到系统日志" -msgid "Neither GNU Wget with SSL nor cURL installed to select a network to use for communication." +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + +msgid "" +"Neither GNU Wget with SSL nor cURL installed to select a network to use for " +"communication." msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信." -msgid "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS protocol." +msgid "" +"Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS " +"protocol." msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS" msgid "Network" @@ -339,6 +415,21 @@ msgstr "当出错时,脚本将会重试失败的动作的次数" msgid "On Error the script will stop execution after given number of retrys" msgstr "当出错时,脚本将会重试该次数之后退出" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "总览" @@ -369,17 +460,20 @@ msgstr "处理ID" msgid "Read / Reread log file" msgstr "读取/重新读取日志文件" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "已注册的IP地址" msgid "Replaces [DOMAIN] in Update-URL" msgstr "在更新URL中使用[DOMAIN]替换域名" -msgid "Replaces [PASSWORD] in Update-URL" -msgstr "在更新URL中使用[PASSWORD]替换密码" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" +msgstr "" -msgid "Replaces [USERNAME] in Update-URL" -msgstr "在更新URL中使用[USERNAME]替换用户名" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" +msgstr "" msgid "Run once" msgstr "运行一次" @@ -405,9 +499,14 @@ msgstr "状态目录" msgid "Stopped" msgstr "已停止" -msgid "The currently installed 'ddns-scripts' package did not support all available settings." +msgid "" +"The currently installed 'ddns-scripts' package did not support all available " +"settings." msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "没有已经配置好的服务项" @@ -429,8 +528,11 @@ msgstr "用于检测的URL" msgid "Unknown error" msgstr "未知错误" -msgid "Update URL to be used for updating your DDNS Provider.<br />Follow instructions you will find on their WEB page." -msgstr "DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL." +msgid "" +"Update URL to be used for updating your DDNS Provider.<br />Follow " +"instructions you will find on their WEB page." +msgstr "" +"DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL." msgid "Update error" msgstr "更新错误" @@ -462,10 +564,13 @@ msgstr "正在应用更改..." msgid "Warning" msgstr "等待" -msgid "Writes detailed messages to log file. File will be truncated automatically." +msgid "" +"Writes detailed messages to log file. File will be truncated automatically." msgstr "向日志中写入详细信息.文件将会被自动减小." -msgid "Writes log messages to syslog. Critical Errors will always be written to syslog." +msgid "" +"Writes log messages to syslog. Critical Errors will always be written to " +"syslog." msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志" msgid "You should install BIND host package for DNS requests." @@ -519,8 +624,8 @@ msgstr "小时" msgid "installed" msgstr "已安装" -msgid "invalid - Sample" -msgstr "不合法 - 示例" +msgid "invalid FQDN / required - Sample" +msgstr "" msgid "minimum value '0'" msgstr "最小值0" @@ -599,3 +704,15 @@ msgstr "未指定的错误" msgid "use hostname, FQDN, IPv4- or IPv6-Address" msgstr "使用主机名或IPv4/IPv6地址" + +#~ msgid "Hostname/Domain" +#~ msgstr "主机名/域名" + +#~ msgid "Replaces [PASSWORD] in Update-URL" +#~ msgstr "在更新URL中使用[PASSWORD]替换密码" + +#~ msgid "Replaces [USERNAME] in Update-URL" +#~ msgstr "在更新URL中使用[USERNAME]替换用户名" + +#~ msgid "invalid - Sample" +#~ msgstr "不合法 - 示例" diff --git a/applications/luci-app-ddns/po/zh-tw/ddns.po b/applications/luci-app-ddns/po/zh-tw/ddns.po index ec930f432..767136600 100644 --- a/applications/luci-app-ddns/po/zh-tw/ddns.po +++ b/applications/luci-app-ddns/po/zh-tw/ddns.po @@ -60,6 +60,9 @@ msgstr "" msgid "Casual users should not change this setting" msgstr "" +msgid "Change provider" +msgstr "" + msgid "Check Interval" msgstr "" @@ -106,6 +109,12 @@ msgstr "" msgid "DDNS Autostart disabled" msgstr "" +msgid "DDNS Client Configuration" +msgstr "" + +msgid "DDNS Client Documentation" +msgstr "" + msgid "DDNS Service provider" msgstr "" @@ -159,6 +168,9 @@ msgstr "" msgid "Disabled" msgstr "" +msgid "Domain" +msgstr "" + msgid "Dynamic DNS" msgstr "動態DNS" @@ -241,7 +253,7 @@ msgstr "" msgid "Hints" msgstr "" -msgid "Hostname/Domain" +msgid "Hostname/FQDN to validate, if IP update happen or necessary" msgstr "" msgid "IP address source" @@ -326,6 +338,12 @@ msgstr "" msgid "Log to syslog" msgstr "" +msgid "Lookup Hostname" +msgstr "" + +msgid "NOT installed" +msgstr "" + msgid "" "Neither GNU Wget with SSL nor cURL installed to select a network to use for " "communication." @@ -384,6 +402,21 @@ msgstr "" msgid "On Error the script will stop execution after given number of retrys" msgstr "" +msgid "OpenWrt Wiki" +msgstr "" + +msgid "Optional Encoded Parameter" +msgstr "" + +msgid "Optional Parameter" +msgstr "" + +msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)" +msgstr "" + +msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)" +msgstr "" + msgid "Overview" msgstr "" @@ -414,16 +447,19 @@ msgstr "" msgid "Read / Reread log file" msgstr "" +msgid "Really change DDNS provider?" +msgstr "" + msgid "Registered IP" msgstr "" msgid "Replaces [DOMAIN] in Update-URL" msgstr "" -msgid "Replaces [PASSWORD] in Update-URL" +msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)" msgstr "" -msgid "Replaces [USERNAME] in Update-URL" +msgid "Replaces [USERNAME] in Update-URL (URL-encoded)" msgstr "" msgid "Run once" @@ -455,6 +491,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" @@ -571,7 +610,7 @@ msgstr "" msgid "installed" msgstr "" -msgid "invalid - Sample" +msgid "invalid FQDN / required - Sample" msgstr "" msgid "minimum value '0'" diff --git a/applications/luci-app-diag-core/luasrc/view/diag/index.htm b/applications/luci-app-diag-core/luasrc/view/diag/index.htm index 328c4eccb..c66776771 100644 --- a/applications/luci-app-diag-core/luasrc/view/diag/index.htm +++ b/applications/luci-app-diag-core/luasrc/view/diag/index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:Diagnostics%></a></h2> +<h2 name="content"><%:Diagnostics%></h2> <p><%:The entries in the menu allow you to perform diagnostic tests on your system to aid in troubleshooting.%></p> <p><%:The diagnostics available under this menu depend on what modules you have installed on your device.%></p> <%+footer%> diff --git a/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm b/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm index 595cc5f5f..3d01453e4 100644 --- a/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm +++ b/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:Diagnostics%></a></h2> +<h2 name="content"><%:Diagnostics%></h2> <p><%:With this menu you can configure network diagnostics, such as network device scans and ping tests.%></p> <p><%:The diagnostics available under this menu depend on what modules you have installed on your device.%></p> <%+footer%> diff --git a/applications/luci-app-diag-devinfo/Makefile b/applications/luci-app-diag-devinfo/Makefile index 258fdee60..0424fffa0 100644 --- a/applications/luci-app-diag-devinfo/Makefile +++ b/applications/luci-app-diag-devinfo/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Diagnostics Tools (Device Info) -LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo +LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN include ../../luci.mk diff --git a/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua b/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua index 6015ffe1f..4470a0d2f 100644 --- a/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua +++ b/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua @@ -1,4 +1,4 @@ --- Copyright 2014 Álvaro Fernández Rojas <noltari@gmail.com> +-- Copyright 2014-2015 Álvaro Fernández Rojas <noltari@gmail.com> -- Licensed to the public under the Apache License 2.0. m = Map("dump1090", "dump1090", translate("dump1090 is a Mode S decoder specifically designed for RTLSDR devices, here you can configure the settings.")) @@ -12,6 +12,7 @@ enable.enabled="0" enable.disabled="1" enable.default = "1" enable.rmempty = false + respawn=s:option(Flag, "respawn", translate("Respawn")) respawn.default = false @@ -34,6 +35,15 @@ ifile=s:option(Value, "ifile", translate("Data file")) ifile.rmempty = true ifile.datatype = "file" +iformat=s:option(ListValue, "iformat", translate("Sample format for data file")) +iformat:value("", translate("Default")) +iformat:value("UC8") +iformat:value("SC16") +iformat:value("SC16Q11") + +throttle=s:option(Flag, "throttle", translate("When reading from a file play back in realtime, not at max speed")) +throttle.default = false + raw=s:option(Flag, "raw", translate("Show only messages hex values")) raw.default = false @@ -76,13 +86,17 @@ net_bo_port=s:option(Value, "net_bo_port", translate("TCP Beast output listen po net_bo_port.rmempty = true net_bo_port.datatype = "port" +net_fatsv_port=s:option(Value, "net_fatsv_port", translate("FlightAware TSV output port")) +net_fatsv_port.rmempty = true +net_fatsv_port.datatype = "port" + net_ro_size=s:option(Value, "net_ro_size", translate("TCP raw output minimum size")) net_ro_size.rmempty = true net_ro_size.datatype = "uinteger" -net_ro_rate=s:option(Value, "net_ro_rate", translate("TCP raw output memory flush rate")) -net_ro_rate.rmempty = true -net_ro_rate.datatype = "uinteger" +net_ro_interval=s:option(Value, "net_ro_interval", translate("TCP raw output memory flush rate in seconds")) +net_ro_interval.rmempty = true +net_ro_interval.datatype = "uinteger" net_heartbeat=s:option(Value, "net_heartbeat", translate("TCP heartbeat rate in seconds")) net_heartbeat.rmempty = true @@ -92,13 +106,23 @@ net_buffer=s:option(Value, "net_buffer", translate("TCP buffer size 64Kb * (2^n) net_buffer.rmempty = true net_buffer.datatype = "uinteger" +net_verbatim=s:option(Flag, "net_verbatim", translate("Do not apply CRC corrections to messages we forward")) +net_verbatim.default = false + +forward_mlat=s:option(Flag, "forward_mlat", translate("Allow forwarding of received mlat results to output ports")) +forward_mlat.default = false + lat=s:option(Value, "lat", translate("Reference/receiver latitude for surface posn")) lat.rmempty = true -lat.datatype = "integer" +lat.datatype = "float" lon=s:option(Value, "lon", translate("Reference/receiver longitude for surface posn")) lon.rmempty = true -lon.datatype = "integer" +lon.datatype = "float" + +max_range=s:option(Value, "max_range", translate("Absolute maximum range for position decoding")) +max_range.rmempty = true +max_range.datatype = "uinteger" fix=s:option(Flag, "fix", translate("Enable single-bits error correction using CRC")) fix.default = false @@ -121,6 +145,9 @@ mlat.default = false stats=s:option(Flag, "stats", translate("Print stats at exit")) stats.default = false +stats_range=s:option(Flag, "stats_range", translate("Collect/show range histogram")) +stats_range.default = false + stats_every=s:option(Value, "stats_every", translate("Show and reset stats every seconds")) stats_every.rmempty = true stats_every.datatype = "uinteger" @@ -131,15 +158,42 @@ onlyaddr.default = false metric=s:option(Flag, "metric", translate("Use metric units")) metric.default = false -snip=s:option(Flag, "snip", translate("Strip IQ file removing samples")) +snip=s:option(Value, "snip", translate("Strip IQ file removing samples")) snip.rmempty = true snip.datatype = "uinteger" -debug_mode=s:option(Flag, "debug", translate("Debug mode flags")) +debug_mode=s:option(Value, "debug", translate("Debug mode flags")) debug_mode.rmempty = true -ppm=s:option(Flag, "ppm", translate("Set receiver error in parts per million")) +ppm=s:option(Value, "ppm", translate("Set receiver error in parts per million")) ppm.rmempty = true ppm.datatype = "uinteger" +html_dir=s:option(Value, "html_dir", translate("Base directory for the internal HTTP server")) +html_dir.rmempty = true +html_dir.datatype = "directory" + +write_json=s:option(Value, "write_json", translate("Periodically write json output to a directory")) +write_json.rmempty = true +write_json.datatype = "directory" + +write_json_every=s:option(Flag, "write_json_every", translate("Write json output every t seconds")) +write_json_every.rmempty = true +write_json_every.datatype = "uinteger" + +json_location_accuracy=s:option(ListValue, "json_location_accuracy", translate("Accuracy of receiver location in json metadata")) +json_location_accuracy:value("", translate("Default")) +json_location_accuracy:value("0", "No location") +json_location_accuracy:value("1", "Approximate") +json_location_accuracy:value("2", "Exact") + +oversample=s:option(Flag, "oversample", translate("Use the 2.4MHz demodulator")) +oversample.default = false + +dcfilter=s:option(Flag, "dcfilter", translate("Apply a 1Hz DC filter to input data")) +dcfilter.default = false + +measure_noise=s:option(Flag, "measure_noise", translate("Measure noise power")) +measure_noise.default = false + return m diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua index 0cb30b5cd..60af531d5 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/rule-details.lua @@ -316,4 +316,34 @@ else translate("Passes additional arguments to iptables. Use with care!")) end +o = s:option(MultiValue, "weekdays", translate("Week Days")) +o.oneline = true +o.widget = "checkbox" +o:value("sun", translate("Sunday")) +o:value("mon", translate("Monday")) +o:value("tue", translate("Tuesday")) +o:value("wed", translate("Wednesday")) +o:value("thu", translate("Thursday")) +o:value("fri", translate("Friday")) +o:value("sat", translate("Saturday")) + +o = s:option(MultiValue, "monthdays", translate("Month Days")) +o.oneline = true +o.widget = "checkbox" +for i = 1,31 do + o:value(translate(i)) +end + +o = s:option(Value, "start_time", translate("Start Time (hh:mm:ss)")) +o.datatype = "timehhmmss" +o = s:option(Value, "stop_time", translate("Stop Time (hh:mm:ss)")) +o.datatype = "timehhmmss" +o = s:option(Value, "start_date", translate("Start Date (yyyy-mm-dd)")) +o.datatype = "dateyyyymmdd" +o = s:option(Value, "stop_date", translate("Stop Date (yyyy-mm-dd)")) +o.datatype = "dateyyyymmdd" + +o = s:option(Flag, "utc_time", translate("Time in UTC")) +o.default = o.disabled + return m diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua index 46b374440..c8b8f22bd 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua @@ -60,7 +60,7 @@ s:tab("advanced", translate("Advanced Settings")) name = s:taboption("general", Value, "name", translate("Name")) name.optional = false name.forcewrite = true -name.datatype = "uciname" +name.datatype = "and(uciname,maxlength(11))" function name.write(self, section, value) if zone:name() ~= value then @@ -76,15 +76,6 @@ function name.write(self, section, value) } end -function name.validate(self, value) - -- fw3 defines 14 as the maximum length of zone name - if #value > 14 then - return nil, translate("Zone name is too long") - else - return value - end -end - p = { s:taboption("general", ListValue, "input", translate("Input")), s:taboption("general", ListValue, "output", translate("Output")), diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po index 18be74d23..2ccd25ccc 100644 --- a/applications/luci-app-firewall/po/pl/firewall.po +++ b/applications/luci-app-firewall/po/pl/firewall.po @@ -301,7 +301,7 @@ msgid "Restrict Masquerading to given destination subnets" msgstr "Ogranicz maskaradę do wskazanych sieci docelowych" msgid "Restrict Masquerading to given source subnets" -msgstr "Ogranicz maskaradę do wskazanych sieci żródłowych" +msgstr "Ogranicz maskaradę do wskazanych sieci źródłowych" # Wstawiłem rodzinę gdyż gdzieś wcześniej było tak opisane ale klasa pasuje mi tu bardziej. # Obsy - niestety ale "rodzina". W gui dotyczy to wyboru IPv4/IPv6, więc "rodzina" a nie klasa. @@ -317,7 +317,7 @@ msgid "" "Rewrite matched traffic to the given source port. May be left empty to only " "rewrite the IP address." msgstr "" -"Przepisz dopasowany ruch do danego portu żródłowego. Można zostawić puste " +"Przepisz dopasowany ruch do danego portu źródłowego. Można zostawić puste " "aby przepisać tylko adres IP" msgid "Rewrite to source %s" @@ -339,7 +339,7 @@ msgid "Source MAC address" msgstr "Źródłowy adres MAC" msgid "Source NAT" -msgstr "NAT żródłowy" +msgstr "NAT źródłowy" # http://www.digipedia.pl/def/doc/id/677604507/name/SNAT/ msgid "" @@ -348,7 +348,7 @@ msgid "" "multiple WAN addresses to internal subnets." msgstr "" "SNAT używany jest wtedy, gdy zmieniane są adresy pakietów połączenia " -"wychodzącego, czyli pakiety żródłowe. Wykonywany jest zawsze po routowaniu " +"wychodzącego, czyli pakiety źródłowe. Wykonywany jest zawsze po routowaniu " "(POSTROUTING), a więc w chwili, gdy pakiety są gotowe opuścić host. " "IPmasquerading jest formą SNAT." diff --git a/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm b/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm index 2f4914e5d..fe205d053 100644 --- a/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm +++ b/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm @@ -34,7 +34,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") legend.parentNode.style.display = 'block'; legend.style.display = 'inline'; - stxhr.get('<%=luci.dispatcher.build_url("freifunk", "status")%>/diag_' + tool + protocol + '/' + addr, null, + stxhr.get('<%=url('freifunk/status')%>/diag_' + tool + protocol + '/' + addr, null, function(x) { if (x.responseText) @@ -55,7 +55,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") <form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Diagnostics%></a></h2> + <h2 name="content"><%:Diagnostics%></h2> <fieldset class="cbi-section"> <legend><%:Network Utilities%></legend> diff --git a/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm b/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm index e319f15fb..f2e2fb906 100644 --- a/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm +++ b/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm @@ -33,7 +33,7 @@ end <div id="<%=name%>" style="width:<%=width%>;float:left"> <h2><%=title%></h2> <div id="form_<%=name%>"> - <form name="searchform" id="search_<%=name%>" action="<%=luci.dispatcher.build_url('freifunk', 'search_redirect')%>"> + <form name="searchform" id="search_<%=name%>" action="<%=url('freifunk/search_redirect')%>"> <input type="text" name="searchterms" style="margin-bottom:15px; width: 90%"><br /> <% local checked = " checked" diff --git a/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm b/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm index 234f90934..d861ef9fc 100644 --- a/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm +++ b/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ -XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "telephony", "status")%>', null, +XHR.poll(5, '<%=url('admin/telephony/status')%>', null, function(x, st) { var tb = document.getElementById('telephony_status_table'); diff --git a/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm b/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm index 098a72a07..866eded03 100644 --- a/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm +++ b/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin/services/minidlna_status")%>', null, + XHR.poll(5, '<%=url("admin/services/minidlna_status")%>', null, function(x, st) { var tb = document.getElementById('minidlna_status'); diff --git a/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot b/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot index 5cd722f3a..ecb374d7f 100644 --- a/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot +++ b/applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot @@ -37,9 +37,15 @@ msgstr "" msgid "Drop frames smaller then this limit" msgstr "" +msgid "Enable MJPG-streamer" +msgstr "" + msgid "Enable YUYV format" msgstr "" +msgid "Enabled" +msgstr "" + msgid "Exceed" msgstr "" @@ -63,9 +69,15 @@ msgstr "" msgid "Frames per second" msgstr "" +msgid "General" +msgstr "" + msgid "HTTP output" msgstr "" +msgid "Input plugin" +msgstr "" + msgid "Interval between saving pictures" msgstr "" @@ -90,9 +102,15 @@ msgstr "" msgid "On" msgstr "" +msgid "Output plugin" +msgstr "" + msgid "Password" msgstr "" +msgid "Plugin settings" +msgstr "" + msgid "Port" msgstr "" diff --git a/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po index 3ad9a4a53..8b51f6ad4 100644 --- a/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po +++ b/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po @@ -13,25 +13,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SourceCharset: UTF-8\n" - -msgid "Enabled" -msgstr "启用" - -msgid "Enable MJPG-streamer" -msgstr "启用MJPG-streamer" - -msgid "General" -msgstr "一般设置" - -msgid "Plugin settings" -msgstr "插件设置" - -msgid "Input plugin" -msgstr "输入插件" - -msgid "Output plugin" -msgstr "输出插件" - msgid "Allow ringbuffer to exceed limit by this amount" msgstr "允许环形缓冲区最多超过这个数值" @@ -68,9 +49,15 @@ msgstr "不要初始化dynctrls" msgid "Drop frames smaller then this limit" msgstr "丢弃小于该尺寸限制的帧" +msgid "Enable MJPG-streamer" +msgstr "启用MJPG-streamer" + msgid "Enable YUYV format" msgstr "启用YUYV格式" +msgid "Enabled" +msgstr "启用" + msgid "Exceed" msgstr "超出" @@ -94,9 +81,15 @@ msgstr "保存网页的文件夹" msgid "Frames per second" msgstr "帧每秒" +msgid "General" +msgstr "一般设置" + msgid "HTTP output" msgstr "HTTP输出" +msgid "Input plugin" +msgstr "输入插件" + msgid "Interval between saving pictures" msgstr "图片保存时间间隔" @@ -121,9 +114,15 @@ msgstr "关" msgid "On" msgstr "开" +msgid "Output plugin" +msgstr "输出插件" + msgid "Password" msgstr "密码" +msgid "Plugin settings" +msgstr "插件设置" + msgid "Port" msgstr "端口" diff --git a/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm b/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm index 8c4127b23..03bfad1c5 100644 --- a/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm +++ b/applications/luci-app-multiwan/luasrc/view/multiwan_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "multiwan", "status")%>', null, + XHR.poll(5, '<%=url('admin/network/multiwan/status')%>', null, function(x, st) { var tx = document.getElementById('multiwan_status_text'); diff --git a/applications/luci-app-multiwan/po/es/multiwan.po b/applications/luci-app-multiwan/po/es/multiwan.po index 1a54f7557..4d2447eec 100644 --- a/applications/luci-app-multiwan/po/es/multiwan.po +++ b/applications/luci-app-multiwan/po/es/multiwan.po @@ -118,7 +118,7 @@ msgid "WAN Interfaces" msgstr "Interfaces WAN" msgid "WAN Uplink" -msgstr "Enalce saliente WAN" +msgstr "Enlace saliente WAN" msgid "all" msgstr "todos" diff --git a/applications/luci-app-ocserv/luasrc/controller/ocserv.lua b/applications/luci-app-ocserv/luasrc/controller/ocserv.lua index dbeaaf852..79c6ddb78 100644 --- a/applications/luci-app-ocserv/luasrc/controller/ocserv.lua +++ b/applications/luci-app-ocserv/luasrc/controller/ocserv.lua @@ -28,7 +28,7 @@ function index() call("ocserv_status")).leaf = true entry({"admin", "services", "ocserv", "disconnect"}, - call("ocserv_disconnect")).leaf = true + post("ocserv_disconnect")).leaf = true end diff --git a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua index d1cc155fa..74edaf489 100644 --- a/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua +++ b/applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua @@ -74,12 +74,6 @@ o.default = "plain" o:value("plain") o:value("PAM") -o = s:taboption("general", Value, "zone", translate("Firewall Zone"), - translate("The firewall zone that the VPN clients will be set to")) -o.nocreate = true -o.default = "lan" -o.template = "cbi/firewall_zonelist" - s:taboption("general", Value, "port", translate("Port"), translate("The same UDP and TCP ports will be used")) s:taboption("general", Value, "max_clients", translate("Max clients")) @@ -102,22 +96,6 @@ local cisco = s:taboption("general", Flag, "cisco_compat", translate("AnyConnect translate("Enable support for CISCO AnyConnect clients")) cisco.default = "1" -ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Network-Address")) -ipaddr.datatype = "ip4addr" -ipaddr.default = "192.168.100.1" - -nm = s:taboption("general", Value, "netmask", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask")) -nm.datatype = "ip4addr" -nm.default = "255.255.255.0" -nm:value("255.255.255.0") -nm:value("255.255.0.0") -nm:value("255.0.0.0") - -if has_ipv6 then - ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Network-Address"), translate("<abbr title=\"Classless Inter-Domain Routing\">CIDR</abbr>-Notation: address/prefix")) - ip6addr.datatype = "ip6addr" -end - tmpl = s:taboption("template", Value, "_tmpl", translate("Edit the template that is used for generating the ocserv configuration.")) @@ -144,10 +122,36 @@ function ca.cfgvalue(self, section) return nixio.fs.readfile("/etc/ocserv/ca.pem") end +--[[Networking options]]-- + +local parp = s:taboption("general", Flag, "proxy_arp", translate("Enable proxy arp"), + translate("Provide addresses to clients from a subnet of LAN; if enabled the network below must be a subnet of LAN. Note that the first address of the specified subnet will be reserved by ocserv, so it should not be in use. If you have a network in LAN covering 192.168.1.0/24 use 192.168.1.192/26 to reserve the upper 62 addresses.")) +parp.default = "0" + +ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Network-Address"), + translate("The IPv4 subnet address to provide to clients; this should be some private network different than the LAN addresses unless proxy ARP is enabled. Leave empty to attempt auto-configuration.")) +ipaddr.datatype = "ip4addr" +ipaddr.default = "192.168.100.1" + +nm = s:taboption("general", Value, "netmask", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"), + translate("The mask of the subnet above.")) +nm.datatype = "ip4addr" +nm.default = "255.255.255.0" +nm:value("255.255.255.0") +nm:value("255.255.0.0") +nm:value("255.0.0.0") + +if has_ipv6 then + ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Network-Address"), translate("<abbr title=\"Classless Inter-Domain Routing\">CIDR</abbr>-Notation: address/prefix"), + translate("The IPv6 subnet address to provide to clients; leave empty to attempt auto-configuration.")) + ip6addr.datatype = "ip6addr" +end + + --[[DNS]]-- s = m:section(TypedSection, "dns", translate("DNS servers"), - translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4")) + translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4. Typically you should include the address of this device")) s.anonymous = true s.addremove = true s.template = "cbi/tblsection" diff --git a/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm b/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm index fabc1bca9..03a9ed70e 100644 --- a/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm +++ b/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm @@ -1,7 +1,7 @@ <script type="text/javascript">//<![CDATA[ function ocserv_disconnect(idx) { - XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ocserv", "disconnect")%>/' + idx, null, + (new XHR()).post('<%=url('admin/services/ocserv/disconnect')%>/' + idx, { token: '<%=token%>' }, function(x) { var tb = document.getElementById('ocserv_status_table'); @@ -11,7 +11,7 @@ ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ocserv", "status")%>', null, + XHR.poll(5, '<%=url('admin/services/ocserv/status')%>', null, function(x, st) { var tb = document.getElementById('ocserv_status_table'); diff --git a/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm index 0e59c6125..476150dd2 100644 --- a/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm +++ b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm @@ -149,7 +149,7 @@ end - <h2><a id="content" name="content"><%:Services%></a></h2> + <h2 name="content"><%:Services%></h2> <fieldset class="cbi-section"> <legend><%:Internal services%></legend> diff --git a/applications/luci-app-olsr/luasrc/controller/olsr.lua b/applications/luci-app-olsr/luasrc/controller/olsr.lua index cfadd9b7c..9a997bdc1 100644 --- a/applications/luci-app-olsr/luasrc/controller/olsr.lua +++ b/applications/luci-app-olsr/luasrc/controller/olsr.lua @@ -171,11 +171,12 @@ function action_neigh(json) for _, dev in ipairs(devices) do for _, net in ipairs(dev:get_wifinets()) do + local radio = net:get_device() assoclist[#assoclist+1] = {} - assoclist[#assoclist]['ifname'] = net.iwdata.ifname - assoclist[#assoclist]['network'] = net.iwdata.network - assoclist[#assoclist]['device'] = net.iwdata.device - assoclist[#assoclist]['list'] = net.iwinfo.assoclist + assoclist[#assoclist]['ifname'] = net:ifname() + assoclist[#assoclist]['network'] = net:network()[1] + assoclist[#assoclist]['device'] = radio and radio:name() or nil + assoclist[#assoclist]['list'] = net:assoclist() end end diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm index d9976701f..eb41219c7 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:OLSR Daemon%></a></h2> +<h2 name="content"><%:OLSR Daemon%></h2> <p class="error"><%:Unable to connect to the OLSR daemon!%></p> <p><%:Make sure that OLSRd is running, the "jsoninfo" plugin is loaded, configured on port 9090 and accepts connections from "127.0.0.1".%></p> <%+footer%> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm index 89e4436f7..5ea7b74e4 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm @@ -73,7 +73,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, ); //]]></script> -<h2><a id="content" name="content"><%:Active host net announcements%></a></h2> +<h2 name="content"><%:Active host net announcements%></h2> <div id="togglebuttons"></div> <fieldset class="cbi-section"> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm index 3fb3a58e9..81d0a3dd3 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm @@ -11,7 +11,7 @@ local i = 1 <%+header%> -<h2><a id="content" name="content"><%:Interfaces%></a></h2> +<h2 name="content"><%:Interfaces%></h2> <div id="togglebuttons"></div> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm index 3c10bd66a..f658288fc 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm @@ -10,7 +10,7 @@ local i = 1 %> <%+header%> -<h2><a id="content" name="content"><%:Active MID announcements%></a></h2> +<h2 name="content"><%:Active MID announcements%></h2> <div id="togglebuttons"></div> <fieldset class="cbi-section"> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm index 9ad0d8f89..31dd7d05a 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm @@ -105,7 +105,7 @@ end //]]></script> -<h2><a id="content" name="content"><%:OLSR connections%></a></h2> +<h2 name="content"><%:OLSR connections%></h2> <div id="togglebuttons"></div> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm index fa3231528..61e17b3b2 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm @@ -155,7 +155,7 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { }, <div id="error" class="error"></div> -<h2><a id="content" name="content">OLSR <%:Overview%></a></h2> +<h2 name="content">OLSR <%:Overview%></h2> <fieldset class="cbi-section"> <legend><%:Network%></legend> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm index d2b0c1be8..8e46daa02 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm @@ -89,7 +89,7 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, -<h2><a id="content" name="content"><%:Known OLSR routes%></a></h2> +<h2 name="content"><%:Known OLSR routes%></h2> <div id="togglebuttons"></div> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm index 45f651533..6aa7a7546 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm @@ -86,7 +86,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, <%+header%> -<h2><a id="content" name="content"><%:SmartGW announcements%></a></h2> +<h2 name="content"><%:SmartGW announcements%></h2> <div id="togglebuttons"></div> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm index ee69f72d7..b3abeaecb 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm @@ -11,7 +11,7 @@ local olsrtools = require "luci.tools.olsr" %> <%+header%> -<h2><a id="content" name="content"><%:Active OLSR nodes%></a></h2> +<h2 name="content"><%:Active OLSR nodes%></h2> <div id="togglebuttons"></div> diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua index fa1530026..af515fc59 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -74,6 +74,7 @@ local knownParams = { { Value, "route_gateway", "10.234.1.1", translate("Specify a default gateway for routes") }, { Value, "route_delay", 0, translate("Delay n seconds after connection") }, { Flag, "route_noexec", 0, translate("Don't add routes automatically") }, + { Flag, "route_nopull", 0, translate("Don't pull routes automatically") }, { ListValue, "mtu_disc", { "yes", "maybe", "no" }, translate("Enable Path MTU discovery") }, { Flag, "mtu_test", 0, translate("Empirically measure MTU") }, @@ -153,7 +154,7 @@ local knownParams = { } }, { "Cryptography", { - { Value, "secret", "/etc/openvpn/secret.key 1", translate("Enable Static Key encryption mode (non-TLS)") }, + { FileUpload, "secret", "/etc/openvpn/secret.key", translate("Enable Static Key encryption mode (non-TLS)") }, { Value, "auth", "SHA1", translate("HMAC authentication for packets") }, -- parse { Value, "cipher", "BF-CBC", translate("Encryption cipher for packets") }, -- parse { Value, "keysize", 1024, translate("Size of cipher key") }, -- parse @@ -181,13 +182,16 @@ local knownParams = { { Value, "tran_window", 3600, translate("Key transition window") }, { Flag, "single_session", 0, translate("Allow only one session") }, { Flag, "tls_exit", 0, translate("Exit on TLS negotiation failure") }, - { Value, "tls_auth", "/etc/openvpn/tlsauth.key 1", translate("Additional authentication over TLS") }, + { Value, "tls_auth", "/etc/openvpn/tlsauth.key", translate("Additional authentication over TLS") }, --{ Value, "askpass", "[file]", translate("Get PEM password from controlling tty before we daemonize") }, { Flag, "auth_nocache", 0, translate("Don't cache --askpass or --auth-user-pass passwords") }, { Value, "tls_remote", "remote_x509_name", translate("Only accept connections from given X509 name") }, { ListValue, "ns_cert_type", { "client", "server" }, translate("Require explicit designation on certificate") }, { ListValue, "remote_cert_tls", { "client", "server" }, translate("Require explicit key usage on certificate") }, { Value, "crl_verify", "/etc/easy-rsa/keys/crl.pem", translate("Check peer certificate against a CRL") }, + { Value, "tls_version_min", "1.0", translate("The lowest supported TLS version") }, + { Value, "tls_version_max", "1.2", translate("The highest supported TLS version") }, + { Value, "key_direction", "1", translate("The key direction for 'tls-auth' and 'secret' options") }, } } } diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua index 561b0dd02..8385839a8 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua @@ -24,13 +24,14 @@ local basicParams = { { ListValue,"comp_lzo",{"yes","no","adaptive"}, translate("Use fast LZO compression") }, { Value,"keepalive","10 60", translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") }, - { ListValue,"proto",{ "udp", "tcp" }, translate("Use protocol") }, + { ListValue,"proto",{ "udp", "udp6", "tcp", "tcp6" }, translate("Use protocol") }, { Flag,"client",0, translate("Configure client mode") }, { Flag,"client_to_client",0, translate("Allow client-to-client traffic") }, { DynamicList,"remote","vpnserver.example.org", translate("Remote host name or ip address") }, - { FileUpload,"secret","/etc/openvpn/secret.key 1", translate("Enable Static Key encryption mode (non-TLS)") }, + { FileUpload,"secret","/etc/openvpn/secret.key", translate("Enable Static Key encryption mode (non-TLS)") }, + { Value,"key_direction","1", translate("The key direction for 'tls-auth' and 'secret' options") }, { FileUpload,"pkcs12","/etc/easy-rsa/keys/some-client.pk12", translate("PKCS#12 file containing keys") }, { FileUpload,"ca","/etc/easy-rsa/keys/ca.crt", translate("Certificate authority") }, { FileUpload,"dh","/etc/easy-rsa/keys/dh1024.pem", translate("Diffie Hellman parameters") }, diff --git a/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm b/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm index ac5c8936e..f22cb68c7 100644 --- a/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm +++ b/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm @@ -6,14 +6,14 @@ <fieldset class="cbi-section"> <legend> - <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn")%>"><%:Overview%></a> » + <a href="<%=url('admin/services/openvpn')%>"><%:Overview%></a> » <%=luci.i18n.translatef("Instance \"%s\"", self.instance)%> </legend> <% if self.mode == "basic" then %> - <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn", "advanced", self.instance, "Service")%>"><%:Switch to advanced configuration »%></a> + <a href="<%=url('admin/services/openvpn/advanced', self.instance, "Service")%>"><%:Switch to advanced configuration »%></a> <% else %> - <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn", "basic", self.instance)%>"><%:« Switch to basic configuration%></a> + <a href="<%=url('admin/services/openvpn/basic', self.instance)%>"><%:« Switch to basic configuration%></a> <hr style="margin:0.5em 0" /> <%:Configuration category%>: <% for i, c in ipairs(self.categories) do %> diff --git a/applications/luci-app-openvpn/po/ca/openvpn.po b/applications/luci-app-openvpn/po/ca/openvpn.po index 67de6b2d7..77a9415b6 100644 --- a/applications/luci-app-openvpn/po/ca/openvpn.po +++ b/applications/luci-app-openvpn/po/ca/openvpn.po @@ -154,6 +154,9 @@ msgstr "No heretis les opcions globals enviades pel servidor" msgid "Don't log timestamps" msgstr "No registris les marques horàries" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "No rellegeixis la clau al reiniciar" diff --git a/applications/luci-app-openvpn/po/cs/openvpn.po b/applications/luci-app-openvpn/po/cs/openvpn.po index c5ed42d79..dcb3f3335 100644 --- a/applications/luci-app-openvpn/po/cs/openvpn.po +++ b/applications/luci-app-openvpn/po/cs/openvpn.po @@ -149,6 +149,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/de/openvpn.po b/applications/luci-app-openvpn/po/de/openvpn.po index e6cfdae96..7dd5020b8 100644 --- a/applications/luci-app-openvpn/po/de/openvpn.po +++ b/applications/luci-app-openvpn/po/de/openvpn.po @@ -152,6 +152,9 @@ msgstr "Nur teilnehmerspezifische Optionen übertragen" msgid "Don't log timestamps" msgstr "Keine Zeitangaben protokollieren" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Schlüssel bei Neustarts beibehalten" diff --git a/applications/luci-app-openvpn/po/el/openvpn.po b/applications/luci-app-openvpn/po/el/openvpn.po index c5368d7b1..401862ffd 100644 --- a/applications/luci-app-openvpn/po/el/openvpn.po +++ b/applications/luci-app-openvpn/po/el/openvpn.po @@ -153,6 +153,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/en/openvpn.po b/applications/luci-app-openvpn/po/en/openvpn.po index e8d8961af..e3cf64154 100644 --- a/applications/luci-app-openvpn/po/en/openvpn.po +++ b/applications/luci-app-openvpn/po/en/openvpn.po @@ -152,6 +152,9 @@ msgstr "Don't inherit global push options" msgid "Don't log timestamps" msgstr "Don't log timestamps" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Don't re-read key on restart" diff --git a/applications/luci-app-openvpn/po/es/openvpn.po b/applications/luci-app-openvpn/po/es/openvpn.po index 7c9a2d477..ade744651 100644 --- a/applications/luci-app-openvpn/po/es/openvpn.po +++ b/applications/luci-app-openvpn/po/es/openvpn.po @@ -151,6 +151,9 @@ msgstr "No heredar opciones push globales" msgid "Don't log timestamps" msgstr "No guardar en registro horas" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "No releer la clave al rearrancar" diff --git a/applications/luci-app-openvpn/po/fr/openvpn.po b/applications/luci-app-openvpn/po/fr/openvpn.po index cbfd1f50e..c2726caa0 100644 --- a/applications/luci-app-openvpn/po/fr/openvpn.po +++ b/applications/luci-app-openvpn/po/fr/openvpn.po @@ -161,6 +161,9 @@ msgstr "Ne pas hériter des options d'envoi globales" msgid "Don't log timestamps" msgstr "Ne pas journaliser les horodatages" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Ne pas relire la clef au redémarrage" diff --git a/applications/luci-app-openvpn/po/he/openvpn.po b/applications/luci-app-openvpn/po/he/openvpn.po index 55953b92f..b7dd90cd0 100644 --- a/applications/luci-app-openvpn/po/he/openvpn.po +++ b/applications/luci-app-openvpn/po/he/openvpn.po @@ -147,6 +147,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/hu/openvpn.po b/applications/luci-app-openvpn/po/hu/openvpn.po index 3e9391817..f967d1e7d 100644 --- a/applications/luci-app-openvpn/po/hu/openvpn.po +++ b/applications/luci-app-openvpn/po/hu/openvpn.po @@ -151,6 +151,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "Időbélyegeket ne naplózza" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/it/openvpn.po b/applications/luci-app-openvpn/po/it/openvpn.po index 0304437a5..59855f1dd 100644 --- a/applications/luci-app-openvpn/po/it/openvpn.po +++ b/applications/luci-app-openvpn/po/it/openvpn.po @@ -153,6 +153,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "Non loggare il timestamps" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Non rileggere le chiavi al riavvio" diff --git a/applications/luci-app-openvpn/po/ja/openvpn.po b/applications/luci-app-openvpn/po/ja/openvpn.po index dc558a8f3..2b888a468 100644 --- a/applications/luci-app-openvpn/po/ja/openvpn.po +++ b/applications/luci-app-openvpn/po/ja/openvpn.po @@ -151,6 +151,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "時刻をログに書き込まない" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "再起動時にキーの再読み込みを行わない" diff --git a/applications/luci-app-openvpn/po/ms/openvpn.po b/applications/luci-app-openvpn/po/ms/openvpn.po index 0ed890936..97b699b66 100644 --- a/applications/luci-app-openvpn/po/ms/openvpn.po +++ b/applications/luci-app-openvpn/po/ms/openvpn.po @@ -146,6 +146,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/no/openvpn.po b/applications/luci-app-openvpn/po/no/openvpn.po index 55953b92f..b7dd90cd0 100644 --- a/applications/luci-app-openvpn/po/no/openvpn.po +++ b/applications/luci-app-openvpn/po/no/openvpn.po @@ -147,6 +147,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/pl/openvpn.po b/applications/luci-app-openvpn/po/pl/openvpn.po index 7fa9fe27a..aa98b8c25 100644 --- a/applications/luci-app-openvpn/po/pl/openvpn.po +++ b/applications/luci-app-openvpn/po/pl/openvpn.po @@ -152,6 +152,9 @@ msgstr "Nie dziedzicz globalnej opcji push" msgid "Don't log timestamps" msgstr "Nie zapisuj czasu w logu" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Nie wczytuj ponownie klucza podczas restartu" diff --git a/applications/luci-app-openvpn/po/pt-br/openvpn.po b/applications/luci-app-openvpn/po/pt-br/openvpn.po index 27aef002c..f472337b0 100644 --- a/applications/luci-app-openvpn/po/pt-br/openvpn.po +++ b/applications/luci-app-openvpn/po/pt-br/openvpn.po @@ -153,6 +153,9 @@ msgstr "Não herdar as opções globais de envio (push)" msgid "Don't log timestamps" msgstr "Não registar a data/hora" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Não reler a chave entre os reinícios" diff --git a/applications/luci-app-openvpn/po/pt/openvpn.po b/applications/luci-app-openvpn/po/pt/openvpn.po index 76d209197..f69231e6f 100644 --- a/applications/luci-app-openvpn/po/pt/openvpn.po +++ b/applications/luci-app-openvpn/po/pt/openvpn.po @@ -153,6 +153,9 @@ msgstr "Não herdar as opções globais de envio (push)" msgid "Don't log timestamps" msgstr "Não registar timestamps" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Não reler a chave entre reinicios" diff --git a/applications/luci-app-openvpn/po/ro/openvpn.po b/applications/luci-app-openvpn/po/ro/openvpn.po index 1ca67827c..50dca5357 100644 --- a/applications/luci-app-openvpn/po/ro/openvpn.po +++ b/applications/luci-app-openvpn/po/ro/openvpn.po @@ -148,6 +148,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/ru/openvpn.po b/applications/luci-app-openvpn/po/ru/openvpn.po index 8a4635aae..21ddcfcea 100644 --- a/applications/luci-app-openvpn/po/ru/openvpn.po +++ b/applications/luci-app-openvpn/po/ru/openvpn.po @@ -155,6 +155,9 @@ msgstr "Не наследовать глобальные параметры push msgid "Don't log timestamps" msgstr "Не записывать отметки времени в журнал" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Не считывать заново ключ при перезапуске" diff --git a/applications/luci-app-openvpn/po/sk/openvpn.po b/applications/luci-app-openvpn/po/sk/openvpn.po index 7c885a8d1..cad751ed9 100644 --- a/applications/luci-app-openvpn/po/sk/openvpn.po +++ b/applications/luci-app-openvpn/po/sk/openvpn.po @@ -146,6 +146,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/sv/openvpn.po b/applications/luci-app-openvpn/po/sv/openvpn.po index c4e30ac5f..c475a2382 100644 --- a/applications/luci-app-openvpn/po/sv/openvpn.po +++ b/applications/luci-app-openvpn/po/sv/openvpn.po @@ -147,6 +147,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/templates/openvpn.pot b/applications/luci-app-openvpn/po/templates/openvpn.pot index 8fa13d155..4fe6af4bf 100644 --- a/applications/luci-app-openvpn/po/templates/openvpn.pot +++ b/applications/luci-app-openvpn/po/templates/openvpn.pot @@ -139,6 +139,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/tr/openvpn.po b/applications/luci-app-openvpn/po/tr/openvpn.po index dcb0ec4e8..e379636ce 100644 --- a/applications/luci-app-openvpn/po/tr/openvpn.po +++ b/applications/luci-app-openvpn/po/tr/openvpn.po @@ -146,6 +146,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/uk/openvpn.po b/applications/luci-app-openvpn/po/uk/openvpn.po index e6032373e..caa42464b 100644 --- a/applications/luci-app-openvpn/po/uk/openvpn.po +++ b/applications/luci-app-openvpn/po/uk/openvpn.po @@ -150,6 +150,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-openvpn/po/vi/openvpn.po b/applications/luci-app-openvpn/po/vi/openvpn.po index 2c19e69f3..d21ef9341 100644 --- a/applications/luci-app-openvpn/po/vi/openvpn.po +++ b/applications/luci-app-openvpn/po/vi/openvpn.po @@ -152,6 +152,9 @@ msgstr "Đừng thừa hưởng tùy chọn đẩy toàn cầu" msgid "Don't log timestamps" msgstr "Đừng log timestamps" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "Đừng đọc lại key ở chế độ khởi động " diff --git a/applications/luci-app-openvpn/po/zh-cn/openvpn.po b/applications/luci-app-openvpn/po/zh-cn/openvpn.po index 1c210dc60..fc8572759 100644 --- a/applications/luci-app-openvpn/po/zh-cn/openvpn.po +++ b/applications/luci-app-openvpn/po/zh-cn/openvpn.po @@ -151,6 +151,9 @@ msgstr "不继承全局主动发送选项" msgid "Don't log timestamps" msgstr "不记录时间戳" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "服务重启时不重读密钥值" diff --git a/applications/luci-app-openvpn/po/zh-tw/openvpn.po b/applications/luci-app-openvpn/po/zh-tw/openvpn.po index d010f4b50..60539b6b4 100644 --- a/applications/luci-app-openvpn/po/zh-tw/openvpn.po +++ b/applications/luci-app-openvpn/po/zh-tw/openvpn.po @@ -145,6 +145,9 @@ msgstr "" msgid "Don't log timestamps" msgstr "" +msgid "Don't pull routes automatically" +msgstr "" + msgid "Don't re-read key on restart" msgstr "" diff --git a/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua b/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua index 9ff2ed97f..a6087e9ae 100644 --- a/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua +++ b/applications/luci-app-pbx-voicemail/luasrc/model/cbi/pbx-voicemail.lua @@ -92,7 +92,7 @@ s = m:section(NamedSection, "voicemail_smtp", "voicemail", translate("Outgoing m s.anonymous = true serv = s:option(Value, "smtp_server", translate("SMTP Server Hostname or IP Address")) -serv.datatype = "host" +serv.datatype = "host(0)" port = s:option(Value, "smtp_port", translate("SMTP Port Number")) port.datatype = "port" diff --git a/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua b/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua index 5d4f135c5..34288c663 100644 --- a/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua +++ b/applications/luci-app-pbx/luasrc/model/cbi/pbx-advanced.lua @@ -264,7 +264,7 @@ h = s:taboption("remote_usage", Value, "externhost", translate("Domain/IP Addres The best thing to input is a static IP address. If your IP address is dynamic and it changes, \ your configuration will become invalid. Hence, it's recommended to set up Dynamic DNS in this case. \ and enter your Dynamic DNS hostname here. You can configure Dynamic DNS with the luci-app-ddns package.")) -h.datatype = "host" +h.datatype = "host(0)" p = s:taboption("remote_usage", Value, "bindport", translate("External SIP Port"), translate("Pick a random port number between 6500 and 9500 for the service to listen on. \ diff --git a/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua b/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua index ed1ed1edb..9b4620285 100644 --- a/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua +++ b/applications/luci-app-pbx/luasrc/model/cbi/pbx-voip.lua @@ -84,7 +84,7 @@ function pwd.write(self, section, value) end h = s:option(Value, "host", translate("SIP Server/Registrar")) -h.datatype = "host" +h.datatype = "host(0)" p = s:option(ListValue, "register", translate("Enable Incoming Calls (Register via SIP)"), translate("This option should be set to \"Yes\" if you have a DID \(real telephone number\) \ @@ -103,7 +103,7 @@ p.default = "yes" from = s:option(Value, "fromdomain", translate("SIP Realm (needed by some providers)")) from.optional = true -from.datatype = "host" +from.datatype = "host(0)" port = s:option(Value, "port", translate("SIP Server/Registrar Port")) port.optional = true @@ -111,6 +111,6 @@ port.datatype = "port" op = s:option(Value, "outboundproxy", translate("Outbound Proxy")) op.optional = true -op.datatype = "host" +op.datatype = "host(0)" return m diff --git a/applications/luci-app-polipo/luasrc/view/polipo_status.htm b/applications/luci-app-polipo/luasrc/view/polipo_status.htm index c2695ca82..007d2d5e4 100644 --- a/applications/luci-app-polipo/luasrc/view/polipo_status.htm +++ b/applications/luci-app-polipo/luasrc/view/polipo_status.htm @@ -9,7 +9,7 @@ local port = uci:get("polipo", "general", "proxyPort") or "8123" <%+header%> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Polipo Status%></a></h2> + <h2 name="content"><%:Polipo Status%></h2> <div class="cbi-section"> <iframe id="sf" src="http://<%=luci.http.getenv('SERVER_NAME')%>:<%=port%>/polipo/" style="width:100%; height:350px; border:none"></iframe> </div> diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile index e16eb4176..260f840c6 100644 --- a/applications/luci-app-privoxy/Makefile +++ b/applications/luci-app-privoxy/Makefile @@ -10,11 +10,11 @@ PKG_NAME:=luci-app-privoxy # Version == major.minor.patch # increase "minor" on new functionality and "patch" on patches/optimization -PKG_VERSION:=1.0.4 +PKG_VERSION:=1.0.5 # Release == build # increase on changes of translation files -PKG_RELEASE:=2 +PKG_RELEASE:=1 PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com> diff --git a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua index 58ba80724..0cedab48a 100644 --- a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua +++ b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua @@ -15,7 +15,7 @@ PRIVOXY_MIN = "3.0.22-0" -- minimum version of service required function index() entry( {"admin", "services", "privoxy"}, cbi("privoxy"), _("Privoxy WEB proxy"), 59) entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true - entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true + entry( {"admin", "services", "privoxy", "startstop"}, post("startstop") ).leaf = true entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true end diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua index c415f8e06..8ea249617 100644 --- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua +++ b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua @@ -14,7 +14,7 @@ local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" targe local VERINST = CTRL.ipkg_ver_installed("privoxy") local VEROK = CTRL.ipkg_ver_compare(VERINST,">=",CTRL.PRIVOXY_MIN) -local TITLE = [[</a><a href="javascript:alert(']] +local TITLE = [[<a href="javascript:alert(']] .. translate("Version Information") .. [[\n\nluci-app-privoxy]] .. [[\n\t]] .. translate("Version") .. [[:\t]] @@ -26,6 +26,7 @@ local TITLE = [[</a><a href="javascript:alert(']] .. [[\n\n]] .. [[')">]] .. translate("Privoxy WEB proxy") + .. [[</a>]] local DESC = translate("Privoxy is a non-caching web proxy with advanced filtering " .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, " diff --git a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm index 3e190709f..ab0019bdd 100644 --- a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm +++ b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm @@ -6,7 +6,7 @@ var txt = document.getElementById("cbid.privoxy.privoxy._logview.txt"); // TextArea if ( !txt ) { return; } // security check var lvXHR = new XHR(); - lvXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "logview")%>', null, + lvXHR.get('<%=url('admin/services/privoxy/logview')%>', null, function(x) { if (x.responseText == "_nodata_") txt.value = "<%:File not found or empty%>"; diff --git a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm index b9de8864e..85975ac7d 100644 --- a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm +++ b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm @@ -21,12 +21,12 @@ function onclick_startstop(id) { // do start/stop var btnXHR = new XHR(); - btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "startstop")%>', null, + btnXHR.post('<%=url('admin/services/privoxy/startstop')%>', { token: '<%=token%>' }, function(x) { _data2elements(x); } ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "privoxy", "status")%>', null, + XHR.poll(5, '<%=url('admin/services/privoxy/status')%>', null, function(x, data) { _data2elements(x); } ); diff --git a/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua b/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua index a8ea57e31..177b17b07 100644 --- a/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua +++ b/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua @@ -41,6 +41,16 @@ t:value("Priority", translate("priority")) t:value("Express", translate("express")) t:value("Normal", translate("normal")) t:value("Bulk", translate("low")) + +local uci = require "luci.model.uci" +uci.cursor():foreach("qos", "class", + function (section) + local n = section[".name"] + if string.sub(n,-string.len("_down"))~="_down" then + t:value(n) + end + end) + t.default = "Normal" srch = s:option(Value, "srchost", translate("Source host")) diff --git a/applications/luci-app-qos/po/ca/qos.po b/applications/luci-app-qos/po/ca/qos.po index 7871b1206..e1430f1ad 100644 --- a/applications/luci-app-qos/po/ca/qos.po +++ b/applications/luci-app-qos/po/ca/qos.po @@ -59,9 +59,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Qualitat de Servei" -msgid "Service" -msgstr "Servei" - msgid "Source host" msgstr "Host d'origen" @@ -97,6 +94,9 @@ msgstr "normal" msgid "priority" msgstr "prioritat" +#~ msgid "Service" +#~ msgstr "Servei" + #~ msgid "Downlink" #~ msgstr "Enllaç de baixada" diff --git a/applications/luci-app-qos/po/cs/qos.po b/applications/luci-app-qos/po/cs/qos.po index 361e4d542..884310f66 100644 --- a/applications/luci-app-qos/po/cs/qos.po +++ b/applications/luci-app-qos/po/cs/qos.po @@ -59,9 +59,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Služba" - msgid "Source host" msgstr "Zdrojová adresa" @@ -97,6 +94,9 @@ msgstr "normální priorita" msgid "priority" msgstr "nejvyšší priorita (malé rámce)" +#~ msgid "Service" +#~ msgstr "Služba" + #~ msgid "Downlink" #~ msgstr "Stahování" diff --git a/applications/luci-app-qos/po/de/qos.po b/applications/luci-app-qos/po/de/qos.po index 6ba5701fd..46060de21 100644 --- a/applications/luci-app-qos/po/de/qos.po +++ b/applications/luci-app-qos/po/de/qos.po @@ -57,9 +57,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Dienst" - msgid "Source host" msgstr "Quelladresse" @@ -94,6 +91,9 @@ msgstr "normal" msgid "priority" msgstr "Priorität" +#~ msgid "Service" +#~ msgstr "Dienst" + #~ msgid "Downlink" #~ msgstr "Downlink" diff --git a/applications/luci-app-qos/po/el/qos.po b/applications/luci-app-qos/po/el/qos.po index b417b8b9a..9c8a9851a 100644 --- a/applications/luci-app-qos/po/el/qos.po +++ b/applications/luci-app-qos/po/el/qos.po @@ -60,9 +60,6 @@ msgstr "" msgid "Quality of Service" msgstr "Ποιότητα Υπηρεσίας" -msgid "Service" -msgstr "Υπηρεσία" - #, fuzzy msgid "Source host" msgstr "Διεύθυνση πηγής" @@ -100,6 +97,9 @@ msgstr "κανονική" msgid "priority" msgstr "προτεραιότητα" +#~ msgid "Service" +#~ msgstr "Υπηρεσία" + #, fuzzy #~ msgid "Downlink" #~ msgstr "Ταχύτητα κατεβάσματος" diff --git a/applications/luci-app-qos/po/en/qos.po b/applications/luci-app-qos/po/en/qos.po index aeb7b27b2..b20180f0d 100644 --- a/applications/luci-app-qos/po/en/qos.po +++ b/applications/luci-app-qos/po/en/qos.po @@ -53,9 +53,6 @@ msgstr "" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Service" - msgid "Source host" msgstr "Source host" @@ -89,3 +86,6 @@ msgstr "normal" msgid "priority" msgstr "priority" + +#~ msgid "Service" +#~ msgstr "Service" diff --git a/applications/luci-app-qos/po/es/qos.po b/applications/luci-app-qos/po/es/qos.po index 3c8206ddc..83ace8d1f 100644 --- a/applications/luci-app-qos/po/es/qos.po +++ b/applications/luci-app-qos/po/es/qos.po @@ -55,9 +55,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Calidad de Servicio" -msgid "Service" -msgstr "Servicio" - msgid "Source host" msgstr "Máquina origen" @@ -92,6 +89,9 @@ msgstr "normal" msgid "priority" msgstr "prioritario" +#~ msgid "Service" +#~ msgstr "Servicio" + #~ msgid "Downlink" #~ msgstr "Enlace de bajada" diff --git a/applications/luci-app-qos/po/fr/qos.po b/applications/luci-app-qos/po/fr/qos.po index a4a81f124..38e9ce863 100644 --- a/applications/luci-app-qos/po/fr/qos.po +++ b/applications/luci-app-qos/po/fr/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "Qualité de service" -msgid "Service" -msgstr "Service" - msgid "Source host" msgstr "Hôte source" @@ -93,5 +90,8 @@ msgstr "normal" msgid "priority" msgstr "prioritaire" +#~ msgid "Service" +#~ msgstr "Service" + #~ msgid "qos_connbytes" #~ msgstr "qos_connbytes" diff --git a/applications/luci-app-qos/po/he/qos.po b/applications/luci-app-qos/po/he/qos.po index 71c2e3c07..e2d42ef01 100644 --- a/applications/luci-app-qos/po/he/qos.po +++ b/applications/luci-app-qos/po/he/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/hu/qos.po b/applications/luci-app-qos/po/hu/qos.po index d69ff082a..c77ac3cd7 100644 --- a/applications/luci-app-qos/po/hu/qos.po +++ b/applications/luci-app-qos/po/hu/qos.po @@ -57,9 +57,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Szolgáltatás" - msgid "Source host" msgstr "Forrás gép" @@ -95,6 +92,9 @@ msgstr "normál" msgid "priority" msgstr "prioritás" +#~ msgid "Service" +#~ msgstr "Szolgáltatás" + #~ msgid "Downlink" #~ msgstr "Downlink" diff --git a/applications/luci-app-qos/po/it/qos.po b/applications/luci-app-qos/po/it/qos.po index 00fb331b3..686c74519 100644 --- a/applications/luci-app-qos/po/it/qos.po +++ b/applications/luci-app-qos/po/it/qos.po @@ -55,9 +55,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Qualità del Servizio" -msgid "Service" -msgstr "Servizi" - msgid "Source host" msgstr "Host sorgente" @@ -92,6 +89,9 @@ msgstr "normale" msgid "priority" msgstr "priorità" +#~ msgid "Service" +#~ msgstr "Servizi" + #~ msgid "Downlink" #~ msgstr "Collegamento discendente" diff --git a/applications/luci-app-qos/po/ja/qos.po b/applications/luci-app-qos/po/ja/qos.po index 857cf5b83..deeb23f60 100644 --- a/applications/luci-app-qos/po/ja/qos.po +++ b/applications/luci-app-qos/po/ja/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "サービス" - msgid "Source host" msgstr "送信元ホスト" @@ -91,3 +88,6 @@ msgstr "標準" msgid "priority" msgstr "最優先" + +#~ msgid "Service" +#~ msgstr "サービス" diff --git a/applications/luci-app-qos/po/ms/qos.po b/applications/luci-app-qos/po/ms/qos.po index ab3049212..f8d4ab3d2 100644 --- a/applications/luci-app-qos/po/ms/qos.po +++ b/applications/luci-app-qos/po/ms/qos.po @@ -54,9 +54,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/no/qos.po b/applications/luci-app-qos/po/no/qos.po index a560b0fa0..6b390a1d6 100644 --- a/applications/luci-app-qos/po/no/qos.po +++ b/applications/luci-app-qos/po/no/qos.po @@ -50,9 +50,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Service" - msgid "Source host" msgstr "Kilde vert" @@ -87,6 +84,9 @@ msgstr "normal" msgid "priority" msgstr "prioritet" +#~ msgid "Service" +#~ msgstr "Service" + #~ msgid "Downlink" #~ msgstr "Nedlinje" diff --git a/applications/luci-app-qos/po/pl/qos.po b/applications/luci-app-qos/po/pl/qos.po index 7b740c78f..3c6a28ccc 100644 --- a/applications/luci-app-qos/po/pl/qos.po +++ b/applications/luci-app-qos/po/pl/qos.po @@ -56,9 +56,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Jakość usługi (ang. Quality of Service)" -msgid "Service" -msgstr "Usługa" - msgid "Source host" msgstr "Host źródłowy" @@ -93,6 +90,9 @@ msgstr "normalny" msgid "priority" msgstr "priorytetowy" +#~ msgid "Service" +#~ msgstr "Usługa" + #~ msgid "Downlink" #~ msgstr "Ruch przychodzący" diff --git a/applications/luci-app-qos/po/pt-br/qos.po b/applications/luci-app-qos/po/pt-br/qos.po index 1ebaea2a2..43cd6e2a6 100644 --- a/applications/luci-app-qos/po/pt-br/qos.po +++ b/applications/luci-app-qos/po/pt-br/qos.po @@ -58,9 +58,6 @@ msgstr "<abbr title=\"Quality of Service, Qualidade de serviço\">QoS</abbr>" msgid "Quality of Service" msgstr "Qualidade de Serviço" -msgid "Service" -msgstr "Serviço" - msgid "Source host" msgstr "Endereço de origem" @@ -96,6 +93,9 @@ msgstr "normal" msgid "priority" msgstr "prioritário" +#~ msgid "Service" +#~ msgstr "Serviço" + #~ msgid "Downlink" #~ msgstr "Link para download" diff --git a/applications/luci-app-qos/po/pt/qos.po b/applications/luci-app-qos/po/pt/qos.po index 2299a7848..449ddce4c 100644 --- a/applications/luci-app-qos/po/pt/qos.po +++ b/applications/luci-app-qos/po/pt/qos.po @@ -57,9 +57,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Qualidade de Serviço" -msgid "Service" -msgstr "Serviço" - msgid "Source host" msgstr "Host de origem" @@ -94,6 +91,9 @@ msgstr "normal" msgid "priority" msgstr "prioridade" +#~ msgid "Service" +#~ msgstr "Serviço" + #~ msgid "Downlink" #~ msgstr "Link para download" diff --git a/applications/luci-app-qos/po/ro/qos.po b/applications/luci-app-qos/po/ro/qos.po index 239c1f850..9c88f7c2c 100644 --- a/applications/luci-app-qos/po/ro/qos.po +++ b/applications/luci-app-qos/po/ro/qos.po @@ -58,9 +58,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Quality of Service" -msgid "Service" -msgstr "Serviciu" - msgid "Source host" msgstr "" @@ -93,5 +90,8 @@ msgstr "normala" msgid "priority" msgstr "ridicata" +#~ msgid "Service" +#~ msgstr "Serviciu" + #~ msgid "Internet Connection" #~ msgstr "Conexiune internet" diff --git a/applications/luci-app-qos/po/ru/qos.po b/applications/luci-app-qos/po/ru/qos.po index 6c3639243..811cbf1e0 100644 --- a/applications/luci-app-qos/po/ru/qos.po +++ b/applications/luci-app-qos/po/ru/qos.po @@ -57,9 +57,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Качество обслуживания (QoS)" -msgid "Service" -msgstr "Служба" - msgid "Source host" msgstr "Хост источника" @@ -94,6 +91,9 @@ msgstr "обычный" msgid "priority" msgstr "приоритетный" +#~ msgid "Service" +#~ msgstr "Служба" + #~ msgid "Downlink" #~ msgstr "Нисходящий канал" diff --git a/applications/luci-app-qos/po/sk/qos.po b/applications/luci-app-qos/po/sk/qos.po index 102e5a94e..b4d10ab31 100644 --- a/applications/luci-app-qos/po/sk/qos.po +++ b/applications/luci-app-qos/po/sk/qos.po @@ -50,9 +50,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/sv/qos.po b/applications/luci-app-qos/po/sv/qos.po index 44f8a351e..1ba407e4b 100644 --- a/applications/luci-app-qos/po/sv/qos.po +++ b/applications/luci-app-qos/po/sv/qos.po @@ -51,9 +51,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/templates/qos.pot b/applications/luci-app-qos/po/templates/qos.pot index 26ea8f797..48333e456 100644 --- a/applications/luci-app-qos/po/templates/qos.pot +++ b/applications/luci-app-qos/po/templates/qos.pot @@ -43,9 +43,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/tr/qos.po b/applications/luci-app-qos/po/tr/qos.po index 74647be14..d2f3611cf 100644 --- a/applications/luci-app-qos/po/tr/qos.po +++ b/applications/luci-app-qos/po/tr/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/uk/qos.po b/applications/luci-app-qos/po/uk/qos.po index d48100b12..5ec9f3726 100644 --- a/applications/luci-app-qos/po/uk/qos.po +++ b/applications/luci-app-qos/po/uk/qos.po @@ -58,9 +58,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "Якість обслуговування (QoS)" -msgid "Service" -msgstr "Сервіс" - msgid "Source host" msgstr "Вихідний вузол" @@ -96,6 +93,9 @@ msgstr "звичайний" msgid "priority" msgstr "пріоритетний" +#~ msgid "Service" +#~ msgstr "Сервіс" + #~ msgid "Downlink" #~ msgstr "Низхідний канал" diff --git a/applications/luci-app-qos/po/vi/qos.po b/applications/luci-app-qos/po/vi/qos.po index 82492727c..32e7ed17a 100644 --- a/applications/luci-app-qos/po/vi/qos.po +++ b/applications/luci-app-qos/po/vi/qos.po @@ -60,9 +60,6 @@ msgstr "" msgid "Quality of Service" msgstr "Chất lượng dịch vụ " -msgid "Service" -msgstr "" - #, fuzzy msgid "Source host" msgstr "Địa chỉ nguồn" diff --git a/applications/luci-app-qos/po/zh-cn/qos.po b/applications/luci-app-qos/po/zh-cn/qos.po index 92ff7d089..0a5cd6220 100644 --- a/applications/luci-app-qos/po/zh-cn/qos.po +++ b/applications/luci-app-qos/po/zh-cn/qos.po @@ -55,9 +55,6 @@ msgstr "QoS" msgid "Quality of Service" msgstr "QOS服务" -msgid "Service" -msgstr "服务" - msgid "Source host" msgstr "源主机" @@ -90,6 +87,9 @@ msgstr "普通" msgid "priority" msgstr "最高" +#~ msgid "Service" +#~ msgstr "服务" + #~ msgid "Downlink" #~ msgstr "下行" diff --git a/applications/luci-app-qos/po/zh-tw/qos.po b/applications/luci-app-qos/po/zh-tw/qos.po index 5cc338bb0..a011e9ca9 100644 --- a/applications/luci-app-qos/po/zh-tw/qos.po +++ b/applications/luci-app-qos/po/zh-tw/qos.po @@ -53,9 +53,6 @@ msgstr "先進先出頻寬管理" msgid "Quality of Service" msgstr "連線品質服務" -msgid "Service" -msgstr "服務" - msgid "Source host" msgstr "來源主機" @@ -90,6 +87,9 @@ msgstr "一般優先權" msgid "priority" msgstr "優先權" +#~ msgid "Service" +#~ msgstr "服務" + #~ msgid "Downlink" #~ msgstr "下載" diff --git a/applications/luci-app-radicale/Makefile b/applications/luci-app-radicale/Makefile index 960618dba..1501d4f0e 100644 --- a/applications/luci-app-radicale/Makefile +++ b/applications/luci-app-radicale/Makefile @@ -10,7 +10,7 @@ PKG_NAME:=luci-app-radicale # Version == major.minor.patch # increase "minor" on new functionality and "patch" on patches/optimization -PKG_VERSION:=1.0.1 +PKG_VERSION:=1.0.2 # Release == build # increase on changes of translation files diff --git a/applications/luci-app-radicale/luasrc/controller/radicale.lua b/applications/luci-app-radicale/luasrc/controller/radicale.lua index d384b00d9..10ec1fe54 100644 --- a/applications/luci-app-radicale/luasrc/controller/radicale.lua +++ b/applications/luci-app-radicale/luasrc/controller/radicale.lua @@ -15,7 +15,7 @@ function index() entry( {"admin", "services", "radicale"}, alias("admin", "services", "radicale", "edit"), _("CalDAV/CardDAV"), 58) entry( {"admin", "services", "radicale", "edit"}, cbi("radicale") ).leaf = true entry( {"admin", "services", "radicale", "logview"}, call("_logread") ).leaf = true - entry( {"admin", "services", "radicale", "startstop"}, call("_startstop") ).leaf = true + entry( {"admin", "services", "radicale", "startstop"}, post("_startstop") ).leaf = true entry( {"admin", "services", "radicale", "status"}, call("_status") ).leaf = true end @@ -82,7 +82,7 @@ function service_ok() end function app_title_main() - return [[</a><a href="javascript:alert(']] + return [[<a href="javascript:alert(']] .. I18N.translate("Version Information") .. [[\n\n]] .. luci_app_name() .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]] @@ -100,12 +100,14 @@ function app_title_main() .. [[\n\n]] .. [[')">]] .. I18N.translate("Radicale CalDAV/CardDAV Server") + .. [[</a>]] end function app_title_back() - return [[</a><a href="]] + return [[<a href="]] .. DISP.build_url("admin", "services", "radicale") .. [[">]] .. I18N.translate("Radicale CalDAV/CardDAV Server") + .. [[</a>]] end function app_description() return I18N.translate("The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.") .. [[<br />]] diff --git a/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm b/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm index 79d1c3629..dbf4dddbc 100644 --- a/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm +++ b/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm @@ -21,12 +21,12 @@ function onclick_startstop(id) { // do start/stop var btnXHR = new XHR(); - btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "radicale", "startstop")%>', null, + btnXHR.post('<%=url('admin/services/radicale/startstop')%>', { token: '<%=token%>' }, function(x) { _data2elements(x); } ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "radicale", "status")%>', null, + XHR.poll(5, '<%=url('admin/services/radicale/status')%>', null, function(x, data) { _data2elements(x); } ); diff --git a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot index c2bde961e..81bbcb72f 100644 --- a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot +++ b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot @@ -1,80 +1,86 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" -msgid "ShadowSocks-libev" +msgid "Access Control" msgstr "" -msgid "ShadowSocks-libev is running" +msgid "Allow all except listed" msgstr "" -msgid "ShadowSocks-libev is not running" +msgid "Allow listed only" msgstr "" -msgid "Global Setting" +msgid "Bypassed IP" msgstr "" -msgid "Enable" +msgid "Connection Timeout" msgstr "" -msgid "Enabled" +msgid "Custom" msgstr "" msgid "Disabled" msgstr "" -msgid "Custom" +msgid "Enable" msgstr "" -msgid "Server Address" +msgid "Enabled" msgstr "" -msgid "Server Port" +msgid "Encrypt Method" msgstr "" -msgid "Local Port" +msgid "Forwarded IP" msgstr "" -msgid "Connection Timeout" +msgid "Forwarding Tunnel" msgstr "" -msgid "Password" +msgid "Global Setting" msgstr "" -msgid "Encrypt Method" +msgid "Ignore List" msgstr "" -msgid "Ignore List" +msgid "LAN" msgstr "" -msgid "UDP Relay" +msgid "LAN IP List" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "Password" msgstr "" msgid "Relay Mode" msgstr "" -msgid "UDP Forward" +msgid "Server Address" msgstr "" -msgid "UDP Local Port" +msgid "Server Port" msgstr "" -msgid "Forwarding Tunnel" +msgid "ShadowSocks-libev" msgstr "" -msgid "Access Control" +msgid "ShadowSocks-libev is not running" msgstr "" -msgid "Allow listed only" +msgid "ShadowSocks-libev is running" msgstr "" -msgid "Allow all except listed" +msgid "UDP Forward" msgstr "" -msgid "LAN IP List" +msgid "UDP Local Port" msgstr "" -msgid "Bypassed IP" +msgid "UDP Relay" msgstr "" -msgid "Forwarded IP" +msgid "WAN" msgstr "" diff --git a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po index 90a0eff99..f86eee7e9 100644 --- a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po +++ b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po @@ -12,17 +12,26 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.6\n" -msgid "ShadowSocks-libev" -msgstr "ShadowSocks-libev" +msgid "Access Control" +msgstr "访问控制" -msgid "ShadowSocks-libev is running" -msgstr "ShadowSocks-libev 运行中" +msgid "Allow all except listed" +msgstr "仅允许列表外" -msgid "ShadowSocks-libev is not running" -msgstr "ShadowSocks-libev 未运行" +msgid "Allow listed only" +msgstr "仅允许列表内" -msgid "Global Setting" -msgstr "全局设置" +msgid "Bypassed IP" +msgstr "被忽略的IP" + +msgid "Connection Timeout" +msgstr "连接超时" + +msgid "Custom" +msgstr "自定义" + +msgid "Disabled" +msgstr "已禁用" msgid "Enable" msgstr "启用" @@ -30,62 +39,59 @@ msgstr "启用" msgid "Enabled" msgstr "已启用" -msgid "Disabled" -msgstr "已禁用" +msgid "Encrypt Method" +msgstr "加密方式" -msgid "Custom" -msgstr "自定义" +msgid "Forwarded IP" +msgstr "走代理的IP" -msgid "Server Address" -msgstr "服务器地址" +msgid "Forwarding Tunnel" +msgstr "UDP转发地址" -msgid "Server Port" -msgstr "服务器端口" +msgid "Global Setting" +msgstr "全局设置" + +msgid "Ignore List" +msgstr "忽略列表" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "内网IP列表" msgid "Local Port" msgstr "本地端口" -msgid "Connection Timeout" -msgstr "连接超时" - msgid "Password" msgstr "密码" -msgid "Encrypt Method" -msgstr "加密方式" - -msgid "Ignore List" -msgstr "忽略列表" - -msgid "UDP Relay" -msgstr "UDP中继" - msgid "Relay Mode" msgstr "中继模式" -msgid "UDP Forward" -msgstr "UDP转发" +msgid "Server Address" +msgstr "服务器地址" -msgid "UDP Local Port" -msgstr "UDP本地端口" +msgid "Server Port" +msgstr "服务器端口" -msgid "Forwarding Tunnel" -msgstr "UDP转发地址" +msgid "ShadowSocks-libev" +msgstr "ShadowSocks-libev" -msgid "Access Control" -msgstr "访问控制" +msgid "ShadowSocks-libev is not running" +msgstr "ShadowSocks-libev 未运行" -msgid "Allow listed only" -msgstr "仅允许列表内" +msgid "ShadowSocks-libev is running" +msgstr "ShadowSocks-libev 运行中" -msgid "Allow all except listed" -msgstr "仅允许列表外" +msgid "UDP Forward" +msgstr "UDP转发" -msgid "LAN IP List" -msgstr "内网IP列表" +msgid "UDP Local Port" +msgstr "UDP本地端口" -msgid "Bypassed IP" -msgstr "被忽略的IP" +msgid "UDP Relay" +msgstr "UDP中继" -msgid "Forwarded IP" -msgstr "走代理的IP" +msgid "WAN" +msgstr "" diff --git a/applications/luci-app-splash/luasrc/controller/splash/splash.lua b/applications/luci-app-splash/luasrc/controller/splash/splash.lua index 4add43559..13b8edce6 100644 --- a/applications/luci-app-splash/luasrc/controller/splash/splash.lua +++ b/applications/luci-app-splash/luasrc/controller/splash/splash.lua @@ -16,7 +16,7 @@ function index() node("splash", "splash").target = template("splash_splash/splash") node("splash", "blocked").target = template("splash/blocked") - entry({"admin", "status", "splash"}, call("action_status_admin"), _("Client-Splash")) + entry({"admin", "status", "splash"}, post("action_status_admin"), _("Client-Splash")) local page = node("splash", "publicstatus") page.target = call("action_status_public") diff --git a/applications/luci-app-splash/luasrc/view/admin_status/splash.htm b/applications/luci-app-splash/luasrc/view/admin_status/splash.htm index 831fa75f6..3415c205d 100644 --- a/applications/luci-app-splash/luasrc/view/admin_status/splash.htm +++ b/applications/luci-app-splash/luasrc/view/admin_status/splash.htm @@ -210,11 +210,11 @@ end <div id="cbi-splash-leases" class="cbi-map"> - <h2><a id="content" name="content"><%:Client-Splash%></a></h2> + <h2 name="content"><%:Client-Splash%></h2> <fieldset id="cbi-table-table" class="cbi-section"> <legend><%:Active Clients%></legend> <div class="cbi-section-node"> - <% if is_admin then %><form action="<%=REQUEST_URI%>" method="post"><% end %> + <% if is_admin then %><form action="<%=REQUEST_URI%>" method="post"><input type="hidden" name="token" value="<%=token%>" /><% end %> <table class="cbi-section-table"> <thead> <tr class="cbi-section-table-titles"> diff --git a/applications/luci-app-splash/luasrc/view/splash/blocked.htm b/applications/luci-app-splash/luasrc/view/splash/blocked.htm index 406139b51..c27e2fab6 100644 --- a/applications/luci-app-splash/luasrc/view/splash/blocked.htm +++ b/applications/luci-app-splash/luasrc/view/splash/blocked.htm @@ -9,7 +9,7 @@ local contacturl = luci.dispatcher.build_url("freifunk", "contact") <%+header%> -<h2><a id="content" name="content"><%:Blocked%></a></h2> +<h2 name="content"><%:Blocked%></h2> <p><%:Your access to this network has been blocked, most likely because you did something that our rules explicitly forbid.%></p> <p><%:To ask for the reason why you have been blocked or ask for access again you can try to contact the owner of this access point:%> <a href="<%=contacturl%>"><%:Contact%></a></p> diff --git a/applications/luci-app-splash/luasrc/view/splash/splash.htm b/applications/luci-app-splash/luasrc/view/splash/splash.htm index 7626b600d..8d84463ef 100644 --- a/applications/luci-app-splash/luasrc/view/splash/splash.htm +++ b/applications/luci-app-splash/luasrc/view/splash/splash.htm @@ -72,7 +72,7 @@ if has_custom_splash then <% else %> - <h2><a id="content" name="content"><%:Welcome%></a></h2> + <h2 name="content"><%:Welcome%></h2> <p><%:You are now connected to the free wireless mesh network%> <a href="<%=homepage%>"><%=community%></a>. <%:Please note that we are not an internet service provider but an experimental community network.%></p> diff --git a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua index 49eab5acd..3f26aeed6 100644 --- a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua +++ b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -20,7 +20,7 @@ function index() local labels = { s_output = _("Output plugins"), - s_system = _("System plugins"), + s_general = _("General plugins"), s_network = _("Network plugins"), conntrack = _("Conntrack"), @@ -42,9 +42,11 @@ function index() network = _("Network"), nut = _("UPS"), olsrd = _("OLSRd"), + openvpn = _("OpenVPN"), ping = _("Ping"), processes = _("Processes"), rrdtool = _("RRDTool"), + sensors = _("Sensors"), splash_leases = _("Splash Leases"), tcpconns = _("TCP Connections"), unixsock = _("UnixSock"), @@ -54,15 +56,15 @@ function index() -- our collectd menu local collectd_menu = { output = { "csv", "network", "rrdtool", "unixsock" }, - system = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "uptime" }, - network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" } + general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "sensors", "uptime" }, + network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "openvpn", "ping", "splash_leases", "tcpconns", "iwinfo" } } -- create toplevel menu nodes local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80) st.index = true - entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Collectd"), 10).subindex = true + entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Setup"), 20).subindex = true -- populate collectd plugin menu @@ -87,7 +89,7 @@ function index() end -- output views - local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 80) + local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 10) page.setuser = "nobody" page.setgroup = "nogroup" @@ -170,7 +172,7 @@ function statistics_render() if #instances == 0 then --instances = { graph.tree:plugin_instances( plugin )[1] } instances = graph.tree:plugin_instances( plugin ) - is_index = true + is_index = (#instances > 1) -- index instance requested elseif instances[1] == "-" then diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua index 59266e553..950d7a797 100644 --- a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/olsrd.lua @@ -12,7 +12,7 @@ enable.default = 0 host = s:option(Value, "Host", translate("Host"), translate("IP or hostname where to get the txtinfo output from")) host.placeholder = "127.0.0.1" -host.datatype = "host" +host.datatype = "host(1)" host.rmempty = true port = s:option(Value, "Port", translate("Port")) diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua new file mode 100644 index 000000000..193f0448a --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua @@ -0,0 +1,56 @@ +-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org> +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o + + +m = Map("luci_statistics", + translate("OpenVPN Plugin Configuration"), + translate("The OpenVPN plugin gathers information about the current vpn connection status.")) + +s = m:section( NamedSection, "collectd_openvpn", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = "0" + + +o = s:option(Flag, "CollectIndividualUsers", translate("Generate a separate graph for each logged user")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectUserCount", translate("Aggregate number of connected users")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectCompression", translate("Gather compression statistics")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "ImprovedNamingSchema", translate("Use improved naming schema")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(DynamicList, "StatusFile", translate("OpenVPN status files")) +o.rmempty = true +o:depends("enable", 1) + +local status_files = nixio.fs.glob("/var/run/openvpn.*.status") +if status_files then + local status_file + for status_file in status_files do + o:value(status_file) + end +end + +return m diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua new file mode 100644 index 000000000..77e36bfaf --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua @@ -0,0 +1,125 @@ +-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org> +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o +local sensor_types = { + ["12v"] = "voltage", + ["2.0v"] = "voltage", + ["2.5v"] = "voltage", + ["3.3v"] = "voltage", + ["5.0v"] = "voltage", + ["5v"] = "voltage", + ["ain1"] = "voltage", + ["ain2"] = "voltage", + ["cpu_temp"] = "temperature", + ["fan1"] = "fanspeed", + ["fan2"] = "fanspeed", + ["fan3"] = "fanspeed", + ["fan4"] = "fanspeed", + ["fan5"] = "fanspeed", + ["fan6"] = "fanspeed", + ["fan7"] = "fanspeed", + ["in0"] = "voltage", + ["in10"] = "voltage", + ["in2"] = "voltage", + ["in3"] = "voltage", + ["in4"] = "voltage", + ["in5"] = "voltage", + ["in6"] = "voltage", + ["in7"] = "voltage", + ["in8"] = "voltage", + ["in9"] = "voltage", + ["power1"] = "power", + ["remote_temp"] = "temperature", + ["temp1"] = "temperature", + ["temp2"] = "temperature", + ["temp3"] = "temperature", + ["temp4"] = "temperature", + ["temp5"] = "temperature", + ["temp6"] = "temperature", + ["temp7"] = "temperature", + ["temp"] = "temperature", + ["vccp1"] = "voltage", + ["vccp2"] = "voltage", + ["vdd"] = "voltage", + ["vid1"] = "voltage", + ["vid2"] = "voltage", + ["vid3"] = "voltage", + ["vid4"] = "voltage", + ["vid5"] = "voltage", + ["vid"] = "voltage", + ["vin1"] = "voltage", + ["vin2"] = "voltage", + ["vin3"] = "voltage", + ["vin4"] = "voltage", + ["volt12"] = "voltage", + ["volt5"] = "voltage", + ["voltbatt"] = "voltage", + ["vrm"] = "voltage" + +} + + +m = Map("luci_statistics", + translate("Sensors Plugin Configuration"), + translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics.")) + +s = m:section( NamedSection, "collectd_sensors", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = 0 + + +o = s:option(Flag, "__all", translate("Monitor all sensors")) +o:depends("enable", 1) +o.default = 1 +o.write = function() end +o.cfgvalue = function(self, sid) + local v = self.map:get(sid, "Sensor") + if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then + return "1" + end +end + + +o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries.")) +o:depends({enable = 1, __all = "" }) +o.widget = "select" +o.rmempty = true +o.size = 0 + +local sensorcli = io.popen("/usr/sbin/sensors -u -A") +if sensorcli then + local bus, sensor + + while true do + local ln = sensorcli:read("*ln") + if not ln then + break + elseif ln:match("^[%w-]+$") then + bus = ln + elseif ln:match("^[%w-]+:$") then + sensor = ln:sub(0, -2):lower() + if bus and sensor_types[sensor] then + o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor }) + o.size = o.size + 1 + end + elseif ln == "" then + bus = nil + sensor = nil + end + end + + sensorcli:close() +end + + +o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +o.default = 0 +o.rmempty = true +o:depends({ enable = 1, __all = "" }) + +return m diff --git a/applications/luci-app-statistics/luasrc/statistics/i18n.lua b/applications/luci-app-statistics/luasrc/statistics/i18n.lua index 5a2800d5f..7877e61ab 100644 --- a/applications/luci-app-statistics/luasrc/statistics/i18n.lua +++ b/applications/luci-app-statistics/luasrc/statistics/i18n.lua @@ -26,15 +26,6 @@ function Instance._subst( self, str, val ) return str end -function Instance._translate( self, key, alt ) - local val = self.i18n.string(key) - if val ~= key then - return val - else - return alt - end -end - function Instance.title( self, plugin, pinst, dtype, dinst, user_title ) local title = user_title or @@ -73,24 +64,17 @@ end function Instance.ds( self, source ) - local label = source.title or self:_translate( - string.format( "stat_ds_%s_%s_%s", source.type, source.instance, source.ds ), - self:_translate( - string.format( "stat_ds_%s_%s", source.type, source.instance ), - self:_translate( - string.format( "stat_ds_label_%s__%s", source.type, source.ds ), - self:_translate( - string.format( "stat_ds_%s", source.type ), - source.type .. "_" .. source.instance:gsub("[^%w]","_") .. "_" .. source.ds - ) - ) - ) - ) + local label = source.title or + "dt=%s/di=%s/ds=%s" % { + (source.type and #source.type > 0) and source.type or "(nil)", + (source.instance and #source.instance > 0) and source.instance or "(nil)", + (source.ds and #source.ds > 0) and source.ds or "(nil)" + } return self:_subst( label, { dtype = source.type, dinst = source.instance, dsrc = source.ds - } ) + } ):gsub(":", "\\:") end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua index d8317a817..5d4ad9859 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua @@ -397,6 +397,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index ) transform_rpn = dopts.transform_rpn or "0,+", noarea = dopts.noarea or false, title = dopts.title or nil, + weight = dopts.weight or nil, ds = dsource, type = dtype, instance = dinst, @@ -469,6 +470,12 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index ) for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end end + -- sort sources + table.sort(_sources, function(a, b) + local x = a.weight or a.index or 0 + local y = b.weight or b.index or 0 + return x < y + end) -- create DEF statements for each instance for i, source in ipairs(_sources) do diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua index efa631d55..6f687d218 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua @@ -66,36 +66,40 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- processed packets (tx DS) if_packets__tx = { + weight = 1, overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "00ff00", -- processed tx is green - title = "Processed (tx)" + title = "Processed (TX)" }, -- processed packets (rx DS) if_packets__rx = { + weight = 2, overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes color = "0000ff", -- processed rx is blue - title = "Processed (rx)" + title = "Processed (RX)" }, -- packet errors (tx DS) if_errors__tx = { + weight = 0, overlay = true, -- don't summarize total = true, -- report total amount of packets color = "ff5500", -- tx errors are orange - title = "Errors (tx)" + title = "Errors (TX)" }, -- packet errors (rx DS) if_errors__rx = { + weight = 3, overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of packets color = "ff0000", -- rx errors are red - title = "Errors (rx)" + title = "Errors (RX)" } } } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua index 3ca3381ec..194afd6fc 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua @@ -74,6 +74,8 @@ function rrdargs( graph, plugin, plugin_instance ) local stations = { title = "%H: Associated stations on %pi", vlabel = "Stations", + y_min = "0", + alt_autoscale_max = true, number_format = "%3.0lf", data = { types = { "stations" }, diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua index b4f2ac185..7b6acf366 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua @@ -22,11 +22,13 @@ function rrdargs( graph, plugin, plugin_instance ) -- special options for single data lines options = { if_octets__tx = { + title = "Bytes (TX)", total = true, -- report total amount of bytes color = "00ff00" -- tx is green }, if_octets__rx = { + title = "Bytes (RX)", flip = true, -- flip rx line total = true, -- report total amount of bytes color = "0000ff" -- rx is blue @@ -59,6 +61,8 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- processed packets (tx DS) if_packets__tx = { + weight = 2, + title = "Total (TX)", overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "00ff00" -- processed tx is green @@ -66,6 +70,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- processed packets (rx DS) if_packets__rx = { + weight = 3, + title = "Total (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes @@ -74,6 +80,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- dropped packets (tx DS) if_dropped__tx = { + weight = 1, + title = "Dropped (TX)", overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "660055" -- dropped tx is ... dunno ;) @@ -81,14 +89,18 @@ function rrdargs( graph, plugin, plugin_instance ) -- dropped packets (rx DS) if_dropped__rx = { + weight = 4, + title = "Dropped (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes - color = "440066" -- dropped rx is violett + color = "ff00ff" -- dropped rx is violett }, -- packet errors (tx DS) if_errors__tx = { + weight = 0, + title = "Errors (TX)", overlay = true, -- don't summarize total = true, -- report total amount of packets color = "ff5500" -- tx errors are orange @@ -96,6 +108,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- packet errors (rx DS) if_errors__rx = { + weight = 5, + title = "Errors (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of packets @@ -122,6 +136,7 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- multicast packets if_multicast = { + title = "Packets", total = true, -- report total amount of packets color = "0000ff" -- multicast is blue } @@ -146,6 +161,7 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- collision rate if_collisions = { + title = "Collisions", total = true, -- report total amount of packets color = "ff0000" -- collsions are red } @@ -173,15 +189,19 @@ function rrdargs( graph, plugin, plugin_instance ) }, -- special options for single data lines - options = { -- XXX: fixme (define colors...) - if_tx_errors = { - total = true - }, - - if_rx_errors = { - flip = true, - total = true - } + options = { + if_tx_errors_aborted_value = { total = true, color = "ffff00", title = "Aborted (TX)" }, + if_tx_errors_carrier_value = { total = true, color = "ffcc00", title = "Carrier (TX)" }, + if_tx_errors_fifo_value = { total = true, color = "ff9900", title = "Fifo (TX)" }, + if_tx_errors_heartbeat_value = { total = true, color = "ff6600", title = "Heartbeat (TX)" }, + if_tx_errors_window_value = { total = true, color = "ff3300", title = "Window (TX)" }, + + if_rx_errors_length_value = { flip = true, total = true, color = "ff0000", title = "Length (RX)" }, + if_rx_errors_missed_value = { flip = true, total = true, color = "ff0033", title = "Missed (RX)" }, + if_rx_errors_over_value = { flip = true, total = true, color = "ff0066", title = "Over (RX)" }, + if_rx_errors_crc_value = { flip = true, total = true, color = "ff0099", title = "CRC (RX)" }, + if_rx_errors_fifo_value = { flip = true, total = true, color = "ff00cc", title = "Fifo (RX)" }, + if_rx_errors_frame_value = { flip = true, total = true, color = "ff00ff", title = "Frame (RX)" } } } } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua index 6dc81bc1d..8b04ab8b3 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua @@ -44,9 +44,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) y_max = "100", number_format = "%5.1lf%%", data = { - sources = { - percent = { "percent" } - }, instances = { percent = "charge" }, @@ -77,9 +74,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) vlabel = "Minutes", number_format = "%.1lfm", data = { - sources = { - timeleft = { "timeleft" } - }, instances = { timeleft = { "battery" } }, diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua new file mode 100644 index 000000000..876e871d1 --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua @@ -0,0 +1,48 @@ +-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org> +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.openvpn", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + local inst = plugin_instance:gsub("^openvpn%.(.+)%.status$", "%1") + + return { + { + title = "%%H: OpenVPN \"%s\" - Traffic" % inst, + vlabel = "Bytes/s", + data = { + instances = { + if_octets = { "traffic", "overhead" } + }, + sources = { + if_octets = { "tx", "rx" } + }, + options = { + if_octets_traffic_tx = { weight = 0, title = "Bytes (TX)", total = true, color = "00ff00" }, + if_octets_overhead_tx = { weight = 1, title = "Overhead (TX)", total = true, color = "ff9900" }, + if_octets_overhead_rx = { weight = 2, title = "Overhead (RX)", total = true, flip = true, color = "ff00ff" }, + if_octets_traffic_rx = { weight = 3, title = "Bytes (RX)", total = true, flip = true, color = "0000ff" } + } + } + }, + + { + title = "%%H: OpenVPN \"%s\" - Compression" % inst, + vlabel = "Bytes/s", + data = { + instances = { + compression = { "data_out", "data_in" } + }, + sources = { + compression = { "uncompressed", "compressed" } + }, + options = { + compression_data_out_uncompressed = { weight = 0, title = "Uncompressed (TX)", total = true, color = "00ff00" }, + compression_data_out_compressed = { weight = 1, title = "Compressed (TX)", total = true, color = "008800" }, + compression_data_in_compressed = { weight = 2, title = "Compressed (RX)", total = true, flip = true, color = "000088" }, + compression_data_in_uncompressed = { weight = 3, title = "Uncompressed (RX)", total = true, flip = true, color = "0000ff" } + } + } + } + } +end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua index 347d756f7..f0a594816 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua @@ -6,24 +6,33 @@ module("luci.statistics.rrdtool.definitions.ping", package.seeall) function rrdargs( graph, plugin, plugin_instance, dtype ) return { -- Ping roundtrip time - { title = "%H: ICMP Round Trip Time", vlabel = "ms", - number_format = "%5.1lf ms", data = { + { title = "%H: ICMP Round Trip Time", + vlabel = "ms", + number_format = "%5.1lf ms", + data = { sources = { ping = { "value" } }, - options = { ping__value = { noarea = true, title = "%di" } } + options = { ping__value = { + noarea = true, overlay = true, title = "%di" } } } }, -- Ping droprate - { title = "%H: ICMP Drop Rate", vlabel = "%", - number_format = "%5.2lf %%", data = { + { title = "%H: ICMP Drop Rate", + vlabel = "%", + number_format = "%5.2lf %%", + data = { types = { "ping_droprate" }, - options = { ping_droprate = { title = "%di" } } + options = { ping_droprate = { + noarea = true, overlay = true, title = "%di" } } } }, -- Ping standard deviation - { title = "%H: ICMP Standard Deviation", vlabel = "ms", - number_format = "%5.2lf ms", data = { + { title = "%H: ICMP Standard Deviation", + vlabel = "ms", + number_format = "%5.2lf ms", + data = { types = { "ping_stddev" }, - options = { ping_stddev = { title = "%di" } } + options = { ping_stddev = { + noarea = true, overlay = true, title = "%di" } } } }, } end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua new file mode 100644 index 000000000..f8bddb96e --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua @@ -0,0 +1,24 @@ +-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org> +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.sensors", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + return { + { + per_instance = true, + title = "%H: %pi - %di", + vlabel = "\176C", + number_format = "%4.1lf\176C", + data = { + types = { "temperature" }, + options = { + temperature__value = { + color = "ff0000", + title = "Temperature" + } + } + } + } + } +end diff --git a/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm b/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm index 0fb3d5637..38271995e 100644 --- a/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm +++ b/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Statistics%></a></h2> +<h2 name="content"><%:Statistics%></h2> <p><%_The statistics package uses <a href="https://collectd.org/">Collectd</a> to gather data and <a href="http://oss.oetiker.ch/rrdtool/">RRDtool</a> to diff --git a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm index 77169518d..ebc78badb 100644 --- a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm +++ b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Statistics%></a></h2> +<h2 name="content"><%:Statistics%></h2> <form action="" method="get"> <select name="host"> diff --git a/applications/luci-app-statistics/po/ca/statistics.po b/applications/luci-app-statistics/po/ca/statistics.po index ba47db023..5ccaa4a40 100644 --- a/applications/luci-app-statistics/po/ca/statistics.po +++ b/applications/luci-app-statistics/po/ca/statistics.po @@ -30,6 +30,9 @@ msgstr "Afegeix múltiples hosts separats per espai." msgid "Add notification command" msgstr "Afegeix ordre de notificació" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Directori base" @@ -63,9 +66,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Configuració Collectd" @@ -132,6 +132,12 @@ msgstr "Adreça electrònica" msgid "Enable this plugin" msgstr "Activa aquest connector" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -150,6 +156,15 @@ msgstr "Neteja la memòria cau després de" msgid "Forwarding between listen and server addresses" msgstr "Readreçant entre adreces que reben connexions i adreces de servidors" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Gràfics" @@ -179,6 +194,9 @@ msgstr "" "Ací pots definir diversos criteris pels que es seleccionaran les regles " "iptables monitoritzades ." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Host" @@ -242,6 +260,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "Monitoritza tots els ports locals que reben connexions" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitoritza dispositius" @@ -305,6 +326,15 @@ msgstr "Configuració del connector OLSRd" msgid "Only create average RRAs" msgstr "Crea només RRAs mitjans" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Opcions" @@ -362,12 +392,24 @@ msgstr "" msgid "Seconds" msgstr "Segons" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Màquina servidor" msgid "Server port" msgstr "Port del servidor" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Monitoreig de classe shaping" @@ -418,9 +460,6 @@ msgstr "Marques de temps emmagatzemades" msgid "System Load" msgstr "Càrrega de sistema" -msgid "System plugins" -msgstr "Connectors de sistema" - msgid "TCP Connections" msgstr "Connexions TCP" @@ -445,6 +484,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -492,6 +536,9 @@ msgstr "" "es fa servir en conjunció amb Mail::SpamAssassin::Plugin. Plugin::Collectd " "també es pot utilitzar d'altres maneres." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -580,19 +627,20 @@ msgstr "" "Això pot inutilitzar el dispositiu!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"El paquet d'estadísitiques està basat en <a href=\"http://collectd.org/index." -"shtml\">Collectd</a> i utilitza l'eina <a href=\"http://oss.oetiker.ch/" -"rrdtool/\">RRD</a> per renderitzar imatges de diagrama de les dades " -"recoliildes." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -648,6 +696,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Fitxer PID usat" @@ -663,6 +714,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "p.e. br-ff" @@ -684,6 +739,22 @@ msgstr "segons; múltiples separats per espais" msgid "server interfaces" msgstr "interfícies de servidor" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Connectors de sistema" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "El paquet d'estadísitiques està basat en <a href=\"http://collectd.org/" +#~ "index.shtml\">Collectd</a> i utilitza l'eina <a href=\"http://oss.oetiker." +#~ "ch/rrdtool/\">RRD</a> per renderitzar imatges de diagrama de les dades " +#~ "recoliildes." + #~ msgid "" #~ "The wireless plugin collects statistics about wireless signal strength, " #~ "noise and quality." diff --git a/applications/luci-app-statistics/po/cs/statistics.po b/applications/luci-app-statistics/po/cs/statistics.po index 9a3ab67d2..bfa1b899b 100644 --- a/applications/luci-app-statistics/po/cs/statistics.po +++ b/applications/luci-app-statistics/po/cs/statistics.po @@ -26,6 +26,9 @@ msgstr "Přidat více hostů, oddělených mezerou" msgid "Add notification command" msgstr "Přidat příkaz pro upozornění" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Základní adresář" @@ -59,9 +62,6 @@ msgstr "CollectRoutes" msgid "CollectTopology" msgstr "CollectTopology" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Nastavení Collectd" @@ -128,6 +128,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Povolit tento plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -146,6 +152,15 @@ msgstr "Vyprázdnit cache po" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Grafy" @@ -173,6 +188,9 @@ msgstr "" "Zde můžete definovat různá kritéria, podle kterých budou vybrána sledovaná " "pravidla iptables." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Hostitel" @@ -237,6 +255,9 @@ msgstr "Sledovat vše kromě vybraných" msgid "Monitor all local listen ports" msgstr "Monitorovat všechny naslouchající porty" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Sledovat zařízení" @@ -300,6 +321,15 @@ msgstr "Nastavení pluginu OLSRd" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Možnosti" @@ -358,12 +388,24 @@ msgstr "Skript" msgid "Seconds" msgstr "Sekundy" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Hostitel serveru" msgid "Server port" msgstr "Port serveru" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -412,9 +454,6 @@ msgstr "" msgid "System Load" msgstr "Zatížení systému" -msgid "System plugins" -msgstr "Systémové pluginy" - msgid "TCP Connections" msgstr "TCP spojení" @@ -439,6 +478,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "Plugin Conntrack shromažďuje statistiky o počtu sledovaných spojení." @@ -485,6 +529,9 @@ msgstr "" "použití ve spojení s Mail::SpamAssasin::Plugin::Collectd, ale stejně dobře " "může být využit jinak." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -566,18 +613,20 @@ msgstr "" "</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Balíček Statistiky je založen na <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> a využívá <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> pro kreslení diagramů z collectd." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -631,6 +680,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Použitý soubor PID (identifikátoru procesu)" @@ -646,6 +698,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "Nastavení pluginu Wireless Iwinfo" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "např. br-ff" @@ -667,6 +723,21 @@ msgstr "sekundy, více hodnot oddělených mezerou" msgid "server interfaces" msgstr "rozhraní serveru" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Systémové pluginy" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Balíček Statistiky je založen na <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> a využívá <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " +#~ "Tool</a> pro kreslení diagramů z collectd." + #~ msgid "Installed network plugins:" #~ msgstr "Instalované síťové pluginy:" diff --git a/applications/luci-app-statistics/po/de/statistics.po b/applications/luci-app-statistics/po/de/statistics.po index 6c93589bc..91baf0e06 100644 --- a/applications/luci-app-statistics/po/de/statistics.po +++ b/applications/luci-app-statistics/po/de/statistics.po @@ -28,6 +28,9 @@ msgstr "Mehrere Hosts durch Leerzeichen getrennt hinzufuegen" msgid "Add notification command" msgstr "Benachrichtigungskommando hinzufügen" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Basisverzeichnis" @@ -61,9 +64,6 @@ msgstr "Informationen über Routen sammeln (CollectRoutes)" msgid "CollectTopology" msgstr "Informationen über die Netzwerktopologie sammeln (CollectTopology)" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd Einstellungen" @@ -130,6 +130,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Plugin aktivieren" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -148,6 +154,15 @@ msgstr "Leerungsintervall für Zwischenspeicher" msgid "Forwarding between listen and server addresses" msgstr "Weiterleitung zwischen Listen- und Server-Adressen" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Diagramme" @@ -179,6 +194,9 @@ msgstr "" "Hier werden die Kriterien festgelegt nach welchen die zu überwachenden " "Firewall-Regeln ausgewählt werden." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Host" @@ -244,6 +262,9 @@ msgstr "Alle bis auf Angegebene überwachen" msgid "Monitor all local listen ports" msgstr "Alle durch lokale Dienste genutzten Ports überwachen" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Geräte überwachen" @@ -307,6 +328,15 @@ msgstr "OLSRd-Plugin-Konfiguration" msgid "Only create average RRAs" msgstr "Nur 'average' RRAs erzeugen" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Optionen" @@ -364,12 +394,24 @@ msgstr "Skript" msgid "Seconds" msgstr "Sekunden" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Server-Host" msgid "Server port" msgstr "Server-Port" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Shapingklassen überwachen" @@ -418,9 +460,6 @@ msgstr "gespeicherte Zeitspannen" msgid "System Load" msgstr "Systemlast" -msgid "System plugins" -msgstr "Systemplugins" - msgid "TCP Connections" msgstr "TCP-Verbindungen" @@ -448,6 +487,11 @@ msgstr "" "Erweiterung." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -497,6 +541,9 @@ msgstr "" "Plugin ist primär für die Verwendung zusammen mit Mail::SpamAssasin::Plugin::" "Collectd gedacht, kann aber auch anderweitig verwendet werden." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -585,18 +632,20 @@ msgstr "" "machen, da Systemspeicher für den regulären Betrieb fehlt!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Das Statistik-Paket basiert auf <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> und nutzt <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> um die gesammelten Daten in Diagramme zu rendern." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -652,6 +701,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Pfad zu PID-Datei" @@ -667,6 +719,10 @@ msgstr "Drahtlos" msgid "Wireless iwinfo Plugin Configuration" msgstr "Wireless-iwinfo Plugin Konfiguration" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "z.B. br-ff" @@ -688,6 +744,21 @@ msgstr "mehrere mit Leerzeichen trennen" msgid "server interfaces" msgstr "Server-Schnittstellen" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Systemplugins" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Das Statistik-Paket basiert auf <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> und nutzt <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " +#~ "Tool</a> um die gesammelten Daten in Diagramme zu rendern." + #~ msgid "Installed network plugins:" #~ msgstr "Installierte Netzwerk-Plugins:" diff --git a/applications/luci-app-statistics/po/el/statistics.po b/applications/luci-app-statistics/po/el/statistics.po index 0893e2e23..746284f8d 100644 --- a/applications/luci-app-statistics/po/el/statistics.po +++ b/applications/luci-app-statistics/po/el/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + #, fuzzy msgid "Base Directory" msgstr "Κατάλογος βάσης" @@ -62,9 +65,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Ρυθμίσεις Collectd" @@ -132,6 +132,12 @@ msgstr "Ηλ. Ταχυδρομείο" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -150,6 +156,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Γραφήματα" @@ -172,6 +187,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -235,6 +253,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -298,6 +319,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -355,12 +385,24 @@ msgstr "" msgid "Seconds" msgstr "Δευτερόλεπτα" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -409,9 +451,6 @@ msgstr "" msgid "System Load" msgstr "Φόρτος Συστήματος" -msgid "System plugins" -msgstr "Πρόσθετα συστήματος" - msgid "TCP Connections" msgstr "Συνδέσεις TCP" @@ -436,6 +475,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -470,6 +514,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -530,18 +577,20 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Το πακέτο στατιστικών βασίζεται στο <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> και χρησιμοποιεί το <a href=\"http://oss.oetiker.ch/rrdtool/" -"\">RRD Tool</a> για να σχεδιάσει διαγράμματα από τα συλλεγόμενα δεδομένα." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -589,6 +638,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Αρχείο PID σε χρήση" @@ -604,6 +656,10 @@ msgstr "Ασύρματο" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "π.χ. br-ff" @@ -624,3 +680,19 @@ msgstr "" msgid "server interfaces" msgstr "" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Πρόσθετα συστήματος" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Το πακέτο στατιστικών βασίζεται στο <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> και χρησιμοποιεί το <a href=\"http://oss.oetiker.ch/" +#~ "rrdtool/\">RRD Tool</a> για να σχεδιάσει διαγράμματα από τα συλλεγόμενα " +#~ "δεδομένα." diff --git a/applications/luci-app-statistics/po/en/statistics.po b/applications/luci-app-statistics/po/en/statistics.po index 4d9431377..79f710c97 100644 --- a/applications/luci-app-statistics/po/en/statistics.po +++ b/applications/luci-app-statistics/po/en/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "Add notification command" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Base Directory" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd Settings" @@ -130,6 +130,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Enable this plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -148,6 +154,15 @@ msgstr "Flush cache after" msgid "Forwarding between listen and server addresses" msgstr "Forwarding between listen and server addresses" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Graphs" @@ -177,6 +192,9 @@ msgstr "" "Here you can define various criteria by which the monitored iptables rules " "are selected." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -240,6 +258,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "Monitor all local listen ports" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitor devices" @@ -303,6 +324,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "Only create average RRAs" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Options" @@ -360,12 +390,24 @@ msgstr "" msgid "Seconds" msgstr "Seconds" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Server host" msgid "Server port" msgstr "Server port" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Shaping class monitoring" @@ -414,9 +456,6 @@ msgstr "Stored timespans" msgid "System Load" msgstr "System Load" -msgid "System plugins" -msgstr "System plugins" - msgid "TCP Connections" msgstr "TCP Connections" @@ -441,6 +480,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -487,6 +531,9 @@ msgstr "" "to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can " "be used in other ways as well." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -568,18 +615,20 @@ msgstr "" "directory. This can render the device unusable!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -634,6 +683,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Used PID file" @@ -649,6 +701,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "e.g. br-ff" @@ -670,6 +726,21 @@ msgstr "seconds; multiple separated by space" msgid "server interfaces" msgstr "server interfaces" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." + #~ msgid "" #~ "The wireless plugin collects statistics about wireless signal strength, " #~ "noise and quality." diff --git a/applications/luci-app-statistics/po/es/statistics.po b/applications/luci-app-statistics/po/es/statistics.po index f43ea4c40..7067710f1 100644 --- a/applications/luci-app-statistics/po/es/statistics.po +++ b/applications/luci-app-statistics/po/es/statistics.po @@ -28,6 +28,9 @@ msgstr "Añadir múltiples máquinas separadas por espacio." msgid "Add notification command" msgstr "Añadir comando de notificación" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Directorio Base" @@ -61,9 +64,6 @@ msgstr "Rutas" msgid "CollectTopology" msgstr "Topología" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Configuración de Collectd" @@ -130,6 +130,12 @@ msgstr "Correo electrónico" msgid "Enable this plugin" msgstr "Activar este plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -148,6 +154,15 @@ msgstr "Vaciar caché tras" msgid "Forwarding between listen and server addresses" msgstr "Retransmitir entre las direcciones de escucha y servidor" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Gráficas" @@ -176,6 +191,9 @@ msgstr "" "Aquí puede definir varios criterios de selección de reglas de iptables " "monitorizadas." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Máquina" @@ -239,6 +257,9 @@ msgstr "Monitorizar todos menos los especificados" msgid "Monitor all local listen ports" msgstr "Monitorizar todos los puertos de escucha locales" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Dispositivos a monitonizar" @@ -302,6 +323,15 @@ msgstr "Configuración del plugin \"OLSRd\"" msgid "Only create average RRAs" msgstr "Crear sólo RRAs medias" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Opciones" @@ -359,12 +389,24 @@ msgstr "Guión" msgid "Seconds" msgstr "Segundos" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Máquina servidor" msgid "Server port" msgstr "Puerto servidor" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Monitorización de la clase shaping" @@ -413,9 +455,6 @@ msgstr "Intervalos almacenados" msgid "System Load" msgstr "Carga del sistema" -msgid "System plugins" -msgstr "Plugins del sistema" - msgid "TCP Connections" msgstr "Conexiones TCP" @@ -444,6 +483,11 @@ msgstr "" "txtinfo de OLSRd." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -495,6 +539,9 @@ msgstr "" "utilizado en conjunto con Mail::SpamAssasin::Plugin::Collectd pero puede " "utilizarse de diferentes formas." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -581,18 +628,20 @@ msgstr "" "puede hacer que el dispositivo funcione mal!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"El paquete \"estadísticas\" está basado en <a href=\"http://collectd.org/" -"index.shtml\">Collectd</a> y utiliza <a href=\"http://oss.oetiker.ch/rrdtool/" -"\">RRD Tool</a> para dibujar gráficos con los datos recogidos." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -648,6 +697,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Archivo PID utilizado" @@ -663,6 +715,10 @@ msgstr "Red inalámbrica" msgid "Wireless iwinfo Plugin Configuration" msgstr "Configuración plugin \"Wireless iwinfo\"" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "p.e. br-ff" @@ -684,6 +740,21 @@ msgstr "segundos (varios separados por espacio)" msgid "server interfaces" msgstr "interfaces servidores" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Plugins del sistema" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "El paquete \"estadísticas\" está basado en <a href=\"http://collectd.org/" +#~ "index.shtml\">Collectd</a> y utiliza <a href=\"http://oss.oetiker.ch/" +#~ "rrdtool/\">RRD Tool</a> para dibujar gráficos con los datos recogidos." + #~ msgid "Installed network plugins:" #~ msgstr "Plugins de red instalados:" diff --git a/applications/luci-app-statistics/po/fr/statistics.po b/applications/luci-app-statistics/po/fr/statistics.po index 643c2686c..194a22048 100644 --- a/applications/luci-app-statistics/po/fr/statistics.po +++ b/applications/luci-app-statistics/po/fr/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "Ajoute une commande de notification" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Répertoire de base" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Paramètres Collectd" @@ -130,6 +130,12 @@ msgstr "Courriel" msgid "Enable this plugin" msgstr "Activer ce greffon" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -148,6 +154,15 @@ msgstr "Vidanger le cache après" msgid "Forwarding between listen and server addresses" msgstr "Transfert entre les adresses en écoute et du serveur" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Graphiques" @@ -178,6 +193,9 @@ msgstr "" "Vous pouvez définir ici les critères variés pour sélectionner les règles " "iptables à surveiller." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -241,6 +259,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "Surveiller tous les ports en écoute locaux" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Périphériques à surveiller" @@ -304,6 +325,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "Créer seulement des RRAs moyens" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Options" @@ -361,12 +391,24 @@ msgstr "" msgid "Seconds" msgstr "Secondes" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Hôte du serveur" msgid "Server port" msgstr "Port du serveur" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Surveillance liées à la priorité" @@ -415,9 +457,6 @@ msgstr "Durée de la période enregistrée" msgid "System Load" msgstr "Charge-système" -msgid "System plugins" -msgstr "Greffons liés au système" - msgid "TCP Connections" msgstr "Connexions TCP" @@ -442,6 +481,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -488,6 +532,9 @@ msgstr "" "Ce greffon est d'abord destiné à être utilisé avec Mail::SpamAssasin::" "Plugin::Collectd mais peut être utilisé d'autres manières également." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -576,19 +623,20 @@ msgstr "" "le matériel inutilisable !</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Ce paquet d'outils statistiques s'appuie sur le logiciel <a href=\"http://" -"collectd.org/index.shtml\">Collectd</a> et utilise <a href=\"http://oss." -"oetiker.ch/rrdtool/\">RRD Tool</a> pour calculer les graphes issus des " -"données collectées." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -642,6 +690,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Fichier PID utilisé" @@ -657,6 +708,10 @@ msgstr "Sans-fil" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "p.ex. br-ff" @@ -678,6 +733,22 @@ msgstr "En secondes ; séparer différentes valeurs par des espaces" msgid "server interfaces" msgstr "Interfaces du serveur" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Greffons liés au système" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Ce paquet d'outils statistiques s'appuie sur le logiciel <a href=\"http://" +#~ "collectd.org/index.shtml\">Collectd</a> et utilise <a href=\"http://oss." +#~ "oetiker.ch/rrdtool/\">RRD Tool</a> pour calculer les graphes issus des " +#~ "données collectées." + #~ msgid "" #~ "The wireless plugin collects statistics about wireless signal strength, " #~ "noise and quality." diff --git a/applications/luci-app-statistics/po/he/statistics.po b/applications/luci-app-statistics/po/he/statistics.po index 542a9c012..10e8a1268 100644 --- a/applications/luci-app-statistics/po/he/statistics.po +++ b/applications/luci-app-statistics/po/he/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -127,6 +127,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -145,6 +151,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -167,6 +182,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -230,6 +248,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -293,6 +314,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -350,12 +380,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -404,9 +446,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -431,6 +470,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -465,6 +509,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -525,14 +572,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -581,6 +633,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -596,6 +651,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/hu/statistics.po b/applications/luci-app-statistics/po/hu/statistics.po index b91db7980..5d384144b 100644 --- a/applications/luci-app-statistics/po/hu/statistics.po +++ b/applications/luci-app-statistics/po/hu/statistics.po @@ -26,6 +26,9 @@ msgstr "" msgid "Add notification command" msgstr "Értesítési parancs hozzáadása" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Alapkönyvtár" @@ -59,9 +62,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd beállítások" @@ -128,6 +128,12 @@ msgstr "E-mail" msgid "Enable this plugin" msgstr "Bővítmény engedélyezése" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -146,6 +152,15 @@ msgstr "Gyorsítótár ürítése ezután:" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Grafikonok" @@ -176,6 +191,9 @@ msgstr "" "Itt addhatók meg különböző feltételek, amelyek alapján a megfigyelt iptables " "szabályok kiválasztásra kerülnek." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Gép" @@ -242,6 +260,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Eszközök figyelése" @@ -305,6 +326,15 @@ msgstr "OLSRd bővítmény beállítása" msgid "Only create average RRAs" msgstr "Csak átlag RRA-k létrehozása" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Lehetőségek" @@ -362,12 +392,24 @@ msgstr "Parancsfájl" msgid "Seconds" msgstr "másodperc" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Kiszolgáló gép" msgid "Server port" msgstr "Kiszolgáló port" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -420,9 +462,6 @@ msgstr "Tárolt időszakok" msgid "System Load" msgstr "Rendszerterhelés" -msgid "System plugins" -msgstr "Rendszer bővítmények" - msgid "TCP Connections" msgstr "TCP kapcsolatok" @@ -449,6 +488,11 @@ msgstr "" "txttinfo bővítményén keresztül." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -499,6 +543,9 @@ msgstr "" "elsősorban a Mail::SpamAssasin::Plugin::Collectd bővítménnyel együtt történő " "használatra szolgál, de egyéb módokon is használható." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -568,19 +615,20 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"A statisztikai csomag a <a href=\"http://collectd.org/index.shtml" -"\">collectd</a> segédprogramon alapul és az <a href=\"http://oss.oetiker.ch/" -"rrdtool/\">RRD Tool</a> segédprogramot használja a grafikonok elkészítésére " -"az összegyűjtött adatokból." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -634,6 +682,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Használt PID fájl" @@ -649,6 +700,10 @@ msgstr "Vezeték nélküli" msgid "Wireless iwinfo Plugin Configuration" msgstr "iwinfo vezeték nélküli bővítmény beállítása" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "pl. br-ff" @@ -670,6 +725,22 @@ msgstr "másodpercek; több szóközzel elválasztott érték is megadható" msgid "server interfaces" msgstr "kiszolgáló interfész" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Rendszer bővítmények" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "A statisztikai csomag a <a href=\"http://collectd.org/index.shtml" +#~ "\">collectd</a> segédprogramon alapul és az <a href=\"http://oss.oetiker." +#~ "ch/rrdtool/\">RRD Tool</a> segédprogramot használja a grafikonok " +#~ "elkészítésére az összegyűjtött adatokból." + #~ msgid "Installed network plugins:" #~ msgstr "Telepített hálózati bővítmények:" diff --git a/applications/luci-app-statistics/po/it/statistics.po b/applications/luci-app-statistics/po/it/statistics.po index d1015367a..ab5a783b3 100644 --- a/applications/luci-app-statistics/po/it/statistics.po +++ b/applications/luci-app-statistics/po/it/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -130,6 +130,12 @@ msgstr "" msgid "Enable this plugin" msgstr "Abilita questo plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -148,6 +154,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -175,6 +190,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -240,6 +258,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -303,6 +324,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -360,12 +390,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -414,9 +456,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -441,6 +480,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -475,6 +519,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -535,14 +582,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -591,6 +643,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -606,6 +661,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/ja/statistics.po b/applications/luci-app-statistics/po/ja/statistics.po index 7a4657d53..7ee9ae084 100644 --- a/applications/luci-app-statistics/po/ja/statistics.po +++ b/applications/luci-app-statistics/po/ja/statistics.po @@ -28,6 +28,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "ベース・ディレクトリ" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd 設定" @@ -127,6 +127,12 @@ msgstr "Eメール" msgid "Enable this plugin" msgstr "プラグイン設定を有効にする" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -145,6 +151,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "グラフ" @@ -167,6 +182,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -230,6 +248,9 @@ msgstr "設定値以外の全てのインターフェースをモニターする msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -293,6 +314,15 @@ msgstr "OLSRd プラグイン設定" msgid "Only create average RRAs" msgstr "平均値のRRAsのみ作成する" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "オプション" @@ -350,12 +380,24 @@ msgstr "スクリプト" msgid "Seconds" msgstr "秒" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -404,9 +446,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "システムプラグイン" - msgid "TCP Connections" msgstr "" @@ -431,6 +470,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -465,6 +509,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -528,14 +575,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -584,6 +636,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "使用するPIDファイルの保存場所" @@ -599,6 +654,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "無線LAN iwinfo プラグイン設定" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" @@ -619,3 +678,9 @@ msgstr "" msgid "server interfaces" msgstr "" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "システムプラグイン" diff --git a/applications/luci-app-statistics/po/ms/statistics.po b/applications/luci-app-statistics/po/ms/statistics.po index c82120bbd..02dfae9ee 100644 --- a/applications/luci-app-statistics/po/ms/statistics.po +++ b/applications/luci-app-statistics/po/ms/statistics.po @@ -25,6 +25,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -58,9 +61,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -124,6 +124,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -142,6 +148,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -164,6 +179,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -227,6 +245,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -290,6 +311,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -347,12 +377,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -401,9 +443,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -428,6 +467,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -462,6 +506,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -522,14 +569,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -578,6 +630,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -593,6 +648,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/no/statistics.po b/applications/luci-app-statistics/po/no/statistics.po index 0e46dd13f..c4300bc44 100644 --- a/applications/luci-app-statistics/po/no/statistics.po +++ b/applications/luci-app-statistics/po/no/statistics.po @@ -19,6 +19,9 @@ msgstr "Legg til flere verter adskilt med mellomrom." msgid "Add notification command" msgstr "Legg til varsling kommando" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Hoved Katalog" @@ -52,9 +55,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd Innstillinger" @@ -121,6 +121,12 @@ msgstr "Epost" msgid "Enable this plugin" msgstr "Aktiver denne plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Program" @@ -139,6 +145,15 @@ msgstr "Tømme hurtigbufferen etter" msgid "Forwarding between listen and server addresses" msgstr "Videresending mellom lyttende og server adresser" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Grafer" @@ -166,6 +181,9 @@ msgid "" "are selected." msgstr "Her kan du definere kriterier for reglene som overvåker iptables." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -229,6 +247,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "Overvåk alle lokale lyttende porter" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Overvåk enheter" @@ -292,6 +313,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "Lag kun gjennomsnittlige RRAs" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Alternativer" @@ -349,12 +379,24 @@ msgstr "" msgid "Seconds" msgstr "Sekunder" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Server vert" msgid "Server port" msgstr "Server port" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Shaping class overvåking" @@ -403,9 +445,6 @@ msgstr "Lagrede tidsperioder" msgid "System Load" msgstr "System Belastning" -msgid "System plugins" -msgstr "System plugins" - msgid "TCP Connections" msgstr "TCP Forbindelser" @@ -430,6 +469,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -476,6 +520,9 @@ msgstr "" "bli brukt i forbindelse med Mail::SpamAssasin::Plugin::Collectd men kan også " "brukes på andre måter." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -556,18 +603,20 @@ msgstr "" "katalogen (temp). Dette kan gjøre enheten ubrukelig!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Statistikk pakken er basert på <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> og bruker <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> for å tegne diagram bilder fra innsamlede data." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -623,6 +672,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Brukt PID fil" @@ -638,6 +690,10 @@ msgstr "Trådløs" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "f.eks. br-ff" @@ -659,6 +715,21 @@ msgstr "sekunder; flere adskilt med mellomrom" msgid "server interfaces" msgstr "Server grensesnitt" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Statistikk pakken er basert på <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> og bruker <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " +#~ "Tool</a> for å tegne diagram bilder fra innsamlede data." + #~ msgid "Installed network plugins:" #~ msgstr "Installerte nettverks plugin:" diff --git a/applications/luci-app-statistics/po/pl/statistics.po b/applications/luci-app-statistics/po/pl/statistics.po index de86176fb..d352bedb2 100644 --- a/applications/luci-app-statistics/po/pl/statistics.po +++ b/applications/luci-app-statistics/po/pl/statistics.po @@ -29,6 +29,9 @@ msgstr "Dodaj wiele hostów rozdzielonych spacjami." msgid "Add notification command" msgstr "Dodaj komendę powiadamiającą" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Główny katalog" @@ -62,9 +65,6 @@ msgstr "CollectRoutes" msgid "CollectTopology" msgstr "CollectTopology" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Ustawienia Collectd" @@ -131,6 +131,12 @@ msgstr "E-mail" msgid "Enable this plugin" msgstr "Włącz tę wtyczkę" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -149,6 +155,15 @@ msgstr "Opróżnić cache po" msgid "Forwarding between listen and server addresses" msgstr "Przekazać przez słuchacza na adres serwera" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Wykresy" @@ -178,6 +193,9 @@ msgstr "" "Tutaj można zdefiniować różne kryteria według których wybierane są " "monitorowane reguły iptables." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Host" @@ -243,6 +261,9 @@ msgstr "Monitoruj wszystko oprócz podanych" msgid "Monitor all local listen ports" msgstr "Monitoruj wszystkie lokalne otwarte porty" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitoruj urządzenia" @@ -306,6 +327,15 @@ msgstr "Konfiguracja wtyczki OLSRd" msgid "Only create average RRAs" msgstr "Twórz tylko średnie archiwa RRA" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Opcje" @@ -363,12 +393,24 @@ msgstr "Skrypt" msgid "Seconds" msgstr "Sekundy" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Host serwer" msgid "Server port" msgstr "Port serwera" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Shaping Klasa Monitoring" @@ -418,9 +460,6 @@ msgstr "Przechowywane okresy czasu" msgid "System Load" msgstr "Obciążenie systemu" -msgid "System plugins" -msgstr "Wtyczki systemowe" - msgid "TCP Connections" msgstr "Połączenia TCP" @@ -447,6 +486,11 @@ msgstr "" "OLSRd." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "Wtyczka Conntrack zbiera statystyki o liczbie śledzonych połączeń." @@ -493,6 +537,9 @@ msgstr "" "with Mail::SpamAssasin::Plugin::Collectd but can be used in other ways as " "well." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -576,18 +623,20 @@ msgstr "" "do użytku! </strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Statystyki bazuja na <a href=\"http://collectd.org/index.shtml\">Collectd</" -"a> oraz wykorzystują <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD Tool</a> " -"do generowania diagramów i wykresów z zebranych danych." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -641,6 +690,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Używany plik PID" @@ -656,6 +708,10 @@ msgstr "WiFi" msgid "Wireless iwinfo Plugin Configuration" msgstr "Konfiguracja bezprzewodowego pluginu iwinfo" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "np. br-ff" @@ -677,6 +733,21 @@ msgstr "sekundy; wielokrotnie oddzielone spacją" msgid "server interfaces" msgstr "interfejsy serwera" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Wtyczki systemowe" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Statystyki bazuja na <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> oraz wykorzystują <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> do generowania diagramów i wykresów z zebranych danych." + #~ msgid "Installed network plugins:" #~ msgstr "Zainstalowane wtyczki sieciowe:" diff --git a/applications/luci-app-statistics/po/pt-br/statistics.po b/applications/luci-app-statistics/po/pt-br/statistics.po index f7b66166d..9abba4975 100644 --- a/applications/luci-app-statistics/po/pt-br/statistics.po +++ b/applications/luci-app-statistics/po/pt-br/statistics.po @@ -28,6 +28,9 @@ msgstr "Adicione múltiplos equipamentos separados por espaço." msgid "Add notification command" msgstr "Adicionar o comando de notificação" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Diretório Base" @@ -61,9 +64,6 @@ msgstr "Coleção de Rotas" msgid "CollectTopology" msgstr "Coleção de Topologias" -msgid "Collectd" -msgstr "Coletar" - msgid "Collectd Settings" msgstr "Configurações do Coletadas" @@ -130,6 +130,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Habilitar este plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -149,6 +155,15 @@ msgid "Forwarding between listen and server addresses" msgstr "" "Encaminhamento entre o endereço de escuta e os endereços dos servidores" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Gráficos" @@ -178,6 +193,9 @@ msgstr "" "Aqui você pode definir diversos critérios para as regras iptables " "selecionadas serem monitoradas." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Equipamento" @@ -243,6 +261,9 @@ msgstr "Monitore tudo exceto se especificado" msgid "Monitor all local listen ports" msgstr "Monitorar todas as portas locais" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitorar dispositivos" @@ -306,6 +327,15 @@ msgstr "Configuração do Plugin OLSRd" msgid "Only create average RRAs" msgstr "Somente criar RRAs de média" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Opções" @@ -363,12 +393,24 @@ msgstr "Script" msgid "Seconds" msgstr "Segundos" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Endereço do servidor" msgid "Server port" msgstr "Porta do servidor" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Monitoramento das Classes de Shaping" @@ -417,9 +459,6 @@ msgstr "Intervalos armazenados" msgid "System Load" msgstr "Carga do Sistema" -msgid "System plugins" -msgstr "Plugins de sistema" - msgid "TCP Connections" msgstr "Conexões TCP" @@ -446,6 +485,11 @@ msgstr "" "txtinfo do OLSRd." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -495,6 +539,9 @@ msgstr "" "destinado a ser utilizado em conjunto com o plugin Mail::SpamAssasin::" "Plugin::Collectd mas pode ser utilizado de outras maneiras também." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -581,18 +628,20 @@ msgstr "" "Isso pode tornar o equipamento inutilizável!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"As estatísticas são baseadas no <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> e é utilizado o <a href=\"http://oss.oetiker.ch/rrdtool/" -"\">RRD Tool</a> para renderização das imagens a partir dos dados coletados." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -648,6 +697,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Arquivo PID usado" @@ -663,6 +715,10 @@ msgstr "Rede Sem Fio (Wireless)" msgid "Wireless iwinfo Plugin Configuration" msgstr "Configuração do Plugin iwinfo da Rede Sem Fio (Wireless)" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "ex: br-ff" @@ -684,6 +740,22 @@ msgstr "segundos; vários valores, separar com espaço" msgid "server interfaces" msgstr "interfaces do servidor" +#~ msgid "Collectd" +#~ msgstr "Coletar" + +#~ msgid "System plugins" +#~ msgstr "Plugins de sistema" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "As estatísticas são baseadas no <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> e é utilizado o <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> para renderização das imagens a partir dos dados " +#~ "coletados." + #~ msgid "Installed network plugins:" #~ msgstr "Plugins de rede instalados:" diff --git a/applications/luci-app-statistics/po/pt/statistics.po b/applications/luci-app-statistics/po/pt/statistics.po index 54f58037e..34b435c5d 100644 --- a/applications/luci-app-statistics/po/pt/statistics.po +++ b/applications/luci-app-statistics/po/pt/statistics.po @@ -28,6 +28,9 @@ msgstr "Adicionar hosts múltiplos separados por espaço." msgid "Add notification command" msgstr "Adicionar o comando de notificação" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Diretório Base" @@ -61,9 +64,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Configurações do Collectd" @@ -130,6 +130,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Habilitar este plugin" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -148,6 +154,15 @@ msgstr "Limpar cache após" msgid "Forwarding between listen and server addresses" msgstr "Transmissão entre o endereço de escuta e dos servidores" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Gráficos" @@ -177,6 +192,9 @@ msgstr "" "Aqui você pode definir diversos critérios para as regras iptables " "selecionadas serem monitoradas." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -242,6 +260,9 @@ msgstr "Monitorizar tudo excepto os especificados" msgid "Monitor all local listen ports" msgstr "Monitorar todas as portas locais" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitorar dispositivos" @@ -305,6 +326,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "Somente criar RRAs de média" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Opções" @@ -362,12 +392,24 @@ msgstr "" msgid "Seconds" msgstr "Segundos" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "IP/Hostname do servidor" msgid "Server port" msgstr "Porta do servidor" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Monitoramento das Classes de Shaping" @@ -416,9 +458,6 @@ msgstr "Intervalos armazenados" msgid "System Load" msgstr "Carga do Sistema" -msgid "System plugins" -msgstr "Plugis de Sistema" - msgid "TCP Connections" msgstr "Conexões TCP" @@ -443,6 +482,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -490,6 +534,9 @@ msgstr "" "destinado a ser utilizado em conjunto com o plugin Mail::SpamAssasin::" "Plugin::Collectd mas pode ser utilizado de outras maneiras também." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -574,18 +621,20 @@ msgstr "" "Isso pode tornar o equipamento inutilizável!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"As estatísticas são baseadas no <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> e é utilizado o <a href=\"http://oss.oetiker.ch/rrdtool/" -"\">RRD Tool</a> para renderização das imagens à partir dos dados coletados." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -641,6 +690,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Arquivo PID usado" @@ -656,6 +708,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "ex. br-ff" @@ -677,6 +733,22 @@ msgstr "segundos; vários valores, separar com espaço" msgid "server interfaces" msgstr "Interfaces do servidor" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Plugis de Sistema" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "As estatísticas são baseadas no <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> e é utilizado o <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> para renderização das imagens à partir dos dados " +#~ "coletados." + #~ msgid "" #~ "The wireless plugin collects statistics about wireless signal strength, " #~ "noise and quality." diff --git a/applications/luci-app-statistics/po/ro/statistics.po b/applications/luci-app-statistics/po/ro/statistics.po index f6c049f09..7990970d2 100644 --- a/applications/luci-app-statistics/po/ro/statistics.po +++ b/applications/luci-app-statistics/po/ro/statistics.po @@ -29,6 +29,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Directorul de baza" @@ -62,9 +65,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Setarile Collectd" @@ -131,6 +131,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -149,6 +155,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Grafice" @@ -171,6 +186,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -234,6 +252,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -297,6 +318,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -354,12 +384,24 @@ msgstr "" msgid "Seconds" msgstr "Secunde" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -408,9 +450,6 @@ msgstr "" msgid "System Load" msgstr "Incarcarea de sistem" -msgid "System plugins" -msgstr "Pluginuri de sistem" - msgid "TCP Connections" msgstr "Conexiuni TCP" @@ -435,6 +474,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -471,6 +515,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -531,14 +578,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -587,6 +639,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Fisierul pentru PID folosit" @@ -602,6 +657,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" @@ -622,3 +681,9 @@ msgstr "" msgid "server interfaces" msgstr "" + +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Pluginuri de sistem" diff --git a/applications/luci-app-statistics/po/ru/statistics.po b/applications/luci-app-statistics/po/ru/statistics.po index da47dff0d..d41248f8a 100644 --- a/applications/luci-app-statistics/po/ru/statistics.po +++ b/applications/luci-app-statistics/po/ru/statistics.po @@ -30,6 +30,9 @@ msgstr "Добавить несколько хостов, разделённых msgid "Add notification command" msgstr "Добавить команду уведомления" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Базовая директория" @@ -63,9 +66,6 @@ msgstr "Сбор информации о маршрутах (CollectRoutes)" msgid "CollectTopology" msgstr "Сбор информации о топологии (CollectTopology)" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Настройки Collectd" @@ -131,6 +131,12 @@ msgstr "E-mail" msgid "Enable this plugin" msgstr "Включить этот модуль" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -150,6 +156,15 @@ msgstr "Сбросить кэш после" msgid "Forwarding between listen and server addresses" msgstr "Перенаправление между локальным адресом и адресом сервера" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Графики" @@ -179,6 +194,9 @@ msgstr "" "Здесь вы можете указать различные критерии, по которым будут выбраны правила " "для сбора статистики." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "Хост" @@ -244,6 +262,9 @@ msgstr "Собирать статистику со всех, кроме указ msgid "Monitor all local listen ports" msgstr "Собирать статистику со всех портов, ожидающих соединения" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Собирать статистику с устройств" @@ -307,6 +328,15 @@ msgstr "Настройка плагина OLSRd" msgid "Only create average RRAs" msgstr "Создавать только средние RRA" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Опции" @@ -366,12 +396,24 @@ msgstr "Скрипт" msgid "Seconds" msgstr "Секунды" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Хост сервера" msgid "Server port" msgstr "Порт сервера" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Мониторинг классов шейпинга" @@ -420,9 +462,6 @@ msgstr "Сохранённые промежутки времени" msgid "System Load" msgstr "Загрузка системы" -msgid "System plugins" -msgstr "Системные модули" - msgid "TCP Connections" msgstr "TCPConns" @@ -448,6 +487,11 @@ msgstr "" "Модуль OLSRd считывает информацию о узловых сетях с модуля txtinfo OLSRd." msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -494,6 +538,9 @@ msgstr "" "модуль предназначен для использования вместе с Mail::SpamAssasin::Plugin::" "Collectd." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -572,18 +619,20 @@ msgstr "" "директории. Это, в свою очередь, может привести к отказу устройства!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Данная статистика основана на программе <a href=\"http://collectd.org/index." -"shtml\">Collectd</a> и использует <a href=\"http://oss.oetiker.ch/rrdtool/" -"\">RRD Tool</a> для построения диаграмм." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -640,6 +689,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Используемый PID-файл" @@ -655,6 +707,10 @@ msgstr "Wireless" msgid "Wireless iwinfo Plugin Configuration" msgstr "Конфигурация модуля Iwinfo" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "напр. br-ff" @@ -677,6 +733,21 @@ msgstr "секунды; разделяются пробелом" msgid "server interfaces" msgstr "интерфейсы сервера" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "Системные модули" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Данная статистика основана на программе <a href=\"http://collectd.org/" +#~ "index.shtml\">Collectd</a> и использует <a href=\"http://oss.oetiker.ch/" +#~ "rrdtool/\">RRD Tool</a> для построения диаграмм." + #~ msgid "Installed network plugins:" #~ msgstr "Установленные сетевые модули:" diff --git a/applications/luci-app-statistics/po/sk/statistics.po b/applications/luci-app-statistics/po/sk/statistics.po index b0672f99e..e0400c2fd 100644 --- a/applications/luci-app-statistics/po/sk/statistics.po +++ b/applications/luci-app-statistics/po/sk/statistics.po @@ -23,6 +23,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -56,9 +59,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -122,6 +122,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -140,6 +146,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -162,6 +177,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -225,6 +243,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -288,6 +309,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -345,12 +375,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -399,9 +441,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -426,6 +465,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -460,6 +504,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -520,14 +567,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -576,6 +628,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -591,6 +646,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/sv/statistics.po b/applications/luci-app-statistics/po/sv/statistics.po index 26f60fda5..9c7b2175a 100644 --- a/applications/luci-app-statistics/po/sv/statistics.po +++ b/applications/luci-app-statistics/po/sv/statistics.po @@ -24,6 +24,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -57,9 +60,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -123,6 +123,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -141,6 +147,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -163,6 +178,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -226,6 +244,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -289,6 +310,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -346,12 +376,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -400,9 +442,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -427,6 +466,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -461,6 +505,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -521,14 +568,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -577,6 +629,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -592,6 +647,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/templates/statistics.pot b/applications/luci-app-statistics/po/templates/statistics.pot index 2162c6606..2b4ba7fbc 100644 --- a/applications/luci-app-statistics/po/templates/statistics.pot +++ b/applications/luci-app-statistics/po/templates/statistics.pot @@ -16,6 +16,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -49,9 +52,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -115,6 +115,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -133,6 +139,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -155,6 +170,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -218,6 +236,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -281,6 +302,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -338,12 +368,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -392,9 +434,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -419,6 +458,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -453,6 +497,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -513,14 +560,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -569,6 +621,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -584,6 +639,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/tr/statistics.po b/applications/luci-app-statistics/po/tr/statistics.po index c3267da11..505b5a16b 100644 --- a/applications/luci-app-statistics/po/tr/statistics.po +++ b/applications/luci-app-statistics/po/tr/statistics.po @@ -24,6 +24,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -57,9 +60,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -123,6 +123,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -141,6 +147,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -163,6 +178,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -226,6 +244,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -289,6 +310,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -346,12 +376,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -400,9 +442,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -427,6 +466,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -461,6 +505,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -521,14 +568,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -577,6 +629,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -592,6 +647,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/uk/statistics.po b/applications/luci-app-statistics/po/uk/statistics.po index 88b2337ab..ee5ea8f35 100644 --- a/applications/luci-app-statistics/po/uk/statistics.po +++ b/applications/luci-app-statistics/po/uk/statistics.po @@ -29,6 +29,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -62,9 +65,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -128,6 +128,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -146,6 +152,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -168,6 +183,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -231,6 +249,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -294,6 +315,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -351,12 +381,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -405,9 +447,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -432,6 +471,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -466,6 +510,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -526,14 +573,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -582,6 +634,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -597,6 +652,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/po/vi/statistics.po b/applications/luci-app-statistics/po/vi/statistics.po index 02e06fbb7..28bc8b4bc 100644 --- a/applications/luci-app-statistics/po/vi/statistics.po +++ b/applications/luci-app-statistics/po/vi/statistics.po @@ -29,6 +29,9 @@ msgstr "" msgid "Add notification command" msgstr "Thêm lệnh thông báo" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "Thư mục Cơ sở" @@ -62,9 +65,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Những cài đặt collectd" @@ -131,6 +131,12 @@ msgstr "Email" msgid "Enable this plugin" msgstr "Kích hoạt plugin này" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -149,6 +155,15 @@ msgstr "Flush cache sau khi" msgid "Forwarding between listen and server addresses" msgstr "chuyển tiếp giữa listen và địa chỉ server" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "Graphs" @@ -178,6 +193,9 @@ msgstr "" "Ở đây bạn có thể định nghĩa những tiêu chuẩn khác nhau để monitor iptables " "rules được chọn." +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -241,6 +259,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "Monitor tất cả local listen port" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "Monitor devices" @@ -304,6 +325,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "Chỉ tạo trung bình RRAs" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "Tùy chọn" @@ -361,12 +391,24 @@ msgstr "" msgid "Seconds" msgstr "Giây" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "Server host" msgid "Server port" msgstr "Server port" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "Shaping class monitoring" @@ -415,9 +457,6 @@ msgstr "Lưu timspans" msgid "System Load" msgstr "System Load" -msgid "System plugins" -msgstr "System plugins" - msgid "TCP Connections" msgstr "Kết nối TCP" @@ -442,6 +481,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -488,6 +532,9 @@ msgstr "" "Mail::SpamAssasin::Plugin::Collectd nhưng cũng có thể dùng trong những cách " "khác." +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -574,18 +621,20 @@ msgstr "" "sử dụng được</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"Gói thống kê dựa trên <a href=\"http://collectd.org/index.shtml\">Collectd</" -"a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD Tool</a> vẽ lại " -"sơ đồ hình ảnh từ dữ liệu thu thập ." msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -638,6 +687,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "Tập tin PID đã sử dụng" @@ -653,6 +705,10 @@ msgstr "Mạng không dây" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "e.g. br-ff" @@ -674,6 +730,21 @@ msgstr "giây; nhiều phân tách bởi khoảng trống" msgid "server interfaces" msgstr "giao diện server" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "System plugins" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "Gói thống kê dựa trên <a href=\"http://collectd.org/index.shtml" +#~ "\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " +#~ "Tool</a> vẽ lại sơ đồ hình ảnh từ dữ liệu thu thập ." + #~ msgid "" #~ "The wireless plugin collects statistics about wireless signal strength, " #~ "noise and quality." diff --git a/applications/luci-app-statistics/po/zh-cn/statistics.po b/applications/luci-app-statistics/po/zh-cn/statistics.po index 669d5f0ef..4714ab5e8 100644 --- a/applications/luci-app-statistics/po/zh-cn/statistics.po +++ b/applications/luci-app-statistics/po/zh-cn/statistics.po @@ -28,6 +28,9 @@ msgstr "使用空格分隔多个主机" msgid "Add notification command" msgstr "新增通知命令" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "基本目录" @@ -61,9 +64,6 @@ msgstr "收集路由" msgid "CollectTopology" msgstr "收集拓扑" -msgid "Collectd" -msgstr "Collectd" - msgid "Collectd Settings" msgstr "Collectd设置" @@ -129,6 +129,12 @@ msgstr "电子邮件" msgid "Enable this plugin" msgstr "启用该插件" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "Exec" @@ -147,6 +153,15 @@ msgstr "清空缓存后" msgid "Forwarding between listen and server addresses" msgstr "转发监听服务器和应用服务器之间数据" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "图表" @@ -173,6 +188,9 @@ msgid "" "are selected." msgstr "在这里,你可以定义各种监控iptables规则临界值。" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "主机" @@ -236,6 +254,9 @@ msgstr "监测所有(除特别注明外)" msgid "Monitor all local listen ports" msgstr "监测所有本地监听端口" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "监测设备" @@ -299,6 +320,15 @@ msgstr "OLSRd插件配置" msgid "Only create average RRAs" msgstr "仅创建平均RRAs" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "选项" @@ -356,12 +386,24 @@ msgstr "脚本" msgid "Seconds" msgstr "秒" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "服务器主机" msgid "Server port" msgstr "服务器端口" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "整形类监控" @@ -410,9 +452,6 @@ msgstr "存储时间跨度" msgid "System Load" msgstr "系统加载" -msgid "System plugins" -msgstr "系统插件" - msgid "TCP Connections" msgstr "TCP连接数" @@ -437,6 +476,11 @@ msgid "" msgstr "OLSRd插件通过txtinfo获取meshed网络信息。" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "conntrack插件获取连接数信息。" @@ -474,6 +518,9 @@ msgstr "" "这个插件主要目的是结合使用Mail::SpamAssasin::Pulgin::Collectd,但可以用在其他" "方面。" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -543,18 +590,20 @@ msgstr "" "使用!</strong>" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" -"统计软件包是基于<a href=\"http://collectd.org/index.shtml\">Collectd</a>,并" -"使用<a href=\"http://oss.oetiker.ch/rrdtool/\">RRD工具</a>来渲染图表,用于收" -"集数据。" msgid "" "The tcpconns plugin collects informations about open tcp connections on " @@ -602,6 +651,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "正在使用的PID文件" @@ -617,6 +669,10 @@ msgstr "无线" msgid "Wireless iwinfo Plugin Configuration" msgstr "无线iwinfo插件配置" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "例如:br-ff" @@ -638,5 +694,20 @@ msgstr "秒数;多个使用空格分隔" msgid "server interfaces" msgstr "服务器接口" +#~ msgid "Collectd" +#~ msgstr "Collectd" + +#~ msgid "System plugins" +#~ msgstr "系统插件" + +#~ msgid "" +#~ "The statistics package is based on <a href=\"http://collectd.org/index." +#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/" +#~ "\">RRD Tool</a> to render diagram images from collected data." +#~ msgstr "" +#~ "统计软件包是基于<a href=\"http://collectd.org/index.shtml\">Collectd</a>," +#~ "并使用<a href=\"http://oss.oetiker.ch/rrdtool/\">RRD工具</a>来渲染图表,用" +#~ "于收集数据。" + #~ msgid "group name" #~ msgstr "群名称" diff --git a/applications/luci-app-statistics/po/zh-tw/statistics.po b/applications/luci-app-statistics/po/zh-tw/statistics.po index b87e114b9..367f56724 100644 --- a/applications/luci-app-statistics/po/zh-tw/statistics.po +++ b/applications/luci-app-statistics/po/zh-tw/statistics.po @@ -22,6 +22,9 @@ msgstr "" msgid "Add notification command" msgstr "" +msgid "Aggregate number of connected users" +msgstr "" + msgid "Base Directory" msgstr "" @@ -55,9 +58,6 @@ msgstr "" msgid "CollectTopology" msgstr "" -msgid "Collectd" -msgstr "" - msgid "Collectd Settings" msgstr "" @@ -121,6 +121,12 @@ msgstr "" msgid "Enable this plugin" msgstr "" +msgid "Entropy" +msgstr "" + +msgid "Entropy Plugin Configuration" +msgstr "" + msgid "Exec" msgstr "" @@ -139,6 +145,15 @@ msgstr "" msgid "Forwarding between listen and server addresses" msgstr "" +msgid "Gather compression statistics" +msgstr "" + +msgid "General plugins" +msgstr "" + +msgid "Generate a separate graph for each logged user" +msgstr "" + msgid "Graphs" msgstr "" @@ -161,6 +176,9 @@ msgid "" "are selected." msgstr "" +msgid "Hold Ctrl to select multiple items or to deselect entries." +msgstr "" + msgid "Host" msgstr "" @@ -224,6 +242,9 @@ msgstr "" msgid "Monitor all local listen ports" msgstr "" +msgid "Monitor all sensors" +msgstr "" + msgid "Monitor devices" msgstr "" @@ -287,6 +308,15 @@ msgstr "" msgid "Only create average RRAs" msgstr "" +msgid "OpenVPN" +msgstr "" + +msgid "OpenVPN Plugin Configuration" +msgstr "" + +msgid "OpenVPN status files" +msgstr "" + msgid "Options" msgstr "" @@ -344,12 +374,24 @@ msgstr "" msgid "Seconds" msgstr "" +msgid "Sensor list" +msgstr "" + +msgid "Sensors" +msgstr "" + +msgid "Sensors Plugin Configuration" +msgstr "" + msgid "Server host" msgstr "" msgid "Server port" msgstr "" +msgid "Setup" +msgstr "" + msgid "Shaping class monitoring" msgstr "" @@ -398,9 +440,6 @@ msgstr "" msgid "System Load" msgstr "" -msgid "System plugins" -msgstr "" - msgid "TCP Connections" msgstr "" @@ -425,6 +464,11 @@ msgid "" msgstr "" msgid "" +"The OpenVPN plugin gathers information about the current vpn connection " +"status." +msgstr "" + +msgid "" "The conntrack plugin collects statistics about the number of tracked " "connections." msgstr "" @@ -459,6 +503,9 @@ msgid "" "be used in other ways as well." msgstr "" +msgid "The entropy plugin collects statistics about the available entropy." +msgstr "" + msgid "" "The exec plugin starts external commands to read values from or to notify " "external processes when certain threshold values have been reached." @@ -519,14 +566,19 @@ msgid "" msgstr "" msgid "" +"The sensors plugin uses the Linux Sensors framework to gather environmental " +"statistics." +msgstr "" + +msgid "" "The splash leases plugin uses libuci to collect statistics about splash " "leases." msgstr "" msgid "" -"The statistics package is based on <a href=\"http://collectd.org/index.shtml" -"\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/\">RRD " -"Tool</a> to render diagram images from collected data." +"The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> " +"to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to " +"render diagram images." msgstr "" msgid "" @@ -575,6 +627,9 @@ msgstr "" msgid "Uptime Plugin Configuration" msgstr "" +msgid "Use improved naming schema" +msgstr "" + msgid "Used PID file" msgstr "" @@ -590,6 +645,10 @@ msgstr "" msgid "Wireless iwinfo Plugin Configuration" msgstr "" +msgid "" +"You can install additional collectd-mod-* plugins to enable more statistics." +msgstr "" + msgid "e.g. br-ff" msgstr "" diff --git a/applications/luci-app-statistics/root/etc/config/luci_statistics b/applications/luci-app-statistics/root/etc/config/luci_statistics index abcee3e93..de16f29de 100644 --- a/applications/luci-app-statistics/root/etc/config/luci_statistics +++ b/applications/luci-app-statistics/root/etc/config/luci_statistics @@ -140,6 +140,9 @@ config statistics 'collectd_processes' option enable '0' option Processes 'uhttpd dnsmasq dropbear' +config statistics 'collectd_sensors' + option enable '0' + config statistics 'collectd_splash_leases' option enable '0' diff --git a/applications/luci-app-statistics/root/usr/bin/stat-genconfig b/applications/luci-app-statistics/root/usr/bin/stat-genconfig index 8acae46c6..49d8a0993 100755 --- a/applications/luci-app-statistics/root/usr/bin/stat-genconfig +++ b/applications/luci-app-statistics/root/usr/bin/stat-genconfig @@ -187,9 +187,9 @@ function _list_expand( c, l, nopad ) end if n:find("(%w+)ses") then - k = n:gsub("(%w+)ses", "%1s") + k = n:gsub("(%w+)ses$", "%1s") else - k = n:gsub("(%w+)s", "%1") + k = n:gsub("(%w+)s$", "%1") end str = str .. _expand( c[n], k, nopad ) @@ -375,6 +375,12 @@ plugins = { { } }, + openvpn = { + { }, + { "CollectIndividualUsers", "CollectUserCount", "CollectCompression", "ImprovedNamingSchema" }, + { "StatusFile" } + }, + ping = { { "TTL", "Interval" }, { }, @@ -393,6 +399,12 @@ plugins = { { "RRATimespans" } }, + sensors = { + { }, + { "IgnoreSelected" }, + { "Sensor" } + }, + splash_leases = { { }, { }, diff --git a/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua b/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua index 19bdd9afc..11f34fbad 100644 --- a/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua +++ b/applications/luci-app-tinyproxy/luasrc/model/cbi/tinyproxy.lua @@ -227,7 +227,7 @@ ta = s:option(Value, "target", translate("Target host"), ta.rmempty = true ta.placeholder = "0.0.0.0/0" -ta.datatype = "host" +ta.datatype = "host(1)" v = s:option(Value, "via", translate("Via proxy"), @@ -235,5 +235,6 @@ v = s:option(Value, "via", translate("Via proxy"), v:depends({type="proxy"}) v.placeholder = "10.0.0.1:8080" +v.datatype = "ip4addrport" return m diff --git a/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm b/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm index c85a206bd..d43a887b0 100644 --- a/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm +++ b/applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm @@ -41,7 +41,7 @@ end <%+header%> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Tinyproxy Status%></a></h2> + <h2 name="content"><%:Tinyproxy Status%></h2> <div class="cbi-section"> <iframe src="<%=REQUESTURL%>?frame=1" style="width:100%; height:350px; border:none"></iframe> </div> diff --git a/applications/luci-app-upnp/luasrc/controller/upnp.lua b/applications/luci-app-upnp/luasrc/controller/upnp.lua index 790bf29d8..c60b7c496 100644 --- a/applications/luci-app-upnp/luasrc/controller/upnp.lua +++ b/applications/luci-app-upnp/luasrc/controller/upnp.lua @@ -11,11 +11,11 @@ function index() local page - page = entry({"admin", "services", "upnp"}, cbi("upnp/upnp"), _("UPNP")) + page = entry({"admin", "services", "upnp"}, cbi("upnp/upnp"), _("UPnP")) page.dependent = true entry({"admin", "services", "upnp", "status"}, call("act_status")).leaf = true - entry({"admin", "services", "upnp", "delete"}, call("act_delete")).leaf = true + entry({"admin", "services", "upnp", "delete"}, post("act_delete")).leaf = true end function act_status() diff --git a/applications/luci-app-upnp/luasrc/view/upnp_status.htm b/applications/luci-app-upnp/luasrc/view/upnp_status.htm index d50ed0c4d..e358dcded 100644 --- a/applications/luci-app-upnp/luasrc/view/upnp_status.htm +++ b/applications/luci-app-upnp/luasrc/view/upnp_status.htm @@ -1,6 +1,6 @@ <script type="text/javascript">//<![CDATA[ function upnp_delete_fwd(idx) { - XHR.get('<%=luci.dispatcher.build_url("admin", "services", "upnp", "delete")%>/' + idx, null, + (new XHR()).post('<%=url('admin/services/upnp/delete')%>/' + idx, { token: '<%=token%>' }, function(x) { var tb = document.getElementById('upnp_status_table'); @@ -10,7 +10,7 @@ ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "upnp", "status")%>', null, + XHR.poll(5, '<%=url('admin/services/upnp/status')%>', null, function(x, st) { var tb = document.getElementById('upnp_status_table'); diff --git a/applications/luci-app-upnp/po/ca/upnp.po b/applications/luci-app-upnp/po/ca/upnp.po index 3176bb516..bb9f88f77 100644 --- a/applications/luci-app-upnp/po/ca/upnp.po +++ b/applications/luci-app-upnp/po/ca/upnp.po @@ -124,8 +124,8 @@ msgstr "Inicia el servei UPnP i NAP-PMP" msgid "There are no active redirects." msgstr "No hi ha redireccions actives." -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/cs/upnp.po b/applications/luci-app-upnp/po/cs/upnp.po index a712f8262..3cefdcc10 100644 --- a/applications/luci-app-upnp/po/cs/upnp.po +++ b/applications/luci-app-upnp/po/cs/upnp.po @@ -120,8 +120,8 @@ msgstr "Spustit službu UPnP a NAT-PMP" msgid "There are no active redirects." msgstr "Nejsou zde žádná aktivní přesměrování" -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/de/upnp.po b/applications/luci-app-upnp/po/de/upnp.po index 2edd93c5d..fe6532dea 100644 --- a/applications/luci-app-upnp/po/de/upnp.po +++ b/applications/luci-app-upnp/po/de/upnp.po @@ -122,7 +122,7 @@ msgstr "UPnP und NAT-PMP Dienst starten" msgid "There are no active redirects." msgstr "Es gibt keine aktiven Weiterleitungen." -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/el/upnp.po b/applications/luci-app-upnp/po/el/upnp.po index 775a7f70c..8b4fa0cb1 100644 --- a/applications/luci-app-upnp/po/el/upnp.po +++ b/applications/luci-app-upnp/po/el/upnp.po @@ -119,7 +119,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/en/upnp.po b/applications/luci-app-upnp/po/en/upnp.po index 72d21bae5..215b34ca5 100644 --- a/applications/luci-app-upnp/po/en/upnp.po +++ b/applications/luci-app-upnp/po/en/upnp.po @@ -119,7 +119,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/es/upnp.po b/applications/luci-app-upnp/po/es/upnp.po index 79a280097..91e1393b2 100644 --- a/applications/luci-app-upnp/po/es/upnp.po +++ b/applications/luci-app-upnp/po/es/upnp.po @@ -122,7 +122,7 @@ msgstr "Arrancar servicio UPnP y NAT-PMP" msgid "There are no active redirects." msgstr "Sin redirecciones activas." -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/fr/upnp.po b/applications/luci-app-upnp/po/fr/upnp.po index 0cdb86d15..4390d0f1f 100644 --- a/applications/luci-app-upnp/po/fr/upnp.po +++ b/applications/luci-app-upnp/po/fr/upnp.po @@ -125,8 +125,8 @@ msgstr "Démarrer les services UPnP et NAT-PMP" msgid "There are no active redirects." msgstr "Il n'y a pas de redirections actives." -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/he/upnp.po b/applications/luci-app-upnp/po/he/upnp.po index d67355095..6e4d1f196 100644 --- a/applications/luci-app-upnp/po/he/upnp.po +++ b/applications/luci-app-upnp/po/he/upnp.po @@ -115,7 +115,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/hu/upnp.po b/applications/luci-app-upnp/po/hu/upnp.po index e4c5e12ec..c5a2c26b2 100644 --- a/applications/luci-app-upnp/po/hu/upnp.po +++ b/applications/luci-app-upnp/po/hu/upnp.po @@ -122,8 +122,8 @@ msgstr "UPnP és NAT-PMP szolgáltatás elindítása" msgid "There are no active redirects." msgstr "Nincsenek aktív átírányítások." -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/it/upnp.po b/applications/luci-app-upnp/po/it/upnp.po index a8ef2e98a..9ef09ea04 100644 --- a/applications/luci-app-upnp/po/it/upnp.po +++ b/applications/luci-app-upnp/po/it/upnp.po @@ -122,8 +122,8 @@ msgstr "Avvia il servizo UPnP e NAT-PMP" msgid "There are no active redirects." msgstr "Non ci sono mappature attive." -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/ja/upnp.po b/applications/luci-app-upnp/po/ja/upnp.po index 79e215360..ec9208d25 100644 --- a/applications/luci-app-upnp/po/ja/upnp.po +++ b/applications/luci-app-upnp/po/ja/upnp.po @@ -122,7 +122,7 @@ msgstr "UPnP及びNAT-PMPサービスを開始する" msgid "There are no active redirects." msgstr "有効なリダイレクトはありません。" -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/ms/upnp.po b/applications/luci-app-upnp/po/ms/upnp.po index c3e71846d..b4dce32c9 100644 --- a/applications/luci-app-upnp/po/ms/upnp.po +++ b/applications/luci-app-upnp/po/ms/upnp.po @@ -114,7 +114,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/no/upnp.po b/applications/luci-app-upnp/po/no/upnp.po index 37ff9bff6..d528aa54e 100644 --- a/applications/luci-app-upnp/po/no/upnp.po +++ b/applications/luci-app-upnp/po/no/upnp.po @@ -113,7 +113,7 @@ msgstr "Start UPnP og NAT-PMP tjenesten" msgid "There are no active redirects." msgstr "Det finnes ingen aktive viderekoblinger" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/pl/upnp.po b/applications/luci-app-upnp/po/pl/upnp.po index e891dce48..ab7818011 100644 --- a/applications/luci-app-upnp/po/pl/upnp.po +++ b/applications/luci-app-upnp/po/pl/upnp.po @@ -121,7 +121,7 @@ msgstr "Uruchom usługi UPnP i NAT-PMP" msgid "There are no active redirects." msgstr "Nie ma aktywnych przekierowań" -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/pt-br/upnp.po b/applications/luci-app-upnp/po/pt-br/upnp.po index ae9e7fe07..c16aa11f8 100644 --- a/applications/luci-app-upnp/po/pt-br/upnp.po +++ b/applications/luci-app-upnp/po/pt-br/upnp.po @@ -123,7 +123,7 @@ msgstr "Dispare os serviços de UPnP e NAT-PMP" msgid "There are no active redirects." msgstr "Não existe redirecionamentos ativos." -msgid "UPNP" +msgid "UPnP" msgstr "" "<abbr title=\"Universal Plug and Play, Plugue e Use Universal\">UPnP</abbr>" diff --git a/applications/luci-app-upnp/po/pt/upnp.po b/applications/luci-app-upnp/po/pt/upnp.po index 91c94f34d..1d001b694 100644 --- a/applications/luci-app-upnp/po/pt/upnp.po +++ b/applications/luci-app-upnp/po/pt/upnp.po @@ -119,7 +119,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/ro/upnp.po b/applications/luci-app-upnp/po/ro/upnp.po index 84f515832..f9c950052 100644 --- a/applications/luci-app-upnp/po/ro/upnp.po +++ b/applications/luci-app-upnp/po/ro/upnp.po @@ -121,8 +121,8 @@ msgstr "Porneste UPnP si serviciul NAT-PMP" msgid "There are no active redirects." msgstr "Nu exista redirecturi active." -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/ru/upnp.po b/applications/luci-app-upnp/po/ru/upnp.po index 626672bd2..30b94cebf 100644 --- a/applications/luci-app-upnp/po/ru/upnp.po +++ b/applications/luci-app-upnp/po/ru/upnp.po @@ -124,7 +124,7 @@ msgstr "Запустить службы UPnP и NAT-PMP" msgid "There are no active redirects." msgstr "Активные переадресации отсутствуют." -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/sk/upnp.po b/applications/luci-app-upnp/po/sk/upnp.po index 57631638d..c725333f3 100644 --- a/applications/luci-app-upnp/po/sk/upnp.po +++ b/applications/luci-app-upnp/po/sk/upnp.po @@ -115,7 +115,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/sv/upnp.po b/applications/luci-app-upnp/po/sv/upnp.po index 11c20c140..f0b564bb3 100644 --- a/applications/luci-app-upnp/po/sv/upnp.po +++ b/applications/luci-app-upnp/po/sv/upnp.po @@ -116,7 +116,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/templates/upnp.pot b/applications/luci-app-upnp/po/templates/upnp.pot index 86aaee343..ae390c487 100644 --- a/applications/luci-app-upnp/po/templates/upnp.pot +++ b/applications/luci-app-upnp/po/templates/upnp.pot @@ -108,7 +108,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/tr/upnp.po b/applications/luci-app-upnp/po/tr/upnp.po index bf0e59a54..cff3be273 100644 --- a/applications/luci-app-upnp/po/tr/upnp.po +++ b/applications/luci-app-upnp/po/tr/upnp.po @@ -115,7 +115,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/uk/upnp.po b/applications/luci-app-upnp/po/uk/upnp.po index 7646109c7..93afd220b 100644 --- a/applications/luci-app-upnp/po/uk/upnp.po +++ b/applications/luci-app-upnp/po/uk/upnp.po @@ -122,7 +122,7 @@ msgstr "Запускати служби UPnP та NAT-PMP" msgid "There are no active redirects." msgstr "Немає активних переспрямувань" -msgid "UPNP" +msgid "UPnP" msgstr "UPnP" msgid "" diff --git a/applications/luci-app-upnp/po/vi/upnp.po b/applications/luci-app-upnp/po/vi/upnp.po index 7c7ea9d5c..5f954999d 100644 --- a/applications/luci-app-upnp/po/vi/upnp.po +++ b/applications/luci-app-upnp/po/vi/upnp.po @@ -120,7 +120,7 @@ msgstr "" msgid "There are no active redirects." msgstr "" -msgid "UPNP" +msgid "UPnP" msgstr "" msgid "" diff --git a/applications/luci-app-upnp/po/zh-cn/upnp.po b/applications/luci-app-upnp/po/zh-cn/upnp.po index 1749b9e7b..693bbc12e 100644 --- a/applications/luci-app-upnp/po/zh-cn/upnp.po +++ b/applications/luci-app-upnp/po/zh-cn/upnp.po @@ -120,8 +120,8 @@ msgstr "启动UPnP与NAT-PMP服务" msgid "There are no active redirects." msgstr "没有活动的重定向" -msgid "UPNP" -msgstr "UPNP" +msgid "UPnP" +msgstr "UPnP" msgid "" "UPnP allows clients in the local network to automatically configure the " diff --git a/applications/luci-app-upnp/po/zh-tw/upnp.po b/applications/luci-app-upnp/po/zh-tw/upnp.po index 356801b07..dde94ae49 100644 --- a/applications/luci-app-upnp/po/zh-tw/upnp.po +++ b/applications/luci-app-upnp/po/zh-tw/upnp.po @@ -118,7 +118,7 @@ msgstr "啓用UPnP跟NAT-PMP服務" msgid "There are no active redirects." msgstr "目前無作用中的從導" -msgid "UPNP" +msgid "UPnP" msgstr "UPNP通用序列埠協定" msgid "" diff --git a/applications/luci-app-vnstat/luasrc/view/vnstat.htm b/applications/luci-app-vnstat/luasrc/view/vnstat.htm index 2b502559b..2b8d9ff9c 100644 --- a/applications/luci-app-vnstat/luasrc/view/vnstat.htm +++ b/applications/luci-app-vnstat/luasrc/view/vnstat.htm @@ -56,7 +56,7 @@ dbdir = dbdir or "/var/lib/vnstat" <%+header%> -<h2><a id="content" name="content"><%:VnStat Graphs%></a></h2> +<h2 name="content"><%:VnStat Graphs%></h2> <form action="" method="get"> diff --git a/applications/luci-app-voice-core/Makefile b/applications/luci-app-voice-core/Makefile index 3641bdd92..32c476ced 100644 --- a/applications/luci-app-voice-core/Makefile +++ b/applications/luci-app-voice-core/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Voice Software (Core) -LUCI_DEPENDS:= +LUCI_DEPENDS:=@BROKEN include ../../luci.mk diff --git a/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm b/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm index a3503f8bd..e14862e7d 100644 --- a/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm +++ b/applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -<h2><a id="content" name="content">Voice</a></h2> +<h2 name="content">Voice</h2> <p>Here you can control OpenWRT voice-related settings and see voice-related information from OpenWRT</p> <p>In particular Asterisk configuration and information is displayed diff --git a/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm b/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm index e3e88b370..c4466cbf0 100644 --- a/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm +++ b/applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -<h2><a id="content" name="content">Phones</a></h2> +<h2 name="content">Phones</h2> <p>Here you can control phone configuration and information in OpenWRT</p> <p>You can control the setup of phone clients and servers and see information such as diagnostics related to phone devices from this menu. diff --git a/applications/luci-app-voice-diag/Makefile b/applications/luci-app-voice-diag/Makefile index c9c9a2036..2d4791845 100644 --- a/applications/luci-app-voice-diag/Makefile +++ b/applications/luci-app-voice-diag/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Voice Software (Diagnostics) -LUCI_DEPENDS:=+luci-app-diag-devinfo +LUCI_DEPENDS:=+luci-app-diag-devinfo @BROKEN include ../../luci.mk diff --git a/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm b/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm index 15ccc39e4..e324fabd4 100644 --- a/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm +++ b/applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:Diagnostics%></a></h2> +<h2 name="content"><%:Diagnostics%></h2> <p><%:Under this menu are options that allow you to configure and perform tests on the voice operations of your system. These are known as diagnostics.%></p> <p><%:The diagnostics available on your device depend on the modules that you have installed.%></p> <%+footer%> diff --git a/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua b/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua index 883416b21..f64370bfe 100644 --- a/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua +++ b/applications/luci-app-watchcat/luasrc/model/cbi/watchcat/watchcat.lua @@ -38,7 +38,7 @@ period = s:option(Value, "period", pinghost = s:option(Value, "pinghosts", translate("Ping host"), translate("Host address to ping")) -pinghost.datatype = "host" +pinghost.datatype = "host(1)" pinghost.default = "8.8.8.8" pinghost:depends({mode="ping"}) diff --git a/applications/luci-app-wshaper/po/sv/wshaper.po b/applications/luci-app-wshaper/po/sv/wshaper.po index b85651a61..84c5ce199 100644 --- a/applications/luci-app-wshaper/po/sv/wshaper.po +++ b/applications/luci-app-wshaper/po/sv/wshaper.po @@ -10,40 +10,40 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Downlink" -msgstr "" +msgstr "Ner-länk" msgid "Downstream bandwidth in kbit/s" -msgstr "" +msgstr "Nerströms bandbredd i kbit/s" msgid "Host or Network in CIDR notation." msgstr "" msgid "Interface" -msgstr "" +msgstr "Gränssnitt" msgid "Low priority destination ports" -msgstr "" +msgstr "Destinations-portar med låg prioritet" msgid "Low priority hosts (Destination)" -msgstr "" +msgstr "Värdar med låg prioritet (Destination)" msgid "Low priority hosts (Source)" -msgstr "" +msgstr "Värdar med låg prioritet (Källa)" msgid "Low priority source ports" -msgstr "" +msgstr "Käll-portar med låg prioritet" msgid "Uplink" -msgstr "" +msgstr "Upplänk" msgid "Upstream bandwidth in kbit/s" -msgstr "" +msgstr "Bandbredd uppströms i kbit/s" msgid "Wondershaper" -msgstr "" +msgstr "Wondershaper" msgid "Wondershaper settings" -msgstr "" +msgstr "Inställningar för Wondershaper" msgid "" "Wondershaper shapes traffic to ensure low latencies for interactive traffic " diff --git a/contrib/package/community-profiles/files/etc/config/profile_bno b/contrib/package/community-profiles/files/etc/config/profile_bno deleted file mode 100644 index 2d0f0f5ba..000000000 --- a/contrib/package/community-profiles/files/etc/config/profile_bno +++ /dev/null @@ -1,38 +0,0 @@ -config 'community' 'profile' - option 'name' 'Berlin NordOst' - option 'homepage' 'http://www.freifunk-bno.de/' - option 'ssid' 'olsr.freifunk.net' - option 'mesh_network' '104.0.0.0/8' - option 'splash_network' '10.104.0.0/16' - option 'splash_prefix' '27' - option 'latitude' '52.55010' - option 'longitude' '13.45889' - option 'suffix' 'olsr' - list 'owm_api' 'http://api.openwifimap.net' - list 'owm_api' 'http://owmapi.pberg.freifunk.net' - option 'mapserver' 'http://map.pberg.freifunk.net/' - -config 'defaults' 'wifi_device' - option 'channel' '10' - -config 'defaults' 'interface' - option 'netmask' '255.0.0.0' - -config 'defaults' 'olsr_interface' - option 'Ip4Broadcast' '255.255.255.255' - option 'HelloInterval' '3.0' - option 'HelloValidityTime' '125.0' - option 'TcInterval' '2.0' - option 'TcValidityTime' '500.0' - option 'MidInterval' '25.0' - option 'MidValidityTime' '500.0' - option 'HnaInterval' '10.0' - option 'HnaValidityTime' '125.0' - -config 'defaults' 'olsrd' - option 'AllowNoInt' 'yes' - option 'FIBMetric' 'flat' - option 'Pollrate' '0.025' - option 'TcRedundancy' '2' - option 'NatThreshold' '0.75' - option 'LinkQualityAlgorithm' 'etx_ff' diff --git a/contrib/package/community-profiles/files/etc/config/profile_cottbus b/contrib/package/community-profiles/files/etc/config/profile_cottbus new file mode 100644 index 000000000..143c505c0 --- /dev/null +++ b/contrib/package/community-profiles/files/etc/config/profile_cottbus @@ -0,0 +1,37 @@ +config 'community' 'profile' + option 'name' 'Freifunk Cottbus' + option 'homepage' 'http://cottbus.freifunk.net' + option 'ssid' 'cottbus.freifunk.net' + option 'ssid_scheme' 'ssidonly' + option 'mesh_network' '10.35.0.0/16' + option 'splash_network' '10.104.0.0/16' + option 'splash_prefix' '27' + option 'latitude' '51.757689' + option 'longitude' '13.40948' + +config 'defaults' 'wifi_device' + option 'channel' '13' + +config 'defaults' 'wifi_device_5' + option 'channel' '36' + +config 'defaults' 'wifi_iface' + option 'mcast_rate' '6000' + +config 'defaults' 'wifi_iface_5' + option 'mcast_rate' '12000' + +config 'defaults' 'bssidscheme' + option '13' 'D2:CA:FF:EE:BA:BE' + option '36' '02:36:CA:FF:EE:EE' + +config 'defaults' 'ssidscheme' + option '13' 'intern-ch13.cottbus.freifunk.net' + option '36' 'intern-ch36.cottbus.freifunk.net' + +config 'defaults' 'interface' + option 'netmask' '255.255.255.255' + option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168 2001:4ce8::53 2001:910:800::12' + +config 'dhcp' 'dhcp' + option 'leasetime' '5m' diff --git a/contrib/package/freifunk-common/files/usr/bin/neigh.sh b/contrib/package/freifunk-common/files/usr/bin/neigh.sh index cf4342450..b1dc01a77 100755 --- a/contrib/package/freifunk-common/files/usr/bin/neigh.sh +++ b/contrib/package/freifunk-common/files/usr/bin/neigh.sh @@ -2,9 +2,69 @@ . /usr/share/libubox/jshn.sh -VARS="localIP:Local remoteIP:Remote validityTime:vTime linkQuality:LQ neighborLinkQuality:NLQ linkCost:Cost" +hostsfile_getname() +{ + local config="$1" + local i=0 + local value file -for HOST in 127.0.0.1 ::1;do + while value="$( uci -q get $config.@LoadPlugin[$i].library )"; do { + case "$value" in + 'olsrd_nameservice.so.'*) + file="$( uci -q get $config.@LoadPlugin[$i].hosts_file )" + break + ;; + esac + + i=$(( i + 1 )) + } done + + echo "${file:-/var/run/hosts_olsr}" +} + +read_hostnames() +{ + local file_list=" $( hostsfile_getname 'olsrd' ) $(hostsfile_getname 'olsrd6' ) " + local line ip hostname file file_list_uniq + + for file in $file_list; do { + case " $file_list_uniq " in + *" $file "*) + ;; + *) + file_list_uniq="$file_list_uniq $file" + ;; + esac + } done + + for file in $file_list_uniq; do { + [ -e "$file" ] || continue + + while read -r line; do { + case "$line" in + [0-9]*) + # 2001:bf7:820:901::1 stuttgarter-core.olsr # myself + # 10.63.160.161 AlexLaterne # 10.63.160.161 + set -f + set +f -- $line + ip="$1" + hostname="$2" + + # global vars, e.g. + # IP_1_2_3_4='foo' or IP_2001_bf7_820_901__1='bar' + eval IP_${ip//[.:]/_}="$hostname" + ;; + esac + } done <"$file" + } done +} + +read_hostnames + +VARS='localIP:Local remoteIP:Remote validityTime:vTime linkQuality:LQ' +VARS="$VARS neighborLinkQuality:NLQ linkCost:Cost remoteHostname:Host" + +for HOST in '127.0.0.1' '::1';do json_init json_load "$(echo /links|nc ${HOST} 9090)" if json_is_a links array;then @@ -29,6 +89,7 @@ for HOST in 127.0.0.1 ::1;do ;;*) for v in ${VARS};do eval printf \"%-\${_${v%:*}}s \" \$${v%:*} + eval remoteHostname="\$IP_${remoteIP//[.:]/_}" done echo ;;esac diff --git a/contrib/package/freifunk-policyrouting/files/etc/rc.d/S15-freifunk-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/rc.d/S15-freifunk-policyrouting deleted file mode 120000 index 3c3dad87d..000000000 --- a/contrib/package/freifunk-policyrouting/files/etc/rc.d/S15-freifunk-policyrouting +++ /dev/null @@ -1 +0,0 @@ -../init.d/freifunk-policyrouting
\ No newline at end of file diff --git a/documentation/CBI.md b/documentation/CBI.md index 0b47c2248..4ebc08af0 100644 --- a/documentation/CBI.md +++ b/documentation/CBI.md @@ -1,248 +1,246 @@ -CBI models are Lua files describing the structure of an UCI config file and the resulting HTML form to be evaluated by the CBI parser. -All CBI model files must return an object of type *luci.cbi.Map*. For a commented example of a CBI model, see the [[Documentation/ModulesHowTo#CBImodels|Writing Modules tutorial]]. -The scope of a CBI model file is automatically extended by the contents of the module *luci.cbi_' and the '_translate* function from luci.i18n +# CBI models +are Lua files describing the structure of an UCI config file and the resulting HTML form to be evaluated by the CBI parser.<br /> +All CBI model files must return an object of type **luci.cbi.Map**.<br /> +For a commented example of a CBI model, see the [Writing Modules tutorial](ModulesHowTo.md#cbimodels). -This Reference covers *the basics* of the CBI system. +The scope of a CBI model file is automatically extended by the contents of the module **luci.cbi** and the _translate_ function from **luci.i18n** +This Reference covers **the basics** of the CBI system. -# class Map (_config'', ''title'', ''description_) +## class Map (_config, title, description_) This is the root object of the model. -* *config*: configuration name to be mapped, see uci documentation and the files in /etc/config -* *title*: title shown in the UI -* *description*: description shown in the UI -## :section (_sectionclass_, ...) +* **config:** configuration filename to be mapped, see [UCI documentation](http://wiki.openwrt.org/doc/uci) and the files in /etc/config +* **title:** title shown in the UI +* **description:** description shown in the UI + +#### function :section (_sectionclass_, ...) Creates a new section -* *sectionclass*: a class object of the section +* **sectionclass**: a class object of the section * _additional parameters passed to the constructor of the section class_ ---- -# class NamedSection (_name'', ''type'', ''title'', ''description_) -An object describing an UCI section selected by the name. -Use [[#A.3Asection.28.27.27sectionclass.27.27.2C....29|Map:section(NamedSection, _name'', ''type'', ''title'', ''description_)]] to instantiate. -* *name*: section name -* *type*: section type -* *title*: The title shown in the UI -* *description*: description shown in the UI +## class NamedSection (_name, type, title, description_) +An object describing an UCI section selected by the name.<br /> +To instantiate use: `Map:section(NamedSection, "name", "type", "title", "description")` -## .addremove = false -Allows the user to remove and recreate the configuration section +* **name:** UCI section name +* **type:** UCI section type +* **title:** The title shown in the UI +* **description:** description shown in the UI + +#### function :option(_optionclass_, ...) +Creates a new option +* **optionclass:** a class object of the section +* _additional parameters passed to the constructor of the option class_ + +#### property .addremove = false +Allows the user to remove and recreate the configuration section. -## .dynamic = false +#### property .dynamic = false Marks this section as dynamic. Dynamic sections can contain an undefinded number of completely userdefined options. -## .optional = true +#### property .optional = true Parse optional options +---- + +## class TypedSection (_type, title, description_) +An object describing a group of UCI sections selected by their type.<br /> +To instantiate use: `Map:section(TypedSection, "type", "title", "description")` +* **type:** UCI section type +* **title:** The title shown in the UI +* **description:** description shown in the UI -## :option (_optionclass_, ...) +#### function :option(_optionclass_, ...) Creates a new option -* *optionclass*: a class object of the section -* _additional parameters passed to the constructor of the option class_ + **optionclass:** a class object of the section + _additional parameters passed to the constructor of the option class_ ----- +#### function :depends(_key, value_) +Only select those sections where _key == value_ <br /> +If you call this function several times the dependencies will be linked with **"or"** -# class TypedSection (_type'', ''title'', ''description_) -An object describing a group of UCI sections selected by their type. -Use [[#A.3Asection.28.27.27sectionclass.27.27.2C....29|Map:section(TypedSection, _type'', ''title'', ''description_)]] to instantiate. -* *type*: section type -* *title*: The title shown in the UI -* *description*: description shown in the UI +#### function .filter(_self, section_) -abstract- +You can override this function to filter certain sections that will not be parsed. +The filter function will be called for every section that should be parsed and returns **nil** for sections that should be filtered. For all other sections it should return the section name as given in the second parameter. -## .addremove = false +#### property .addremove = false Allows the user to remove and recreate the configuration section -## .dynamic = false +#### property .dynamic = false Marks this section as dynamic. Dynamic sections can contain an undefinded number of completely userdefined options. -## .optional = true +#### property .optional = true Parse optional options -## .anonymous = false -Do not show section names - +#### property .anonymous = false +Do not show UCI section names -## :depends (_key'', ''value_) -Only select those sections where the option _key'' == ''value_<br /> -If you call this function several times the dependencies will be linked with *or* - -## .filter (_self'', ''section_) [abstract] -You can override this function to filter certain sections that will not be parsed. -The filter function will be called for every section that should be parsed and returns *nil* for sections that should be filtered. For all other sections it should return the section name as given in the second parameter. +---- -## :option (_optionclass_, ...) -Creates a new option - _optionclass_: a class object of the section - additional parameters passed to the constructor of the option class +## class Value (_option, title, description_) +An object describing an option in a section of a UCI File. Creates a standard text field in the formular.<br /> +To instantiate use: `NamedSection:option(Value, "option", "title", "description")`<br /> + or `TypedSection:option(Value, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI ----- +#### function :depends(key, value) +Only show this option field if another option _key_ is set to _value_ in the same section.<br /> +If you call this function several times the dependencies will be linked with **"or"** -# class Value (_option'', ''title'', ''description_) -An object describing an option in a section of a UCI File. Creates a standard text field in the formular. -Use [[#A.3Aoption.28.27.27optionclass.27.27.2C....29|NamedSection:option(Value, _option'', ''title'', ''description'')]] or [[#A.3Aoption.28.27.27optionclass.27.27.2C....29-1|TypedSection:option(Value, ''option'', ''title'', ''description_)]] to instantiate. -* *option*: section name -* *title*: The title shown in the UI -* *description*: description shown in the UI +#### function :value(key, value) +Convert this text field into a combobox if possible and add a selection option. -## .default = nil +#### property .default = nil The default value -## .maxlength = nil -The maximum length of the value +#### property .maxlength = nil +The maximum inputlength (of chars) of the value -## .optional = false +#### property .optional = false Marks this option as optional, implies .rmempty = true -## .rmempty = true +#### property .rmempty = true Removes this option from the configuration file when the user enters an empty value -## .size = nil -The size of the form field - -## :value (_key'', ''value'' = ''key_) -Convert this text field into a combobox if possible and add a selection option. +#### property .size = nil +The maximum number of chars displayed by form field +---- -## :depends (_key'', ''value_) -Only show this option field if another option _key'' is set to ''value_ in the same section.<br /> -If you call this function several times the dependencies will be linked with *or* +## class ListValue (_option, title, description_) +An object describing an option in a section of a UCI File.<br /> +Creates a list box or list of radio (for selecting one of many choices) in the formular.<br /> +To instantiate use: `NamedSection:option(ListValue, "option", "title", "description")`<br /> +or `TypedSection:option(ListValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI ----- +#### function :depends(key, value) +Only show this option field if another option _key_ is set to _value_ in the same section.<br /> +If you call this function several times the dependencies will be linked with **"or"** -# class ListValue (_option'', ''title'', ''description_) -An object describing an option in a section of a UCI File. Creates a list box in the formular. -Use [[#A.3Aoption.28.27.27optionclass.27.27.2C....29|NamedSection:option(Value, _option'', ''title'', ''description'')]] or [[#A.3Aoption.28.27.27optionclass.27.27.2C....29-1|TypedSection:option(Value, ''option'', ''title'', ''description_)]] to instantiate. -* *option*: section name -* *title*: The title shown in the UI -* *description*: description shown in the UI +#### function :value(_key, value_) +Adds an entry to the selection list +#### property .widget = "select" +**"select"** shows a selction list, **"radio"** shows a list of radio buttons inside form -## .default = nil +#### property .default = nil The default value -## .optional = false +#### property .optional = false Marks this option as optional, implies .rmempty = true -## .rmempty = true +#### property .rmempty = true Removes this option from the configuration file when the user enters an empty value -## .size = nil +#### property .size = nil The size of the form field -## .widget = "select" -selects the form widget to be used - - -## :depends (_key'', ''value_) -Only show this option field if another option _key'' is set to ''value_ in the same section.<br /> -If you call this function several times the dependencies will be linked with *or* - -## :value (_key'', ''value'' = ''key_) -Adds an entry to the selection list - ---- -# class Flag (_option'', ''title'', ''description_) -An object describing an option with two possible values in a section of a UCI File. Creates a checkbox field in the formular. -Use [[#A.3Aoption.28.27.27optionclass.27.27.2C....29|NamedSection:option(Value, _option'', ''title'', ''description'')]] or [[#A.3Aoption.28.27.27optionclass.27.27.2C....29-1|TypedSection:option(Value, ''option'', ''title'', ''description_)]] to instantiate. -* *option*: section name -* *title*: The title shown in the UI -* *description*: description shown in the UI +## class Flag (_option, title, description_) +An object describing an option with two possible values in a section of a UCI File.<br /> +Creates a checkbox field in the formular.<br /> +To instantiate use: `NamedSection:option(Flag, "option", ""title", "description")`<br /> + or `TypedSection:option(Flag, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI -## .default = nil +#### function :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.<br /> +If you call this function several times the dependencies will be linked with **"or"** + +#### property .default = nil The default value -## .disabled = 0 +#### property .disabled = 0 the value that shoudl be set if the checkbox is unchecked -## .enabled = 1 +#### property .enabled = 1 the value that should be set if the checkbox is checked -## .optional = false +#### property .optional = false Marks this option as optional, implies .rmempty = true -## .rmempty = true +#### property .rmempty = true Removes this option from the configuration file when the user enters an empty value -## .size = nil -The size of the form field +---- +## class MultiValue (_option'', ''title'', ''description_) +An object describing an option in a section of a UCI File.<br /> +Creates a list of checkboxed or a multiselectable list as form fields.<br /> +To instantiate use: `NamedSection:option(MultiValue, "option", ""title", "description")`<br /> + or `TypedSection:option(MultiValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI -## :depends (_key'', ''value_) -Only show this option field if another option _key'' is set to ''value_ in the same section.<br /> -If you call this function several times the dependencies will be linked with *or* +#### function :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.<br /> +If you call this function several times the dependencies will be linked with **"or"** ----- +#### function :value(_key, value_) +Adds an entry to the list -# class MultiValue (_option'', ''title'', ''description_) -An object describing an option in a section of a UCI File. Creates several checkboxed as form fields. -Use [[#A.3Aoption.28.27.27optionclass.27.27.2C....29|NamedSection:option(Value, _option'', ''title'', ''description'')]] or [[#A.3Aoption.28.27.27optionclass.27.27.2C....29-1|TypedSection:option(Value, ''option'', ''title'', ''description_)]] to instantiate. -* *option*: section name -* *title*: The title shown in the UI -* *description*: description shown in the UI +#### property .widget = "checkbox" +**"select"** shows a selction list, **"checkbox"** shows a list of checkboxes inside form +#### property .delimiter = " " +The string which will be used to delimit the values inside stored option -## .default = nil +#### property .default = nil The default value -## .delimiter = " " -The string which will be used to delimit the values - -## .optional = false +#### property .optional = false Marks this option as optional, implies .rmempty = true -## .rmempty = true +#### property .rmempty = true Removes this option from the configuration file when the user enters an empty value -## .size = nil -The size of the form field +#### property .size = nil +The size of the form field (only used if property _.widget = "select"_) -## .widget = "checkbox" -selects the form widget to be used - - -## :depends (_key'', ''value_) -Only show this option field if another option _key'' is set to ''value_ in the same section.<br /> -If you call this function several times the dependencies will be linked with *or* +---- -## :value (_key'', ''value'' = ''key_) -Adds an entry to the checkbox list +## class StaticList (_option, title, description_) +Similar to the MultiValue, but stores selected Values into a UCI list instead of a character-separated option. ---- -# class DummyValue (_option'', ''title'', ''description_) -An object describing an option in a section of a UCI File. Creates a readonly field in the form. -Use [[#A.3Aoption.28.27.27optionclass.27.27.2C....29|NamedSection:option(Value, _option'', ''title'', ''description'')]] or [[#A.3Aoption.28.27.27optionclass.27.27.2C....29-1|TypedSection:option(Value, ''option'', ''title'', ''description_)]] to instantiate. -* *option*: section name -* *title*: The title shown in the UI -* *description*: description shown in the UI +## class DynamicList (_option, title, description_) +A extensible list of user-defined values. Stores Values into a UCI list +---- +## class DummyValue (_option, title, description_) +Creates a readonly text in the form. !It writes no data to UCI!<br /> +To instantiate use: `NamedSection:option(DummyValue, "option", ""title", "description")`<br /> + or `TypedSection:option(DummyValue, "option", "title", "description")` +* **option:** UCI option name +* **title:** The title shown in the UI +* **description:** description shown in the UI -## :depends (_key'', ''value_) -Only show this option field if another option _key'' is set to ''value_ in the same section.<br /> -If you call this function several times the dependencies will be linked with *or* +#### property :depends (_key, value_) +Only show this option field if another option _key_ is set to _value_ in the same section.<br /> +If you call this function several times the dependencies will be linked with **"or"** ---- - -# class TextValue (_option'', ''title'', ''description_) +## class TextValue (_option, title, description_) An object describing a multi-line textbox in a section in a non-UCI form. ---- -# class Button (_option'', ''title'', ''description_) +## class Button (_option, title, description_) An object describing a Button in a section in a non-UCI form. - ----- - -# class StaticList (_option'', ''title'', ''description_) -Similar to the MultiValue, but stores selected Values into a UCI list instead of a space-separated string. - ----- - -# class DynamicList (_option'', ''title'', ''description_) -A list of user-defined values. diff --git a/documentation/ModulesHowTo.md b/documentation/ModulesHowTo.md index 3f70b788c..c4dbb9820 100644 --- a/documentation/ModulesHowTo.md +++ b/documentation/ModulesHowTo.md @@ -101,7 +101,7 @@ Now type */cgi-bin/luci/my/new/template_' ('_[http://localhost:8080/luci/my/new/ You may notice those fancy <% %>-Tags, these are [wiki:Documentation/Templates|template markups] used by the LuCI template processor. It is always good to include header and footer at the beginning and end of a template as those create the default design and menu. -## CBI models +## <a name=cbimodels></a> CBI models The CBI is one of the uber coolest features of LuCI. It creates a formular based user interface and saves its contents to a specific UCI config file. You only have to describe the structure of the configuration file in a CBI model file and Luci does the rest of the work. This includes generating, parsing and validating a XHTML form and reading and writing the UCI file. So let's be serious at least for this paragraph and create a real pratical example *_lucidir_/model/cbi/myapp-mymodule/netifaces.lua* with the following contents: diff --git a/documentation/SubmitPatchesHowTo:.md b/documentation/SubmitPatchesHowTo:.md deleted file mode 100644 index cdd15524a..000000000 --- a/documentation/SubmitPatchesHowTo:.md +++ /dev/null @@ -1,33 +0,0 @@ -# Checkout svn - - svn co http://svn.luci.subsignal.org/luci/trunk - -and change to that directory: - - cd trunk - -# Make your changes - -Edit the files you want to change. If you add some new files you need to add them to the svn tree: - - svn add <dir/files> - -Where <dir/files> are the directories/files you have added. Its possible to specify multiple files/directories here. - -# Use svn diff to generate a patch with your changes - -To check if your changes look ok first do: - - svn diff <dir/files> - -and check the output. Again you can specify multiple dirs/directories here. - -If everything looks like expected save the patch: - - svn diff <dir/files> > ./mypatch.patch - - -# Submit patches - -Use the [Ticket system](http://luci.subsignal.org/trac/newticket) to submit your patch. - diff --git a/documentation/api/modules/luci.jsonc.parser.html b/documentation/api/modules/luci.jsonc.parser.html index 4c19cf0e5..e8e145f43 100644 --- a/documentation/api/modules/luci.jsonc.parser.html +++ b/documentation/api/modules/luci.jsonc.parser.html @@ -234,6 +234,13 @@ Put Lua data into the parser.</td> </tr> <tr> + <td class="name" nowrap><a href="#parser.sink">parser:sink</a> ()</td> + <td class="summary"> + +Generate an ltn12-compatible sink.</td> + </tr> + + <tr> <td class="name" nowrap><a href="#parser.stringify">parser:stringify</a> (pretty)</td> <td class="summary"> @@ -406,6 +413,34 @@ Nothing is returned. +<dt><a name="parser.sink"></a><strong>parser:sink</strong> ()</dt> +<dd> + + +Generate an ltn12-compatible sink. + + + + + + +<h3>Usage:</h3> +<pre>parser = luci.jsonc.new() +ltn12.pump.all(ltn12.source.file(io.input()), parser:sink()) +print(parser:get())</pre> + + + +<h3>Return value:</h3> +Returns a function that can be used as an ltn12 sink. + + + +</dd> + + + + <dt><a name="parser.stringify"></a><strong>parser:stringify</strong> (pretty)</dt> <dd> diff --git a/documentation/api/modules/luci.model.uci.html b/documentation/api/modules/luci.model.uci.html index 9e50d9900..cf75aebcc 100644 --- a/documentation/api/modules/luci.model.uci.html +++ b/documentation/api/modules/luci.model.uci.html @@ -1119,6 +1119,12 @@ Name of created section Set a value or create a named section. + +When invoked with three arguments <code>config</code>, <code>sectionname</code>, <code>sectiontype</code>, +then a named section of the given type is created. + +When invoked with four arguments <code>config</code>, <code>sectionname</code>, <code>optionname</code> and +<code>optionvalue</code> then the value of the specified option is set to the given value. @@ -1138,7 +1144,7 @@ Set a value or create a named section. </li> <li> - value: UCI value or nil if you want to create a section + value: UCI value or nothing if you want to create a section </li> </ul> diff --git a/libs/luci-lib-jsonc/src/jsonc.c b/libs/luci-lib-jsonc/src/jsonc.c index b857c979e..ef1110166 100644 --- a/libs/luci-lib-jsonc/src/jsonc.c +++ b/libs/luci-lib-jsonc/src/jsonc.c @@ -328,6 +328,76 @@ static int json_parse_set(lua_State *L) return 0; } +static int json_parse_sink_closure(lua_State *L) +{ + bool finished = lua_toboolean(L, lua_upvalueindex(2)); + if (lua_isnil(L, 1)) + { + // no more data available + if (finished) + { + // we were finished parsing + lua_pushboolean(L, true); + return 1; + } + else + { + lua_pushnil(L); + lua_pushstring(L, "Incomplete JSON data"); + return 2; + } + } + else + { + if (finished) + { + lua_pushnil(L); + lua_pushstring(L, "Unexpected data after complete JSON object"); + return 2; + } + else + { + // luci.jsonc.parser.chunk() + lua_pushcfunction(L, json_parse_chunk); + // parser object from closure + lua_pushvalue(L, lua_upvalueindex(1)); + // chunk + lua_pushvalue(L, 1); + lua_call(L, 2, 2); + + if (lua_isnil(L, -2)) + { + // an error occurred, leave (nil, errmsg) on the stack and return it + return 2; + } + else if (lua_toboolean(L, -2)) + { + // finished reading, set finished=true and return nil to prevent further input + lua_pop(L, 2); + lua_pushboolean(L, true); + lua_replace(L, lua_upvalueindex(2)); + lua_pushnil(L); + return 1; + } + else + { + // not finished reading, return true + lua_pop(L, 2); + lua_pushboolean(L, true); + return 1; + } + } + } +} + +static int json_parse_sink(lua_State *L) +{ + luaL_checkudata(L, 1, LUCI_JSONC_PARSER); + lua_pushboolean(L, false); + lua_pushcclosure(L, json_parse_sink_closure, 2); + return 1; +} + static int json_tostring(lua_State *L) { struct json_state *s = luaL_checkudata(L, 1, LUCI_JSONC_PARSER); @@ -367,6 +437,7 @@ static const luaL_reg jsonc_parser_methods[] = { { "parse", json_parse_chunk }, { "get", json_parse_get }, { "set", json_parse_set }, + { "sink", json_parse_sink }, { "stringify", json_tostring }, { "__gc", json_gc }, diff --git a/libs/luci-lib-jsonc/src/jsonc.luadoc b/libs/luci-lib-jsonc/src/jsonc.luadoc index 2ee9cebdc..720b17d1e 100644 --- a/libs/luci-lib-jsonc/src/jsonc.luadoc +++ b/libs/luci-lib-jsonc/src/jsonc.luadoc @@ -121,10 +121,22 @@ parser:set({ "some", "data" })` ]] ---[[ -Serialize current parser state as JSON. +Generate an ltn12-compatible sink. @class function @sort 4 +@name parser.sink +@return Returns a function that can be used as an ltn12 sink. +@usage `parser = luci.jsonc.new() +ltn12.pump.all(ltn12.source.file(io.input()), parser:sink()) +print(parser:get())` +]] + +---[[ +Serialize current parser state as JSON. + +@class function +@sort 5 @name parser.stringify @param pretty A boolean value indicating whether the resulting JSON should be pretty printed. @return Returns the serialized JSON data of this parser instance. @@ -30,7 +30,7 @@ LUCI_LANG.pt-br=Português do Brasil (Brazialian Portuguese) LUCI_LANG.pt=Português (Portuguese) LUCI_LANG.ro=Română (Romanian) LUCI_LANG.ru=Русский (Russian) -LUCI_LANG.sk=Slovenčina (Slovene) +LUCI_LANG.sk=Slovenčina (Slovak) LUCI_LANG.sv=Svenska (Swedish) LUCI_LANG.tr=Türkçe (Turkish) LUCI_LANG.uk=украї́нська (Ukrainian) diff --git a/modules/luci-base/Makefile b/modules/luci-base/Makefile index 80bbda107..a9c5e71cb 100644 --- a/modules/luci-base/Makefile +++ b/modules/luci-base/Makefile @@ -12,7 +12,7 @@ LUCI_TYPE:=mod LUCI_BASENAME:=base LUCI_TITLE:=LuCI core libraries -LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +luci-lib-jsonc PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 PKG_SOURCE_URL:=https://luasrcdiet.googlecode.com/files @@ -22,6 +22,10 @@ HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1 include $(INCLUDE_DIR)/host-build.mk +define Package/luci-base/conffiles +/etc/luci-uploads +endef + include ../../luci.mk define Host/Configure diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 5e31bf209..1c4123bda 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -139,10 +139,11 @@ var cbi_validators = { return (this.match(/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/) != null); }, - 'host': function() + 'host': function(ipv4only) { return cbi_validators.hostname.apply(this) || - cbi_validators.ipaddr.apply(this); + ((ipv4only != 1) && cbi_validators.ipaddr.apply(this)) || + ((ipv4only == 1) && cb_validators.ip4addr.apply(this)); }, 'hostname': function() @@ -161,6 +162,49 @@ var cbi_validators = { cbi_validators.host.apply(this); }, + 'hostport': function(ipv4only) + { + var hp = this.split(/:/); + + if (hp.length == 2) + return (cbi_validators.host.apply(hp[0], ipv4only) && + cbi_validators.port.apply(hp[1])); + + return false; + }, + + 'ip4addrport': function() + { + var hp = this.split(/:/); + + if (hp.length == 2) + return (cbi_validators.ipaddr.apply(hp[0]) && + cbi_validators.port.apply(hp[1])); + return false; + }, + + 'ipaddrport': function(bracket) + { + if (this.match(/^([^\[\]:]+):([^:]+)$/)) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip4addr.apply(addr) && + cbi_validators.port.apply(port)); + } else if ((bracket == 1) && (this.match(/^\[(.+)\]:([^:]+)$/))) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip6addr.apply(addr) && + cbi_validators.port.apply(port)); + } else if ((bracket != 1) && (this.match(/^([^\[\]]+):([^:]+)$/))) { + var addr = RegExp.$1 + var port = RegExp.$2 + return (cbi_validators.ip6addr.apply(addr) && + cbi_validators.port.apply(port)); + } else { + return false; + } + }, + 'wpakey': function() { var v = this; @@ -300,6 +344,47 @@ var cbi_validators = { 'phonedigit': function() { return (this.match(/^[0-9\*#!\.]+$/) != null); + }, + 'timehhmmss': function() + { + return (this.match(/^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$/) != null); + }, + 'dateyyyymmdd': function() + { + if (this == null) { + return false; + } + if (this.match(/^(\d\d\d\d)-(\d\d)-(\d\d)/)) { + var year = RegExp.$1; + var month = RegExp.$2; + var day = RegExp.$2 + + var days_in_month = [ 31, 28, 31, 30, 31, 30, 31, 31, 30 , 31, 30, 31 ]; + function is_leap_year(year) { + return ((year % 4) == 0) && ((year % 100) != 0) || ((year % 400) == 0); + } + function get_days_in_month(month, year) { + if ((month == 2) && is_leap_year(year)) { + return 29; + } else { + return days_in_month[month]; + } + } + /* Firewall rules in the past don't make sense */ + if (year < 2015) { + return false; + } + if ((month <= 0) || (month > 12)) { + return false; + } + if ((day <= 0) || (day > get_days_in_month(month, year))) { + return false; + } + return true; + + } else { + return false; + } } }; @@ -545,7 +630,7 @@ function cbi_browser_init(id, respath, url, defpath) cbi_bind(btn, 'click', cbi_browser_btnclick); } -function cbi_dynlist_init(name, respath, datatype, optional, choices) +function cbi_dynlist_init(name, respath, datatype, optional, url, defpath, choices) { var input0 = document.getElementsByName(name)[0]; var prefix = input0.name; @@ -606,6 +691,11 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) parent.appendChild(t); parent.appendChild(b); + if (datatype == 'file') + { + cbi_browser_init(t.id, respath, url, defpath); + } + parent.appendChild(document.createElement('br')); if (datatype) @@ -616,13 +706,13 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) if (choices) { cbi_combobox_init(t.id, choices[0], '', choices[1]); - t.nextSibling.index = i; + b.index = i; - cbi_bind(t.nextSibling, 'keydown', cbi_dynlist_keydown); - cbi_bind(t.nextSibling, 'keypress', cbi_dynlist_keypress); + cbi_bind(b, 'keydown', cbi_dynlist_keydown); + cbi_bind(b, 'keypress', cbi_dynlist_keypress); if (i == focus || -i == focus) - t.nextSibling.focus(); + b.focus(); } else { @@ -758,20 +848,24 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices) ev = ev ? ev : window.event; var se = ev.target ? ev.target : ev.srcElement; + var input = se.previousSibling; + while (input && input.name != name) { + input = input.previousSibling; + } if (se.src.indexOf('remove') > -1) { - se.previousSibling.value = ''; + input.value = ''; cbi_dynlist_keydown({ - target: se.previousSibling, + target: input, keyCode: 8 }); } else { cbi_dynlist_keydown({ - target: se.previousSibling, + target: input, keyCode: 13 }); } diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif Binary files differindex 7b02b6e72..e06e37c75 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif +++ b/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif Binary files differindex 431ff64d1..eebe0fffe 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif +++ b/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif Binary files differindex 3b1217dd6..342a8463d 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif +++ b/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png b/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png Binary files differindex 4c163bf69..7faadecf9 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png Binary files differindex 0f367c536..b3e620b3a 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png b/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png Binary files differindex 41d2ba9ac..776283360 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png Binary files differindex f2e05a425..9a8721b02 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png Binary files differindex a02538124..e3d24f279 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png Binary files differindex 2bb02e455..d8792df54 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif b/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif Binary files differindex 5bb90fd6a..715431483 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif +++ b/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png b/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png Binary files differindex 25ea17232..5a2b235d0 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png b/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png Binary files differindex e06303791..8105e77d0 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png Binary files differindex 2e5dff466..b3a8118af 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png Binary files differindex 114583a67..333b1557b 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png Binary files differindex ee8cc4f1c..b465de3f5 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png Binary files differindex 26bcbf715..cd7bcaf9a 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png Binary files differindex 5cffaa1b8..f7a3658df 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png Binary files differindex b77585c0f..4a11356af 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/switch.png b/modules/luci-base/htdocs/luci-static/resources/icons/switch.png Binary files differindex 5c99ba568..be99b19ba 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/switch.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/switch.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png Binary files differindex b8c84c8dc..54588d24d 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png Binary files differindex c5a09dd68..63eabfef5 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png Binary files differindex ad9856cfe..ca79d8170 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png b/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png Binary files differindex 5c99ba568..be99b19ba 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png Binary files differindex b8c84c8dc..54588d24d 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png Binary files differindex 528ce2b4e..80a23e8e9 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png Binary files differindex d73a5e740..9e466aebf 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png Binary files differindex af93b37b7..6f9fff381 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png Binary files differindex 338a34f78..e989a2bd3 100644 --- a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png +++ b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png diff --git a/modules/luci-base/luasrc/cbi.lua b/modules/luci-base/luasrc/cbi.lua index f3d4618b6..2c1bb4d22 100644 --- a/modules/luci-base/luasrc/cbi.lua +++ b/modules/luci-base/luasrc/cbi.lua @@ -38,7 +38,7 @@ function load(cbimap, ...) require("luci.config") require("luci.util") - local upldir = "/lib/uci/upload/" + local upldir = "/etc/luci-uploads/" local cbidir = luci.util.libpath() .. "/model/cbi/" local func, err @@ -367,63 +367,64 @@ end -- Use optimized UCI writing function Map.parse(self, readinput, ...) - self.readinput = (readinput ~= false) - self:_run_hooks("on_parse") - if self:formvalue("cbi.skip") then self.state = FORM_SKIP + elseif not self.save then + self.state = FORM_INVALID + elseif not self:submitstate() then + self.state = FORM_NODATA + end + + -- Back out early to prevent unauthorized changes on the subsequent parse + if self.state ~= nil then return self:state_handler(self.state) end + self.readinput = (readinput ~= false) + self:_run_hooks("on_parse") + Node.parse(self, ...) - if self.save then - self:_run_hooks("on_save", "on_before_save") + self:_run_hooks("on_save", "on_before_save") + for i, config in ipairs(self.parsechain) do + self.uci:save(config) + end + self:_run_hooks("on_after_save") + if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then + self:_run_hooks("on_before_commit") for i, config in ipairs(self.parsechain) do - self.uci:save(config) - end - self:_run_hooks("on_after_save") - if self:submitstate() and ((not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply")) then - self:_run_hooks("on_before_commit") - for i, config in ipairs(self.parsechain) do - self.uci:commit(config) - - -- Refresh data because commit changes section names - self.uci:load(config) - end - self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") - if self.apply_on_parse then - self.uci:apply(self.parsechain) - self:_run_hooks("on_apply", "on_after_apply") - else - -- This is evaluated by the dispatcher and delegated to the - -- template which in turn fires XHR to perform the actual - -- apply actions. - self.apply_needed = true - end - - -- Reparse sections - Node.parse(self, true) + self.uci:commit(config) + -- Refresh data because commit changes section names + self.uci:load(config) end - for i, config in ipairs(self.parsechain) do - self.uci:unload(config) - end - if type(self.commit_handler) == "function" then - self:commit_handler(self:submitstate()) + self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") + if self.apply_on_parse then + self.uci:apply(self.parsechain) + self:_run_hooks("on_apply", "on_after_apply") + else + -- This is evaluated by the dispatcher and delegated to the + -- template which in turn fires XHR to perform the actual + -- apply actions. + self.apply_needed = true end + + -- Reparse sections + Node.parse(self, true) + end + for i, config in ipairs(self.parsechain) do + self.uci:unload(config) + end + if type(self.commit_handler) == "function" then + self:commit_handler(self:submitstate()) end - if self:submitstate() then - if not self.save then - self.state = FORM_INVALID - elseif self.proceed then - self.state = FORM_PROCEED - else - self.state = self.changed and FORM_CHANGED or FORM_VALID - end + if self.proceed then + self.state = FORM_PROCEED + elseif self.changed then + self.state = FORM_CHANGED else - self.state = FORM_NODATA + self.state = FORM_VALID end return self:state_handler(self.state) @@ -1470,6 +1471,7 @@ function Value.__init__(self, ...) self.template = "cbi/value" self.keylist = {} self.vallist = {} + self.readonly = nil end function Value.reset_values(self) @@ -1483,6 +1485,10 @@ function Value.value(self, key, val) table.insert(self.vallist, tostring(val)) end +function Value.parse(self, section, novld) + if self.readonly then return end + AbstractValue.parse(self, section, novld) +end -- DummyValue - This does nothing except being there DummyValue = class(AbstractValue) @@ -1527,17 +1533,25 @@ function Flag.__init__(self, ...) end -- A flag can only have two states: set or unset -function Flag.parse(self, section) +function Flag.parse(self, section, novld) local fexists = self.map:formvalue( FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option) if fexists then local fvalue = self:formvalue(section) and self.enabled or self.disabled local cvalue = self:cfgvalue(section) - if fvalue ~= self.default or (not self.optional and not self.rmempty) then - self:write(section, fvalue) - else + local val_err + fvalue, val_err = self:validate(fvalue, section) + if not fvalue then + if not novld then + self:add_error(section, "invalid", val_err) + end + return + end + if fvalue == self.default and (self.optional or self.rmempty) then self:remove(section) + else + self:write(section, fvalue) end if (fvalue ~= cvalue) then self.section.changed = true end else @@ -1549,7 +1563,9 @@ end function Flag.cfgvalue(self, section) return AbstractValue.cfgvalue(self, section) or self.default end - +function Flag.validate(self, value) + return value +end --[[ ListValue - A one-line value predefined in a list @@ -1795,6 +1811,7 @@ function Button.__init__(self, ...) self.template = "cbi/button" self.inputstyle = nil self.rmempty = true + self.unsafeupload = false end @@ -1811,9 +1828,15 @@ function FileUpload.__init__(self, ...) end function FileUpload.formcreated(self, section) - return AbstractValue.formcreated(self, section) or - self.map:formvalue("cbi.rlf."..section.."."..self.option) or - self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") + if self.unsafeupload then + return AbstractValue.formcreated(self, section) or + self.map:formvalue("cbi.rlf."..section.."."..self.option) or + self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") or + self.map:formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + else + return AbstractValue.formcreated(self, section) or + self.map:formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + end end function FileUpload.cfgvalue(self, section) @@ -1824,27 +1847,50 @@ function FileUpload.cfgvalue(self, section) return nil end +-- If we have a new value, use it +-- otherwise use old value +-- deletion should be managed by a separate button object +-- unless self.unsafeupload is set in which case if the user +-- choose to remove the old file we do so. +-- Also, allow to specify (via textbox) a file already on router function FileUpload.formvalue(self, section) local val = AbstractValue.formvalue(self, section) if val then - if not self.map:formvalue("cbi.rlf."..section.."."..self.option) and - not self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") - then + if self.unsafeupload then + if not self.map:formvalue("cbi.rlf."..section.."."..self.option) and + not self.map:formvalue("cbi.rlf."..section.."."..self.option..".x") + then + return val + end + fs.unlink(val) + self.value = nil + return nil + elseif val ~= "" then return val - end - fs.unlink(val) - self.value = nil + end end - return nil + val = luci.http.formvalue("cbid."..self.map.config.."."..section.."."..self.option..".textbox") + if val == "" then + val = nil + end + if not self.unsafeupload then + if not val then + val = self.map:formvalue("cbi.rlf."..section.."."..self.option) + end + end + return val end function FileUpload.remove(self, section) - local val = AbstractValue.formvalue(self, section) - if val and fs.access(val) then fs.unlink(val) end - return AbstractValue.remove(self, section) + if self.unsafeupload then + local val = AbstractValue.formvalue(self, section) + if val and fs.access(val) then fs.unlink(val) end + return AbstractValue.remove(self, section) + else + return nil + end end - FileBrowser = class(AbstractValue) function FileBrowser.__init__(self, ...) diff --git a/modules/luci-base/luasrc/cbi/datatypes.lua b/modules/luci-base/luasrc/cbi/datatypes.lua index ebd7e594f..626ad91c7 100644 --- a/modules/luci-base/luasrc/cbi/datatypes.lua +++ b/modules/luci-base/luasrc/cbi/datatypes.lua @@ -176,14 +176,43 @@ function hostname(val) return false end -function host(val) - return hostname(val) or ipaddr(val) +function host(val, ipv4only) + return hostname(val) or ((ipv4only == 1) and ip4addr(val)) or ((not (ipv4only == 1)) and ipaddr(val)) end function network(val) return uciname(val) or host(val) end +function hostport(val, ipv4only) + local h, p = val:match("^([^:]+):([^:]+)$") + return not not (h and p and host(h, ipv4only) and port(p)) +end + +function ip4addrport(val, bracket) + local h, p = val:match("^([^:]+):([^:]+)$") + return (h and p and ip4addr(h) and port(p)) +end + +function ip4addrport(val) + local h, p = val:match("^([^:]+):([^:]+)$") + return (h and p and ip4addr(h) and port(p)) +end + +function ipaddrport(val, bracket) + local h, p = val:match("^([^%[%]:]+):([^:]+)$") + if (h and p and ip4addr(h) and port(p)) then + return true + elseif (bracket == 1) then + h, p = val:match("^%[(.+)%]:([^:]+)$") + if (h and p and ip6addr(h) and port(p)) then + return true + end + end + h, p = val:match("^([^%[%]]+):([^:]+)$") + return (h and p and ip6addr(h) and port(p)) +end + function wpakey(val) if #val == 64 then return (val:match("^[a-fA-F0-9]+$") ~= nil) @@ -331,3 +360,48 @@ end function phonedigit(val) return (val:match("^[0-9\*#!%.]+$") ~= nil) end + +function timehhmmss(val) + return (val:match("^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$") ~= nil) +end + +function dateyyyymmdd(val) + if val ~= nil then + yearstr, monthstr, daystr = val:match("^(%d%d%d%d)-(%d%d)-(%d%d)$") + if (yearstr == nil) or (monthstr == nil) or (daystr == nil) then + return false; + end + year = tonumber(yearstr) + month = tonumber(monthstr) + day = tonumber(daystr) + if (year == nil) or (month == nil) or (day == nil) then + return false; + end + + local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + + local function is_leap_year(year) + return (year % 4 == 0) and ((year % 100 ~= 0) or (year % 400 == 0)) + end + + function get_days_in_month(month, year) + if (month == 2) and is_leap_year(year) then + return 29 + else + return days_in_month[month] + end + end + if (year < 2015) then + return false + end + if ((month == 0) or (month > 12)) then + return false + end + if ((day == 0) or (day > get_days_in_month(month, year))) then + return false + end + return true + end + return false +end + diff --git a/modules/luci-base/luasrc/controller/admin/servicectl.lua b/modules/luci-base/luasrc/controller/admin/servicectl.lua index 5b855cb24..1d73eb4ec 100644 --- a/modules/luci-base/luasrc/controller/admin/servicectl.lua +++ b/modules/luci-base/luasrc/controller/admin/servicectl.lua @@ -6,7 +6,7 @@ module("luci.controller.admin.servicectl", package.seeall) function index() entry({"servicectl"}, alias("servicectl", "status")).sysauth = "root" entry({"servicectl", "status"}, call("action_status")).leaf = true - entry({"servicectl", "restart"}, call("action_restart")).leaf = true + entry({"servicectl", "restart"}, post("action_restart")).leaf = true end function action_status() diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 8b8d1fa34..cd5d77a12 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -1,4 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> +-- Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. local fs = require "nixio.fs" @@ -26,14 +27,6 @@ function build_url(...) local path = {...} local url = { http.getenv("SCRIPT_NAME") or "" } - local k, v - for k, v in pairs(context.urltoken) do - url[#url+1] = "/;" - url[#url+1] = http.urlencode(k) - url[#url+1] = "=" - url[#url+1] = http.urlencode(v) - end - local p for _, p in ipairs(path) do if p:match("^[a-zA-Z0-9_%-%.%%/,;]+$") then @@ -42,6 +35,10 @@ function build_url(...) end end + if #path == 0 then + url[#url+1] = "/" + end + return table.concat(url, "") end @@ -112,24 +109,11 @@ function authenticator.htmlauth(validator, accs, default) return user end - if context.urltoken.stok then - context.urltoken.stok = nil - - local cookie = 'sysauth=%s; expires=%s; path=%s/' %{ - http.getcookie('sysauth') or 'x', - 'Thu, 01 Jan 1970 01:00:00 GMT', - build_url() - } - - http.header("Set-Cookie", cookie) - http.redirect(build_url()) - else - require("luci.i18n") - require("luci.template") - context.path = {} - http.status(403, "Forbidden") - luci.template.render("sysauth", {duser=default, fuser=user}) - end + require("luci.i18n") + require("luci.template") + context.path = {} + http.status(403, "Forbidden") + luci.template.render("sysauth", {duser=default, fuser=user}) return false @@ -140,7 +124,6 @@ function httpdispatch(request, prefix) local r = {} context.request = r - context.urltoken = {} local pathinfo = http.urldecode(request:getenv("PATH_INFO") or "", true) @@ -150,18 +133,8 @@ function httpdispatch(request, prefix) end end - local tokensok = true for node in pathinfo:gmatch("[^/]+") do - local tkey, tval - if tokensok then - tkey, tval = node:match(";(%w+)=([a-fA-F0-9]*)") - end - if tkey then - context.urltoken[tkey] = tval - else - tokensok = false - r[#r+1] = node - end + r[#r+1] = node end local stat, err = util.coxpcall(function() @@ -173,6 +146,48 @@ function httpdispatch(request, prefix) --context._disable_memtrace() end +local function require_post_security(target) + if type(target) == "table" then + if type(target.post) == "table" then + local param_name, required_val, request_val + + for param_name, required_val in pairs(target.post) do + request_val = http.formvalue(param_name) + + if (type(required_val) == "string" and + request_val ~= required_val) or + (required_val == true and + (request_val == nil or request_val == "")) + then + return false + end + end + + return true + end + + return (target.post == true) + end + + return false +end + +function test_post_security() + if http.getenv("REQUEST_METHOD") ~= "POST" then + http.status(405, "Method Not Allowed") + http.header("Allow", "POST") + return false + end + + if http.formvalue("token") ~= context.authtoken then + http.status(403, "Forbidden") + luci.template.render("csrftoken") + return false + end + + return true +end + function dispatch(request) --context._disable_memtrace = require "luci.debug".trap_memtrace("l") local ctx = context @@ -206,7 +221,6 @@ function dispatch(request) ctx.args = args ctx.requestargs = ctx.requestargs or args local n - local token = ctx.urltoken local preq = {} local freq = {} @@ -284,11 +298,14 @@ function dispatch(request) resource = luci.config.main.resourcebase; ifattr = function(...) return _ifattr(...) end; attr = function(...) return _ifattr(true, ...) end; + url = build_url; }, {__index=function(table, key) if key == "controller" then return build_url() elseif key == "REQUEST_URI" then return build_url(unpack(ctx.requestpath)) + elseif key == "token" then + return ctx.authtoken else return rawget(table, key) or _G[key] end @@ -311,20 +328,17 @@ function dispatch(request) local def = (type(track.sysauth) == "string") and track.sysauth local accs = def and {track.sysauth} or track.sysauth local sess = ctx.authsession - local verifytoken = false if not sess then sess = http.getcookie("sysauth") sess = sess and sess:match("^[a-f0-9]*$") - verifytoken = true end local sdat = (util.ubus("session", "get", { ubus_rpc_session = sess }) or { }).values - local user + local user, token if sdat then - if not verifytoken or ctx.urltoken.stok == sdat.token then - user = sdat.user - end + user = sdat.user + token = sdat.token else local eu = http.getenv("HTTP_AUTH_USER") local ep = http.getenv("HTTP_AUTH_PASS") @@ -357,12 +371,10 @@ function dispatch(request) end if sess and token then - http.header("Set-Cookie", 'sysauth=%s; path=%s/' %{ - sess, build_url() - }) + http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sess, build_url() }) - ctx.urltoken.stok = token ctx.authsession = sess + ctx.authtoken = token ctx.authuser = user http.redirect(build_url(unpack(ctx.requestpath))) @@ -374,10 +386,17 @@ function dispatch(request) end else ctx.authsession = sess + ctx.authtoken = token ctx.authuser = user end end + if c and require_post_security(c.target) then + if not test_post_security(c) then + return + end + end + if track.setgroup then sys.process.setgroup(track.setgroup) end @@ -703,6 +722,20 @@ function call(name, ...) return {type = "call", argv = {...}, name = name, target = _call} end +function post_on(params, name, ...) + return { + type = "call", + post = params, + argv = { ... }, + name = name, + target = _call + } +end + +function post(...) + return post_on(true, ...) +end + local _template = function(self, ...) require "luci.template".render(self.view) @@ -814,7 +847,13 @@ local function _cbi(self, ...) end function cbi(model, config) - return {type = "cbi", config = config, model = model, target = _cbi} + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + config = config, + model = model, + target = _cbi + } end @@ -854,7 +893,12 @@ local function _form(self, ...) end function form(model) - return {type = "cbi", model = model, target = _form} + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + model = model, + target = _form + } end translate = i18n.translate diff --git a/modules/luci-base/luasrc/http.lua b/modules/luci-base/luasrc/http.lua index a92d8affb..4b3573172 100644 --- a/modules/luci-base/luasrc/http.lua +++ b/modules/luci-base/luasrc/http.lua @@ -208,6 +208,7 @@ function splice(fd, size) end function redirect(url) + if url == "" then url = "/" end status(302, "Found") header("Location", url) close() diff --git a/modules/luci-base/luasrc/http/protocol.lua b/modules/luci-base/luasrc/http/protocol.lua index 859272679..0cb62aeec 100644 --- a/modules/luci-base/luasrc/http/protocol.lua +++ b/modules/luci-base/luasrc/http/protocol.lua @@ -72,7 +72,7 @@ function urlencode( str ) if type(str) == "string" then str = str:gsub( - "([^a-zA-Z0-9$_%-%.!*'(),])", + "([^a-zA-Z0-9$_%-%.%~])", __chrenc ) end diff --git a/modules/luci-base/luasrc/model/ipkg.lua b/modules/luci-base/luasrc/model/ipkg.lua index 41633c43d..e653b0346 100644 --- a/modules/luci-base/luasrc/model/ipkg.lua +++ b/modules/luci-base/luasrc/model/ipkg.lua @@ -127,26 +127,29 @@ local function _list(action, pat, cb) (pat and (" '%s'" % pat:gsub("'", "")) or "")) if fd then - local name, version, desc + local name, version, sz, desc while true do local line = fd:read("*l") if not line then break end - name, version, desc = line:match("^(.-) %- (.-) %- (.+)") + name, version, sz, desc = line:match("^(.-) %- (.-) %- (.-) %- (.+)") if not name then - name, version = line:match("^(.-) %- (.+)") + name, version, sz = line:match("^(.-) %- (.-) %- (.+)") desc = "" end - if #version > 26 then - version = version:sub(1,21) .. ".." .. version:sub(-3,-1) - end + if name and version then + if #version > 26 then + version = version:sub(1,21) .. ".." .. version:sub(-3,-1) + end - cb(name, version, desc) + cb(name, version, sz, desc) + end name = nil version = nil + sz = nil desc = nil end @@ -155,15 +158,15 @@ local function _list(action, pat, cb) end function list_all(pat, cb) - _list("list", pat, cb) + _list("list --size", pat, cb) end function list_installed(pat, cb) - _list("list_installed", pat, cb) + _list("list_installed --size", pat, cb) end function find(pat, cb) - _list("find", pat, cb) + _list("find --size", pat, cb) end @@ -237,4 +240,3 @@ function compare_versions(ver1, comp, ver2) -- all equal and not compare greater or lower then true return not (comp == "<" or comp == ">") end - diff --git a/modules/luci-base/luasrc/model/network.lua b/modules/luci-base/luasrc/model/network.lua index 20e103276..81fc416fe 100644 --- a/modules/luci-base/luasrc/model/network.lua +++ b/modules/luci-base/luasrc/model/network.lua @@ -1,8 +1,8 @@ -- Copyright 2009-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. -local type, next, pairs, ipairs, loadfile, table - = type, next, pairs, ipairs, loadfile, table +local type, next, pairs, ipairs, loadfile, table, select + = type, next, pairs, ipairs, loadfile, table, select local tonumber, tostring, math = tonumber, tostring, math @@ -16,6 +16,7 @@ local utl = require "luci.util" local dsp = require "luci.dispatcher" local uci = require "luci.model.uci" local lng = require "luci.i18n" +local jsc = require "luci.jsonc" module "luci.model.network" @@ -31,10 +32,10 @@ local _protocols = { } local _interfaces, _bridge, _switch, _tunnel local _ubusnetcache, _ubusdevcache, _ubuswificache -local _uci_real, _uci_state +local _uci function _filter(c, s, o, r) - local val = _uci_real:get(c, s, o) + local val = _uci:get(c, s, o) if val then local l = { } if type(val) == "string" then @@ -44,9 +45,9 @@ function _filter(c, s, o, r) end end if #l > 0 then - _uci_real:set(c, s, o, table.concat(l, " ")) + _uci:set(c, s, o, table.concat(l, " ")) else - _uci_real:delete(c, s, o) + _uci:delete(c, s, o) end elseif type(val) == "table" then for _, val in ipairs(val) do @@ -55,16 +56,16 @@ function _filter(c, s, o, r) end end if #l > 0 then - _uci_real:set(c, s, o, l) + _uci:set(c, s, o, l) else - _uci_real:delete(c, s, o) + _uci:delete(c, s, o) end end end end function _append(c, s, o, a) - local val = _uci_real:get(c, s, o) or "" + local val = _uci:get(c, s, o) or "" if type(val) == "string" then local l = { } for val in val:gmatch("%S+") do @@ -73,7 +74,7 @@ function _append(c, s, o, a) end end l[#l+1] = a - _uci_real:set(c, s, o, table.concat(l, " ")) + _uci:set(c, s, o, table.concat(l, " ")) elseif type(val) == "table" then local l = { } for _, val in ipairs(val) do @@ -82,7 +83,7 @@ function _append(c, s, o, a) end end l[#l+1] = a - _uci_real:set(c, s, o, l) + _uci:set(c, s, o, l) end end @@ -95,15 +96,15 @@ function _stror(s1, s2) end function _get(c, s, o) - return _uci_real:get(c, s, o) + return _uci:get(c, s, o) end function _set(c, s, o, v) if v ~= nil then if type(v) == "boolean" then v = v and "1" or "0" end - return _uci_real:set(c, s, o, v) + return _uci:set(c, s, o, v) else - return _uci_real:delete(c, s, o) + return _uci:delete(c, s, o) end end @@ -127,7 +128,7 @@ function _wifi_state(key, val, field) for radio, radiostate in pairs(_ubuswificache) do for ifc, ifcstate in pairs(radiostate.interfaces) do if ifcstate.section and ifcstate.section:sub(1, 1) == '@' then - local s = _uci_real:get_all('wireless.%s' % ifcstate.section) + local s = _uci:get_all('wireless.%s' % ifcstate.section) if s then ifcstate.section = s['.name'] end @@ -153,7 +154,7 @@ function _wifi_lookup(ifn) local num = 0 ifnidx = tonumber(ifnidx) - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device == radio then num = num + 1 @@ -166,20 +167,9 @@ function _wifi_lookup(ifn) return sid - -- looks like wifi, try to locate the section via state vars + -- looks like wifi, try to locate the section via ubus state elseif _wifi_iface(ifn) then - local sid = _wifi_state("ifname", ifn, "section") - if not sid then - _uci_state:foreach("wireless", "wifi-iface", - function(s) - if s.ifname == ifn then - sid = s['.name'] - return false - end - end) - end - - return sid + return _wifi_state("ifname", ifn, "section") end end @@ -205,8 +195,7 @@ end function init(cursor) - _uci_real = cursor or _uci_real or uci.cursor() - _uci_state = _uci_real:substate() + _uci = cursor or _uci or uci.cursor() _interfaces = { } _bridge = { } @@ -281,13 +270,13 @@ function init(cursor) end function save(self, ...) - _uci_real:save(...) - _uci_real:load(...) + _uci:save(...) + _uci:load(...) end function commit(self, ...) - _uci_real:commit(...) - _uci_real:load(...) + _uci:commit(...) + _uci:load(...) end function ifnameof(self, x) @@ -345,7 +334,7 @@ end function add_network(self, n, options) local oldnet = self:get_network(n) if n and #n > 0 and n:match("^[a-zA-Z0-9_]+$") and not oldnet then - if _uci_real:section("network", "interface", n, options) then + if _uci:section("network", "interface", n, options) then return network(n) end elseif oldnet and oldnet:is_empty() then @@ -360,7 +349,7 @@ function add_network(self, n, options) end function get_network(self, n) - if n and _uci_real:get("network", n) == "interface" then + if n and _uci:get("network", n) == "interface" then return network(n) end end @@ -369,7 +358,7 @@ function get_networks(self) local nets = { } local nls = { } - _uci_real:foreach("network", "interface", + _uci:foreach("network", "interface", function(s) nls[s['.name']] = network(s['.name']) end) @@ -383,18 +372,18 @@ function get_networks(self) end function del_network(self, n) - local r = _uci_real:delete("network", n) + local r = _uci:delete("network", n) if r then - _uci_real:delete_all("network", "alias", + _uci:delete_all("network", "alias", function(s) return (s.interface == n) end) - _uci_real:delete_all("network", "route", + _uci:delete_all("network", "route", function(s) return (s.interface == n) end) - _uci_real:delete_all("network", "route6", + _uci:delete_all("network", "route6", function(s) return (s.interface == n) end) - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) local net local rest = { } @@ -404,10 +393,10 @@ function del_network(self, n) end end if #rest > 0 then - _uci_real:set("wireless", s['.name'], "network", + _uci:set("wireless", s['.name'], "network", table.concat(rest, " ")) else - _uci_real:delete("wireless", s['.name'], "network") + _uci:delete("wireless", s['.name'], "network") end end) end @@ -417,31 +406,31 @@ end function rename_network(self, old, new) local r if new and #new > 0 and new:match("^[a-zA-Z0-9_]+$") and not self:get_network(new) then - r = _uci_real:section("network", "interface", new, _uci_real:get_all("network", old)) + r = _uci:section("network", "interface", new, _uci:get_all("network", old)) if r then - _uci_real:foreach("network", "alias", + _uci:foreach("network", "alias", function(s) if s.interface == old then - _uci_real:set("network", s['.name'], "interface", new) + _uci:set("network", s['.name'], "interface", new) end end) - _uci_real:foreach("network", "route", + _uci:foreach("network", "route", function(s) if s.interface == old then - _uci_real:set("network", s['.name'], "interface", new) + _uci:set("network", s['.name'], "interface", new) end end) - _uci_real:foreach("network", "route6", + _uci:foreach("network", "route6", function(s) if s.interface == old then - _uci_real:set("network", s['.name'], "interface", new) + _uci:set("network", s['.name'], "interface", new) end end) - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) local net local list = { } @@ -453,12 +442,12 @@ function rename_network(self, old, new) end end if #list > 0 then - _uci_real:set("wireless", s['.name'], "network", + _uci:set("wireless", s['.name'], "network", table.concat(list, " ")) end end) - _uci_real:delete("network", old) + _uci:delete("network", old) end end return r or false @@ -470,7 +459,7 @@ function get_interface(self, i) else local ifc local num = { } - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device then num[s.device] = num[s.device] and num[s.device] + 1 or 1 @@ -485,6 +474,21 @@ function get_interface(self, i) end end +local function swdev_from_board_json() + local boardinfo = jsc.parse(nfs.readfile("/etc/board.json") or "") + if type(boardinfo) == "table" and type(boardinfo.network) == "table" then + local net, val + for net, val in pairs(boardinfo.network) do + if type(val) == "table" and type(val.ifname) == "string" and + val.create_vlan == true + then + return val.ifname + end + end + end + return nil +end + function get_interfaces(self) local iface local ifaces = { } @@ -493,7 +497,7 @@ function get_interfaces(self) local baseof = { } -- find normal interfaces - _uci_real:foreach("network", "interface", + _uci:foreach("network", "interface", function(s) for iface in utl.imatch(s.ifname) do if not _iface_ignore(iface) and not _wifi_iface(iface) then @@ -510,7 +514,7 @@ function get_interfaces(self) end -- find vlan interfaces - _uci_real:foreach("network", "switch_vlan", + _uci:foreach("network", "switch_vlan", function(s) if not s.device then return @@ -526,7 +530,7 @@ function get_interfaces(self) end end if not base or not base:match("^eth%d") then - base = "eth0" + base = swdev_from_board_json() or "eth0" end else base = s.device @@ -551,7 +555,7 @@ function get_interfaces(self) -- find wifi interfaces local num = { } local wfs = { } - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device then num[s.device] = num[s.device] and num[s.device] + 1 or 1 @@ -572,7 +576,7 @@ function ignore_interface(self, x) end function get_wifidev(self, dev) - if _uci_real:get("wireless", dev) == "wifi-device" then + if _uci:get("wireless", dev) == "wifi-device" then return wifidev(dev) end end @@ -581,7 +585,7 @@ function get_wifidevs(self) local devs = { } local wfd = { } - _uci_real:foreach("wireless", "wifi-device", + _uci:foreach("wireless", "wifi-device", function(s) wfd[#wfd+1] = s['.name'] end) local dev @@ -601,9 +605,9 @@ end function add_wifinet(self, net, options) if type(options) == "table" and options.device and - _uci_real:get("wireless", options.device) == "wifi-device" + _uci:get("wireless", options.device) == "wifi-device" then - local wnet = _uci_real:section("wireless", "wifi-iface", nil, options) + local wnet = _uci:section("wireless", "wifi-iface", nil, options) return wifinet(wnet) end end @@ -611,7 +615,7 @@ end function del_wifinet(self, net) local wnet = _wifi_lookup(net) if wnet then - _uci_real:delete("wireless", wnet) + _uci:delete("wireless", wnet) return true end return false @@ -684,7 +688,7 @@ end function network(name, proto) if name then - local p = proto or _uci_real:get("network", name, "proto") + local p = proto or _uci:get("network", name, "proto") local c = p and _protocols[p] or protocol return c(name) end @@ -695,7 +699,7 @@ function protocol.__init__(self, name) end function protocol._get(self, opt) - local v = _uci_real:get("network", self.sid, opt) + local v = _uci:get("network", self.sid, opt) if type(v) == "table" then return table.concat(v, " ") end @@ -730,7 +734,7 @@ function protocol.ifname(self) end if not ifname then local num = { } - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device then num[s.device] = num[s.device] @@ -779,17 +783,21 @@ function protocol.uptime(self) end function protocol.expires(self) - local a = tonumber(_uci_state:get("network", self.sid, "lease_acquired")) - local l = tonumber(_uci_state:get("network", self.sid, "lease_lifetime")) - if a and l then - l = l - (nxo.sysinfo().uptime - a) - return l > 0 and l or 0 + local u = self:_ubus("uptime") + local d = self:_ubus("data") + + if type(u) == "number" and type(d) == "table" and + type(d.leasetime) == "number" + then + local r = (d.leasetime - (u % d.leasetime)) + return r > 0 and r or 0 end + return -1 end function protocol.metric(self) - return tonumber(_uci_state:get("network", self.sid, "metric")) or 0 + return self:_ubus("metric") or 0 end function protocol.ipaddr(self) @@ -797,6 +805,20 @@ function protocol.ipaddr(self) return addrs and #addrs > 0 and addrs[1].address end +function protocol.ipaddrs(self) + local addrs = self:_ubus("ipv4-address") + local rv = { } + + if type(addrs) == "table" then + local n, addr + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s/%d" %{ addr.address, addr.mask } + end + end + + return rv +end + function protocol.netmask(self) local addrs = self:_ubus("ipv4-address") return addrs and #addrs > 0 and @@ -835,6 +857,28 @@ function protocol.ip6addr(self) end end +function protocol.ip6addrs(self) + local addrs = self:_ubus("ipv6-address") + local rv = { } + local n, addr + + if type(addrs) == "table" then + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s/%d" %{ addr.address, addr.mask } + end + end + + addrs = self:_ubus("ipv6-prefix-assignment") + + if type(addrs) == "table" then + for n, addr in ipairs(addrs) do + rv[#rv+1] = "%s1/%d" %{ addr.address, addr.mask } + end + end + + return rv +end + function protocol.gw6addr(self) local _, route for _, route in ipairs(self:_ubus("route") or { }) do @@ -885,7 +929,7 @@ function protocol.is_empty(self) rv = false end - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) local n for n in utl.imatch(s.network) do @@ -937,12 +981,12 @@ function protocol.get_interface(self) else local ifn = nil local num = { } - for ifn in utl.imatch(_uci_real:get("network", self.sid, "ifname")) do + for ifn in utl.imatch(_uci:get("network", self.sid, "ifname")) do ifn = ifn:match("^[^:/]+") return ifn and interface(ifn, self) end ifn = nil - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device then num[s.device] = num[s.device] and num[s.device] + 1 or 1 @@ -977,7 +1021,7 @@ function protocol.get_interfaces(self) local num = { } local wfs = { } - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device then num[s.device] = num[s.device] and num[s.device] + 1 or 1 @@ -1020,7 +1064,7 @@ function protocol.contains_interface(self, ifname) local wif = _wifi_lookup(ifname) if wif then local n - for n in utl.imatch(_uci_real:get("wireless", wif, "network")) do + for n in utl.imatch(_uci:get("wireless", wif, "network")) do if n == self.sid then return true end @@ -1066,7 +1110,8 @@ function interface.name(self) end function interface.mac(self) - return (self:_ubus("macaddr") or "00:00:00:00:00:00"):upper() + local mac = self:_ubus("macaddr") + return mac and mac:upper() end function interface.ipaddrs(self) @@ -1278,22 +1323,11 @@ function wifidev.is_up(self) return (_ubuswificache[self.sid].up == true) end - local up = false - _uci_state:foreach("wireless", "wifi-iface", - function(s) - if s.device == self.sid then - if s.up == "1" then - up = true - return false - end - end - end) - - return up + return false end function wifidev.get_wifinet(self, net) - if _uci_real:get("wireless", net) == "wifi-iface" then + if _uci:get("wireless", net) == "wifi-iface" then return wifinet(net) else local wnet = _wifi_lookup(net) @@ -1306,7 +1340,7 @@ end function wifidev.get_wifinets(self) local nets = { } - _uci_real:foreach("wireless", "wifi-iface", + _uci:foreach("wireless", "wifi-iface", function(s) if s.device == self.sid then nets[#nets+1] = wifinet(s['.name']) @@ -1320,7 +1354,7 @@ function wifidev.add_wifinet(self, options) options = options or { } options.device = self.sid - local wnet = _uci_real:section("wireless", "wifi-iface", nil, options) + local wnet = _uci:section("wireless", "wifi-iface", nil, options) if wnet then return wifinet(wnet, options) end @@ -1329,12 +1363,12 @@ end function wifidev.del_wifinet(self, net) if utl.instanceof(net, wifinet) then net = net.sid - elseif _uci_real:get("wireless", net) ~= "wifi-iface" then + elseif _uci:get("wireless", net) ~= "wifi-iface" then net = _wifi_lookup(net) end - if net and _uci_real:get("wireless", net, "device") == self.sid then - _uci_real:delete("wireless", net) + if net and _uci:get("wireless", net, "device") == self.sid then + _uci:delete("wireless", net) return true end @@ -1347,26 +1381,58 @@ wifinet = utl.class() function wifinet.__init__(self, net, data) self.sid = net + local n = 0 local num = { } - local netid - _uci_real:foreach("wireless", "wifi-iface", + local netid, sid + _uci:foreach("wireless", "wifi-iface", function(s) + n = n + 1 if s.device then num[s.device] = num[s.device] and num[s.device] + 1 or 1 if s['.name'] == self.sid then + sid = "@wifi-iface[%d]" % n netid = "%s.network%d" %{ s.device, num[s.device] } return false end end end) + if sid then + local _, k, r, i + for k, r in pairs(_ubuswificache) do + if type(r) == "table" and + type(r.interfaces) == "table" + then + for _, i in ipairs(r.interfaces) do + if type(i) == "table" and i.section == sid then + self._ubusdata = { + radio = k, + dev = r, + net = i + } + end + end + end + end + end + local dev = _wifi_state("section", self.sid, "ifname") or netid self.netid = netid self.wdev = dev self.iwinfo = dev and sys.wifi.getiwinfo(dev) or { } - self.iwdata = data or _uci_state:get_all("wireless", self.sid) or - _uci_real:get_all("wireless", self.sid) or { } +end + +function wifinet.ubus(self, ...) + local n, v = self._ubusdata + for n = 1, select('#', ...) do + if type(v) == "table" then + v = v[select(n, ...)] + else + return nil + end + end + return v end function wifinet.get(self, opt) @@ -1378,19 +1444,23 @@ function wifinet.set(self, opt, val) end function wifinet.mode(self) - return _uci_state:get("wireless", self.sid, "mode") or "ap" + return self:ubus("net", "config", "mode") or self:get("mode") or "ap" end function wifinet.ssid(self) - return _uci_state:get("wireless", self.sid, "ssid") + return self:ubus("net", "config", "ssid") or self:get("ssid") end function wifinet.bssid(self) - return _uci_state:get("wireless", self.sid, "bssid") + return self:ubus("net", "config", "bssid") or self:get("bssid") end function wifinet.network(self) - return _uci_state:get("wifinet", self.sid, "network") + local net, networks = nil, { } + for net in utl.imatch(self:ubus("net", "config", "network") or self:get("network")) do + networks[#networks+1] = net + end + return networks end function wifinet.id(self) @@ -1402,7 +1472,7 @@ function wifinet.name(self) end function wifinet.ifname(self) - local ifname = self.iwinfo.ifname + local ifname = self:ubus("net", "ifname") or self.iwinfo.ifname if not ifname or ifname:match("^wifi%d") or ifname:match("^radio%d") then ifname = self.wdev end @@ -1410,9 +1480,8 @@ function wifinet.ifname(self) end function wifinet.get_device(self) - if self.iwdata.device then - return wifidev(self.iwdata.device) - end + local dev = self:ubus("radio") or self:get("device") + return dev and wifidev(dev) or nil end function wifinet.is_up(self) @@ -1421,7 +1490,7 @@ function wifinet.is_up(self) end function wifinet.active_mode(self) - local m = _stror(self.iwdata.mode, self.iwinfo.mode) or "ap" + local m = self.iwinfo.mode or self:ubus("net", "config", "mode") or self:get("mode") or "ap" if m == "ap" then m = "Master" elseif m == "sta" then m = "Client" @@ -1438,11 +1507,11 @@ function wifinet.active_mode_i18n(self) end function wifinet.active_ssid(self) - return _stror(self.iwdata.ssid, self.iwinfo.ssid) + return self.iwinfo.ssid or self:ubus("net", "config", "ssid") or self:get("ssid") end function wifinet.active_bssid(self) - return _stror(self.iwdata.bssid, self.iwinfo.bssid) or "00:00:00:00:00:00" + return self.iwinfo.bssid or self:ubus("net", "config", "bssid") or self:get("bssid") end function wifinet.active_encryption(self) @@ -1469,8 +1538,8 @@ function wifinet.bitrate(self) end function wifinet.channel(self) - return self.iwinfo.channel or - tonumber(_uci_state:get("wireless", self.iwdata.device, "channel")) + return self.iwinfo.channel or self:ubus("dev", "config", "channel") or + tonumber(self:get("channel")) end function wifinet.signal(self) @@ -1482,7 +1551,7 @@ function wifinet.noise(self) end function wifinet.country(self) - return self.iwinfo.country or "00" + return self.iwinfo.country or self:ubus("dev", "config", "country") or "00" end function wifinet.txpower(self) @@ -1548,8 +1617,8 @@ end function wifinet.get_networks(self) local nets = { } local net - for net in utl.imatch(tostring(self.iwdata.network)) do - if _uci_real:get("network", net) == "interface" then + for net in utl.imatch(self:ubus("net", "config", "network") or self:get("network")) do + if _uci:get("network", net) == "interface" then nets[#nets+1] = network(net) end end diff --git a/modules/luci-base/luasrc/model/uci.luadoc b/modules/luci-base/luasrc/model/uci.luadoc index 9e4a58f1d..49093c793 100644 --- a/modules/luci-base/luasrc/model/uci.luadoc +++ b/modules/luci-base/luasrc/model/uci.luadoc @@ -237,12 +237,18 @@ Saves changes made to a config to make them committable. ---[[ Set a value or create a named section. +When invoked with three arguments `config`, `sectionname`, `sectiontype`, +then a named section of the given type is created. + +When invoked with four arguments `config`, `sectionname`, `optionname` and +`optionvalue` then the value of the specified option is set to the given value. + @class function @name Cursor.set @param config UCI config @param section UCI section name @param option UCI option or UCI section type -@param value UCI value or nil if you want to create a section +@param value UCI value or nothing if you want to create a section @return Boolean whether operation succeeded ]] diff --git a/modules/luci-base/luasrc/sys.lua b/modules/luci-base/luasrc/sys.lua index 3977da3ed..31c3e1209 100644 --- a/modules/luci-base/luasrc/sys.lua +++ b/modules/luci-base/luasrc/sys.lua @@ -293,47 +293,51 @@ function net.ipv6_hints(callback) end function net.conntrack(callback) - local connt = {} - if fs.access("/proc/net/nf_conntrack", "r") then - for line in io.lines("/proc/net/nf_conntrack") do - line = line:match "^(.-( [^ =]+=).-)%2" - local entry, flags = _parse_mixed_record(line, " +") - if flags[6] ~= "TIME_WAIT" then - entry.layer3 = flags[1] - entry.layer4 = flags[3] - for i=1, #entry do - entry[i] = nil - end + local ok, nfct = pcall(io.lines, "/proc/net/nf_conntrack") + if not ok or not nfct then + return nil + end - if callback then - callback(entry) - else - connt[#connt+1] = entry + local line, connt = nil, (not callback) and { } + for line in nfct do + local fam, l3, l4, timeout, state, tuples = + line:match("^(ipv[46]) +(%d+) +%S+ +(%d+) +(%d+) +([A-Z_]+) +(.+)$") + + if fam and l3 and l4 and timeout and state and tuples and + state ~= "TIME_WAIT" + then + l4 = nixio.getprotobynumber(l4) + + local entry = { + bytes = 0, + packets = 0, + layer3 = fam, + layer4 = l4 and l4.name or "unknown", + timeout = tonumber(timeout, 10) + } + + local key, val + for key, val in tuples:gmatch("(%w+)=(%S+)") do + if key == "bytes" or key == "packets" then + entry[key] = entry[key] + tonumber(val, 10) + elseif key == "src" or key == "dst" or key == "sport" or key == "dport" then + if entry[key] == nil then + entry[key] = val + end + elseif val then + entry[key] = val end end - end - elseif fs.access("/proc/net/ip_conntrack", "r") then - for line in io.lines("/proc/net/ip_conntrack") do - line = line:match "^(.-( [^ =]+=).-)%2" - local entry, flags = _parse_mixed_record(line, " +") - if flags[4] ~= "TIME_WAIT" then - entry.layer3 = "ipv4" - entry.layer4 = flags[1] - for i=1, #entry do - entry[i] = nil - end - if callback then - callback(entry) - else - connt[#connt+1] = entry - end + if callback then + callback(entry) + else + connt[#connt+1] = entry end end - else - return nil end - return connt + + return callback and true or connt end function net.devices() @@ -581,30 +585,20 @@ function wifi.getiwinfo(ifname) local stat, iwinfo = pcall(require, "iwinfo") if ifname then - local c = 0 - local u = uci.cursor_state() local d, n = ifname:match("^(%w+)%.network(%d+)") - if d and n then + local wstate = luci.util.ubus("network.wireless", "status") or { } + + d = d or ifname + n = n and tonumber(n) or 1 + + if type(wstate[d]) == "table" and + type(wstate[d].interfaces) == "table" and + type(wstate[d].interfaces[n]) == "table" and + type(wstate[d].interfaces[n].ifname) == "string" + then + ifname = wstate[d].interfaces[n].ifname + else ifname = d - n = tonumber(n) - u:foreach("wireless", "wifi-iface", - function(s) - if s.device == d then - c = c + 1 - if c == n then - ifname = s.ifname or s.device - return false - end - end - end) - elseif u:get("wireless", ifname) == "wifi-device" then - u:foreach("wireless", "wifi-iface", - function(s) - if s.device == ifname and s.ifname then - ifname = s.ifname - return false - end - end) end local t = stat and iwinfo.type(ifname) @@ -665,28 +659,3 @@ end function init.stop(name) return (init_action("stop", name) == 0) end - - --- Internal functions - -function _parse_mixed_record(cnt, delimiter) - delimiter = delimiter or " " - local data = {} - local flags = {} - - for i, l in pairs(luci.util.split(luci.util.trim(cnt), "\n")) do - for j, f in pairs(luci.util.split(luci.util.trim(l), delimiter, nil, true)) do - local k, x, v = f:match('([^%s][^:=]*) *([:=]*) *"*([^\n"]*)"*') - - if k then - if x == "" then - table.insert(flags, k) - else - data[k] = v - end - end - end - end - - return data, flags -end diff --git a/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua b/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua index b109c712e..ff13b1ccd 100644 --- a/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua +++ b/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua @@ -105,6 +105,7 @@ TZ = { { 'America/Edmonton', 'MST7MDT,M3.2.0,M11.1.0' }, { 'America/Eirunepe', 'ACT5' }, { 'America/El Salvador', 'CST6' }, + { 'America/Fort Nelson', 'MST7' }, { 'America/Fortaleza', 'BRT3' }, { 'America/Glace Bay', 'AST4ADT,M3.2.0,M11.1.0' }, { 'America/Godthab', 'WGT3WGST,M3.5.0/-2,M10.5.0/-1' }, @@ -388,7 +389,7 @@ TZ = { { 'Pacific/Efate', 'VUT-11' }, { 'Pacific/Enderbury', 'PHOT-13' }, { 'Pacific/Fakaofo', 'TKT-13' }, - { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.4/75' }, + { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.0/3' }, { 'Pacific/Funafuti', 'TVT-12' }, { 'Pacific/Galapagos', 'GALT6' }, { 'Pacific/Gambier', 'GAMT9' }, @@ -404,7 +405,7 @@ TZ = { { 'Pacific/Midway', 'SST11' }, { 'Pacific/Nauru', 'NRT-12' }, { 'Pacific/Niue', 'NUT11' }, - { 'Pacific/Norfolk', 'NFT-11:30' }, + { 'Pacific/Norfolk', 'NFT-11' }, { 'Pacific/Noumea', 'NCT-11' }, { 'Pacific/Pago Pago', 'SST11' }, { 'Pacific/Palau', 'PWT-9' }, diff --git a/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua b/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua index f156f3663..53c8adbc6 100644 --- a/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua +++ b/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua @@ -152,7 +152,7 @@ OFFSET = { sst = -39600, -- SST nrt = 43200, -- NRT nut = -39600, -- NUT - nft = 41400, -- NFT + nft = 39600, -- NFT nct = 39600, -- NCT pwt = 32400, -- PWT pont = 39600, -- PONT diff --git a/modules/luci-base/luasrc/util.lua b/modules/luci-base/luasrc/util.lua index dcf8230b3..5bf0beb6c 100644 --- a/modules/luci-base/luasrc/util.lua +++ b/modules/luci-base/luasrc/util.lua @@ -9,6 +9,7 @@ local ldebug = require "luci.debug" local string = require "string" local coroutine = require "coroutine" local tparser = require "luci.template.parser" +local json = require "luci.jsonc" local _ubus = require "ubus" local _ubus_connection = nil @@ -150,6 +151,28 @@ function striptags(value) return value and tparser.striptags(tostring(value)) end +-- for bash, ash and similar shells single-quoted strings are taken +-- literally except for single quotes (which terminate the string) +-- (and the exception noted below for dash (-) at the start of a +-- command line parameter). +function shellsqescape(value) + local res + res, _ = string.gsub(res, "'", "'\\''") + return res +end + +-- bash, ash and other similar shells interpret a dash (-) at the start +-- of a command-line parameters as an option indicator regardless of +-- whether it is inside a single-quoted string. It must be backlash +-- escaped to resolve this. This requires in some funky special-case +-- handling. It may actually be a property of the getopt function +-- rather than the shell proper. +function shellstartsqescape(value) + res, _ = string.gsub(value, "^\-", "\\-") + res, _ = string.gsub(res, "^-", "\-") + return shellsqescape(value) +end + -- containing the resulting substrings. The optional max parameter specifies -- the number of bytes to process, regardless of the actual length of the given -- string. The optional last parameter, regex, specifies whether the separator @@ -600,55 +623,11 @@ function ubus(object, method, data) end function serialize_json(x, cb) - local rv, push = nil, cb - if not push then - rv = { } - push = function(tok) rv[#rv+1] = tok end - end - - if x == nil then - push("null") - elseif type(x) == "table" then - -- test if table is array like - local k, v - local n1, n2 = 0, 0 - for k in pairs(x) do n1 = n1 + 1 end - for k in ipairs(x) do n2 = n2 + 1 end - - if n1 == n2 and n1 > 0 then - push("[") - for k = 1, n2 do - if k > 1 then - push(",") - end - serialize_json(x[k], push) - end - push("]") - else - push("{") - for k, v in pairs(x) do - push("%q:" % tostring(k)) - serialize_json(v, push) - if next(x, k) then - push(",") - end - end - push("}") - end - elseif type(x) == "number" or type(x) == "boolean" then - if (x ~= x) then - -- NaN is the only value that doesn't equal to itself. - push("Number.NaN") - else - push(tostring(x)) - end + local js = json.stringify(x) + if type(cb) == "function" then + cb(js) else - push('"%s"' % tostring(x):gsub('["%z\1-\31\\]', - function(c) return '\\u%04x' % c:byte(1) end)) - end - - if not cb then - return table.concat(rv, "") + return js end end diff --git a/modules/luci-base/luasrc/view/cbi/apply_xhr.htm b/modules/luci-base/luasrc/view/cbi/apply_xhr.htm index 1814c9393..daa57c1db 100644 --- a/modules/luci-base/luasrc/view/cbi/apply_xhr.htm +++ b/modules/luci-base/luasrc/view/cbi/apply_xhr.htm @@ -4,10 +4,10 @@ <script type="text/javascript">//<![CDATA[ var apply_xhr = new XHR(); - apply_xhr.get('<%=luci.dispatcher.build_url("servicectl", "restart", table.concat(configs, ","))%>', null, + apply_xhr.post('<%=url('servicectl/restart', table.concat(configs, ","))%>', { token: '<%=token%>' }, function() { var checkfinish = function() { - apply_xhr.get('<%=luci.dispatcher.build_url("servicectl", "status")%>', null, + apply_xhr.get('<%=url('servicectl/status')%>', null, function(x) { if( x.responseText == 'finish' ) { diff --git a/modules/luci-base/luasrc/view/cbi/browser.htm b/modules/luci-base/luasrc/view/cbi/browser.htm index e4a4077d5..a18120141 100644 --- a/modules/luci-base/luasrc/view/cbi/browser.htm +++ b/modules/luci-base/luasrc/view/cbi/browser.htm @@ -2,6 +2,6 @@ <%+cbi/valueheader%> <input class="cbi-input-text" type="text"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> /> <script type="text/javascript"> -cbi_browser_init('<%=cbid%>', '<%=resource%>', '<%=luci.dispatcher.build_url("admin", "filebrowser")%>'<%=self.default_path and ", '"..self.default_path.."'"%>); +cbi_browser_init('<%=cbid%>', '<%=resource%>', '<%=url('admin/filebrowser')%>'<%=self.default_path and ", '"..self.default_path.."'"%>); </script> <%+cbi/valuefooter%> diff --git a/modules/luci-base/luasrc/view/cbi/dynlist.htm b/modules/luci-base/luasrc/view/cbi/dynlist.htm index fd626a4ec..e936c0c39 100644 --- a/modules/luci-base/luasrc/view/cbi/dynlist.htm +++ b/modules/luci-base/luasrc/view/cbi/dynlist.htm @@ -15,7 +15,9 @@ <script type="text/javascript"> cbi_dynlist_init( '<%=cbid%>', '<%=resource%>', '<%=self.datatype%>', - <%=tostring(self.optional or self.rmempty)%> + <%=tostring(self.optional or self.rmempty)%>, + '<%=url('admin/filebrowser')%>', + '<%=self.default_path and self.default_path%>' <%- if #self.keylist > 0 then -%>, [{ <%- for i, k in ipairs(self.keylist) do -%> <%-=string.format("%q", k) .. ":" .. string.format("%q", self.vallist[i])-%> diff --git a/modules/luci-base/luasrc/view/cbi/error.htm b/modules/luci-base/luasrc/view/cbi/error.htm index 2acb96924..75ec1082a 100644 --- a/modules/luci-base/luasrc/view/cbi/error.htm +++ b/modules/luci-base/luasrc/view/cbi/error.htm @@ -1,5 +1,5 @@ <div class="cbi-map" id="cbi-<%=self.config%>"> - <% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></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 %> <p class="alert-message danger"> diff --git a/modules/luci-base/luasrc/view/cbi/header.htm b/modules/luci-base/luasrc/view/cbi/header.htm index 2bddaba61..302df1d2f 100644 --- a/modules/luci-base/luasrc/view/cbi/header.htm +++ b/modules/luci-base/luasrc/view/cbi/header.htm @@ -2,6 +2,7 @@ <form method="post" name="cbi" action="<%=REQUEST_URI%>" enctype="multipart/form-data" onreset="return cbi_validate_reset(this)" onsubmit="return cbi_validate_form(this, '<%:Some fields are invalid, cannot save values!%>')"> <div> <script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="cbi.submit" value="1" /> <input type="submit" value="<%:Save%>" class="hidden" /> </div> diff --git a/modules/luci-base/luasrc/view/cbi/map.htm b/modules/luci-base/luasrc/view/cbi/map.htm index 053220d18..e90c3f589 100644 --- a/modules/luci-base/luasrc/view/cbi/map.htm +++ b/modules/luci-base/luasrc/view/cbi/map.htm @@ -5,7 +5,7 @@ <%-+cbi/apply_xhr-%> <div class="cbi-map" id="cbi-<%=self.config%>"> - <% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></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 firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%> <%- self:render_children() %> diff --git a/modules/luci-base/luasrc/view/cbi/mvalue.htm b/modules/luci-base/luasrc/view/cbi/mvalue.htm index 6a0b3881d..5d092610e 100644 --- a/modules/luci-base/luasrc/view/cbi/mvalue.htm +++ b/modules/luci-base/luasrc/view/cbi/mvalue.htm @@ -12,7 +12,7 @@ c = c + 1 %> <input class="cbi-input-checkbox" type="checkbox" onclick="cbi_d_update(this.id)" onchange="cbi_d_update(this.id)"<%= attr("id", cbid..c) .. attr("name", cbid) .. attr("value", key) .. ifattr(luci.util.contains(v, key), "checked", "checked") %> /> - <label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><br /> + <label<%= attr("for", cbid..c) %>><%=self.vallist[i]%></label><% if not self.oneline then %><br /><% else %> <% end %> <% if c == self.size then c = 0 %><br /> <% end end %> <% end %> diff --git a/modules/luci-base/luasrc/view/cbi/simpleform.htm b/modules/luci-base/luasrc/view/cbi/simpleform.htm index 5216cd50f..78f5c5a54 100644 --- a/modules/luci-base/luasrc/view/cbi/simpleform.htm +++ b/modules/luci-base/luasrc/view/cbi/simpleform.htm @@ -2,11 +2,12 @@ <form method="post" enctype="multipart/form-data" action="<%=REQUEST_URI%>"> <div> <script type="text/javascript" src="<%=resource%>/cbi.js"></script> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="cbi.submit" value="1" /> </div> <% end %> <div class="cbi-map" id="cbi-<%=self.config%>"> - <% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></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 %> <% self:render_children() %> <br /> diff --git a/modules/luci-base/luasrc/view/cbi/upload.htm b/modules/luci-base/luasrc/view/cbi/upload.htm index 777093411..157f3b36f 100644 --- a/modules/luci-base/luasrc/view/cbi/upload.htm +++ b/modules/luci-base/luasrc/view/cbi/upload.htm @@ -6,9 +6,19 @@ <%+cbi/valueheader%> <% if s then %> <%:Uploaded File%> (<%=t.byte_format(s.size)%>) - <input type="hidden"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> /> - <input class="cbi-button cbi-input-image" type="image" value="<%:Replace entry%>" name="cbi.rlf.<%=section .. "." .. self.option%>" alt="<%:Replace entry%>" title="<%:Replace entry%>" src="<%=resource%>/cbi/reload.gif" /> - <% else %> + <% if self.unsafeupload then %> + <input type="hidden"<%= attr("value", v) .. attr("name", cbid) .. attr("id", cbid) %> /> + <input class="cbi-button cbi-input-image" type="image" value="<%:Replace entry%>" name="cbi.rlf.<%=section .. "." .. self.option%>" alt="<%:Replace entry%>" title="<%:Replace entry%>" src="<%=resource%>/cbi/reload.gif" /> + <% end %> + <% end %> + + <% if not self.unsafeupload then %> + <input type="hidden"<%= attr("value", v) .. attr("name", "cbi.rlf." .. section .. "." .. self.option) .. attr("id", "cbi.rlf." .. section .. "." .. self.option) %> /> + <% end %> + + <% if (not s) or (s and not self.unsafeupload) then %> <input class="cbi-input-file" type="file"<%= attr("name", cbid) .. attr("id", cbid) %> /> <% end %> + <input type="text" class="cbi-input-text" onchange="cbi_d_update(this.id)"<%= + attr("name", cbid .. ".textbox") .. attr("id", cbid .. ".textbox") .. attr("value", luci.cbi.AbstractValue.cfgvalue(self, section) or self.default) .. ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder") .. ifattr(self.readonly, "readonly") .. ifattr(self.maxlength, "maxlength") %> /> <%+cbi/valuefooter%> diff --git a/modules/luci-base/luasrc/view/cbi/value.htm b/modules/luci-base/luasrc/view/cbi/value.htm index d1a7bea5c..c43dab5f4 100644 --- a/modules/luci-base/luasrc/view/cbi/value.htm +++ b/modules/luci-base/luasrc/view/cbi/value.htm @@ -1,7 +1,8 @@ <%+cbi/valueheader%> <input type="<%=self.password and 'password" class="cbi-input-password' or 'text" class="cbi-input-text' %>" onchange="cbi_d_update(this.id)"<%= attr("name", cbid) .. attr("id", cbid) .. attr("value", self:cfgvalue(section) or self.default) .. - ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder") + ifattr(self.size, "size") .. ifattr(self.placeholder, "placeholder") .. + ifattr(self.readonly, "readonly") .. ifattr(self.maxlength, "maxlength") %> /> <% 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.keylist > 0 or self.datatype then -%> @@ -28,7 +29,7 @@ <%- end -%>'); <%- end %> <% if self.datatype then -%> - cbi_validate_field('<%=cbid%>', <%=tostring((self.optional or self.rmempty) == true)%>, '<%=self.datatype:gsub("'", "\\'")%>'); + cbi_validate_field('<%=cbid%>', <%=tostring((self.optional or self.rmempty) == true)%>, '<%=self.datatype:gsub("\\", "\\\\"):gsub("'", "\\'")%>'); <%- end %> //]]></script> <% end -%> diff --git a/modules/luci-base/luasrc/view/csrftoken.htm b/modules/luci-base/luasrc/view/csrftoken.htm new file mode 100644 index 000000000..57ac03f3b --- /dev/null +++ b/modules/luci-base/luasrc/view/csrftoken.htm @@ -0,0 +1,24 @@ +<%# + Copyright 2015 Jo-Philipp Wich <jow@openwrt.org> + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +<h2 name="content"><%:Form token mismatch%></h2> +<br /> + +<p class="alert-message"><%:The submitted security token is invalid or already expired!%></p> + +<p><%: + In order to prevent unauthorized access to the system, your request has + been blocked. Click "Continue »" below to return to the previous page. +%></p> + +<hr /> + +<p class="right"> + <strong><a href="#" onclick="window.history.back();">Continue »</a></strong> +</p> + +<%+footer%> diff --git a/modules/luci-base/luasrc/view/error404.htm b/modules/luci-base/luasrc/view/error404.htm index c2be29ed5..bc7422683 100644 --- a/modules/luci-base/luasrc/view/error404.htm +++ b/modules/luci-base/luasrc/view/error404.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content">404 <%:Not Found%></a></h2> +<h2 name="content">404 <%:Not Found%></h2> <p><%:Sorry, the object you requested was not found.%></p> <tt><%:Unable to dispatch%>: <%=luci.http.request.env.PATH_INFO%></tt> <%+footer%> diff --git a/modules/luci-base/luasrc/view/error500.htm b/modules/luci-base/luasrc/view/error500.htm index 8fb18ed07..34a52cda8 100644 --- a/modules/luci-base/luasrc/view/error500.htm +++ b/modules/luci-base/luasrc/view/error500.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content">500 <%:Internal Server Error%></a></h2> +<h2 name="content">500 <%:Internal Server Error%></h2> <p><%:Sorry, the server encountered an unexpected error.%></p> <pre class="error500"><%=message%></pre> <%+footer%> diff --git a/modules/luci-base/luasrc/view/sysauth.htm b/modules/luci-base/luasrc/view/sysauth.htm index 7f0f0a622..e20750491 100644 --- a/modules/luci-base/luasrc/view/sysauth.htm +++ b/modules/luci-base/luasrc/view/sysauth.htm @@ -8,7 +8,7 @@ <form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Authorization Required%></a></h2> + <h2 name="content"><%:Authorization Required%></h2> <div class="cbi-map-descr"> <%:Please enter your username and password.%> <%- if fuser then %> diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po index 2252e7c95..c77bf5fd0 100644 --- a/modules/luci-base/po/ca/base.po +++ b/modules/luci-base/po/ca/base.po @@ -46,6 +46,9 @@ msgstr "Càrrega d'1 minut:" msgid "15 Minute Load:" msgstr "Càrrega de 15 minuts:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Càrrega de 5 minuts:" @@ -207,6 +210,9 @@ msgstr "Afegeix una interfície nova..." msgid "Additional Hosts files" msgstr "Fitxers de Hosts addicionals" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adreça" @@ -269,6 +275,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -325,6 +337,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponible" @@ -334,6 +361,9 @@ msgstr "Paquets disponibles" msgid "Average:" msgstr "Mitjana:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +440,11 @@ msgstr "Controlador sense fil Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "En memòria intermèdia" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botons" @@ -446,6 +481,9 @@ msgstr "Canal" msgid "Check" msgstr "Comprovació" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Suma de verificació" @@ -563,6 +601,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -638,9 +684,6 @@ msgstr "" msgid "Delete" msgstr "Suprimeix" -msgid "Delete this interface" -msgstr "Suprimeix aquesta interfície" - msgid "Delete this network" msgstr "Suprimeix aquesta xarxa" @@ -659,6 +702,12 @@ msgstr "Dispositiu" msgid "Device Configuration" msgstr "Configuració de dispositiu" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnòstics" @@ -699,6 +748,9 @@ msgstr "Optimització de distància" msgid "Distance to farthest network member in meters." msgstr "Distància al membre de la xarxa més allunyat en metres." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversitat" @@ -769,6 +821,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Mètode EAP" @@ -877,6 +932,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Fast Frames" @@ -898,6 +956,11 @@ msgstr "Filtra privat" msgid "Filter useless" msgstr "Filtra els no útils" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Troba i uneix-te a la xarxa" @@ -922,9 +985,6 @@ msgstr "Versió de microprogramari" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "Flags" - msgid "Flash Firmware" msgstr "Reescriu el microprogramari" @@ -955,6 +1015,9 @@ msgstr "Força el TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Força el TKIP i el CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Reenvia el tràfic DHCP" @@ -994,6 +1057,12 @@ msgstr "Ajusts generals" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1005,6 +1074,9 @@ msgstr "" "La contrasenya i la confirmació de contrasenya no es coincideixen. La " "contrasenya no s'ha canviat!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1105,6 +1177,9 @@ msgstr "Màscara de xarxa IPv4" msgid "IPv4 only" msgstr "Només IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Longitud de prefix IPv4" @@ -1200,8 +1275,8 @@ msgstr "" "es pot accedir al dispositiu d'intercanvi amb unes taxes tan altes com les " "de la <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignora <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignora la interfície" @@ -1215,6 +1290,11 @@ msgstr "Imatge" msgid "In" msgstr "En" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Temps d'espera d'inactivitat" @@ -1396,6 +1476,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1417,6 +1500,9 @@ msgstr "Carrega mitjana" msgid "Loading" msgstr "Carregant" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Adreça IPv4 local" @@ -1484,6 +1570,9 @@ msgstr "Filtre MAC" msgid "MAC-List" msgstr "Llista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1498,6 +1587,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Velocitat màxima" @@ -1516,6 +1608,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1583,12 +1680,18 @@ msgstr "" "Els punts de muntatge defineixen en quin punt un dispositiu de memòria " "s'adjuntarà amb el sistema de fitxers" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Opcions de muntatge" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Sistemes de fitxers muntats" @@ -1607,6 +1710,9 @@ msgstr "Adreça de difusió selectiva" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1706,6 +1812,9 @@ msgstr "No connectat" msgid "Note: Configuration files will be erased." msgstr "Nota: Els fitxers de configuració s'esborraran." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Avís" @@ -1834,9 +1943,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Es requereix el paquet libiwinfo!" @@ -1864,9 +1982,6 @@ msgstr "Contrasenya de la clau privada" msgid "Password successfully changed!" msgstr "La contrasenya s'ha canviat amb èxit!" -msgid "Path" -msgstr "Ruta" - msgid "Path to CA-Certificate" msgstr "Ruta als Certificats CA" @@ -1882,6 +1997,9 @@ msgstr "" msgid "Peak:" msgstr "Màxim:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Executa un reinici" @@ -1903,9 +2021,6 @@ msgstr "Paquets" msgid "Please enter your username and password." msgstr "Si us plau entra el teu nom d'usuari i contrasenya." -msgid "Please wait: Device rebooting..." -msgstr "Si us plau espera: Dispositiu arrancant-se de nou" - msgid "Policy" msgstr "Política" @@ -2173,9 +2288,6 @@ msgstr "" "Les rutes especifiquen per quina interfície i passarel·la es pot arribar a " "un cert ordinador o xarxa." -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2193,6 +2305,15 @@ msgstr "" msgid "SSH Access" msgstr "Accés SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Claus SSH" @@ -2282,6 +2403,9 @@ msgstr "Senyal:" msgid "Size" msgstr "Mida" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Salta" @@ -2545,6 +2669,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "El protocol seleccionat necessita un dispositiu assignat" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2602,6 +2729,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2761,6 +2894,9 @@ msgstr "La contrasenya no s'ha canviat a causa d'un error desconegut!" msgid "Unmanaged" msgstr "Sense gestionar" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Canvis sense desar" @@ -2920,13 +3056,14 @@ msgstr "Esperant que s'apliquin els canvis..." msgid "Waiting for command to complete..." msgstr "Esperant que s'acabi l'ordre..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Advertència" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Advertència: Hi ha canvis que no s'han desat i que es perdran mentre " -"s'arranca de nou!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3159,6 +3296,24 @@ msgstr "sí" msgid "« Back" msgstr "« Enrere" +#~ msgid "Delete this interface" +#~ msgstr "Suprimeix aquesta interfície" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Path" +#~ msgstr "Ruta" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Si us plau espera: Dispositiu arrancant-se de nou" + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advertència: Hi ha canvis que no s'han desat i que es perdran mentre " +#~ "s'arranca de nou!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3804,9 +3959,6 @@ msgstr "« Enrere" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ací pots configurar els dispositius sense fils instal·lats." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignora <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independent (Ad-Hoc)" diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po index 373602070..985672091 100644 --- a/modules/luci-base/po/cs/base.po +++ b/modules/luci-base/po/cs/base.po @@ -44,6 +44,9 @@ msgstr "Zatížení za 1 minutu:" msgid "15 Minute Load:" msgstr "Zatížení za 15 minut:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Zatížení za 5 minut:" @@ -207,6 +210,9 @@ msgstr "Přidat rozhraní..." msgid "Additional Hosts files" msgstr "Dodatečné Hosts soubory" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -269,6 +275,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Anténa 1" @@ -325,6 +337,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Dostupné" @@ -334,6 +361,9 @@ msgstr "Dostupné balíčky" msgid "Average:" msgstr "Průměr:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -409,6 +439,11 @@ msgstr "Broadcom modul BCM%04x 802.11 bezdrátový ovladač" msgid "Buffered" msgstr "Bufferováno" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Tlačítka" @@ -445,6 +480,9 @@ msgstr "Kanál" msgid "Check" msgstr "Kontrola" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Kontrolní součet" @@ -567,6 +605,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -644,9 +690,6 @@ msgstr "" msgid "Delete" msgstr "Odstranit" -msgid "Delete this interface" -msgstr "Odstranit toto rozhraní" - msgid "Delete this network" msgstr "Odstranit tuto síť" @@ -665,6 +708,12 @@ msgstr "Zařízení" msgid "Device Configuration" msgstr "Nastavení zařízení" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostika" @@ -705,6 +754,9 @@ msgstr "Optimalizace na vzdálenost" msgid "Distance to farthest network member in meters." msgstr "Vzdálenost nejodlehlejšího člena sítě v metrech." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diverzita" @@ -779,6 +831,9 @@ msgstr "" "Pro klienty alokovat DHCP adresy dynamicky. Pokud je volba zakázána, budou " "obsloužení pouze klienti se statickými výpůjčkami." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metoda EAP" @@ -889,6 +944,9 @@ msgstr "Externí protokolovací server" msgid "External system log server port" msgstr "Port externího protokolovacího serveru" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Rychlé rámce" @@ -910,6 +968,11 @@ msgstr "Filtrovat soukromé" msgid "Filter useless" msgstr "Filtrovat nepotřebné" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Vyhledat a připojit síť" @@ -934,9 +997,6 @@ msgstr "Verze firmwaru" msgid "Fixed source port for outbound DNS queries" msgstr "Pevný zdrojový port pro odchozí DNS dotazy" -msgid "Flags" -msgstr "Příznaky" - msgid "Flash Firmware" msgstr "Nahrát firmware" @@ -967,6 +1027,9 @@ msgstr "Vynutit TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Vynutit TKIP a CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Přeposílat DHCP provoz" @@ -1006,6 +1069,12 @@ msgstr "Obecná nastavení" msgid "General Setup" msgstr "Obecné nastavení" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Vytvorǐt archív" @@ -1015,6 +1084,9 @@ msgstr "Generic 802.11%s Wireless Controller" msgid "Given password confirmation did not match, password not changed!" msgstr "Heslo nezměněno z důvodu nesouhlasu nového hesla a ověření hesla!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1116,6 +1188,9 @@ msgstr "IPv4 maska sítě" msgid "IPv4 only" msgstr "Pouze IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Délka IPv4 prefixu" @@ -1211,8 +1286,8 @@ msgstr "" "přístup na odkládací zařízení je řádově pomalejší, než přístup do paměti " "<abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignorovat soubory Hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "Ignorovat rozhraní" @@ -1226,6 +1301,11 @@ msgstr "Obraz" msgid "In" msgstr "Dovnitř" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Časový limit nečinnosti" @@ -1411,6 +1491,9 @@ msgstr "" "Seznam <abbr title=\"Domain Name System\">DNS</abbr> serverů, na které " "přeposílat požadavky" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Seznam domén, pro které povolit odpovědi podle RFC1918" @@ -1433,6 +1516,9 @@ msgstr "Zátěž průměrná" msgid "Loading" msgstr "Načítání" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Místní IPv4 adresa" @@ -1506,6 +1592,9 @@ msgstr "Filtr MAC" msgid "MAC-List" msgstr "Seznam Mac" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1520,6 +1609,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Nejvyšší míra" @@ -1538,6 +1630,11 @@ msgstr "Nejvyšší počet sekund čekání, než bude modem připraven" msgid "Maximum hold time" msgstr "Maximální doba držení" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Maximální počet zapůjčených adres." @@ -1605,12 +1702,18 @@ msgstr "" "Přípojný bod určuje místo v souborovém systému, na kterém bude připojeno " "paměťové zařízení" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Volby připojení" msgid "Mount point" msgstr "Přípojný bod" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Připojené souborové systémy" @@ -1629,6 +1732,9 @@ msgstr "Adresa vícesměrového vysílání" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1728,6 +1834,9 @@ msgstr "Nepřipojeno" msgid "Note: Configuration files will be erased." msgstr "Pozn: Konfigurační soubory budou vymazány." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Oznámení" @@ -1857,9 +1966,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Vyžadován balíček libiwinfo!" @@ -1887,9 +2005,6 @@ msgstr "Heslo privátního klíče" msgid "Password successfully changed!" msgstr "Heslo bylo úspěšně změněno!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Cesta k certifikátu CA" @@ -1905,6 +2020,9 @@ msgstr "Cesta ke spustitelnému souboru, který obsluhuje událost tlačítka" msgid "Peak:" msgstr "Špička:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Provést restart" @@ -1926,9 +2044,6 @@ msgstr "Paketů" msgid "Please enter your username and password." msgstr "Prosím vložte vaše uživatelské jméno a heslo." -msgid "Please wait: Device rebooting..." -msgstr "Prosím počkejte: Provádím reboot..." - msgid "Policy" msgstr "Politika" @@ -2211,9 +2326,6 @@ msgid "" msgstr "" "Trasy určují, přes jaké rozhraní a bránu může být konkrétního hosta dosaženo." -msgid "Rule #" -msgstr "Pravidlo #" - msgid "Run a filesystem check before mounting the device" msgstr "Spustit kontrolu souborového systému před připojením zařízení" @@ -2231,6 +2343,15 @@ msgstr "" msgid "SSH Access" msgstr "Přístup přes SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH klíče" @@ -2322,6 +2443,9 @@ msgstr "Signál:" msgid "Size" msgstr "Velikost" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Přeskočit" @@ -2608,6 +2732,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Vybraný protokol potřebuje mít přiřazeno zařízení" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2667,6 +2794,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2828,6 +2961,9 @@ msgstr "Neznámá chyba, heslo nebylo změněno!" msgid "Unmanaged" msgstr "Nespravovaný" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Neuložené změny" @@ -2993,11 +3129,14 @@ msgstr "Čekání na realizaci změn..." msgid "Waiting for command to complete..." msgstr "Čekání na dokončení příkazu..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Varování" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Varování: Existují neuložené změny, které budou rebootem ztraceny!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3227,6 +3366,25 @@ msgstr "ano" msgid "« Back" msgstr "« Zpět" +#~ msgid "Delete this interface" +#~ msgstr "Odstranit toto rozhraní" + +#~ msgid "Flags" +#~ msgstr "Příznaky" + +#~ msgid "Rule #" +#~ msgstr "Pravidlo #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorovat soubory Hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Prosím počkejte: Provádím reboot..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Varování: Existují neuložené změny, které budou rebootem ztraceny!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po index 361abdead..14cf49786 100644 --- a/modules/luci-base/po/de/base.po +++ b/modules/luci-base/po/de/base.po @@ -46,6 +46,9 @@ msgstr "Systemlast (1 Minute):" msgid "15 Minute Load:" msgstr "Systemlast (15 Minuten):" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Systemlast (5 Minuten):" @@ -204,6 +207,9 @@ msgstr "Neue Schnittstelle hinzufügen..." msgid "Additional Hosts files" msgstr "Zusätzliche Hosts-Dateien" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -269,6 +275,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antenne 1" @@ -325,6 +337,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Verfügbar" @@ -334,6 +361,9 @@ msgstr "Verfügbare Pakete" msgid "Average:" msgstr "Durchschnitt:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +440,11 @@ msgstr "Broadcom BCM%04x 802.11 W-LAN Adapter" msgid "Buffered" msgstr "Gepuffert" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Knöpfe" @@ -446,6 +481,9 @@ msgstr "Kanal" msgid "Check" msgstr "Prüfen" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Prüfsumme" @@ -565,6 +603,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "Passt das Verhalten der Geräte-LEDs an - wenn dies möglich ist." @@ -640,9 +686,6 @@ msgstr "" msgid "Delete" msgstr "Löschen" -msgid "Delete this interface" -msgstr "Diese Schnittstelle löschen" - msgid "Delete this network" msgstr "Dieses Netzwerk löschen" @@ -661,6 +704,12 @@ msgstr "Gerät" msgid "Device Configuration" msgstr "Gerätekonfiguration" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosen" @@ -701,6 +750,9 @@ msgstr "Distanzoptimierung" msgid "Distance to farthest network member in meters." msgstr "Distanz zum am weitesten entfernten Funkpartner in Metern." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversität" @@ -775,6 +827,9 @@ msgstr "" "DHCP Adressen dynamisch erzeugen. Wenn dies deaktiviert ist, werden nur " "Clients mit konfigurierten statischen Leases bedient" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Methode" @@ -886,6 +941,9 @@ msgstr "Externer Protokollserver IP" msgid "External system log server port" msgstr "Externer Protokollserver Port" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Schnelle Frames" @@ -907,6 +965,11 @@ msgstr "Private Anfragen filtern" msgid "Filter useless" msgstr "Windowsanfragen filtern" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Suchen und Verbinden von Netzwerken" @@ -931,9 +994,6 @@ msgstr "Firmware Version" msgid "Fixed source port for outbound DNS queries" msgstr "Fester Port für ausgehende DNS-Anfragen" -msgid "Flags" -msgstr "Parameter" - msgid "Flash Firmware" msgstr "Firmware aktualisieren" @@ -966,6 +1026,9 @@ msgstr "Erzwinge TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Erzwinge TKIP und CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCP Traffic weiterleiten" @@ -1005,6 +1068,12 @@ msgstr "Allgemeine Einstellungen" msgid "General Setup" msgstr "Allgemeine Einstellungen" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Sicherung erstellen" @@ -1016,6 +1085,9 @@ msgstr "" "Die angegebenen Passwörter stimmen nicht überein, das Systempasswort wurde " "nicht geändert!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1116,6 +1188,9 @@ msgstr "IPv4 Netzmaske" msgid "IPv4 only" msgstr "nur IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Länge des IPv4 Präfix" @@ -1213,8 +1288,8 @@ msgstr "" "effektive Größe des Arbeitsspeichers zu erhöhen. Die Auslagerung der Daten " "ist natürlich bedeutend langsamer als direkte Arbeitsspeicherzugriffe." -msgid "Ignore Hosts files" -msgstr "Hosts-Dateien ignorieren" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignoriere /etc/hosts" msgid "Ignore interface" msgstr "Schnittstelle ignorieren" @@ -1228,6 +1303,11 @@ msgstr "Image" msgid "In" msgstr "Ein" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Timeout bei Inaktivität" @@ -1412,6 +1492,9 @@ msgstr "" "Liste von <abbr title=\"Domain Name System\">DNS</abbr>-Servern an welche " "Requests weitergeleitet werden" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Liste von Domains für welche RFC1918-Antworten erlaubt sind" @@ -1435,6 +1518,9 @@ msgstr "Durchschnittslast" msgid "Loading" msgstr "Lade" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Lokale IPv4 Adresse" @@ -1510,6 +1596,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-Adressliste" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1524,6 +1613,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Höchstübertragungsrate" @@ -1542,6 +1634,11 @@ msgstr "Maximale Zeit die gewartet wird bis das Modem bereit ist (in Sekunden)" msgid "Maximum hold time" msgstr "Maximalzeit zum Halten der Verbindung" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Maximal zulässige Anzahl von vergeben DHCP-Adressen" @@ -1609,12 +1706,18 @@ msgstr "" "Einhängepunkte bestimmen, an welcher Stelle des Dateisystems bestimmte " "Laufwerke und Speicher zur Verwendung eingebunden werden." +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Mount-Optionen" msgid "Mount point" msgstr "Mountpunkt" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Eingehängte Dateisysteme" @@ -1633,6 +1736,9 @@ msgstr "Multicast-Adresse" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1733,6 +1839,9 @@ msgstr "Nicht verbunden" msgid "Note: Configuration files will be erased." msgstr "Warnung: Konfigurationsdateien werden gelöscht." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Notiz" @@ -1863,9 +1972,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Benötige das libiwinfo Paket!" @@ -1893,9 +2011,6 @@ msgstr "Passwort des Privaten Schlüssels" msgid "Password successfully changed!" msgstr "Passwort erfolgreich geändert!" -msgid "Path" -msgstr "Pfad" - msgid "Path to CA-Certificate" msgstr "Pfad zum CA-Zertifikat" @@ -1911,6 +2026,9 @@ msgstr "Ausführbare Datei welche das Schalter-Ereignis verarbeitet" msgid "Peak:" msgstr "Spitze:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Neustart durchführen" @@ -1932,9 +2050,6 @@ msgstr "Pkte." msgid "Please enter your username and password." msgstr "Bitte Benutzernamen und Passwort eingeben." -msgid "Please wait: Device rebooting..." -msgstr "Bitte warten: Neustart wird durchgeführt..." - msgid "Policy" msgstr "Standardregel" @@ -2219,9 +2334,6 @@ msgstr "" "Netzwerkrouten geben an, über welche Schnittstellen bestimmte Rechner oder " "Netzwerke erreicht werden können" -msgid "Rule #" -msgstr "Regel #" - msgid "Run a filesystem check before mounting the device" msgstr "Vor dem Einhängen Dateisystemprüfung starten " @@ -2239,6 +2351,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH-Zugriff" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-Schlüssel" @@ -2330,6 +2451,9 @@ msgstr "Signal:" msgid "Size" msgstr "Größe" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Überspringen" @@ -2623,6 +2747,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Dem ausgewähltem Protokoll muss ein Gerät zugeordnet werden" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2684,6 +2811,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4-Adresse des Relais" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2852,6 +2985,9 @@ msgstr "Unbekannter Fehler, Passwort nicht geändert!" msgid "Unmanaged" msgstr "Ignoriert" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Ungespeicherte Änderungen" @@ -3018,13 +3154,14 @@ msgstr "Änderungen werden angewandt..." msgid "Waiting for command to complete..." msgstr "Der Befehl wird ausgeführt..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Warnung" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Warnung: Es gibt ungespeicherte Änderungen, die bei einem Neustart verloren " -"gehen!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3254,6 +3391,30 @@ msgstr "ja" msgid "« Back" msgstr "« Zurück" +#~ msgid "Delete this interface" +#~ msgstr "Diese Schnittstelle löschen" + +#~ msgid "Flags" +#~ msgstr "Parameter" + +#~ msgid "Rule #" +#~ msgstr "Regel #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Hosts-Dateien ignorieren" + +#~ msgid "Path" +#~ msgstr "Pfad" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Bitte warten: Neustart wird durchgeführt..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Warnung: Es gibt ungespeicherte Änderungen, die bei einem Neustart " +#~ "verloren gehen!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4143,9 +4304,6 @@ msgstr "« Zurück" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "An dieser Stelle können eingebaute WLAN-Geräte konfiguriert werden." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignoriere /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Unabhängig (Ad-Hoc)" diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po index ed3a20737..685cbe6c9 100644 --- a/modules/luci-base/po/el/base.po +++ b/modules/luci-base/po/el/base.po @@ -46,6 +46,9 @@ msgstr "Φορτίο 1 λεπτού:" msgid "15 Minute Load:" msgstr "Φορτίο 15 λεπτών:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Φορτίο 5 λεπτών:" @@ -209,6 +212,9 @@ msgstr "Προσθήκη νέας διεπαφής..." msgid "Additional Hosts files" msgstr "Επιπλέον αρχεία Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Διεύθυνση" @@ -276,6 +282,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Κεραία 1" @@ -332,6 +344,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Διαθέσιμο" @@ -341,6 +368,9 @@ msgstr "Διαθέσιμα πακέτα" msgid "Average:" msgstr "Μέσος Όρος:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +448,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Κουμπιά" @@ -454,6 +489,9 @@ msgstr "Κανάλι" msgid "Check" msgstr "Έλεγχος" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Άθροισμα Ελέγχου" @@ -576,6 +614,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -653,9 +699,6 @@ msgstr "" msgid "Delete" msgstr "Διαγραφή" -msgid "Delete this interface" -msgstr "Διαγραφή αυτής της διεπαφής" - msgid "Delete this network" msgstr "Διαγραφή αυτού του δικτύου" @@ -674,6 +717,12 @@ msgstr "Συσκευή" msgid "Device Configuration" msgstr "Παραμετροποίηση Συσκευής" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Διαγνωστικά" @@ -714,6 +763,9 @@ msgstr "Βελτιστοποίηση Απόστασης" msgid "Distance to farthest network member in meters." msgstr "Απόσταση σε μέτρα από το πιο απομακρυσμένο μέλος του δικτύου." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Διαφορική Λήψη" @@ -791,6 +843,9 @@ msgstr "" "Δυναμική απόδοση DHCP διευθύνσεων στους πελάτες. Σε περίπτωση " "απενεργοποίησης, μόνο πελάτες με στατικα leases θα εξυπηρετούνται." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Μέθοδος EAP" @@ -902,6 +957,9 @@ msgstr "Εξωτερικός εξυπηρετητής καταγραφής συ msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Γρήγορα Πλαίσια" @@ -923,6 +981,11 @@ msgstr "Φιλτράρισμα ιδιωτικών" msgid "Filter useless" msgstr "Φιλτράρισμα άχρηστων" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Εύρεση και σύνδεση σε δίκτυο" @@ -947,9 +1010,6 @@ msgstr "Έκδοση Υλικολογισμικού" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "Σημαίες" - msgid "Flash Firmware" msgstr "Φλασάρισμα Firmware" @@ -981,6 +1041,9 @@ msgstr "Επιβολή TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Επιβολή TKIP και CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Προώθηση κίνησης DHCP" @@ -1020,6 +1083,12 @@ msgstr "Γενικές Ρυθμίσεις" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1029,6 +1098,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1129,6 +1201,9 @@ msgstr "Μάσκα IPv4" msgid "IPv4 only" msgstr "Μόνο IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1228,8 +1303,8 @@ msgstr "" "προσπελαστεί με τους υψηλούς ρυθμούς μεταφοράς δεδομένων που διαθέτει η " "<abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Αγνόησε <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Αγνόησε διεπαφή" @@ -1243,6 +1318,11 @@ msgstr "" msgid "In" msgstr "Είσοδος" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1424,6 +1504,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1445,6 +1528,9 @@ msgstr "Μέσος όρος φόρτου" msgid "Loading" msgstr "Φόρτωση" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Τοπική διεύθυνση IPv4" @@ -1512,6 +1598,9 @@ msgstr "MAC-Φίλτρο" msgid "MAC-List" msgstr "Λίστα MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1526,6 +1615,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Μέγιστος Ρυθμός" @@ -1545,6 +1637,11 @@ msgstr "" msgid "Maximum hold time" msgstr "Μέγιστος χρόνος κράτησης" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Μέγιστος αριθμός διευθύνσεων lease" @@ -1613,12 +1710,18 @@ msgstr "" "Τα σημεία προσάρτησης ορίζουν σε ποιο σημείο στο σύστημα αρχείων θα " "προσαρτηθεί μία συσκευή μνήμης" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Επιλογές προσάρτησης" msgid "Mount point" msgstr "Σημείο προσάρτησης" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Προσαρτημένα συστήματα αρχείων" @@ -1637,6 +1740,9 @@ msgstr "Διεύθυνση Multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1736,6 +1842,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "Σημείωση: Τα αρχεία παραμετροποίησης θα διαγραφούν." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Επισήμανση" @@ -1864,9 +1973,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Απαιτείται το πακέτο libiwinfo!" @@ -1894,9 +2012,6 @@ msgstr "Κωδικός Πρόσβασης του Ιδιωτικού Κλειδι msgid "Password successfully changed!" msgstr "Ο κωδικός πρόσβασης άλλαξε επιτυχώς!" -msgid "Path" -msgstr "Διαδρομή" - msgid "Path to CA-Certificate" msgstr "Διαδρομή για Πιστοποιητικό CA" @@ -1912,6 +2027,9 @@ msgstr "Διαδρομή για το εκτελέσιμο που χειρίζε msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Εκτέλεση επανεκκίνησης" @@ -1933,9 +2051,6 @@ msgstr "Πκτ." msgid "Please enter your username and password." msgstr "Παρακαλώ εισάγετε όνομα χρήστη και κωδικό πρόσβασης." -msgid "Please wait: Device rebooting..." -msgstr "Παρακαλώ περιμένετε: Η συσκευή επανεκκινεί..." - msgid "Policy" msgstr "Πολιτική" @@ -2205,9 +2320,6 @@ msgstr "" "Οι διαδρομές ορίζουν τη διεπαφή και πύλη από την οποία κάποιος υπολογιστής ή " "δίκτυο μπορεί να είναι προσβάσιμο/ς." -msgid "Rule #" -msgstr "Κανόνας #" - msgid "Run a filesystem check before mounting the device" msgstr "Εκτέλεση ελέγχου του συστήματος αρχείων πριν προσαρτηθεί η συσκευή" @@ -2225,6 +2337,15 @@ msgstr "" msgid "SSH Access" msgstr "Πρόσβαση SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Κλειδιά SSH" @@ -2314,6 +2435,9 @@ msgstr "Σήμα:" msgid "Size" msgstr "Μέγεθος" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Παράκαμψη" @@ -2573,6 +2697,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2628,6 +2755,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2786,6 +2919,9 @@ msgstr "Άγνωστο Λάθος. ο κωδικός πρόσβασης δεν msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Μη-αποθηκευμένες Αλλαγές" @@ -2943,13 +3079,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Προειδοποίηση" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Προειδοποίηση: Υπάρχουν μη-αποθηκευμένες αλλαγές που θα χαθούν κατά την " -"επανεκκίνηση!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3181,6 +3318,27 @@ msgstr "ναι" msgid "« Back" msgstr "« Πίσω" +#~ msgid "Delete this interface" +#~ msgstr "Διαγραφή αυτής της διεπαφής" + +#~ msgid "Flags" +#~ msgstr "Σημαίες" + +#~ msgid "Rule #" +#~ msgstr "Κανόνας #" + +#~ msgid "Path" +#~ msgstr "Διαδρομή" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Παρακαλώ περιμένετε: Η συσκευή επανεκκινεί..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Προειδοποίηση: Υπάρχουν μη-αποθηκευμένες αλλαγές που θα χαθούν κατά την " +#~ "επανεκκίνηση!" + #~ msgid "Configures this mount as overlay storage for block-extroot" #~ msgstr "" #~ "Ορίζει το συγκεκριμένο σημείο προσάρτησης ως επικαλύπτον αποθηκευτικό " @@ -3851,9 +4009,6 @@ msgstr "« Πίσω" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Εδώ μπορείτε να ρυθμίσετε τις εγκατεστημένες ασύρματες συσκευές." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Αγνόησε <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Ανεξάρτητο (Ad-Hoc)" diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po index 3ad4b140b..da9d9e29b 100644 --- a/modules/luci-base/po/en/base.po +++ b/modules/luci-base/po/en/base.po @@ -46,6 +46,9 @@ msgstr "1 Minute Load:" msgid "15 Minute Load:" msgstr "15 Minute Load:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 Minute Load:" @@ -206,6 +209,9 @@ msgstr "Add new interface..." msgid "Additional Hosts files" msgstr "Additional Hosts files" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Address" @@ -267,6 +273,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antenna 1" @@ -323,6 +335,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Available" @@ -332,6 +359,9 @@ msgstr "Available packages" msgid "Average:" msgstr "Average:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -407,6 +437,11 @@ msgstr "" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Buttons" @@ -443,6 +478,9 @@ msgstr "Channel" msgid "Check" msgstr "Check" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Checksum" @@ -563,6 +601,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -641,9 +687,6 @@ msgstr "" msgid "Delete" msgstr "Delete" -msgid "Delete this interface" -msgstr "Delete this interface" - msgid "Delete this network" msgstr "Delete this network" @@ -662,6 +705,12 @@ msgstr "Device" msgid "Device Configuration" msgstr "Device Configuration" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostics" @@ -700,6 +749,9 @@ msgstr "Distance Optimization" msgid "Distance to farthest network member in meters." msgstr "Distance to farthest network member in meters." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversity" @@ -770,6 +822,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -878,6 +933,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Fast Frames" @@ -899,6 +957,11 @@ msgstr "Filter private" msgid "Filter useless" msgstr "Filter useless" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -923,9 +986,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "Flags" - msgid "Flash Firmware" msgstr "Flash Firmware" @@ -956,6 +1016,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -995,6 +1058,12 @@ msgstr "" msgid "General Setup" msgstr "General Setup" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1004,6 +1073,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1103,6 +1175,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1197,8 +1272,8 @@ msgstr "" "slow process as the swap-device cannot be accessed with the high datarates " "of the <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignore <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignore interface" @@ -1212,6 +1287,11 @@ msgstr "" msgid "In" msgstr "In" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1393,6 +1473,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1414,6 +1497,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1481,6 +1567,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-List" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1495,6 +1584,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maximum Rate" @@ -1513,6 +1605,11 @@ msgstr "" msgid "Maximum hold time" msgstr "Maximum hold time" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1580,12 +1677,18 @@ msgstr "" "Mount Points define at which point a memory device will be attached to the " "filesystem" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Mounted file systems" @@ -1604,6 +1707,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1703,6 +1809,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1831,9 +1940,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1861,9 +1979,6 @@ msgstr "Password of Private Key" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Path" - msgid "Path to CA-Certificate" msgstr "Path to CA-Certificate" @@ -1879,6 +1994,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Perform reboot" @@ -1900,9 +2018,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Please enter your username and password." -msgid "Please wait: Device rebooting..." -msgstr "Please wait: Device rebooting..." - msgid "Policy" msgstr "Policy" @@ -2170,9 +2285,6 @@ msgstr "" "Routes specify over which interface and gateway a certain host or network " "can be reached." -msgid "Rule #" -msgstr "Rule #" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2190,6 +2302,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2278,6 +2399,9 @@ msgstr "" msgid "Size" msgstr "Size" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Skip" @@ -2533,6 +2657,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2588,6 +2715,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2743,6 +2876,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Unsaved Changes" @@ -2902,11 +3038,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3135,6 +3274,26 @@ msgstr "" msgid "« Back" msgstr "« Back" +#~ msgid "Delete this interface" +#~ msgstr "Delete this interface" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Rule #" +#~ msgstr "Rule #" + +#~ msgid "Path" +#~ msgstr "Path" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Please wait: Device rebooting..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" + #~ msgid "Cached" #~ msgstr "Cached" @@ -3796,9 +3955,6 @@ msgstr "« Back" #~ "firewall zone of the choosen network.<br />Uncheck the attach option to " #~ "define a new standalone network for this interface." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignore <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independent (Ad-Hoc)" diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po index 2c3ce94ad..ebf1e5f4e 100644 --- a/modules/luci-base/po/es/base.po +++ b/modules/luci-base/po/es/base.po @@ -46,6 +46,9 @@ msgstr "Carga a 1 minuto:" msgid "15 Minute Load:" msgstr "Carga a 15 minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga a 5 minutos:" @@ -210,6 +213,9 @@ msgstr "Añadir nueva interfaz..." msgid "Additional Hosts files" msgstr "Ficheros de máquinas adicionales" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Dirección" @@ -273,6 +279,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -329,6 +341,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponible" @@ -338,6 +365,9 @@ msgstr "Paquetes disponibles" msgid "Average:" msgstr "Media:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -414,6 +444,11 @@ msgstr "Controlador inalámbrico 802.11 BCM%04x" msgid "Buffered" msgstr "En búfer" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botones" @@ -450,6 +485,9 @@ msgstr "Canal" msgid "Check" msgstr "Comprobar" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Comprobación" @@ -572,6 +610,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -650,9 +696,6 @@ msgstr "" msgid "Delete" msgstr "Eliminar" -msgid "Delete this interface" -msgstr "Borrar esta interfaz" - msgid "Delete this network" msgstr "Borrar esta red" @@ -671,6 +714,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuración del dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnósticos" @@ -711,6 +760,9 @@ msgstr "Optimización de distancia" msgid "Distance to farthest network member in meters." msgstr "Distancia al miembro de la red mas lejana en metros." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidad" @@ -785,6 +837,9 @@ msgstr "" "Reparte direcciones DHCP dinámicamente a los clientes. Si se desactiva sólo " "se servirá a clientes con cesiones estáticas." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Método EAP" @@ -896,6 +951,9 @@ msgstr "Servidor externo de registro del sistema" msgid "External system log server port" msgstr "Puerto del servidor externo de registro del sistema" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Tramas rápidas" @@ -917,6 +975,11 @@ msgstr "Filtro privado" msgid "Filter useless" msgstr "Filtro inútil" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Encontrar y unirse a red" @@ -941,9 +1004,6 @@ msgstr "Versión del firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Puerto origen fijo para peticiones de DNS salientes" -msgid "Flags" -msgstr "Indicadores" - msgid "Flash Firmware" msgstr "Grabar firmware" @@ -974,6 +1034,9 @@ msgstr "Forzar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forzar TKIP y CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Retransmitir tráfico DHCP" @@ -1014,6 +1077,12 @@ msgstr "Configuración general" msgid "General Setup" msgstr "Configuración general" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Generar archivo" @@ -1025,6 +1094,9 @@ msgstr "" "La confirmación y la contraseña no coinciden. ¡No se ha cambiado la " "contraseña!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1125,6 +1197,9 @@ msgstr "Máscara de red IPv4" msgid "IPv4 only" msgstr "Sólo IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Longitud de prefijo IPv4" @@ -1226,8 +1301,8 @@ msgstr "" "alta velocidad tal y como hace la memoria <abbr title=\"Random Access Memory" "\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignorar fichero de máquinas" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignorar <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignorar interfaz" @@ -1241,6 +1316,11 @@ msgstr "Imagen" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Espera de inactividad" @@ -1425,6 +1505,9 @@ msgstr "" "Lista de servidores <abbr title=\"Domain Name System\">DNS</abbr> a los que " "enviar solicitudes" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Lista de dominios a los que se permiten respuestas RFC1918" @@ -1446,6 +1529,9 @@ msgstr "Carga Media" msgid "Loading" msgstr "Cargando" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Dirección local IPv4" @@ -1520,6 +1606,9 @@ msgstr "Filtro por dirección MAC" msgid "MAC-List" msgstr "Lista de direcciones MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1534,6 +1623,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Ratio Máximo" @@ -1552,6 +1644,11 @@ msgstr "Segundos máximos de espera a que el módem esté activo" msgid "Maximum hold time" msgstr "Pausa máxima de transmisión" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Máximas cesiones activas." @@ -1619,12 +1716,18 @@ msgstr "" "Los puntos de montaje definen el directorio en el que un dispositivo de " "memoria se unirá al sistema del archivos" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Opciones de montaje" msgid "Mount point" msgstr "Punto de montaje" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Sistemas de archivo montados" @@ -1643,6 +1746,9 @@ msgstr "Dirección multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1742,6 +1848,9 @@ msgstr "No conectado" msgid "Note: Configuration files will be erased." msgstr "Nota: se borrarán los ficheros de configuración." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Aviso" @@ -1871,9 +1980,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "¡Se necesita el paquete libiwinfo!" @@ -1901,9 +2019,6 @@ msgstr "Contraseña de la Clave Privada" msgid "Password successfully changed!" msgstr "¡Contraseña cambiada!" -msgid "Path" -msgstr "Ruta (path)" - msgid "Path to CA-Certificate" msgstr "Ruta al Certificado CA" @@ -1919,6 +2034,9 @@ msgstr "Ruta al ejecutable que maneja el evento button" msgid "Peak:" msgstr "Pico:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Rearrancar" @@ -1940,9 +2058,6 @@ msgstr "Paq." msgid "Please enter your username and password." msgstr "Por favor, introduzca su nombre de usuario y contraseña." -msgid "Please wait: Device rebooting..." -msgstr "Espere por favor: Rearrancando dispositivo..." - msgid "Policy" msgstr "Política" @@ -2224,9 +2339,6 @@ msgstr "" "Las rutas especifican sobre qué interfaz y pasarela se puede llegar a una " "cierta máquina o red." -msgid "Rule #" -msgstr "Nº de regla" - msgid "Run a filesystem check before mounting the device" msgstr "Comprobar el sistema de ficheros antes de montar el dispositivo" @@ -2244,6 +2356,15 @@ msgstr "" msgid "SSH Access" msgstr "Acceso SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Claves SSH" @@ -2335,6 +2456,9 @@ msgstr "Señal:" msgid "Size" msgstr "Tamaño" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Saltar" @@ -2629,6 +2753,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Este protocolo necesita estar asignado a un dispositivo" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2689,6 +2816,12 @@ msgid "This IPv4 address of the relay" msgstr "Dirección IPv4 del relé" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2853,6 +2986,9 @@ msgstr "Error desconocido, ¡no se ha cambiado la contraseña!" msgid "Unmanaged" msgstr "No gestionado" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Cambios no guardados" @@ -3019,13 +3155,14 @@ msgstr "Esperando a que se realicen los cambios..." msgid "Waiting for command to complete..." msgstr "Esperando a que termine el comando..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Aviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Advertencia: Hay cambios realizados que no han sido guardados, los mismos se " -"perderán mientras se rearranca!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3257,6 +3394,30 @@ msgstr "sí" msgid "« Back" msgstr "« Volver" +#~ msgid "Delete this interface" +#~ msgstr "Borrar esta interfaz" + +#~ msgid "Flags" +#~ msgstr "Indicadores" + +#~ msgid "Rule #" +#~ msgstr "Nº de regla" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar fichero de máquinas" + +#~ msgid "Path" +#~ msgstr "Ruta (path)" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Espere por favor: Rearrancando dispositivo..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advertencia: Hay cambios realizados que no han sido guardados, los mismos " +#~ "se perderán mientras se rearranca!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3956,9 +4117,6 @@ msgstr "« Volver" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aquí puede configurar los dispositivos Wi-Fi instalados." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignorar <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independiente (ad hoc) " diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po index 1d8d22475..878e23da7 100644 --- a/modules/luci-base/po/fr/base.po +++ b/modules/luci-base/po/fr/base.po @@ -46,6 +46,9 @@ msgstr "Charge sur 1 minute :" msgid "15 Minute Load:" msgstr "Charge sur 15 minutes :" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Charge sur 5 minutes :" @@ -212,6 +215,9 @@ msgstr "Ajout d'une nouvelle interface..." msgid "Additional Hosts files" msgstr "Fichiers hosts supplémetaires" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -279,6 +285,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antenne 1" @@ -335,6 +347,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponible" @@ -344,6 +371,9 @@ msgstr "Paquets disponibles" msgid "Average:" msgstr "Moyenne :" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -419,6 +449,11 @@ msgstr "Contrôleur sans fil Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Temporisé" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Boutons" @@ -455,6 +490,9 @@ msgstr "Canal" msgid "Check" msgstr "Vérification" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Somme de contrôle" @@ -579,6 +617,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -657,9 +703,6 @@ msgstr "" msgid "Delete" msgstr "Effacer" -msgid "Delete this interface" -msgstr "Supprimer cette interface" - msgid "Delete this network" msgstr "Supprimer ce réseau" @@ -678,6 +721,12 @@ msgstr "Équipement" msgid "Device Configuration" msgstr "Configuration de l'équipement" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostics" @@ -718,6 +767,9 @@ msgstr "Optimisation de la distance" msgid "Distance to farthest network member in meters." msgstr "Distance au membre du réseau le plus éloigné, en mètres." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversité" @@ -795,6 +847,9 @@ msgstr "" "Alloue dynamiquement des adresses pour les clients du DHCP. Si désactivé, " "seuls les clients ayant des baux statiques seront gérés." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Méthode EAP" @@ -908,6 +963,9 @@ msgstr "Serveur distant de journaux système" msgid "External system log server port" msgstr "Port du serveur distant de journaux système" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Trames rapides" @@ -929,6 +987,11 @@ msgstr "Filtrer les requêtes privées" msgid "Filter useless" msgstr "Filtrer les requêtes inutiles" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Cherche et rejoint un réseau" @@ -953,9 +1016,6 @@ msgstr "Version du micrologiciel" msgid "Fixed source port for outbound DNS queries" msgstr "Port source fixe pour les requêtes DNS sortantes" -msgid "Flags" -msgstr "Options" - msgid "Flash Firmware" msgstr "Mise à jour du micrologiciel" @@ -986,6 +1046,9 @@ msgstr "Forcer TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forcer TKIP et CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Transmettre le trafic DHCP" @@ -1025,6 +1088,12 @@ msgstr "Paramètres généraux" msgid "General Setup" msgstr "Configuration générale" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Construire l'archive" @@ -1036,6 +1105,9 @@ msgstr "" "La confirmation du nouveau mot de passe ne correspond pas, changement " "annulé !" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1137,6 +1209,9 @@ msgstr "Masque-réseau IPv4" msgid "IPv4 only" msgstr "IPv4 seulement" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "longueur du préfixe IPv4" @@ -1234,8 +1309,8 @@ msgstr "" "d'échange, relevant la quantité de RAM disponible. Ce processus est lent car " "la mémoire d'échange ne peut être accédée aux taux de transfert de la RAM." -msgid "Ignore Hosts files" -msgstr "Ignorer le fichiers Hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignorer /etc/hosts" msgid "Ignore interface" msgstr "Ignorer l'interface" @@ -1249,6 +1324,11 @@ msgstr "Image" msgid "In" msgstr "Entrée" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Délai d'inactivité" @@ -1436,6 +1516,9 @@ msgstr "" "Liste des serveurs auquels sont transmis les requêtes <abbr title=\"Domain " "Name System\">DNS</abbr>" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Liste des domaines où sont permises les réponses de type RFC1918" @@ -1458,6 +1541,9 @@ msgstr "Charge moyenne" msgid "Loading" msgstr "Chargement" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Adresse IPv4 locale" @@ -1534,6 +1620,9 @@ msgstr "Filtrage par adresses MAC" msgid "MAC-List" msgstr "Liste des adresses MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1548,6 +1637,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Débit maximum" @@ -1566,6 +1658,11 @@ msgstr "Délai d'attente maximum que le modem soit prêt" msgid "Maximum hold time" msgstr "Temps de maintien maximum" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Nombre maximum d'adresses allouées." @@ -1633,12 +1730,18 @@ msgstr "" "Les points de montage définissent l'attachement d'un périphérique au système " "de fichier" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Options de montage" msgid "Mount point" msgstr "Point de montage" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Systèmes de fichiers montés" @@ -1657,6 +1760,9 @@ msgstr "Adresse multidiffusion" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1756,6 +1862,9 @@ msgstr "Non connecté" msgid "Note: Configuration files will be erased." msgstr "Note : les fichiers de configuration seront effacés." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Note" @@ -1884,9 +1993,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Nécessite le paquet libiwinfo !" @@ -1914,9 +2032,6 @@ msgstr "Mot de passe de la clé privée" msgid "Password successfully changed!" msgstr "Mot de passe changé avec succès !" -msgid "Path" -msgstr "Chemin" - msgid "Path to CA-Certificate" msgstr "Chemin de la CA" @@ -1932,6 +2047,9 @@ msgstr "Chemin du programme exécutable gérant les évènements liés au bouton msgid "Peak:" msgstr "Pic :" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Redémarrer" @@ -1953,9 +2071,6 @@ msgstr "Pqts." msgid "Please enter your username and password." msgstr "Saisissez votre nom d'utilisateur et mot de passe." -msgid "Please wait: Device rebooting..." -msgstr "Patientez s'il vous plaît: équipement en cours de redémarrage..." - msgid "Policy" msgstr "Politique" @@ -2237,9 +2352,6 @@ msgstr "" "Avec les routes statiques vous pouvez spécifier à travers quelle interface " "ou passerelle un réseau peut être contacté." -msgid "Rule #" -msgstr "N° de règle" - msgid "Run a filesystem check before mounting the device" msgstr "" "Faire un vérification du système de fichiers avant de monter le périphérique" @@ -2258,6 +2370,15 @@ msgstr "" msgid "SSH Access" msgstr "Accès SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Clés SSH" @@ -2349,6 +2470,9 @@ msgstr "Signal :" msgid "Size" msgstr "Taille" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Passer au suivant" @@ -2641,6 +2765,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Le protocole sélectionné nécessite l'attribution d'un périphérique" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2703,6 +2830,12 @@ msgid "This IPv4 address of the relay" msgstr "L'adresse IPv4 du relais" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2871,6 +3004,9 @@ msgstr "Erreur inconnue, mot de passe inchangé !" msgid "Unmanaged" msgstr "non-géré" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Changements non appliqués" @@ -3038,13 +3174,14 @@ msgstr "En attente de l'application des changements..." msgid "Waiting for command to complete..." msgstr "En attente de la fin de la commande..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Attention" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Attention : il reste des changements non appliqués qui seront perdus après " -"redémarrage !" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3275,6 +3412,30 @@ msgstr "oui" msgid "« Back" msgstr "« Retour" +#~ msgid "Delete this interface" +#~ msgstr "Supprimer cette interface" + +#~ msgid "Flags" +#~ msgstr "Options" + +#~ msgid "Rule #" +#~ msgstr "N° de règle" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorer le fichiers Hosts" + +#~ msgid "Path" +#~ msgstr "Chemin" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Patientez s'il vous plaît: équipement en cours de redémarrage..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Attention : il reste des changements non appliqués qui seront perdus " +#~ "après redémarrage !" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4134,9 +4295,6 @@ msgstr "« Retour" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ici vous pouvez configurer les équipements Wi-Fi installés." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignorer /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Ad-Hoc" diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po index 237e8689a..6f5e3b0b5 100644 --- a/modules/luci-base/po/he/base.po +++ b/modules/luci-base/po/he/base.po @@ -44,6 +44,9 @@ msgstr "עומס במשך דקה:" msgid "15 Minute Load:" msgstr "עומס במשך רבע שעה:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "עומס במשך 5 דקות:" @@ -202,6 +205,9 @@ msgstr "הוסף ממשק חדש..." msgid "Additional Hosts files" msgstr "קבצי מארח נוספים" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "כתובת" @@ -267,6 +273,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "אנטנה 1" @@ -325,6 +337,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "זמין" @@ -334,6 +361,9 @@ msgstr "חבילות זמינות" msgid "Average:" msgstr "ממוצע:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +440,11 @@ msgstr "שלט אלחוטי Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "כפתורים" @@ -446,6 +481,9 @@ msgstr "ערוץ" msgid "Check" msgstr "לבדוק" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "" @@ -557,6 +595,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -634,9 +680,6 @@ msgstr "" msgid "Delete" msgstr "למחוק" -msgid "Delete this interface" -msgstr "מחק ממשק זה" - msgid "Delete this network" msgstr "מחק רשת זו" @@ -655,6 +698,12 @@ msgstr "מכשיר" msgid "Device Configuration" msgstr "הגדרות מכשיר" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "אבחון" @@ -693,6 +742,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "מרחק לנק' הרשת הרחוקה ביותר במטרים" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "גיוון" @@ -756,6 +808,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -864,6 +919,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -885,6 +943,11 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -909,9 +972,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "" @@ -942,6 +1002,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -981,6 +1044,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -990,6 +1059,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1087,6 +1159,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1176,7 +1251,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1191,6 +1266,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1369,6 +1449,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1390,6 +1473,9 @@ msgstr "עומס ממוצע" msgid "Loading" msgstr "טוען" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "כתובת IPv4 מקומית" @@ -1457,6 +1543,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1471,6 +1560,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1489,6 +1581,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1554,12 +1651,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1578,6 +1681,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1677,6 +1783,9 @@ msgstr "לא מחובר" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1799,9 +1908,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1829,9 +1947,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1847,6 +1962,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "" @@ -1868,9 +1986,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "אנא הזן את שם המשתמש והסיסמה שלך:" -msgid "Please wait: Device rebooting..." -msgstr "אנא המתן: המכשיר מאותחל מחדש..." - msgid "Policy" msgstr "" @@ -2137,9 +2252,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2157,6 +2269,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2246,6 +2367,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2503,6 +2627,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2551,6 +2678,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2703,6 +2836,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "" @@ -2860,11 +2996,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "אזהרה" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "אזהרה: ישנם שינויים שלא נשמרו ויאבדו בעת הפעלה מחדש!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3088,6 +3227,16 @@ msgstr "כן" msgid "« Back" msgstr "<< אחורה" +#~ msgid "Delete this interface" +#~ msgstr "מחק ממשק זה" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "אנא המתן: המכשיר מאותחל מחדש..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "אזהרה: ישנם שינויים שלא נשמרו ויאבדו בעת הפעלה מחדש!" + #~ msgid "Cached" #~ msgstr "שמור במטמון" diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po index 975bf2dfc..d1f71d80c 100644 --- a/modules/luci-base/po/hu/base.po +++ b/modules/luci-base/po/hu/base.po @@ -44,6 +44,9 @@ msgstr "Terhelés (utolsó 1 perc):" msgid "15 Minute Load:" msgstr "Terhelés (utolsó 15 perc):" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Terhelés (utolsó 5 perc):" @@ -207,6 +210,9 @@ msgstr "Új interfész hozzáadása..." msgid "Additional Hosts files" msgstr "További 'hosts' fájlok" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Cím" @@ -272,6 +278,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "1-es antenna" @@ -328,6 +340,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Elérhető" @@ -337,6 +364,9 @@ msgstr "Elérhető csomagok" msgid "Average:" msgstr "Átlag:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -413,6 +443,11 @@ msgstr "Broadcom BCM%04x 802.11 vezeték-nélküli vezérlő" msgid "Buffered" msgstr "Átmeneti tárban van" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Gombok" @@ -450,6 +485,9 @@ msgstr "Csatorna" msgid "Check" msgstr "Ellenőrzés" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Ellenőrző összeg" @@ -574,6 +612,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -651,9 +697,6 @@ msgstr "" msgid "Delete" msgstr "Törlés" -msgid "Delete this interface" -msgstr "Interfész törlése" - msgid "Delete this network" msgstr "Hálózat törlése" @@ -672,6 +715,12 @@ msgstr "Eszköz" msgid "Device Configuration" msgstr "Eszköz beállítások" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosztika" @@ -712,6 +761,9 @@ msgstr "Távolság optimalizáció" msgid "Distance to farthest network member in meters." msgstr "A hálózat legtávolabbi tagjának távolsága méterben." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diverzitás" @@ -788,6 +840,9 @@ msgstr "" "esetén csak a statikus DHCP bérlettel rendelkező kliensek lesznek " "kiszolgálva." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP metódus" @@ -897,6 +952,9 @@ msgstr "Külső rendszernapló kiszolgáló" msgid "External system log server port" msgstr "Külső rendszernapló kiszolgáló port" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Gyors keretek" @@ -918,6 +976,11 @@ msgstr "Privát kérések szűrése" msgid "Filter useless" msgstr "Használhahatlan kérések szűrése" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Hálózatok keresése és csatlakozás" @@ -942,9 +1005,6 @@ msgstr "Tűzfal verzió" msgid "Fixed source port for outbound DNS queries" msgstr "Rögzített forrás port a kimenő DNS kérésekhez" -msgid "Flags" -msgstr "Flag-ek" - msgid "Flash Firmware" msgstr "Firmware flash-elés" @@ -977,6 +1037,9 @@ msgstr "TKIP kényszerítése" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP és CCMP (AES) kényszerítése" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCP forgalom továbbítás" @@ -1016,6 +1079,12 @@ msgstr "Általános beállítások" msgid "General Setup" msgstr "Általános beállítások" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Archívum készítése" @@ -1025,6 +1094,9 @@ msgstr "Általános 802.11%s vezeték-nélküli vezérlő" msgid "Given password confirmation did not match, password not changed!" msgstr "A megadott jelszavak nem egyeznek, a jelszó nem lett megváltoztatva!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1126,6 +1198,9 @@ msgstr "IPv4 hálózati maszk" msgid "IPv4 only" msgstr "csak IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 prefix hossza" @@ -1224,8 +1299,8 @@ msgstr "" "nagyon lassú folyamat mivel a swap-eszköz nem érhető el akkora sebességgel " "mint a <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "A hosts fájlok figyelmen kívül hagyása" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "Interfész figyelmen kívül hagyása" @@ -1239,6 +1314,11 @@ msgstr "Image" msgid "In" msgstr "Be" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Inaktivitási időtúllépés" @@ -1425,6 +1505,9 @@ msgstr "" "<abbr title=\"Domain Name System\">DNS</abbr> szerverek listája, ahová a " "kérések továbbításra kerülnek" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Domain-ok listája, melyeknél az RFC1918 válaszok megengedettek" @@ -1448,6 +1531,9 @@ msgstr "Átlagos terhelés" msgid "Loading" msgstr "Betöltés" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Helyi IPv4 cím" @@ -1523,6 +1609,9 @@ msgstr "MAC-szűrő" msgid "MAC-List" msgstr "MAC-lista" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1537,6 +1626,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maximális sebesség" @@ -1555,6 +1647,11 @@ msgstr "Maximális várakozási idő a modem kész állapotára (másodpercben)" msgid "Maximum hold time" msgstr "Maximális tartási idő" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "DHCP címek maximális száma" @@ -1622,12 +1719,18 @@ msgstr "" "A csatolási pontok határozzák meg, hogy egy memória eszköz hová lesz " "csatlakoztatva a fájlendszeren belül " +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Csatolási beállítások" msgid "Mount point" msgstr "Csatolási pont" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Csatolt fájlrendszerek" @@ -1646,6 +1749,9 @@ msgstr "Multicast cím" msgid "NAS ID" msgstr "NAS azonosító" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1745,6 +1851,9 @@ msgstr "Nincs kapcsolódva" msgid "Note: Configuration files will be erased." msgstr "Megjegyzés: konfigurációs fájlok törölve lesznek." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Megjegyzés" @@ -1874,9 +1983,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "A libiwinfo csomag szükséges!" @@ -1904,9 +2022,6 @@ msgstr "A privát kulcsh jelszava" msgid "Password successfully changed!" msgstr "A jelszó megváltoztatása sikeres!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "CA tanúsítvány elérési útja" @@ -1922,6 +2037,9 @@ msgstr "A gomb eseményeit kezelő végrehajtható állomány elérési útja" msgid "Peak:" msgstr "Csúcs:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Újraindítás végrehajtása" @@ -1943,9 +2061,6 @@ msgstr "csom." msgid "Please enter your username and password." msgstr "Adja meg a felhasználónevét és a jelszavát." -msgid "Please wait: Device rebooting..." -msgstr "Kérem várjon: az eszköz újraindul..." - msgid "Policy" msgstr "Szabály" @@ -2229,9 +2344,6 @@ msgstr "" "Az útvonalak határozzák meg, hogy bizonyos gépek illetve hálózatok melyik " "interfészen keresztül érhetők el." -msgid "Rule #" -msgstr "Szabály #" - msgid "Run a filesystem check before mounting the device" msgstr "Fájlrendszer ellenőrzés futtatása az eszköz csatolása előtt" @@ -2249,6 +2361,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH hozzáférés" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH kulcsok" @@ -2340,6 +2461,9 @@ msgstr "Jel:" msgid "Size" msgstr "Méret" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Ugrás" @@ -2632,6 +2756,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "A kiválasztott protokoll eszköz hozzárendelést igényel" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2692,6 +2819,12 @@ msgid "This IPv4 address of the relay" msgstr "Az átjátszó IPV4 címe" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2859,6 +2992,9 @@ msgstr "Ismeretlen hiba, a jelszó nem lett megváltoztatva!" msgid "Unmanaged" msgstr "Nem kezelt" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "El nem mentett módosítások" @@ -3026,13 +3162,14 @@ msgstr "Várakozás a változtatások alkalmazására..." msgid "Waiting for command to complete..." msgstr "Várakozás a parancs befejezésére..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Figyelmeztetés" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Figyelem: vannak el nem mentett változások melyek el fognak veszni az " -"újraindítás során!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3264,6 +3401,27 @@ msgstr "igen" msgid "« Back" msgstr "« Vissza" +#~ msgid "Delete this interface" +#~ msgstr "Interfész törlése" + +#~ msgid "Flags" +#~ msgstr "Flag-ek" + +#~ msgid "Rule #" +#~ msgstr "Szabály #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "A hosts fájlok figyelmen kívül hagyása" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Kérem várjon: az eszköz újraindul..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Figyelem: vannak el nem mentett változások melyek el fognak veszni az " +#~ "újraindítás során!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po index ffb1fdf0c..6a6c0223b 100644 --- a/modules/luci-base/po/it/base.po +++ b/modules/luci-base/po/it/base.po @@ -46,6 +46,9 @@ msgstr "Carico in 1 minuto:" msgid "15 Minute Load:" msgstr "Carico in 15 minut:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carico in 5 minuti:" @@ -214,6 +217,9 @@ msgstr "Aggiungi nuova interfaccia..." msgid "Additional Hosts files" msgstr "File Hosts Aggiuntivo" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Indirizzo" @@ -279,6 +285,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antenna 1" @@ -335,6 +347,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponibili" @@ -344,6 +371,9 @@ msgstr "Pacchetti disponibili" msgid "Average:" msgstr "Media:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -419,6 +449,11 @@ msgstr "Dispositivo Wireless Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Pulsanti" @@ -455,6 +490,9 @@ msgstr "Canale" msgid "Check" msgstr "Verifica" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Checksum" @@ -577,6 +615,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -655,9 +701,6 @@ msgstr "" msgid "Delete" msgstr "Elimina" -msgid "Delete this interface" -msgstr "Rimuovi questa interfaccia" - msgid "Delete this network" msgstr "Rimuovi questa rete" @@ -676,6 +719,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configurazione del dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostica" @@ -716,6 +765,9 @@ msgstr "Ottimizzazione distanza" msgid "Distance to farthest network member in meters." msgstr "Distanza del membro più lontano della rete in metri." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversità" @@ -789,6 +841,9 @@ msgstr "" "Fornisci dinamicamente gli indirizzi DHCP ai client. Se disabilitato, solo i " "client con un indirizzo statico saranno serviti." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metodo EAP" @@ -899,6 +954,9 @@ msgstr "Server Log di Sistema esterno" msgid "External system log server port" msgstr "Porta Server Log di Sistema esterno" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Frame veloci" @@ -920,6 +978,11 @@ msgstr "Filtra privati" msgid "Filter useless" msgstr "Filtra inutili" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Trova e aggiungi una rete" @@ -944,9 +1007,6 @@ msgstr "Versione del Firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Porta di origine fissa per le richieste DNS in uscita" -msgid "Flags" -msgstr "Flags" - msgid "Flash Firmware" msgstr "Flash Firmware" @@ -977,6 +1037,9 @@ msgstr "Forza TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forza TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Inoltra il traffico DHCP" @@ -1016,6 +1079,12 @@ msgstr "Opzioni Generali" msgid "General Setup" msgstr "Impostazioni Generali" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Genera Archivio" @@ -1027,6 +1096,9 @@ msgstr "" "La conferma della password assegnata non ha prodotto risultati, la password " "non è stata cambiata!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1129,6 +1201,9 @@ msgstr "Maschera rete IPv4" msgid "IPv4 only" msgstr "Solo IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Lunghezza prefisso IPv4" @@ -1229,8 +1304,8 @@ msgstr "" "dispositivo di swap non può essere acceduto alle alte velocità della <abbr " "title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignora i files Hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignora <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignora interfaccia" @@ -1244,6 +1319,11 @@ msgstr "Immagine" msgid "In" msgstr "In" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo di Inattività" @@ -1427,6 +1507,9 @@ msgstr "" "Elenco di Server <abbr title=\"Sistema Nome Dimio\">DNS</abbr>a cui " "inoltrare le richieste in" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Elenco di domini da consentire le risposte RFC1918 per" @@ -1448,6 +1531,9 @@ msgstr "Carico Medio" msgid "Loading" msgstr "Caricamento" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Indirizzo IPv4 locale" @@ -1521,6 +1607,9 @@ msgstr "Filtro MAC" msgid "MAC-List" msgstr "Lista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1535,6 +1624,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Velocità massima" @@ -1553,6 +1645,11 @@ msgstr "" msgid "Maximum hold time" msgstr "Velocità massima" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1620,12 +1717,18 @@ msgstr "" "I punti di mount definiscono in quale punto un dispositivo di memoria verrà " "attaccato al tuo filesystem" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Opzioni di mount" msgid "Mount point" msgstr "Punto di mount" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "File system montati" @@ -1644,6 +1747,9 @@ msgstr "" msgid "NAS ID" msgstr "ID della NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1743,6 +1849,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Avviso" @@ -1870,9 +1979,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "E' richiesto il pacchetto libiwinfo!" @@ -1900,9 +2018,6 @@ msgstr "Password della chiave privata" msgid "Password successfully changed!" msgstr "Password cambiata con successo!" -msgid "Path" -msgstr "Percorso" - msgid "Path to CA-Certificate" msgstr "Percorso al certificato CA" @@ -1918,6 +2033,9 @@ msgstr "" msgid "Peak:" msgstr "Picco:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Esegui un riavvio" @@ -1939,9 +2057,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "Per favore inserisci il tuo username e la password." -msgid "Please wait: Device rebooting..." -msgstr "Per favore attendi: Riavvio del dispositivo..." - msgid "Policy" msgstr "" @@ -2212,9 +2327,6 @@ msgstr "" "Le route specificano attraverso quale interfaccia e gateway un certo host o " "rete può essere raggiunto." -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2232,6 +2344,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2320,6 +2441,9 @@ msgstr "" msgid "Size" msgstr "Dimensione" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Salta" @@ -2598,6 +2722,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2653,6 +2780,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2810,6 +2943,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Modifiche non salvate" @@ -2977,12 +3113,14 @@ msgstr "In attesa delle modifiche da applicare ..." msgid "Waiting for command to complete..." msgstr "In attesa del comando da completare..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Avviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Attenzione: Ci sono modifiche non salvate che verranno persi riavviando!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3216,6 +3354,26 @@ msgstr "Sì" msgid "« Back" msgstr "« Indietro" +#~ msgid "Delete this interface" +#~ msgstr "Rimuovi questa interfaccia" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignora i files Hosts" + +#~ msgid "Path" +#~ msgstr "Percorso" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Per favore attendi: Riavvio del dispositivo..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Attenzione: Ci sono modifiche non salvate che verranno persi riavviando!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3943,9 +4101,6 @@ msgstr "« Indietro" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Qui puoi configurare i tuoi dispositivi wireless installati." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignora <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po index 8bea7644e..313fc2cac 100644 --- a/modules/luci-base/po/ja/base.po +++ b/modules/luci-base/po/ja/base.po @@ -46,6 +46,9 @@ msgstr "過去1分の負荷:" msgid "15 Minute Load:" msgstr "過去15分の負荷:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "過去5分の負荷:" @@ -205,6 +208,9 @@ msgstr "インターフェースの新規作成..." msgid "Additional Hosts files" msgstr "追加のホストファイル" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "アドレス" @@ -266,6 +272,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "アンテナ 1" @@ -322,6 +334,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "使用可" @@ -331,6 +358,9 @@ msgstr "インストール可能なパッケージ" msgid "Average:" msgstr "平均値:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -406,6 +436,11 @@ msgstr "Broadcom BCM%04x 802.11 無線LANコントローラ" msgid "Buffered" msgstr "バッファ" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "ボタン" @@ -442,6 +477,9 @@ msgstr "チャネル" msgid "Check" msgstr "チェック" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "チェックサム" @@ -565,6 +603,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -642,9 +688,6 @@ msgstr "" msgid "Delete" msgstr "削除" -msgid "Delete this interface" -msgstr "インターフェースを削除します" - msgid "Delete this network" msgstr "ネットワークを削除します" @@ -663,6 +706,12 @@ msgstr "デバイス" msgid "Device Configuration" msgstr "デバイス設定" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "診断機能" @@ -703,6 +752,9 @@ msgstr "距離の最適化" msgid "Distance to farthest network member in meters." msgstr "最も遠い端末との距離(メートル)を設定してください。" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "ダイバシティ" @@ -777,6 +829,9 @@ msgstr "" "クライアントに対して動的にDHCPアドレスを割り振ります。無効に設定した場合、静" "的リースのみを行います。" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAPメソッド" @@ -888,6 +943,9 @@ msgstr "外部システムログ・サーバー" msgid "External system log server port" msgstr "外部システムログ・サーバーポート" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "ファスト・フレーム" @@ -909,6 +967,11 @@ msgstr "プライベートフィルター" msgid "Filter useless" msgstr "Filter useless" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "ネットワークを検索して参加" @@ -933,9 +996,6 @@ msgstr "ファームウェア・バージョン" msgid "Fixed source port for outbound DNS queries" msgstr "DNSクエリを送信する送信元ポートを固定します" -msgid "Flags" -msgstr "フラグ" - msgid "Flash Firmware" msgstr "ファームウェアの更新" @@ -967,6 +1027,9 @@ msgstr "TKIP を使用" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP 及びCCMP (AES) を使用" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCPトラフィックを転送する" @@ -1006,6 +1069,12 @@ msgstr "一般設定" msgid "General Setup" msgstr "一般設定" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "バックアップアーカイブの作成" @@ -1015,6 +1084,9 @@ msgstr "802.11%s 無線LANコントローラ" msgid "Given password confirmation did not match, password not changed!" msgstr "入力されたパスワードが一致しません。パスワードは変更されませんでした!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1114,6 +1186,9 @@ msgstr "IPv4 ネットマスク" msgid "IPv4 only" msgstr "IPv4のみ" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 プレフィクス長" @@ -1210,8 +1285,8 @@ msgstr "" "title=\"Random Access Memory\">RAM</abbr>にアクセスすることができなくなる恐れ" "があります。" -msgid "Ignore Hosts files" -msgstr "ホストファイルを無視する" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "<code>/etc/hosts</code>を無視" msgid "Ignore interface" msgstr "インターフェースを無視する" @@ -1225,6 +1300,11 @@ msgstr "イメージ" msgid "In" msgstr "イン" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "未使用時タイムアウト" @@ -1408,6 +1488,9 @@ msgstr "" "問い合わせを転送する<abbr title=\"Domain Name System\">DNS</abbr> サーバーの" "リストを設定します" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "RFC1918の応答を許可するリスト" @@ -1431,6 +1514,9 @@ msgstr "システム平均負荷" msgid "Loading" msgstr "ロード中" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "ローカル IPv4 アドレス" @@ -1499,6 +1585,9 @@ msgstr "MAC-フィルタ" msgid "MAC-List" msgstr "MAC-リスト" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1513,6 +1602,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最大レート" @@ -1531,6 +1623,11 @@ msgstr "モデムが準備完了状態になるまでの最大待ち時間" msgid "Maximum hold time" msgstr "最大保持時間" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "リースするアドレスの最大数です" @@ -1598,12 +1695,18 @@ msgstr "" "マウントポイントは、記憶デバイスがファイルシステムのどこに接続されているかを" "表示しています。" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "マウントオプション" msgid "Mount point" msgstr "マウントポイント" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "マウント中のファイルシステム" @@ -1622,6 +1725,9 @@ msgstr "マルチキャストアドレス" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1721,6 +1827,9 @@ msgstr "未接続" msgid "Note: Configuration files will be erased." msgstr "注意: 設定ファイルは消去されます。" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "注意" @@ -1851,9 +1960,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "libiwinfo パッケージをインストールしてください!" @@ -1881,9 +1999,6 @@ msgstr "秘密鍵のパスワード" msgid "Password successfully changed!" msgstr "パスワードを変更しました" -msgid "Path" -msgstr "パス" - msgid "Path to CA-Certificate" msgstr "CA証明書のパス" @@ -1899,6 +2014,9 @@ msgstr "ボタンイベントをハンドルする実行ファイルのパス" msgid "Peak:" msgstr "ピーク:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "再起動を実行" @@ -1920,9 +2038,6 @@ msgstr "パケット" msgid "Please enter your username and password." msgstr "ユーザー名とパスワードを入力してください。" -msgid "Please wait: Device rebooting..." -msgstr "しばらくお待ちください: 再起動中です..." - msgid "Policy" msgstr "ポリシー" @@ -2207,9 +2322,6 @@ msgstr "" "特定のホスト又はネットワークに、どのインターフェース及びゲートウェイを通して" "通信を行うか、経路情報を設定します。" -msgid "Rule #" -msgstr "ルール #" - msgid "Run a filesystem check before mounting the device" msgstr "デバイスのマウントを行う前にファイルシステムチェックを行う" @@ -2227,6 +2339,15 @@ msgstr "" msgid "SSH Access" msgstr "SSHアクセス" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSHキー" @@ -2318,6 +2439,9 @@ msgstr "信号:" msgid "Size" msgstr "サイズ" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "スキップ" @@ -2596,6 +2720,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "選択中のプロトコルを使用する場合、デバイスを設定する必要があります" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2656,6 +2783,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2822,6 +2955,9 @@ msgstr "不明なエラーです。パスワードは変更されていません msgid "Unmanaged" msgstr "Unmanaged" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "保存されていない変更" @@ -2990,11 +3126,14 @@ msgstr "変更を適用中です..." msgid "Waiting for command to complete..." msgstr "コマンド実行中です..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告: 保存されていない変更は再起動後に失われます!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3225,6 +3364,28 @@ msgstr "はい" msgid "« Back" msgstr "« 戻る" +#~ msgid "Delete this interface" +#~ msgstr "インターフェースを削除します" + +#~ msgid "Flags" +#~ msgstr "フラグ" + +#~ msgid "Rule #" +#~ msgstr "ルール #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "ホストファイルを無視する" + +#~ msgid "Path" +#~ msgstr "パス" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "しばらくお待ちください: 再起動中です..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告: 保存されていない変更は再起動後に失われます!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4077,9 +4238,6 @@ msgstr "« 戻る" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "ここではインストールされた無線デバイスの設定を行うことが出来ます。" -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "<code>/etc/hosts</code>を無視" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "アドホック" diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po index d2a34dfbe..ab3a25f0f 100644 --- a/modules/luci-base/po/ms/base.po +++ b/modules/luci-base/po/ms/base.po @@ -46,6 +46,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -196,6 +199,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -256,6 +262,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -312,6 +324,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Boleh didapati" @@ -321,6 +348,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -393,6 +423,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Butang" @@ -429,6 +464,9 @@ msgstr "Saluran" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Jumlah disemak " @@ -541,6 +579,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "Mengkustomisasi perilaku peranti LED jika mungkin." @@ -614,9 +660,6 @@ msgstr "" msgid "Delete" msgstr "Padam" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -635,6 +678,12 @@ msgstr "Alat" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -673,6 +722,9 @@ msgstr "Jarak Optimasi" msgid "Distance to farthest network member in meters." msgstr "Jarak ke rangkaian terjauh ahli dalam meter." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Keanekaragaman" @@ -740,6 +792,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Kaedah" @@ -848,6 +903,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Frame Cepat" @@ -869,6 +927,11 @@ msgstr "Penapis swasta" msgid "Filter useless" msgstr "Penapis tak berguna" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -893,9 +956,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "Parameter" - msgid "Flash Firmware" msgstr "Firmware Flash" @@ -926,6 +986,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -965,6 +1028,12 @@ msgstr "" msgid "General Setup" msgstr "Setup Umum" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -974,6 +1043,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1073,6 +1145,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1167,8 +1242,8 @@ msgstr "" "sangat lambat kerana peranti-penukar tidak boleh diakses dengan datarates " "yang tinggi pada RAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Mengabaikan /etc/hosts" msgid "Ignore interface" msgstr "Abaikan antara muka" @@ -1182,6 +1257,11 @@ msgstr "" msgid "In" msgstr "Masuk" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1364,6 +1444,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1385,6 +1468,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1452,6 +1538,9 @@ msgstr "Penapis MAC" msgid "MAC-List" msgstr "Senarai MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1466,6 +1555,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Rate Maksimum" @@ -1485,6 +1577,11 @@ msgstr "" msgid "Maximum hold time" msgstr "Memegang masa maksimum" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1553,12 +1650,18 @@ msgstr "" "Mount Points menentukan di mana titik peranti memori akan melekat pada fail " "sistem" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Mounted fail sistems" @@ -1577,6 +1680,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1676,6 +1782,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1803,9 +1912,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1833,9 +1951,6 @@ msgstr "Kata Laluan Kunci Swasta" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Path" - msgid "Path to CA-Certificate" msgstr "Path ke CA-Sijil" @@ -1851,6 +1966,9 @@ msgstr "Path ke eksekusi yang mengendalikan acara butang" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Lakukan reboot" @@ -1872,9 +1990,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Sila masukkan username dan kata laluan anda." -msgid "Please wait: Device rebooting..." -msgstr "Sila tunggu: Peranti sedang reboot..." - msgid "Policy" msgstr "Dasar" @@ -2141,9 +2256,6 @@ msgstr "" "Laluan menentukan di mana interface dan gateway host atau rangkaian tertentu " "yang boleh dicapai." -msgid "Rule #" -msgstr "Peraturan #" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2161,6 +2273,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2249,6 +2370,9 @@ msgstr "" msgid "Size" msgstr "Saiz" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Skip" @@ -2507,6 +2631,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2562,6 +2689,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2719,6 +2852,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Perubahan yang belum disimpan" @@ -2878,11 +3014,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Amaran: Ada perubahan yang belum disimpan akan hilang saat reboot!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3106,6 +3245,22 @@ msgstr "" msgid "« Back" msgstr "« Kembali" +#~ msgid "Flags" +#~ msgstr "Parameter" + +#~ msgid "Rule #" +#~ msgstr "Peraturan #" + +#~ msgid "Path" +#~ msgstr "Path" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Sila tunggu: Peranti sedang reboot..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Amaran: Ada perubahan yang belum disimpan akan hilang saat reboot!" + #~ msgid "Frequency Hopping" #~ msgstr "Melompat Frekuensi" @@ -3695,9 +3850,6 @@ msgstr "« Kembali" #~ "dipilih. Hapus tanda pada pilihan untuk menentukan melampirkan rangkaian " #~ "mandiri baru untuk antara muka ini." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Mengabaikan /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "(Ad-Hoc) Tersendiri" diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po index 21176ed3f..edde08eac 100644 --- a/modules/luci-base/po/no/base.po +++ b/modules/luci-base/po/no/base.po @@ -41,6 +41,9 @@ msgstr "1 minutts belastning:" msgid "15 Minute Load:" msgstr "15 minutters belastning:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 minutters belastning:" @@ -205,6 +208,9 @@ msgstr "Legg til grensesnitt..." msgid "Additional Hosts files" msgstr "Tilleggs vertsfiler" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -265,6 +271,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antenne 1" @@ -321,6 +333,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Tilgjengelig" @@ -330,6 +357,9 @@ msgstr "Tilgjengelige pakker" msgid "Average:" msgstr "Gjennomsnitt:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -405,6 +435,11 @@ msgstr "Broadcom BCM%04x 802.11 Trådløs Kontroller" msgid "Buffered" msgstr "Bufret" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Knapper" @@ -441,6 +476,9 @@ msgstr "Kanal" msgid "Check" msgstr "Kontroller" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Kontrollsum" @@ -563,6 +601,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -640,9 +686,6 @@ msgstr "" msgid "Delete" msgstr "Fjern" -msgid "Delete this interface" -msgstr "Fjern dette grensesnitt" - msgid "Delete this network" msgstr "Fjern dette nettverket" @@ -661,6 +704,12 @@ msgstr "Enhet" msgid "Device Configuration" msgstr "Enhet Konfigurasjon" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Nettverksdiagnostikk" @@ -701,6 +750,9 @@ msgstr "Avstand Optimalisering" msgid "Distance to farthest network member in meters." msgstr "Avstand i meter til det medlem av nettverket som er lengst unna." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Antennevariasjon" @@ -775,6 +827,9 @@ msgstr "" "Dynamisk tildeling av DHCP adresser til klienter. Om deaktivert, kan en kun " "bruke klienter med statisk leie." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-metode" @@ -884,6 +939,9 @@ msgstr "Ekstern systemlogg server" msgid "External system log server port" msgstr "Ekstern systemlogg server port" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Fast Frames" @@ -905,6 +963,11 @@ msgstr "Filtrer private" msgid "Filter useless" msgstr "Filtrer ubrukelige" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Finn og koble til nettverk" @@ -929,9 +992,6 @@ msgstr "Firmware Versjon" msgid "Fixed source port for outbound DNS queries" msgstr "Fast kilde port for utgående DNS-spørringer" -msgid "Flags" -msgstr "Flagg" - msgid "Flash Firmware" msgstr "Firmware Oppradering" @@ -963,6 +1023,9 @@ msgstr "Bruk TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Bruk TKIP og CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Videresend DHCP trafikk" @@ -1002,6 +1065,12 @@ msgstr "Generelle Innstillinger" msgid "General Setup" msgstr "Generelt Oppsett" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Opprett arkiv" @@ -1011,6 +1080,9 @@ msgstr "Generell 802.11%s Trådløs Kontroller" msgid "Given password confirmation did not match, password not changed!" msgstr "Det oppgitte passordet var ikke korrekt, passord ble ikke endret!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1112,6 +1184,9 @@ msgstr "IPv4 nettmaske" msgid "IPv4 only" msgstr "Kun IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 prefikslengde" @@ -1205,8 +1280,8 @@ msgstr "" "\"Random Access Memory\">RAM</abbr>. Vær oppmerksom på at bruk av swap er " "mye langsommere en <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignorer vertsfiler" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "Ignorer grensesnitt" @@ -1220,6 +1295,11 @@ msgstr "Firmware" msgid "In" msgstr "i" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tidsavbrudd etter innaktivitet" @@ -1403,6 +1483,9 @@ msgstr "" "Liste med <abbr title=\"Domain Name System\">DNS</abbr> servere som " "forespørsler blir videresendt til" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Liste over domener hvor en tillater RFC1918 svar" @@ -1425,6 +1508,9 @@ msgstr "Belastning Gjennomsnitt" msgid "Loading" msgstr "Laster" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Lokal IPv4 adresse" @@ -1497,6 +1583,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-Liste" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1511,6 +1600,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maksimal hastighet" @@ -1529,6 +1621,11 @@ msgstr "Maksimalt antall sekunder å vente på at modemet skal bli klart" msgid "Maximum hold time" msgstr "Maksimal holde tid" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Maksimalt antall utleide adresser." @@ -1596,12 +1693,18 @@ msgstr "" "Monterings punkter definerer hvor lagrings enheter blir tilsluttet " "filsystemet" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Monterings alternativer" msgid "Mount point" msgstr "Monterings punkt" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Monterte Filsystemer" @@ -1620,6 +1723,9 @@ msgstr "Multicast adresse" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1719,6 +1825,9 @@ msgstr "Ikke tilkoblet" msgid "Note: Configuration files will be erased." msgstr "Merk: Konfigurasjonsfiler vil bli slettet" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Merk" @@ -1849,9 +1958,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Pakken libiwinfo er nødvendig!" @@ -1879,9 +1997,6 @@ msgstr "Passord for privatnøkkel" msgid "Password successfully changed!" msgstr "Passordet er endret!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Sti til CA-sertifikat" @@ -1897,6 +2012,9 @@ msgstr "Sti til program som håndterer handling ved bruk av knapp" msgid "Peak:" msgstr "Maksimalt:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Omstart nå" @@ -1918,9 +2036,6 @@ msgstr "Pakker." msgid "Please enter your username and password." msgstr "Skriv inn ditt brukernavn og passord." -msgid "Please wait: Device rebooting..." -msgstr "Vent: Enheten starter på nytt..." - msgid "Policy" msgstr "Policy" @@ -2202,9 +2317,6 @@ msgstr "" "Ruter, angir hvilket nettverksgrensesnitt og hvilken gateway som brukes for " "å nå et gitt nettverk eller vert." -msgid "Rule #" -msgstr "Regel #" - msgid "Run a filesystem check before mounting the device" msgstr "Kjør filsystem sjekk før montering av enheten" @@ -2222,6 +2334,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH Tilgang" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-Nøkler" @@ -2313,6 +2434,9 @@ msgstr "Signal:" msgid "Size" msgstr "Størrelse" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Gå videre" @@ -2600,6 +2724,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Den valgte protokoll må ha en enhet tilknyttet" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2660,6 +2787,12 @@ msgid "This IPv4 address of the relay" msgstr "Dette IPv4 adressen til relayet" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2825,6 +2958,9 @@ msgstr "Ukjent feil, passordet ble ikke endret!" msgid "Unmanaged" msgstr "Uhåndtert" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Ulagrede Endringer" @@ -2991,11 +3127,14 @@ msgstr "Venter på at endringer utføres..." msgid "Waiting for command to complete..." msgstr "Venter på at kommando fullføres..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Advarsel" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Advarsel: Det er ulagrede endringer som vil gå tapt under omstarten!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3227,6 +3366,26 @@ msgstr "ja" msgid "« Back" msgstr "« Tilbake" +#~ msgid "Delete this interface" +#~ msgstr "Fjern dette grensesnitt" + +#~ msgid "Flags" +#~ msgstr "Flagg" + +#~ msgid "Rule #" +#~ msgstr "Regel #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorer vertsfiler" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Vent: Enheten starter på nytt..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advarsel: Det er ulagrede endringer som vil gå tapt under omstarten!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po index baa7ab853..9f0c55306 100644 --- a/modules/luci-base/po/pl/base.po +++ b/modules/luci-base/po/pl/base.po @@ -42,13 +42,16 @@ msgid "-- match by label --" msgstr "" msgid "1 Minute Load:" -msgstr "Obciążenie w ciągu 1 minuty:" +msgstr "Obciążenie 1 min.:" msgid "15 Minute Load:" -msgstr "Obciążenie w ciągu 15 minut:" +msgstr "Obciążenie 15 min.:" + +msgid "464XLAT (CLAT)" +msgstr "" msgid "5 Minute Load:" -msgstr "Obciążenie w ciągu 5 minut:" +msgstr "Obciążenie 5 min.:" msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>" msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>" @@ -215,6 +218,9 @@ msgstr "Dodaj nowy interfejs..." msgid "Additional Hosts files" msgstr "Dodatkowe pliki Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adres" @@ -281,6 +287,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -338,6 +350,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Dostępne" @@ -347,6 +374,9 @@ msgstr "Dostępne pakiety" msgid "Average:" msgstr "Średnia:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -424,6 +454,11 @@ msgstr "Bezprzewodowy kontroler Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Buforowana" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Przyciski" @@ -460,6 +495,9 @@ msgstr "Kanał" msgid "Check" msgstr "Sprawdź" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Suma kontrolna" @@ -583,6 +621,14 @@ msgstr "Interfejs Niestandardowy" msgid "Custom delegated IPv6-prefix" msgstr "" +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + # Spacji zabrało i napisy się skleiły msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" @@ -662,9 +708,6 @@ msgstr "" msgid "Delete" msgstr "Usuń" -msgid "Delete this interface" -msgstr "Usuń ten interfejs" - msgid "Delete this network" msgstr "Usuń tą sieć" @@ -684,6 +727,12 @@ msgstr "Urządzenie" msgid "Device Configuration" msgstr "Konfiguracja urządzenia" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostyka" @@ -724,6 +773,9 @@ msgstr "Optymalizacja odległości" msgid "Distance to farthest network member in meters." msgstr "Odległość do najdalej oddalonego członka sieci w metrach." +msgid "Distribution feeds" +msgstr "" + # Jak poprzednio trzymam się konwencji msgid "Diversity" msgstr "Wielorakość" @@ -802,6 +854,9 @@ msgstr "" "Dynamicznie rezerwuje adresy DHCP dla klientów. Jeśli jest wyłączone tylko " "klienci posiadający stałe dzierżawy będą obsłużeni." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metoda EAP" @@ -916,6 +971,9 @@ msgstr "Zewnętrzny serwer dla loga systemowego" msgid "External system log server port" msgstr "Port zewnętrznego serwera dla loga systemowego" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Szybkie ramki (Fast Frames)" @@ -937,6 +995,11 @@ msgstr "Filtruj prywatne" msgid "Filter useless" msgstr "Filtruj bezużyteczne" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Znajdź i podłącz się do sieci" @@ -962,9 +1025,6 @@ msgstr "Wersja firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Stały port źródłowy dla wychodzących zapytań DNS" -msgid "Flags" -msgstr "Flagi" - msgid "Flash Firmware" msgstr "Aktualizuj firmware" @@ -996,6 +1056,9 @@ msgstr "Wymuś TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Wymuś TKIP i CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Przekazuj ruch DHCP" @@ -1035,6 +1098,12 @@ msgstr "Ustawienia główne" msgid "General Setup" msgstr "Ustawienia podstawowe" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Twórz archiwum" @@ -1046,6 +1115,9 @@ msgstr "" "Hasło nie zostało zmienione, wpisane poprzednie hasło routera jest " "niewłaściwe!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1150,6 +1222,9 @@ msgstr "Maska IPv4" msgid "IPv4 only" msgstr "Tylko IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Długość prefiksu IPv4" @@ -1249,8 +1324,8 @@ msgstr "" "Memory\">RAM</abbr> będzie dostępna. Uwaga - plik wymiany jest dużo " "wolniejszy niż pamięć <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignoruj pliki Hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "Ignoruj interfejs" @@ -1264,6 +1339,11 @@ msgstr "Obraz" msgid "In" msgstr "W" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Czas bezczynności" @@ -1449,6 +1529,9 @@ msgstr "" "Lista serwerów <abbr title=\"Domain Name System\">DNS</abbr> do których będą " "przekazywane zapytania" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Lista domen zezwalających na odpowiedzi RFC1918" @@ -1471,6 +1554,9 @@ msgstr "Średnie obciążenie" msgid "Loading" msgstr "Ładowanie" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Lokalny adres IPv4" @@ -1544,6 +1630,9 @@ msgstr "Filtr adresów MAC" msgid "MAC-List" msgstr "Lista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1558,6 +1647,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maksymalna Szybkość" @@ -1576,6 +1668,11 @@ msgstr "Maksymalny czas podany w sekundach do pełnej gotowości modemu" msgid "Maximum hold time" msgstr "Maksymalny czas podtrzymania" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Maksymalna liczba dzierżawionych adresów." @@ -1643,12 +1740,18 @@ msgstr "" "Punkty montowania definiują gdzie urządzenie pamięci zostanie podłączone do " "systemu plików" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Opcje montowania" msgid "Mount point" msgstr "Punkt montownia" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Zamontowane systemy plików" @@ -1667,6 +1770,9 @@ msgstr "Adres Multicast`u" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1766,6 +1872,9 @@ msgstr "Nie podłączony" msgid "Note: Configuration files will be erased." msgstr "UWAGA: Pliki konfiguracyjne zostaną usunięte." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Spostrzeżenie" @@ -1838,7 +1947,7 @@ msgid "Out" msgstr "Wychodzące" msgid "Outbound:" -msgstr "Wychodzące:" +msgstr "Wychodzący:" msgid "Outdoor Channels" msgstr "Kanały zewnętrzne" @@ -1895,9 +2004,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Wymagany pakiet libiwinfo!" @@ -1925,9 +2043,6 @@ msgstr "Hasło lub klucz prywatny" msgid "Password successfully changed!" msgstr "Pomyślnie zmieniono hasło!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Ścieżka do certyfikatu CA" @@ -1945,6 +2060,9 @@ msgstr "" msgid "Peak:" msgstr "Szczyt:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Wykonaj restart" @@ -1966,9 +2084,6 @@ msgstr "Pktw." msgid "Please enter your username and password." msgstr "Proszę wprowadź swój login i hasło." -msgid "Please wait: Device rebooting..." -msgstr "Proszę czekać: Ponowne uruchamianie..." - msgid "Policy" msgstr "Zasada" @@ -2252,9 +2367,6 @@ msgstr "" "Ścieżki routingu pokazują routerowi przez który interfejs oraz którą bramę " "może skomunikować się z daną siecią lub komputerem." -msgid "Rule #" -msgstr "Zasada #" - msgid "Run a filesystem check before mounting the device" msgstr "" "Sprawdź czy system plików nie zawiera błędów przed zamontowaniem urządzenia" @@ -2273,6 +2385,15 @@ msgstr "" msgid "SSH Access" msgstr "Dostęp SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Klucze SSH" @@ -2365,6 +2486,9 @@ msgstr "Sygnał:" msgid "Size" msgstr "Rozmiar" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Pomiń" @@ -2660,6 +2784,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Wybrany protokół potrzebuje przypisanego urządzenia" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2720,6 +2847,12 @@ msgid "This IPv4 address of the relay" msgstr "Ten adres IPv4 przekaźnika" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2889,6 +3022,9 @@ msgstr "Nieznany błąd, hasło nie zostało zmienione" msgid "Unmanaged" msgstr "Niezarządzalny" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Niezapisane zmiany" @@ -3057,13 +3193,14 @@ msgstr "Trwa wprowadzenie zmian..." msgid "Waiting for command to complete..." msgstr "Trwa wykonanie polecenia..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Ostrzeżenie" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Ostrzeżenie: Pozostały niezapisane zmian, które zostaną utracone podczas " -"restartu!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3296,6 +3433,27 @@ msgstr "tak" msgid "« Back" msgstr "« Wróć" +#~ msgid "Delete this interface" +#~ msgstr "Usuń ten interfejs" + +#~ msgid "Flags" +#~ msgstr "Flagi" + +#~ msgid "Rule #" +#~ msgstr "Zasada #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignoruj pliki Hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Proszę czekać: Ponowne uruchamianie..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Ostrzeżenie: Pozostały niezapisane zmian, które zostaną utracone podczas " +#~ "restartu!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po index ec4401bde..d278974e7 100644 --- a/modules/luci-base/po/pt-br/base.po +++ b/modules/luci-base/po/pt-br/base.po @@ -46,6 +46,9 @@ msgstr "Carga 1 Minuto:" msgid "15 Minute Load:" msgstr "Carga 15 Minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga 5 Minutos:" @@ -215,6 +218,9 @@ msgstr "Adiciona uma nova interface..." msgid "Additional Hosts files" msgstr "Arquivos adicionais de equipamentos conhecidos (hosts)" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Endereço" @@ -280,6 +286,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -336,6 +348,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponível" @@ -345,6 +372,9 @@ msgstr "Pacotes disponíveis" msgid "Average:" msgstr "Média:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -420,6 +450,11 @@ msgstr "Broadcom BCM%04x 802.11 Wireless Controlador" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botões" @@ -456,6 +491,9 @@ msgstr "Canal" msgid "Check" msgstr "Verificar" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Soma de verificação" @@ -579,6 +617,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -657,9 +703,6 @@ msgstr "" msgid "Delete" msgstr "Apagar" -msgid "Delete this interface" -msgstr "Apagar esta interface" - msgid "Delete this network" msgstr "Apagar esta rede" @@ -678,6 +721,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuração do Dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnóstico" @@ -719,6 +768,9 @@ msgstr "Otimização de Distância" msgid "Distance to farthest network member in meters." msgstr "Distância para o computador mais distante da rede (em metros)." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidade" @@ -798,6 +850,9 @@ msgstr "" "Aloca dinamicamente os endereços do DHCP para os clientes. Se desabilitado, " "somente os clientes com atribuições estáticas serão servidos. " +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Método EAP" @@ -909,6 +964,9 @@ msgstr "Servidor externo de registros do sistema (syslog)" msgid "External system log server port" msgstr "Porta do servidor externo de registro do sistema (syslog)" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Quadros Rápidos" @@ -930,6 +988,11 @@ msgstr "Filtrar endereços privados" msgid "Filter useless" msgstr "Filtrar consultas inúteis" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Procurar e conectar à rede" @@ -954,9 +1017,6 @@ msgstr "Versão do Firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Porta de origem fixa para saída de consultas DNS" -msgid "Flags" -msgstr "Marcadores" - msgid "Flash Firmware" msgstr "Gravar Firmware" @@ -987,6 +1047,9 @@ msgstr "Forçar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forçar TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Encaminhar tráfego DHCP" @@ -1026,6 +1089,12 @@ msgstr "Configurações Gerais" msgid "General Setup" msgstr "Configurações Gerais" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Gerar arquivo" @@ -1035,6 +1104,9 @@ msgstr "Generico 802.11%s Wireless Controlador" msgid "Given password confirmation did not match, password not changed!" msgstr "A senha de confirmação informada não casa. Senha não alterada!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1141,6 +1213,9 @@ msgstr "Máscara de rede IPv4" msgid "IPv4 only" msgstr "Somente IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Tamanho do prefixo IPv4" @@ -1242,8 +1317,8 @@ msgstr "" "de transferência tão altas com a memória <abbr title=\"Memória de Acesso " "Aleatório\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignorar arquivos de equipamentos conhecidos (hosts)" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignorar <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignorar interface" @@ -1257,6 +1332,11 @@ msgstr "Imagem" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo limite de inatividade" @@ -1444,6 +1524,9 @@ msgstr "" "Lista dos servidores <abbr title=\"Domain Name System\">DNS</abbr> para " "encaminhar as requisições" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" "Lista dos domínios para os quais será permitido respostas apontando para " @@ -1470,6 +1553,9 @@ msgstr "Carga Média" msgid "Loading" msgstr "Carregando" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Endereço IPv4 local" @@ -1545,6 +1631,9 @@ msgstr "Filtro de MAC" msgid "MAC-List" msgstr "Lista de MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1561,6 +1650,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Taxa Máxima" @@ -1580,6 +1672,11 @@ msgstr "Tempo máximo, em segundos, para esperar que o modem fique pronto" msgid "Maximum hold time" msgstr "Tempo máximo de espera" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Número máximo de endereços atribuídos." @@ -1647,12 +1744,18 @@ msgstr "" "Pontos de montagem definem em que ponto um dispositivo de armazenamento será " "anexado ao sistema de arquivos" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Opções de montagem" msgid "Mount point" msgstr "Ponto de montagem" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Sistemas de arquivos montados" @@ -1671,6 +1774,9 @@ msgstr "Endereço de Multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1770,6 +1876,9 @@ msgstr "Não conectado" msgid "Note: Configuration files will be erased." msgstr "Nota: Os arquivos de configuração serão apagados." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Aviso" @@ -1902,9 +2011,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "O pacote libiwinfo é necessário!" @@ -1932,9 +2050,6 @@ msgstr "Senha da Chave Privada" msgid "Password successfully changed!" msgstr "A senha foi alterada com sucesso!" -msgid "Path" -msgstr "Directório" - msgid "Path to CA-Certificate" msgstr "Caminho para o Certificado da AC" @@ -1950,6 +2065,9 @@ msgstr "Caminho para o executável que trata o evento do botão" msgid "Peak:" msgstr "Pico:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Reiniciar o sistema" @@ -1971,9 +2089,6 @@ msgstr "Pcts." msgid "Please enter your username and password." msgstr "Entre com o seu usuário e senha." -msgid "Please wait: Device rebooting..." -msgstr "Por favor aguarde: Equipamento reiniciando..." - msgid "Policy" msgstr "Política" @@ -2257,9 +2372,6 @@ msgstr "" "As rotas especificam através de qual interface e roteador um certo destino " "podem ser alcançado." -msgid "Rule #" -msgstr "Regra #" - msgid "Run a filesystem check before mounting the device" msgstr "" "Execute a verificação do sistema de arquivos antes da montagem do dispositivo" @@ -2278,6 +2390,15 @@ msgstr "" msgid "SSH Access" msgstr "Acesso SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Chaves SSH" @@ -2369,6 +2490,9 @@ msgstr "Sinal:" msgid "Size" msgstr "Tamanho" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Pular" @@ -2663,6 +2787,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "O protocolo selecionado necessita estar associado a um dispositivo" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2724,6 +2851,12 @@ msgid "This IPv4 address of the relay" msgstr "Este endereço IPv4 do repassar" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2891,6 +3024,9 @@ msgstr "Erro Desconhecido, a senha não foi alterada!" msgid "Unmanaged" msgstr "Não gerenciado" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Alterações Não Salvas" @@ -3058,13 +3194,14 @@ msgstr "Esperando a aplicação das mudanças..." msgid "Waiting for command to complete..." msgstr "Esperando o término do comando..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Atenção" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Aviso: Existem alterações não salvas que serão perdidas durante a " -"reiniciação!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3300,6 +3437,30 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "Delete this interface" +#~ msgstr "Apagar esta interface" + +#~ msgid "Flags" +#~ msgstr "Marcadores" + +#~ msgid "Rule #" +#~ msgstr "Regra #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar arquivos de equipamentos conhecidos (hosts)" + +#~ msgid "Path" +#~ msgstr "Directório" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Por favor aguarde: Equipamento reiniciando..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Aviso: Existem alterações não salvas que serão perdidas durante a " +#~ "reiniciação!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4158,9 +4319,6 @@ msgstr "« Voltar" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aqui pode configurar os dispositivos wifi instalados. " -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignorar <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po index 1acc852bb..874afc901 100644 --- a/modules/luci-base/po/pt/base.po +++ b/modules/luci-base/po/pt/base.po @@ -46,6 +46,9 @@ msgstr "Carga de 1 Minuto:" msgid "15 Minute Load:" msgstr "Carga de 15 minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga 5 Minutos:" @@ -215,6 +218,9 @@ msgstr "Adicionar uma nova interface..." msgid "Additional Hosts files" msgstr "Ficheiro Adicional de Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Endereço" @@ -278,6 +284,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -334,6 +346,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponível" @@ -343,6 +370,9 @@ msgstr "Pacotes disponíveis" msgid "Average:" msgstr "Média:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +448,11 @@ msgstr "Controlador Wireless Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botões" @@ -454,6 +489,9 @@ msgstr "Canal" msgid "Check" msgstr "Verificar" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Checksum" @@ -576,6 +614,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -654,9 +700,6 @@ msgstr "" msgid "Delete" msgstr "Apagar" -msgid "Delete this interface" -msgstr "Apagar esta interface" - msgid "Delete this network" msgstr "Apagar esta rede" @@ -675,6 +718,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuração do Dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnósticos" @@ -715,6 +764,9 @@ msgstr "Optimização de Distância" msgid "Distance to farthest network member in meters." msgstr "Distância para o último host da rede em metros." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidade" @@ -791,6 +843,9 @@ msgstr "" "Alocar dinamicamente endereços DHCP para clientes. Se desativado, só os " "clientes com reservas estáticas serão servidos." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metodo-EAP" @@ -902,6 +957,9 @@ msgstr "Servidor externo de logs de sistema" msgid "External system log server port" msgstr "Porta do Servidor externo de logs de sistema" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Frames Rápidas" @@ -923,6 +981,11 @@ msgstr "Filtrar endereços privados" msgid "Filter useless" msgstr "Filtro inútil" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Procurar e ligar rede" @@ -947,9 +1010,6 @@ msgstr "Versão do Firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Porta fixa de origem para saída das consultas DNS" -msgid "Flags" -msgstr "Flags" - msgid "Flash Firmware" msgstr "Gravar Firmware" @@ -980,6 +1040,9 @@ msgstr "Forçar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forçar TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Encaminhar tráfego DHCP" @@ -1019,6 +1082,12 @@ msgstr "Definições Gerais" msgid "General Setup" msgstr "Configuração Geral" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Gerar arquivo" @@ -1029,6 +1098,9 @@ msgid "Given password confirmation did not match, password not changed!" msgstr "" "A confirmação de password não corresponde, a password não foi alterada!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1133,6 +1205,9 @@ msgstr "Máscara IPv4" msgid "IPv4 only" msgstr "Só IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Comprimento do prefixo IPv4" @@ -1228,8 +1303,8 @@ msgstr "" "lento pois o dispositivo swap não pode ser acedido com um nível elevado de " "memória <abbr title=\"Memória de Acesso Aleatório\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ignorar ficheiros de Hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignorar <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Ignorar interface" @@ -1243,6 +1318,11 @@ msgstr "Imagem" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo de inatividade" @@ -1427,6 +1507,9 @@ msgstr "" "Lista de servidores <abbr title=\"Sistema Nomes de Domínio\">DNS</abbr> para " "onde encaminhar os pedidos" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Lista de dominios que permitem respostas RFC1918 para" @@ -1449,6 +1532,9 @@ msgstr "Carga Média" msgid "Loading" msgstr "A carregar" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Endereço IPv4 Local" @@ -1521,6 +1607,9 @@ msgstr "Filtro-MAC" msgid "MAC-List" msgstr "Lista-MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1535,6 +1624,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Taxa Máxima" @@ -1553,6 +1645,11 @@ msgstr "Número máximo de segundos a esperar pelo modem para ficar pronto" msgid "Maximum hold time" msgstr "Tempo máximo de espera" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Número máximo de endereços concessionados." @@ -1620,12 +1717,18 @@ msgstr "" "Pontos de montagem definem em que ponto um dispositivo de memória será " "anexado ao sistema de arquivos" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "Ponto de montagem" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Sistemas de arquivos montados" @@ -1644,6 +1747,9 @@ msgstr "Endereço de multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1743,6 +1849,9 @@ msgstr "Não ligado" msgid "Note: Configuration files will be erased." msgstr "Nota: Os ficheiros de configuração serão apagados." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Reparo" @@ -1871,9 +1980,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtp" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "O pacote libiwinfo é necessário!" @@ -1901,9 +2019,6 @@ msgstr "Senha da Chave Privada" msgid "Password successfully changed!" msgstr "Password alterada com sucesso!" -msgid "Path" -msgstr "Directório" - msgid "Path to CA-Certificate" msgstr "Directorio do Certificado CA" @@ -1919,6 +2034,9 @@ msgstr "Caminho do executável que lida com o botão de eventos" msgid "Peak:" msgstr "Pico:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Executar reinicialização" @@ -1940,9 +2058,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Insira o seu username e password." -msgid "Please wait: Device rebooting..." -msgstr "Por favor aguarde: Equipamento a reiniciar..." - msgid "Policy" msgstr "Política" @@ -2221,9 +2336,6 @@ msgstr "" "As rotas especificam através de que interfaces ou gateways podem ser " "alcançados determinadas redes ou hosts." -msgid "Rule #" -msgstr "Regra #" - msgid "Run a filesystem check before mounting the device" msgstr "" "Correr uma verificação do sistema de ficheiros antes de montar um dispositivo" @@ -2242,6 +2354,15 @@ msgstr "" msgid "SSH Access" msgstr "Acesso SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Chaves-SSH" @@ -2331,6 +2452,9 @@ msgstr "Sinal:" msgid "Size" msgstr "Tamanho" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Saltar" @@ -2605,6 +2729,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "O protocolo escolhido precisa de um dispositivo atribuído." +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2666,6 +2793,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2825,6 +2958,9 @@ msgstr "Erro Desconhecido, a password não foi alterada!" msgid "Unmanaged" msgstr "Não gerido" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Alterações não Guardadas" @@ -2984,13 +3120,14 @@ msgstr "A aguardar que as mudanças sejam aplicadas..." msgid "Waiting for command to complete..." msgstr "A aguardar que o comando termine..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Aviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Aviso: Existem alterações não salvas que serão perdidas durante a " -"reinicialização!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3225,6 +3362,30 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "Delete this interface" +#~ msgstr "Apagar esta interface" + +#~ msgid "Flags" +#~ msgstr "Flags" + +#~ msgid "Rule #" +#~ msgstr "Regra #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar ficheiros de Hosts" + +#~ msgid "Path" +#~ msgstr "Directório" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Por favor aguarde: Equipamento a reiniciar..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Aviso: Existem alterações não salvas que serão perdidas durante a " +#~ "reinicialização!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3860,9 +4021,6 @@ msgstr "« Voltar" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aqui pode configurar os dispositivos wifi instalados. " -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignorar <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po index 3692b7de5..cb2b7d532 100644 --- a/modules/luci-base/po/ro/base.po +++ b/modules/luci-base/po/ro/base.po @@ -45,6 +45,9 @@ msgstr "Incarcarea in ultimul minut" msgid "15 Minute Load:" msgstr "Incarcarea in ultimele 15 minute" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Incarcarea in ultimele 5 minute" @@ -202,6 +205,9 @@ msgstr "Adauga interfata noua.." msgid "Additional Hosts files" msgstr "Fisiere de tip hosts aditionale" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -265,6 +271,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Antena 1" @@ -321,6 +333,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Disponibil" @@ -330,6 +357,9 @@ msgstr "Pachete disponibile" msgid "Average:" msgstr "Medie:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -402,6 +432,11 @@ msgstr "Broadcom BCM%04x 802.11 Controller Fara Fir" msgid "Buffered" msgstr "Incarcat" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Butoane" @@ -438,6 +473,9 @@ msgstr "Canal" msgid "Check" msgstr "Verificare" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Suma de verificare" @@ -552,6 +590,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -625,9 +671,6 @@ msgstr "" msgid "Delete" msgstr "Sterge" -msgid "Delete this interface" -msgstr "Sterge aceasta interfata" - msgid "Delete this network" msgstr "Sterge aceasta retea" @@ -646,6 +689,12 @@ msgstr "Dispozitiv" msgid "Device Configuration" msgstr "Configurarea dispozitivului" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosticuri" @@ -686,6 +735,9 @@ msgstr "Optimizarea distantei" msgid "Distance to farthest network member in meters." msgstr "Distanta catre cel mai departat membru din retea in metri." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversitate" @@ -747,6 +799,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -855,6 +910,9 @@ msgstr "Server de log-uri extern" msgid "External system log server port" msgstr "Portul serverului de log-uri extern" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -876,6 +934,11 @@ msgstr "Filtreaza privatele" msgid "Filter useless" msgstr "Filtreaza nefolositele" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Gaseste si alatura in retea" @@ -900,9 +963,6 @@ msgstr "Versiunea de firmware" msgid "Fixed source port for outbound DNS queries" msgstr "Portul sursa pentru intrebarile DNS catre exterior" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "Rescrie firmware" @@ -934,6 +994,9 @@ msgstr "Forteaza TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forteaza TKIP si CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -973,6 +1036,12 @@ msgstr "Setari principale" msgid "General Setup" msgstr "Configurare generala" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -982,6 +1051,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "Confirmarea parolei nu se potriveste cu prima, parola neschimbata !" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1081,6 +1153,9 @@ msgstr "" msgid "IPv4 only" msgstr "Doar IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1170,7 +1245,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1185,6 +1260,11 @@ msgstr "Imagine" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1366,6 +1446,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1387,6 +1470,9 @@ msgstr "Incarcarea medie" msgid "Loading" msgstr "Incarcare" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Adresa IPv4 locala" @@ -1454,6 +1540,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1468,6 +1557,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Rata maxima" @@ -1486,6 +1578,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1551,12 +1648,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1575,6 +1678,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1674,6 +1780,9 @@ msgstr "Nu este conectat" msgid "Note: Configuration files will be erased." msgstr "Nota: fisierele de configurare vor fi sterse." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Notificare" @@ -1796,9 +1905,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Pachetul libiwinfo este necesar !" @@ -1826,9 +1944,6 @@ msgstr "Parola cheii private" msgid "Password successfully changed!" msgstr "Parola schimbata cu succes !" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Calea catre certificatul CA" @@ -1844,6 +1959,9 @@ msgstr "Calea catre executabilul care se ocupa de evenimentul butonului" msgid "Peak:" msgstr "Maxim:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Restarteaza" @@ -1865,9 +1983,6 @@ msgstr "Packete." msgid "Please enter your username and password." msgstr "Introdu utilizatorul si parola." -msgid "Please wait: Device rebooting..." -msgstr "Asteapta: dispozitivul se restarteaza.." - msgid "Policy" msgstr "" @@ -2133,9 +2248,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "Regula #" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2153,6 +2265,15 @@ msgstr "" msgid "SSH Access" msgstr "Acces SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "Cheile SSH" @@ -2242,6 +2363,9 @@ msgstr "Semnal:" msgid "Size" msgstr "Marime" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2492,6 +2616,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2542,6 +2669,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2693,6 +2826,9 @@ msgstr "Eroare necunoscuta, parola neschimbata !" msgid "Unmanaged" msgstr "Neadministrate" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Modificari nesalvate" @@ -2852,11 +2988,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Avertizare" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Atentie: exista modificari nesalvate care vor fi pierdute la restart !" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3080,6 +3219,20 @@ msgstr "da" msgid "« Back" msgstr "« Inapoi" +#~ msgid "Delete this interface" +#~ msgstr "Sterge aceasta interfata" + +#~ msgid "Rule #" +#~ msgstr "Regula #" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Asteapta: dispozitivul se restarteaza.." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Atentie: exista modificari nesalvate care vor fi pierdute la restart !" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po index 94fa6fb8e..0a1cfeae8 100644 --- a/modules/luci-base/po/ru/base.po +++ b/modules/luci-base/po/ru/base.po @@ -48,6 +48,9 @@ msgstr "Загрузка за 1 минуту:" msgid "15 Minute Load:" msgstr "Загрузка за 15 минут:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Загрузка за 5 минут:" @@ -212,6 +215,9 @@ msgstr "Добавить новый интерфейс..." msgid "Additional Hosts files" msgstr "Дополнительные файлы hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Адрес" @@ -277,6 +283,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Антенна 1" @@ -333,6 +345,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Доступно" @@ -342,6 +369,9 @@ msgstr "Доступные пакеты" msgid "Average:" msgstr "Средняя:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +448,11 @@ msgstr "Беспроводной 802.11 контроллер Broadcom BCM%04x" msgid "Buffered" msgstr "Буферизировано" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Кнопки" @@ -454,6 +489,9 @@ msgstr "Канал" msgid "Check" msgstr "Проверить" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Контрольная сумма" @@ -576,6 +614,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -653,9 +699,6 @@ msgstr "" msgid "Delete" msgstr "Удалить" -msgid "Delete this interface" -msgstr "Удалить этот интерфейс" - msgid "Delete this network" msgstr "Удалить эту сеть" @@ -674,6 +717,12 @@ msgstr "Устройство" msgid "Device Configuration" msgstr "Конфигурация устройства" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Диагностика" @@ -714,6 +763,9 @@ msgstr "Оптимизация расстояния" msgid "Distance to farthest network member in meters." msgstr "Расстояние до самого удалённого сетевого узла в метрах." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Разновидность антенн" @@ -789,6 +841,9 @@ msgstr "" "Динамически выделять DHCP-адреса клиентам. Если выключено, то будут " "обслужены только клиенты с постоянно арендованными адресами." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Метод EAP" @@ -903,6 +958,9 @@ msgstr "Сервер системного журнала" msgid "External system log server port" msgstr "Порт сервера системного журнала" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Быстрые кадры" @@ -924,6 +982,11 @@ msgstr "Фильтровать частные" msgid "Filter useless" msgstr "Фильтровать бесполезные" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Найти и присоединиться к сети" @@ -948,9 +1011,6 @@ msgstr "Версия прошивки" msgid "Fixed source port for outbound DNS queries" msgstr "Фиксированный порт для исходящих DNS-запросов" -msgid "Flags" -msgstr "Флаги" - msgid "Flash Firmware" msgstr "Установить прошивку" @@ -982,6 +1042,9 @@ msgstr "Требовать TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP или CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Перенаправлять трафик DHCP" @@ -1021,6 +1084,12 @@ msgstr "Основные настройки" msgid "General Setup" msgstr "Основные настройки" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Создать архив" @@ -1030,6 +1099,9 @@ msgstr "Беспроводной 802.11%s контроллер" msgid "Given password confirmation did not match, password not changed!" msgstr "Введённые пароли не совпадают, пароль не изменён!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1132,6 +1204,9 @@ msgstr "Маска сети IPv4" msgid "IPv4 only" msgstr "Только IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Длина префикса IPv4" @@ -1231,8 +1306,8 @@ msgstr "" "устройство, на котором располагается раздел подкачки, работает гораздо " "медленнее, чем <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Игнорировать файлы hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Ignore <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Игнорировать интерфейс" @@ -1246,6 +1321,11 @@ msgstr "Образ" msgid "In" msgstr "В" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Таймаут бездействия" @@ -1431,6 +1511,9 @@ msgstr "" "Список <abbr title=\"Domain Name System\">DNS</abbr>-серверов для " "перенаправления запросов" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Список доменов, для которых разрешены ответы RFC1918" @@ -1452,6 +1535,9 @@ msgstr "Средняя загрузка" msgid "Loading" msgstr "Загрузка" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Локальный IPv4-адрес" @@ -1526,6 +1612,9 @@ msgstr "MAC-фильтр" msgid "MAC-List" msgstr "Список MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "МБ/с" @@ -1540,6 +1629,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Максимальная скорость" @@ -1558,6 +1650,11 @@ msgstr "Максимальное время ожидания готовност msgid "Maximum hold time" msgstr "Максимальное время удержания" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Максимальное количество арендованных адресов." @@ -1626,12 +1723,18 @@ msgstr "" "Точки монтирования определяют, куда в файловой системе будет прикреплено " "запоминающее устройство" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Опции монтирования" msgid "Mount point" msgstr "Точка монтирования" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Смонтированные файловые системы" @@ -1650,6 +1753,9 @@ msgstr "Адрес групповой передачи" msgid "NAS ID" msgstr "Идентификатор NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1749,6 +1855,9 @@ msgstr "Не подключено" msgid "Note: Configuration files will be erased." msgstr "Примечание: конфигурационные файлы будут стёрты." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Заметка" @@ -1879,9 +1988,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPTP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Требуется пакет libiwinfo!" @@ -1909,9 +2027,6 @@ msgstr "Пароль или закрытый ключ" msgid "Password successfully changed!" msgstr "Пароль успешно изменён!" -msgid "Path" -msgstr "Путь" - msgid "Path to CA-Certificate" msgstr "Путь к центру сертификации" @@ -1927,6 +2042,9 @@ msgstr "Путь к программе, обрабатывающей нажат msgid "Peak:" msgstr "Пиковая:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Выполнить перезагрузку" @@ -1948,9 +2066,6 @@ msgstr "Пакетов." msgid "Please enter your username and password." msgstr "Пожалуйста, введите логин и пароль." -msgid "Please wait: Device rebooting..." -msgstr "Пожалуйста подождите: устройство перезагружается..." - msgid "Policy" msgstr "Политика" @@ -2232,9 +2347,6 @@ msgstr "" "Маршрутизация служит для определения через какой интерфейс и шлюз можно " "достичть определённого хоста или сети." -msgid "Rule #" -msgstr "Правило №" - msgid "Run a filesystem check before mounting the device" msgstr "Проверять файловую систему перед монтированием устройства" @@ -2252,6 +2364,15 @@ msgstr "" msgid "SSH Access" msgstr "Доступ по SSH" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-ключи" @@ -2343,6 +2464,9 @@ msgstr "Сигнал:" msgid "Size" msgstr "Размер" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Пропустить" @@ -2633,6 +2757,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Для выбранного протокола необходимо задать устройство" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2693,6 +2820,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4-адрес ретранслятора" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2860,6 +2993,9 @@ msgstr "Неизвестная ошибка, пароль не был измен msgid "Unmanaged" msgstr "Неуправляемый" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Непринятые изменения" @@ -3027,13 +3163,14 @@ msgstr "Ожидание применения изменений..." msgid "Waiting for command to complete..." msgstr "Ожидание завершения выполнения команды..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Внимание" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Внимание: есть несохранённые изменения, которые потеряются после " -"перезагрузки!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3267,6 +3404,30 @@ msgstr "да" msgid "« Back" msgstr "« Назад" +#~ msgid "Delete this interface" +#~ msgstr "Удалить этот интерфейс" + +#~ msgid "Flags" +#~ msgstr "Флаги" + +#~ msgid "Rule #" +#~ msgstr "Правило №" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Игнорировать файлы hosts" + +#~ msgid "Path" +#~ msgstr "Путь" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Пожалуйста подождите: устройство перезагружается..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Внимание: есть несохранённые изменения, которые потеряются после " +#~ "перезагрузки!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4101,9 +4262,6 @@ msgstr "« Назад" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Здесь вы можете настроить установленные Wi-Fi устройства." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Ignore <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Незаыисимая (Ad-Hoc)" diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po index d943ccb89..a536bb19f 100644 --- a/modules/luci-base/po/sk/base.po +++ b/modules/luci-base/po/sk/base.po @@ -41,6 +41,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -190,6 +193,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -250,6 +256,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "" @@ -306,6 +318,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "" @@ -315,6 +342,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -387,6 +417,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -423,6 +458,9 @@ msgstr "" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "" @@ -534,6 +572,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -607,9 +653,6 @@ msgstr "" msgid "Delete" msgstr "" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -628,6 +671,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -666,6 +715,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -727,6 +779,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -835,6 +890,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -856,6 +914,11 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -880,9 +943,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "" @@ -913,6 +973,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -952,6 +1015,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -961,6 +1030,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1058,6 +1130,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1147,7 +1222,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1162,6 +1237,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1340,6 +1420,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1361,6 +1444,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1428,6 +1514,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1442,6 +1531,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1460,6 +1552,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1525,12 +1622,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1549,6 +1652,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1648,6 +1754,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1770,9 +1879,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1800,9 +1918,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1818,6 +1933,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "" @@ -1839,9 +1957,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2105,9 +2220,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2125,6 +2237,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2213,6 +2334,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2463,6 +2587,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2511,6 +2638,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2662,6 +2795,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "" @@ -2819,10 +2955,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po index 86fa224e7..1ac3f6c7a 100644 --- a/modules/luci-base/po/sv/base.po +++ b/modules/luci-base/po/sv/base.po @@ -44,6 +44,9 @@ msgstr "Belastning senaste minuten:" msgid "15 Minute Load:" msgstr "Belastning senaste 15 minutrarna:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Belastning senaste 5 minutrarna:" @@ -196,6 +199,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -256,6 +262,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "" @@ -312,6 +324,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "" @@ -321,6 +348,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -393,6 +423,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -429,6 +464,9 @@ msgstr "" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "" @@ -540,6 +578,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -613,9 +659,6 @@ msgstr "" msgid "Delete" msgstr "" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -634,6 +677,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -672,6 +721,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -733,6 +785,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -841,6 +896,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -862,6 +920,11 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -886,9 +949,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "" @@ -919,6 +979,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -958,6 +1021,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -967,6 +1036,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1064,6 +1136,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1153,7 +1228,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1168,6 +1243,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1346,6 +1426,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1367,6 +1450,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1434,6 +1520,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1448,6 +1537,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1466,6 +1558,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1531,12 +1628,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1555,6 +1658,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1654,6 +1760,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1776,9 +1885,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1806,9 +1924,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1824,6 +1939,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "" @@ -1845,9 +1963,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2111,9 +2226,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2131,6 +2243,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2219,6 +2340,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2469,6 +2593,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2517,6 +2644,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2668,6 +2801,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "" @@ -2825,10 +2961,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot index 21ec6571e..baa17773f 100644 --- a/modules/luci-base/po/templates/base.pot +++ b/modules/luci-base/po/templates/base.pot @@ -34,6 +34,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -183,6 +186,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -243,6 +249,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "" @@ -299,6 +311,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "" @@ -308,6 +335,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -380,6 +410,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -416,6 +451,9 @@ msgstr "" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "" @@ -527,6 +565,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -600,9 +646,6 @@ msgstr "" msgid "Delete" msgstr "" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -621,6 +664,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -659,6 +708,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -720,12 +772,20 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" msgid "Edit" msgstr "" +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + msgid "Edit this interface" msgstr "" @@ -823,6 +883,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -844,6 +907,11 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -868,9 +936,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "" @@ -901,6 +966,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -940,6 +1008,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -949,6 +1023,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1046,6 +1123,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1135,7 +1215,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1150,6 +1230,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1328,6 +1413,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1349,6 +1437,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1416,6 +1507,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1430,6 +1524,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1448,6 +1545,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1513,12 +1615,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1537,6 +1645,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1636,6 +1747,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1758,9 +1872,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1788,9 +1911,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1806,6 +1926,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "" @@ -1827,9 +1950,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2093,9 +2213,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2113,6 +2230,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2201,6 +2327,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2394,6 +2523,9 @@ msgid "" "code> and <code>_</code>" msgstr "" +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + msgid "" "The device file of the memory or partition (<abbr title=\"for example\">e.g." "</abbr> <code>/dev/sda1</code>)" @@ -2448,6 +2580,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2496,6 +2631,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2647,6 +2788,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "" @@ -2804,10 +2948,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po index 1bf53aa57..6a5a0b212 100644 --- a/modules/luci-base/po/tr/base.po +++ b/modules/luci-base/po/tr/base.po @@ -44,6 +44,9 @@ msgstr "1 Dakikalık Yük:" msgid "15 Minute Load:" msgstr "15 Dakikalık Yük:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 Dakikalık Yük:" @@ -201,6 +204,9 @@ msgstr "Yeni arabirim ekle..." msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresler" @@ -263,6 +269,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "1. Anten" @@ -319,6 +331,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Kullanılabilir" @@ -328,6 +355,9 @@ msgstr "Kullanılabilir Paketler" msgid "Average:" msgstr "Ortalama:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -400,6 +430,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -436,6 +471,9 @@ msgstr "" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "" @@ -547,6 +585,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -620,9 +666,6 @@ msgstr "" msgid "Delete" msgstr "" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -641,6 +684,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -679,6 +728,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -740,6 +792,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -848,6 +903,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "" @@ -869,6 +927,11 @@ msgstr "" msgid "Filter useless" msgstr "" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -893,9 +956,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "" - msgid "Flash Firmware" msgstr "" @@ -926,6 +986,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -965,6 +1028,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -974,6 +1043,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1071,6 +1143,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1160,7 +1235,7 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore <code>/etc/hosts</code>" msgstr "" msgid "Ignore interface" @@ -1175,6 +1250,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1353,6 +1433,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1374,6 +1457,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1441,6 +1527,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1455,6 +1544,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1473,6 +1565,11 @@ msgstr "" msgid "Maximum hold time" msgstr "" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1538,12 +1635,18 @@ msgid "" "filesystem" msgstr "" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "" @@ -1562,6 +1665,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1661,6 +1767,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1783,9 +1892,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1813,9 +1931,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1831,6 +1946,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "" @@ -1852,9 +1970,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2118,9 +2233,6 @@ msgid "" "can be reached." msgstr "" -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2138,6 +2250,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2226,6 +2347,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2476,6 +2600,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2524,6 +2651,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2675,6 +2808,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "" @@ -2832,10 +2968,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po index c5483221c..df2964a7d 100644 --- a/modules/luci-base/po/uk/base.po +++ b/modules/luci-base/po/uk/base.po @@ -45,6 +45,9 @@ msgstr "Навантаження за 1 хвилину:" msgid "15 Minute Load:" msgstr "Навантаження за 15 хвилин:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Навантаження за 5 хвилин:" @@ -222,6 +225,9 @@ msgstr "Додати новий інтерфейс..." msgid "Additional Hosts files" msgstr "Додаткові файли hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Адреса" @@ -287,6 +293,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "Антена 1" @@ -343,6 +355,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Доступно" @@ -352,6 +379,9 @@ msgstr "Доступні пакети" msgid "Average:" msgstr "Середнє значення:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -427,6 +457,11 @@ msgstr "Бездротовий 802.11 контролер Broadcom BCM%04x" msgid "Buffered" msgstr "Буферизовано" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Кнопки" @@ -463,6 +498,9 @@ msgstr "Канал" msgid "Check" msgstr "Перевірити" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Контрольна сума" @@ -585,6 +623,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -663,9 +709,6 @@ msgstr "" msgid "Delete" msgstr "Видалити" -msgid "Delete this interface" -msgstr "Видалити цей інтерфейс" - msgid "Delete this network" msgstr "Видалити цю мережу" @@ -684,6 +727,12 @@ msgstr "Пристрій" msgid "Device Configuration" msgstr "Конфігурація пристрою" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Діагностика" @@ -724,6 +773,9 @@ msgstr "Оптимізація за відстанню" msgid "Distance to farthest network member in meters." msgstr "Відстань до найвіддаленішого вузла мережі в метрах." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Різновидність" @@ -801,6 +853,9 @@ msgstr "" "Динамічне виділення DHCP-адрес для клієнтів. Якщо вимкнути, будуть " "обслуговуватися тільки клієнти, які мають статичні оренди." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Метод" @@ -911,6 +966,9 @@ msgstr "Зовнішній сервер системного журналу" msgid "External system log server port" msgstr "Порт зовнішнього сервера системного журналу" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Швидкі фрейми" @@ -932,6 +990,11 @@ msgstr "Фільтрувати приватні" msgid "Filter useless" msgstr "Фільтрувати непридатні" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "Знайти мережу й приєднатися" @@ -956,9 +1019,6 @@ msgstr "Версія прошивки" msgid "Fixed source port for outbound DNS queries" msgstr "Фіксований порт для вихідних DNS-запитів" -msgid "Flags" -msgstr "Позначки" - msgid "Flash Firmware" msgstr "Заливаємо прошивку" @@ -989,6 +1049,9 @@ msgstr "Примусово TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Примусово TKIP та CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Спрямовувати DHCP-трафік" @@ -1028,6 +1091,12 @@ msgstr "Загальні настройки" msgid "General Setup" msgstr "Загальні настройки" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "Cтворити архів" @@ -1037,6 +1106,9 @@ msgstr "Бездротовий 802.11%s контролер" msgid "Given password confirmation did not match, password not changed!" msgstr "Оскільки пароль і підтвердження не співпадають, то пароль не змінено!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1140,6 +1212,9 @@ msgstr "Маска мережі IPv4" msgid "IPv4 only" msgstr "Тільки IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Довжина префікса IPv4" @@ -1239,8 +1314,8 @@ msgstr "" "своп-пристрої не можуть бути доступні з такою високою швидкістю, як <abbr " "title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "Ігнорувати файли hosts" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "Ігнорувати интерфейс" @@ -1254,6 +1329,11 @@ msgstr "Образ" msgid "In" msgstr "Вх." +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Тайм-аут бездіяльності" @@ -1438,6 +1518,9 @@ msgstr "" "Список <abbr title=\"Domain Name System\">DNS</abbr>-серверів, до яких " "пересилати запити" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "Список доменів, для яких дозволені RFC1918-відповіді" @@ -1461,6 +1544,9 @@ msgstr "Середнє навантаження" msgid "Loading" msgstr "Завантаження" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "Локальна адреса IPv4" @@ -1535,6 +1621,9 @@ msgstr "MAC-фільтр" msgid "MAC-List" msgstr "MAC-список" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MБ/с" @@ -1549,6 +1638,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Максимальна швидкість" @@ -1567,6 +1659,11 @@ msgstr "Максимальний час очікування готовност msgid "Maximum hold time" msgstr "Максимальний час утримування" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "Максимальна кількість орендованих адрес." @@ -1634,12 +1731,18 @@ msgstr "" "Точки монтування визначають, до якої точки пристрою пам'яті буде прикріплена " "файлова система" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "Опції монтування" msgid "Mount point" msgstr "Точка монтування" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Змонтовані файлові системи" @@ -1658,6 +1761,9 @@ msgstr "Адреса багатоадресного потоку" msgid "NAS ID" msgstr "Ідентифікатор NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1757,6 +1863,9 @@ msgstr "Не підключено" msgid "Note: Configuration files will be erased." msgstr "Примітка: конфігураційні файли будуть видалені." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "Попередження" @@ -1890,9 +1999,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Потрібен пакет libiwinfo!" @@ -1920,9 +2038,6 @@ msgstr "Пароль закритого ключа" msgid "Password successfully changed!" msgstr "Пароль успішно змінено!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Шлях до центру сертифікції" @@ -1938,6 +2053,9 @@ msgstr "Шлях до програми, яка обробляє натискан msgid "Peak:" msgstr "Пік:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Виконати перезавантаження" @@ -1959,9 +2077,6 @@ msgstr "пакетів" msgid "Please enter your username and password." msgstr "Введіть ім'я користувача і пароль" -msgid "Please wait: Device rebooting..." -msgstr "Зачекайте. Пристрій перезавантажується..." - msgid "Policy" msgstr "Політика" @@ -2245,9 +2360,6 @@ msgstr "" "Маршрути визначають через який інтерфейс і шлюз можна досягнути певного " "вузла або мережі." -msgid "Rule #" -msgstr "Правило #" - msgid "Run a filesystem check before mounting the device" msgstr "Виконати перевірку файлової системи перед монтуванням пристрою" @@ -2265,6 +2377,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH-доступ" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-ключі" @@ -2356,6 +2477,9 @@ msgstr "Сигнал:" msgid "Size" msgstr "Розмір" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Пропустити" @@ -2647,6 +2771,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Обраний протокол потребує призначених пристроїв" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2708,6 +2835,12 @@ msgid "This IPv4 address of the relay" msgstr "Це IPv4-адреса ретранслятора" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2876,6 +3009,9 @@ msgstr "Невідома помилка, пароль не змінився!" msgid "Unmanaged" msgstr "Некерований" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Незбережені зміни" @@ -3042,11 +3178,14 @@ msgstr "Очікуємо, доки зміни наберуть чинності. msgid "Waiting for command to complete..." msgstr "Очікуємо завершення виконання команди..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Застереження" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Увага: Є незбережені зміни, які будуть втрачені при перезавантаженні!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3280,6 +3419,26 @@ msgstr "так" msgid "« Back" msgstr "« Назад" +#~ msgid "Delete this interface" +#~ msgstr "Видалити цей інтерфейс" + +#~ msgid "Flags" +#~ msgstr "Позначки" + +#~ msgid "Rule #" +#~ msgstr "Правило #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ігнорувати файли hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Зачекайте. Пристрій перезавантажується..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Увага: Є незбережені зміни, які будуть втрачені при перезавантаженні!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po index d81be16eb..56abb3c05 100644 --- a/modules/luci-base/po/vi/base.po +++ b/modules/luci-base/po/vi/base.po @@ -46,6 +46,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -197,6 +200,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -257,6 +263,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "" @@ -313,6 +325,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "Sẵn có" @@ -322,6 +349,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -394,6 +424,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -430,6 +465,9 @@ msgstr "Kênh" msgid "Check" msgstr "" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "Checksum" @@ -541,6 +579,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -616,9 +662,6 @@ msgstr "" msgid "Delete" msgstr "Xóa" -msgid "Delete this interface" -msgstr "" - msgid "Delete this network" msgstr "" @@ -637,6 +680,12 @@ msgstr "Công cụ" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -675,6 +724,9 @@ msgstr "Khoảng cách tối ưu" msgid "Distance to farthest network member in meters." msgstr "Khoảng cách tới thành viên xa nhất trong mạng lưới tính bằng mét" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Tính đa dạng" @@ -745,6 +797,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -853,6 +908,9 @@ msgstr "" msgid "External system log server port" msgstr "" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "Khung nhanh" @@ -874,6 +932,11 @@ msgstr "Filter private" msgid "Filter useless" msgstr "Lọc không hữu dụng" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "" @@ -898,9 +961,6 @@ msgstr "" msgid "Fixed source port for outbound DNS queries" msgstr "" -msgid "Flags" -msgstr "Cờ" - msgid "Flash Firmware" msgstr "Phần cứng flash" @@ -931,6 +991,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -970,6 +1033,12 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "" @@ -979,6 +1048,9 @@ msgstr "" msgid "Given password confirmation did not match, password not changed!" msgstr "" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1078,6 +1150,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1172,8 +1247,8 @@ msgstr "" "một quá trình rất chậm vì một thiết bị swap không thể được truy cập với " "datarates cao hơn của <abbr title=\"Random Access Memory\">RAM</abbr>." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "Lờ đi <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "Lờ đi giao diện" @@ -1187,6 +1262,11 @@ msgstr "" msgid "In" msgstr "Trong" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1368,6 +1448,9 @@ msgid "" "requests to" msgstr "" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "" @@ -1389,6 +1472,9 @@ msgstr "" msgid "Loading" msgstr "" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "" @@ -1456,6 +1542,9 @@ msgstr "Lọc MAC" msgid "MAC-List" msgstr "Danh sách MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1470,6 +1559,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Mức cao nhất" @@ -1488,6 +1580,11 @@ msgstr "" msgid "Maximum hold time" msgstr "Mức cao nhất" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "" @@ -1555,12 +1652,18 @@ msgstr "" "Số điểm lắp xác định tại một điểm mà ở đó bộ nhớ sẽ được gắn vào hệ thống " "tập tin" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "" msgid "Mount point" msgstr "" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "Lắp tập tin hệ thống" @@ -1579,6 +1682,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1678,6 +1784,9 @@ msgstr "" msgid "Note: Configuration files will be erased." msgstr "" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "" @@ -1806,9 +1915,18 @@ msgstr "" msgid "PPPoE" msgstr "" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1836,9 +1954,6 @@ msgstr "Mật mã của private key" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Đường dẫn" - msgid "Path to CA-Certificate" msgstr "Đường dẫn tới CA-Certificate" @@ -1854,6 +1969,9 @@ msgstr "" msgid "Peak:" msgstr "" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "Tiến hành reboot" @@ -1875,9 +1993,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "Nhập tên và mật mã" -msgid "Please wait: Device rebooting..." -msgstr "Xin chờ: Công cụ đang reboot" - msgid "Policy" msgstr "Chính sách" @@ -2145,9 +2260,6 @@ msgstr "" "Routes chỉ định trên giao diện và cổng một host nhất định hay network được " "tiếp cận." -msgid "Rule #" -msgstr "" - msgid "Run a filesystem check before mounting the device" msgstr "" @@ -2165,6 +2277,15 @@ msgstr "" msgid "SSH Access" msgstr "" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "" @@ -2253,6 +2374,9 @@ msgstr "" msgid "Size" msgstr "Dung lượng " +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2507,6 +2631,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2561,6 +2688,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2717,6 +2850,9 @@ msgstr "" msgid "Unmanaged" msgstr "" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "Thay đổi không lưu" @@ -2874,11 +3010,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Cảnh báo: Các thay đổi chưa lưu sẽ bị mất trong khi khởi động lại!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3109,6 +3248,19 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "Flags" +#~ msgstr "Cờ" + +#~ msgid "Path" +#~ msgstr "Đường dẫn" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Xin chờ: Công cụ đang reboot" + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Cảnh báo: Các thay đổi chưa lưu sẽ bị mất trong khi khởi động lại!" + #~ msgid "Frequency Hopping" #~ msgstr "Tần số Hopping" @@ -3685,9 +3837,6 @@ msgstr "" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ở đây bạn có thể định cấu hình của công cụ wifi được cài đặt." -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "Lờ đi <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Độc lập (Ad-Hoc)" diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po index 72bf93795..d3b4034b3 100644 --- a/modules/luci-base/po/zh-cn/base.po +++ b/modules/luci-base/po/zh-cn/base.po @@ -45,6 +45,9 @@ msgstr "1分钟负载:" msgid "15 Minute Load:" msgstr "15分钟负载:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5分钟负载:" @@ -200,6 +203,9 @@ msgstr "添加新接口..." msgid "Additional Hosts files" msgstr "额外的HOSTS文件" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "地址" @@ -262,6 +268,12 @@ msgstr "广播的DNS域名" msgid "Announced DNS servers" msgstr "广播的DNS服务器" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "天线 1" @@ -318,6 +330,21 @@ msgstr "自动" msgid "Automatic Homenet (HNCP)" msgstr "自动家庭网络(HNCP)" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "可用" @@ -327,6 +354,9 @@ msgstr "可用软件包" msgid "Average:" msgstr "平均:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -401,6 +431,11 @@ msgstr "Broadcom BCM%04x 802.11 无线网卡" msgid "Buffered" msgstr "已缓冲" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "按键" @@ -437,6 +472,9 @@ msgstr "信道" msgid "Check" msgstr "检查" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "校验值" @@ -548,6 +586,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "自定义分配的IPv6前缀" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "自定义<abbr title=\"Light Emitting Diode\">LED</abbr>的活动状态。" @@ -623,9 +669,6 @@ msgstr "" msgid "Delete" msgstr "删除" -msgid "Delete this interface" -msgstr "删除此接口" - msgid "Delete this network" msgstr "删除此网络" @@ -644,6 +687,12 @@ msgstr "设备" msgid "Device Configuration" msgstr "设备配置" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "网络诊断" @@ -683,6 +732,9 @@ msgstr "距离优化" msgid "Distance to farthest network member in meters." msgstr "最远客户端的距离(米)。" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "分集" @@ -746,6 +798,9 @@ msgid "" "having static leases will be served." msgstr "动态分配DHCP地址。如果禁用,则只能为静态租用表中的客户端提供网络服务。" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -855,6 +910,9 @@ msgstr "远程log服务器" msgid "External system log server port" msgstr "远程log服务器端口" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "快速帧" @@ -876,6 +934,11 @@ msgstr "过滤本地包" msgid "Filter useless" msgstr "过滤无用包" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "搜索并加入网络" @@ -900,9 +963,6 @@ msgstr "固件版本" msgid "Fixed source port for outbound DNS queries" msgstr "指定的DNS查询源端口" -msgid "Flags" -msgstr "标识" - msgid "Flash Firmware" msgstr "刷新固件" @@ -933,6 +993,9 @@ msgstr "强制使用TKIP加密" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP和CCMP(AES)混合加密" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "转发DHCP数据包" @@ -972,6 +1035,12 @@ msgstr "基本设置" msgid "General Setup" msgstr "基本设置" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "生成备份" @@ -981,6 +1050,9 @@ msgstr "Generic 802.11%s 无线网卡" msgid "Given password confirmation did not match, password not changed!" msgstr "由于密码验证不匹配,密码没有更改!" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "全局网络选项" @@ -1078,6 +1150,9 @@ msgstr "IPv4子网掩码" msgid "IPv4 only" msgstr "仅IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4地址前缀长度" @@ -1167,8 +1242,8 @@ msgid "" "of the <abbr title=\"Random Access Memory\">RAM</abbr>." msgstr "如果物理内存不足,闲置数据可自动移到交换区暂存,以提高可用内存。" -msgid "Ignore Hosts files" -msgstr "忽略HOSTS文件" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "忽略 <code>/etc/hosts</code>" msgid "Ignore interface" msgstr "关闭DHCP" @@ -1182,6 +1257,11 @@ msgstr "固件文件" msgid "In" msgstr "入口" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "活动超时" @@ -1361,6 +1441,9 @@ msgid "" "requests to" msgstr "将指定的域名DNS解析转发到指定的DNS服务器(按照示例填写)" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "允许RFC1918响应的域名列表" @@ -1382,6 +1465,9 @@ msgstr "平均负载" msgid "Loading" msgstr "加载中" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "本地IPv4地址" @@ -1450,6 +1536,9 @@ msgstr "MAC-过滤" msgid "MAC-List" msgstr "MAC-列表" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1464,6 +1553,9 @@ msgid "" "below:" msgstr "请确认你已经复制过整个根文件系统,例如使用以下命令:" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最高速率" @@ -1482,6 +1574,11 @@ msgstr "调制解调器就绪的最大等待时间(秒)" msgid "Maximum hold time" msgstr "最大持续时间" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "最大地址分配数量。" @@ -1547,12 +1644,18 @@ msgid "" "filesystem" msgstr "配置存储设备挂载到文件系统中的位置和参数。" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "挂载选项" msgid "Mount point" msgstr "挂载点" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "已挂载的文件系统" @@ -1571,6 +1674,9 @@ msgstr "多播地址" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "NDP-代理" @@ -1670,6 +1776,9 @@ msgstr "未连接" msgid "Note: Configuration files will be erased." msgstr "注意:配置文件将被删除。" +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "注意" @@ -1792,9 +1901,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "需要libiwinfo软件包!" @@ -1822,9 +1940,6 @@ msgstr "私有密钥" msgid "Password successfully changed!" msgstr "密码修改成功!" -msgid "Path" -msgstr "路径" - msgid "Path to CA-Certificate" msgstr "CA证书路径" @@ -1840,6 +1955,9 @@ msgstr "处理按键动作的可执行文件路径" msgid "Peak:" msgstr "峰值:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "执行重启" @@ -1861,9 +1979,6 @@ msgstr "数据包" msgid "Please enter your username and password." msgstr "请输入用户名和密码。" -msgid "Please wait: Device rebooting..." -msgstr "请稍等:设备重启中..." - msgid "Policy" msgstr "策略" @@ -2138,9 +2253,6 @@ msgid "" "can be reached." msgstr "路由表描述了数据包的可达路径。" -msgid "Rule #" -msgstr "规则 #" - msgid "Run a filesystem check before mounting the device" msgstr "挂载设备前运行文件系统检查" @@ -2158,6 +2270,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH访问" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-密钥" @@ -2247,6 +2368,9 @@ msgstr "信号:" msgid "Size" msgstr "大小" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "跳过" @@ -2518,6 +2642,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "所选的协议需要分配设备" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2569,6 +2696,12 @@ msgid "This IPv4 address of the relay" msgstr "中继的IPv4地址" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2724,6 +2857,9 @@ msgstr "未知错误,密码未更改!" msgid "Unmanaged" msgstr "不配置协议" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "未保存的配置" @@ -2885,11 +3021,14 @@ msgstr "正在应用更改..." msgid "Waiting for command to complete..." msgstr "正在执行命令..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告: 有尚未保存的更改,重启将丢失!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3118,6 +3257,28 @@ msgstr "是" msgid "« Back" msgstr "« 后退" +#~ msgid "Delete this interface" +#~ msgstr "删除此接口" + +#~ msgid "Flags" +#~ msgstr "标识" + +#~ msgid "Rule #" +#~ msgstr "规则 #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "忽略HOSTS文件" + +#~ msgid "Path" +#~ msgstr "路径" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "请稍等:设备重启中..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告: 有尚未保存的更改,重启将丢失!" + #~ msgid "CPU frequency" #~ msgstr "CPU 频率" @@ -3906,9 +4067,6 @@ msgstr "« 后退" #~ "如果连接在已有网络,那么它会被<em>桥接</em>到现有接口,并且被所选的防火墙" #~ "区域覆盖。取消附加选项可以重定义此接口为新的独立网络。" -#~ msgid "Ignore <code>/etc/hosts</code>" -#~ msgstr "忽略 <code>/etc/hosts</code>" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "独立(点对点Ad-Hoc)" diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po index ec901b8af..330ec7b5d 100644 --- a/modules/luci-base/po/zh-tw/base.po +++ b/modules/luci-base/po/zh-tw/base.po @@ -44,6 +44,9 @@ msgstr "1分鐘負載" msgid "15 Minute Load:" msgstr "15分鐘負載" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5分鐘負載" @@ -200,6 +203,9 @@ msgstr "增加新界面" msgid "Additional Hosts files" msgstr "額外的HOST檔案" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "位置" @@ -260,6 +266,12 @@ msgstr "" msgid "Announced DNS servers" msgstr "" +msgid "Anonymous Mount" +msgstr "" + +msgid "Anonymous Swap" +msgstr "" + msgid "Antenna 1" msgstr "天線 1" @@ -316,6 +328,21 @@ msgstr "" msgid "Automatic Homenet (HNCP)" msgstr "" +msgid "Automatically check filesystem for errors before mounting" +msgstr "" + +msgid "Automatically mount filesystems on hotplug" +msgstr "" + +msgid "Automatically mount swap on hotplug" +msgstr "" + +msgid "Automount Filesystem" +msgstr "" + +msgid "Automount Swap" +msgstr "" + msgid "Available" msgstr "可用" @@ -325,6 +352,9 @@ msgstr "可用軟體包" msgid "Average:" msgstr "平均:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -399,6 +429,11 @@ msgstr "Broadcom BCM%04x 802.11 無線控制器" msgid "Buffered" msgstr "已緩衝" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "按鈕" @@ -435,6 +470,9 @@ msgstr "頻道" msgid "Check" msgstr "檢查" +msgid "Check fileystems before mount" +msgstr "" + msgid "Checksum" msgstr "效驗碼" @@ -552,6 +590,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode" "\">LED</abbr>s if possible." msgstr "" @@ -629,9 +675,6 @@ msgstr "" msgid "Delete" msgstr "刪除" -msgid "Delete this interface" -msgstr "刪除這個介面" - msgid "Delete this network" msgstr "刪除這個網路" @@ -650,6 +693,12 @@ msgstr "設備" msgid "Device Configuration" msgstr "設定設備" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "診斷" @@ -689,6 +738,9 @@ msgstr "最佳化距離" msgid "Distance to farthest network member in meters." msgstr "到最遠的網路距離以米表示." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "差異" @@ -757,6 +809,9 @@ msgid "" "having static leases will be served." msgstr "幫用戶端動態發配DHCP位址. 假如關閉的話,僅有有靜態位址的用戶端能被服務" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP協定驗證方式" @@ -866,6 +921,9 @@ msgstr "外部系統日誌伺服器" msgid "External system log server port" msgstr "外部系統日誌伺服器埠號" +msgid "Extra SSH command options" +msgstr "" + msgid "Fast Frames" msgstr "快速迅框群" @@ -887,6 +945,11 @@ msgstr "私人過濾器" msgid "Filter useless" msgstr "無用過濾器" +msgid "" +"Find all currently attached filesystems and swap and replace configuration " +"with defaults based on what was detected" +msgstr "" + msgid "Find and join network" msgstr "搜尋並加入網路" @@ -911,9 +974,6 @@ msgstr "防火牆版本" msgid "Fixed source port for outbound DNS queries" msgstr "外發DNS請求的固定埠號" -msgid "Flags" -msgstr "旗標" - msgid "Flash Firmware" msgstr "韌體更新" @@ -944,6 +1004,9 @@ msgstr "強制TKIP加密" msgid "Force TKIP and CCMP (AES)" msgstr "強制TKIP+CCMP (AES)加密" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "轉發DHCP流量" @@ -983,6 +1046,12 @@ msgstr "一般設定" msgid "General Setup" msgstr "一般設置" +msgid "General options for opkg" +msgstr "" + +msgid "Generate Config" +msgstr "" + msgid "Generate archive" msgstr "製作壓縮檔" @@ -992,6 +1061,9 @@ msgstr "通用 802.11%s 無線控制器" msgid "Given password confirmation did not match, password not changed!" msgstr "鍵入的密碼不吻合,密碼將不變更" +msgid "Global Settings" +msgstr "" + msgid "Global network options" msgstr "" @@ -1089,6 +1161,9 @@ msgstr "IPv4網路遮罩" msgid "IPv4 only" msgstr "僅用IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4前綴長度" @@ -1182,8 +1257,8 @@ msgstr "" "緩慢的過程,作為交換裝置不能用高數據速率訪問該<abbr title=\"Random Access " "Memory\">RAM</縮寫>" -msgid "Ignore Hosts files" -msgstr "被忽視的主機檔案" +msgid "Ignore <code>/etc/hosts</code>" +msgstr "" msgid "Ignore interface" msgstr "被忽視的介面" @@ -1197,6 +1272,11 @@ msgstr "映像檔" msgid "In" msgstr "輸入" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "閒置過期" @@ -1376,6 +1456,9 @@ msgid "" "requests to" msgstr "列出 <abbr title=\"Domain Name System\">DNS</abbr> 伺服器以便轉發請求" +msgid "List of SSH key files for auth" +msgstr "" + msgid "List of domains to allow RFC1918 responses for" msgstr "列出允許RFC1918文件虛擬IP回應的網域" @@ -1397,6 +1480,9 @@ msgstr "平均掛載" msgid "Loading" msgstr "掛載中" +msgid "Local IP address to assign" +msgstr "" + msgid "Local IPv4 address" msgstr "本地IPv4位址" @@ -1465,6 +1551,9 @@ msgstr "MAC-過濾" msgid "MAC-List" msgstr "MAC-清單" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1479,6 +1568,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最快速度" @@ -1497,6 +1589,11 @@ msgstr "等待數據機待命的最大秒數" msgid "Maximum hold time" msgstr "可持有最長時間" +msgid "" +"Maximum length of the name is 15 characters including the automatic protocol/" +"bridge prefix (br-, 6in4-, pppoe- etc.)" +msgstr "" + msgid "Maximum number of leased addresses." msgstr "釋放出的位址群最大數量" @@ -1562,12 +1659,18 @@ msgid "" "filesystem" msgstr "掛載各點定義所指定到記憶體設備將會被附載到檔案系統上" +msgid "Mount filesystems not specifically configured" +msgstr "" + msgid "Mount options" msgstr "掛載選項" msgid "Mount point" msgstr "掛載點" +msgid "Mount swap not specifically configured" +msgstr "" + msgid "Mounted file systems" msgstr "已掛載檔案系統" @@ -1586,6 +1689,9 @@ msgstr "多點群播位址" msgid "NAS ID" msgstr " 網路附存伺服器ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1685,6 +1791,9 @@ msgstr "尚未連線" msgid "Note: Configuration files will be erased." msgstr "注意:設定檔將被刪除." +msgid "Note: interface name length" +msgstr "" + msgid "Notice" msgstr "通知" @@ -1811,9 +1920,18 @@ msgstr "PPPoATM" msgid "PPPoE" msgstr "PPPoE" +msgid "PPPoSSH" +msgstr "" + msgid "PPtP" msgstr "PPtP點對點VPN虛擬私人隧道協定" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "軟體包必需有libiwinfo!" @@ -1841,9 +1959,6 @@ msgstr "私人金鑰密碼" msgid "Password successfully changed!" msgstr "密碼已變更成功!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "CA-證書的路徑" @@ -1859,6 +1974,9 @@ msgstr "處理按鍵效果可執行檔路徑" msgid "Peak:" msgstr "峰值:" +msgid "Peer IP address to assign" +msgstr "" + msgid "Perform reboot" msgstr "執行重開" @@ -1880,9 +1998,6 @@ msgstr "封包數." msgid "Please enter your username and password." msgstr "請輸入你的用戶名稱和密碼" -msgid "Please wait: Device rebooting..." -msgstr "請稍等:設備正重開中..." - msgid "Policy" msgstr "策略" @@ -2157,9 +2272,6 @@ msgid "" "can be reached." msgstr "路由器指定介面導出到特定主機或者能夠到達的網路." -msgid "Rule #" -msgstr "規則 #" - msgid "Run a filesystem check before mounting the device" msgstr "掛載這個設備前先跑系統檢查" @@ -2177,6 +2289,15 @@ msgstr "" msgid "SSH Access" msgstr "SSH存取" +msgid "SSH server address" +msgstr "" + +msgid "SSH server port" +msgstr "" + +msgid "SSH username" +msgstr "" + msgid "SSH-Keys" msgstr "SSH-金鑰" @@ -2266,6 +2387,9 @@ msgstr "信號:" msgid "Size" msgstr "大小" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "跳過" @@ -2541,6 +2665,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "選到的協定需要指定到設備上" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2593,6 +2720,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4位址的轉驛" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain " +"Name System\">DNS</abbr> servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2750,6 +2883,9 @@ msgstr "未知錯誤, 密碼尚未改變!" msgid "Unmanaged" msgstr "非託管" +msgid "Unmount" +msgstr "" + msgid "Unsaved Changes" msgstr "尚未存檔的修改" @@ -2914,11 +3050,14 @@ msgstr "等待修改被啟用..." msgid "Waiting for command to complete..." msgstr "等待完整性指令..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告:重開機後某些未存檔的修改將會漏失!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3146,6 +3285,25 @@ msgstr "是的" msgid "« Back" msgstr "« 倒退" +#~ msgid "Delete this interface" +#~ msgstr "刪除這個介面" + +#~ msgid "Flags" +#~ msgstr "旗標" + +#~ msgid "Rule #" +#~ msgstr "規則 #" + +#~ msgid "Ignore Hosts files" +#~ msgstr "被忽視的主機檔案" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "請稍等:設備正重開中..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告:重開機後某些未存檔的修改將會漏失!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/root/etc/config/luci b/modules/luci-base/root/etc/config/luci index c503a8f1e..baa3ac5d1 100644 --- a/modules/luci-base/root/etc/config/luci +++ b/modules/luci-base/root/etc/config/luci @@ -1,6 +1,6 @@ config core main option lang auto - option mediaurlbase /luci-static/openwrt.org + option mediaurlbase /luci-static/bootstrap option resourcebase /luci-static/resources config extern flash_keep diff --git a/modules/luci-base/root/lib/uci/upload/.placeholder b/modules/luci-base/root/etc/luci-uploads/.placeholder index e69de29bb..e69de29bb 100644 --- a/modules/luci-base/root/lib/uci/upload/.placeholder +++ b/modules/luci-base/root/etc/luci-uploads/.placeholder diff --git a/modules/luci-base/root/www/index.html b/modules/luci-base/root/www/index.html index 0b5fa1d87..59b0d8484 100644 --- a/modules/luci-base/root/www/index.html +++ b/modules/luci-base/root/www/index.html @@ -5,7 +5,7 @@ <meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="refresh" content="0; URL=/cgi-bin/luci" /> </head> -<body style="background-color: black"> -<a style="color: white; text-decoration: none" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a> +<body style="background-color: white"> +<a style="color: black; font-family: arial, helvetica, sans-serif;" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a> </body> </html> diff --git a/modules/luci-mod-admin-full/Makefile b/modules/luci-mod-admin-full/Makefile index 66c78e28a..5fed2797e 100644 --- a/modules/luci-mod-admin-full/Makefile +++ b/modules/luci-mod-admin-full/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Administration - full-featured for full control -LUCI_DEPENDS:=+luci-base +libubus-lua +LUCI_DEPENDS:=+luci-base PKG_BUILD_DEPENDS:=iwinfo diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua index d00d546b6..cc8c2e3ae 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua @@ -33,12 +33,10 @@ function action_logout() if sid then utl.ubus("session", "destroy", { ubus_rpc_session = sid }) - dsp.context.urltoken.stok = nil - luci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s/" %{ sid, 'Thu, 01 Jan 1970 01:00:00 GMT', dsp.build_url() }) end - luci.http.redirect(luci.dispatcher.build_url()) + luci.http.redirect(dsp.build_url()) end diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua index 6e578e013..aa533cb70 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2011 Jo-Philipp Wich <jow@openwrt.org> +-- Copyright 2011-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.network", package.seeall) @@ -43,22 +43,22 @@ function index() end) if has_wifi then - page = entry({"admin", "network", "wireless_join"}, call("wifi_join"), nil) + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_add"}, call("wifi_add"), nil) + page = entry({"admin", "network", "wireless_add"}, post("wifi_add"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_delete"}, call("wifi_delete"), nil) + page = entry({"admin", "network", "wireless_delete"}, post("wifi_delete"), nil) page.leaf = true page = entry({"admin", "network", "wireless_status"}, call("wifi_status"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_reconnect"}, call("wifi_reconnect"), nil) + page = entry({"admin", "network", "wireless_reconnect"}, post("wifi_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_shutdown"}, call("wifi_shutdown"), nil) + page = entry({"admin", "network", "wireless_shutdown"}, post("wifi_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wifi"), 15) @@ -85,16 +85,16 @@ function index() page = entry({"admin", "network", "iface_add"}, cbi("admin_network/iface_add"), nil) page.leaf = true - page = entry({"admin", "network", "iface_delete"}, call("iface_delete"), nil) + page = entry({"admin", "network", "iface_delete"}, post("iface_delete"), nil) page.leaf = true page = entry({"admin", "network", "iface_status"}, call("iface_status"), nil) page.leaf = true - page = entry({"admin", "network", "iface_reconnect"}, call("iface_reconnect"), nil) + page = entry({"admin", "network", "iface_reconnect"}, post("iface_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "iface_shutdown"}, call("iface_shutdown"), nil) + page = entry({"admin", "network", "iface_shutdown"}, post("iface_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), _("Interfaces"), 10) @@ -138,44 +138,33 @@ function index() page.title = _("Diagnostics") page.order = 60 - page = entry({"admin", "network", "diag_ping"}, call("diag_ping"), nil) + page = entry({"admin", "network", "diag_ping"}, post("diag_ping"), nil) page.leaf = true - page = entry({"admin", "network", "diag_nslookup"}, call("diag_nslookup"), nil) + page = entry({"admin", "network", "diag_nslookup"}, post("diag_nslookup"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute"}, call("diag_traceroute"), nil) + page = entry({"admin", "network", "diag_traceroute"}, post("diag_traceroute"), nil) page.leaf = true - page = entry({"admin", "network", "diag_ping6"}, call("diag_ping6"), nil) + page = entry({"admin", "network", "diag_ping6"}, post("diag_ping6"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute6"}, call("diag_traceroute6"), nil) + page = entry({"admin", "network", "diag_traceroute6"}, post("diag_traceroute6"), nil) page.leaf = true -- end end function wifi_join() - local function param(x) - return luci.http.formvalue(x) - end - - local function ptable(x) - x = param(x) - return x and (type(x) ~= "table" and { x } or x) or {} - end - - local dev = param("device") - local ssid = param("join") + local tpl = require "luci.template" + local http = require "luci.http" + local dev = http.formvalue("device") + local ssid = http.formvalue("join") if dev and ssid then - local cancel = (param("cancel") or param("cbi.cancel")) and true or false - - if cancel then - luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless_join?device=" .. dev)) - else + local cancel = (http.formvalue("cancel") or http.formvalue("cbi.cancel")) + if not cancel then local cbi = require "luci.cbi" - local tpl = require "luci.template" local map = luci.cbi.load("admin_network/wifi_add")[1] if map:parse() ~= cbi.FORM_DONE then @@ -183,10 +172,12 @@ function wifi_join() map:render() tpl.render("footer") end + + return end - else - luci.template.render("admin_network/wifi_join") end + + tpl.render("admin_network/wifi_join") end function wifi_add() @@ -244,6 +235,8 @@ function iface_status(ifaces) proto = net:proto(), uptime = net:uptime(), gwaddr = net:gwaddr(), + ipaddrs = net:ipaddrs(), + ip6addrs = net:ip6addrs(), dnsaddrs = net:dnsaddrs(), name = device:shortname(), type = device:type(), @@ -255,29 +248,9 @@ function iface_status(ifaces) rx_packets = device:rx_packets(), tx_packets = device:tx_packets(), - ipaddrs = { }, - ip6addrs = { }, subdevices = { } } - local _, a - for _, a in ipairs(device:ipaddrs()) do - data.ipaddrs[#data.ipaddrs+1] = { - addr = a:host():string(), - netmask = a:mask():string(), - prefix = a:prefix() - } - end - for _, a in ipairs(device:ip6addrs()) do - if not a:is6linklocal() then - data.ip6addrs[#data.ip6addrs+1] = { - addr = a:host():string(), - netmask = a:mask():string(), - prefix = a:prefix() - } - end - end - for _, device in ipairs(net:get_interfaces() or {}) do data.subdevices[#data.subdevices+1] = { name = device:shortname(), diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua index 1ceb24d16..24db1e4ff 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua @@ -7,7 +7,10 @@ module("luci.controller.admin.status", package.seeall) function index() entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1) - entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2).leaf = true + + entry({"admin", "status", "iptables"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true + entry({"admin", "status", "iptables_action"}, post("action_iptables")).leaf = true + entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3) entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4) entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5) @@ -42,22 +45,16 @@ end function action_iptables() if luci.http.formvalue("zero") then - if luci.http.formvalue("zero") == "6" then - luci.util.exec("ip6tables -Z") + if luci.http.formvalue("family") == "6" then + luci.util.exec("/usr/sbin/ip6tables -Z") else - luci.util.exec("iptables -Z") + luci.util.exec("/usr/sbin/iptables -Z") end - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - elseif luci.http.formvalue("restart") == "1" then + elseif luci.http.formvalue("restart") then luci.util.exec("/etc/init.d/firewall restart") - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - else - luci.template.render("admin_status/iptables") end + + luci.http.redirect(luci.dispatcher.build_url("admin/status/iptables")) end function action_bandwidth(iface) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua index 1b38c6783..cbba48cc2 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -9,12 +9,12 @@ function index() entry({"admin", "system"}, alias("admin", "system", "system"), _("System"), 30).index = true entry({"admin", "system", "system"}, cbi("admin_system/system"), _("System"), 1) - entry({"admin", "system", "clock_status"}, call("action_clock_status")) + entry({"admin", "system", "clock_status"}, post_on({ set = true }, "action_clock_status")) entry({"admin", "system", "admin"}, cbi("admin_system/admin"), _("Administration"), 2) if fs.access("/bin/opkg") then - entry({"admin", "system", "packages"}, call("action_packages"), _("Software"), 10) + entry({"admin", "system", "packages"}, post_on({ exec = "1" }, "action_packages"), _("Software"), 10) entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg")) end @@ -32,9 +32,16 @@ function index() end entry({"admin", "system", "flashops"}, call("action_flashops"), _("Backup / Flash Firmware"), 70) + entry({"admin", "system", "flashops", "reset"}, post("action_reset")) + entry({"admin", "system", "flashops", "backup"}, post("action_backup")) entry({"admin", "system", "flashops", "backupfiles"}, form("admin_system/backupfiles")) - entry({"admin", "system", "reboot"}, call("action_reboot"), _("Reboot"), 90) + -- call() instead of post() due to upload handling! + entry({"admin", "system", "flashops", "restore"}, call("action_restore")) + entry({"admin", "system", "flashops", "sysupgrade"}, call("action_sysupgrade")) + + entry({"admin", "system", "reboot"}, template("admin_system/reboot"), _("Reboot"), 90) + entry({"admin", "system", "reboot", "call"}, post("action_reboot")) end function action_clock_status() @@ -55,7 +62,8 @@ end function action_packages() local fs = require "nixio.fs" local ipkg = require "luci.model.ipkg" - local submit = luci.http.formvalue("submit") + local submit = (luci.http.formvalue("exec") == "1") + local update, upgrade local changes = false local install = { } local remove = { } @@ -75,59 +83,62 @@ function action_packages() query = (query ~= '') and query or nil - -- Packets to be installed - local ninst = submit and luci.http.formvalue("install") - local uinst = nil - - -- Install from URL - local url = luci.http.formvalue("url") - if url and url ~= '' and submit then - uinst = url - end + -- Modifying actions + if submit then + -- Packets to be installed + local ninst = luci.http.formvalue("install") + local uinst = nil - -- Do install - if ninst then - install[ninst], out, err = ipkg.install(ninst) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + -- Install from URL + local url = luci.http.formvalue("url") + if url and url ~= '' then + uinst = url + end - if uinst then - local pkg - for pkg in luci.util.imatch(uinst) do - install[uinst], out, err = ipkg.install(pkg) + -- Do install + if ninst then + install[ninst], out, err = ipkg.install(ninst) stdout[#stdout+1] = out stderr[#stderr+1] = err changes = true end - end - -- Remove packets - local rem = submit and luci.http.formvalue("remove") - if rem then - remove[rem], out, err = ipkg.remove(rem) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + if uinst then + local pkg + for pkg in luci.util.imatch(uinst) do + install[uinst], out, err = ipkg.install(pkg) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + end + -- Remove packets + local rem = luci.http.formvalue("remove") + if rem then + remove[rem], out, err = ipkg.remove(rem) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end - -- Update all packets - local update = luci.http.formvalue("update") - if update then - update, out, err = ipkg.update() - stdout[#stdout+1] = out - stderr[#stderr+1] = err - end + + -- Update all packets + update = luci.http.formvalue("update") + if update then + update, out, err = ipkg.update() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end - -- Upgrade all packets - local upgrade = luci.http.formvalue("upgrade") - if upgrade then - upgrade, out, err = ipkg.upgrade() - stdout[#stdout+1] = out - stderr[#stderr+1] = err + -- Upgrade all packets + upgrade = luci.http.formvalue("upgrade") + if upgrade then + upgrade, out, err = ipkg.upgrade() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end end @@ -166,137 +177,185 @@ function action_packages() end end -function action_flashops() - local sys = require "luci.sys" - local fs = require "nixio.fs" - - local upgrade_avail = fs.access("/lib/upgrade/platform.sh") - local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 +local function image_supported(image) + return (os.execute("sysupgrade -T %q >/dev/null" % image) == 0) +end - local restore_cmd = "tar -xzC/ >/dev/null 2>&1" - local backup_cmd = "sysupgrade --create-backup - 2>/dev/null" - local image_tmp = "/tmp/firmware.img" +local function image_checksum(image) + return (luci.sys.exec("md5sum %q" % image):match("^([^%s]+)")) +end - local function image_supported() - return (os.execute("sysupgrade -T %q >/dev/null" % image_tmp) == 0) - end +local function supports_sysupgrade() + return nixio.fs.access("/lib/upgrade/platform.sh") +end - local function image_checksum() - return (luci.sys.exec("md5sum %q" % image_tmp):match("^([^%s]+)")) - end +local function supports_reset() + return (os.execute([[grep -sq '"rootfs_data"' /proc/mtd]]) == 0) +end - local function storage_size() - local size = 0 - if fs.access("/proc/mtd") then - for l in io.lines("/proc/mtd") do - local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') - if n == "linux" or n == "firmware" then - size = tonumber(s, 16) - break - end +local function storage_size() + local size = 0 + if nixio.fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" or n == "firmware" then + size = tonumber(s, 16) + break end - elseif fs.access("/proc/partitions") then - for l in io.lines("/proc/partitions") do - local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') - if b and n and not n:match('[0-9]') then - size = tonumber(b) * 1024 - break - end + end + elseif nixio.fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break end end - return size end + return size +end + + +function action_flashops() + -- + -- Overview + -- + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade() + }) +end +function action_sysupgrade() + local fs = require "nixio.fs" + local http = require "luci.http" + local image_tmp = "/tmp/firmware.img" local fp - luci.http.setfilehandler( + http.setfilehandler( function(meta, chunk, eof) - if not fp then - if meta and meta.name == "image" then - fp = io.open(image_tmp, "w") - else - fp = io.popen(restore_cmd, "w") - end + if not fp and meta and meta.name == "image" then + fp = io.open(image_tmp, "w") end - if chunk then + if fp and chunk then fp:write(chunk) end - if eof then + if fp and eof then fp:close() end end ) - if luci.http.formvalue("backup") then - -- - -- Assemble file list, generate backup - -- - local reader = ltn12_popen(backup_cmd) - luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' % { - luci.sys.hostname(), os.date("%Y-%m-%d")}) - luci.http.prepare_content("application/x-targz") - luci.ltn12.pump.all(reader, luci.http.write) - elseif luci.http.formvalue("restore") then - -- - -- Unpack received .tar.gz - -- - local upload = luci.http.formvalue("archive") - if upload and #upload > 0 then - luci.template.render("admin_system/applyreboot") - luci.sys.reboot() + if not luci.dispatcher.test_post_security() then + fs.unlink(image_tmp) + return + end + + -- + -- Cancel firmware flash + -- + if http.formvalue("cancel") then + fs.unlink(image_tmp) + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) + return + end + + -- + -- Initiate firmware flash + -- + local step = tonumber(http.formvalue("step") or 1) + if step == 1 then + if image_supported(image_tmp) then + luci.template.render("admin_system/upgrade", { + checksum = image_checksum(image_tmp), + storage = storage_size(), + size = (fs.stat(image_tmp, "size") or 0), + keep = (not not http.formvalue("keep")) + }) + else + fs.unlink(image_tmp) + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + image_invalid = true + }) end - elseif luci.http.formvalue("image") or luci.http.formvalue("step") then - -- - -- Initiate firmware flash - -- - local step = tonumber(luci.http.formvalue("step") or 1) - if step == 1 then - if image_supported() then - luci.template.render("admin_system/upgrade", { - checksum = image_checksum(), - storage = storage_size(), - size = (fs.stat(image_tmp, "size") or 0), - keep = (not not luci.http.formvalue("keep")) - }) - else - fs.unlink(image_tmp) - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail, - image_invalid = true - }) + -- + -- Start sysupgrade flash + -- + elseif step == 2 then + local keep = (http.formvalue("keep") == "1") and "" or "-n" + luci.template.render("admin_system/applyreboot", { + title = luci.i18n.translate("Flashing..."), + msg = luci.i18n.translate("The system is flashing 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 = (#keep > 0) and "192.168.1.1" or nil + }) + fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) + end +end + +function action_backup() + local reader = ltn12_popen("sysupgrade --create-backup - 2>/dev/null") + + luci.http.header( + 'Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' %{ + luci.sys.hostname(), + os.date("%Y-%m-%d") + }) + + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(reader, luci.http.write) +end + +function action_restore() + local fs = require "nixio.fs" + local http = require "luci.http" + local archive_tmp = "/tmp/restore.tar.gz" + + local fp + http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "archive" then + fp = io.open(archive_tmp, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() end - -- - -- Start sysupgrade flash - -- - elseif step == 2 then - local keep = (luci.http.formvalue("keep") == "1") and "" or "-n" - luci.template.render("admin_system/applyreboot", { - title = luci.i18n.translate("Flashing..."), - msg = luci.i18n.translate("The system is flashing 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 = (#keep > 0) and "192.168.1.1" or nil - }) - fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) end - elseif reset_avail and luci.http.formvalue("reset") then - -- - -- Reset system - -- + ) + + if not luci.dispatcher.test_post_security() then + fs.unlink(archive_tmp) + return + end + + local upload = http.formvalue("archive") + if upload and #upload > 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + return + end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) +end + +function action_reset() + if supports_reset() then luci.template.render("admin_system/applyreboot", { title = luci.i18n.translate("Erasing..."), msg = luci.i18n.translate("The system is erasing the configuration partition now and will reboot itself when finished."), addr = "192.168.1.1" }) + fork_exec("killall dropbear uhttpd; sleep 1; mtd -r erase rootfs_data") - else - -- - -- Overview - -- - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail - }) + return end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) end function action_passwd() @@ -316,11 +375,7 @@ function action_passwd() end function action_reboot() - local reboot = luci.http.formvalue("reboot") - luci.template.render("admin_system/reboot", {reboot=reboot}) - if reboot then - luci.sys.reboot() - end + luci.sys.reboot() end function fork_exec(command) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua index 6de3c73a3..9c33d9c18 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth <steven@midlink.org> --- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org> +-- Copyright 2010-2015 Jo-Philipp Wich <jow@openwrt.org> -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.uci", package.seeall) @@ -10,9 +10,9 @@ function index() entry({"admin", "uci"}, nil, _("Configuration")) entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir} - entry({"admin", "uci", "revert"}, call("action_revert"), _("Revert"), 30).query = {redir=redir} - entry({"admin", "uci", "apply"}, call("action_apply"), _("Apply"), 20).query = {redir=redir} - entry({"admin", "uci", "saveapply"}, call("action_apply"), _("Save & Apply"), 10).query = {redir=redir} + entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir} + entry({"admin", "uci", "apply"}, post("action_apply"), _("Apply"), 20).query = {redir=redir} + entry({"admin", "uci", "saveapply"}, post("action_apply"), _("Save & Apply"), 10).query = {redir=redir} end function action_changes() diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 49103a811..572446fef 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -51,13 +51,10 @@ rf.optional = true s:taboption("files", Flag, "nohosts", - translate("Ignore Hosts files")).optional = true + translate("Ignore <code>/etc/hosts</code>")).optional = true -hf = s:taboption("files", DynamicList, "addnhosts", - translate("Additional Hosts files")) - -hf:depends("nohosts", "") -hf.optional = true +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true s:taboption("advanced", Flag, "boguspriv", @@ -138,7 +135,7 @@ rd = s:taboption("general", DynamicList, "rebind_domain", translate("List of domains to allow RFC1918 responses for")) rd:depends("rebind_protection", "1") -rd.datatype = "host" +rd.datatype = "host(1)" rd.placeholder = "ihost.netflix.com" diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua index da1e140de..e48e3b4bd 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua @@ -17,7 +17,12 @@ newnet = m:field(Value, "_netname", translate("Name of the new interface"), newnet:depends("_attach", "") newnet.default = arg[1] and "net_" .. arg[1]:gsub("[^%w_]+", "_") -newnet.datatype = "uciname" +newnet.datatype = "and(uciname,maxlength(15))" + +advice = m:field(DummyValue, "d1", translate("Note: interface name length"), + translate("Maximum length of the name is 15 characters including " .. + "the automatic protocol/bridge prefix (br-, 6in4-, pppoe- etc.)" + )) newproto = m:field(ListValue, "_netproto", translate("Protocol of the new interface")) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua index 40f8014f1..ce3c3ef32 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua @@ -107,6 +107,12 @@ m.uci:foreach("network", "switch", local sp = s:option(ListValue, "mirror_source_port", translate("Mirror source port")) local mp = s:option(ListValue, "mirror_monitor_port", translate("Mirror monitor port")) + sp:depends("enable_mirror_tx", "1") + sp:depends("enable_mirror_rx", "1") + + mp:depends("enable_mirror_tx", "1") + mp:depends("enable_mirror_rx", "1") + local pt for pt = 0, num_ports - 1 do local name diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua index 9a2bd5d20..44528927e 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -361,7 +361,8 @@ s:tab("encryption", translate("Wireless Security")) s:tab("macfilter", translate("MAC-Filter")) s:tab("advanced", translate("Advanced Settings")) -s:taboption("general", Value, "ssid", translate("<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>")) +ssid = s:taboption("general", Value, "ssid", translate("<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>")) +ssid.datatype = "maxlength(32)" mode = s:taboption("general", ListValue, "mode", translate("Mode")) mode.override_values = true @@ -748,7 +749,7 @@ auth_server:depends({mode="ap", encryption="wpa2"}) auth_server:depends({mode="ap-wds", encryption="wpa"}) auth_server:depends({mode="ap-wds", encryption="wpa2"}) auth_server.rmempty = true -auth_server.datatype = "host" +auth_server.datatype = "host(0)" auth_port = s:taboption("encryption", Value, "auth_port", translate("Radius-Authentication-Port"), translatef("Default %d", 1812)) auth_port:depends({mode="ap", encryption="wpa"}) @@ -772,7 +773,7 @@ acct_server:depends({mode="ap", encryption="wpa2"}) acct_server:depends({mode="ap-wds", encryption="wpa"}) acct_server:depends({mode="ap-wds", encryption="wpa2"}) acct_server.rmempty = true -acct_server.datatype = "host" +acct_server.datatype = "host(0)" acct_port = s:taboption("encryption", Value, "acct_port", translate("Radius-Accounting-Port"), translatef("Default %d", 1813)) acct_port:depends({mode="ap", encryption="wpa"}) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua index d4e834daf..fd466d5c2 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab.lua @@ -33,12 +33,67 @@ until not ln block:close() - m = Map("fstab", translate("Mount Points")) +s = m:section(TypedSection, "global", translate("Global Settings")) +s.addremove = false +s.anonymous = true + +detect = s:option(Button, "block_detect", translate("Generate Config"), translate("Find all currently attached filesystems and swap and replace configuration with defaults based on what was detected")) +detect.inputstyle = "reload" + +detect.write = function(self, section) + luci.sys.call("block detect >/etc/config/fstab") + luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) +end + +o = s:option(Flag, "anon_swap", translate("Anonymous Swap"), translate("Mount swap not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "anon_mount", translate("Anonymous Mount"), translate("Mount filesystems not specifically configured")) +o.default = o.disabled +o.rmempty = false + +o = s:option(Flag, "auto_swap", translate("Automount Swap"), translate("Automatically mount swap on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "auto_mount", translate("Automount Filesystem"), translate("Automatically mount filesystems on hotplug")) +o.default = o.enabled +o.rmempty = false + +o = s:option(Flag, "check_fs", translate("Check fileystems before mount"), translate("Automatically check filesystem for errors before mounting")) +o.default = o.disabled +o.rmempty = false local mounts = luci.sys.mounts() +local non_system_mounts = {} +for rawmount, val in pairs(mounts) do + if (string.find(val.mountpoint, "/tmp/.jail") == nil) then + repeat + val.umount = false + if (val.mountpoint == "/") then + break + elseif (val.mountpoint == "/overlay") then + break + elseif (val.mountpoint == "/rom") then + break + elseif (val.mountpoint == "/tmp") then + break + elseif (val.mountpoint == "/tmp/shm") then + break + elseif (val.mountpoint == "/tmp/upgrade") then + break + elseif (val.mountpoint == "/dev") then + break + end + val.umount = true + until true + non_system_mounts[rawmount] = val + end +end -v = m:section(Table, mounts, translate("Mounted file systems")) +v = m:section(Table, non_system_mounts, translate("Mounted file systems")) fs = v:option(DummyValue, "fs", translate("Filesystem")) @@ -61,7 +116,21 @@ function used.cfgvalue(self, section) ) .. ")" end +unmount = v:option(Button, "unmount", translate("Unmount")) +unmount.render = function(self, section, scope) + if non_system_mounts[section].umount then + self.title = translate("Unmount") + self.inputstyle = "remove" + Button.render(self, section, scope) + end +end +unmount.write = function(self, section) + if non_system_mounts[section].umount then + luci.sys.call("/bin/umount '%s'" % luci.util.shellstartsqescape(non_system_mounts[section].mountpoint)) + return luci.http.redirect(luci.dispatcher.build_url("admin/system", "fstab")) + end +end mount = m:section(TypedSection, "mount", translate("Mount Points"), translate("Mount Points define at which point a memory device will be attached to the filesystem")) mount.anonymous = true diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua index 2652e00f2..f5751673f 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua @@ -112,7 +112,7 @@ o.default = [[ mkdir -p /tmp/extroot mount --bind / /tmp/introot mount /dev/sda1 /tmp/extroot -tar -C /tmp/intproot -cvf - . | tar -C /tmp/extroot -xf - +tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - umount /tmp/introot umount /tmp/extroot</pre> ]] %{ diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua index 2f3c4927b..7c6d7e1c6 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua @@ -3,12 +3,15 @@ -- Licensed to the public under the Apache License 2.0. local ipkgfile = "/etc/opkg.conf" +local distfeeds = "/etc/opkg/distfeeds.conf" +local customfeeds = "/etc/opkg/customfeeds.conf" -f = SimpleForm("ipkgconf", translate("OPKG-Configuration")) +f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General options for opkg")) f:append(Template("admin_system/ipkg")) t = f:field(TextValue, "lines") +t.wrap = "off" t.rows = 10 function t.cfgvalue() return nixio.fs.readfile(ipkgfile) or "" @@ -22,4 +25,40 @@ function f.handle(self, state, data) return true end -return f +g = SimpleForm("distfeedconf", translate("Distribution feeds"), + translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade.")) + +d = g:field(TextValue, "lines2") +d.wrap = "off" +d.rows = 10 +function d.cfgvalue() + return nixio.fs.readfile(distfeeds) or "" +end + +function d.write(self, section, data) + return nixio.fs.writefile(distfeeds, data:gsub("\r\n", "\n")) +end + +function g.handle(self, state, data) + return true +end + +h = SimpleForm("customfeedconf", translate("Custom feeds"), + translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade.")) + +c = h:field(TextValue, "lines3") +c.wrap = "off" +c.rows = 10 +function c.cfgvalue() + return nixio.fs.readfile(customfeeds) or "" +end + +function c.write(self, section, data) + return nixio.fs.writefile(customfeeds, data:gsub("\r\n", "\n")) +end + +function h.handle(self, state, data) + return true +end + +return f, g, h diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua index 94ba8053a..2874b5607 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/system.lua @@ -204,7 +204,7 @@ if has_ntpd then o = s:option(DynamicList, "server", translate("NTP server candidates")) - o.datatype = "host" + o.datatype = "host(0)" o:depends("enable", "1") -- retain server list even if disabled diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm index 05c866128..685082a33 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -34,7 +34,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") legend.parentNode.style.display = 'block'; legend.style.display = 'inline'; - stxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/diag_' + tool + protocol + '/' + addr, null, + stxhr.post('<%=url('admin/network')%>/diag_' + tool + protocol + '/' + addr, { token: '<%=token%>' }, function(x) { if (x.responseText) @@ -53,9 +53,9 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") } //]]></script> -<form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>"> +<form method="post" action="<%=url('admin/network/diagnostics')%>"> <div class="cbi-map"> - <h2><a id="content" name="content"><%:Diagnostics%></a></h2> + <h2 name="content"><%:Diagnostics%></h2> <fieldset class="cbi-section"> <legend><%:Network Utilities%></legend> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm index 1de349856..646d931f3 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm @@ -49,7 +49,7 @@ s.innerHTML = '<%:Waiting for changes to be applied...%>'; } - XHR.get('<%=luci.dispatcher.build_url("admin", "network")%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, null, + (new XHR()).post('<%=url('admin/network')%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, { token: '<%=token%>' }, function(x) { if (s) @@ -66,12 +66,22 @@ ); } + function iface_delete(id) { + if (!confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>')) + return; + + (new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' }, + function(x) { + location.href = '<%=url('admin/network/network')%>'; + } + ); + } var iwxhr = new XHR(); var wifidevs = <%=luci.http.write_json(netdevs)%>; var arptable = <%=luci.http.write_json(arpcache)%>; - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "iface_status", table.concat(ifaces, ","))%>', null, + XHR.poll(5, '<%=url('admin/network/iface_status', table.concat(ifaces, ","))%>', null, function(x, ifcs) { if (ifcs) @@ -125,7 +135,7 @@ html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); } - if (ifc.type != 'tunnel') + if (ifc.macaddr) { html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); } @@ -139,32 +149,20 @@ if (ifc.ipaddrs && ifc.ipaddrs.length) { - html += '<strong><%:IPv4%>: </strong>'; - for (var i = 0; i < ifc.ipaddrs.length; i++) html += String.format( - '%s%s/%d', - i ? ', ' : '', - ifc.ipaddrs[i].addr, - ifc.ipaddrs[i].prefix + '<strong><%:IPv4%>:</strong> %s<br />', + ifc.ipaddrs[i] ); - - html += '<br />'; } if (ifc.ip6addrs && ifc.ip6addrs.length) { - html += '<strong><%:IPv6%>: </strong>'; - for (var i = 0; i < ifc.ip6addrs.length; i++) html += String.format( - '%s%s/%d', - i ? ', ' : '', - ifc.ip6addrs[i].addr.toUpperCase(), - ifc.ip6addrs[i].prefix + '<strong><%:IPv6%>:</strong> %s<br />', + ifc.ip6addrs[i] ); - - html += '<br />'; } d.innerHTML = html; @@ -178,14 +176,14 @@ d.innerHTML = String.format( '<em><%:Unsupported protocol type.%></em><br />' + '<a href="%h"><%:Install protocol extensions...%></a>', - '<%=luci.dispatcher.build_url("admin/system/packages")%>?query=luci-proto&display=available' + '<%=url("admin/system/packages")%>?query=luci-proto&display=available' ); } else if (d && !ifc.ifname) { d.innerHTML = String.format( '<em><%:Network without interfaces.%></em><br />' + - '<a href="<%=luci.dispatcher.build_url("admin/network/network/%s")%>?tab.network.%s=physical"><%:Assign interfaces...%></a>', + '<a href="<%=url("admin/network/network/%s")%>?tab.network.%s=physical"><%:Assign interfaces...%></a>', ifc.name, ifc.name ); } @@ -239,13 +237,13 @@ <td style="width:420px"> <input type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', true)" title="<%:Reconnect this interface%>" value="<%:Connect%>" /> <input type="button" class="cbi-button cbi-button-reset" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', false)" title="<%:Shutdown this interface%>" value="<%:Stop%>" /> - <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="if (confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>')) location.href='<%=luci.dispatcher.build_url("admin/network/iface_delete", net[1])%>'" title="<%:Delete this interface%>" value="<%:Delete%>" /> + <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> + <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="iface_delete('<%=net[1]%>')" value="<%:Delete%>" /> </td> </tr> <% end %> </table> - <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/iface_add")%>'" /> + <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" /> </fieldset> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm index 813638396..94d9e8811 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "iface_status", self.network)%>', null, + XHR.poll(5, '<%=url('admin/network/iface_status', self.network)%>', null, function(x, ifc) { if (ifc && (ifc = ifc[0])) @@ -25,7 +25,7 @@ html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime); } - if (ifc.type != 'tunnel') + if (ifc.macaddr) { html += String.format('<strong><%:MAC-Address%>:</strong> %s<br />', ifc.macaddr); } @@ -43,10 +43,9 @@ for (var i = 0; i < ifc.ipaddrs.length; i++) html += String.format( - '%s%s/%d', + '%s%s', i ? ', ' : '', - ifc.ipaddrs[i].addr, - ifc.ipaddrs[i].prefix + ifc.ipaddrs[i] ); html += '<br />'; @@ -58,10 +57,9 @@ for (var i = 0; i < ifc.ip6addrs.length; i++) html += String.format( - '%s%s/%d', + '%s%s', i ? ', ' : '', - ifc.ip6addrs[i].addr.toUpperCase(), - ifc.ip6addrs[i].prefix + ifc.ip6addrs[i].toUpperCase() ); html += '<br />'; diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 0ba334ee9..ab8e73257 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -1,5 +1,5 @@ <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "dhcplease_status")%>', null, + XHR.poll(5, '<%=url('admin/network/dhcplease_status')%>', null, function(x, st) { var tb = document.getElementById('lease_status_table'); diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm index b299575e2..53c35ae59 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm @@ -1,6 +1,6 @@ <script type="text/javascript">//<![CDATA[ var switches = [ '<%=table.concat(self.switches, "', '")%>' ]; - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "switch_status")%>/' + switches.join(','), null, + XHR.poll(5, '<%=url('admin/network/switch_status')%>/' + switches.join(','), null, function(x, st) { for (var i = 0; i < switches.length; i++) diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index 90cc4c03e..3533c6fa4 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -1,5 +1,5 @@ <%# - Copyright 2009 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2009-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> @@ -87,7 +87,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Join Network: Wireless Scan%></a></h2> +<h2 name="content"><%:Join Network: Wireless Scan%></h2> <div class="cbi-map"> <fieldset class="cbi-section"> @@ -109,7 +109,8 @@ <strong>Encryption:</strong> <%=format_wifi_encryption(net.encryption)%> </td> <td class="cbi-value-field" style="width:40px"> - <form action="<%=REQUEST_URI%>" method="post"> + <form action="<%=url('admin/network/wireless_join')%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> <input type="hidden" name="join" value="<%=utl.pcdata(net.ssid)%>" /> <input type="hidden" name="mode" value="<%=net.mode%>" /> @@ -135,10 +136,11 @@ </fieldset> </div> <div class="cbi-page-actions right"> - <form class="inline" action="<%=luci.dispatcher.build_url("admin/network/wireless")%>" method="get"> + <form class="inline" action="<%=url("admin/network/wireless")%>" method="get"> <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>" /> </form> - <form class="inline" action="<%=REQUEST_URI%>" method="get"> + <form class="inline" action="<%=url('admin/network/wireless_join')%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>" /> </form> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index 4fc268e66..f82d06dcd 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -149,7 +149,7 @@ st.innerHTML = '<em><%:Wireless is restarting...%></em>'; } - XHR.get('<%=luci.dispatcher.build_url("admin", "network")%>/wireless_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, null, + (new XHR()).post('<%=url('admin/network')%>/wireless_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, { token: '<%=token%>' }, function(x) { if (s) @@ -167,7 +167,18 @@ ); } - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "wireless_status", table.concat(netlist, ","))%>', null, + function wifi_delete(id) { + if (!confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>')) + return; + + (new XHR()).post('<%=url('admin/network/wireless_delete')%>/' + id, { token: '<%=token%>' }, + function(x) { + location.href = '<%=url('admin/network/wireless')%>'; + } + ); + } + + XHR.poll(5, '<%=url('admin/network/wireless_status', table.concat(netlist, ","))%>', null, function(x, st) { if (st) @@ -348,7 +359,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Wireless Overview%></a></h2> +<h2 name="content"><%:Wireless Overview%></h2> <fieldset class="cbi-section" style="display:none"> <legend><%:Reconnecting interface%></legend> @@ -370,8 +381,16 @@ <span id="<%=dev:name()%>-iw-devinfo"></span> </td> <td style="width:310px;text-align:right"> - <input type="button" class="cbi-button cbi-button-find" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/wireless_join")%>?device=<%=dev:name()%>'" title="<%:Find and join network%>" value="<%:Scan%>" /> - <input type="button" class="cbi-button cbi-button-add" style="width:100px" onclick="location.href='<%=luci.dispatcher.build_url("admin/network/wireless_add")%>?device=<%=dev:name()%>'" title="<%:Provide new network%>" value="<%:Add%>" /> + <form action="<%=url('admin/network/wireless_join')%>" method="post" class="inline"> + <input type="hidden" name="device" value="<%=dev:name()%>" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="submit" class="cbi-button cbi-button-find" style="width:100px" title="<%:Find and join network%>" value="<%:Scan%>" /> + </form> + <form action="<%=url('admin/network/wireless_add')%>" method="post" class="inline"> + <input type="hidden" name="device" value="<%=dev:name()%>" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="submit" class="cbi-button cbi-button-add" style="width:100px" title="<%:Provide new network%>" value="<%:Add%>" /> + </form> </td> </tr> <!-- /physical device --> @@ -391,7 +410,7 @@ <td class="cbi-value-field" style="width:310px;text-align:right"> <input id="<%=net:id()%>-iw-toggle" type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="wifi_shutdown('<%=net:id()%>', this)" title="<%:Delete this network%>" value="<%:Enable%>" /> <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" /> - <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="if (confirm('<%:Really delete this wireless network? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this network.%>')) location.href='<%=luci.dispatcher.build_url("admin/network/wireless_delete", net:ifname())%>'" title="<%:Delete this network%>" value="<%:Remove%>" /> + <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="wifi_delete('<%=net:ifname()%>')" title="<%:Delete this network%>" value="<%:Remove%>" /> </td> </tr> <% end %> @@ -410,7 +429,7 @@ <% end %> - <h2><a id="content" name="content"><%:Associated Stations%></a></h2> + <h2><%:Associated Stations%></h2> <fieldset class="cbi-section"> <table class="cbi-section-table" style="margin:10px" id="iw-assoclist"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index fa0a97b70..04687f38e 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "wireless_status", self.ifname)%>', null, + XHR.poll(5, '<%=url('admin/network/wireless_status', self.ifname)%>', null, function(x, iw) { if (iw && (iw = iw[0])) diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index dbcf06bee..04da3c123 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -264,7 +264,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Traffic%></a></h2> +<h2 name="content"><%:Realtime Traffic%></h2> <ul class="cbi-tabmenu"> <% for _, dev in ipairs(devices) do %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index 64b950e24..0b2e52e05 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -312,7 +312,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Connections%></a></h2> +<h2 name="content"><%:Realtime Connections%></h2> <div class="cbi-map-descr"><%:This page gives an overview over currently active network connections.%></div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm index a63bb7112..c119b5729 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:Kernel Log%></a></h2> +<h2 name="content"><%:Kernel Log%></h2> <div id="content_syslog"> <textarea readonly="readonly" wrap="off" rows="<%=dmesg:cmatch("\n")+2%>" id="syslog"><%=dmesg:pcdata()%></textarea> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 07a96b2bf..62188e45e 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -88,7 +88,9 @@ if has_dsl then local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat") local dsl_func = loadstring(dsl_stat) - rv.dsl = dsl_func() + if dsl_func then + rv.dsl = dsl_func() + end end luci.http.prepare_content("application/json") @@ -550,7 +552,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Status%></a></h2> +<h2 name="content"><%:Status%></h2> <fieldset class="cbi-section"> <legend><%:System%></legend> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index ba2933ade..f49469a59 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -1,6 +1,6 @@ <%# Copyright 2008-2009 Steven Barth <steven@midlink.org> - Copyright 2008-2011 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> @@ -37,7 +37,7 @@ local net = wba.iface_get_network(i) if net and i ~= "lo" then return '<a href="%s">%s</a>' %{ - luci.dispatcher.build_url("admin", "network", "network", net), i + url("admin/network/network", net), i } end @@ -59,91 +59,88 @@ } </style> -<h2><a id="content" name="content"><%:Firewall Status%></a></h2> +<h2 name="content"><%:Firewall Status%></h2> +<br /> <% if has_ip6tables then %> <ul class="cbi-tabmenu"> - <li class="cbi-tab<%= mode ~= 4 and "-disabled" %>"><a href="<%=luci.dispatcher.build_url("admin/status/iptables/4")%>"><%:IPv4 Firewall%></a></li> - <li class="cbi-tab<%= mode ~= 6 and "-disabled" %>"><a href="<%=luci.dispatcher.build_url("admin/status/iptables/6")%>"><%:IPv6 Firewall%></a></li> + <li class="cbi-tab<%= mode ~= 4 and "-disabled" %>"><a href="<%=url("admin/status/iptables/4")%>"><%:IPv4 Firewall%></a></li> + <li class="cbi-tab<%= mode ~= 6 and "-disabled" %>"><a href="<%=url("admin/status/iptables/6")%>"><%:IPv6 Firewall%></a></li> </ul> <% end %> -<form method="post" action="<%=REQUEST_URI%>"> - <div class="cbi-map"> - <fieldset class="cbi-section"> - <h3><%:Actions%></h3> - <ul> - <li><a href="<%=REQUEST_URI%>?zero=<%=mode%>"><%:Reset Counters%></a></li> - <li><a href="<%=REQUEST_URI%>?restart=1"><%:Restart Firewall%></a></li> - </ul> - <br /><br /> - - <% for _, tbl in ipairs(tables) do chaincnt = 0 %> - <h3><%:Table%>: <%=tbl%></h3> - <table class="cbi-section-table" style="font-size:90%"> - <% for _, chain in ipairs(ipt:chains(tbl)) do - rowcnt = 0 - chaincnt = chaincnt + 1 - chaininfo = ipt:chain(tbl, chain) - %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <th class="cbi-section-table-cell" style="text-align:left" colspan="11"> - <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> - <%:Chain%> <em><%=chain%></em> - (<%- if chaininfo.policy then -%> - <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> - <%- else -%> - <%:References%>: <%=chaininfo.references-%> - <%- end -%>)</span> - </th> +<div class="cbi-map" style="position: relative"> + + <form method="post" action="<%=url("admin/status/iptables_action")%>" style="position: absolute; right: 0"> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="family" value="<%=mode%>" /> + <input type="submit" class="cbi-button" name="zero" value="<%:Reset Counters%>" /> + <input type="submit" class="cbi-button" name="restart" value="<%:Restart Firewall%>" /> + </form> + + <fieldset class="cbi-section"> + + <% for _, tbl in ipairs(tables) do chaincnt = 0 %> + <h3><%:Table%>: <%=tbl%></h3> + <table class="cbi-section-table" style="font-size:90%"> + <% for _, chain in ipairs(ipt:chains(tbl)) do + rowcnt = 0 + chaincnt = chaincnt + 1 + chaininfo = ipt:chain(tbl, chain) + %> + <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <th class="cbi-section-table-cell" style="text-align:left" colspan="11"> + <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> + <%:Chain%> <em><%=chain%></em> + (<%- if chaininfo.policy then -%> + <%:Policy%>: <em><%=chaininfo.policy%></em>, <%:Packets%>: <%=chaininfo.packets%>, <%:Traffic%>: <%=wba.byte_format(chaininfo.bytes)-%> + <%- else -%> + <%:References%>: <%=chaininfo.references-%> + <%- end -%>)</span> + </th> + </tr> + <tr class="cbi-section-table-descr"> + <th class="cbi-section-table-cell"><%:Pkts.%></th> + <th class="cbi-section-table-cell"><%:Traffic%></th> + <th class="cbi-section-table-cell"><%:Target%></th> + <th class="cbi-section-table-cell"><%:Prot.%></th> + <th class="cbi-section-table-cell"><%:In%></th> + <th class="cbi-section-table-cell"><%:Out%></th> + <th class="cbi-section-table-cell"><%:Source%></th> + <th class="cbi-section-table-cell"><%:Destination%></th> + <th class="cbi-section-table-cell" style="width:30%"><%:Options%></th> + </tr> + + <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td><%=rule.packets%></td> + <td style="white-space: nowrap"><%=wba.byte_format(rule.bytes)%></td> + <td><%=rule.target and link_target(tbl, rule.target) or "-"%></td> + <td><%=rule.protocol%></td> + <td><%=link_iface(rule.inputif)%></td> + <td><%=link_iface(rule.outputif)%></td> + <td><%=rule.source%></td> + <td><%=rule.destination%></td> + <td style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></td> </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Rule #%></th> - <th class="cbi-section-table-cell"><%:Pkts.%></th> - <th class="cbi-section-table-cell"><%:Traffic%></th> - <th class="cbi-section-table-cell"><%:Target%></th> - <th class="cbi-section-table-cell"><%:Prot.%></th> - <th class="cbi-section-table-cell"><%:Flags%></th> - <th class="cbi-section-table-cell"><%:In%></th> - <th class="cbi-section-table-cell"><%:Out%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - <th class="cbi-section-table-cell"><%:Destination%></th> - <th class="cbi-section-table-cell" style="width:30%"><%:Options%></th> - </tr> - - <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td><%=rule.index%></td> - <td><%=rule.packets%></td> - <td><%=wba.byte_format(rule.bytes)%></td> - <td><%=rule.target and link_target(tbl, rule.target) or "-"%></td> - <td><%=rule.protocol%></td> - <td><%=rule.flags%></td> - <td><%=link_iface(rule.inputif)%></td> - <td><%=link_iface(rule.outputif)%></td> - <td><%=rule.source%></td> - <td><%=rule.destination%></td> - <td style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></td> - </tr> - <% end %> - - <% if rowcnt == 1 then %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="11"><em><%:No rules in this chain%></em></td> - </tr> - <% end %> <% end %> - <% if chaincnt == 0 then %> + <% if rowcnt == 1 then %> <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="11"><em><%:No chains in this table%></em></td> + <td colspan="9"><em><%:No rules in this chain%></em></td> </tr> <% end %> - </table> - <br /><br /> - <% end %> - </fieldset> - </div> -</form> + <% end %> + + <% if chaincnt == 0 then %> + <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <td colspan="9"><em><%:No chains in this table%></em></td> + </tr> + <% end %> + </table> + <br /><br /> + <% end %> + </fieldset> +</div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm index d095948e5..97a2f5ed5 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -242,7 +242,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Load%></a></h2> +<h2 name="content"><%:Realtime Load%></h2> <embed id="bwsvg" style="width:100%; height:300px; border:1px solid #000000; background-color:#FFFFFF" src="<%=resource%>/load.svg" /> <div style="text-align:right"><small id="scale">-</small></div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index 82dd3a7df..5f2c07493 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -33,7 +33,7 @@ <%+header%> <div class="cbi-map" id="cbi-network"> - <h2><a id="content" name="content"><%:Routes%></a></h2> + <h2 name="content"><%:Routes%></h2> <div class="cbi-map-descr"><%:The following rules are currently active on this system.%></div> <fieldset class="cbi-section"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm index 40032a142..b87f21d08 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System Log%></a></h2> +<h2 name="content"><%:System Log%></h2> <div id="content_syslog"> <textarea readonly="readonly" wrap="off" rows="<%=syslog:cmatch("\n")+2%>" id="syslog"><%=syslog:pcdata()%></textarea> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index 025fece90..f18592610 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -314,7 +314,7 @@ ); //]]></script> -<h2><a id="content" name="content"><%:Realtime Wireless%></a></h2> +<h2 name="content"><%:Realtime Wireless%></h2> <ul class="cbi-tabmenu"> <% for _, dev in ipairs(devices) do %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm index 15c96e34d..e722a4809 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm @@ -25,7 +25,7 @@ <body> <div id="maincontainer"> <div id="maincontent"> - <h2><a id="content" name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></a></h2> + <h2 name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></h2> <fieldset class="cbi-section"> <p> <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm index 0a6df109d..c1f3361ae 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm @@ -5,6 +5,6 @@ -%> <ul class="cbi-tabmenu"> - <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/system/flashops")%>"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=url("admin/system/flashops")%>"><%:Actions%></a></li> <li class="cbi-tab"><a href="#"><%:Configuration%></a></li> </ul> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm index 84e151075..37d8ae0e8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> <script type="text/javascript">//<![CDATA[ - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "system", "clock_status")%>', null, + XHR.poll(5, '<%=url('admin/system/clock_status')%>', null, function(x, rv) { var s = document.getElementById('<%=self.option%>-clock-status'); @@ -17,8 +17,8 @@ btn.disabled = true; btn.value = '<%:Synchronizing...%>'; - XHR.get('<%=luci.dispatcher.build_url("admin", "system", "clock_status")%>', - { set: Math.floor((new Date()).getTime() / 1000) }, + (new XHR()).post('<%=url('admin/system/clock_status')%>', + { token: '<%=token%>', set: Math.floor((new Date()).getTime() / 1000) }, function() { btn.disabled = false; diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm index bea565aa0..82a1fdbc9 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm @@ -1,12 +1,12 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:Flash operations%></a></h2> +<h2 name="content"><%:Flash operations%></h2> <ul class="cbi-tabmenu"> <li class="cbi-tab"><a href="#"><%:Actions%></a></li> @@ -17,36 +17,43 @@ <fieldset class="cbi-section"> <legend><%:Backup / Restore%></legend> - <form method="post" action="<%=REQUEST_URI%>" enctype="multipart/form-data"> - <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> - <div class="cbi-section-node"> + <div class="cbi-section-descr"><%:Click "Generate archive" to download a tar archive of the current configuration files. To reset the firmware to its initial state, click "Perform reset" (only possible with squashfs images).%></div> + <div class="cbi-section-node"> + <form class="inline" method="post" action="<%=url('admin/system/flashops/backup')%>"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-value<% if not reset_avail then %> cbi-value-last<% end %>"> <label class="cbi-value-title" for="image"><%:Download backup%>:</label> <div class="cbi-value-field"> <input class="cbi-button cbi-button-apply" type="submit" name="backup" value="<%:Generate archive%>" /> </div> </div> - <% if reset_avail then %> + </form> + <% if reset_avail then %> + <form class="inline" method="post" action="<%=url('admin/system/flashops/reset')%>"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-value cbi-value-last"> <label class="cbi-value-title"><%:Reset to defaults%>:</label> <div class="cbi-value-field"> <input onclick="return confirm('<%:Really reset all changes?%>')" class="cbi-button cbi-button-reset" type="submit" name="reset" value="<%:Perform reset%>" /> </div> </div> - <% end %> - </div> - <br /> - <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here.%></div> - <div class="cbi-section-node"> + </form> + <% end %> + </div> + <br /> + <div class="cbi-section-descr"><%:To restore configuration files, you can upload a previously generated backup archive here.%></div> + <div class="cbi-section-node"> + <form class="inline" method="post" action="<%=url('admin/system/flashops/restore')%>" enctype="multipart/form-data"> <div class="cbi-value cbi-value-last"> <label class="cbi-value-title" for="archive"><%:Restore backup%>:</label> <div class="cbi-value-field"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="file" name="archive" id="archive" /> <input type="submit" class="cbi-button cbi-input-apply" name="restore" value="<%:Upload archive...%>" /> </div> </div> - </div> - </form> + </form> + </div> </fieldset> <br /> @@ -54,7 +61,8 @@ <fieldset class="cbi-section"> <legend><%:Flash new firmware image%></legend> <% if upgrade_avail then %> - <form method="post" action="<%=REQUEST_URI%>" enctype="multipart/form-data"> + <form method="post" action="<%=url('admin/system/flashops/sysupgrade')%>" enctype="multipart/form-data"> + <input type="hidden" name="token" value="<%=token%>" /> <div class="cbi-section-descr"><%:Upload a sysupgrade-compatible image here to replace the running firmware. Check "Keep settings" to retain the current configuration (requires an OpenWrt compatible firmware image).%></div> <div class="cbi-section-node"> <div class="cbi-value"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm index 6b812e837..a7ff4e50b 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm @@ -5,6 +5,6 @@ -%> <ul class="cbi-tabmenu"> - <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/system/packages")%>"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=url("admin/system/packages")%>"><%:Actions%></a></li> <li class="cbi-tab"><a href="#"><%:Configuration%></a></li> </ul> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 1ceda4785..1bc9caced 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -44,19 +44,20 @@ end <%+header%> -<h2><a id="content" name="content"><%:Software%></a></h2> +<h2 name="content"><%:Software%></h2> -<form method="post" action="<%=REQUEST_URI%>"> - <div class="cbi-map"> +<div class="cbi-map"> - <ul class="cbi-tabmenu"> - <li class="cbi-tab"><a href="#"><%:Actions%></a></li> - <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/ipkg"><%:Configuration%></a></li> - </ul> - - <fieldset class="cbi-section"> + <ul class="cbi-tabmenu"> + <li class="cbi-tab"><a href="#"><%:Actions%></a></li> + <li class="cbi-tab-disabled"><a href="<%=REQUEST_URI%>/ipkg"><%:Configuration%></a></li> + </ul> + <form method="post" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <fieldset class="cbi-section"> <fieldset class="cbi-section-node"> <% if (install and next(install)) or (remove and next(remove)) or update or upgrade then %> <div class="cbi-value"> @@ -80,7 +81,7 @@ end <% else %> <%:No package lists available%> <% end %> - <input type="button" onclick="location.href='?update=1'" href="#" class="cbi-button cbi-button-apply" style="margin-left:3em" value="<%:Update lists%>" /> + <input type="submit" name="update" href="#" class="cbi-button cbi-button-apply" style="margin-left:3em" value="<%:Update lists%>" /> </div> <% end %> @@ -101,7 +102,7 @@ end <label class="cbi-value-title"><%:Download and install package%>:</label> <div class="cbi-value-field"> <input type="text" name="url" size="30" value="" /> - <input class="cbi-button cbi-input-save" type="submit" name="submit" value="<%:OK%>" /> + <input class="cbi-button cbi-input-save" type="submit" name="exec" value="<%:OK%>" /> </div> </div> @@ -114,80 +115,98 @@ end </div> </fieldset> </fieldset> - <br /> - - <h3><%:Status%></h3> - - - <ul class="cbi-tabmenu"> - <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> - <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> - </ul> - - <% if display ~= "available" then %> - <fieldset class="cbi-section"> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - </tr> - <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, d) empty = false; filter[n] = true %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"><a onclick="return window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?')" href="<%=REQUEST_URI%>?submit=1&remove=<%=luci.util.pcdata(n)%>"><%:Remove%></a></td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - </tr> - <% end) %> - <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> - <% end %> - </table> - </fieldset> - <% else %> - <fieldset class="cbi-section"> - <% if not querypat then %> - <ul class="cbi-tabmenu"> - <% local i; for i = 65, 90 do %> - <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&letter=<%=string.char(i)%>"><%=string.char(i)%></a></li> - <% end %> - <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&letter=%23">#</a></li> - </ul> - <div class="cbi-section-node"> - <% end %> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Description%></th> - </tr> - <% local empty = true; opkg_list(querypat or letterpat, function(n, v, d) if filter[n] then return end; empty = false %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"><a onclick="return window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?')" href="<%=REQUEST_URI%>?submit=1&install=<%=luci.util.pcdata(n)%>"><%:Install%></a></td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - <td style="text-align:left"><%=luci.util.pcdata(d)%></td> - </tr> - <% end) %> - <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> - <% end %> - </table> - <% if not querypat then %> - </div> - <% end %> - </fieldset> + </form> + + + <h3><%:Status%></h3> + + + <ul class="cbi-tabmenu"> + <li class="cbi-tab<% if display ~= "installed" then %>-disabled<% end %>"><a href="?display=installed&query=<%=pcdata(query)%>"><%:Installed packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> + <li class="cbi-tab<% if display ~= "available" then %>-disabled<% end %>"><a href="?display=available&query=<%=pcdata(query)%>"><%:Available packages%><% if query then %> (<%=pcdata(query)%>)<% end %></a></li> + </ul> + + <% if display ~= "available" then %> + <fieldset class="cbi-section"> + <table class="cbi-section-table" style="width:100%"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell" style="text-align:left"> </th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> + </tr> + <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td style="text-align:left; width:10%"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="remove" value="<%=pcdata(n)%>" /> + <a onclick="window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Remove%></a> + </form> + </td> + <td style="text-align:left"><%=luci.util.pcdata(n)%></td> + <td style="text-align:left"><%=luci.util.pcdata(v)%></td> + </tr> + <% end) %> + <% if empty then %> + <tr class="cbi-section-table-row"> + <td style="text-align:left"> </td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + </tr> + <% end %> + </table> + </fieldset> + <% else %> + <fieldset class="cbi-section"> + <% if not querypat then %> + <ul class="cbi-tabmenu"> + <% local i; for i = 65, 90 do %> + <li class="cbi-tab<% if letter ~= i then %>-disabled<% end %>"><a href="?display=available&letter=<%=string.char(i)%>"><%=string.char(i)%></a></li> + <% end %> + <li class="cbi-tab<% if letter ~= 35 then %>-disabled<% end %>"><a href="?display=available&letter=%23">#</a></li> + </ul> + <div class="cbi-section-node"> + <% end %> + <table class="cbi-section-table" style="width:100%"> + <tr class="cbi-section-table-titles"> + <th class="cbi-section-table-cell" style="text-align:left"> </th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> + <th class="cbi-section-table-cell" style="text-align:right"><%:Size (.ipk)%></th> + <th class="cbi-section-table-cell" style="text-align:left"><%:Description%></th> + </tr> + <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> + <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <td style="text-align:left; width:10%"> + <form method="post" class="inline" action="<%=REQUEST_URI%>"> + <input type="hidden" name="exec" value="1" /> + <input type="hidden" name="token" value="<%=token%>" /> + <input type="hidden" name="install" value="<%=pcdata(n)%>" /> + <a onclick="window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Install%></a> + </form> + </td> + <td style="text-align:left"><%=luci.util.pcdata(n)%></td> + <td style="text-align:left"><%=luci.util.pcdata(v)%></td> + <td style="text-align:right"><%=luci.util.pcdata(s)%></td> + <td style="text-align:left"><%=luci.util.pcdata(d)%></td> + </tr> + <% end) %> + <% if empty then %> + <tr class="cbi-section-table-row"> + <td style="text-align:left"> </td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + <td style="text-align:right"><em><%:none%></em></td> + <td style="text-align:left"><em><%:none%></em></td> + </tr> + <% end %> + </table> + <% if not querypat then %> + </div> <% end %> - </div> -</form> + </fieldset> + <% end %> +</div> + <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm index 80768119f..c9551804d 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm @@ -1,25 +1,59 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> -<h3><%:Reboot%></h3> + +<h2 name="content"><%:Reboot%></h2> +<br /> + <p><%:Reboots the operating system of your device%></p> -<%- -local c = require("luci.model.uci").cursor():changes() -if c and next(c) then --%> - <p class="warning"><%:Warning: There are unsaved changes that will be lost while rebooting!%></p> -<%- -end -if not reboot then --%> -<p><a href="<%=controller%>/admin/system/reboot?reboot=1"><%:Perform reboot%></a></p> -<%- else -%> -<p><%:Please wait: Device rebooting...%></p> -<script type="text/javascript">setTimeout("location='<%=controller%>/admin'", 60000)</script> + +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> + <p class="alert-message warning"><%:Warning: There are unsaved changes that will get lost on reboot!%></p> <%- end -%> -<%+footer%>
\ No newline at end of file + +<hr /> + +<script type="text/javascript">//<![CDATA[ + var tries = 0; + + function ok() { + window.location = '<%=controller%>/admin'; + } + + function check() { + if (tries++ < 12) + window.setTimeout(ping, 5000); + else + alert('<%:Device unreachable%>'); + } + + function ping() { + var img = document.createElement('img'); + + img.onload = ok; + img.onerror = check; + img.src = '<%=resource%>/icons/loading.gif?' + Math.random(); + + document.getElementById('reboot-message').innerHTML = '<%:Waiting for device...%>'; + } + + function reboot(button) { + button.style.display = 'none'; + document.getElementById('reboot-message').parentNode.style.display = ''; + + (new XHR()).post('<%=controller%>/admin/system/reboot/call', { token: '<%=token%>' }, check); + } +//]]></script> + +<input class="cbi-button cbi-button-apply" type="button" value="<%:Perform reboot%>" onclick="reboot(this)" /> + +<p class="alert-message" style="display:none"> + <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> + <span id="reboot-message"><%:Device is rebooting...%></span> +</p> + +<%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm index b9d42357b..5ca0398e1 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Flash Firmware%> - <%:Verify%></a></h2> +<h2 name="content"><%:Flash Firmware%> - <%:Verify%></h2> <p> <%_ The flash image was uploaded. Below is the checksum and file size listed, @@ -45,12 +45,11 @@ </fieldset> <div class="cbi-page-actions right"> - <form style="display:inline" action="<%=REQUEST_URI%>" method="post"> - <input class="cbi-button cbi-button-reset" type="submit" value="<%:Cancel%>" /> - </form> - <form style="display:inline" action="<%=REQUEST_URI%>" method="post"> + <form class="inline" action="<%=REQUEST_URI%>" method="post"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="step" value="2" /> <input type="hidden" name="keep" value="<%=keep and "1" or ""%>" /> + <input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" /> <input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" /> </form> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm index 4284b44d3..370027e51 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Apply%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Apply%></h2> <% if changes then %> <%+cbi/apply_xhr%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index 84e22879e..c3373604f 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -1,12 +1,12 @@ <%# Copyright 2008 Steven Barth <steven@midlink.org> - Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org> Licensed to the public under the Apache License 2.0. -%> <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Changes%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Changes%></h2> <% if changes then %> <%+admin_uci/changelog%> @@ -25,15 +25,18 @@ <% end %> <div style="text-align:right"> - <form class="inline" method="get" action="<%=controller%>/admin/uci/apply"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/apply"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-apply" type="submit" value="<%:Apply%>" /> </form> - <form class="inline" method="get" action="<%=controller%>/admin/uci/saveapply"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/saveapply"> + <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" value="<%:Save & Apply%>" /> </form> - <form class="inline" method="get" action="<%=controller%>/admin/uci/revert"> + <form class="inline" method="post" action="<%=controller%>/admin/uci/revert"> + <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-reset" type="submit" value="<%:Revert%>" /> </form> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index d2bdc7a97..5da7281a8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Configuration%> / <%:Revert%></a></h2> +<h2 name="content"><%:Configuration%> / <%:Revert%></h2> <% if changes then %> <%+cbi/apply_xhr%> diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm index 4c536249a..d33a2ca29 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> +<h2 name="content"><%:System%></h2> <br /> <p><% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %></p> <p><%:Please wait: Device rebooting...%></p> diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm index b0f52f791..efc6aa72f 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> +<h2 name="content"><%:System%></h2> <h3><%:Backup / Restore%></h3> <p><%:Here you can backup and restore your configuration and - if possible - reset this device to the default settings.%></p> <br /> diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm index 9fb03c3c6..5818a567f 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm @@ -4,7 +4,7 @@ Licensed to the public under the Apache License 2.0. -%> -<h2><a id="content" name="content"><%:Hello!%></a></h2> +<h2 name="content"><%:Hello!%></h2> <p><%_This is the administration area of <abbr title="Lua Configuration Interface">LuCI</abbr>.%></p> <p><%_<abbr title="Lua Configuration Interface">LuCI</abbr> is a free, flexible, and user friendly graphical interface for configuring OpenWrt.%><br /> <%:On the following pages you can adjust all important settings of this device.%></p> diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm index 0717f68d8..f70e7c92d 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm @@ -5,7 +5,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> +<h2 name="content"><%:System%></h2> <h3><%:Reboot%></h3> <p><%:Reboots the operating system of your device%></p> <%- diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm index 474c22037..ecd1e8a7a 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm @@ -6,7 +6,7 @@ <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> +<h2 name="content"><%:System%></h2> <h3><%:Flash Firmware%></h3> <% if step == 1 then %> diff --git a/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua b/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua index 6f7864301..60caadb4b 100644 --- a/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua +++ b/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua @@ -84,11 +84,13 @@ function action_flashops() fp = io.open(image_tmp, "w") end end - if chunk then - fp:write(chunk) - end - if eof then - fp:close() + if fp then + if chunk then + fp:write(chunk) + end + if eof then + fp:close() + end end end ) diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm index 0c8cebc13..12c138c16 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm @@ -25,7 +25,7 @@ <body> <div id="maincontainer"> <div id="maincontent"> - <h2><a id="content" name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></a></h2> + <h2 name="content"><%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %></h2> <fieldset class="cbi-section"> <p> <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm index 29c4d2d6f..3c8d11bb7 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm @@ -7,7 +7,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Flash operations%></a></h2> +<h2 name="content"><%:Flash operations%></h2> <fieldset class="cbi-section"> <legend><%:Flash new firmware image%></legend> <% if upgrade_avail then %> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm index 189939afb..cbbe13b42 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm @@ -6,7 +6,7 @@ -%> <%+header%> -<h2><a id="content" name="content"><%:System%></a></h2> +<h2 name="content"><%:System%></h2> <h3><%:Reboot%></h3> <p><%:Reboots the operating system of your device%></p> <%- if not reboot then -%> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm index 619ed85de..3be9ae119 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm @@ -7,7 +7,7 @@ <%+header%> -<h2><a id="content" name="content"><%:Flash Firmware%> - <%:Verify%></a></h2> +<h2 name="content"><%:Flash Firmware%> - <%:Verify%></h2> <p> <%_ The flash image was uploaded. Below is the checksum and file size listed, diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm index b2e168363..dbf3820f5 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm @@ -11,7 +11,7 @@ %> <% if has_latlon then %> - <iframe style="width:100%; height:640px; border:none" src="<%=luci.dispatcher.build_url("freifunk/map/content")%>"></iframe> + <iframe style="width:100%; height:640px; border:none" src="<%=url("freifunk/map/content")%>"></iframe> <h3><%:Legend%>:</h3> <ul> <li><strong><span style="color:#00cc00"><%:Green%></span></strong>:<%:Very good (ETX < 2)%></li> diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm index f7cb4a92b..1add595c6 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm @@ -27,7 +27,7 @@ else end %> -<h2><a id="content" name="content"><%:Contact%></a></h2> +<h2 name="content"><%:Contact%></h2> <fieldset xmlns="http://www.w3.org/1999/xhtml" class="cbi-section"> <legend><%:Operator%></legend> diff --git a/modules/luci-mod-rpc/luasrc/controller/rpc.lua b/modules/luci-mod-rpc/luasrc/controller/rpc.lua index 129ca43b5..759bb749c 100644 --- a/modules/luci-mod-rpc/luasrc/controller/rpc.lua +++ b/modules/luci-mod-rpc/luasrc/controller/rpc.lua @@ -49,10 +49,10 @@ function rpc_auth() server.challenge = function(user, pass) local sid, token, secret - require "luci.config" + local config = require "luci.config" if sys.user.checkpasswd(user, pass) then - local sdat = util.ubus("session", "create", { timeout = luci.config.sauth.sessiontime }) + local sdat = util.ubus("session", "create", { timeout = config.sauth.sessiontime }) if sdat then sid = sdat.ubus_rpc_session token = sys.uniqueid(16) diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua index 9315dc25b..7b5e6043c 100644 --- a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua @@ -39,7 +39,7 @@ protocol.optional = true server = section:taboption("general", Value, "server", translate("Tunnel setup server"), translate("Optional, specify to override default server (tic.sixxs.net)")) -server.datatype = "host" +server.datatype = "host(0)" server.optional = true diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua index 2f8108ef1..37d4ec901 100644 --- a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua @@ -50,7 +50,7 @@ ip6prefixlen.datatype = "range(0,64)" s:taboption("general", Value, "ealen", - translate("EA-bits length")).datatype = "range(0,16)" + translate("EA-bits length")).datatype = "range(0,48)" s:taboption("general", Value, "psidlen", translate("PSID-bits length")).datatype = "range(0,16)" diff --git a/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua b/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua index 4ed34ae3b..ad3f2edf0 100644 --- a/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua +++ b/protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua @@ -13,7 +13,7 @@ oc_key_file = "/etc/openconnect/user-key-" .. ifc .. ".pem" oc_ca_file = "/etc/openconnect/ca-" .. ifc .. ".pem" server = section:taboption("general", Value, "server", translate("VPN Server")) -server.datatype = "host" +server.datatype = "host(0)" port = section:taboption("general", Value, "port", translate("VPN Server port")) port.placeholder = "443" diff --git a/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua index 523ef1bc6..506170c2d 100644 --- a/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua +++ b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_l2tp.lua @@ -8,7 +8,7 @@ local ipv6, defaultroute, metric, peerdns, dns, mtu server = section:taboption("general", Value, "server", translate("L2TP Server")) -server.datatype = "host" +server.datatype = "or(host(1), hostport(1))" username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) diff --git a/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua new file mode 100644 index 000000000..eca7bdd4d --- /dev/null +++ b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pppossh.lua @@ -0,0 +1,122 @@ +-- Copyright (C) 2015 Yousong Zhou <yszhou4tech@gmail.com> +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local sshuser, server, port, ssh_options, identity, ipaddr, peeraddr + +sshuser = section:taboption("general", Value, "sshuser", translate("SSH username")) + +server = section:taboption("general", Value, "server", translate("SSH server address")) +server.datatype = "host(0)" + +port = section:taboption("general", Value, "port", translate("SSH server port")) +port.datatype = "port" +port.optional = true +port.default = 22 + +ssh_options = section:taboption("general", Value, "ssh_options", translate("Extra SSH command options")) +ssh_options.optional = true + +identity = section:taboption("general", DynamicList, "identity", translate("List of SSH key files for auth")) +identity.optional = true +identity.datatype = "file" + +ipaddr = section:taboption("general", Value, "ipaddr", translate("Local IP address to assign")) +ipaddr.datatype = "ipaddr" + +peeraddr = section:taboption("general", Value, "peeraddr", translate("Peer IP address to assign")) +peeraddr.datatype = "ipaddr" + + +local ipv6, defaultroute, metric, peerdns, dns, + keepalive_failure, keepalive_interval, demand + +if luci.model.network:has_ipv6() then + ipv6 = section:taboption("advanced", Flag, "ipv6", + translate("Enable IPv6 negotiation on the PPP link")) + ipv6.default = ipv6.disabled +end + + +defaultroute = section:taboption("advanced", Flag, "defaultroute", + translate("Use default gateway"), + translate("If unchecked, no default route is configured")) + +defaultroute.default = defaultroute.enabled + + +metric = section:taboption("advanced", Value, "metric", + translate("Use gateway metric")) + +metric.placeholder = "0" +metric.datatype = "uinteger" +metric:depends("defaultroute", defaultroute.enabled) + + +peerdns = section:taboption("advanced", Flag, "peerdns", + translate("Use DNS servers advertised by peer"), + translate("If unchecked, the advertised DNS server addresses are ignored")) + +peerdns.default = peerdns.enabled + + +dns = section:taboption("advanced", DynamicList, "dns", + translate("Use custom DNS servers")) + +dns:depends("peerdns", "") +dns.datatype = "ipaddr" +dns.cast = "string" + + +keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure", + translate("LCP echo failure threshold"), + translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures")) + +function keepalive_failure.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^(%d+)[ ,]+%d+") or v) + end +end + +function keepalive_failure.write() end +function keepalive_failure.remove() end + +keepalive_failure.placeholder = "0" +keepalive_failure.datatype = "uinteger" + + +keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval", + translate("LCP echo interval"), + translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold")) + +function keepalive_interval.cfgvalue(self, section) + local v = m:get(section, "keepalive") + if v and #v > 0 then + return tonumber(v:match("^%d+[ ,]+(%d+)")) + end +end + +function keepalive_interval.write(self, section, value) + local f = tonumber(keepalive_failure:formvalue(section)) or 0 + local i = tonumber(value) or 5 + if i < 1 then i = 1 end + if f > 0 then + m:set(section, "keepalive", "%d %d" %{ f, i }) + else + m:del(section, "keepalive") + end +end + +keepalive_interval.remove = keepalive_interval.write +keepalive_interval.placeholder = "5" +keepalive_interval.datatype = "min(1)" + + +demand = section:taboption("advanced", Value, "demand", + translate("Inactivity timeout"), + translate("Close inactive connection after the given amount of seconds, use 0 to persist connection")) + +demand.placeholder = "0" +demand.datatype = "uinteger" diff --git a/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua index d81db1fae..462d7019f 100644 --- a/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua +++ b/protocols/luci-proto-ppp/luasrc/model/cbi/admin_network/proto_pptp.lua @@ -9,7 +9,7 @@ local defaultroute, metric, peerdns, dns, server = section:taboption("general", Value, "server", translate("VPN Server")) -server.datatype = "host" +server.datatype = "host(0)" username = section:taboption("general", Value, "username", translate("PAP/CHAP username")) diff --git a/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua b/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua index e84658c70..7bbd78fa1 100644 --- a/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua +++ b/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua @@ -4,7 +4,7 @@ local netmod = luci.model.network local _, p -for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp"}) do +for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) do local proto = netmod:register_protocol(p) @@ -21,6 +21,8 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp"}) do return luci.i18n.translate("PPPoATM") elseif p == "l2tp" then return luci.i18n.translate("L2TP") + elseif p == "pppossh" then + return luci.i18n.translate("PPPoSSH") end end @@ -41,6 +43,8 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp"}) do return "ppp-mod-pppoa" elseif p == "l2tp" then return "xl2tpd" + elseif p == "pppossh" then + return "pppossh" end end @@ -55,6 +59,8 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp"}) do return nixio.fs.access("/lib/netifd/proto/3g.sh") elseif p == "l2tp" then return nixio.fs.access("/lib/netifd/proto/l2tp.sh") + elseif p == "pppossh" then + return nixio.fs.access("/lib/netifd/proto/pppossh.sh") else return nixio.fs.access("/lib/netifd/proto/ppp.sh") end diff --git a/protocols/luci-proto-vpnc/Makefile b/protocols/luci-proto-vpnc/Makefile new file mode 100644 index 000000000..9c77e67a5 --- /dev/null +++ b/protocols/luci-proto-vpnc/Makefile @@ -0,0 +1,23 @@ +# +# 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:=Support for VPNC VPN +LUCI_DEPENDS:=+vpnc +LUCI_PKGARCH:=all + +PKG_NAME:=luci-proto-vpnc +PKG_RELEASE=1 +PKG_VERSION:=1.0.0 +PKG_MAINTAINER:=Daniel Dickinson <openwrt@daniel.thecshore.com> +PKG_LICENSE:=Apache-2.0 + +LUA_TARGET:=source + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature
\ No newline at end of file diff --git a/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua b/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua new file mode 100644 index 000000000..e450470eb --- /dev/null +++ b/protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua @@ -0,0 +1,82 @@ +-- Copyright 2015 Daniel Dickinson <openwrt@daniel.thecshore.com> +-- Licensed to the public under the Apache License 2.0. + +local map, section, net = ... + +local server, username, password, hexpassword +local authgroup, interface, passgroup, hexpassgroup +local domain, vendor, natt_mode, dh_group +local pfs, enable_single_des, enable_no_enc +local mtu, local_addr, local_port, dpd_idle +local auth_mode, target_network + +local ifc = net:get_interface():name() + +server = section:taboption("general", Value, "server", translate("VPN Server")) +server.datatype = "host(0)" + +port = section:taboption("general", Value, "local_addr", translate("VPN Local address")) +port.placeholder = "0.0.0.0" +port.datatype = "ipaddr" + +port = section:taboption("general", Value, "local_port", translate("VPN Local port")) +port.placeholder = "500" +port.datatype = "port" + +ifname = section:taboption("general", Value, "interface", translate("Output Interface")) +ifname.template = "cbi/network_netlist" + +mtu = section.taboption("general", Value, "mtu", translate("MTU")) +mtu.datatype = "uinteger" + +section:taboption("general", Value, "authgroup", translate("AuthGroup")) + +username = section:taboption("general", Value, "username", translate("Username")) +password = section:taboption("general", Value, "password", translate("Password")) +hexpassword = section:taboption("general", Value, "hexpassword", translate("Obfuscated Password")) +password.password = true +hexpassword.password = true +authroup = section:taboption("general", Value, "authgroup", translate("Auth Group")) +passgroup = section:taboption("general", Value, "passgroup", translate("Group Password")) +hexpassgroup = section:taboption("general", Value, "hexpassgroup", translate("Obfuscated Group Password")) +password.passgroup = true +hexpassword.passgroup= true + +domain = section:taboption("general", Value, "domain", translate("NT Domain")) +vendor = section:taboption("general", Value, "vendor", translate("Vendor")) +dh_group = section:taboption("general", ListValue, "dh_group", translate("IKE DH Group")) +dh_group:value("dh2") +dh_group:value("dh1") +dh_group:value("dh5") + +pfs = section:taboption("general", ListValue, "pfs", translate("Perfect Forward Secrecy")) +dh_group:value("server") +dh_group:value("nopfs") +dh_group:value("dh1") +dh_group:value("dh2") +dh_group:value("dh5") + +natt_mode = section:taboption("general", ListValue, "natt_mode", translate("NAT-T Mode") +natt_mode:value("natt", translate("RFC3947 NAT-T mode")) +natt_mode:value("none", translate("No NAT-T")) +natt_mode:value("force-natt", translate("Force use of NAT-T") +natt_mode:value("cisco-udp", translate("Cisco UDP encapsulation") + +enable_no_enc = section:taboption("general", Flag, "enable_no_enc", + translate("Disable Encryption"), + translate("If checked, encryption is disabled")) +enable_no_enc.default = enable_no_enc.disabled + +enable_single_des = section:taboption("general", Flag, "enable_single_des", + translate("Enable Single DES"), + translate("If checked, 1DES is enaled")) +enable_no_enc.default = enable_single_des.disabled + +dpd_idle = section.taboption("general", Value, "dpd_idle", translate("DPD Idle Timeout")) +dpd_idle.datatype = "uinteger" +dpd.placeholder = "600" + +ifname = section:taboption("general", Value, "target_network", translate("Target network")) +port.placeholder = "0.0.0.0/0" +port.datatype = "network" + diff --git a/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua b/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua new file mode 100644 index 000000000..f4cae0bd2 --- /dev/null +++ b/protocols/luci-proto-vpnc/luasrc/model/network/proto_vpnc.lua @@ -0,0 +1,46 @@ +-- Copyright 2015 Daniel Dickinson <openwrt@daniel.thecshore.com> +-- Licensed to the public under the Apache License 2.0. + +local netmod = luci.model.network +local interface = luci.model.network.interface +local proto = netmod:register_protocol("vpnc") + +function proto.get_i18n(self) + return luci.i18n.translate("VPNC (CISCO 3000 (and others) VPN)") +end + +function proto.ifname(self) + return "vpn-" .. self.sid +end + +function proto.get_interface(self) + return interface(self:ifname(), self) +end + +function proto.opkg_package(self) + return "vpnc" +end + +function proto.is_installed(self) + return nixio.fs.access("/lib/netifd/proto/vpnc.sh") +end + +function proto.is_floating(self) + return true +end + +function proto.is_virtual(self) + return true +end + +function proto.get_interfaces(self) + return nil +end + +function proto.contains_interface(self, ifc) + return (netmod:ifnameof(ifc) == self:ifname()) + +end + +netmod:register_pattern_virtual("^vpn-%w") + diff --git a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm index f4a681009..3b40ad438 100644 --- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm +++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm @@ -178,7 +178,7 @@ %> <div class="pull-right"> <% if ucichanges > 0 then %> - <a class="label notice" href="<%=controller%>/<%=category%>/uci/changes"><%:Unsaved Changes%>: <%=ucichanges%></a> + <a class="label notice" href="<%=controller%>/<%=category%>/uci/changes?redir=<%=http.urlencode(http.formvalue("redir") or REQUEST_URI)%>"><%:Unsaved Changes%>: <%=ucichanges%></a> <% end %> <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()"> <span class="label success" id="xhr_poll_status_on"><%:Auto Refresh%> <%:on%></span> diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css deleted file mode 100644 index 4f89b2d3a..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css +++ /dev/null @@ -1,872 +0,0 @@ -* { - margin: 0; - padding: 0; -} - -body { - background-color: #ffffff; - color: #ffffff; - font-family: Verdana, Arial, sans-serif; - font-size: 100%; - line-height: 100%; - background-image: url(images/main-back.png); - background-repeat: repeat-x; - background-position: left bottom; - } -#all { - margin: 0px; - padding: 0px; - min-height: 800px; -} - -code { - font-family: monospace; - white-space: pre; -} - -a:link, a:visited { - color:#000000; - font-weight:bold; - text-decoration:none; - } -a:hover { - color:#333333; - font-weight:bold; - } - -/* Custom*/ - #wrapper -{ - width: 95%; - color: #333333; - margin-left: auto; - margin-right: auto; -/* background-image: url(images/corner-left.gif); */ -/* background-repeat: no-repeat; */ -/* background-position: left bottom; */ - background-color: #FffdF4; - min-width: 710px; - min-height: 710px; -} -#main { - clear: both; - width: 100%; - margin: 0; - padding: 0; - color: #333333; -/* background-image: url(images/corner-right.gif); */ -/* background-repeat: no-repeat; */ -/* background-position: right bottom; */ - min-height: 710px; -} - -div#maincontent ul { - margin-left: 2em; -} - -.warning { - color: red !important; - font-weight: bold; -} - -.clear { - clear: both; - height: 1px; -} - -.hidden { - display: none; -} - -.error { - color: #ff0000; -} - -#header -{ - padding: 0px; - height: 100px; -} -#headerleft -{ - height: 100px; - background-color: #FFFfff; - background-image: url(images/header-left.gif); - background-repeat: no-repeat; - background-position: left top; -} -#headerright -{ - height: 100px; - background-color: #FFfffF; - - margin-left: 5px; - background-image: url(images/header-right.gif); - background-repeat: no-repeat; - background-position: right top; -} - -#headerback -{ - margin-right: 5px; - height: 100px; - background-color: #FFfffF; - background-image: url(images/header-back.gif); - background-repeat: repeat-x; - background-position: left top; -} -#schriftzug { - font-size : 1.5em; - text-align:left; - margin-bottom: 7px; - margin-top: 7px; - float:left; - width: 450px; -} - -#schriftzug a:hover{ - background-color:transparent; -} -#logo{ - margin-top: 5px; - float:right; - width: 115px; -} - -.pathbar { - display: none; -} - -.menubar { - width: 100%; - min-height: 1.8em; - background: #ffffff; - color: #000000; - border-top:0.4em solid #DC0067; -} - -.mainmenu { - float: left; - width: auto; - min-height: 1.8em; - background: #ffffff; - color: #000000; -} -.modemenu li { - border-top:0.3em solid #DC0067; - margin-left: 0.3em; - margin-top: -0.3em; -} -.mainmenu div { - float: left; - border-top:0.3em solid #DC0067; - margin-right: 0.3em; - margin-top: -0.3em; -} -.mainmenu div.preactive { - border-top: 0.3em solid #FFCB05; - margin-top: -0.2em; -} - -.mainmenu li { - white-space: nowrap; -} - -.mainmenu div ul { - display: none; - position: absolute; - background: #ffffff; - color: #000000; - border-width: 0 1px 1px 1px; - border-style: solid; - border-color: #444444; - list-style-type: none; -} - -.mainmenu ul li:hover > ul, -.mainmenu div:hover > ul { - display: block; -} - -.mainmenu ul li > ul { - left: 100%; - margin-top: -1.8em; - border-width: 1px; -} - -.modemenu a, -.mainmenu a { - display: block; - padding: 0.2em; - color: #000000; - text-decoration: none; - font-size: 70%; - font-weight: bold; -} - - -.modemenu .active a { - color: #000000; - font-weight: bold; - border-top:0.3em solid #FFCB05; - margin-top: -0.2em; -} -.mainmenu .active a{ - color: #000000; - font-weight: bold; - border-top:0.2em solid #FFCB05; -} -.mainmenu li > span:active { - background-color: #FFE990; -} - -.mainmenu li:hover > span > a, -.mainmenu div:hover > a { -color: #ffffff; -background-color: #FFCB05; -} - - -.modemenu a:focus, -.mainmenu a:focus { - color: #000000; -} - -.mainmenu a:hover, -.modemenu a:hover { -color: #ffffff; -background-color: #FFCB05; -} - -.mainmenu div.preactive > a { - color: #DC0067; - font-weight: bold; -} -.mainmenu div.preactive > a:hover, -.mainmenu div.preactive > a:focus { - color: #ffffff; - font-weight: bold; -} - -.modemenu ul { - width: auto; - background: #000000; - color: #ffffff; - list-style-type: none; -} - -.modemenu li { - float: right; - -} - -#maincontent { - clear: both; - width: 98%; - margin: 0 auto; - padding: 0.5em; - background: #FFF4BE; - color: #000000; - font-size: 80%; - border-top:1px solid #D2A800; -} - -#maincontent h2 { - margin: 0.25em 0 0.5em 0; - font-size: 150%; - font-weight: normal; -} - -#maincontent h3 { - margin: 0.5em 0; - font-size: 120%; - font-weight: normal; - text-decoration: underline; -} - -#maincontent p { - margin-bottom: 1em; -} - -.cbi-section { - margin-bottom: 0.5em; - padding: 0.5em 1em; - border: 1px dotted #D2A800; - background-color: #FFE990; -} - -.cbi-section legend { - font-size: 110%; - font-weight: bold; - height: 1em; - padding: 0 0.25em; - color: #555555; -} - -.cbi-section h2 { - margin: 0em 0 0.5em -0.5em !important; -} - -.cbi-section h3 { - height: 1.5em; - font-size: 90%; - color: #555555; -} - -.cbi-section-descr { - margin-bottom: 0.5em; - font-size: 95%; -} - -.cbi-title-ref { - color: inherit; - text-decoration: none; - padding-right: 18px; - background: url('../resources/cbi/link.gif') no-repeat scroll right center; - background-color: inherit; -} - -input[type=submit], -input[type=reset], -input[type=image], -label { - cursor: pointer; -} - -select, -input, -textarea { - background: #FffdF4; - color: #000000; - border-width: 1px; - border-color: #000000; -} - -input[type=image] { - border: none; -} - - -input:focus, -input:hover, -select:focus, -select:hover, -textarea:focus, -textarea:hover { - background-color: #FFF4BE; -} - -select, -input[type=text], -input[type=password] { - width: 20em; -} - -td select, -td input[type=text], -td input[type=password] { - width: 99%; -} - -img.cbi-image-button { - cursor: pointer; - margin: 0 2px; - vertical-align: middle; -} - -input.cbi-input-user { - background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; -} - -input.cbi-input-password { - background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; -} - -input.cbi-input-find { - background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; -} - -input.cbi-input-reload { - background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; -} - -input.cbi-input-add, -input.cbi-button-add { - background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-fieldadd, -input.cbi-button-fieldadd { - background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-reset, -input.cbi-button-reset { - background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-save, -input.cbi-button-save { - background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-apply, -input.cbi-button-apply { - background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-input-remove, -div.cbi-section-remove input { - background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; - background-color: inherit; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-button-up { - background-image: url('../resources/cbi/up.gif'); - padding-left: 11px; - padding-right: 1px; -} - -input.cbi-button-down { - background-image: url('../resources/cbi/down.gif'); - padding-left: 11px; - padding-right: 1px; -} - -input.cbi-button-edit { - background-image: url('../resources/cbi/edit.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-button-reload { - background-image: url('../resources/cbi/reload.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-button-reset { - background-image: url('../resources/cbi/reset.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -input.cbi-button-remove { - background-image: url('../resources/cbi/remove.gif'); - color: #000000; - padding-left: 17px; - padding-right: 1px; -} - -.cbi-input-invalid { - background-image: url('../resources/cbi/reset.gif'); - background-repeat: no-repeat; - background-position: right; - color: #FF0000 !important; - border-color: #FF0000; -} - -div.cbi-section-remove input { - border-bottom: none; -} - -textarea { - margin-left: -1px; - margin-bottom: 0.5em; -} - -form > div > input[type=submit], -form > div > input[type=reset] { - float: right; - margin-left: 0.5em; -} - -table.smalltext { -background-color: #FFCB05; - border-top: 1px solid #666666; - border-right: 1px solid #666666; - border-bottom: 1px solid #666666; - font-size: 90%; - width: 80%; - margin-left: auto; - margin-right: auto; - border-collapse: collapse; -} - -table.smalltext tr:hover td { -background-color: #FFE990; -} - -table.smalltext tr th { - padding: 0 0.25em; - border-left: 1px solid #666666; - text-align: left; -} - -table.smalltext tr td { - padding: 0 0.25em; - border-top: 1px solid #666666; - border-left: 1px solid #666666; -} - -.cbi-rowstyle-1 { - background-color: #FFF4BE; -} - -.cbi-rowstyle-2 { -} - -table.cbi-section-table .cbi-section-table-cell { - padding: 3px; - white-space: nowrap; -} - -div.cbi-value { - clear: left; - vertical-align: middle; - padding-left: 0.25em; - border-bottom: 1px dotted #FFCB05; -} - -div.cbi-value:hover { - background: #FFF4BE; -} - -div.cbi-value:last-child { - border: none; -} - -.cbi-value-title { - float: left; - width: 40%; -} - -div.cbi-value-field { - width: 58%; - margin: 0.25em 0 0.25em 40%; -} - -div.cbi-value-description { - font-size: 90%; -} - -div.cbi-value-field > div.cbi-value-description { - display: none; -} - -div.cbi-value:hover div.cbi-value-field > div.cbi-value-description { - display: block; - color: #ffffff; - background-color: #FFCB05; -} - -option:active, -option:before, -option:after, -option:focus, -option:hover { - color: #ffffff; - background-color: #EEBA00; - background: url(images/bgoption.png); -} - -div.cbi-section-create { - clear: left; - white-space: nowrap; -} - -div.cbi-map-descr { - margin-bottom: 1em; -} - -div.cbi-optionals { - margin: 0.5em 0; - padding: 0 0.25em; -} - -div.cbi-section-remove { - float: right; -} - -.cbi-section-node { - clear: both; - border: 1px dotted #FFCB05; - padding-bottom: 0; -} - -.cbi-section-node div.cbi-section-table-row { - margin: 0.25em; -} - -table.cbi-section-table { - width: 100%; - font-size: 95%; -} - -table.cbi-section-table th, -table.cbi-section-table td { - text-align: center; -} - -tr.cbi-section-table-descr th { - font-weight: normal; - font-size: 90%; -} - -td.cbi-section-table-optionals { - text-align: left !important; - padding-top: 1em; -} - -.cbi-value-helpicon img { - vertical-align: bottom; -} - -div.cbi-error { - font-size: 95%; - font-weight: bold; - color: #FF0000; -} - -td.cbi-value-error { - border-color: red !important; -} - -.cbi-value-error input, -.cbi-value-error select { - color: red !important; - background-color: #FFCCCC; -} - -.cbi-section-error { - color: red; - font-size: 95%; - border: 1px dotted red; - margin: 3px; - padding: 3px; -} - -ul.cbi-apply { - font-size: 90%; -} - -ul.cbi-tabmenu { - padding: 3px 0; - margin-left: 0 !important; - margin-bottom: -1px; - list-style-type: none; -} - -ul.cbi-tabmenu li.cbi-tab, -ul.cbi-tabmenu li.cbi-tab-disabled { - display: inline; - margin: 0; -} - -ul.cbi-tabmenu li.cbi-tab a, -ul.cbi-tabmenu li.cbi-tab-disabled a { - text-decoration: none; - padding: 3px 7px; - margin-right: 3px; - border: 1px outset #000; - border-bottom: none; - background-color: #eee; - color: #bbb; -} - -ul.cbi-tabmenu li.cbi-tab-highlighted a { - color: #000; - background-color: #FFEEAA; -} - -ul.cbi-tabmenu li a:hover { - color: #000; -} - -ul.cbi-tabmenu li.cbi-tab a { - position: relative; - top: 1px; - padding-top: 4px; - color: #000; - background-color: #fff; -} - -div.cbi-tab-descr { - background-image: url(/luci-static/resources/cbi/help.gif); - background-position: 0.25em 50%; - background-repeat: no-repeat; - border-bottom: 1px solid #ccc; - margin: 0.25em 0.25em 2em; - padding: 0.5em 0.5em 0.5em 2em; -} - - -.left { - text-align: left !important; -} - -.right { - text-align: right !important; -} - -.luci { - position: fixed; - bottom: 0; - left: 0; - text-align: right; -} - -.luci a { - color: #666666; - text-decoration: none; - font-size: 70%; -} - -.inline { - display: inline; -} - -.error500 { - white-space: normal; - border: 1px dotted #FF0000; - background-color: #FFFFFF; - padding: 0.5em; -} - -/* obligatory IE6 Voodoo Code */ -* html body { - padding-left: 50% !important; -} - -* html div#header { - margin-left: -100% !important; -} - -* html div.menubar { - margin-left: -100% !important; - width: 200% !important; -} - -* html div#maincontent { - margin-left: -80% !important; - width: 160% !important; -} - -* html div.mainmenu div.hover ul, -* html div.mainmenu div li.hover ul, -* html div.mainmenu div li li.hover ul, -* html div.mainmenu div li li li.hover ul, -* html div.mainmenu div li li li li.hover ul { - display: block !important; - margin-left: 3em; -} - -* html div.mainmenu div.hover ul { - margin-left: 0; -} - -* html div.mainmenu .hover ul ul, -* html div.mainmenu .hover ul ul ul, -* html div.mainmenu .hover ul ul ul ul, -* html div.mainmenu .hover ul ul ul ul ul { - display: none !important; -} - -* html div.mainmenu li { - height: 1em !important; - width: 10em !important; -} - -* html .mainmenu { - height: 1.8em; -} - -* html div.cbi-value-description { - margin-left: 40%; -} - - -.ifacebox { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - margin: 0 10px; - text-align: center; - white-space: nowrap; -} - -.ifacebox .ifacebox-head { - border-bottom: 1px solid #CCCCCC; - padding: 2px; -} - -.ifacebox .ifacebox-body { - padding: 2px; -} - - -.ifacebadge { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - padding: 2px; - margin-left: 2px; - display: inline-block; -} - -.ifacebadge-active { - border-color: #000000; - font-weight: bold; -} - - -.zonebadge { - padding: 2px; - display: inline-block; - white-space: nowrap; - cursor: pointer; -} - -.zonebadge em, -.zonebadge strong { - margin: 3px; - display: inline-block; -} - -.zonebadge input { - width: 6em; - height: 1.5em; -} - -.zonebadge-empty { - border: 1px dashed #AAAAAA; - color: #AAAAAA; - font-style: italic; - font-size: smaller; -} diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png Binary files differdeleted file mode 100644 index 6fd1e2f34..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico Binary files differdeleted file mode 100644 index 7247cfac5..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif Binary files differdeleted file mode 100644 index 21fe02b1e..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif Binary files differdeleted file mode 100644 index a3258ccb6..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif Binary files differdeleted file mode 100644 index 93d0291a2..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif Binary files differdeleted file mode 100644 index ff00d6ddb..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png Binary files differdeleted file mode 100644 index 34aca44e0..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif Binary files differdeleted file mode 100644 index 82607d533..000000000 --- a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif +++ /dev/null diff --git a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm b/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm deleted file mode 100644 index 2dbade371..000000000 --- a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm +++ /dev/null @@ -1,24 +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. --%> - - <br class="clear" /> - </div> -</div></div> -</div> - -<div class="luci separator black whitetext bold"> - <% local ver = require "luci.version" -%> - <a href="<%=controller%>/about">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> -</div> -</div><!-- end main --><div align="center" style="padding-top:5px "></div> -<br> -</div><!-- end wrapper --> - -</center> -</div> - -</body> -</html> diff --git a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm b/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm deleted file mode 100644 index d108a0893..000000000 --- a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm +++ /dev/null @@ -1,209 +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. --%> - -<% -require("luci.sys") -require("luci.util") - -local boardinfo = luci.util.ubus("system", "board") - -local request = require("luci.dispatcher").context.path -local category = request[1] -local tree = luci.dispatcher.node() -local cattree = category and luci.dispatcher.node(category) -local node = luci.dispatcher.context.dispatched - -local c = tree -for i,r in ipairs(request) do - if c.nodes and c.nodes[r] then - c = c.nodes[r] - c._menu_selected = true - end -end - -require("luci.http").prepare_content("text/html") - --%> - -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> - <link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> - <% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> - <% if css then %><style title="text/css"> - <%-= css %> - </style> - <% end -%> - <link rel="shortcut icon" href="<%=media%>/images/favicon.ico" /> - <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> - <meta http-equiv="content-script-type" content="text/javascript" /> - <script type="text/javascript" src="<%=resource%>/xhr.js"></script> - <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> - - <!--[if lt IE 7]> - <script type="text/javascript"> - function setup_hover() { - function ie_hover(e) { - e.onmouseover = function() { this.className = "hover" } - e.onmouseout = function() { this.className = null } - } - - var lis = document.getElementById("mainmenu").getElementsByTagName("LI"); - var divs = document.getElementById("mainmenu").getElementsByTagName("DIV"); - - for( var i = 0; i < lis.length; i++ ) ie_hover( lis[i] ); - for( var i = 0; i < divs.length; i++ ) ie_hover( divs[i] ); - } - </script> - <![endif]--> -</head> -<body onload="window.setup_hover && setup_hover()"> -<div id="all"> -<center> - -<div id="wrapper"> -<%- if luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> - <div class="warning"> - <strong><%:No password set!%></strong><br /> - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> - </div> -<%- end -%> -<div id="main"> - - -<div id="header"> - <div id="headerleft"> - <div id="headerright"> - <div id="headerback"> - <div id="schriftzug"><img src="<%=media%>/images/schriftzug.gif" alt="Freifunk Nordost ueberschrift" name="Freifunk_nordost_ueberschrift" border="0"> </div> - <div id="logo"><img src="<%=media%>/images/logo.gif" alt="Freifunk Nordost logo" name="Freifunk_nordost" border="0"></a></div> - <div class="clear"></div> - - </div> - </div> - </div> -</div> - -<div class="pathbar separator black whitetext bold"> -<%:Path%>: <% -local c = tree -local url = controller -for k,v in pairs(request) do - if c.nodes and c.nodes[v] then - c = c.nodes[v] - url = url .. "/" .. v - %><a href="<%=url%>"><%=pcdata(striptags(translate(c.title) or v))%></a> <% if k ~= #request then %>» <% end - end -end -%> -</div> - -<div class="menubar"> - <div id="mainmenu" class="mainmenu"> -<%- -local function submenu(prefix, node) - if not node.nodes or node.hidden then - return false - end - local index = {} - local count = 0 - for k, n in pairs(node.nodes) do - if n.title and n.target then - table.insert(index, {name=k, order=n.order or 100}) - count = count + 1 - end - end - - table.sort(index, function(a, b) return a.order < b.order end) - - if count > 0 then -%> - <ul> - <%- for j, v in pairs(index) do - if not v.hidden and #v.name > 0 then - local nnode = node.nodes[v.name] - local href = controller .. prefix .. v.name - href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href - %> - <li> - <span<% if nnode._menu_selected then %> class="active"<%end%>><a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></span> - <%- submenu(prefix .. v.name .. "/", nnode) %> - </li> - <%- end %> - <%- end %> - </ul> -<%- - end -end - -if cattree and cattree.nodes then - local index = {} - for k, node in pairs(cattree.nodes) do - table.insert(index, {name=k, order=node.order or 100}) - end - - table.sort(index, function(a, b) return a.order < b.order end) - - for i, k in ipairs(index) do - node = cattree.nodes[k.name] - if not node.hidden and node.title and node.target then - local href = controller.."/"..category.."/"..k.name - href = (k.query) and href .. luci.http.build_querystring(k.query) or href %> - <div<% if node._menu_selected then %> class="preactive"<%end%>><a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(node.title)))%></a> - <%submenu("/" .. category .. "/" .. k.name .. "/", node)%> - </div> -<% end - end -end -%> - </div> - <div class="modemenu"> - <ul><% - for k,node in pairs(tree.nodes) do - if node.title and not node.hidden then %> - <li<% if request[1] == k then %> class="active"<%end%>><a href="<%=controller%>/<%=k%>"><%=pcdata(striptags(translate(node.title)))%></a></li> -<% end - end%> - </ul> - </div> - - <% - if tree.nodes[category] and tree.nodes[category].ucidata then - local ucic = 0 - - for i, j in pairs(require("luci.model.uci").cursor():changes()) do - for k, l in pairs(j) do - for m, n in pairs(l) do - ucic = ucic + 1; - end - end - end - %> - <div class="mainmenu" style="float:right; margin-right:2em"> - <div> - <% if ucic > 0 then %> - <a class="warning" href="<%=controller%>/<%=category%>/uci/changes"><%:Unsaved Changes%>: <%=ucic%></a> - <% submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"]) -%> - <% else %> - <a href="#"><%:Changes%>: 0</a> - <% end %> - </div> - </div> - <% end %> - - <br class="clear" /> -</div> - -<div id="maincontent"> -<% if category ~= "freifunk" and category ~= "splash" then %> -<noscript> - <div class="errorbox"> - <strong><%:Java Script required!%></strong><br /> - <%:You must enable Java Script in your browser or LuCI will not work properly.%> - </div> -</noscript> -<% end %> diff --git a/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno b/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno deleted file mode 100755 index a19f2bb41..000000000 --- a/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -uci batch <<-EOF - set luci.themes.Freifunk_BNO=/luci-static/freifunk-bno - set luci.main.mediaurlbase=/luci-static/freifunk-bno - commit luci -EOF diff --git a/themes/luci-theme-freifunk-bno/Makefile b/themes/luci-theme-material/Makefile index 1491a9774..5bc16eb7d 100644..100755 --- a/themes/luci-theme-freifunk-bno/Makefile +++ b/themes/luci-theme-material/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk -LUCI_TITLE:=Freifunk Berlin Nordost Theme +LUCI_TITLE:=Material Theme LUCI_DEPENDS:= include ../../luci.mk diff --git a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css new file mode 100755 index 000000000..d4feb368b --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css @@ -0,0 +1,1504 @@ +/** + * Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + * + * luci-theme-material + * Copyright 2015 Lutty Yang <lutty@wcan.in> + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/LuttyYang/luci-theme-material/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth <steven@midlink.org> + * Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + * Copyright 2012 David Menting <david@nut-bolt.nl> + * + * MUI: + * https://github.com/muicss/mui + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Font generate by Icomoon<icomoon.io> + */ +@font-face { + font-family: 'icomoon'; + src: url('../fonts/font.eot'); + src: url('../fonts/font.eot') format('embedded-opentype'), + url('../fonts/font.ttf') format('truetype'), + url('../fonts/font.woff') format('woff'), + url('../fonts/font.svg') format('svg'); + font-weight: normal; + font-style: normal; +} + +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main > .loading > span { + font-family: 'icomoon' !important; + speak: none; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +html, body { + margin: 0px; + padding: 0px; + height: 100%; + font-family: "Helvetica Neue", Helvetica, Microsoft Yahei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif; +} + +select { + padding: 0.36rem 0.8rem; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; +} + +select, +input { + background-color: transparent; + color: rgba(0, 0, 0, .87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, .26); + outline: 0; + padding: 0; + box-shadow: none; + border-radius: 0; + background-image: none; + height: 2rem; + font-size: 1.1rem; +} + +select:not([multiple="multiple"]):focus, +input:focus { + height: 2rem; + height: calc(2rem + 1px); + margin-bottom: -1px; + border-color: #0099CC; + border-width: 2px; +} + +select[multiple="multiple"] { + height: auto; +} + +code { + color: #0099CC; +} + +abbr { + color: #005470; + text-decoration: underline; + cursor: help; +} + +hr{ + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} + +header, .main { + width: 100%; + position: absolute; +} + +header { + height: 4rem; + box-shadow: 0 2px 5px rgba(0, 0, 0, .26); + transition: box-shadow .2s; + float: left; + position: fixed; + z-index: 101; +} + +footer { + text-align: right; + padding: 1rem; + color: #aaa; + font-size: 0.8rem; + text-shadow: 0px 0px 2px #BBB; +} + +footer > a { + color: #aaa; + text-decoration: none; +} + +.main { + top: 4rem; + bottom: 0rem; + position: relative; + height: 100%; + height: calc(100% - 4rem); +} + +.main > .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 1000; + display: block; + background-color: rgb(240, 240, 240); + top: 0; +} + +.main > .loading > span { + display: block; + text-align: center; + margin-top: 2rem; + color: #888; + font-size: 1.3rem; +} + +.main > .loading > span > .loading-img:before { + content: "\e603"; +} + +.main > .loading > span > .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.2rem; + display: inline-block; +} + +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +.main-left { + float: left; + top: 4rem; + width: 15%; + width: calc(0% + 17rem); + height: 100%; + height: calc(100% - 4rem); + background-color: white; + + overflow-x: auto; + position: fixed; +} + +.main-right { + width: 85%; + width: calc(100% - 17rem); + float: right; + height: 100%; + background-color: #EEE; +} + +.main-right > #maincontent { + background-color: #EEE; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +header { + background: #0099CC; + color: white; +} + +header > .container { + margin-top: 0.5rem; + padding: 0.5rem 1rem 0 1rem; +} + +header > .container > .brand { + font-size: 1.5rem; + color: white; + text-decoration: none; + cursor: default; + vertical-align: text-bottom; +} + +.warning { + background-color: #FF7D60 !important; + color: #FFF; +} + +.errorbox, +.alert-message { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.errorbox { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.error { + color: red; +} + +#maincontent > .container > div:nth-child(1).alert-message.warning > a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 1.1rem; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; +} + +.main > .main-left > .nav { + margin-top: 0.5rem; +} + +.main > .main-left > .nav > li a { + color: #404040; + display: block; +} + +.main > .main-left > .nav > li:nth-last-child(1) { + margin-top: 2rem; + font-size: 1.2rem; +} + +.main > .main-left > .nav > li { + padding: 0.5rem 1rem; + cursor: pointer; +} + +.main > .main-left > .nav > .slide { + padding: 0; +} + +.main > .main-left > .nav > .slide > ul { + display: none; +} + +.main > .main-left > .nav > .slide > .menu { + display: block; + padding: 0.5rem 1rem; + text-decoration: none; + cursor: default; + font-size: 1.2rem; +} + +.main > .main-left > .nav > li:hover, +.main > .main-left > .nav > .slide > .menu:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide:hover { + background: none; +} + +.main > .main-left > .nav > .slide > .slide-menu > li { + padding: 0.4rem 2rem; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active { + background-color: #0099CC; +} + +.main > .main-left > .nav > .slide > .slide-menu > li > a { + text-decoration: none; + white-space: nowrap; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active > a { + color: white; +} + +.main > .main-left > .nav > .slide > .slide-menu > li:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active:hover { + background-color: #0099CC; + cursor: hand; +} + +li { + list-style-type: none; +} + +#maincontent > .container { + margin: 0 2rem 1rem 2rem; +} + +h1 { + font-size: 4rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h2 { + margin: 2rem 0 0 0; + font-size: 2.5rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h3 { + margin: 2rem 0 0 0; + font-size: 2rem; + padding-bottom: 10px; +} + +h4 { + +} + +fieldset { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + + -webkit-overflow-scrolling: touch; +} + +fieldset > legend { + display: none !important; +} + +fieldset > fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} + +.panel-title { + width: 100%; + display: block; + line-height: 1; + color: #404040; + font-size: 1.9rem; + padding-bottom: 2rem; + border-bottom: 1px solid #eee; +} + +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; + border: 1px solid #eee; +} + +table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th { + padding: 8px; + line-height: 1.42857143; + border-top: 1px solid #ddd; + + white-space: nowrap; +} + +.cbi-section-table-cell { + text-align: center; +} + +.cbi-section-table-row { + text-align: center; +} + +fieldset > table > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +/* fix progress bar */ +#swaptotal > div, +#swapfree > div, +#memfree > div, +#membuff > div, +#conns > div, +#memtotal > div { + width: 100% !important; + height: 1.4rem !important; +} + +#swaptotal > div > div, +#swapfree > div > div, +#memfree > div > div, +#membuff > div > div, +#conns > div > div, +#memtotal > div > div { + height: 1.4rem !important; + background-color: #0099CC !important; +} + +/* fix multiple table */ + +table table { + border: none; +} + +.cbi-value-field table { + border: none; +} + +td > table > tbody > tr > td { + border: none; +} + +.cbi-value-field > table > tbody > tr > td { + border: none; +} + +/* button style */ + +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; + transition: all 0.2s ease-in-out; + display: inline-block; + padding: 0.5rem 1rem; + border: none; + border-radius: 0.2rem; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 1rem; + width: auto !important; +} + +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + color: rgba(0, 0, 0, 0.87); + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +.cbi-button:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +form.inline + form.inline, +.cbi-button + .cbi-button { + margin-left: 0.6rem; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: #f0ad4e !important; + border-color: #eea236 !important; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: #fff !important; + background-color: #337ab7 !important; + border-color: #2e6da4 !important; +} + +.cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #5bc0de !important; + border-color: #46b8da !important; +} + +.cbi-input-reset, +.cbi-button-remove { + color: #fff !important; + background-color: #d9534f !important; + border-color: #d43f3a !important; +} + +.a-to-btn { + text-decoration: none; +} + +/* table */ + +.tabs { + margin: 0 -2rem; + padding-left: 0.5rem; + background-color: #FFFFFF; +} + +.cbi-tabmenu > li, +.tabs > li { + display: inline-block; + padding: 0.9rem 0rem; +} + +.cbi-tabmenu > li > a, +.tabs > li > a { + text-decoration: none; + color: #404040; + padding: 0.9rem 1.5rem; +} + +.tabs > li[class~="active"], +.tabs > li:hover { + cursor: pointer; + border-bottom: 0.2rem solid #0099CC; + color: #0099CC; + margin-bottom: -0.18751rem; +} + +.tabs > li[class~="active"] > a { + color: #0099cc; +} + +.tabs > li:hover { + border-bottom: 0.18751rem solid #C9C9C9; +} + +.cbi-tabmenu { + border-top: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabmenu > li:hover { + background-color: #F1F1F1; +} + +.cbi-tabmenu > li[class~="cbi-tab"] { + background-color: white; +} + +.cbi-tabmenu { + background-color: #D4D4D4; +} + +.cbi-section-node-tabbed { + padding: 0; + margin-top: 0; + border-bottom: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabcontainer > .cbi-value:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.cbi-value-field, +.cbi-value-description { + display: table-cell; +} + +.cbi-value-helpicon > img { + display: none; +} + +.cbi-value-helpicon:before { + content: "\f059"; +} + +.cbi-value-description { + font-size: small; + opacity: 0.5; + padding: 0.5rem 0 0 0; +} + +.cbi-value-title { + word-wrap: break-word; + padding-top: 0.6rem; + width: 23rem; + float: left; + text-align: right; + padding-right: 2rem; + display: table-cell; +} + +.cbi-value { + padding: 1rem; + display: inline-block; + width: 100%; +} + +.cbi-section-table-descr > .cbi-section-table-cell, +.cbi-section-table-titles > .cbi-section-table-cell { + border: none; +} + +.cbi-rowstyle-2 { + background-color: #eee; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down{ + background-color: #FFF !important; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} + +/* desc */ +.cbi-section-descr, +.cbi-map-descr { + padding: 0.5rem; + color: #999; + font-size: small; +} + +/* luci */ + +.hidden { + display: none +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + border-top: 1px solid #eee; + padding-top: 2rem; + text-align: right; +} + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 15rem; +} + +/* select */ +.cbi-value-field .cbi-input-select { + min-width: 15rem; +} + +.ifacebadge { + display: inline-flex; + border-bottom: 1px solid #CCCCCC; + padding: 0.5rem 1rem; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.ifacebadge > img { + float: right; + margin-left: 0.3rem; +} + +/*textarea*/ + +.cbi-input-textarea { + width: 100%; + min-height: 16rem; + padding: 1rem; + font-size: 0.9rem; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + color: black; +} + +#syslog { + width: 100%; + min-height: 15rem; + padding: 1rem; + font-size: small; + color: #5F5F5F; + + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + border: none; +} + +/* change */ + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} + +/* other fix */ +#iwsvg, +#iwsvg2, +#bwsvg { + border: 1px solid #D4D4D4 !important; + border-top: none !important; +} + +.ifacebox { + border: 1px solid #999; + background-color: #f9f9f9; +} + +.cbi-image-button { + margin-left: 0.5rem; +} + +.zonebadge { + padding: 0.2rem 0.5rem; + display: inline-block; + cursor: pointer; +} + +.zonebadge > .ifacebadge { + padding: 0.2rem 1rem; + margin: 0.3rem; + border: 1px solid #6C6C6C; +} + +.zonebadge > input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: 0.3rem; +} + +.cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 7rem; +} + +.cbi-section-create > .cbi-button-add { + margin: 0.5rem; +} + +div.cbi-value var, td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +small { + font-size: small; + white-space: normal; +} + +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + padding: 0.2rem 0.3rem; + font-size: 1.3rem; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + +#diag-rc-output > pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 1.5rem; + -moz-border-radius: 3px; + white-space: pre-wrap; + word-wrap: break-word; + font-size: 1.5rem; + color: #404040; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + +header > .container > .pull-right > * { + position: relative; + top: 0.45rem; + cursor: pointer; +} + +#xhr_poll_status > .label.success { + background-color: #14CE14; +} + +.label { + padding: 0.3rem 0.8rem; + font-size: 1rem; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} + +.notice { + background-color: #5BC0DE; +} + +.showSide { + display: none; +} + +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + content: ""; + z-index: 99; + display: none; +} + +/* fix Main Login*/ +.node-main-login > .main > .main-left { + display: none; +} + +.node-main-login > .main > .main-right { + width: 100%; +} + +.node-main-login > .main fieldset { + padding: 0.5rem; + margin-bottom: 1rem; + display: inline; + background: none; + border: none; + box-shadow: none; + overflow: hidden; +} + +.node-main-login > .main .cbi-value-title { + width: 7rem; +} + +.node-main-login > .main #maincontent { + + text-align: center; +} + +.node-main-login > .main .container { + display: inline-block; + padding: 2rem 4rem; + margin-top: 2rem !important; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + text-align: left; +} + +.node-main-login > .main form > div:nth-last-child(1) { + float: right; +} + +.node-main-login > .main .cbi-value { + display: block; +} + +.node-main-login > .main .cbi-value > * { + display: inline-block !important; +} + +.node-main-login > .main .cbi-input-user, +.node-main-login > .main .cbi-input-password { + min-width: 15rem; +} + +.node-main-login footer { + bottom: 0; + position: absolute; + width: 100%; +} + +/* fix status overview */ + +.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2) { + white-space: normal; +} + +/* fix status processes */ + +.node-status-processes > .main table tr td:nth-child(3) { + white-space: normal; +} + +.node-status-iptables > .main div > .cbi-map > form { + margin: 2rem 2rem 0 0; +} + +/* fix system reboot */ + +.node-system-reboot > .main > .main-right p, +.node-system-reboot > .main > .main-right h3 { + padding-left: 2rem; +} + +/* fix Services Network Shares*/ +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; +} + +/* fix System Software*/ +.node-system-packages > .main table tr td:nth-child(1) { + width: auto !important; +} + +.node-system-packages > .main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #404040; +} + +.node-system-packages > .main .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.5rem 1rem; +} + +.node-system-packages > .main .cbi-value > pre { + background-color: #eee; + padding: 0.5rem; + overflow: auto; +} + +.cbi-tabmenu + .cbi-section { + margin-top: 0; +} + +/* fix network firewall*/ +.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 4rem; +} + +.node-status-iptables fieldset, +.node-system-packages fieldset, +.node-system-flashops fieldset { + margin-top: 0; +} + +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + border: none; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table *{ + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"]{ + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select{ + min-width: 3.5rem; +} + + +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} + +@media screen and (max-width: 1600px) { + .main-left { + width: calc(0% + 15rem); + } + + .main-right { + width: calc(100% - 15rem); + } + + .cbi-button { + padding: 0.3rem 0.6rem; + font-size: 1rem; + line-height: 1.5; + } + + header > .container > .pull-right > * { + top: 0.35rem; + } + + .label { + padding: 0.2rem 0.6rem; + } + + .cbi-value-title { + width: 15rem; + padding-right: 0.6rem; + } + + fieldset { + padding: 1rem; + } + + .cbi-input-textarea { + font-size: small; + } + + .node-status-iptables > .main fieldset li > a { + padding: 0.3rem 0.6rem; + } +} + +@media screen and (max-width: 1280px) { + header { + height: 3.5rem; + } + + header > .container { + margin-top: 0.25rem; + } + + .main { + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-left { + width: calc(0% + 13rem); + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.5rem; + } + + .panel-title { + font-size: 1.3rem; + padding-bottom: 1rem; + } + + table { + font-size: 0.8rem !important; + width: 100% !important; + } + + .main > .main-left > .nav > li, + .main > .main-left > .nav > li a, + .main > .main-left > .nav > .slide > .menu { + font-size: 1.1rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 0.9rem; + } +} + +@media screen and (max-width: 992px) { + .main-left { + width: 0; + position: fixed; + z-index: 100; + } + + .main-right { + width: 100%; + } + + .showSide { + padding: 0.1rem; + margin-right: 0.5rem; + display: inline-block; + } + + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + + .node-main-login .showSide { + display: none !important; + } + + .cbi-value-title { + width: 9rem; + padding-right: 1rem; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div * { + width: 100% !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] { + margin: 3rem 0 0 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div select, + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] { + margin: 1rem 0 0 0; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div { + width: 100% !important; + } + + #diag-rc-output > pre { + font-size: 1.2rem; + } + + .node-main-login > .main .cbi-value-title { + text-align: left; + } +} + +@media screen and (max-width: 480px) { + fieldset { + padding: 1rem; + margin: 1rem 0 0 0; + } + + .tabs { + margin: 0 -1rem; + } + + #maincontent > .container { + margin: 0 1rem 1.5rem 1rem; + } + + .main > .main-left > .nav > .slide > .menu { + font-size: 1.3rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 1.1rem; + } + + .cbi-value-title { + width: 100%; + min-width: 0rem !important; + display: block; + margin-top: 1rem; + margin-bottom: 0.5rem; + text-align: left; + } + + .cbi-value-field, .cbi-value-description { + width: 100%; + } + + .cbi-value > .cbi-value-field { + display: inline-block; + } + + .cbi-tabmenu > li, .tabs > li { + padding: 0.6rem 0rem; + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.3rem; + font-size: 0.9rem; + } + + .cbi-page-actions > div > input { + display: none; + } + + .node-main-login > .main .container { + padding: 0.5rem 1rem 2rem 1rem; + } + + .node-main-login > .main .cbi-value { + padding: 0; + } + + .node-main-login > .main form > div:nth-last-child(1) { + margin-top: 2rem; + } + + .node-main-login > .main .cbi-value-title { + width: 100% !important; + font-size: 1.2rem; + } + + .node-main-login > .main fieldset { + margin: 0; + padding: 0.5rem; + } + + h2 { + font-size: 2rem; + } + + .tabs > li > a { + font-size: 0.9rem; + } + + select, + input { + font-size: 0.9rem; + } + + .mobile-hide { + display: none; + } + + .panel-title { + font-size: 1.4rem; + padding-bottom: 1rem; + } + + .node-system-packages > .main .cbi-value.cbi-value-last > div { + width: 100% !important; + } + + .node-system-packages > .main .cbi-value .cbi-value-field input { + width: 100%; + } + + .node-status-iptables > .main div > .cbi-map > form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + -webkit-overflow-scrolling: touch; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"]{ + width: 100% !important; + margin: 0; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] + input[type="submit"]{ + margin-top: 1rem; + } +} + +@media screen and (min-width: 992px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 20rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 20rem; + } +} + +@media screen and (min-width: 1280px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 22rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 22rem; + } +} + +@media screen and (min-width: 1600px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 25rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 25rem; + } +}
\ No newline at end of file diff --git a/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico b/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico Binary files differnew file mode 100755 index 000000000..b407d1845 --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot Binary files differnew file mode 100644 index 000000000..9e6ffc9b8 --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg new file mode 100644 index 000000000..d38d057da --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg @@ -0,0 +1,16 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata>Generated by IcoMoon</metadata> +<defs> +<font id="icomoon" horiz-adv-x="1024"> +<font-face units-per-em="1024" ascent="960" descent="-64" /> +<missing-glyph horiz-adv-x="1024" /> +<glyph unicode=" " horiz-adv-x="512" d="" /> +<glyph unicode="" glyph-name="expand_less" d="M512 596.667l256-256-60-60-196 196-196-196-60 60z" /> +<glyph unicode="" glyph-name="expand_more" d="M708 572.667l60-60-256-256-256 256 60 60 196-196z" /> +<glyph unicode="" glyph-name="menu" d="M128 682.667h768v-86h-768v86zM128 384.667v84h768v-84h-768zM128 170.667v86h768v-86h-768z" /> +<glyph unicode="" glyph-name="favorite" d="M512 28.667l-62 56q-106 96-154 142t-107 114-81 123-22 113q0 98 67 166t167 68q116 0 192-90 76 90 192 90 100 0 167-68t67-166q0-78-52-162t-113-146-199-186z" /> +<glyph unicode="" glyph-name="spinner9" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96s96 42.98 96 96c0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96s-96-42.98-96-96c0-282.77 229.23-512 512-512z" /> +<glyph unicode="" glyph-name="question-circle" horiz-adv-x="878" d="M512 164.571v109.714q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-109.714q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM658.286 548.571q0 50.286-31.714 93.143t-79.143 66.286-97.143 23.429q-138.857 0-212-121.714-8.571-13.714 4.571-24l75.429-57.143q4-3.429 10.857-3.429 9.143 0 14.286 6.857 30.286 38.857 49.143 52.571 19.429 13.714 49.143 13.714 27.429 0 48.857-14.857t21.429-33.714q0-21.714-11.429-34.857t-38.857-25.714q-36-16-66-49.429t-30-71.714v-20.571q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143q0 10.857 12.286 28.286t31.143 28.286q18.286 10.286 28 16.286t26.286 20 25.429 27.429 16 34.571 7.143 46.286zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" /> +</font></defs></svg>
\ No newline at end of file diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf Binary files differnew file mode 100644 index 000000000..84669323e --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff Binary files differnew file mode 100644 index 000000000..00cf84ea0 --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff diff --git a/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js b/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js new file mode 100755 index 000000000..f3644431e --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ +return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); +//# sourceMappingURL=jquery.min.map
\ No newline at end of file diff --git a/themes/luci-theme-material/htdocs/luci-static/material/js/script.js b/themes/luci-theme-material/htdocs/luci-static/material/js/script.js new file mode 100755 index 000000000..03e5739ad --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/js/script.js @@ -0,0 +1,228 @@ +/** + * Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + * + * luci-theme-material + * Copyright 2015 Lutty Yang <lutty@wcan.in> + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/LuttyYang/luci-theme-material/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth <steven@midlink.org> + * Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + * Copyright 2012 David Menting <david@nut-bolt.nl> + * + * MUI: + * https://github.com/muicss/mui + * + * Licensed to the public under the Apache License 2.0 + */ +(function ($) { + $(".main > .loading").fadeOut(); + + /** + * trim text, Remove spaces, wrap + * @param text + * @returns {string} + */ + function trimText(text) { + return text.replace(/[ \t\n\r]+/g, " "); + } + + + var lastNode = undefined; + var mainNodeName = undefined; + + var nodeUrl = ""; + (function(node){ + if (node[0] == "admin"){ + luciLocation = [node[1], node[2]]; + }else{ + luciLocation = node; + } + + for(var i in luciLocation){ + nodeUrl += luciLocation[i]; + if (i != luciLocation.length - 1){ + nodeUrl += "/"; + } + } + })(luciLocation); + + /** + * get the current node by Burl (primary) + * @returns {boolean} success? + */ + function getCurrentNodeByUrl() { + var ret = false; + if (!$('body').hasClass('logged-in')) { + luciLocation = ["Main", "Login"]; + return true; + } + + $(".main > .main-left > .nav > .slide > .menu").each(function () { + var ulNode = $(this); + ulNode.next().find("a").each(function () { + var that = $(this); + var href = that.attr("href"); + + if (href.indexOf(nodeUrl) != -1) { + ulNode.click(); + ulNode.next(".slide-menu").stop(true, true); + lastNode = that.parent(); + lastNode.addClass("active"); + ret = true; + return true; + } + }); + }); + return ret; + } + + /** + * menu click + */ + $(".main > .main-left > .nav > .slide > .menu").click(function () { + var ul = $(this).next(".slide-menu"); + var menu = $(this); + if (!ul.is(":visible")) { + menu.addClass("active"); + ul.addClass("active"); + ul.stop(true).slideDown("fast"); + } else { + ul.stop(true).slideUp("fast", function () { + menu.removeClass("active"); + ul.removeClass("active"); + }); + } + }); + + /** + * hook menu click and add the hash + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () { + if (lastNode != undefined) lastNode.removeClass("active"); + $(this).parent().addClass("active"); + $(".main > .loading").fadeIn("fast"); + return true; + }); + + /** + * fix menu click + */ + $(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () { + if (lastNode != undefined) lastNode.removeClass("active"); + $(this).addClass("active"); + $(".main > .loading").fadeIn("fast"); + window.location = $($(this).find("a")[0]).attr("href"); + return; + }); + + /** + * get current node and open it + */ + if (getCurrentNodeByUrl()) { + mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1]; + mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase(); + $("body").addClass(mainNodeName); + } + $(".cbi-button-up").val(""); + $(".cbi-button-down").val(""); + + + /** + * hook other "A Label" and add hash to it. + */ + $("#maincontent > .container").find("a").each(function () { + var that = $(this); + var onclick = that.attr("onclick"); + if (onclick == undefined || onclick == "") { + that.click(function () { + var href = that.attr("href"); + if (href.indexOf("#") == -1) { + $(".main > .loading").fadeIn("fast"); + return true; + } + }); + } + }); + + /** + * Sidebar expand + */ + var showSide = false; + $(".showSide").click(function () { + if (showSide) { + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").stop(true).animate({ + width: "0" + }, "fast"); + $(".main-right").css("overflow-y", "auto"); + showSide = false; + } else { + $(".darkMask").stop(true).fadeIn("fast"); + $(".main-left").stop(true).animate({ + width: "15rem" + }, "fast"); + $(".main-right").css("overflow-y", "hidden"); + showSide = true; + } + }); + + + $(".darkMask").click(function () { + if (showSide) { + showSide = false; + $(".darkMask").stop(true).fadeOut("fast"); + $(".main-left").stop(true).animate({ + width: "0" + }, "fast"); + $(".main-right").css("overflow-y", "auto"); + } + }); + + $(window).resize(function () { + if ($(window).width() > 921) { + $(".main-left").css("width", ""); + $(".darkMask").stop(true); + $(".darkMask").css("display", "none"); + showSide = false; + } + }); + + /** + * fix legend position + */ + $("legend").each(function () { + var that = $(this); + that.after("<span class='panel-title'>" + that.text() + "</span>"); + }); + + + $(".main-right").focus(); + $(".main-right").blur(); + $("input").attr("size", "0"); + + if (mainNodeName != undefined) { + console.log(mainNodeName); + switch (mainNodeName) { + case "node-status-system_log": + case "node-status-kernel_log": + $("#syslog").focus(function () { + $("#syslog").blur(); + $(".main-right").focus(); + $(".main-right").blur(); + }); + break; + case "node-status-firewall": + var button = $(".node-status-firewall > .main fieldset li > a"); + button.addClass("cbi-button cbi-button-reset a-to-btn"); + break; + case "node-system-reboot": + var button = $(".node-system-reboot > .main > .main-right p > a"); + button.addClass("cbi-button cbi-input-reset a-to-btn"); + break; + } + } + +})(jQuery); diff --git a/themes/luci-theme-material/htdocs/luci-static/material/logo.png b/themes/luci-theme-material/htdocs/luci-static/material/logo.png Binary files differnew file mode 100755 index 000000000..459148c6b --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/logo.png diff --git a/themes/luci-theme-material/luasrc/view/themes/material/footer.htm b/themes/luci-theme-material/luasrc/view/themes/material/footer.htm new file mode 100755 index 000000000..edf85dcdb --- /dev/null +++ b/themes/luci-theme-material/luasrc/view/themes/material/footer.htm @@ -0,0 +1,51 @@ +<%# + Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + + luci-theme-material + Copyright 2015 Lutty Yang <lutty@wcan.in> + + Have a bug? Please create an issue here on GitHub! + https://github.com/LuttyYang/luci-theme-material/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth <steven@midlink.org> + Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2012 David Menting <david@nut-bolt.nl> + + MUI: + https://github.com/muicss/mui + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local ver = require "luci.version" + local disp = require "luci.dispatcher" + local request = disp.context.path + local category = request[1] + local tree = disp.node() + local categories = disp.node_childs(tree) +%> + </div> + <footer class="mobile-hide"> + <a href="https://github.com/openwrt/luci">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a> / + <a href="https://openwrt.org/"><%= ver.distversion %></a> + <% if #categories > 1 then %> + <ul class="breadcrumb pull-right" id="modemenu"> + <% for i, r in ipairs(categories) do %> + <li<% if request[1] == r then %> class="active"<%end%>><a href="<%=controller%>/<%=r%>/"><%=striptags(translate(tree.nodes[r].title))%></a> <span class="divider">|</span></li> + <% end %> + </ul> + <% end %> + </footer> + </div> + </div> + + <script> + // thanks for Jo-Philipp Wich <jow@openwrt.org> + var luciLocation = <%= luci.http.write_json(luci.dispatcher.context.path) %>; + </script> + <script src="<%=media%>/js/jquery.min.js"></script> + <script src="<%=media%>/js/script.js"></script> +</body> +</html> diff --git a/themes/luci-theme-material/luasrc/view/themes/material/header.htm b/themes/luci-theme-material/luasrc/view/themes/material/header.htm new file mode 100755 index 000000000..46e008dbf --- /dev/null +++ b/themes/luci-theme-material/luasrc/view/themes/material/header.htm @@ -0,0 +1,232 @@ +<%# + Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + + luci-theme-material + Copyright 2015 Lutty Yang <lutty@wcan.in> + + Have a bug? Please create an issue here on GitHub! + https://github.com/LuttyYang/luci-theme-material/issues + + luci-theme-bootstrap: + Copyright 2008 Steven Barth <steven@midlink.org> + Copyright 2008 Jo-Philipp Wich <jow@openwrt.org> + Copyright 2012 David Menting <david@nut-bolt.nl> + + MUI: + https://github.com/muicss/mui + + Licensed to the public under the Apache License 2.0 +-%> + +<% + local ver = require "luci.version" + local sys = require "luci.sys" + local util = require "luci.util" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local boardinfo = util.ubus("system", "board") + + local request = disp.context.path + local request2 = disp.context.request + + local category = request[1] + local cattree = category and disp.node(category) + + local leaf = request2[#request2] + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + for i, r in ipairs(request) do + if c.nodes and c.nodes[r] then + c = c.nodes[r] + c._menu_selected = true + end + end + + -- send as HTML5 + http.prepare_content("text/html") + + local function nodeurl(prefix, name, query) + local url = controller .. prefix .. name .. "/" + if query then + url = url .. http.build_querystring(query) + end + return pcdata(url) + end + + local function subtree(prefix, node, level) + if not level then + level = 1 + end + + local childs = disp.node_childs(node) + if #childs > 0 then + + if level > 2 then +%> + <ul class="tabs"> + <% + end + + local selected_node + local selected_name + local i, v + + for i, v in ipairs(childs) do + local nnode = node.nodes[v] + if nnode._menu_selected then + selected_node = nnode + selected_name = v + end + if level > 2 then + %> + <li class="tabmenu-item-<%=v%><%- if nnode._menu_selected or (node.leaf and v == leaf) then %> active<% end %>"> + <a href="<%=nodeurl(prefix, v, nnode.query)%>"><%=striptags(translate(nnode.title))%></a> + </li> + <% end + end + + if level > 2 then + %> + </ul> +<% end + + if selected_node then + subtree(prefix .. selected_name .. "/", selected_node, level + 1) + end + end + end +-%> +<!DOCTYPE html> +<html lang="<%=luci.i18n.context.lang%>"> +<head> + <meta charset="utf-8"> + <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> + <meta name="format-detection" content="telephone=no, email=no"/> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="mobile-web-app-capable" content="yes"> + <meta name="x5-fullscreen" content="true"> + <meta name="full-screen" content="yes"> + <meta name="x5-page-mode" content="app"> + <meta name="browsermode" content="application"> + <meta name="theme-color" content="#0099CC"> + <meta name="msapplication-tap-highlight" content="no"> + <meta name="msapplication-TileColor" content="#0099CC"> + <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/> + <link rel="stylesheet" href="<%=media%>/css/style.css"> + <link rel="shortcut icon" href="<%=media%>/favicon.ico"> + <% if node and node.css then %> + <link rel="stylesheet" href="<%=resource%>/<%=node.css%>"> + <% end -%> + <% if css then %> + <style title="text/css"> + <%-= css %> + </style> + <% end -%> + <script src="<%=resource%>/xhr.js"></script> +</head> + +<body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>"> + +<header> + <div class="container"> + <span class="showSide"></span> + <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a> + <div class="pull-right"> + <% + -- calculate the number of unsaved changes + if tree.nodes[category] and tree.nodes[category].ucidata then + local ucichanges = 0 + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + for k, l in pairs(j) do + for m, n in pairs(l) do + ucichanges = ucichanges + 1; + end + end + end + %> + <% if ucichanges > 0 then %> + <a class="label notice" href="<%=controller%>/<%=category%>/uci/changes?redir=<%=http.urlencode(http.formvalue("redir") or REQUEST_URI)%>"><span class="mobile-hide"><%:Unsaved Changes%>: </span><%=ucichanges%></a> + <% end %> + <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()"> + <span class="label success" id="xhr_poll_status_on"><span class="mobile-hide"><%:Auto Refresh%> </span><%:on%></span> + <span class="label" id="xhr_poll_status_off" style="display:none"><span class="mobile-hide"><%:Auto Refresh%> </span><%:off%></span> + </span> + <% end %> + </div> + </div> +</header> + + <div class="main"> + <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div> + <div class="main-left"> + <ul class="nav"> + <%- + local function submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then + %> + <ul class="slide-menu"> + <%- + for i, r in ipairs(childs) do + local nnode = node.nodes[r] + local href = controller .. prefix .. r .. + (nnode.query and http.build_querystring(nnode.query) or "") + %> + <li><a data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></li> + <%- + end + %> + </ul> + <%- + end + end + + childs = disp.node_childs(cattree) + + if #childs > 0 then + for i, r in ipairs(childs) do + local nnode = cattree.nodes[r] + local href = controller .. "/" .. category .. "/" .. r .. + (nnode.query and http.build_querystring(k.query) or "") + local grandchildren = disp.node_childs(nnode) + + if #grandchildren > 0 then + %> + <li class="slide"> + <a class="menu" data-title="<%=pcdata(striptags(nnode.title))%>" href="#"><%=pcdata(striptags(translate(nnode.title)))%></a> + <%- submenu("/" .. category .. "/" .. r .. "/", nnode) %> + </li> + <% else %> + <li> + <a data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a> + </li> + <% + end + end + end + %> + </ul> + </div> + <div class="main-right"> + <div class="darkMask"></div> + <div id="maincontent"> + <div class="container"> + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> + <div class="alert-message warning"> + <h4><%:No password set!%></h4> + <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br> + <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> + </div> + <%- end -%> + <% if category then subtree("/" .. category .. "/", cattree) end %> + diff --git a/themes/luci-theme-material/root/etc/uci-defaults/luci-theme-material b/themes/luci-theme-material/root/etc/uci-defaults/luci-theme-material new file mode 100755 index 000000000..b01337821 --- /dev/null +++ b/themes/luci-theme-material/root/etc/uci-defaults/luci-theme-material @@ -0,0 +1,7 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.Material=/luci-static/material + set luci.main.mediaurlbase=/luci-static/material + commit luci +EOF +exit 0 |