summaryrefslogtreecommitdiffhomepage
path: root/applications
diff options
context:
space:
mode:
Diffstat (limited to 'applications')
-rw-r--r--applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua77
-rw-r--r--applications/luci-app-adblock/po/ja/adblock.po148
-rw-r--r--applications/luci-app-adblock/po/pt-br/adblock.po13
-rw-r--r--applications/luci-app-adblock/po/sv/adblock.po13
-rw-r--r--applications/luci-app-adblock/po/templates/adblock.pot13
-rw-r--r--applications/luci-app-adblock/po/zh-cn/adblock.po13
-rw-r--r--applications/luci-app-advanced-reboot/Makefile20
-rw-r--r--applications/luci-app-advanced-reboot/README.md35
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua120
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm92
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm29
-rw-r--r--applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm25
-rw-r--r--applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot102
-rw-r--r--applications/luci-app-aria2/po/sv/aria2.po208
-rw-r--r--applications/luci-app-clamav/po/sv/clamav.po119
-rw-r--r--applications/luci-app-commands/Makefile2
-rw-r--r--applications/luci-app-commands/po/sv/commands.po62
-rw-r--r--applications/luci-app-ddns/po/sv/ddns.po723
-rw-r--r--applications/luci-app-diag-core/po/sv/diag_core.po6
-rw-r--r--applications/luci-app-firewall/Makefile2
-rw-r--r--applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua2
-rw-r--r--applications/luci-app-firewall/po/sv/firewall.po172
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua4
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua6
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua2
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua9
-rw-r--r--applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua8
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm40
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm10
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm10
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm10
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm15
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm10
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm6
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm15
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm15
-rw-r--r--applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm32
-rw-r--r--applications/luci-app-mwan3/po/ja/mwan3.po85
-rw-r--r--applications/luci-app-mwan3/po/templates/mwan3.pot69
-rw-r--r--applications/luci-app-mwan3/po/zh-cn/mwan3.po153
-rw-r--r--applications/luci-app-privoxy/Makefile7
-rw-r--r--applications/luci-app-qos/Makefile2
-rw-r--r--applications/luci-app-shadowsocks-libev/Makefile6
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua33
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua156
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua49
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua104
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua73
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua31
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua253
-rw-r--r--applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm45
-rw-r--r--applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po97
-rw-r--r--applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po136
-rw-r--r--applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot86
-rw-r--r--applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po97
-rw-r--r--applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua7
-rw-r--r--applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua28
-rw-r--r--applications/luci-app-statistics/luasrc/statistics/rrdtool.lua2
-rw-r--r--applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua117
-rw-r--r--applications/luci-app-statistics/po/ca/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/cs/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/de/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/el/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/en/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/es/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/fr/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/he/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/hu/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/it/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/ja/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/ms/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/no/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/pl/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/pt-br/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/pt/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/ro/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/ru/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/sk/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/sv/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/templates/statistics.pot15
-rw-r--r--applications/luci-app-statistics/po/tr/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/uk/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/vi/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/zh-cn/statistics.po15
-rw-r--r--applications/luci-app-statistics/po/zh-tw/statistics.po15
-rw-r--r--applications/luci-app-statistics/root/etc/config/luci_statistics5
-rwxr-xr-xapplications/luci-app-statistics/root/usr/bin/stat-genconfig10
-rw-r--r--applications/luci-app-travelmate/luasrc/controller/travelmate.lua13
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua94
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua69
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua14
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua49
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua22
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm2
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm83
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm89
-rw-r--r--applications/luci-app-travelmate/po/ja/travelmate.po276
-rw-r--r--applications/luci-app-travelmate/po/pt-br/travelmate.po124
-rw-r--r--applications/luci-app-travelmate/po/templates/travelmate.pot124
-rw-r--r--applications/luci-app-watchcat/po/sv/watchcat.po6
-rw-r--r--applications/luci-app-wifischedule/po/sv/wifischedule.po101
-rw-r--r--applications/luci-app-wireguard/po/sv/wireguard.po62
-rw-r--r--applications/luci-app-wol/po/sv/wol.po6
103 files changed, 4070 insertions, 1293 deletions
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
index f71fb7ba4d..68f9c8897e 100644
--- a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
+++ b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
@@ -6,9 +6,25 @@ local uci = require("uci")
local sys = require("luci.sys")
local json = require("luci.jsonc")
local adbinput = uci.get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
+local dnspath = uci.get("adblock", "global", "adb_dnsdir") or ""
local parse = json.parse(fs.readfile(adbinput) or "")
-local dnsFile1 = sys.exec("find '/tmp/dnsmasq.d/.adb_hidden' -maxdepth 1 -type f -name 'adb_list*' -print 2>/dev/null")
-local dnsFile2 = sys.exec("find '/var/lib/unbound/.adb_hidden' -maxdepth 1 -type f -name 'adb_list*' -print 2>/dev/null")
+if parse ~= nil then
+ version = parse.data.adblock_version
+ domains = parse.data.blocked_domains
+ fetch = parse.data.fetch_info
+ backend = parse.data.dns_backend
+ rundate = parse.data.last_rundate
+ if dnspath == "" then
+ if backend == "dnsmasq" then
+ dnspath = "/tmp/dnsmasq.d"
+ elseif backend == "unbound" then
+ dnspath = "/var/lib/unbound"
+ elseif backend == "named" then
+ dnspath = "/var/lib/bind"
+ end
+ end
+end
+local dnsfile = dnspath .. "/.adb_hidden/adb_list.overall"
m = Map("adblock", translate("Adblock"),
translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
@@ -17,7 +33,13 @@ m = Map("adblock", translate("Adblock"),
.. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md"))
function m.on_after_commit(self)
- luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
+ function e3.validate(self, value)
+ if value == "0" then
+ luci.sys.call("/etc/init.d/adblock reload >/dev/null 2>&1")
+ else
+ luci.sys.call("/etc/init.d/adblock start >/dev/null 2>&1")
+ end
+ end
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
end
@@ -30,7 +52,7 @@ o1.default = o1.enabled
o1.rmempty = false
btn = s:option(Button, "", translate("Suspend / Resume adblock"))
-if dnsFile1 ~= "" or dnsFile2 ~= "" then
+if parse ~= nil and nixio.fs.access(dnsfile) then
btn.inputtitle = translate("Resume adblock")
btn.inputstyle = "apply"
btn.disabled = false
@@ -72,52 +94,53 @@ dv1 = s:option(DummyValue, "status", translate("Status"))
dv1.template = "adblock/runtime"
if parse == nil then
dv1.value = translate("n/a")
-elseif parse.data.blocked_domains == "0" then
+elseif domains == "0" then
dv1.value = translate("no domains blocked")
-elseif dnsFile1 ~= "" or dnsFile2 ~= "" then
+elseif nixio.fs.access(dnsfile) then
dv1.value = translate("suspended")
else
dv1.value = translate("active")
end
+
dv2 = s:option(DummyValue, "adblock_version", translate("Adblock version"))
dv2.template = "adblock/runtime"
-if parse ~= nil then
- dv2.value = parse.data.adblock_version or translate("n/a")
-else
+if parse == nil then
dv2.value = translate("n/a")
+else
+ dv2.value = version
end
dv3 = s:option(DummyValue, "fetch_info", translate("Download Utility (SSL Library)"),
translate("For SSL protected blocklist sources you need a suitable SSL library, e.g. 'libustream-ssl' or the wget 'built-in'."))
dv3.template = "adblock/runtime"
-if parse ~= nil then
- dv3.value = parse.data.fetch_info or translate("n/a")
-else
+if parse == nil then
dv3.value = translate("n/a")
+else
+ dv3.value = fetch
end
dv4 = s:option(DummyValue, "dns_backend", translate("DNS backend"))
dv4.template = "adblock/runtime"
-if parse ~= nil then
- dv4.value = parse.data.dns_backend or translate("n/a")
-else
+if parse == nil then
dv4.value = translate("n/a")
+else
+ dv4.value = backend
end
dv5 = s:option(DummyValue, "blocked_domains", translate("Blocked domains (overall)"))
dv5.template = "adblock/runtime"
-if parse ~= nil then
- dv5.value = parse.data.blocked_domains or translate("n/a")
-else
+if parse == nil then
dv5.value = translate("n/a")
+else
+ dv5.value = domains
end
dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
dv6.template = "adblock/runtime"
-if parse ~= nil then
- dv6.value = parse.data.last_rundate or translate("n/a")
-else
+if parse == nil then
dv6.value = translate("n/a")
+else
+ dv6.value = rundate
end
-- Blocklist table
@@ -157,12 +180,18 @@ e2 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
e2.default = e2.disabled
e2.rmempty = false
-e3 = e:option(Flag, "adb_backup", translate("Enable blocklist backup"))
+e3 = e:option(Flag, "adb_manmode", translate("Manual mode"),
+ translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
e3.default = e3.disabled
e3.rmempty = false
-e4 = e:option(Value, "adb_backupdir", translate("Backup directory"))
-e4.datatype = "directory"
+e4 = e:option(Flag, "adb_backup", translate("Enable blocklist backup"),
+ translate("Create compressed blocklist backups, they will be used in case of download errors or during startup in manual mode."))
+e4.default = e4.disabled
e4.rmempty = false
+e5 = e:option(Value, "adb_backupdir", translate("Backup directory"))
+e5.datatype = "directory"
+e5.rmempty = false
+
return m
diff --git a/applications/luci-app-adblock/po/ja/adblock.po b/applications/luci-app-adblock/po/ja/adblock.po
index ac470fedd6..07fd783ed2 100644
--- a/applications/luci-app-adblock/po/ja/adblock.po
+++ b/applications/luci-app-adblock/po/ja/adblock.po
@@ -8,7 +8,7 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.1\n"
+"X-Generator: Poedit 2.0.2\n"
"Language: ja\n"
msgid "Adblock"
@@ -50,12 +50,27 @@ msgstr ""
"DNS の利用によって広告/不正ドメインをブロックする、Adblock パッケージの設定で"
"す。"
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+"圧縮されたブロックリストのバックアップを作成します。これは、リストのダウン"
+"ロードがエラーの場合、またはマニュアル モードでサービスを起動時に使用されま"
+"す。"
+
msgid "DNS backend"
msgstr "DNS バックエンド"
msgid "Description"
msgstr "説明"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"サービス起動時にブロックリストを自動的に更新せず、代わりにバックアップされた"
+"ブロックリストを使用します。"
+
msgid "Download Utility (SSL Library)"
msgstr "ダウンロード ユーティリティ(SSL ライブラリ)"
@@ -95,7 +110,7 @@ msgid ""
"'libustream-ssl' or the wget 'built-in'."
msgstr ""
"SSLで保護されているブロックリストの取得には、適切なSSL ライブラリが必要です。"
-"例: 'libustream-ssl' または wget 'ビルトイン'"
+"例: 'libustream-ssl' または wget 'built-in'"
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
@@ -122,6 +137,9 @@ msgstr "最終実行日時"
msgid "Loading"
msgstr "読込中"
+msgid "Manual mode"
+msgstr "マニュアル モード"
+
msgid "No"
msgstr "いいえ"
@@ -251,129 +269,3 @@ msgstr "ブロックされたドメインはありません"
msgid "suspended"
msgstr "一時停止中"
-
-#~ msgid "."
-#~ msgstr "。"
-
-#~ msgid "For further information"
-#~ msgstr "詳細な情報は"
-
-#~ msgid "see online documentation"
-#~ msgstr "オンライン ドキュメントを確認してください"
-
-#~ msgid "Backup options"
-#~ msgstr "バックアップ オプション"
-
-#~ msgid "Restrict interface reload trigger to certain interface(s)"
-#~ msgstr "リロード トリガを特定のインターフェースに限定する"
-
-#~ msgid ""
-#~ "Space separated list of interfaces that trigger a reload action. To "
-#~ "disable reload trigger at all remove all entries."
-#~ msgstr ""
-#~ "リロードのトリガとなる、スペースで区切られたインターフェースのリストです。"
-#~ "リロード トリガを無効にするには、全てのエントリーを削除して空欄にします。"
-
-#~ msgid ""
-#~ "Space separated list of interfaces that trigger a reload action. To "
-#~ "disable reload trigger at all set it to 'false'."
-#~ msgstr ""
-#~ "リロードのトリガとなる、スペースで区切られたインターフェースのリストで"
-#~ "す。'false' に設定した場合、全てのリロード トリガは無効になります。"
-
-#~ msgid ""
-#~ "Please add only one domain per line. Comments introduced with '#' are "
-#~ "allowed - ip addresses, wildcards & regex are not."
-#~ msgstr ""
-#~ "一行に一つのドメインを追加してください。'#' から始まるコメントを記述できま"
-#~ "すが、IPアドレスやワイルドカード、正規表現を設定値として使用することはでき"
-#~ "ません。"
-
-#~ msgid ""
-#~ "). Note that list URLs and Shallalist category selections are not "
-#~ "configurable via Luci."
-#~ msgstr ""
-#~ ")。これらのリストのURLおよびshallaリストの選択済みカテゴリーは、Luciを通"
-#~ "して設定することができません。"
-
-#~ msgid "Available blocklist sources ("
-#~ msgstr "利用可能なブロックリスト提供元です("
-
-#~ msgid ""
-#~ "File with whitelisted hosts/domains that are allowed despite being on a "
-#~ "blocklist."
-#~ msgstr ""
-#~ "ホワイトリスト ファイル内のホスト/ドメインは、ブロックリストの登録に関わら"
-#~ "ず許可されます。"
-
-#~ msgid "Global options"
-#~ msgstr "一般設定"
-
-#~ msgid "Restrict reload trigger to certain interface(s)"
-#~ msgstr "リロードトリガを特定のインターフェースに限定する"
-
-#~ msgid ""
-#~ "Space separated list of wan interfaces that trigger reload action. To "
-#~ "disable reload trigger set it to 'false'. Default: empty"
-#~ msgstr ""
-#~ "リロード実行のトリガとなる、スペースで区切られたWANインターフェースのリス"
-#~ "トです。リロードトリガを無効にするには、 false を設定します。デフォルト:"
-#~ "(空)"
-
-#~ msgid "Whitelist file"
-#~ msgstr "ホワイトリスト ファイル"
-
-#~ msgid "see list details"
-#~ msgstr "リストの詳細を見る"
-
-#~ msgid "Count"
-#~ msgstr "カウント"
-
-#~ msgid "Do not write status info to flash"
-#~ msgstr "ステータス情報をフラッシュに書き込まない"
-
-#~ msgid "Last update of the blocklists"
-#~ msgstr "ブロックリストの最終更新日時"
-
-#~ msgid "List date/state"
-#~ msgstr "リスト日時/状態"
-
-#~ msgid "Name of the logical lan interface"
-#~ msgstr "論理LANインターフェース名"
-
-#~ msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
-#~ msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)"
-
-#~ msgid "Port of the adblock uhttpd instance"
-#~ msgstr "adblock uhttpdインスタンスのポート"
-
-#~ msgid "Port of the adblock uhttpd instance for https links"
-#~ msgstr "httpsリンク用adblock uhttpdインスタンスのポート"
-
-#~ msgid "Redirect all DNS queries to the local resolver"
-#~ msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト"
-
-#~ msgid ""
-#~ "Skip writing update status information to the config file. Status fields "
-#~ "on this page will not be updated."
-#~ msgstr ""
-#~ "更新ステータス情報をコンフィグファイルに書き込まず、スキップします。この"
-#~ "ページのステータス画面は更新されなくなります。"
-
-#~ msgid "Statistics"
-#~ msgstr "ステータス"
-
-#~ msgid "Timeout for blocklist fetch (seconds)"
-#~ msgstr "ブロックリスト取得の制限時間(秒)"
-
-#~ msgid "Total count of blocked domains"
-#~ msgstr "ブロック済みドメインの合計"
-
-#~ msgid ""
-#~ "When adblock is active, all DNS queries are redirected to the local "
-#~ "resolver in this server by default. You can disable that to allow queries "
-#~ "to external DNS servers."
-#~ msgstr ""
-#~ "adblockがアクティブである時、全てのDNSクエリは既定でこのサーバー上のリゾル"
-#~ "バにリダイレクトされます。外部DNSサーバーへのクエリを許可する場合、この設"
-#~ "定を無効にすることもできます。"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
index 72f6910429..044352da63 100644
--- a/applications/luci-app-adblock/po/pt-br/adblock.po
+++ b/applications/luci-app-adblock/po/pt-br/adblock.po
@@ -51,12 +51,22 @@ msgstr ""
"Configuração do pacote adblock para bloquear, usando o DNS, domínios que "
"distribuem propagandas abusivas."
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
msgid "DNS backend"
msgstr ""
msgid "Description"
msgstr "Descrição"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
msgid "Download Utility (SSL Library)"
msgstr ""
@@ -117,6 +127,9 @@ msgstr ""
msgid "Loading"
msgstr ""
+msgid "Manual mode"
+msgstr ""
+
msgid "No"
msgstr ""
diff --git a/applications/luci-app-adblock/po/sv/adblock.po b/applications/luci-app-adblock/po/sv/adblock.po
index 7f271221ae..cf92dbddc0 100644
--- a/applications/luci-app-adblock/po/sv/adblock.po
+++ b/applications/luci-app-adblock/po/sv/adblock.po
@@ -40,12 +40,22 @@ msgstr ""
"Konfiguration av paketet adblock för att blockera annons/otillåtna domäner "
"genom att använda DNS."
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
msgid "DNS backend"
msgstr "Bakände för DNS"
msgid "Description"
msgstr "Beskrivning"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
msgid "Download Utility (SSL Library)"
msgstr "Nerladdningsprogram (SSL-bibliotek)"
@@ -107,6 +117,9 @@ msgstr ""
msgid "Loading"
msgstr "Laddar"
+msgid "Manual mode"
+msgstr ""
+
msgid "No"
msgstr "Nej"
diff --git a/applications/luci-app-adblock/po/templates/adblock.pot b/applications/luci-app-adblock/po/templates/adblock.pot
index c5771ef22e..5b5a96866a 100644
--- a/applications/luci-app-adblock/po/templates/adblock.pot
+++ b/applications/luci-app-adblock/po/templates/adblock.pot
@@ -38,12 +38,22 @@ msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr ""
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
msgid "DNS backend"
msgstr ""
msgid "Description"
msgstr ""
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
msgid "Download Utility (SSL Library)"
msgstr ""
@@ -104,6 +114,9 @@ msgstr ""
msgid "Loading"
msgstr ""
+msgid "Manual mode"
+msgstr ""
+
msgid "No"
msgstr ""
diff --git a/applications/luci-app-adblock/po/zh-cn/adblock.po b/applications/luci-app-adblock/po/zh-cn/adblock.po
index dfa03f32b1..46dc99e66e 100644
--- a/applications/luci-app-adblock/po/zh-cn/adblock.po
+++ b/applications/luci-app-adblock/po/zh-cn/adblock.po
@@ -50,12 +50,22 @@ msgid ""
"Configuration of the adblock package to block ad/abuse domains by using DNS."
msgstr "Adblock 配置工具,通过 DNS 来拦截广告和阻止域名。"
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in manual mode."
+msgstr ""
+
msgid "DNS backend"
msgstr "DNS 后端"
msgid "Description"
msgstr "描述"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
msgid "Download Utility (SSL Library)"
msgstr ""
@@ -116,6 +126,9 @@ msgstr ""
msgid "Loading"
msgstr "加载中"
+msgid "Manual mode"
+msgstr ""
+
msgid "No"
msgstr "否"
diff --git a/applications/luci-app-advanced-reboot/Makefile b/applications/luci-app-advanced-reboot/Makefile
new file mode 100644
index 0000000000..3a886eb8de
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/Makefile
@@ -0,0 +1,20 @@
+# Copyright (c) 2017 Stan Grishin (stangri@melmac.net)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPL-3.0+
+PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
+
+LUCI_TITLE:=Advanced Linksys Reboot Web UI
+LUCI_DESCRIPTION:=Provides Web UI (found under System/Advanced Reboot) to reboot supported Linksys routers to\
+ an altnerative partition. Also provides Web UI to shut down (power off) your device. Supported dual-partition\
+ routers are listed at https://github.com/stangri/openwrt-luci/blob/luci-app-advanced-reboot/applications/luci-app-advanced-reboot/README.md
+
+LUCI_DEPENDS:=+luci
+LUCI_PKGARCH:=all
+PKG_RELEASE:=23
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-advanced-reboot/README.md b/applications/luci-app-advanced-reboot/README.md
new file mode 100644
index 0000000000..ee87a00020
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/README.md
@@ -0,0 +1,35 @@
+# Advanced Reboot Web UI (luci-app-advanced-reboot)
+
+## Description
+This package allows you to reboot to an alternative partition on supported (dual-partition) routers and to power off (power down) your OpenWrt/LEDE Project device.
+
+## Supported Devices
+Currently supported dual-partition devices include:
+- Linksys WRT1200AC
+- Linksys WRT1900AC
+- Linksys WRT1900ACv2
+- Linksys WRT1900ACS
+- Linksys WRT3200ACM
+- Linksys E4200v2
+- Linksys EA4500
+- Linksys EA8500
+
+If you're interested in having your device supported, please post in [LEDE Project Forum Support Thread](https://forum.lede-project.org/t/web-ui-to-reboot-to-another-partition-dual-partition-routers/3423).
+
+## Screenshot (luci-app-advanced-reboot)
+![screenshot](https://raw.githubusercontent.com/stangri/screenshots/master/luci-app-advanced-reboot/screenshot01.png "screenshot")
+
+## How to install
+Install ```luci-app-advanced-reboot``` from Web UI or connect to your router via ssh and run the following commands:
+```sh
+opkg update
+opkg install luci-app-advanced-reboot
+```
+
+## Notes/Known Issues
+- When you reboot to a different partition, your current settings (WiFi SSID/password, etc.) will not apply to a different partition. Different partitions might have completely different settings and even firmware.
+- If you reboot to a partition which doesn't allow you to switch boot partitions (like stock Linksys firmware), you might not be able to boot back to OpenWrt/LEDE Project unless you reflash it, loosing all the settings.
+- Some devices allow you to trigger reboot to alternative partition by interrupting boot 3 times in a row (by resetting/switching off the device or pulling power). As these methods might be different for different devices, do your own homework.
+
+## Thanks
+I'd like to thank everyone who helped create, test and troubleshoot this package. Without contributions from [@hnyman](https://github.com/hnyman) and [@jpstyves](https://github.com/jpstyves) it wouldn't have been possible.
diff --git a/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
new file mode 100644
index 0000000000..2b55217b8e
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua
@@ -0,0 +1,120 @@
+-- Copyright 2017 Stan Grishin <stangri@melmac.net>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.advanced_reboot", package.seeall)
+
+-- device, board_name, part1, part2, offset, env_var_1, value_1_1, value_1_2, env_var_2, value_2_1, value_2_2
+devices = {
+ {"Linksys WRT1200AC", "armada-385-linksys-caiman", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys WRT1900AC", "armada-xp-linksys-mamba", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys WRT1900ACv2", "armada-385-linksys-cobra", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys WRT1900ACS", "armada-385-linksys-shelby", "mtd4", "mtd6", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys WRT3200ACM", "armada-385-linksys-rango", "mtd5", "mtd7", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys E4200v2/EA4500", "linksys-viper", "mtd3", "mtd5", 32, "boot_part", 1, 2, "bootcmd", "run nandboot", "run altnandboot"},
+ {"Linksys EA8500", "ea8500", "mtd13", "mtd15", 32, "boot_part", 1, 2}
+}
+
+board_name = luci.util.trim(luci.sys.exec("cat /tmp/sysinfo/board_name"))
+for i=1, #devices do
+ if board_name and devices[i][2] == board_name then
+ device_name = devices[i][1]
+ partition_one_mtd = devices[i][3] or nil
+ partition_two_mtd = devices[i][4] or nil
+ partition_skip = devices[i][5] or nil
+ boot_envvar1 = devices[i][6] or nil
+ boot_envvar1_partition_one = tonumber(devices[i][7]) or nil
+ boot_envvar1_partition_two = tonumber(devices[i][8]) or nil
+ boot_envvar2 = devices[i][9] or nil
+ boot_envvar2_partition_one = devices[i][10] or nil
+ boot_envvar2_partition_two = devices[i][11] or nil
+ if partition_one_mtd and partition_skip then
+ partition_one_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_one_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
+ n, partition_one_version = string.match(partition_one_label, '(Linux)-([%d|.]+)')
+ end
+ if partition_two_mtd and partition_skip then
+ partition_two_label = luci.util.trim(luci.sys.exec("dd if=/dev/" .. partition_two_mtd .. " bs=1 skip=" .. partition_skip .. " count=25" .. " 2>/dev/null"))
+ n, partition_two_version = string.match(partition_two_label, '(Linux)-([%d|.]+)')
+ end
+ if string.find(partition_one_label, "LEDE") then partition_one_os = "LEDE" end
+ if string.find(partition_one_label, "OpenWrt") then partition_one_os = "OpenWrt" end
+ if string.find(partition_one_label, "Linksys") then partition_one_os = "Linksys" end
+ if string.find(partition_two_label, "LEDE") then partition_two_os = "LEDE" end
+ if string.find(partition_two_label, "OpenWrt") then partition_two_os = "OpenWrt" end
+ if string.find(partition_two_label, "Linksys") then partition_two_os = "Linksys" end
+ if not partition_one_os then partition_one_os = "Unknown" end
+ if not partition_two_os then partition_two_os = "Unknown" end
+ if partition_one_os and partition_one_version then partition_one_os = partition_one_os .. " (Linux " .. partition_one_version .. ")" end
+ if partition_two_os and partition_two_version then partition_two_os = partition_two_os .. " (Linux " .. partition_two_version .. ")" end
+ if nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
+ current_partition = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1)))
+ other_partition = current_partition == boot_envvar1_partition_one and boot_envvar1_partition_two or boot_envvar1_partition_one
+ end
+ end
+end
+
+function index()
+ entry({"admin", "system", "advanced_reboot"}, template("advanced_reboot/advanced_reboot"), _("Advanced Reboot"), 90)
+ entry({"admin", "system", "advanced_reboot", "reboot"}, post("action_reboot"))
+-- if device_name then entry({"admin", "system", "advanced_reboot", "altreboot"}, post("action_altreboot")) end
+ entry({"admin", "system", "advanced_reboot", "alternative_reboot"}, post("action_altreboot"))
+ entry({"admin", "system", "advanced_reboot", "power_off"}, post("action_poweroff"))
+end
+
+function action_reboot()
+ luci.template.render("admin_system/applyreboot", {
+ title = luci.i18n.translate("Rebooting..."),
+ msg = luci.i18n.translate("The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+ addr = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+ })
+ luci.sys.reboot()
+end
+
+function action_altreboot()
+ if luci.http.formvalue("cancel") then
+ luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
+ return
+ end
+ local step = tonumber(luci.http.formvalue("step") or 1)
+ if step == 1 then
+ if device_name and nixio.fs.access("/usr/sbin/fw_printenv") and nixio.fs.access("/usr/sbin/fw_setenv") then
+ luci.template.render("advanced_reboot/alternative_reboot",{})
+ else
+ luci.template.render("advanced_reboot/advanced_reboot",{})
+ end
+ elseif step == 2 then
+ luci.template.render("admin_system/applyreboot", {
+ title = luci.i18n.translate("Rebooting..."),
+ msg = luci.i18n.translate("The system is rebooting to an alternative partition now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+ addr = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+ })
+ if boot_envvar1 then env1 = tonumber(luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar1))) end
+ if boot_envvar2 then env2 = luci.util.trim(luci.sys.exec("/usr/sbin/fw_printenv -n " .. boot_envvar2)) end
+ if env1 and env1 == boot_envvar1_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_two) end
+ if env1 and env1 == boot_envvar1_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar1 .. " " .. boot_envvar1_partition_one) end
+ if env2 and env2 == boot_envvar2_partition_one then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_two .. "'") end
+ if env2 and env2 == boot_envvar2_partition_two then luci.sys.call("/usr/sbin/fw_setenv " .. boot_envvar2 .. " '" .. boot_envvar2_partition_one .. "'") end
+ luci.sys.reboot()
+ end
+end
+
+function action_poweroff()
+ if luci.http.formvalue("cancel") then
+ luci.http.redirect(luci.dispatcher.build_url('admin/system/advanced_reboot'))
+ return
+ end
+ local step = tonumber(luci.http.formvalue("step") or 1)
+ if step == 1 then
+ if nixio.fs.access("/sbin/poweroff") then
+ luci.template.render("advanced_reboot/power_off",{})
+ else
+ luci.template.render("advanced_reboot/advanced_reboot",{})
+ end
+ elseif step == 2 then
+ luci.template.render("admin_system/applyreboot", {
+ title = luci.i18n.translate("Shutting down..."),
+ msg = luci.i18n.translate("The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It might be necessary to renew the address of your computer to reach the device again, depending on your settings."),
+ addr = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr")) or "192.168.1.1"
+ })
+ luci.sys.call("/sbin/poweroff")
+ end
+end
diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
new file mode 100644
index 0000000000..206d250543
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm
@@ -0,0 +1,92 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2015 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Advanced Reboot%></h2>
+<br />
+
+<%- 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 -%>
+
+<%- if device_name then -%>
+<fieldset class="cbi-section">
+ <legend><%=device_name%><%: Partitions%></legend>
+ <table class="cbi-section-table" id="partitions">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell"><%:Partition%></th>
+ <th class="cbi-section-table-cell"><%:Status%></th>
+ <th class="cbi-section-table-cell"><%:Firmware/OS (Kernel)%></th>
+ <th class="cbi-section-table-cell"><%:Action%></th>
+ </tr>
+ <tr class="cbi-section-table-row">
+ <td>
+ <%=boot_envvar1_partition_one%>
+ </td>
+ <td>
+ <%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
+ </td>
+ <td>
+ <%=partition_one_os%>
+ </td>
+ <td>
+ <%- if boot_envvar1_partition_one == current_partition then -%>
+ <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
+ </form>
+ <%- else -%>
+ <form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
+ </form>
+ <%- end -%>
+ </td>
+ </tr>
+ <tr class="cbi-section-table-row">
+ <td>
+ <%=boot_envvar1_partition_two%>
+ </td>
+ <td>
+ <%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%>
+ </td>
+ <td>
+ <%=partition_two_os%>
+ </td>
+ <td>
+ <%- if boot_envvar1_partition_two == current_partition then -%>
+ <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input id="reboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to current partition%>" />
+ </form>
+ <%- else -%>
+ <form method="post" action="<%=url('admin/system/advanced_reboot/alternative_reboot')%>">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" />
+ </form>
+ <%- end -%>
+ </td>
+ </tr>
+ </table>
+</fieldset>
+<%- else -%>
+ <p class="alert-message warning"><%:Warning: This system does not have two partitions!%></p>
+<%- end -%>
+
+<hr />
+
+<%- if nixio.fs.access("/sbin/poweroff") then -%>
+<form method="post" action="<%=url('admin/system/advanced_reboot/power_off')%>">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input id="poweroff-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Perform power off...%>" />
+</form>
+<%- else -%>
+ <p class="alert-message warning"><%:Warning: This system does not support powering off!%></p>
+<%- end -%>
+
+<%+footer%>
diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm
new file mode 100644
index 0000000000..6325934094
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm
@@ -0,0 +1,29 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Reboot Device to an Alternative Partition%> - <%:Confirm%></h2>
+<p>
+ <%_ WARNING: An alternative partition might have its own settings and completely different firmware.<br /><br />
+ As your network configuration and WiFi SSID/password on alternative partition might be different,
+ you might have to adjust your computer settings to be able to access your device once it reboots.<br /><br />
+ Please also be aware that alternative partition firmware might not provide an easy way to switch active partition
+ and boot back to the currently active partition.<br /><br />
+ Click "Proceed" below to reboot device to an alternative partition. %>
+</p>
+
+<div class="cbi-page-actions right">
+ <form class="inline" action="<%=REQUEST_URI%>" method="post">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input type="hidden" name="step" value="2" />
+ <input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
+ <input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
+ </form>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm
new file mode 100644
index 0000000000..0ddea11e65
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm
@@ -0,0 +1,25 @@
+<%#
+ Copyright 2008 Steven Barth <steven@midlink.org>
+ Copyright 2008-2009 Jo-Philipp Wich <jow@openwrt.org>
+ Copyright 2017 Stan Grishin <stangri@melmac.net>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<h2 name="content"><%:Power Off Device%> - <%:Confirm%></h2>
+<p>
+ <%_ WARNING: Power off might result in a reboot on a device which doesn't support power off.<br /><br />
+ Click "Proceed" below to power off your device. %>
+</p>
+
+<div class="cbi-page-actions right">
+ <form class="inline" action="<%=REQUEST_URI%>" method="post">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input type="hidden" name="step" value="2" />
+ <input class="cbi-button cbi-button-reset" name="cancel" type="submit" value="<%:Cancel%>" />
+ <input class="cbi-button cbi-button-apply" type="submit" value="<%:Proceed%>" />
+ </form>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot b/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot
new file mode 100644
index 0000000000..9c810892c2
--- /dev/null
+++ b/applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot
@@ -0,0 +1,102 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Action"
+msgstr ""
+
+msgid "Advanced Reboot"
+msgstr ""
+
+msgid "Alternative"
+msgstr ""
+
+msgid "Cancel"
+msgstr ""
+
+msgid "Confirm"
+msgstr ""
+
+msgid "Current"
+msgstr ""
+
+msgid "Firmware/OS (Kernel)"
+msgstr ""
+
+msgid "Partition"
+msgstr ""
+
+msgid "Partitions"
+msgstr ""
+
+msgid "Perform power off..."
+msgstr ""
+
+msgid "Power Off Device"
+msgstr ""
+
+msgid "Proceed"
+msgstr ""
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr ""
+
+msgid "Reboot to alternative partition..."
+msgstr ""
+
+msgid "Reboot to current partition"
+msgstr ""
+
+msgid "Rebooting..."
+msgstr ""
+
+msgid "Shutting down..."
+msgstr ""
+
+msgid "Status"
+msgstr ""
+
+msgid ""
+"The system is rebooting now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
+"few minutes before you try to reconnect. It might be necessary to renew the "
+"address of your computer to reach the device again, depending on your "
+"settings."
+msgstr ""
+
+msgid ""
+"The system is rebooting to an alternative partition now.<br /> DO NOT POWER "
+"OFF THE DEVICE!<br /> Wait a few minutes before you try to reconnect. It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"The system is shutting down now.<br /> DO NOT POWER OFF THE DEVICE!<br /> It "
+"might be necessary to renew the address of your computer to reach the device "
+"again, depending on your settings."
+msgstr ""
+
+msgid ""
+"WARNING: An alternative partition might have its own settings and completely "
+"different firmware.<br /><br /> As your network configuration and WiFi SSID/"
+"password on alternative partition might be different, you might have to "
+"adjust your computer settings to be able to access your device once it "
+"reboots.<br /><br /> Please also be aware that alternative partition "
+"firmware might not provide an easy way to switch active partition and boot "
+"back to the currently active partition.<br /><br /> Click \"Proceed\" below "
+"to reboot device to an alternative partition."
+msgstr ""
+
+msgid ""
+"WARNING: Power off might result in a reboot on a device which doesn't "
+"support power off.<br /><br /> Click \"Proceed\" below to power off your "
+"device."
+msgstr ""
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr ""
+
+msgid "Warning: This system does not have two partitions!"
+msgstr ""
+
+msgid "Warning: This system does not support powering off!"
+msgstr ""
diff --git a/applications/luci-app-aria2/po/sv/aria2.po b/applications/luci-app-aria2/po/sv/aria2.po
new file mode 100644
index 0000000000..3a129364cf
--- /dev/null
+++ b/applications/luci-app-aria2/po/sv/aria2.po
@@ -0,0 +1,208 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "\"Falloc\" is not available in all cases."
+msgstr ""
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr ""
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr ""
+
+msgid "Additional Bt tracker enabled"
+msgstr ""
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Inställningar för Aria2"
+
+msgid "Aria2 Status"
+msgstr "Status för Aria2"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr "Aria2 är ett verktyg för multiprotokoll &amp; multi-käll"
+
+msgid "Autosave session interval"
+msgstr ""
+
+msgid "BitTorrent Settings"
+msgstr "Inställningar för BitTorrent"
+
+msgid "BitTorrent listen port"
+msgstr "Lyssningsport för BitTorrent"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Config file directory"
+msgstr "Ställ in fil-mapp"
+
+msgid "Debug"
+msgstr "Avlusa"
+
+msgid "Default download directory"
+msgstr "Standard nerladdningsmapp"
+
+msgid "Disk cache"
+msgstr "Disk-cache"
+
+msgid "Enable log"
+msgstr "Aktivera logg"
+
+msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid "Error"
+msgstr "Fel"
+
+msgid "Extra Settings"
+msgstr "Extra inställningar"
+
+msgid "Falloc"
+msgstr "Falloc"
+
+msgid "Files and Locations"
+msgstr "Filer och Platser"
+
+msgid "Follow torrent"
+msgstr "Följ torrenten"
+
+msgid "General Settings"
+msgstr "Generella inställningar"
+
+msgid "Generate Randomly"
+msgstr "Generera slumpmässigt"
+
+msgid "Info"
+msgstr "Info"
+
+msgid "List of additional Bt tracker"
+msgstr ""
+
+msgid "List of extra settings"
+msgstr ""
+
+msgid "Log file is in the config file dir."
+msgstr "Logg-filen är i konfigurationsfilens mapp."
+
+msgid "Log level"
+msgstr "Loggningsnivå"
+
+msgid "Max concurrent downloads"
+msgstr "Maximalt sammanhängande nerladdningar"
+
+msgid "Max connection per server"
+msgstr "Max antalet anslutningar per server"
+
+msgid "Max number of peers per torrent"
+msgstr "Maximalt antalet jämlikar per torrent"
+
+msgid "Max number of split"
+msgstr ""
+
+msgid "Min split size"
+msgstr ""
+
+msgid "No Authentication"
+msgstr "Ingen autentisering"
+
+msgid "Notice"
+msgstr "Avisering"
+
+msgid "Off"
+msgstr "Av"
+
+msgid "Open WebUI-Aria2"
+msgstr ""
+
+msgid "Open YAAW"
+msgstr "Öppna YAAW"
+
+msgid "Overall download limit"
+msgstr ""
+
+msgid "Overall speed limit enabled"
+msgstr ""
+
+msgid "Overall upload limit"
+msgstr ""
+
+msgid "Per task download limit"
+msgstr ""
+
+msgid "Per task speed limit enabled"
+msgstr ""
+
+msgid "Per task upload limit"
+msgstr ""
+
+msgid "Prealloc"
+msgstr "Prealloc"
+
+msgid "Preallocation"
+msgstr ""
+
+msgid "Prefix of peer ID"
+msgstr ""
+
+msgid "RPC Token"
+msgstr ""
+
+msgid "RPC authentication method"
+msgstr ""
+
+msgid "RPC password"
+msgstr "RPC-lösenord"
+
+msgid "RPC port"
+msgstr "RPC-port"
+
+msgid "RPC username"
+msgstr "RPC-användarnamn"
+
+msgid "Run daemon as user"
+msgstr "Kör daemonen som användare"
+
+msgid "Sec"
+msgstr "Sek"
+
+msgid "Task Settings"
+msgstr ""
+
+msgid "The Aria2 service is not running."
+msgstr "Aria2-tjänsten körs inte."
+
+msgid "The Aria2 service is running."
+msgstr "Aria2-tjänsten körs."
+
+msgid "Token"
+msgstr ""
+
+msgid "Trunc"
+msgstr ""
+
+msgid "Use WebSocket"
+msgstr "Använd WebSocket"
+
+msgid "User agent value"
+msgstr "Använd agent-värde"
+
+msgid "Username & Password"
+msgstr "Användarnamn & Lösenord"
+
+msgid "View Json-RPC URL"
+msgstr ""
+
+msgid "Warn"
+msgstr "Varna"
+
+msgid "in bytes, You can append K or M."
+msgstr ""
+
+msgid "in bytes/sec, You can append K or M."
+msgstr ""
diff --git a/applications/luci-app-clamav/po/sv/clamav.po b/applications/luci-app-clamav/po/sv/clamav.po
new file mode 100644
index 0000000000..37de249e54
--- /dev/null
+++ b/applications/luci-app-clamav/po/sv/clamav.po
@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "Blockera krypterade arkiv"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr ""
+
+msgid "Detect broken executables"
+msgstr ""
+
+msgid "Detect possibly unwanted apps"
+msgstr "Upptäck möjliga oönskade appar"
+
+msgid "Enable verbose logging"
+msgstr "Aktivera utförlig loggning"
+
+msgid "Follow directory symlinks"
+msgstr ""
+
+msgid "Follow file symlinks"
+msgstr ""
+
+msgid "Log"
+msgstr "Logg"
+
+msgid "Log additional infection info"
+msgstr ""
+
+msgid "Log time with each message"
+msgstr ""
+
+msgid "Max directory scan depth"
+msgstr ""
+
+msgid "Max number of threads"
+msgstr "Maximalt antalet trådar"
+
+msgid "Max size of log file"
+msgstr ""
+
+msgid "Max size of scanned file"
+msgstr ""
+
+msgid "No"
+msgstr "Nej"
+
+msgid "Port range, highest port"
+msgstr ""
+
+msgid "Port range, lowest port"
+msgstr ""
+
+msgid "Scan ELF files"
+msgstr "Sök igenom ELF-filer"
+
+msgid "Scan MS Office and .msi files"
+msgstr "Sök igen MS Office och .msi-filer"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr "Sök igen RFC1341-meddelanden uppdelade över många e-postmeddelanden"
+
+msgid "Scan archives"
+msgstr "Sök igenom arkiven"
+
+msgid "Scan emails"
+msgstr "Sök igenom e-postmeddelanden"
+
+msgid "Scan pdf files"
+msgstr "Sök igenom pdf-filer"
+
+msgid "Scan portable executables"
+msgstr ""
+
+msgid "Scan swf files"
+msgstr "Sök igenom swf-filer"
+
+msgid "Settings"
+msgstr "Inställningar"
+
+msgid "Yes"
+msgstr "Ja"
diff --git a/applications/luci-app-commands/Makefile b/applications/luci-app-commands/Makefile
index dc5d0ca849..f41d6e2d42 100644
--- a/applications/luci-app-commands/Makefile
+++ b/applications/luci-app-commands/Makefile
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Shell Command Module
LUCI_DEPENDS:=
+PKG_LICENSE:=Apache-2.0
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-commands/po/sv/commands.po b/applications/luci-app-commands/po/sv/commands.po
index 5a4c255e4a..a944fdb63d 100644
--- a/applications/luci-app-commands/po/sv/commands.po
+++ b/applications/luci-app-commands/po/sv/commands.po
@@ -10,98 +10,102 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "A short textual description of the configured command"
-msgstr ""
+msgstr "En kort textuell beskrivning av det inställda kommandot"
msgid ""
"Allow executing the command and downloading its output without prior "
"authentication"
msgstr ""
+"Tillåt att kommandot kan köras och ladda ner dess utmatning utan föregående "
+"autentisering"
msgid "Allow the user to provide additional command line arguments"
-msgstr ""
+msgstr "Tillåt användaren att tillge extra kommandoradsargument"
msgid "Arguments:"
-msgstr ""
+msgstr "Argument:"
msgid "Binary data not displayed, download instead."
-msgstr ""
+msgstr "Binärdatan visades inte, ladda ner istället."
msgid "Code:"
-msgstr ""
+msgstr "Kod:"
msgid "Collecting data..."
-msgstr ""
+msgstr "Samlar in data..."
msgid "Command"
-msgstr ""
+msgstr "Kommando"
msgid "Command executed successfully."
-msgstr ""
+msgstr "Kommandot utfördes korrekt"
msgid "Command exited with status code"
-msgstr ""
+msgstr "Kommandot avslutade med statuskod"
msgid "Command failed"
-msgstr ""
+msgstr "Kommandot misslyckades"
msgid "Command line to execute"
-msgstr ""
+msgstr "Kommandorad att exekvera"
msgid "Command successful"
-msgstr ""
+msgstr "Kommandot lyckades"
msgid "Command:"
-msgstr ""
+msgstr "Kommando:"
msgid "Configure"
-msgstr ""
+msgstr "Ställ in"
msgid "Custom Commands"
-msgstr ""
+msgstr "Anpassade kommandon"
msgid "Custom arguments"
-msgstr ""
+msgstr "Anpassade argument"
msgid "Dashboard"
-msgstr ""
+msgstr "Instrumentpanel"
msgid "Description"
-msgstr ""
+msgstr "Beskrivning"
msgid "Download"
-msgstr ""
+msgstr "Ladda ner"
msgid "Download execution result"
-msgstr ""
+msgstr "Resultatet av nerladdningen"
msgid "Failed to execute command!"
-msgstr ""
+msgstr "Misslyckade med att köra kommando!"
msgid "Link"
-msgstr ""
+msgstr "Länk"
msgid "Loading"
-msgstr ""
+msgstr "Laddar"
msgid "Or display result"
-msgstr ""
+msgstr "Eller visa resultat"
msgid "Public access"
-msgstr ""
+msgstr "Publik tillgång"
msgid "Run"
-msgstr ""
+msgstr "Kör"
msgid "Standard Error"
-msgstr ""
+msgstr "Standardfel"
msgid "Standard Output"
-msgstr ""
+msgstr "Standardinmatning"
msgid ""
"This page allows you to configure custom shell commands which can be easily "
"invoked from the web interface."
msgstr ""
+"Den här sidan tillåter dig att ställa in anpassade skalkommandon som lättast "
+"kan åberopas från webbgränssnittet."
msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "Väntar på att kommandot ska slutföras..."
diff --git a/applications/luci-app-ddns/po/sv/ddns.po b/applications/luci-app-ddns/po/sv/ddns.po
new file mode 100644
index 0000000000..9373fea3a4
--- /dev/null
+++ b/applications/luci-app-ddns/po/sv/ddns.po
@@ -0,0 +1,723 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "&"
+msgstr "&"
+
+msgid "-- custom --"
+msgstr "-- anpassad --"
+
+msgid "-- default --"
+msgstr "-- standard --"
+
+msgid "Advanced Settings"
+msgstr "Avancerade inställningar"
+
+msgid "Allow non-public IP's"
+msgstr "Tillåt icke-publika IP-adresser"
+
+msgid "Applying changes"
+msgstr "Verkställer ändringar"
+
+msgid "Basic Settings"
+msgstr "Standardinställningar"
+
+msgid ""
+"Below a list of configuration tips for your system to run Dynamic DNS "
+"updates without limitations"
+msgstr ""
+
+msgid ""
+"Below is a list of configured DDNS configurations and their current state."
+msgstr ""
+
+msgid "Bind Network"
+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!"
+msgstr ""
+
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+msgid "Casual users should not change this setting"
+msgstr ""
+
+msgid "Change provider"
+msgstr "Byt operatör"
+
+msgid "Check Interval"
+msgstr "Kontroll-intervall"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Config error"
+msgstr "Konfigurationsfel"
+
+msgid "Configuration"
+msgstr "Konfiguration"
+
+msgid ""
+"Configure here the details for all Dynamic DNS services including this LuCI "
+"application."
+msgstr ""
+
+msgid "Configure here the details for selected Dynamic DNS service."
+msgstr ""
+
+msgid "Current setting"
+msgstr "Nuvarande inställning"
+
+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 ""
+
+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 ""
+
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+msgid "Custom update-URL"
+msgstr "Anpassad webbadress för uppdatering"
+
+msgid "Custom update-script"
+msgstr "Anpassat uppdateringsskript"
+
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+msgid "DDNS Client Configuration"
+msgstr ""
+
+msgid "DDNS Client Documentation"
+msgstr ""
+
+msgid "DDNS Service provider"
+msgstr ""
+
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+msgid "DNS-Server"
+msgstr "DNS-server"
+
+msgid "Date format"
+msgstr "Datumformat"
+
+msgid "Defines the Web page to read systems IPv4-Address from"
+msgstr ""
+
+msgid "Defines the Web page to read systems IPv6-Address from"
+msgstr ""
+
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+msgid "Defines the network to read systems IPv4-Address from"
+msgstr ""
+
+msgid "Defines the network to read systems IPv6-Address from"
+msgstr ""
+
+msgid ""
+"Defines the source to read systems IPv4-Address from, that will be send to "
+"the DDNS provider"
+msgstr ""
+
+msgid ""
+"Defines the source to read systems IPv6-Address from, that will be send to "
+"the DDNS provider"
+msgstr ""
+
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+msgid "Details for"
+msgstr "Detaljer för"
+
+msgid "Directory contains Log files for each running section"
+msgstr ""
+
+msgid ""
+"Directory contains PID and other status information for each running section"
+msgstr ""
+
+msgid "Disabled"
+msgstr "Inaktivera"
+
+msgid "Domain"
+msgstr "Domän"
+
+msgid "Dynamic DNS"
+msgstr "Dynamisk DNS"
+
+msgid ""
+"Dynamic DNS allows that your router can be reached with a fixed hostname "
+"while having a dynamically changing IP address."
+msgstr ""
+
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid "Error"
+msgstr "Fel"
+
+msgid "Error Retry Counter"
+msgstr ""
+
+msgid "Error Retry Interval"
+msgstr ""
+
+msgid "Event Network"
+msgstr ""
+
+msgid "File"
+msgstr "Fil"
+
+msgid "File not found"
+msgstr "Filen hittades inte"
+
+msgid "File not found or empty"
+msgstr "Filen hittades inte eller tom"
+
+msgid ""
+"Follow this link<br />You will find more hints to optimize your system to "
+"run DDNS scripts with all options"
+msgstr ""
+
+msgid "For detailed information about parameter settings look here."
+msgstr ""
+
+msgid "For supported codes look here"
+msgstr ""
+
+msgid "Force IP Version"
+msgstr "Tvinga IP-version"
+
+msgid "Force IP Version not supported"
+msgstr "Påtvingad IP-version stöds inte"
+
+msgid "Force Interval"
+msgstr ""
+
+msgid "Force TCP on DNS"
+msgstr ""
+
+msgid "Forced IP Version don't matched"
+msgstr ""
+
+msgid "Format"
+msgstr "Format"
+
+msgid "Format: IP or FQDN"
+msgstr "Format: IP eller FQDN"
+
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL "
+"kommer att använda det fysiska gränssnittet."
+
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+msgid "HTTPS not supported"
+msgstr "HTTPS stöds inte"
+
+msgid "Hints"
+msgstr "Ledtrådar"
+
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+msgid "IP address source"
+msgstr "IP-adressens källa"
+
+msgid "IP address version"
+msgstr "Version för IP-adress"
+
+msgid "IPv4-Address"
+msgstr "IPv4-adress"
+
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+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 ""
+
+msgid "IPv6 not supported"
+msgstr "IPv6 stöds inte"
+
+msgid "IPv6-Address"
+msgstr "IPv6-adress"
+
+msgid "If both cURL and GNU Wget are installed, Wget is used by default."
+msgstr ""
+"Om både cURL och GNU Wget är installerade så används Wget som standard."
+
+msgid ""
+"If this service section is disabled it could not be started.<br />Neither "
+"from LuCI interface nor from console"
+msgstr ""
+
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+msgid ""
+"If you want to send updates for IPv4 and IPv6 you need to define two "
+"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+msgid "Info"
+msgstr "Info"
+
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+msgid "Interface"
+msgstr "Gränssnitt"
+
+msgid ""
+"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
+"are not supported"
+msgstr ""
+
+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 ""
+
+msgid "It is NOT recommended for casual users to change settings on this page."
+msgstr ""
+"Det är INTE rekommenderat för vanliga användare att ändra inställningar på "
+"den här sidan."
+
+msgid "Last Update"
+msgstr "Senaste uppdateringen"
+
+msgid "Loading"
+msgstr "Laddar"
+
+msgid "Log File Viewer"
+msgstr "Visare för loggfil"
+
+msgid "Log directory"
+msgstr ""
+
+msgid "Log length"
+msgstr "Loggens längd"
+
+msgid "Log to file"
+msgstr "Logga till fil"
+
+msgid "Log to syslog"
+msgstr "Logga till syslog"
+
+msgid "Lookup Hostname"
+msgstr "Kolla upp värdnamn"
+
+msgid "NOT installed"
+msgstr "INTE installerad"
+
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+msgid "Network"
+msgstr "Nätverk"
+
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+msgid "Never"
+msgstr "Aldrig"
+
+msgid "Next Update"
+msgstr "Nästa uppdatering"
+
+msgid "No certificates found"
+msgstr "Inga ceritifikat hittades"
+
+msgid "No data"
+msgstr "Ingen data"
+
+msgid "No logging"
+msgstr "Ingen loggning"
+
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+msgid "Notice"
+msgstr ""
+
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+msgid "On Error the script will retry the failed action after given time"
+msgstr ""
+
+msgid "On Error the script will stop execution after given number of retrys"
+msgstr ""
+
+msgid "OpenWrt Wiki"
+msgstr "Wiki för OpenWrt"
+
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+msgid "Optional Parameter"
+msgstr "Valfri parameter"
+
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "PROXY-Server"
+msgstr "PROXY-server"
+
+msgid "PROXY-Server not supported"
+msgstr "PROXY-servern stöds inte"
+
+msgid "Password"
+msgstr "Lösenord"
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
+msgid "Please [Save & Apply] your changes first"
+msgstr "Vänligen [Spara & Verkställ] dina ändringar först"
+
+msgid "Please press [Read] button"
+msgstr "Vänligen tryck på [Läs]-knappen"
+
+msgid "Please update to the current version!"
+msgstr "Vänligen uppdatera till den senaste versionen!"
+
+msgid "Process ID"
+msgstr ""
+
+msgid "Read / Reread log file"
+msgstr "Läs / Läs om loggfilen"
+
+msgid "Really change DDNS provider?"
+msgstr ""
+
+msgid "Registered IP"
+msgstr "Registrerad IP"
+
+msgid "Replaces [DOMAIN] in Update-URL"
+msgstr ""
+
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+msgid "Run once"
+msgstr "Kör en gång"
+
+msgid "Script"
+msgstr "Skript"
+
+msgid "Show more"
+msgstr "Visa mer"
+
+msgid "Software update required"
+msgstr ""
+
+msgid "Specifying a DNS-Server is not supported"
+msgstr ""
+
+msgid "Start"
+msgstr "Starta"
+
+msgid "Start / Stop"
+msgstr "Starta / Stoppa"
+
+msgid "Status directory"
+msgstr ""
+
+msgid "Stopped"
+msgstr "Stoppad"
+
+msgid ""
+"The currently installed 'ddns-scripts' package did not support all available "
+"settings."
+msgstr ""
+
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
+msgid "There is no service configured."
+msgstr "Det finns ingen tjänst inställd."
+
+msgid "Timer Settings"
+msgstr ""
+
+msgid "To change global settings click here"
+msgstr "Klicka här för att ändra på globala inställningar"
+
+msgid "To use cURL activate this option."
+msgstr ""
+
+msgid "URL"
+msgstr "Webbadress"
+
+msgid "URL to detect"
+msgstr "Webbadress att upptäcka"
+
+msgid "Unknown error"
+msgstr "Okänt fel"
+
+msgid ""
+"Update URL to be used for updating your DDNS Provider.<br />Follow "
+"instructions you will find on their WEB page."
+msgstr ""
+
+msgid "Update error"
+msgstr "Uppdateringsfel"
+
+msgid "Use HTTP Secure"
+msgstr "Använd Säker HTTP"
+
+msgid "Use cURL"
+msgstr "Använd cURL"
+
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+msgid "Username"
+msgstr "Användarnamn"
+
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+msgid "Verify"
+msgstr "Verkställ"
+
+msgid "Version"
+msgstr "Version"
+
+msgid "Version Information"
+msgstr "Information om versionen"
+
+msgid "Waiting for changes to be applied..."
+msgstr "Väntar på att ändringarna ska bli verkställda..."
+
+msgid "Warning"
+msgstr "Varning"
+
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' or 'hostip' "
+"package, if you need to specify a DNS server to detect your registered IP."
+msgstr ""
+
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+msgid "cURL without Proxy Support"
+msgstr "cURL utan Proxy-stöd"
+
+msgid "can not detect local IP. Please select a different Source combination"
+msgstr ""
+"kan inte upptäcka lokal IP-adress. Vänligen välj en annorlunda Käll-"
+"kombination"
+
+msgid "can not resolve host:"
+msgstr "kan inte avgöra värd:"
+
+msgid "config error"
+msgstr "konfigurationsfel"
+
+msgid "days"
+msgstr "dagar"
+
+msgid "directory or path/file"
+msgstr ""
+
+msgid "either url or script could be set"
+msgstr "kunde varken fastställa webbadress eller skript"
+
+msgid "enable here"
+msgstr "aktivera här"
+
+msgid "file or directory not found or not 'IGNORE'"
+msgstr ""
+
+msgid "help"
+msgstr "hjälp"
+
+msgid "hours"
+msgstr "timmar"
+
+msgid "installed"
+msgstr "installerad"
+
+msgid "invalid FQDN / required - Sample"
+msgstr "ogiltig FQDN / behövs - Urval"
+
+msgid "minimum value '0'"
+msgstr "minimalt värde '0'"
+
+msgid "minimum value '1'"
+msgstr "minimalt värde '1'"
+
+msgid "minimum value 5 minutes == 300 seconds"
+msgstr "minimalt värde 5 minuter == 300 sekunder"
+
+msgid "minutes"
+msgstr "minutrar"
+
+msgid "missing / required"
+msgstr "saknas / behövs"
+
+msgid "must be greater or equal 'Check Interval'"
+msgstr ""
+
+msgid "must start with 'http://'"
+msgstr "måste börja med 'http://"
+
+msgid "nc (netcat) can not connect"
+msgstr "nc (netcat) kan inte ansluta"
+
+msgid "never"
+msgstr "aldrig"
+
+msgid "no data"
+msgstr "ingen data"
+
+msgid "not found or not executable - Sample: '/path/to/script.sh'"
+msgstr ""
+
+msgid "nslookup can not resolve host"
+msgstr ""
+
+msgid "or"
+msgstr "eller"
+
+msgid "or higher"
+msgstr "eller större"
+
+msgid "please disable"
+msgstr "vänligen inaktivera"
+
+msgid "please remove entry"
+msgstr "vänligen ta bort inmatningen"
+
+msgid "please select 'IPv4' address version"
+msgstr "vänligen välj version för 'IPv4'-adress"
+
+msgid "please select 'IPv4' address version in"
+msgstr ""
+
+msgid "please set to 'default'"
+msgstr ""
+
+msgid "proxy port missing"
+msgstr ""
+
+msgid "required"
+msgstr "behövs"
+
+msgid "seconds"
+msgstr "sekunder"
+
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "för att köra HTTPS utan verifiering av server-certifikaten (osäkert)"
+
+msgid "unknown error"
+msgstr "okänt fel"
+
+msgid "unspecific error"
+msgstr "ospecifierat fel"
+
+msgid "use hostname, FQDN, IPv4- or IPv6-Address"
+msgstr "använd värdnamn, FQDN, IPv4- eller IPv6-adress"
diff --git a/applications/luci-app-diag-core/po/sv/diag_core.po b/applications/luci-app-diag-core/po/sv/diag_core.po
index dd0a81a644..c31433287f 100644
--- a/applications/luci-app-diag-core/po/sv/diag_core.po
+++ b/applications/luci-app-diag-core/po/sv/diag_core.po
@@ -10,10 +10,10 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "Configure Diagnostics"
-msgstr ""
+msgstr "Ställ in diagnostik"
msgid "Diagnostics"
-msgstr ""
+msgstr "Diagnostik"
msgid ""
"The diagnostics available under this menu depend on what modules you have "
@@ -29,3 +29,5 @@ msgid ""
"With this menu you can configure network diagnostics, such as network device "
"scans and ping tests."
msgstr ""
+"Med den här menyn så kan du ställa in nätverksdiagnostik så som "
+"igenomsökningar och ping-tester för nätverksenheten."
diff --git a/applications/luci-app-firewall/Makefile b/applications/luci-app-firewall/Makefile
index 21804d7c2d..4fa85f2d5b 100644
--- a/applications/luci-app-firewall/Makefile
+++ b/applications/luci-app-firewall/Makefile
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=Firewall and Portforwarding application
LUCI_DEPENDS:=+firewall
+PKG_LICENSE:=Apache-2.0
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
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 500d1bf32f..7553504572 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
@@ -21,7 +21,7 @@ nw.init(m.uci)
local zone = fw:get_zone(arg[1])
if not zone then
- luci.http.redirect(dsp.build_url("admin/network/firewall/zones"))
+ luci.http.redirect(ds.build_url("admin/network/firewall/zones"))
return
else
m.title = "%s - %s" %{
diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po
index 2e169fb927..777c81787d 100644
--- a/applications/luci-app-firewall/po/sv/firewall.po
+++ b/applications/luci-app-firewall/po/sv/firewall.po
@@ -10,43 +10,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid "%s in %s"
-msgstr ""
+msgstr "%s i %s"
msgid "%s%s with %s"
-msgstr ""
+msgstr "%s%s med %s"
msgid "%s, %s in %s"
-msgstr ""
+msgstr "%2, %s i %s"
msgid "(Unnamed Entry)"
-msgstr ""
+msgstr "(Namnlös post)"
msgid "(Unnamed Rule)"
-msgstr ""
+msgstr "(Namnlös regel)"
msgid "(Unnamed SNAT)"
-msgstr ""
+msgstr "(Namnlös SNAT)"
msgid "<var>%d</var> pkts. per <var>%s</var>"
-msgstr ""
+msgstr "<var>%d</var> pkt. per <var>%s</var>"
msgid "<var>%d</var> pkts. per <var>%s</var>, burst <var>%d</var> pkts."
-msgstr ""
+msgstr "<var>%d</var> pkt. per <var>%s</var>, brustna <var>%d</var> pkt."
msgid "<var>%s</var> and limit to %s"
-msgstr ""
+msgstr "<var>%s</var> och gränsen till %s"
msgid "Action"
-msgstr ""
+msgstr "Åtgärd"
msgid "Add"
-msgstr ""
+msgstr "Lägg till"
msgid "Add and edit..."
-msgstr ""
+msgstr "Lägg till och redigera..."
msgid "Advanced Settings"
-msgstr ""
+msgstr "Avancerade inställningar"
msgid "Allow forward from <em>source zones</em>:"
msgstr ""
@@ -55,13 +55,13 @@ msgid "Allow forward to <em>destination zones</em>:"
msgstr ""
msgid "Any"
-msgstr ""
+msgstr "Alla"
msgid "Covered networks"
-msgstr ""
+msgstr "Nätverk som omfattas"
msgid "Custom Rules"
-msgstr ""
+msgstr "Anpassade regler"
msgid ""
"Custom rules allow you to execute arbritary iptables commands which are not "
@@ -73,22 +73,22 @@ msgid "Destination IP address"
msgstr ""
msgid "Destination address"
-msgstr ""
+msgstr "Destinationsadress"
msgid "Destination port"
-msgstr ""
+msgstr "Destinationsport"
msgid "Destination zone"
msgstr ""
msgid "Do not rewrite"
-msgstr ""
+msgstr "Skriv inte om igen"
msgid "Drop invalid packets"
-msgstr ""
+msgstr "Släpp ogiltiga paket"
msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
msgid "Enable NAT Loopback"
msgstr ""
@@ -100,22 +100,22 @@ msgid "Enable logging on this zone"
msgstr ""
msgid "External IP address"
-msgstr ""
+msgstr "Extern IP-adress"
msgid "External port"
-msgstr ""
+msgstr "Extern port"
msgid "External zone"
-msgstr ""
+msgstr "Extern zon"
msgid "Extra arguments"
-msgstr ""
+msgstr "Extra argument"
msgid "Firewall"
-msgstr ""
+msgstr "Brandvägg"
msgid "Firewall - Custom Rules"
-msgstr ""
+msgstr "Brandvägg - Anpassade regler"
msgid "Firewall - Port Forwards"
msgstr ""
@@ -130,16 +130,16 @@ msgid "Force connection tracking"
msgstr ""
msgid "Forward"
-msgstr ""
+msgstr "Vidarebefordra"
msgid "Forward to"
-msgstr ""
+msgstr "Vidarebefordra till"
msgid "Friday"
-msgstr ""
+msgstr "Fredag"
msgid "From %s in %s"
-msgstr ""
+msgstr "Från %s i %s"
msgid "From %s in %s with source %s"
msgstr ""
@@ -148,40 +148,40 @@ msgid "From %s in %s with source %s and %s"
msgstr ""
msgid "General Settings"
-msgstr ""
+msgstr "Generella inställningar"
msgid "IPv4"
-msgstr ""
+msgstr "IPv4"
msgid "IPv4 and IPv6"
-msgstr ""
+msgstr "IPv4 och IPv6"
msgid "IPv4 only"
-msgstr ""
+msgstr "Endast IPv4"
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
msgid "IPv6 only"
-msgstr ""
+msgstr "Endast IPv6"
msgid "Input"
-msgstr ""
+msgstr "Inmatning"
msgid "Inter-Zone Forwarding"
msgstr ""
msgid "Internal IP address"
-msgstr ""
+msgstr "Intern IP-adress"
msgid "Internal port"
-msgstr ""
+msgstr "Intern port"
msgid "Internal zone"
-msgstr ""
+msgstr "Intern zon"
msgid "Limit log messages"
-msgstr ""
+msgstr "Begränsa loggmeddelanden"
msgid "MSS clamping"
msgstr ""
@@ -190,7 +190,7 @@ msgid "Masquerading"
msgstr ""
msgid "Match"
-msgstr ""
+msgstr "Matcha"
msgid "Match ICMP type"
msgstr ""
@@ -209,22 +209,22 @@ msgid ""
msgstr ""
msgid "Monday"
-msgstr ""
+msgstr "Måndag"
msgid "Month Days"
msgstr ""
msgid "Name"
-msgstr ""
+msgstr "Namn"
msgid "New SNAT rule"
-msgstr ""
+msgstr "Ny SNAT-regel"
msgid "New forward rule"
-msgstr ""
+msgstr "Ny vidarebefordningsregel"
msgid "New input rule"
-msgstr ""
+msgstr "Ny inmatningsregel"
msgid "New port forward"
msgstr ""
@@ -247,13 +247,13 @@ msgid ""
msgstr ""
msgid "Open ports on router"
-msgstr ""
+msgstr "Öppna portar i router"
msgid "Other..."
-msgstr ""
+msgstr "Andra..."
msgid "Output"
-msgstr ""
+msgstr "Utmatning"
msgid "Passes additional arguments to iptables. Use with care!"
msgstr ""
@@ -267,7 +267,7 @@ msgid ""
msgstr ""
msgid "Protocol"
-msgstr ""
+msgstr "Protokoll"
msgid ""
"Redirect matched incoming traffic to the given port on the internal host"
@@ -277,7 +277,7 @@ msgid "Redirect matched incoming traffic to the specified internal host"
msgstr ""
msgid "Restart Firewall"
-msgstr ""
+msgstr "Starta om brandvägg"
msgid "Restrict Masquerading to given destination subnets"
msgstr ""
@@ -286,7 +286,7 @@ msgid "Restrict Masquerading to given source subnets"
msgstr ""
msgid "Restrict to address family"
-msgstr ""
+msgstr "Begränsa till adressfamilj"
msgid "Rewrite matched traffic to the given address."
msgstr ""
@@ -297,25 +297,25 @@ msgid ""
msgstr ""
msgid "Rewrite to source %s"
-msgstr ""
+msgstr "Skriv om igen till källan %s"
msgid "Rewrite to source %s, %s"
msgstr ""
msgid "SNAT IP address"
-msgstr ""
+msgstr "IP-adress för SNAT"
msgid "SNAT port"
-msgstr ""
+msgstr "SNAT-port"
msgid "Saturday"
-msgstr ""
+msgstr "Lördag"
msgid "Source IP address"
-msgstr ""
+msgstr "IP-adress för källa"
msgid "Source MAC address"
-msgstr ""
+msgstr "MAC-adress för källa"
msgid "Source NAT"
msgstr ""
@@ -336,19 +336,19 @@ msgid "Source zone"
msgstr ""
msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Startdatum (åååå-mm-dd)"
msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Starttid (tt:mm:ss)"
msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Stopptid (åååå-mm-dd)"
msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Stopptid (tt:mm:ss)"
msgid "Sunday"
-msgstr ""
+msgstr "Söndag"
msgid ""
"The firewall creates zones over your network interfaces to control network "
@@ -383,22 +383,22 @@ msgid ""
msgstr ""
msgid "Thursday"
-msgstr ""
+msgstr "Torsdag"
msgid "Time in UTC"
-msgstr ""
+msgstr "Tid enligt UTC"
msgid "To %s at %s on <var>this device</var>"
-msgstr ""
+msgstr "Till %s vid %s på <var>den här enheten</var>"
msgid "To %s in %s"
-msgstr ""
+msgstr "Till %s i %s"
msgid "To %s on <var>this device</var>"
-msgstr ""
+msgstr "Till %s på <var>den här enheten</var>"
msgid "To %s, %s in %s"
-msgstr ""
+msgstr "Till %s, %s i %s"
msgid "To source IP"
msgstr ""
@@ -407,7 +407,7 @@ msgid "To source port"
msgstr ""
msgid "Traffic Rules"
-msgstr ""
+msgstr "Trafikregler"
msgid ""
"Traffic rules define policies for packets traveling between different zones, "
@@ -416,19 +416,19 @@ msgid ""
msgstr ""
msgid "Tuesday"
-msgstr ""
+msgstr "Tisdag"
msgid "Via %s"
-msgstr ""
+msgstr "Via %s"
msgid "Via %s at %s"
msgstr ""
msgid "Wednesday"
-msgstr ""
+msgstr "Onsdag"
msgid "Week Days"
-msgstr ""
+msgstr "Veckodagar"
msgid ""
"You may specify multiple by selecting \"-- custom --\" and then entering "
@@ -436,37 +436,37 @@ msgid ""
msgstr ""
msgid "Zone %q"
-msgstr ""
+msgstr "Zon %q"
msgid "Zone ⇒ Forwardings"
msgstr ""
msgid "Zones"
-msgstr ""
+msgstr "Zoner"
msgid "accept"
-msgstr ""
+msgstr "acceptera"
msgid "any"
-msgstr ""
+msgstr "alla"
msgid "any host"
-msgstr ""
+msgstr "alla värdar"
msgid "any router IP"
msgstr ""
msgid "any zone"
-msgstr ""
+msgstr "alla zoner"
msgid "don't track"
-msgstr ""
+msgstr "spåra inte"
msgid "drop"
-msgstr ""
+msgstr "släpp"
msgid "reject"
-msgstr ""
+msgstr "neka"
msgid "traffic"
-msgstr ""
+msgstr "trafik"
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
index 7e863a371f..aeabc63616 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
@@ -111,8 +111,8 @@ mwan_interface = m5:section(TypedSection, "interface", translate("Interfaces"),
"Interfaces may not share the same name as configured members, policies or rules"))
mwan_interface.addremove = true
mwan_interface.dynamic = false
- mwan_interface.sectionhead = "Interface"
- mwan_interface.sortable = true
+ mwan_interface.sectionhead = translate("Interface")
+ mwan_interface.sortable = false
mwan_interface.template = "cbi/tblsection"
mwan_interface.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "interface", "%s")
function mwan_interface.create(self, section)
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
index e7c16fdfdc..2b46376399 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
@@ -107,9 +107,9 @@ family = mwan_interface:option(ListValue, "family", translate("Internet Protocol
family:value("ipv4", translate("IPv4"))
family:value("ipv6", translate("IPv6"))
-track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking IP"),
- translate("This IP address will be pinged to dermine if the link is up or down. Leave blank to assume interface is always online"))
- track_ip.datatype = "ipaddr"
+track_ip = mwan_interface:option(DynamicList, "track_ip", translate("Tracking hostname or IP address"),
+ translate("This hostname or IP address will be pinged to determine if the link is up or down. Leave blank to assume interface is always online"))
+ track_ip.datatype = "host"
reliability = mwan_interface:option(Value, "reliability", translate("Tracking reliability"),
translate("Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up"))
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua
index 3bccbd942f..efbe8f7902 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua
@@ -13,7 +13,7 @@ mwan_member = m5:section(TypedSection, "member", translate("Members"),
"Members may not share the same name as configured interfaces, policies or rules"))
mwan_member.addremove = true
mwan_member.dynamic = false
- mwan_member.sectionhead = "Member"
+ mwan_member.sectionhead = translate("Member")
mwan_member.sortable = true
mwan_member.template = "cbi/tblsection"
mwan_member.extedit = ds.build_url("admin", "network", "mwan", "configuration", "member", "%s")
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua
index 08c3f69de6..6640564d50 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua
@@ -42,7 +42,7 @@ mwan_policy = m5:section(TypedSection, "policy", translate("Policies"),
"Policies may not share the same name as configured interfaces, members or rules"))
mwan_policy.addremove = true
mwan_policy.dynamic = false
- mwan_policy.sectionhead = "Policy"
+ mwan_policy.sectionhead = translate("Policy")
mwan_policy.sortable = true
mwan_policy.template = "cbi/tblsection"
mwan_policy.extedit = ds.build_url("admin", "network", "mwan", "configuration", "policy", "%s")
@@ -65,7 +65,6 @@ use_member = mwan_policy:option(DummyValue, "use_member", translate("Members ass
else
return "&#8212;"
end
-
end
last_resort = mwan_policy:option(DummyValue, "last_resort", translate("Last resort"))
@@ -73,11 +72,11 @@ last_resort = mwan_policy:option(DummyValue, "last_resort", translate("Last reso
function last_resort.cfgvalue(self, s)
local action = self.map:get(s, "last_resort")
if action == "blackhole" then
- return "blackhole (drop)"
+ return translate("blackhole (drop)")
elseif action == "default" then
- return "default (use main routing table)"
+ return translate("default (use main routing table)")
else
- return "unreachable (reject)"
+ return translate("unreachable (reject)")
end
end
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua
index 412f369eb0..0f4c5950a0 100644
--- a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua
+++ b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua
@@ -47,7 +47,7 @@ mwan_rule = m5:section(TypedSection, "rule", translate("Traffic Rules"),
mwan_rule.addremove = true
mwan_rule.anonymous = false
mwan_rule.dynamic = false
- mwan_rule.sectionhead = "Rule"
+ mwan_rule.sectionhead = translate("Rule")
mwan_rule.sortable = true
mwan_rule.template = "cbi/tblsection"
mwan_rule.extedit = dsp.build_url("admin", "network", "mwan", "configuration", "rule", "%s")
@@ -93,10 +93,10 @@ sticky = mwan_rule:option(DummyValue, "sticky", translate("Sticky"))
function sticky.cfgvalue(self, s)
if self.map:get(s, "sticky") == "1" then
stickied = 1
- return "Yes"
+ return translate("Yes")
else
stickied = nil
- return "No"
+ return translate("No")
end
end
@@ -133,7 +133,7 @@ errors = mwan_rule:option(DummyValue, "errors", translate("Errors"))
if not string.find(error_protocol_list, " " .. s .. " ") then
return ""
else
- return "<span title=\"No protocol specified\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>"
+ return "<span title=\"" .. translate("No protocol specified") .. "\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>"
end
end
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
index 14d404bc7c..4483485946 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
@@ -24,7 +24,7 @@
<script type="text/javascript">//<![CDATA[
var stxhr = new XHR();
- function update_status(tool, task)
+ function update_status(tool, task, task_name)
{
var iface = document.getElementById('mwaniface').value;
var output = document.getElementById('diag_output');
@@ -33,14 +33,14 @@
{
output.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
- "Waiting for MWAN to " + task + "..."
+ String.format("<%:Waiting for MWAN to %s...%>", task_name)
;
}
else
{
output.innerHTML =
'<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
- "Waiting for diagnostic results..."
+ "<%:Waiting for diagnostic results...%>"
;
}
@@ -56,7 +56,7 @@
}
else
{
- output.innerHTML = '<pre id="diag_output_css"><strong>No diagnostic results returned</strong></pre>';
+ output.innerHTML = '<pre id="diag_output_css"><strong><%:No diagnostic results returned%></strong></pre>';
}
}
);
@@ -70,20 +70,20 @@
<% for z in interfaceNames:gmatch("[^ ]+") do -%><option value="<%=z%>"><%=z%></option><%- end %>
</select>
<div id="buttoncss">
- <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway')" />
- <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip')" />
- <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null)" />
- <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null)" />
- <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup')" />
- <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown')" />
+ <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway', null)" />
+ <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip', null)" />
+ <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null, null)" />
+ <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null, null)" />
+ <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup', null)" />
+ <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown', null)" />
</div>
</fieldset>
<fieldset id="diag_select" class="cbi-section">
<legend><%:MWAN Service Control%></legend>
<div id="buttoncss">
- <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart')" />
- <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop')" />
- <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start')" />
+ <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart', '<%:restart%>')" />
+ <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop', '<%:stop%>')" />
+ <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start', '<%:start%>')" />
</div>
</fieldset>
<fieldset class="cbi-section" style="display:none">
@@ -93,20 +93,6 @@
</div>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin-left: 30px;
- padding-right: 30px;
- width: auto;
- }
- #mwan_diagnostics {
- background-color: #FFFFFF;
- border: 1px dotted #555555;
- padding: 20px;
- }
- #diag_select {
- padding: 12px 20px 20px 20px;
- }
#mwaniface {
float: left;
margin: 8px 20px 0px 0px;
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm
index 4c2a0dc208..10b4f10558 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm
@@ -8,17 +8,7 @@
</ul>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin: 0px 0px 0px 30px;
- padding-right: 30px;
- width: auto;
- }
- .cbi-section-node {
- margin-top: 20px;
- }
.cbi-section {
- border: 1px dotted #555555;
padding: 20px;
}
</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm
index fba3fa6940..20ae6036fc 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm
@@ -8,17 +8,7 @@
</ul>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin: 0px 0px 0px 30px;
- padding-right: 30px;
- width: auto;
- }
- .cbi-section-node {
- margin-top: 20px;
- }
.cbi-section {
- border: 1px dotted #555555;
padding: 20px;
}
</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm
index cf90112078..bed43107c0 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm
@@ -8,17 +8,7 @@
</ul>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin: 0px 0px 0px 30px;
- padding-right: 30px;
- width: auto;
- }
- .cbi-section-node {
- margin-top: 20px;
- }
.cbi-section {
- border: 1px dotted #555555;
padding: 20px;
}
</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm
index 0a12496899..4174ef4b21 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm
@@ -37,7 +37,7 @@
}
else
{
- tshoot.innerHTML = '<strong>Error collecting troubleshooting information</strong>';
+ tshoot.innerHTML = '<strong><%:Error collecting troubleshooting information%></strong>';
}
}
);
@@ -46,22 +46,11 @@
<div id="troubleshoot">
<fieldset class="cbi-section">
<legend><%:Troubleshooting Data%></legend>
- <div id="troubleshoot_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div>
+ <div id="troubleshoot_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
</fieldset>
</div>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin-left: 30px;
- padding-right: 30px;
- width: auto;
- }
- #troubleshoot {
- background-color: #FFFFFF;
- border: 1px dotted #555555;
- padding: 20px;
- }
#troubleshoot_text {
padding: 20px;
text-align: left;
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm
index 5077674185..bb18d53493 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm
@@ -8,17 +8,7 @@
</ul>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin: 0px 0px 0px 30px;
- padding-right: 30px;
- width: auto;
- }
- .cbi-section-node {
- margin-top: 20px;
- }
.cbi-section {
- border: 1px dotted #555555;
padding: 20px;
}
</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm b/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm
index 99da4875b0..5d91c536eb 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm
@@ -1,10 +1,4 @@
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin-left: 30px;
- padding-right: 30px;
- width: auto;
- }
table td { /* cells showing the configuration values */
padding: 0px;
text-align: center;
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm b/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm
index 9329b92735..7cef0630ee 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm
@@ -13,19 +13,19 @@
switch (mArray.wans[i].status)
{
case 'online':
- stat = 'Online (tracking active)';
+ stat = '<%:Online (tracking active)%>';
cssc = 'wanon';
break;
case 'notMonitored':
- stat = 'Online (tracking off)';
+ stat = '<%:Online (tracking off)%>';
cssc = 'wanon';
break;
case 'offline':
- stat = 'Offline';
+ stat = '<%:Offline%>';
cssc = 'wanoff';
break;
case 'notEnabled':
- stat = 'Disabled';
+ stat = '<%:Disabled%>';
cssc = 'wanoff';
break;
}
@@ -38,7 +38,7 @@
}
else
{
- status.innerHTML = '<strong>No MWAN interfaces found</strong>';
+ status.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
}
}
);
@@ -46,16 +46,13 @@
<fieldset id="interface_field" class="cbi-section">
<legend><%:MWAN Interface Live Status%></legend>
- <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div>
+ <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
</fieldset>
<style type="text/css">
.container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
max-width: 1044px;
}
- #interface_field {
- padding: 12px 20px 20px 20px;
- }
#mwan_status_text {
display: table;
font-size: 14px;
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm
index b80b9f3acf..6a800c3f98 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm
@@ -17,7 +17,7 @@
}
else
{
- status.innerHTML = '<strong>No detailed status information available</strong>';
+ status.innerHTML = '<strong><%:No detailed status information available%></strong>';
}
}
);
@@ -26,22 +26,11 @@
<div id="mwan_detail_status">
<fieldset class="cbi-section">
<legend><%:MWAN Detailed Status%></legend>
- <div id="mwan_detail_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div>
+ <div id="mwan_detail_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
</fieldset>
</div>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin-left: 30px;
- padding-right: 30px;
- width: auto;
- }
- #mwan_detail_status {
- border: 1px dotted #555555;
- background-color: #FFFFFF;
- padding: 20px;
- }
#mwan_detail_text {
padding: 20px;
text-align: left;
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm
index 472c7ce7fc..2929a6df60 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm
@@ -21,19 +21,19 @@
switch (mArray.wans[i].status)
{
case 'online':
- status = 'Online (tracking active)';
+ status = '<%:Online (tracking active)%>';
css = 'wanon';
break;
case 'notMonitored':
- status = 'Online (tracking off)';
+ status = '<%:Online (tracking off)%>';
css = 'wanon';
break;
case 'offline':
- status = 'Offline';
+ status = '<%:Offline%>';
css = 'wanoff';
break;
case 'notEnabled':
- status = 'Disabled';
+ status = '<%:Disabled%>';
css = 'wanoff';
break;
}
@@ -46,18 +46,18 @@
}
else
{
- statusDiv.innerHTML = '<strong>No MWAN interfaces found</strong>';
+ statusDiv.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
}
var logs = document.getElementById('mwan_statuslog_text');
if (mArray.mwanlog)
{
- var mwanLog = 'Last 50 MWAN systemlog entries. Newest entries sorted at the top :';
+ var mwanLog = '<%:Last 50 MWAN systemlog entries. Newest entries sorted at the top :%>';
logs.innerHTML = String.format('<pre>%s<br /><br />%s</pre>', mwanLog, mArray.mwanlog[0]);
}
else
{
- logs.innerHTML = '<strong>No MWAN systemlog history found</strong>';
+ logs.innerHTML = '<strong><%:No MWAN systemlog history found%></strong>';
}
}
);
@@ -66,29 +66,15 @@
<div id="mwan_interface_status">
<fieldset id="interface_field" class="cbi-section">
<legend><%:MWAN Interface Live Status%></legend>
- <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div>
+ <div id="mwan_status_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
</fieldset>
<fieldset class="cbi-section">
<legend><%:MWAN Interface Systemlog%></legend>
- <div id="mwan_statuslog_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> Collecting data...</div>
+ <div id="mwan_statuslog_text"><img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /><%:Collecting data...%></div>
</fieldset>
</div>
<style type="text/css">
- .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
- max-width: none;
- margin-left: 30px;
- padding-right: 30px;
- width: auto;
- }
- #mwan_interface_status {
- background-color: #FFFFFF;
- border: 1px dotted #555555;
- padding: 20px;
- }
- #interface_field {
- padding: 12px 20px 20px 20px;
- }
#mwan_status_text {
display: table;
font-size: 14px;
diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po
index cae45b8a2f..f6a70c3561 100644
--- a/applications/luci-app-mwan3/po/ja/mwan3.po
+++ b/applications/luci-app-mwan3/po/ja/mwan3.po
@@ -7,7 +7,7 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0\n"
+"X-Generator: Poedit 2.0.3\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ja\n"
@@ -46,6 +46,9 @@ msgstr "IP ルールのチェック"
msgid "Check routing table"
msgstr "ルーティング テーブルのチェック"
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
msgid "Configuration"
msgstr "設定"
@@ -73,6 +76,9 @@ msgstr "診断結果"
msgid "Diagnostics"
msgstr "診断機能"
+msgid "Disabled"
+msgstr "無効"
+
msgid ""
"Downed interface will be deemed up after this many successful ping tests"
msgstr ""
@@ -82,6 +88,9 @@ msgstr ""
msgid "Enabled"
msgstr "有効"
+msgid "Error collecting troubleshooting information"
+msgstr "トラブルシューティング情報の収集エラー"
+
msgid "Errors"
msgstr "エラー"
@@ -135,6 +144,9 @@ msgstr "インターフェース"
msgid "Internet Protocol"
msgstr "インターネット プロトコル"
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr "直近の MWAN システムログ(50行)です。一番上が最新の行です:"
+
msgid "Last resort"
msgstr "最終手段"
@@ -209,6 +221,9 @@ msgstr ""
"単一または複数のポート(例: \"22\" または \"80,443\")、あるいはポートの範囲"
"(例: \"1024:2048\")を、クオーテーション無しで指定することができます。"
+msgid "Member"
+msgstr "メンバー"
+
msgid "Member used"
msgstr "使用されるメンバー"
@@ -244,6 +259,30 @@ msgstr "ネットワーク設定"
msgid "No"
msgstr "いいえ"
+msgid "No MWAN interfaces found"
+msgstr "MWAN インターフェースが見つかりません"
+
+msgid "No MWAN systemlog history found"
+msgstr "MWAN システムログの履歴が見つかりません"
+
+msgid "No detailed status information available"
+msgstr "詳細ステータス情報は利用できません"
+
+msgid "No diagnostic results returned"
+msgstr "診断結果がありません"
+
+msgid "No protocol specified"
+msgstr "プロトコルが設定されていません"
+
+msgid "Offline"
+msgstr "オフライン"
+
+msgid "Online (tracking active)"
+msgstr "オンライン(追跡実行中)"
+
+msgid "Online (tracking off)"
+msgstr "オンライン(追跡オフ)"
+
msgid "Overview"
msgstr "概要"
@@ -292,6 +331,9 @@ msgstr ""
"ん。また、15文字以内でなければなりません。<br />ポリシーでは、設定済みのイン"
"ターフェースやメンバー、ルールと同じ名前を使用することはできません。"
+msgid "Policy"
+msgstr "ポリシー"
+
msgid "Policy assigned"
msgstr "アサイン済みポリシー"
@@ -310,6 +352,9 @@ msgstr "デフォルトのホットプラグ スクリプトの復元"
msgid "Restore..."
msgstr "復元..."
+msgid "Rule"
+msgstr "ルール"
+
msgid "Rules"
msgstr "ルール"
@@ -362,16 +407,17 @@ msgid "There are currently %d of 250 supported interfaces configured"
msgstr "現在、250個中 %d 個のサポートされたインターフェースが設定済みです。"
msgid ""
-"This IP address will be pinged to dermine if the link is up or down. Leave "
-"blank to assume interface is always online"
+"This displays the metric assigned to this interface in /etc/config/network"
msgstr ""
-"これらは、リンクの Up または Down を判定するために Ping が送信されるIP アドレ"
-"スです。常にオンラインとする場合、空欄のままにします。"
+"/etc/config/network で、このインターフェースに割り当てられたメトリックです。"
msgid ""
-"This displays the metric assigned to this interface in /etc/config/network"
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
msgstr ""
-"/etc/config/network で、このインターフェースに割り当てられたメトリックです。"
+"リンクの Up または Down 状態を判定するために、このホスト名または IP アドレス"
+"に対して Ping の送信が行われます。常にオンラインとする場合、空欄のままにしま"
+"す。"
msgid "This section allows you to modify the contents of /etc/config/mwan3"
msgstr ""
@@ -408,6 +454,9 @@ msgstr ""
msgid "Tracking IP"
msgstr "追跡 IP"
+msgid "Tracking hostname or IP address"
+msgstr "追跡ホスト名または IP アドレス"
+
msgid "Tracking reliability"
msgstr "追跡の信頼性"
@@ -525,6 +574,12 @@ msgstr ""
"警告: このルールは不適切なプロトコルが指定されているか、または何も指定されて"
"いません!プロトコルを指定し直してください!"
+msgid "Waiting for MWAN to %s..."
+msgstr "MWAN の %s を待っています..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "診断結果を待っています..."
+
msgid "Weight"
msgstr "ウエイト"
@@ -558,5 +613,21 @@ msgstr "ifup"
msgid "never"
msgstr "never"
+msgid "restart"
+msgstr "再起動"
+
+msgid "start"
+msgstr "起動"
+
+msgid "stop"
+msgstr "停止"
+
msgid "unreachable (reject)"
msgstr "unreachable (reject)"
+
+#~ msgid ""
+#~ "This IP address will be pinged to dermine if the link is up or down. "
+#~ "Leave blank to assume interface is always online"
+#~ msgstr ""
+#~ "これらは、リンクの Up または Down を判定するために Ping が送信されるIP ア"
+#~ "ドレスです。常にオンラインとする場合、空欄のままにします。"
diff --git a/applications/luci-app-mwan3/po/templates/mwan3.pot b/applications/luci-app-mwan3/po/templates/mwan3.pot
index 0bda248fae..3d25e844ac 100644
--- a/applications/luci-app-mwan3/po/templates/mwan3.pot
+++ b/applications/luci-app-mwan3/po/templates/mwan3.pot
@@ -33,6 +33,9 @@ msgstr ""
msgid "Check routing table"
msgstr ""
+msgid "Collecting data..."
+msgstr ""
+
msgid "Configuration"
msgstr ""
@@ -60,6 +63,9 @@ msgstr ""
msgid "Diagnostics"
msgstr ""
+msgid "Disabled"
+msgstr ""
+
msgid ""
"Downed interface will be deemed up after this many successful ping tests"
msgstr ""
@@ -67,6 +73,9 @@ msgstr ""
msgid "Enabled"
msgstr ""
+msgid "Error collecting troubleshooting information"
+msgstr ""
+
msgid "Errors"
msgstr ""
@@ -118,6 +127,9 @@ msgstr ""
msgid "Internet Protocol"
msgstr ""
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr ""
+
msgid "Last resort"
msgstr ""
@@ -183,6 +195,9 @@ msgid ""
"as a portrange (eg \"1024:2048\") without quotes"
msgstr ""
+msgid "Member"
+msgstr ""
+
msgid "Member used"
msgstr ""
@@ -212,6 +227,30 @@ msgstr ""
msgid "No"
msgstr ""
+msgid "No MWAN interfaces found"
+msgstr ""
+
+msgid "No MWAN systemlog history found"
+msgstr ""
+
+msgid "No detailed status information available"
+msgstr ""
+
+msgid "No diagnostic results returned"
+msgstr ""
+
+msgid "No protocol specified"
+msgstr ""
+
+msgid "Offline"
+msgstr ""
+
+msgid "Online (tracking active)"
+msgstr ""
+
+msgid "Online (tracking off)"
+msgstr ""
+
msgid "Overview"
msgstr ""
@@ -252,6 +291,9 @@ msgid ""
"configured interfaces, members or rules"
msgstr ""
+msgid "Policy"
+msgstr ""
+
msgid "Policy assigned"
msgstr ""
@@ -270,6 +312,9 @@ msgstr ""
msgid "Restore..."
msgstr ""
+msgid "Rule"
+msgstr ""
+
msgid "Rules"
msgstr ""
@@ -312,12 +357,12 @@ msgid "There are currently %d of 250 supported interfaces configured"
msgstr ""
msgid ""
-"This IP address will be pinged to dermine if the link is up or down. Leave "
-"blank to assume interface is always online"
+"This displays the metric assigned to this interface in /etc/config/network"
msgstr ""
msgid ""
-"This displays the metric assigned to this interface in /etc/config/network"
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
msgstr ""
msgid "This section allows you to modify the contents of /etc/config/mwan3"
@@ -343,6 +388,9 @@ msgstr ""
msgid "Tracking IP"
msgstr ""
+msgid "Tracking hostname or IP address"
+msgstr ""
+
msgid "Tracking reliability"
msgstr ""
@@ -429,6 +477,12 @@ msgid ""
"specified! Please configure a specific protocol!"
msgstr ""
+msgid "Waiting for MWAN to %s..."
+msgstr ""
+
+msgid "Waiting for diagnostic results..."
+msgstr ""
+
msgid "Weight"
msgstr ""
@@ -460,5 +514,14 @@ msgstr ""
msgid "never"
msgstr ""
+msgid "restart"
+msgstr ""
+
+msgid "start"
+msgstr ""
+
+msgid "stop"
+msgstr ""
+
msgid "unreachable (reject)"
msgstr ""
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
index b8948b3163..1e0f34f088 100644
--- a/applications/luci-app-mwan3/po/zh-cn/mwan3.po
+++ b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
@@ -1,17 +1,7 @@
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Language-Team: \n"
"Last-Translator: Hsing-Wang Liao <kuoruan@gmail.com>\n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0\n"
-"Last-Translator: \n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"Language: zh_CN\n"
msgid "%d hour"
msgstr "%d 小时"
@@ -32,20 +22,23 @@ msgid ""
"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
"the link to be deemed up"
msgstr ""
-"接受的值: 1-100。这个设置项指定了当多少个IP地址能够连通时接口会被认为在线"
+"取值范围: 1-100。这个设置项指定了当多少个 IP 地址能够连通时接口会被认为在线"
msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
-msgstr "接受的值: 1-100。如果不填写,默认值为 1"
+msgstr "取值范围: 1-100。如果不填写,默认值为 1"
msgid "Advanced"
msgstr "高级"
msgid "Check IP rules"
-msgstr "检查IP规则"
+msgstr "检查 IP 规则"
msgid "Check routing table"
msgstr "检查路由表"
+msgid "Collecting data..."
+msgstr "正在收集数据..."
+
msgid "Configuration"
msgstr "配置"
@@ -73,6 +66,9 @@ msgstr "诊断结果"
msgid "Diagnostics"
msgstr "诊断"
+msgid "Disabled"
+msgstr "禁用"
+
msgid ""
"Downed interface will be deemed up after this many successful ping tests"
msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接口将会重新上线"
@@ -80,6 +76,9 @@ msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接
msgid "Enabled"
msgstr "启用"
+msgid "Error collecting troubleshooting information"
+msgstr "收集故障排除信息时出错"
+
msgid "Errors"
msgstr "错误"
@@ -131,6 +130,9 @@ msgstr "接口"
msgid "Internet Protocol"
msgstr "互联网协议"
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr "最近 50 条 MWAN 系统日志,最新条目排在顶部:"
+
msgid "Last resort"
msgstr "备用成员"
@@ -192,15 +194,19 @@ msgid ""
msgstr ""
"MWAN 支持最多 250 个物理或逻辑接口。<br />MWAN 要求所有接口必须在 /etc/"
"config/network 中设定唯一的网关跃点。<br />名称必须与 /etc/config/network 中"
-"的接口名称匹配。(可查看“高级”选项卡)<br />名称允许包括A-Z、a-z、0-9、_ 但是不"
-"能有空格。<br />接口不应该与成员、策略、规则中的任意一个设置项使用相同的名称"
+"的接口名称匹配。(可查看“高级”选项卡)<br />名称允许包括A-Z、a-z、0-9、_ 但是"
+"不能有空格。<br />接口不应该与成员、策略、规则中的任意一个设置项使用相同的名"
+"称"
msgid ""
"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
"as a portrange (eg \"1024:2048\") without quotes"
msgstr ""
-"可以输入一个或多个端口 (例如 \"22\" 或者 \"80,443\") 或者是一个端口范围 (例"
-"如 \"1024:2048\") 不含引号"
+"可以输入一个或多个端口(例如 \"22\" 或者 \"80,443\")或者是一个端口范围(例"
+"如 \"1024:2048\")不含引号"
+
+msgid "Member"
+msgstr "成员"
msgid "Member used"
msgstr "使用的成员"
@@ -213,7 +219,7 @@ msgid ""
">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Members "
"may not share the same name as configured interfaces, policies or rules"
msgstr ""
-"“成员”用来设置每一个 MWAN 接口的跃点数 (即接口优先级) 和所占比重。<br />名称"
+"“成员”用来设置每一个 MWAN 接口的跃点数(即接口优先级)和所占比重。<br />名称"
"允许包括 A-Z、 a-、0-9、_ 但是不能有空格。<br />成员不应该与接口、策略、规则"
"中的任意一个设置项使用相同的名称"
@@ -236,6 +242,30 @@ msgstr "网络配置文件"
msgid "No"
msgstr "否"
+msgid "No MWAN interfaces found"
+msgstr "没有找到 MWAN 接口"
+
+msgid "No MWAN systemlog history found"
+msgstr "没有在系统日志中找到 MWAN 历史信息"
+
+msgid "No detailed status information available"
+msgstr "没有状态详细信息可用"
+
+msgid "No diagnostic results returned"
+msgstr "没有返回诊断结果"
+
+msgid "No protocol specified"
+msgstr "未指定协议"
+
+msgid "Offline"
+msgstr "离线"
+
+msgid "Online (tracking active)"
+msgstr "在线(追踪启用中)"
+
+msgid "Online (tracking off)"
+msgstr "在线(追踪已关闭)"
+
msgid "Overview"
msgstr "概况"
@@ -281,6 +311,9 @@ msgstr ""
"包括A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内<br />策略不应该"
"与接口、成员、规则中的任意一个设置项使用相同的名称"
+msgid "Policy"
+msgstr "策略"
+
msgid "Policy assigned"
msgstr "分配的策略"
@@ -299,6 +332,9 @@ msgstr "恢复默认的 hotplug 脚本"
msgid "Restore..."
msgstr "恢复..."
+msgid "Rule"
+msgstr "规则"
+
msgid "Rules"
msgstr "规则"
@@ -342,22 +378,20 @@ msgid "Stop MWAN"
msgstr "停止 MWAN"
msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
-msgstr "支持 CIDR 记法 (例如: \"192.168.100.0/24\") 不含引号"
+msgstr "支持 CIDR 记法(例如: \"192.168.100.0/24\")不含引号"
msgid "There are currently %d of 250 supported interfaces configured"
-msgstr ""
-
-msgid ""
-"This IP address will be pinged to dermine if the link is up or down. Leave "
-"blank to assume interface is always online"
-msgstr ""
-"MWAN 将会通过 Ping 这些 IP 地址来确定接口是否上线。如果留空,则 MWAN 认为该接"
-"口永远在线"
+msgstr "当前已配置 %d 个接口,最大支持 250 个"
msgid ""
"This displays the metric assigned to this interface in /etc/config/network"
msgstr "这里显示了这个接口在 /etc/config/network 中配置的跃点数"
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr "通过 ping 此主机或 IP 地址来确定链路是否在线。留空则认为接口始终在线"
+
msgid "This section allows you to modify the contents of /etc/config/mwan3"
msgstr "这里允许你修改 /etc/config/mwan3 的内容"
@@ -377,18 +411,21 @@ msgid ""
"$INTERFACE is the interface name (wan1, wan2, etc.)<br />$DEVICE is the "
"device name attached to the interface (eth0.1, eth1, etc.)"
msgstr ""
-"这里允许你修改/etc/hotplug.d/iface/16-mwancustom 的内容<br />这可以在接口 "
+"这里允许你修改 /etc/hotplug.d/iface/16-mwancustom 的内容<br />这可以在接口 "
"ifup 或 ifdown Hotplug 事件时运行系统命令或脚本<br /><br />注意:<br />脚本的"
"第一行必须是 &#34;#!/bin/sh&#34; 不含引号<br />以#开头的行是注释,不会执行"
-"<br /><br />可用变量:<br />$ACTION 是 Hotplug 事件 (ifup, ifdown)<br />"
-"$INTERFACE 是接口名称 (wan1、wan2 等)<br />$DEVICE 是连接到接口的设备名称 "
-"(eth0.1、eth1 等)"
+"<br /><br />可用变量:<br />$ACTION 是 Hotplug 事件(ifup, ifdown)<br />"
+"$INTERFACE 是接口名称(wan1、wan2 等)<br />$DEVICE 是连接到接口的设备名称 "
+"(eth0.1、eth1 等)"
msgid "Tracking IP"
-msgstr "跟踪的 IP"
+msgstr "追踪的 IP"
+
+msgid "Tracking hostname or IP address"
+msgstr "追踪的主机或 IP 地址"
msgid "Tracking reliability"
-msgstr "跟踪可靠性"
+msgstr "追踪可靠性"
msgid "Traffic Rules"
msgstr "流量规则"
@@ -410,70 +447,77 @@ msgid "View the contents of /etc/protocols for protocol descriptions"
msgstr "请查看 /etc/protocols 获取可选协议详情"
msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!"
-msgstr ""
+msgstr "警告: 已配置 %d 个接口,超过最大值 250!"
msgid ""
"WARNING: Some policies have names exceeding the maximum of 15 characters!"
-msgstr ""
+msgstr "警告: 某些策略的名称超过了 15 个字符!"
msgid ""
"WARNING: some interfaces are configured incorrectly or not at all in /etc/"
"config/network!"
-msgstr ""
+msgstr "警告: 某些接口配置不正确或未配置到 /etc/config/network!"
msgid ""
"WARNING: some interfaces have a higher reliability requirement than there "
"are tracking IP addresses!"
-msgstr ""
+msgstr "警告: 某些接口的追踪可靠性要求大于了追踪 IP 地址总数!"
msgid ""
"WARNING: some interfaces have duplicate metrics configured in /etc/config/"
"network!"
-msgstr ""
+msgstr "警告: 某些接口在 /etc/config/network 中配置了相同的跃点数!"
msgid ""
"WARNING: some interfaces have no default route in the main routing table!"
-msgstr ""
+msgstr "警告: 某些接口在主路由表中没有默认路由!"
msgid ""
"WARNING: some interfaces have no metric configured in /etc/config/network!"
-msgstr ""
+msgstr "警告: 某些接口没有在 /etc/config/network 中配置跃点数!"
msgid ""
"WARNING: some rules have a port configured with no or improper protocol "
"specified! Please configure a specific protocol!"
msgstr ""
+"警告: 某些规则指定了端口却没有配置或配置了不正确的协议,请重新指定协议!"
msgid ""
"WARNING: this and other interfaces have duplicate metrics configured in /etc/"
"config/network!"
-msgstr ""
+msgstr "警告: 此接口和其他接口在 /etc/config/network 中配置了相同的跃点数!"
msgid ""
"WARNING: this interface has a higher reliability requirement than there are "
"tracking IP addresses!"
-msgstr ""
+msgstr "警告: 此接口的追踪可靠性要求大于了追踪 IP 地址总数!"
msgid "WARNING: this interface has no default route in the main routing table!"
-msgstr ""
+msgstr "警告: 此接口在主路由表中没有默认路由!"
msgid ""
"WARNING: this interface has no metric configured in /etc/config/network!"
-msgstr ""
+msgstr "警告: 此接口没有在 /etc/config/network 中配置跃点数!"
msgid ""
"WARNING: this interface is configured incorrectly or not at all in /etc/"
"config/network!"
-msgstr ""
+msgstr "警告: 此接口配置不正确或未配置到 /etc/config/network!"
msgid ""
"WARNING: this policy's name is %d characters exceeding the maximum of 15!"
-msgstr ""
+msgstr "警告: 此策略的名称具有 %d 个字符,超过了 15 个字符!"
msgid ""
"WARNING: this rule is incorrectly configured with no or improper protocol "
"specified! Please configure a specific protocol!"
-msgstr ""
+msgstr "警告: 此规则没有配置或配置了不正确的协议,请重新指定协议!"
+
+msgid "Waiting for MWAN to %s..."
+msgstr "等待 MWAN %s..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "等待诊断结果..."
msgid "Weight"
msgstr "比重"
@@ -492,10 +536,10 @@ msgid "always"
msgstr "总是"
msgid "blackhole (drop)"
-msgstr "黑洞 (丢弃)"
+msgstr "黑洞(丢弃)"
msgid "default (use main routing table)"
-msgstr "默认 (使用主路由表)"
+msgstr "默认(使用主路由表)"
msgid "ifdown"
msgstr "ifdown"
@@ -506,5 +550,14 @@ msgstr "ifup"
msgid "never"
msgstr "从不"
+msgid "restart"
+msgstr ""
+
+msgid "start"
+msgstr ""
+
+msgid "stop"
+msgstr ""
+
msgid "unreachable (reject)"
-msgstr "不可达 (拒绝)"
+msgstr "不可达(拒绝)"
diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile
index e174c807b8..486cf0ee74 100644
--- a/applications/luci-app-privoxy/Makefile
+++ b/applications/luci-app-privoxy/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2008-2015 The LuCI Team <luci@lists.subsignal.org>
+# Copyright (C) 2008-2017 The LuCI Team <luci@lists.subsignal.org>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
@@ -14,10 +14,10 @@ PKG_VERSION:=1.0.6
# Release == build
# increase on changes of translation files
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=Apache-2.0
-PKG_MAINTAINER:=Christian Schoenebeck <christian.schoenebeck@gmail.com>
+PKG_MAINTAINER:=
# LuCI specific settings
LUCI_TITLE:=LuCI Support for Privoxy WEB proxy
@@ -30,7 +30,6 @@ help
$(LUCI_TITLE)
.
Version: $(PKG_VERSION)-$(PKG_RELEASE)
- $(PKG_MAINTAINER)
endef
include ../../luci.mk
diff --git a/applications/luci-app-qos/Makefile b/applications/luci-app-qos/Makefile
index dd322a347a..fd12557453 100644
--- a/applications/luci-app-qos/Makefile
+++ b/applications/luci-app-qos/Makefile
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=Quality of Service configuration module
LUCI_DEPENDS:=+qos-scripts
+PKG_LICENSE:=Apache-2.0
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-shadowsocks-libev/Makefile b/applications/luci-app-shadowsocks-libev/Makefile
index 848a5c8317..d0923e07a4 100644
--- a/applications/luci-app-shadowsocks-libev/Makefile
+++ b/applications/luci-app-shadowsocks-libev/Makefile
@@ -1,14 +1,16 @@
#
-# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
+# Copyright (C) 2017 Yousong Zhou <yszhou4tech@gmail.com>
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
-LUCI_TITLE:=LuCI Support for Shadowsocks-libev
+LUCI_TITLE:=LuCI Support for shadowsocks-libev
LUCI_DEPENDS:=
+PKG_LICENSE:=Apache-2.0
+
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua
index ae968168f1..05d12e38b2 100644
--- a/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua
+++ b/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua
@@ -1,12 +1,33 @@
--- Copyright 2015 Jian Chang <aa65535@live.com>
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
-- Licensed to the public under the Apache License 2.0.
-
+--
module("luci.controller.shadowsocks-libev", package.seeall)
function index()
- if not nixio.fs.access("/etc/config/shadowsocks-libev") then
- return
- end
+ entry({"admin", "services", "shadowsocks-libev"},
+ alias("admin", "services", "shadowsocks-libev", "instances"),
+ _("Shadowsocks-libev"), 59)
+
+ entry({"admin", "services", "shadowsocks-libev", "instances"},
+ arcombine(cbi("shadowsocks-libev/instances"), cbi("shadowsocks-libev/instance-details")),
+ _("Local Instances"), 10).leaf = true
+
+ entry({"admin", "services", "shadowsocks-libev", "servers"},
+ cbi("shadowsocks-libev/servers"),
+ _("Remote Servers"), 20).leaf = true
+
+ entry({"admin", "services", "shadowsocks-libev", "rules"},
+ cbi("shadowsocks-libev/rules"),
+ _("Redir Rules"), 30).leaf = true
+
+ entry({"admin", "services", "shadowsocks-libev", "status"}, call("ss_status"), nil).leaf = true
+
+end
+
+function ss_status()
+ local ut = require "luci.util"
+ local rv = ut.ubus("service", "list", {name = "shadowsocks-libev"})["shadowsocks-libev"] or {_=0}
- entry({"admin", "services", "shadowsocks-libev"}, cbi("shadowsocks-libev"), _("ShadowSocks-libev"), 74).dependent = true
+ luci.http.prepare_content("application/json")
+ luci.http.write_json(rv)
end
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua
deleted file mode 100644
index 76435e2f14..0000000000
--- a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua
+++ /dev/null
@@ -1,156 +0,0 @@
--- Copyright 2015 Jian Chang <aa65535@live.com>
--- Licensed to the public under the Apache License 2.0.
-
-local m, s, o, e, a
-
-if luci.sys.call("pidof ss-redir >/dev/null") == 0 then
- m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is running"))
-else
- m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is not running"))
-end
-
-e = {
- "table",
- "rc4",
- "rc4-md5",
- "aes-128-cfb",
- "aes-192-cfb",
- "aes-256-cfb",
- "bf-cfb",
- "camellia-128-cfb",
- "camellia-192-cfb",
- "camellia-256-cfb",
- "cast5-cfb",
- "des-cfb",
- "idea-cfb",
- "rc2-cfb",
- "seed-cfb",
- "salsa20",
- "chacha20",
-}
-
--- Global Setting
-s = m:section(TypedSection, "shadowsocks-libev", translate("Global Setting"))
-s.anonymous = true
-
-o = s:option(Flag, "enable", translate("Enable"))
-o.default = 1
-o.rmempty = false
-
-o = s:option(Value, "server", translate("Server Address"))
-o.datatype = "ipaddr"
-o.rmempty = false
-
-o = s:option(Value, "server_port", translate("Server Port"))
-o.datatype = "port"
-o.rmempty = false
-
-o = s:option(Value, "local_port", translate("Local Port"))
-o.datatype = "port"
-o.default = 1080
-o.rmempty = false
-
-o = s:option(Value, "timeout", translate("Connection Timeout"))
-o.datatype = "uinteger"
-o.default = 60
-o.rmempty = false
-
-o = s:option(Value, "password", translate("Password"))
-o.password = true
-o.rmempty = false
-
-o = s:option(ListValue, "encrypt_method", translate("Encrypt Method"))
-for i,v in ipairs(e) do
- o:value(v)
-end
-o.rmempty = false
-
-o = s:option(Value, "ignore_list", translate("Ignore List"))
-o:value("/dev/null", translate("Disabled"))
-o.default = "/dev/null"
-o.rmempty = false
-
--- UDP Relay
-s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Relay"))
-s.anonymous = true
-
-o = s:option(ListValue, "udp_mode", translate("Relay Mode"))
-o:value("0", translate("Disabled"))
-o:value("1", translate("Enabled"))
-o:value("2", translate("Custom"))
-o.default = 0
-o.rmempty = false
-
-o = s:option(Value, "udp_server", translate("Server Address"))
-o.datatype = "ipaddr"
-o:depends("udp_mode", 2)
-
-o = s:option(Value, "udp_server_port", translate("Server Port"))
-o.datatype = "port"
-o:depends("udp_mode", 2)
-
-o = s:option(Value, "udp_local_port", translate("Local Port"))
-o.datatype = "port"
-o.default = 1081
-o:depends("udp_mode", 2)
-
-o = s:option(Value, "udp_timeout", translate("Connection Timeout"))
-o.datatype = "uinteger"
-o.default = 60
-o:depends("udp_mode", 2)
-
-o = s:option(Value, "udp_password", translate("Password"))
-o.password = true
-o:depends("udp_mode", 2)
-
-o = s:option(ListValue, "udp_encrypt_method", translate("Encrypt Method"))
-for i,v in ipairs(e) do
- o:value(v)
-end
-o:depends("udp_mode", 2)
-
--- UDP Forward
-s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Forward"))
-s.anonymous = true
-
-o = s:option(Flag, "tunnel_enable", translate("Enable"))
-o.default = 1
-o.rmempty = false
-
-o = s:option(Value, "tunnel_port", translate("UDP Local Port"))
-o.datatype = "port"
-o.default = 5300
-
-o = s:option(Value, "tunnel_forward", translate("Forwarding Tunnel"))
-o.default = "8.8.4.4:53"
-
--- Access Control
-s = m:section(TypedSection, "shadowsocks-libev", translate("Access Control"))
-s.anonymous = true
-
-s:tab("lan_ac", translate("LAN"))
-
-o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("Access Control"))
-o:value("0", translate("Disabled"))
-o:value("1", translate("Allow listed only"))
-o:value("2", translate("Allow all except listed"))
-o.default = 0
-o.rmempty = false
-
-a = luci.sys.net.arptable() or {}
-
-o = s:taboption("lan_ac", DynamicList, "lan_ac_ip", translate("LAN IP List"))
-o.datatype = "ipaddr"
-for i,v in ipairs(a) do
- o:value(v["IP address"])
-end
-
-s:tab("wan_ac", translate("WAN"))
-
-o = s:taboption("wan_ac", DynamicList, "wan_bp_ip", translate("Bypassed IP"))
-o.datatype = "ip4addr"
-
-o = s:taboption("wan_ac", DynamicList, "wan_fw_ip", translate("Forwarded IP"))
-o.datatype = "ip4addr"
-
-return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
new file mode 100644
index 0000000000..d9a61d0bf7
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua
@@ -0,0 +1,49 @@
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local ds = require "luci.dispatcher"
+local ss = require "luci.model.shadowsocks-libev"
+
+local sname = arg[1]
+local redirect_url = ds.build_url("admin/services/shadowsocks-libev/instances")
+local s, o
+
+local m = Map("shadowsocks-libev")
+local sdata = m:get(sname)
+if not sdata then
+ luci.http.redirect(redirect_url)
+ return
+end
+local stype = sdata[".type"]
+m.redirect = redirect_url
+m.title = "shadowsocks-libev - %s - %s" % {stype, sname}
+
+
+s = m:section(NamedSection, sname, stype)
+s:tab("general", translate("General Settings"))
+s:tab("advanced", translate("Advanced Settings"))
+s:taboption("general", Flag, "disabled", translate("Disable"))
+ss.option_install_package(s, "general")
+
+if stype == "ss_server" then
+ ss.options_server(s, "general")
+ o = s:taboption("general", Value, "bind_address",
+ translate("Bind address"),
+ translate("The address ss-server will initiate connection from"))
+ o.datatype = "ipaddr"
+ o.placeholder = "0.0.0.0"
+ ss.values_ipaddr(o)
+ o = s:taboption("general", Value, "manager_address", translate("Manager address"))
+ o.datatype = "hostport"
+else
+ ss.options_client(s, "general")
+ if stype == "ss_tunnel" then
+ o = s:taboption("general", Value, "tunnel_address",
+ translate("Tunnel address"),
+ translate("The address ss-tunnel will forward traffic to"))
+ o.datatype = "hostport"
+ end
+end
+ss.options_common(s, "advanced")
+
+return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua
new file mode 100644
index 0000000000..62a90fb416
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua
@@ -0,0 +1,104 @@
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local ds = require "luci.dispatcher"
+local ss = require "luci.model.shadowsocks-libev"
+local ut = require "luci.util"
+local m, s, o
+
+m = Map("shadowsocks-libev",
+ translate("Local Instances"),
+ translate("Instances of shadowsocks-libev components, e.g. ss-local, \
+ ss-redir, ss-tunnel, ss-server, etc. To enable an instance it \
+ is required to enable both the instance itself and the remote \
+ server it refers to."))
+
+local instances = {}
+local cfgtypes = { "ss_local", "ss_redir", "ss_server", "ss_tunnel" }
+
+for sname, sdata in pairs(m:get()) do
+ local key, value = ss.cfgvalue_overview(sdata)
+ if key ~= nil then
+ instances[key] = value
+ end
+end
+
+s = m:section(Table, instances)
+s.addremove = true
+s.template_addremove = "shadowsocks-libev/add_instance"
+s.extedit = function(self, section)
+ local value = instances[section]
+ if type(value) == "table" then
+ return ds.build_url(unpack(ds.context.requestpath),
+ "services/shadowsocks-libev/instances",
+ value[".name"])
+ end
+end
+s.parse = function(self, ...)
+ Table.parse(self, ...)
+
+ local crval = REMOVE_PREFIX .. self.config
+ local name = self.map:formvaluetable(crval)
+ for k,v in pairs(name) do
+ local value = instances[k]
+ local sname = value[".name"]
+ if type(value) == "table" then
+ m:del(sname)
+ instances[k] = nil
+ for _, oname in ipairs({"redir_tcp", "redir_udp"}) do
+ local ovalue = m:get("ss_rules", oname)
+ if ovalue == sname then
+ m:del("ss_rules", oname)
+ end
+ end
+ end
+ end
+
+ local stype = m:formvalue("_newinst.type")
+ local sname = m:formvalue("_newinst.name")
+ if ut.contains(cfgtypes, stype) then
+ local created
+ if sname and #sname > 0 then
+ created = m:set(sname, nil, stype)
+ else
+ created = m:add(stype)
+ sname = created
+ end
+ if created then
+ m.uci:save("shadowsocks-libev")
+ luci.http.redirect(ds.build_url(
+ "admin/services/shadowsocks-libev/instances", sname
+ ))
+ end
+ end
+end
+
+o = s:option(DummyValue, "name", translate("Name"))
+o.rawhtml = true
+o = s:option(DummyValue, "overview", translate("Overview"))
+o.rawhtml = true
+
+s:option(DummyValue, "running", translate("Running"))
+
+o = s:option(Button, "disabled", translate("Enable/Disable"))
+o.render = function(self, section, scope)
+ if instances[section].disabled then
+ self.title = translate("Disabled")
+ self.inputstyle = "reset"
+ else
+ self.title = translate("Enabled")
+ self.inputstyle = "save"
+ end
+ Button.render(self, section, scope)
+end
+o.write = function(self, section)
+ local sdata = instances[section]
+ if type(sdata) == "table" then
+ local sname = sdata[".name"]
+ local disabled = not sdata["disabled"]
+ sdata["disabled"] = disabled
+ m:set(sname, "disabled", tostring(disabled))
+ end
+end
+
+return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
new file mode 100644
index 0000000000..fe5f9c31b8
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua
@@ -0,0 +1,73 @@
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local ss = require("luci.model.shadowsocks-libev")
+
+local m, s, o
+
+m = Map("shadowsocks-libev",
+ translate("Redir Rules"),
+ translate("On this page you can configure how traffics are to be \
+ forwarded to ss-redir instances. \
+ If enabled, packets will first have their source ip addresses checked \
+ against <em>Src ip bypass</em>, <em>Src ip forward</em>, \
+ <em>Src ip checkdst</em> and if none matches <em>Src default</em> \
+ will give the default action to be taken. \
+ If the prior check results in action <em>checkdst</em>, packets will continue \
+ to have their destination addresses checked."))
+
+
+s = m:section(NamedSection, "ss_rules", "ss-rules")
+s:tab("general", translate("General Settings"))
+s:tab("srcip", translate("Source Settings"))
+s:tab("dstip", translate("Destination Settings"))
+
+s:taboption('general', Flag, "disabled", translate("Disable"))
+ss.option_install_package(s, 'general')
+
+o = s:taboption('general', ListValue, "redir_tcp",
+ translate("ss-redir for TCP"))
+ss.values_redir(o, 'tcp')
+o = s:taboption('general', ListValue, "redir_udp",
+ translate("ss-redir for UDP"))
+ss.values_redir(o, 'udp')
+
+o = s:taboption('general', ListValue, "local_default",
+ translate("Local-out default"),
+ translate("Default action for locally generated packets"))
+ss.values_actions(o)
+s:taboption('general', Value, "ipt_args",
+ translate("Extra arguments"),
+ translate("Passes additional arguments to iptables. Use with care!"))
+
+s:taboption('srcip', DynamicList, "src_ips_bypass",
+ translate("Src ip bypass"),
+ translate("Bypass redir action for packets with source addresses in this list"))
+s:taboption('srcip', DynamicList, "src_ips_forward",
+ translate("Src ip forward"),
+ translate("Go through redir action for packets with source addresses in this list"))
+s:taboption('srcip', DynamicList, "src_ips_checkdst",
+ translate("Src ip checkdst"),
+ translate("Continue to have dst address checked for packets with source addresses in this list"))
+o = s:taboption('srcip', ListValue, "src_default",
+ translate("Src default"),
+ translate("Default action for packets whose source addresses do not match any of the source ip list"))
+ss.values_actions(o)
+
+s:taboption('dstip', DynamicList, "dst_ips_bypass",
+ translate("Dst ip bypass"),
+ translate("Bypass redir action for packets with destination addresses in this list"))
+s:taboption('dstip', DynamicList, "dst_ips_forward",
+ translate("Dst ip forward"),
+ translate("Go through redir action for packets with destination addresses in this list"))
+
+o = s:taboption('dstip', FileBrowser, "dst_ips_bypass_file",
+ translate("Dst ip bypass file"),
+ translate("File containing ip addresses for the purposes as with <em>Dst ip bypass</em>"))
+o.datatype = "file"
+s:taboption('dstip', FileBrowser, "dst_ips_forward_file",
+ translate("Dst ip forward file"),
+ translate("File containing ip addresses for the purposes as with <em>Dst ip forward</em>"))
+o.datatype = "file"
+
+return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua
new file mode 100644
index 0000000000..71c66562e1
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua
@@ -0,0 +1,31 @@
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local ds = require "luci.dispatcher"
+local ss = require("luci.model.shadowsocks-libev")
+
+local m, s
+
+m = Map("shadowsocks-libev",
+ translate("Remote Servers"),
+ translate("Definition of remote shadowsocks servers. \
+ Disable any of them will also disable instances refering to it."))
+
+local sname = arg[1]
+if sname then
+ if not m:get(sname) then
+ luci.http.redirect(ds.build_url("admin/services/shadowsocks-libev/servers"))
+ return
+ end
+ s = m:section(NamedSection, sname, "server")
+ m.title = m.title .. ' - ' .. sname
+else
+ s = m:section(TypedSection, "server")
+ s.template = 'cbi/tblsection'
+ s.addremove = true
+end
+
+s:option(Flag, "disabled", translate("Disable"))
+ss.options_server(s)
+
+return m
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
new file mode 100644
index 0000000000..2753f458b5
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua
@@ -0,0 +1,253 @@
+-- Copyright 2017 Yousong Zhou <yszhou4tech@gmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local _up = getfenv(3)
+local ut = require("luci.util")
+local ds = require("luci.dispatcher")
+local nw = require("luci.model.network")
+nw.init()
+module("luci.model.shadowsocks-libev", function(m)
+ setmetatable(m, {__index=function (self, k)
+ local tb = _up
+ return rawget(self, k) or _up[k]
+ end})
+end)
+
+function values_actions(o)
+ for _, a in ipairs(actions) do
+ o:value(a)
+ end
+end
+
+function values_redir(o, xmode)
+ o.map.uci.foreach("shadowsocks-libev", "ss_redir", function(sdata)
+ local sname = sdata[".name"]
+ local mode = sdata["mode"]
+ if mode and mode:find(xmode) then
+ local desc = "%s - %s" % {sname, mode}
+ o:value(sname, desc)
+ end
+ end)
+end
+
+function values_serverlist(o)
+ o.map.uci.foreach("shadowsocks-libev", "server", function(sdata)
+ local sname = sdata[".name"]
+ local server = sdata["server"]
+ local server_port = sdata["server_port"]
+ if server and server_port then
+ local desc = "%s - %s:%s" % {sname, sdata["server"], sdata["server_port"]}
+ o:value(sname, desc)
+ end
+ end)
+end
+
+function values_ipaddr(o)
+ local keys, vals = {}, {}
+ for _, v in ipairs(nw:get_interfaces()) do
+ for _, a in ipairs(v:ipaddrs()) do
+ o:value(a:host():string(), '%s (%s)' %{ a:host(), v:shortname() })
+ end
+ end
+end
+
+function options_client(s, tab)
+ local o
+
+ o = s:taboption(tab, ListValue, "server", translate("Remote server"))
+ values_serverlist(o)
+ o = s:taboption(tab, Value, "local_address", translate("Local address"))
+ o.datatype = "ipaddr"
+ o.placeholder = "0.0.0.0"
+ values_ipaddr(o)
+ o = s:taboption(tab, Value, "local_port", translate("Local port"))
+ o.datatype = "port"
+end
+
+function options_server(s, tab)
+ local o
+ local optfunc
+
+ if tab == nil then
+ optfunc = function(...) return s:option(...) end
+ else
+ optfunc = function(...) return s:taboption(tab, ...) end
+ end
+
+ o = optfunc(Value, "server", translate("Server"))
+ o.datatype = "host"
+ o.size = 16
+ o = optfunc(Value, "server_port", translate("Server port"))
+ o.datatype = "port"
+ o.size = 5
+ o = optfunc(ListValue, "method", translate("Method"))
+ for _, m in ipairs(methods) do
+ o:value(m)
+ end
+ o = optfunc(Value, "key", translate("Key (base64 encoding)"))
+ o.datatype = "base64"
+ o.password = true
+ o.size = 12
+ o = optfunc(Value, "password", translate("Password"))
+ o.password = true
+ o.size = 12
+end
+
+function options_common(s, tab)
+ local o
+
+ o = s:taboption(tab, ListValue, "mode", translate("Mode of operation"))
+ for _, m in ipairs(modes) do
+ o:value(m)
+ end
+ o.default = "tcp_and_udp"
+ o = s:taboption(tab, Value, "mtu", translate("MTU"))
+ o.datatype = "uinteger"
+ o = s:taboption(tab, Value, "timeout", translate("Timeout (sec)"))
+ o.datatype = "uinteger"
+ s:taboption(tab, Value, "user", translate("Run as"))
+
+ s:taboption(tab, Flag, "verbose", translate("Verbose"))
+ s:taboption(tab, Flag, "fast_open", translate("Enable TCP Fast Open"))
+ s:taboption(tab, Flag, "reuse_port", translate("Enable SO_REUSEPORT"))
+end
+
+function ucival_to_bool(val)
+ return val == "true" or val == "1" or val == "yes" or val == "on"
+end
+
+function cfgvalue_overview(sdata)
+ local stype = sdata[".type"]
+ local lines = {}
+
+ if stype == "ss_server" then
+ cfgvalue_overview_(sdata, lines, names_options_server)
+ cfgvalue_overview_(sdata, lines, names_options_common)
+ cfgvalue_overview_(sdata, lines, {
+ "bind_address",
+ "manager_address",
+ })
+ elseif stype == "ss_local" or stype == "ss_redir" or stype == "ss_tunnel" then
+ cfgvalue_overview_(sdata, lines, names_options_client)
+ if stype == "ss_tunnel" then
+ cfgvalue_overview_(sdata, lines, {"tunnel_address"})
+ end
+ cfgvalue_overview_(sdata, lines, names_options_common)
+ else
+ return nil, nil
+ end
+ local sname = sdata[".name"]
+ local key = "%s.%s" % {stype, sname}
+ local value = {
+ [".name"] = sname,
+ name = '%s.<var>%s</var>' % {stype, sname},
+ overview = table.concat(lines, "</br>"),
+ disabled = ucival_to_bool(sdata["disabled"]),
+ }
+ return key, value
+end
+
+function cfgvalue_overview_(sdata, lines, names)
+ local line
+
+ for _, n in ipairs(names) do
+ local v = sdata[n]
+ if v ~= nil then
+ local fv = "<var>%s</var>" % ut.pcdata(v)
+ if sdata[".type"] ~= "ss_server" and n == "server" then
+ fv = '<a class="label" href="%s">%s</a>' % {
+ ds.build_url("admin/services/shadowsocks-libev/servers", v), fv}
+ end
+ line = n .. ": " .. fv
+ table.insert(lines, line)
+ end
+ end
+end
+
+function option_install_package(s, tab)
+ local bin = s.sectiontype:gsub("_", "-", 1)
+ local installed = nixio.fs.access("/usr/bin/" .. bin)
+ if installed then
+ return
+ end
+ local opkg_package = "shadowsocks-libev-" .. bin
+ local p_install
+ if tab then
+ p_install = s:taboption(tab, Button, "_install")
+ else
+ p_install = s:option(Button, "_install")
+ end
+ p_install.title = translate("Package is not installed")
+ p_install.inputtitle = translate("Install package %q" % opkg_package)
+ p_install.inputstyle = "apply"
+
+ function p_install.write()
+ return luci.http.redirect(
+ luci.dispatcher.build_url("admin/system/packages") ..
+ "?submit=1&install=%s" % opkg_package
+ )
+ end
+end
+
+names_options_server = {
+ "server",
+ "server_port",
+ "method",
+ "key",
+ "password",
+}
+
+names_options_client = {
+ "server",
+ "local_address",
+ "local_port",
+}
+
+names_options_common = {
+ "verbose",
+ "fast_open",
+ "reuse_port",
+ "mode",
+ "mtu",
+ "timeout",
+ "user",
+}
+
+modes = {
+ "tcp_only",
+ "tcp_and_udp",
+ "udp_only",
+}
+
+actions = {
+ "bypass",
+ "forward",
+ "checkdst",
+}
+
+methods = {
+ -- aead
+ "aes-128-gcm",
+ "aes-192-gcm",
+ "aes-256-gcm",
+ -- stream
+ "table",
+ "rc4",
+ "rc4-md5",
+ "aes-128-cfb",
+ "aes-192-cfb",
+ "aes-256-cfb",
+ "aes-128-ctr",
+ "aes-192-ctr",
+ "aes-256-ctr",
+ "bf-cfb",
+ "camellia-128-cfb",
+ "camellia-192-cfb",
+ "camellia-256-cfb",
+ "salsa20",
+ "chacha20",
+ "chacha20-ietf",
+ "aes-128-gcm",
+ "aes-192-gcm",
+ "aes-256-gcm",
+}
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm
new file mode 100644
index 0000000000..219d89b074
--- /dev/null
+++ b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm
@@ -0,0 +1,45 @@
+<div class="cbi-section-create cbi-tblsection-create">
+ <br />
+ <table class="cbi-section-table">
+ <tr class="cbi-section-table-row">
+ <td class="cbi-section-table-cell" style="width:140px">
+ <select class="cbi-input-select" id="_newinst.type" name="_newinst.type">
+ <option value="_dummy">-- instance type --</option>
+ <option value="ss_local">ss-local</option>
+ <option value="ss_tunnel">ss-tunnel</option>
+ <option value="ss_redir">ss-redir</option>
+ <option value="ss_server">ss-server</option>
+ </select>
+ </td>
+ <td class="cbi-section-table-cell" style="width:110px">
+ <input type="text" class="cbi-input-text" id="_newinst.name" name="_newinst.name" placeholder="<%:Name%>"/>
+ </td>
+ <td class="cbi-section-table-cell left">
+ <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>" value="<%:Add%>" />
+ </td>
+ </tr>
+ </table>
+</div>
+<script type="text/javascript">//<![CDATA[
+ XHR.poll(5, '<%=url('admin/services/shadowsocks-libev/status')%>', null,
+ function(x, st)
+ {
+ var names = [
+ <%-
+ for _, name in ipairs(self:cfgsections()) do
+ write("%q," % name)
+ end
+ -%>
+ ];
+ var instances = st["instances"] || {};
+ for (var i = 0, len = names.length; i < len; i++) {
+ var name = names[i];
+ var el = document.getElementById('cbi-table-' + name + '-running');
+ if (el) {
+ var running = instances.hasOwnProperty(name)? instances[name].running : false;
+ el.innerText = running ? 'yes' : 'no';
+ }
+ }
+ }
+ );
+//]]></script>
diff --git a/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po
deleted file mode 100644
index f2b18e374c..0000000000
--- a/applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po
+++ /dev/null
@@ -1,97 +0,0 @@
-msgid ""
-msgstr ""
-"Content-Type: text/plain; charset=UTF-8\n"
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\n"
-"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"Language: pt_BR\n"
-
-msgid "Access Control"
-msgstr "Controle de Acesso"
-
-msgid "Allow all except listed"
-msgstr "Permitir todos, exceto os listados"
-
-msgid "Allow listed only"
-msgstr "Permitir somente os listados"
-
-msgid "Bypassed IP"
-msgstr "Endereços IP Ignorados"
-
-msgid "Connection Timeout"
-msgstr "Tempo limite de conexão"
-
-msgid "Custom"
-msgstr "Personalizado"
-
-msgid "Disabled"
-msgstr "Desabilitado"
-
-msgid "Enable"
-msgstr "Ativar"
-
-msgid "Enabled"
-msgstr "Ativado"
-
-msgid "Encrypt Method"
-msgstr "Método de Cifragem"
-
-msgid "Forwarded IP"
-msgstr "Endereço IP Encaminhado"
-
-msgid "Forwarding Tunnel"
-msgstr "Tunel para Encaminhamento"
-
-msgid "Global Setting"
-msgstr "Opções Globais"
-
-msgid "Ignore List"
-msgstr "Lista de Ignorados"
-
-msgid "LAN"
-msgstr "LAN"
-
-msgid "LAN IP List"
-msgstr "Lista de endereços IP da LAN"
-
-msgid "Local Port"
-msgstr "Porta Local"
-
-msgid "Password"
-msgstr "Senha"
-
-msgid "Relay Mode"
-msgstr "Modo de Retransmissor"
-
-msgid "Server Address"
-msgstr "Endereço do Servidor"
-
-msgid "Server Port"
-msgstr "Porta do servidor"
-
-msgid "ShadowSocks-libev"
-msgstr "ShadowSocks-libev"
-
-msgid "ShadowSocks-libev is not running"
-msgstr "O serviço ShadowSocks-libev está parado"
-
-msgid "ShadowSocks-libev is running"
-msgstr "O serviço ShadowSocks-libev está em execução."
-
-msgid "UDP Forward"
-msgstr "Encaminhamento UDP"
-
-msgid "UDP Local Port"
-msgstr "Porta Local UDP"
-
-msgid "UDP Relay"
-msgstr "Retransmissão UDP"
-
-msgid "WAN"
-msgstr "WAN"
diff --git a/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po
deleted file mode 100644
index b0cf6d3316..0000000000
--- a/applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po
+++ /dev/null
@@ -1,136 +0,0 @@
-msgid ""
-msgstr ""
-"Content-Type: text/plain; charset=UTF-8\n"
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: sv\n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Access Control"
-msgstr ""
-
-msgid "Allow all except listed"
-msgstr ""
-
-msgid "Allow listed only"
-msgstr ""
-
-msgid "Bypassed IP"
-msgstr ""
-
-msgid "Connection Timeout"
-msgstr ""
-
-msgid "Custom"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Enable"
-msgstr ""
-
-msgid "Enabled"
-msgstr ""
-
-msgid "Encrypt Method"
-msgstr ""
-
-msgid "Forwarded IP"
-msgstr ""
-
-msgid "Forwarding Tunnel"
-msgstr ""
-
-msgid "Global Setting"
-msgstr ""
-
-msgid "Ignore List"
-msgstr ""
-
-msgid "LAN"
-msgstr ""
-
-msgid "LAN IP List"
-msgstr ""
-
-msgid "Local Port"
-msgstr ""
-
-msgid "Password"
-msgstr ""
-
-msgid "Relay Mode"
-msgstr ""
-
-msgid "Server Address"
-msgstr ""
-
-msgid "Server Port"
-msgstr ""
-
-msgid "ShadowSocks-libev"
-msgstr ""
-
-msgid "ShadowSocks-libev is not running"
-msgstr ""
-
-msgid "ShadowSocks-libev is running"
-msgstr ""
-
-msgid "UDP Forward"
-msgstr ""
-
-msgid "UDP Local Port"
-msgstr ""
-
-msgid "UDP Relay"
-msgstr ""
-
-msgid "WAN"
-msgstr ""
-
-#~ msgid "Broadcast on all interfaces"
-#~ msgstr "Sänd i alla gränssnitt"
-
-#~ msgid "Choose the host to wake up or enter a custom MAC address to use"
-#~ msgstr ""
-#~ "Välj värden som ska väckas upp eller fyll i en anpassad MAC-adress att "
-#~ "använda"
-
-#~ msgid "Host to wake up"
-#~ msgstr "Värd som ska väckas upp"
-
-#~ msgid "Network interface to use"
-#~ msgstr "Nätverksgränssnitt som ska användas"
-
-#~ msgid ""
-#~ "Sometimes only one of the two tools works. If one fails, try the other one"
-#~ msgstr ""
-#~ "Ibland så fungerar bara en av de två verktygen. Prova med den andra om "
-#~ "den första misslyckades"
-
-#~ msgid "Specifies the interface the WoL packet is sent on"
-#~ msgstr "Anger gränssnittet som fjärrstartspaketet skickas med"
-
-#~ msgid "Starting WoL utility:"
-#~ msgstr "Startar hjälpprogrammet för fjärrstyrning av uppstart:"
-
-#~ msgid "Wake on LAN"
-#~ msgstr "Fjärrstyrning av uppstart"
-
-#~ msgid ""
-#~ "Wake on LAN is a mechanism to remotely boot computers in the local "
-#~ "network."
-#~ msgstr ""
-#~ "Fjärrstyrning av uppstart är en mekanism för att starta upp datorer via "
-#~ "fjärrstyrning i det lokala nätverket."
-
-#~ msgid "Wake up host"
-#~ msgstr "Väck upp värden"
-
-#~ msgid "WoL program"
-#~ msgstr "Program för fjärrstart"
diff --git a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot
deleted file mode 100644
index 81bbcb72f4..0000000000
--- a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot
+++ /dev/null
@@ -1,86 +0,0 @@
-msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
-
-msgid "Access Control"
-msgstr ""
-
-msgid "Allow all except listed"
-msgstr ""
-
-msgid "Allow listed only"
-msgstr ""
-
-msgid "Bypassed IP"
-msgstr ""
-
-msgid "Connection Timeout"
-msgstr ""
-
-msgid "Custom"
-msgstr ""
-
-msgid "Disabled"
-msgstr ""
-
-msgid "Enable"
-msgstr ""
-
-msgid "Enabled"
-msgstr ""
-
-msgid "Encrypt Method"
-msgstr ""
-
-msgid "Forwarded IP"
-msgstr ""
-
-msgid "Forwarding Tunnel"
-msgstr ""
-
-msgid "Global Setting"
-msgstr ""
-
-msgid "Ignore List"
-msgstr ""
-
-msgid "LAN"
-msgstr ""
-
-msgid "LAN IP List"
-msgstr ""
-
-msgid "Local Port"
-msgstr ""
-
-msgid "Password"
-msgstr ""
-
-msgid "Relay Mode"
-msgstr ""
-
-msgid "Server Address"
-msgstr ""
-
-msgid "Server Port"
-msgstr ""
-
-msgid "ShadowSocks-libev"
-msgstr ""
-
-msgid "ShadowSocks-libev is not running"
-msgstr ""
-
-msgid "ShadowSocks-libev is running"
-msgstr ""
-
-msgid "UDP Forward"
-msgstr ""
-
-msgid "UDP Local Port"
-msgstr ""
-
-msgid "UDP Relay"
-msgstr ""
-
-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
deleted file mode 100644
index f86eee7e9f..0000000000
--- a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po
+++ /dev/null
@@ -1,97 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-11-12 14:12+0800\n"
-"PO-Revision-Date: 2015-07-02 14:26+0800\n"
-"Last-Translator: Jian Chang <aa65535@live.com>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Access Control"
-msgstr "访问控制"
-
-msgid "Allow all except listed"
-msgstr "仅允许列表外"
-
-msgid "Allow listed only"
-msgstr "仅允许列表内"
-
-msgid "Bypassed IP"
-msgstr "被忽略的IP"
-
-msgid "Connection Timeout"
-msgstr "连接超时"
-
-msgid "Custom"
-msgstr "自定义"
-
-msgid "Disabled"
-msgstr "已禁用"
-
-msgid "Enable"
-msgstr "启用"
-
-msgid "Enabled"
-msgstr "已启用"
-
-msgid "Encrypt Method"
-msgstr "加密方式"
-
-msgid "Forwarded IP"
-msgstr "走代理的IP"
-
-msgid "Forwarding Tunnel"
-msgstr "UDP转发地址"
-
-msgid "Global Setting"
-msgstr "全局设置"
-
-msgid "Ignore List"
-msgstr "忽略列表"
-
-msgid "LAN"
-msgstr ""
-
-msgid "LAN IP List"
-msgstr "内网IP列表"
-
-msgid "Local Port"
-msgstr "本地端口"
-
-msgid "Password"
-msgstr "密码"
-
-msgid "Relay Mode"
-msgstr "中继模式"
-
-msgid "Server Address"
-msgstr "服务器地址"
-
-msgid "Server Port"
-msgstr "服务器端口"
-
-msgid "ShadowSocks-libev"
-msgstr "ShadowSocks-libev"
-
-msgid "ShadowSocks-libev is not running"
-msgstr "ShadowSocks-libev 未运行"
-
-msgid "ShadowSocks-libev is running"
-msgstr "ShadowSocks-libev 运行中"
-
-msgid "UDP Forward"
-msgstr "UDP转发"
-
-msgid "UDP Local Port"
-msgstr "UDP本地端口"
-
-msgid "UDP Relay"
-msgstr "UDP中继"
-
-msgid "WAN"
-msgstr ""
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 1bc0714de8..ec26f02d0d 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
@@ -23,6 +23,7 @@ function index()
s_general = _("General plugins"),
s_network = _("Network plugins"),
+ apcups = _("APC UPS"),
conntrack = _("Conntrack"),
contextswitch = _("Context Switches"),
cpu = _("Processor"),
@@ -59,8 +60,8 @@ function index()
-- our collectd menu
local collectd_menu = {
output = { "csv", "network", "rrdtool", "unixsock" },
- general = { "contextswitch", "cpu", "cpufreq", "df", "disk", "email",
- "entropy", "exec", "irq", "load", "memory",
+ general = { "apcups", "contextswitch", "cpu", "cpufreq", "df",
+ "disk", "email", "entropy", "exec", "irq", "load", "memory",
"nut", "processes", "sensors", "thermal", "uptime" },
network = { "conntrack", "dns", "interface", "iptables",
"netlink", "olsrd", "openvpn", "ping",
@@ -88,7 +89,7 @@ function index()
_entry(
{ "admin", "statistics", "collectd", section, plugin },
cbi("luci_statistics/" .. plugin ),
- labels[plugin], j * 10
+ labels[plugin] or plugin, j * 10
)
end
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua
new file mode 100644
index 0000000000..49e28c7cfd
--- /dev/null
+++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua
@@ -0,0 +1,28 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+m = Map("luci_statistics",
+ translate("APCUPS Plugin Configuration"),
+ translate(
+ "The APCUPS plugin collects statistics about the APC UPS."
+ ))
+
+-- collectd_apcups config section
+s = m:section( NamedSection, "collectd_apcups", "luci_statistics" )
+
+-- collectd_apcups.enable
+enable = s:option( Flag, "enable", translate("Enable this plugin") )
+enable.default = 0
+
+-- collectd_apcups.host (Host)
+host = s:option( Value, "Host", translate("Monitor host"), translate ("Add multiple hosts separated by space."))
+host.default = "localhost"
+host:depends( "enable", 1 )
+
+-- collectd_apcups.port (Port)
+port = s:option( Value, "Port", translate("Port for apcupsd communication") )
+port.isinteger = true
+port.default = 3551
+port:depends( "enable", 1 )
+
+return m
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua
index 4e00e7f1fc..e29a2e17d9 100644
--- a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua
+++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua
@@ -278,7 +278,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
-- create line1 statement
_tif( _args, "LINE%d:%s_%s#%s:%s",
- source.noarea and 2 or 1,
+ source.width or (source.noarea and 2 or 1),
source.sname, var, line_color, legend )
end
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua
new file mode 100644
index 0000000000..2a8aceec08
--- /dev/null
+++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua
@@ -0,0 +1,117 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.apcups",package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance, dtype )
+
+ local voltagesdc = {
+ title = "%H: Voltages on APC UPS - Battery",
+ vlabel = "Volts DC",
+ alt_autoscale = true,
+ number_format = "%5.1lfV",
+ data = {
+ instances = {
+ voltage = { "battery" }
+ },
+
+ options = {
+ voltage = { title = "Battery voltage", noarea=true }
+ }
+ }
+ }
+
+ local voltages = {
+ title = "%H: Voltages on APC UPS - AC",
+ vlabel = "Volts AC",
+ alt_autoscale = true,
+ number_format = "%5.1lfV",
+ data = {
+ instances = {
+ voltage = { "input", "output" }
+ },
+
+ options = {
+ voltage_output = { color = "00e000", title = "Output voltage", noarea=true, overlay=true },
+ voltage_input = { color = "ffb000", title = "Input voltage", noarea=true, overlay=true }
+ }
+ }
+ }
+
+ local percentload = {
+ title = "%H: Load on APC UPS ",
+ vlabel = "Percent",
+ y_min = "0",
+ y_max = "100",
+ number_format = "%5.1lf%%",
+ data = {
+ sources = {
+ percent_load = { "value" }
+ },
+ instances = {
+ percent = "load"
+ },
+ options = {
+ percent_load = { color = "00ff00", title = "Load level" }
+ }
+ }
+ }
+
+ local charge_percent = {
+ title = "%H: Battery charge on APC UPS ",
+ vlabel = "Percent",
+ y_min = "0",
+ y_max = "100",
+ number_format = "%5.1lf%%",
+ data = {
+ types = { "charge" },
+ options = {
+ charge = { color = "00ff0b", title = "Charge level" }
+ }
+ }
+ }
+
+ local temperature = {
+ title = "%H: Battery temperature on APC UPS ",
+ vlabel = "\176C",
+ number_format = "%5.1lf\176C",
+ data = {
+ types = { "temperature" },
+ options = {
+ temperature = { color = "ffb000", title = "Battery temperature" } }
+ }
+ }
+
+ local timeleft = {
+ title = "%H: Time left on APC UPS ",
+ vlabel = "Minutes",
+ number_format = "%.1lfm",
+ data = {
+ sources = {
+ timeleft = { "value" }
+ },
+ options = {
+ timeleft = { color = "0000ff", title = "Time left" }
+ }
+ }
+ }
+
+ local frequency = {
+ title = "%H: Incoming line frequency on APC UPS ",
+ vlabel = "Hz",
+ number_format = "%5.0lfhz",
+ data = {
+ sources = {
+ frequency_input = { "value" }
+ },
+ instances = {
+ frequency = "frequency"
+ },
+ options = {
+ frequency_frequency = { color = "000fff", title = "Line frequency" }
+ }
+ }
+ }
+
+ return { voltages, voltagesdc, percentload, charge_percent, temperature, timeleft, frequency }
+end
diff --git a/applications/luci-app-statistics/po/ca/statistics.po b/applications/luci-app-statistics/po/ca/statistics.po
index 33d5051f44..738af5510f 100644
--- a/applications/luci-app-statistics/po/ca/statistics.po
+++ b/applications/luci-app-statistics/po/ca/statistics.po
@@ -15,6 +15,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Acció (objectiu)"
@@ -295,6 +301,9 @@ msgstr "Monitoritza els discs i les particions"
msgid "Monitor filesystem types"
msgstr "Monitoritza els tipus de sistema de fitxers"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitoritza màquines"
@@ -381,6 +390,9 @@ msgstr "Configuració del connector ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -506,6 +518,9 @@ msgstr "TTL per paquets ping"
msgid "Table"
msgstr "Taula"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/cs/statistics.po b/applications/luci-app-statistics/po/cs/statistics.po
index 849831607c..fc3f513c5c 100644
--- a/applications/luci-app-statistics/po/cs/statistics.po
+++ b/applications/luci-app-statistics/po/cs/statistics.po
@@ -11,6 +11,12 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Akce (cíl)"
@@ -290,6 +296,9 @@ msgstr "Sledovat disky a oddíly"
msgid "Monitor filesystem types"
msgstr "Sledovat typy souborových systémů"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Sledovat hostitele"
@@ -376,6 +385,9 @@ msgstr "Nastavení pluginu Ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesy"
@@ -500,6 +512,9 @@ msgstr "TTL pro pakety pingu"
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/de/statistics.po b/applications/luci-app-statistics/po/de/statistics.po
index 196433e503..45ba020ada 100644
--- a/applications/luci-app-statistics/po/de/statistics.po
+++ b/applications/luci-app-statistics/po/de/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Aktion (Ziel)"
@@ -297,6 +303,9 @@ msgstr "Geräte und Partitionen überwachen"
msgid "Monitor filesystem types"
msgstr "Datesystemtypen überwachen"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Hosts überwachen"
@@ -383,6 +392,9 @@ msgstr "Ping Plugin Konfiguration"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Prozesse"
@@ -506,6 +518,9 @@ msgstr "TTL für Ping Pakete"
msgid "Table"
msgstr "Tabelle"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
"Das NUT-Plugin liest Informationen über Unterbrechungsfreie Stromversorgungen"
diff --git a/applications/luci-app-statistics/po/el/statistics.po b/applications/luci-app-statistics/po/el/statistics.po
index da54cdac6c..4062868446 100644
--- a/applications/luci-app-statistics/po/el/statistics.po
+++ b/applications/luci-app-statistics/po/el/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -288,6 +294,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -374,6 +383,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Διεργασίες"
@@ -497,6 +509,9 @@ msgstr ""
msgid "Table"
msgstr "Πίνακας"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/en/statistics.po b/applications/luci-app-statistics/po/en/statistics.po
index d9ab59ce0a..f7ebfe0c2b 100644
--- a/applications/luci-app-statistics/po/en/statistics.po
+++ b/applications/luci-app-statistics/po/en/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Translate Toolkit 1.1.1\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (target)"
@@ -293,6 +299,9 @@ msgstr "Monitor disks and partitions"
msgid "Monitor filesystem types"
msgstr "Monitor filesystem types"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitor hosts"
@@ -379,6 +388,9 @@ msgstr "Ping Plugin Configuration"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processes"
@@ -502,6 +514,9 @@ msgstr "TTL for ping packets"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/es/statistics.po b/applications/luci-app-statistics/po/es/statistics.po
index 18c25819a6..3c811ffeff 100644
--- a/applications/luci-app-statistics/po/es/statistics.po
+++ b/applications/luci-app-statistics/po/es/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Acción (objetivo)"
@@ -292,6 +298,9 @@ msgstr "Monitorizar discos y particiones"
msgid "Monitor filesystem types"
msgstr "Monitorizar tipos de sistema de archivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorizar máquinas"
@@ -378,6 +387,9 @@ msgstr "Configuración del plugin \"Ping\""
msgid "Port"
msgstr "Puerto"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesos"
@@ -501,6 +513,9 @@ msgstr "TTL para paquetes de ping"
msgid "Table"
msgstr "Tabla"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
"El plugin NUT obtiene información sobre Sistemas de Alimentación "
diff --git a/applications/luci-app-statistics/po/fr/statistics.po b/applications/luci-app-statistics/po/fr/statistics.po
index b657bd38f0..bc156dd42a 100644
--- a/applications/luci-app-statistics/po/fr/statistics.po
+++ b/applications/luci-app-statistics/po/fr/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (cible)"
@@ -294,6 +300,9 @@ msgstr "Disques et partitions à surveiller"
msgid "Monitor filesystem types"
msgstr "types de systèmes de fichier à surveiller"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Hôtes à surveiller"
@@ -380,6 +389,9 @@ msgstr "Configuration du greffon Ping"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processus"
@@ -503,6 +515,9 @@ msgstr "TTL des paquets ping"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/he/statistics.po b/applications/luci-app-statistics/po/he/statistics.po
index 6f40a47a24..35f978ed20 100644
--- a/applications/luci-app-statistics/po/he/statistics.po
+++ b/applications/luci-app-statistics/po/he/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -283,6 +289,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -369,6 +378,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -492,6 +504,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/hu/statistics.po b/applications/luci-app-statistics/po/hu/statistics.po
index 979c72f0f8..e5c4e601cb 100644
--- a/applications/luci-app-statistics/po/hu/statistics.po
+++ b/applications/luci-app-statistics/po/hu/statistics.po
@@ -11,6 +11,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Tevékenység (cél)"
@@ -295,6 +301,9 @@ msgstr "Lemezek és partíciók figyelése"
msgid "Monitor filesystem types"
msgstr "Fájlrendszer típusok figyelése"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Gépek figyelése"
@@ -381,6 +390,9 @@ msgstr "Ping bővítmény beállítása"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Folyamatok"
@@ -508,6 +520,9 @@ msgstr "TTL a ping csomagokhoz"
msgid "Table"
msgstr "Táblázat"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "A NUT bővítmény a szünetmentes tápokról ad információkat."
diff --git a/applications/luci-app-statistics/po/it/statistics.po b/applications/luci-app-statistics/po/it/statistics.po
index b0ae3d6b76..2451503f23 100644
--- a/applications/luci-app-statistics/po/it/statistics.po
+++ b/applications/luci-app-statistics/po/it/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Azione (destinazione)"
@@ -293,6 +299,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -379,6 +388,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -502,6 +514,9 @@ msgstr ""
msgid "Table"
msgstr "Tabella"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ja/statistics.po b/applications/luci-app-statistics/po/ja/statistics.po
index 690d9207d7..53941cf0f8 100644
--- a/applications/luci-app-statistics/po/ja/statistics.po
+++ b/applications/luci-app-statistics/po/ja/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 1.8.11\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "アクション(対象)"
@@ -295,6 +301,9 @@ msgstr "ディスクとパーティションをモニターする"
msgid "Monitor filesystem types"
msgstr "ファイルシステム タイプをモニターする"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "ホストをモニターする"
@@ -384,6 +393,9 @@ msgstr "Ping プラグイン設定"
msgid "Port"
msgstr "ポート"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "プロセス"
@@ -507,6 +519,9 @@ msgstr "pingパケットのTTL"
msgid "Table"
msgstr "テーブル"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "NUT プラグインは、無停電電源装置についての情報を読み取ります。"
diff --git a/applications/luci-app-statistics/po/ms/statistics.po b/applications/luci-app-statistics/po/ms/statistics.po
index 582314c545..c02556fc86 100644
--- a/applications/luci-app-statistics/po/ms/statistics.po
+++ b/applications/luci-app-statistics/po/ms/statistics.po
@@ -10,6 +10,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -280,6 +286,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -366,6 +375,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -489,6 +501,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/no/statistics.po b/applications/luci-app-statistics/po/no/statistics.po
index d37bc488f5..4de2ee6b55 100644
--- a/applications/luci-app-statistics/po/no/statistics.po
+++ b/applications/luci-app-statistics/po/no/statistics.po
@@ -4,6 +4,12 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Handling (mål)"
@@ -282,6 +288,9 @@ msgstr "Overvåk disker og partisjoner"
msgid "Monitor filesystem types"
msgstr "Overvåk filsystem typer"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Overvåk verter"
@@ -368,6 +377,9 @@ msgstr "Ping plugin konfigurasjon"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Prosesser"
@@ -491,6 +503,9 @@ msgstr "TTL for ping pakker"
msgid "Table"
msgstr "Tabell"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/pl/statistics.po b/applications/luci-app-statistics/po/pl/statistics.po
index bf2ec93516..6e34ce0725 100644
--- a/applications/luci-app-statistics/po/pl/statistics.po
+++ b/applications/luci-app-statistics/po/pl/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Akcja (cel)"
@@ -296,6 +302,9 @@ msgstr "Monitoruj dyski i partycje"
msgid "Monitor filesystem types"
msgstr "Monitoruj system plików"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitoruj hosty"
@@ -382,6 +391,9 @@ msgstr "Konfiguracja wtyczki Ping"
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procesy"
@@ -506,6 +518,9 @@ msgstr "TTL dla pakietów ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "Wtyczka Nut Informuje o Nie przerywalnym Zasilaniu"
diff --git a/applications/luci-app-statistics/po/pt-br/statistics.po b/applications/luci-app-statistics/po/pt-br/statistics.po
index 74c4a2603f..c5d6899332 100644
--- a/applications/luci-app-statistics/po/pt-br/statistics.po
+++ b/applications/luci-app-statistics/po/pt-br/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 1.8.11\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Ação (destino)"
@@ -299,6 +305,9 @@ msgstr "Monitoras discos e partições"
msgid "Monitor filesystem types"
msgstr "Monitorar tipos de sistemas de arquivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorar os equipamentos"
@@ -388,6 +397,9 @@ msgstr "Configuração do plugin Ping"
msgid "Port"
msgstr "Porta"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -511,6 +523,9 @@ msgstr "TTL para os pacotes do ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "O plugin NUT lê informações sobre Fontes de alimentação ininterruptas."
diff --git a/applications/luci-app-statistics/po/pt/statistics.po b/applications/luci-app-statistics/po/pt/statistics.po
index 79c7bd03e6..245e6e9bf9 100644
--- a/applications/luci-app-statistics/po/pt/statistics.po
+++ b/applications/luci-app-statistics/po/pt/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Ação (destino)"
@@ -295,6 +301,9 @@ msgstr "Monitoras discos e partições"
msgid "Monitor filesystem types"
msgstr "Monitorar tipos de sistemas de arquivos"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitorar os hosts"
@@ -381,6 +390,9 @@ msgstr "Configuração do plugin Ping"
msgid "Port"
msgstr "Porta"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processos"
@@ -504,6 +516,9 @@ msgstr "TTL para os pacotes do ping"
msgid "Table"
msgstr "Tabela"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ro/statistics.po b/applications/luci-app-statistics/po/ro/statistics.po
index c5dfcfe558..a326fec799 100644
--- a/applications/luci-app-statistics/po/ro/statistics.po
+++ b/applications/luci-app-statistics/po/ro/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"20)) ? 1 : 2);;\n"
"X-Generator: Pootle 2.0.4\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -287,6 +293,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -373,6 +382,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Procese"
@@ -496,6 +508,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/ru/statistics.po b/applications/luci-app-statistics/po/ru/statistics.po
index 3a418dec75..9d0ff9fdf2 100644
--- a/applications/luci-app-statistics/po/ru/statistics.po
+++ b/applications/luci-app-statistics/po/ru/statistics.po
@@ -15,6 +15,12 @@ msgstr ""
"X-Generator: Pootle 2.0.6\n"
"X-Poedit-SourceCharset: UTF-8\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Действие (цель)"
@@ -297,6 +303,9 @@ msgstr "Собирать статистику с дисков и раздело
msgid "Monitor filesystem types"
msgstr "Собирать статистику с файловых систем"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Собирать статистику с хостов"
@@ -383,6 +392,9 @@ msgstr "Конфигурация модуля Ping"
msgid "Port"
msgstr "Порт"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Процессы"
@@ -508,6 +520,9 @@ msgstr "TTL для ping-пакетов"
msgid "Table"
msgstr "Таблица"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/sk/statistics.po b/applications/luci-app-statistics/po/sk/statistics.po
index 6dba7d09b8..53858ca540 100644
--- a/applications/luci-app-statistics/po/sk/statistics.po
+++ b/applications/luci-app-statistics/po/sk/statistics.po
@@ -8,6 +8,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -278,6 +284,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -364,6 +373,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -487,6 +499,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/sv/statistics.po b/applications/luci-app-statistics/po/sv/statistics.po
index bef0f2d6c9..9d738f2f33 100644
--- a/applications/luci-app-statistics/po/sv/statistics.po
+++ b/applications/luci-app-statistics/po/sv/statistics.po
@@ -9,6 +9,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -283,6 +289,9 @@ msgstr "Övervaka hårddiskar och partitioner"
msgid "Monitor filesystem types"
msgstr "Övervaka filsystemtyper"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Övervaka värdar"
@@ -369,6 +378,9 @@ msgstr ""
msgid "Port"
msgstr "Port"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Processer"
@@ -492,6 +504,9 @@ msgstr "TTL för ping-paket"
msgid "Table"
msgstr "Tabell"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/templates/statistics.pot b/applications/luci-app-statistics/po/templates/statistics.pot
index c57a85b76a..ec630b6962 100644
--- a/applications/luci-app-statistics/po/templates/statistics.pot
+++ b/applications/luci-app-statistics/po/templates/statistics.pot
@@ -1,6 +1,12 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -271,6 +277,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -357,6 +366,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -480,6 +492,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/tr/statistics.po b/applications/luci-app-statistics/po/tr/statistics.po
index 6d7056f3b7..860ff95e88 100644
--- a/applications/luci-app-statistics/po/tr/statistics.po
+++ b/applications/luci-app-statistics/po/tr/statistics.po
@@ -9,6 +9,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -279,6 +285,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -365,6 +374,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -488,6 +500,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/uk/statistics.po b/applications/luci-app-statistics/po/uk/statistics.po
index de17a3caf8..ac9ae50940 100644
--- a/applications/luci-app-statistics/po/uk/statistics.po
+++ b/applications/luci-app-statistics/po/uk/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Pootle 2.0.6\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -284,6 +290,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -370,6 +379,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -493,6 +505,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/vi/statistics.po b/applications/luci-app-statistics/po/vi/statistics.po
index bdb7f1a3a1..f5798a2651 100644
--- a/applications/luci-app-statistics/po/vi/statistics.po
+++ b/applications/luci-app-statistics/po/vi/statistics.po
@@ -14,6 +14,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Pootle 1.1.0\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "Action (target)"
@@ -294,6 +300,9 @@ msgstr "Kiểm soát đĩa và phân vùng"
msgid "Monitor filesystem types"
msgstr "Kiểm soát loại filesystem"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "Monitor hosts"
@@ -380,6 +389,9 @@ msgstr "Cấu hình Ping plugin"
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "Quá trình xử lý"
@@ -503,6 +515,9 @@ msgstr "TTl cho gói ping"
msgid "Table"
msgstr "Table"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/po/zh-cn/statistics.po b/applications/luci-app-statistics/po/zh-cn/statistics.po
index 46cf59feed..20f5a93cb4 100644
--- a/applications/luci-app-statistics/po/zh-cn/statistics.po
+++ b/applications/luci-app-statistics/po/zh-cn/statistics.po
@@ -13,6 +13,12 @@ msgstr ""
"X-Generator: Poedit 2.0.1\n"
"Language-Team: \n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr "动作(目标)"
@@ -289,6 +295,9 @@ msgstr "监测磁盘和分区"
msgid "Monitor filesystem types"
msgstr "监测文件系统类型"
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr "监测主机"
@@ -377,6 +386,9 @@ msgstr "Ping插件配置"
msgid "Port"
msgstr "端口"
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr "进程"
@@ -500,6 +512,9 @@ msgstr "ping包TTL"
msgid "Table"
msgstr "表"
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr "NUT插件读取UPS信息。"
diff --git a/applications/luci-app-statistics/po/zh-tw/statistics.po b/applications/luci-app-statistics/po/zh-tw/statistics.po
index cbd6d9d38e..36e42c1d09 100644
--- a/applications/luci-app-statistics/po/zh-tw/statistics.po
+++ b/applications/luci-app-statistics/po/zh-tw/statistics.po
@@ -7,6 +7,12 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
msgid "Action (target)"
msgstr ""
@@ -277,6 +283,9 @@ msgstr ""
msgid "Monitor filesystem types"
msgstr ""
+msgid "Monitor host"
+msgstr ""
+
msgid "Monitor hosts"
msgstr ""
@@ -363,6 +372,9 @@ msgstr ""
msgid "Port"
msgstr ""
+msgid "Port for apcupsd communication"
+msgstr ""
+
msgid "Processes"
msgstr ""
@@ -486,6 +498,9 @@ msgstr ""
msgid "Table"
msgstr ""
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
msgstr ""
diff --git a/applications/luci-app-statistics/root/etc/config/luci_statistics b/applications/luci-app-statistics/root/etc/config/luci_statistics
index c081a8e724..8cc918e3db 100644
--- a/applications/luci-app-statistics/root/etc/config/luci_statistics
+++ b/applications/luci-app-statistics/root/etc/config/luci_statistics
@@ -49,6 +49,11 @@ config statistics 'collectd_unixsock'
# input plugins
+config statistics 'collectd_apcups'
+ option enable '0'
+ option Host 'localhost'
+ option Port '3551'
+
config statistics 'collectd_conntrack'
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 090344cee4..2bf63c1fe6 100755
--- a/applications/luci-app-statistics/root/usr/bin/stat-genconfig
+++ b/applications/luci-app-statistics/root/usr/bin/stat-genconfig
@@ -255,6 +255,12 @@ end
plugins = {
+ apcups = {
+ { "Host", "Port" },
+ { },
+ { }
+ },
+
collectd = {
{ "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
{ },
@@ -461,8 +467,10 @@ preprocess = {
section("collectd")
+section("logfile")
+
for plugin in pairs(plugins) do
- if plugin ~= "collectd" then
+ if (plugin ~= "collectd") and (plugin ~= "logfile") then
section( plugin )
end
end
diff --git a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
index 86382f6ae0..a418a8ec61 100644
--- a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
+++ b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
@@ -5,8 +5,8 @@ module("luci.controller.travelmate", package.seeall)
local fs = require("nixio.fs")
local util = require("luci.util")
-local template = require("luci.template")
local i18n = require("luci.i18n")
+local templ = require("luci.template")
function index()
if not nixio.fs.access("/etc/config/travelmate") then
@@ -14,15 +14,22 @@ function index()
end
entry({"admin", "services", "travelmate"}, firstchild(), _("Travelmate"), 40).dependent = false
entry({"admin", "services", "travelmate", "tab_from_cbi"}, cbi("travelmate/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
- entry({"admin", "services", "travelmate", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+ entry({"admin", "services", "travelmate", "stations"}, template("travelmate/stations"), _("Wireless Stations"), 20).leaf = true
+ entry({"admin", "services", "travelmate", "logfile"}, call("logread"), _("View Logfile"), 30).leaf = true
entry({"admin", "services", "travelmate", "advanced"}, firstchild(), _("Advanced"), 100)
entry({"admin", "services", "travelmate", "advanced", "configuration"}, cbi("travelmate/configuration_tab"), _("Edit Travelmate Configuration"), 110).leaf = true
entry({"admin", "services", "travelmate", "advanced", "cfg_wireless"}, cbi("travelmate/cfg_wireless_tab"), _("Edit Wireless Configuration"), 120).leaf = true
entry({"admin", "services", "travelmate", "advanced", "cfg_network"}, cbi("travelmate/cfg_network_tab"), _("Edit Network Configuration"), 130).leaf = true
entry({"admin", "services", "travelmate", "advanced", "cfg_firewall"}, cbi("travelmate/cfg_firewall_tab"), _("Edit Firewall Configuration"), 140).leaf = true
+
+ entry({"admin", "services", "travelmate", "wifiscan"}, template("travelmate/wifi_scan")).leaf = true
+ entry({"admin", "services", "travelmate", "wifiadd"}, cbi("travelmate/wifi_add", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+ entry({"admin", "services", "travelmate", "wifiedit"}, cbi("travelmate/wifi_edit", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+ entry({"admin", "services", "travelmate", "wifidelete"}, cbi("travelmate/wifi_delete", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+ entry({"admin", "services", "travelmate", "wifiorder"}, cbi("travelmate/wifi_order", {hideresetbtn=true, hidesavebtn=true})).leaf = true
end
function logread()
local logfile = util.trim(util.exec("logread -e 'travelmate'"))
- template.render("travelmate/logread", {title = i18n.translate("Travelmate Logfile"), content = logfile})
+ templ.render("travelmate/logread", {title = i18n.translate("Travelmate Logfile"), content = logfile})
end
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
index 236bbb0de5..64ab880c4d 100644
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
@@ -2,12 +2,13 @@
-- This is free software, licensed under the Apache License, Version 2.0
local fs = require("nixio.fs")
-local uci = require("uci")
+local uci = require("luci.model.uci").cursor()
local json = require("luci.jsonc")
local nw = require("luci.model.network").init()
local fw = require("luci.model.firewall").init()
-local uplink = uci.get("network", "trm_wwan") or ""
+local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
+local uplink = uci.get("network", trmiface) or ""
local parse = json.parse(fs.readfile(trminput) or "")
m = Map("travelmate", translate("Travelmate"),
@@ -21,70 +22,81 @@ function m.on_after_commit(self)
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
--- Main travelmate options
-
s = m:section(NamedSection, "global", "travelmate")
-o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
-o1.default = o1.disabled
-o1.rmempty = false
-
-o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
- translate("Keep travelmate in an active state."))
-o2.default = o2.enabled
-o2.rmempty = false
+-- Interface Wizard
-o3 = s:option(Value, "trm_iface", translate("Restrict interface trigger to certain interface(s)"),
- translate("Space separated list of interfaces that trigger travelmate processing. "..
- "To disable event driven (re-)starts remove all entries."))
-o3.rmempty = true
+if uplink == "" then
+ dv = s:option(DummyValue, "nil", translate("Interface Wizard"))
+ dv.template = "cbi/nullsection"
-o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
- translate("Additional trigger delay in seconds before travelmate processing begins."))
-o4.default = 2
-o4.datatype = "range(1,90)"
-o4.rmempty = false
+ o = s:option(Value, "trm_iface", translate("Uplink interface"))
+ o.datatype = "and(uciname,rangelength(3,15))"
+ o.default = "trm_wwan"
+ o.rmempty = false
-o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
-o5.default = o5.disabled
-o5.rmempty = false
+ function o.validate(self, value)
+ iface = value
+ return iface
+ end
--- Interface setup
+ function o.write(self, section, value)
+ uci:set("travelmate", section, "trm_iface", iface)
+ uci:save("travelmate")
+ uci:commit("travelmate")
+ end
-if uplink == "" then
- dv = s:option(DummyValue, "_dummy", translate("Interface Setup"))
- dv.template = "cbi/nullsection"
btn = s:option(Button, "", translate("Create Uplink Interface"),
- translate("Automatically create a new wireless wan uplink interface 'trm_wwan', configure it to use dhcp and ")
+ translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
.. translate("add it to the wan zone of the firewall. This step has only to be done once."))
btn.inputtitle = translate("Add Interface")
btn.inputstyle = "apply"
btn.disabled = false
function btn.write()
- local name = "trm_wwan"
- local net = nw:add_network(name, { proto = "dhcp" })
+ local net = nw:add_network(iface, { proto = "dhcp" })
if net then
nw:save("network")
nw:commit("network")
local zone = fw:get_zone_by_network("wan")
if zone then
- zone:add_network(name)
+ zone:add_network(iface)
fw:save("firewall")
fw:commit("firewall")
+ luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
end
- luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
- luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
+ luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
end
-else
- dv = s:option(DummyValue, "_dummy", translate("Interface Setup"),
- translate("<br />&nbsp;Network Interface 'trm_wwan' created successfully. ")
- .. translatef("Scan &amp; Add new wireless stations via standard "
- .. "<a href=\"%s\">"
- .. "Wireless Setup</a>", luci.dispatcher.build_url("admin/network/wireless")))
- dv.template = "cbi/nullsection"
+ return m
end
+-- Main travelmate options
+
+o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
+ translate("Keep travelmate in an active state."))
+o2.default = o2.enabled
+o2.rmempty = false
+
+o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
+ translate("Name of the uplink interface that triggers travelmate processing."))
+o3.datatype = "and(uciname,rangelength(3,15))"
+o3.default = "trm_wwan"
+o3.rmempty = false
+
+o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
+ translate("Additional trigger delay in seconds before travelmate processing begins."))
+o4.default = 2
+o4.datatype = "range(1,90)"
+o4.rmempty = false
+
+o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
+o5.default = o5.disabled
+o5.rmempty = false
+
-- Runtime information
ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
new file mode 100644
index 0000000000..979307e001
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
@@ -0,0 +1,69 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
+
+m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
+m.cancel = translate("Back to overview")
+m.reset = false
+
+function m.on_cancel()
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+m.hidden = {
+ device = http.formvalue("device"),
+ ssid = http.formvalue("ssid"),
+ wep = http.formvalue("wep"),
+ wpa_suites = http.formvalue("wpa_suites"),
+ wpa_version = http.formvalue("wpa_version")
+}
+
+if m.hidden.ssid ~= "" then
+ wssid = m:field(Value, "ssid", translate("SSID"))
+ wssid.default = m.hidden.ssid
+else
+ wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
+end
+
+if (tonumber(m.hidden.wep) or 0) == 1 then
+ wkey = m:field(Value, "key", translate("WEP passphrase"),
+ translate("Specify the secret encryption key here."))
+ wkey.password = true
+ wkey.datatype = "wepkey"
+elseif (tonumber(m.hidden.wpa_version) or 0) > 0 and
+ (m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2")
+then
+ wkey = m:field(Value, "key", translate("WPA passphrase"),
+ translate("Specify the secret encryption key here."))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+end
+
+function wssid.write(self, section, value)
+ newsection = uci:section("wireless", "wifi-iface", nil, {
+ mode = "sta",
+ network = trmiface,
+ device = m.hidden.device,
+ ssid = wssid:formvalue(section),
+ disabled = "1"
+ })
+ if (tonumber(m.hidden.wep) or 0) == 1 then
+ uci:set("wireless", newsection, "encryption", "wep-open")
+ uci:set("wireless", newsection, "key", "1")
+ uci:set("wireless", newsection, "key1", wkey:formvalue(section))
+ elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
+ uci:set("wireless", newsection, "encryption", "psk2")
+ uci:set("wireless", newsection, "key", wkey:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", "none")
+ end
+ uci:save("wireless")
+ uci:commit("wireless")
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
new file mode 100644
index 0000000000..97ec1ca3ca
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
@@ -0,0 +1,14 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+local cfg = http.formvalue("cfg")
+
+if cfg ~= nil then
+ uci:delete("wireless", cfg)
+ uci:save("wireless")
+ uci:commit("wireless")
+end
+
+http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
new file mode 100644
index 0000000000..0bae98460f
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
@@ -0,0 +1,49 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+
+m = SimpleForm("edit", translate("Edit Wireless Uplink Configuration"))
+m.cancel = translate("Back to overview")
+m.reset = false
+
+function m.on_cancel()
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+m.hidden = {
+ cfg = http.formvalue("cfg")
+}
+
+local s = uci:get_all("wireless", m.hidden.cfg)
+if s ~= nil then
+ wssid = m:field(Value, "ssid", translate("SSID"))
+ wssid.default = s.ssid
+
+ if s.encryption and s.key then
+ wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
+ wkey.password = true
+ wkey.default = s.key
+ if s.encryption == "wep" then
+ wkey.datatype = "wepkey"
+ else
+ wkey.datatype = "wpakey"
+ end
+ end
+else
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+function wssid.write(self, section, value)
+ uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
+ if s.encryption and s.key then
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section))
+ end
+ uci:save("wireless")
+ uci:commit("wireless")
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
new file mode 100644
index 0000000000..5734841030
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
@@ -0,0 +1,22 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+local cfg = http.formvalue("cfg")
+local pos = http.formvalue("pos")
+local dir = http.formvalue("dir")
+
+if cfg ~= nil then
+ if dir == "up" then
+ pos = pos - 1
+ uci:reorder("wireless", cfg, pos)
+ elseif dir == "down" then
+ pos = pos + 1
+ uci:reorder("wireless", cfg, pos)
+ end
+ uci:save("wireless")
+ uci:commit("wireless")
+end
+
+http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
index ee3a4553a8..2b9885567a 100644
--- a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
@@ -5,6 +5,6 @@ This is free software, licensed under the Apache License, Version 2.0
<%+cbi/valueheader%>
-<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border: none; box-shadow: none; background-color: #ffffff; color: #0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border:none; box-shadow:none; background-color:#ffffff; color:#0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
<%+cbi/valuefooter%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
new file mode 100644
index 0000000000..bdb265f195
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
@@ -0,0 +1,83 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+
+<%-
+ local write = io.write
+ local uci = require "luci.model.uci".cursor()
+ local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+<h2 name="content"><%:Wireless Stations%></h2>
+<div class="cbi-map-descr"><%:Provides an overview of all configured uplink interfaces for travelmate. You can edit and delete existing interfaces or scan for new uplinks.%></div>
+
+<fieldset class="cbi-section">
+ <table class="cbi-section-table" style="empty-cells:hide">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Device%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Mode%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink Interface%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:SSID%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
+ <th class="cbi-section-table-cell" style="text-align:left" colspan="3"><%:Disabled%></th>
+ </tr>
+<%
+ local pos = 1
+ uci:foreach("wireless", "wifi-iface", function(s)
+ pos = pos + 1
+ local section = s['.name']
+ local device = s.device or ""
+ local mode = s.mode or ""
+ local iface = s.network or ""
+ local ssid = s.ssid or ""
+ local encryption = s.encryption or ""
+ local disabled = s.disabled or ""
+ local style = "color:#000000"
+ if disabled == "0" then
+ style = "color:#0069d6"
+ end
+ if iface == trmiface then
+%>
+ <tr class="cbi-section-table-row cbi-rowstyle-7" style="<%=style%>">
+ <td style="text-align:left"><%=device%></td>
+ <td style="text-align:left"><%=mode%></td>
+ <td style="text-align:left"><%=iface%></td>
+ <td style="text-align:left"><%=ssid%></td>
+ <td style="text-align:left"><%=encryption%></td>
+ <td style="text-align:left"><%=disabled%></td>
+ <td class="cbi-value-field" style="width:100px;text-align:right">
+ <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&pos=<%=pos%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>" />
+ <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&pos=<%=pos%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>" />
+ </td>
+ <td class="cbi-value-field" style="width:180px;text-align:right">
+ <input type="button" class="cbi-button cbi-button-edit" style="width:85px" onclick="location.href='<%=url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>" />
+ <input type="button" class="cbi-button cbi-button-remove" style="width:85px" onclick="location.href='<%=url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
+ </td>
+ </tr>
+<%
+ end
+ end)
+%>
+ </table>
+</fieldset>
+<div class="cbi-page-actions right">
+<%
+ uci:foreach("wireless", "wifi-device", function(s)
+ local device = s[".name"]
+%>
+ <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+ <input type="hidden" name="device" value="<%=device%>" />
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input type="submit" class="cbi-button cbi-button-find" style="width:110px" title="<%:Find and join network on %><%=device%>" value="<%:Scan %><%=device%>" />
+ </form>
+<%
+ end)
+%>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
new file mode 100644
index 0000000000..2ce45c63cb
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
@@ -0,0 +1,89 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%-
+ local sys = require "luci.sys"
+ local utl = require "luci.util"
+ local dev = luci.http.formvalue("device")
+ local iw = luci.sys.wifi.getiwinfo(dev)
+
+ if not iw then
+ luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+ end
+
+ function format_wifi_encryption(info)
+ if info.wep == true then
+ return translate("WEP")
+ elseif info.wpa > 0 then
+ return translate("WPA / WPA2")
+ elseif info.enabled then
+ return translate("Unknown")
+ else
+ return translate("Open")
+ end
+ end
+
+ function percent_wifi_signal(info)
+ local qc = info.quality or 0
+ local qm = info.quality_max or 0
+ if info.bssid and qc > 0 and qm > 0 then
+ return math.floor((100 / qm) * qc)
+ else
+ return 0
+ end
+ end
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+<h2 name="content"><%:Wireless Scan%></h2>
+ <fieldset class="cbi-section">
+ <table class="cbi-section-table" style="empty-cells:hide">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
+ <th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
+ </tr>
+ <% for i, net in ipairs(iw.scanlist or { }) do%>
+ <tr class="cbi-section-table-row cbi-rowstyle-4">
+ <td class="cbi-value-field" style="text-align:left">
+ <strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>
+ </td>
+ <td class="cbi-value-field" style="text-align:left">
+ <%=format_wifi_encryption(net.encryption)%>
+ </td>
+ <td class="cbi-value-field" style="text-align:left">
+ <%=percent_wifi_signal(net)%> %
+ </td>
+ <td class="cbi-value-field" style="width:120px; text-align:right">
+ <form class="inline" action="<%=url('admin/services/travelmate/wifiadd')%>" method="post">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" />
+ <input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>" />
+ <input type="hidden" name="wep" value="<%=net.encryption.wep and 1 or 0%>" />
+ <% if net.encryption.wpa then %>
+ <input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>" />
+ <% for _, v in ipairs(net.encryption.auth_suites) do %><input type="hidden" name="wpa_suites" value="<%=v%>" />
+ <% end; end %>
+ <input class="cbi-button cbi-button-apply" style="width:110px" type="submit" value="<%:Add Uplink%>" />
+ </form>
+ </td>
+ </tr>
+ <% end %>
+ </table>
+ </fieldset>
+<div class="cbi-page-actions right">
+ <form class="inline" action="<%=url('admin/services/travelmate/stations')%>" method="post">
+ <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>" />
+ </form>
+ <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+ <input type="hidden" name="token" value="<%=token%>" />
+ <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" />
+ <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>" />
+ </form>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index e4a8b8bda2..a09a70c7fd 100644
--- a/applications/luci-app-travelmate/po/ja/travelmate.po
+++ b/applications/luci-app-travelmate/po/ja/travelmate.po
@@ -7,18 +7,20 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.1\n"
+"X-Generator: Poedit 2.0.3\n"
"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"Language: ja\n"
-msgid "<br />&nbsp;Network Interface 'trm_wwan' created successfully."
-msgstr ""
-"<br />&nbsp;ネットワーク インターフェース 'trm_wwan' の作成に成功しました。"
-
msgid "Add Interface"
msgstr "インターフェースの追加"
+msgid "Add Uplink"
+msgstr "アップリンクの追加"
+
+msgid "Add Wireless Uplink Configuration"
+msgstr "無線アップリンク追加の設定"
+
msgid ""
"Additional trigger delay in seconds before travelmate processing begins."
msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間(秒)です。"
@@ -26,12 +28,8 @@ msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間
msgid "Advanced"
msgstr "詳細設定"
-msgid ""
-"Automatically create a new wireless wan uplink interface 'trm_wwan', "
-"configure it to use dhcp and"
-msgstr ""
-"新しい無線 WAN インターフェース 'trm_wwan' を自動的に作成し、 DHCP を使用する"
-"よう構成して"
+msgid "Back to overview"
+msgstr "概要へ戻る"
msgid ""
"Configuration of the travelmate package to to enable travel router "
@@ -45,6 +43,27 @@ msgstr "接続制限"
msgid "Create Uplink Interface"
msgstr "アップリンク インターフェースの作成"
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+"新規の無線 WAN アップリンク インターフェースを作成し、 DHCP を使用するよう構"
+"成して"
+
+msgid "Delete"
+msgstr "削除"
+
+msgid "Delete this Uplink"
+msgstr "このアップリンクを削除"
+
+msgid "Device"
+msgstr "デバイス"
+
+msgid "Disabled"
+msgstr "無効"
+
+msgid "Edit"
+msgstr "編集"
+
msgid "Edit Firewall Configuration"
msgstr "ファイアウォール設定の編集"
@@ -57,6 +76,12 @@ msgstr "Travelmate 設定の編集"
msgid "Edit Wireless Configuration"
msgstr "無線設定の編集"
+msgid "Edit Wireless Uplink Configuration"
+msgstr "無線アップリンク設定の編集"
+
+msgid "Edit this Uplink"
+msgstr "このアップリンクを編集"
+
msgid "Enable 'automatic' mode"
msgstr "'automatic' モードの有効化"
@@ -66,15 +91,21 @@ msgstr "Travelmate の有効化"
msgid "Enable verbose debug logging"
msgstr "詳細なデバッグ ログの有効化"
+msgid "Encryption"
+msgstr "暗号化"
+
msgid "Extra options"
msgstr "拡張オプション"
+msgid "Find and join network on"
+msgstr "ネットワークの検索と参加:"
+
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
"documentation</a>"
msgstr ""
-"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a>を確"
-"認してください。"
+"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a> を"
+"確認してください。"
msgid "How long should travelmate wait for a successful wlan interface reload"
msgstr ""
@@ -82,26 +113,42 @@ msgstr ""
"す。"
msgid "How many times should travelmate try to connect to an Uplink"
-msgstr "Travelmate がアップリンクに対して接続を試行する回数です。"
+msgstr "Travelmate がアップリンクへの接続を試行する回数です。"
msgid "Input file not found, please check your configuration."
msgstr "入力ファイルが見つかりません。設定を確認してください。"
-msgid "Interface Setup"
-msgstr "インターフェース設定"
-
msgid "Interface Timeout"
msgstr "インターフェース タイムアウト"
+msgid "Interface Wizard"
+msgstr "インターフェース ウィザード"
+
msgid "Keep travelmate in an active state."
msgstr "Travelmate をアクティブ状態で維持します。"
msgid "Last rundate"
msgstr "最終実行日時"
+msgid "Mode"
+msgstr "モード"
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid "Name of the uplink interface that triggers travelmate processing."
+msgstr ""
+"Travelmate の処理のトリガーとなる、アップリンク インターフェースの名前です。"
+
msgid "Online Status"
msgstr "オンライン ステータス"
+msgid "Open"
+msgstr "オープン"
+
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。"
@@ -112,11 +159,22 @@ msgstr "全体タイムアウト"
msgid "Overview"
msgstr "概要"
+msgid "Passphrase (%s)"
+msgstr "暗号フレーズ (%s)"
+
+msgid ""
+"Provides an overview of all configured uplink interfaces for travelmate. You "
+"can edit and delete existing interfaces or scan for new uplinks."
+msgstr ""
+"Travelmate における、全ての設定済みアップリンク インターフェースの一覧です。"
+"既存のインターフェースを編集または削除したり、新規アップリンクの追加のために"
+"スキャンを行うことができます。"
+
msgid "Radio selection"
msgstr "無線の選択"
-msgid "Restrict interface trigger to certain interface(s)"
-msgstr "インターフェース トリガーを特定のインターフェースに限定する"
+msgid "Repeat scan"
+msgstr "再スキャン"
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
msgstr "Travelmate が特定の無線に接続するようにします。例: 'radio0'"
@@ -124,26 +182,26 @@ msgstr "Travelmate が特定の無線に接続するようにします。例: 'r
msgid "Runtime information"
msgstr "実行情報"
-msgid ""
-"Scan &amp; Add new wireless stations via standard <a href=\"%s\">Wireless "
-"Setup</a>"
-msgstr ""
-"通常の<a href=\"%s\">無線設定</a>にて、新規の無線ステーションのスキャン及び追"
-"加を行います。"
+msgid "SSID"
+msgstr "SSID"
-msgid ""
-"Space separated list of interfaces that trigger travelmate processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "SSID (hidden)"
msgstr ""
-"Travelmate の処理のトリガーとなる、スペースで区切られたインターフェースのリス"
-"トです。処理を発生させるイベントを無効にするには、全てのエントリーを削除して"
-"空欄にします。"
+
+msgid "Scan"
+msgstr "スキャン:"
+
+msgid "Signal strength"
+msgstr "信号強度"
+
+msgid "Specify the secret encryption key here."
+msgstr "暗号キーを設定します。"
msgid "Station Interface"
msgstr "ステーション インターフェース"
msgid "Station Radio"
-msgstr "ステーション 無線"
+msgstr "ステーション電波"
msgid "Station SSID"
msgstr "ステーション SSID"
@@ -198,9 +256,42 @@ msgstr "Travelmate バージョン"
msgid "Trigger delay"
msgstr "トリガー遅延"
+msgid "Unknown"
+msgstr "不明"
+
+msgid "Uplink / Trigger interface"
+msgstr "アップリンク/トリガー インターフェース"
+
+msgid "Uplink Interface"
+msgstr "アップリンク インターフェース"
+
+msgid "Uplink SSID"
+msgstr "アップリンク SSID"
+
+msgid "Uplink interface"
+msgstr "アップリンク インターフェース"
+
msgid "View Logfile"
msgstr "ログファイルの確認"
+msgid "WEP"
+msgstr "WEP"
+
+msgid "WEP passphrase"
+msgstr "WEP 暗号キー"
+
+msgid "WPA / WPA2"
+msgstr "WPA / WPA2"
+
+msgid "WPA passphrase"
+msgstr "WPA 暗号キー"
+
+msgid "Wireless Scan"
+msgstr "無線スキャン"
+
+msgid "Wireless Stations"
+msgstr "無線ステーション"
+
msgid ""
"add it to the wan zone of the firewall. This step has only to be done once."
msgstr ""
@@ -210,126 +301,11 @@ msgstr ""
msgid "connected"
msgstr "接続済み"
+msgid "hidden"
+msgstr "(不明)"
+
msgid "n/a"
msgstr "利用不可"
msgid "not connected"
msgstr "未接続"
-
-#~ msgid "."
-#~ msgstr "。"
-
-#~ msgid ""
-#~ "Automatically create a new wireless wan interface, configure it to use "
-#~ "dhcp and add it to the wan zone of the firewall. This step has only to be "
-#~ "done once."
-#~ msgstr ""
-#~ "新しい無線 WAN インターフェースを自動的に作成し、DHCP を使用するよう構成し"
-#~ "てファイアウォールの wan ゾーンに追加します。このステップは、一度だけ実行"
-#~ "する必要があります。"
-
-#~ msgid "Direct Link: <a href=\"%s\">Wireless Setup</a>"
-#~ msgstr "ダイレクト リンク: <a href=\"%s\">無線設定</a>"
-
-#~ msgid "For further information"
-#~ msgstr "詳細情報は"
-
-#~ msgid "Name of the new wireless wan interface"
-#~ msgstr "新しい無線 WAN のインターフェース名"
-
-#~ msgid ""
-#~ "Network Interface '%s' created successfully. Feel free to scan & add new "
-#~ "stations via standard wireless setup."
-#~ msgstr ""
-#~ "ネットワーク インターフェース '%s' の作成に成功しました。通常の無線設定に"
-#~ "て、スキャン及び新規ステーションの追加が可能です。"
-
-#~ msgid "Setup WWAN Interface"
-#~ msgstr "WWAN インターフェース設定"
-
-#~ msgid ""
-#~ "The allowed characters are: <code>A-Z</code>, <code>a-z</code>, "
-#~ "<code>0-9</code> and <code>_</code> (3-15 characters)."
-#~ msgstr ""
-#~ "使用可能文字: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> and "
-#~ "<code>_</code>(3 - 15文字)"
-
-#~ msgid "The given network interface name already exist"
-#~ msgstr "入力されたネットワーク インターフェース名は、既に存在しています。"
-
-#~ msgid "see online documentation"
-#~ msgstr "オンライン ドキュメントを確認してください"
-
-#~ msgid ""
-#~ "Brief advice: Create a wwan interface, configure it to use dhcp and add "
-#~ "it to the wan zone in firewall. Create the wifi interfaces to be used "
-#~ "('client' mode, assigned to wwan network, left as disabled). Travelmate "
-#~ "will try to connect to the known wifi client interfaces in the defined "
-#~ "order."
-#~ msgstr ""
-#~ "簡単な解説: 予めWWANインターフェースを作成し、DHCPを使用するよう構成して"
-#~ "ファイアウォールのWANゾーンに追加します。また、使用される無線インター"
-#~ "フェースを作成しておきます(\"クライアント\" モード、WWANに割り当て、無効"
-#~ "状態)。Travelmateは、登録されている順序で既知の無線クライアント インター"
-#~ "フェースへの接続を試行します。"
-
-#~ msgid ""
-#~ "Configuration of the Travelmate package to enable travel router "
-#~ "functionality."
-#~ msgstr "トラベル ルータ機能を有効にする、Travelmate パッケージの設定です。"
-
-#~ msgid "Debug logging"
-#~ msgstr "デバッグ ログ"
-
-#~ msgid "Default 20, range 10-60"
-#~ msgstr "既定値 20、範囲 10 - 60"
-
-#~ msgid "Default 3, range 1-10"
-#~ msgstr "既定値 3、範囲 1 - 10"
-
-#~ msgid "Disable this if you want to use iwinfo instead of iw"
-#~ msgstr "iw の代わりに iwinfo を使用したい場合、この設定を無効にします。"
-
-#~ msgid "Enable Travelmate"
-#~ msgstr "Travelmateの有効化"
-
-#~ msgid "Global options"
-#~ msgstr "全般オプション"
-
-#~ msgid "Link to detailed advice"
-#~ msgstr "詳細な解説へのリンク"
-
-#~ msgid "Max. number of connection retries to an uplink"
-#~ msgstr "確立までの接続試行回数"
-
-#~ msgid "Max. timeout in seconds for wlan interface reload"
-#~ msgstr "無線LANインターフェース リロード時の最大待機時間(秒)"
-
-#~ msgid "Restrict reload trigger to certain interface(s)"
-#~ msgstr "リロード トリガを特定のインターフェースに限定する"
-
-#~ msgid ""
-#~ "Space separated list of wwan interfaces that trigger reload action. To "
-#~ "disable reload trigger set it to 'false'. Default: empty"
-#~ msgstr ""
-#~ "リロード動作のトリガとなる、スペースで区切られたWWAN インターフェースのリ"
-#~ "ストです。リロードのトリガを無効にするには、'false' を設定します。既定値:"
-#~ "(空)"
-
-#~ msgid "Use iw for scanning"
-#~ msgstr "スキャンに iw を使用する"
-
-#~ msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries"
-#~ msgstr "既定値 3、範囲 0 - 10。再試行回数を制限しない場合、0 に設定します。"
-
-#~ msgid "Default 30, range 5-60"
-#~ msgstr "既定値 30、範囲 5 - 60"
-
-#~ msgid "Default: empty = use all radios."
-#~ msgstr "デフォルト:(空)= 全ての無線を使用"
-
-#~ msgid "Loop timeout in seconds for wlan monitoring"
-#~ msgstr "無線LAN モニターのループ タイムアウト(秒)"
-
-#~ msgid "Use only one radio, e.g. 'radio0'"
-#~ msgstr "単一の無線のみ使用する 例: 'radio0'"
diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po
index 4eff34e3e1..a0a0c853de 100644
--- a/applications/luci-app-travelmate/po/pt-br/travelmate.po
+++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po
@@ -12,10 +12,13 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt_BR\n"
-msgid "<br />&nbsp;Network Interface 'trm_wwan' created successfully."
+msgid "Add Interface"
msgstr ""
-msgid "Add Interface"
+msgid "Add Uplink"
+msgstr ""
+
+msgid "Add Wireless Uplink Configuration"
msgstr ""
msgid ""
@@ -25,9 +28,7 @@ msgstr ""
msgid "Advanced"
msgstr ""
-msgid ""
-"Automatically create a new wireless wan uplink interface 'trm_wwan', "
-"configure it to use dhcp and"
+msgid "Back to overview"
msgstr ""
msgid ""
@@ -41,6 +42,25 @@ msgstr ""
msgid "Create Uplink Interface"
msgstr ""
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete this Uplink"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
msgid "Edit Firewall Configuration"
msgstr ""
@@ -53,6 +73,12 @@ msgstr ""
msgid "Edit Wireless Configuration"
msgstr ""
+msgid "Edit Wireless Uplink Configuration"
+msgstr ""
+
+msgid "Edit this Uplink"
+msgstr ""
+
msgid "Enable 'automatic' mode"
msgstr ""
@@ -62,9 +88,15 @@ msgstr ""
msgid "Enable verbose debug logging"
msgstr ""
+msgid "Encryption"
+msgstr ""
+
msgid "Extra options"
msgstr "Opções adicionais"
+msgid "Find and join network on"
+msgstr ""
+
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
"documentation</a>"
@@ -79,10 +111,10 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
-msgid "Interface Setup"
+msgid "Interface Timeout"
msgstr ""
-msgid "Interface Timeout"
+msgid "Interface Wizard"
msgstr ""
msgid "Keep travelmate in an active state."
@@ -91,9 +123,24 @@ msgstr ""
msgid "Last rundate"
msgstr ""
+msgid "Mode"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid "Name of the uplink interface that triggers travelmate processing."
+msgstr ""
+
msgid "Online Status"
msgstr ""
+msgid "Open"
+msgstr ""
+
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
@@ -104,10 +151,18 @@ msgstr ""
msgid "Overview"
msgstr ""
+msgid "Passphrase (%s)"
+msgstr ""
+
+msgid ""
+"Provides an overview of all configured uplink interfaces for travelmate. You "
+"can edit and delete existing interfaces or scan for new uplinks."
+msgstr ""
+
msgid "Radio selection"
msgstr ""
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Repeat scan"
msgstr ""
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
@@ -116,14 +171,19 @@ msgstr ""
msgid "Runtime information"
msgstr ""
-msgid ""
-"Scan &amp; Add new wireless stations via standard <a href=\"%s\">Wireless "
-"Setup</a>"
+msgid "SSID"
msgstr ""
-msgid ""
-"Space separated list of interfaces that trigger travelmate processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "SSID (hidden)"
+msgstr ""
+
+msgid "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
msgstr ""
msgid "Station Interface"
@@ -175,9 +235,42 @@ msgstr ""
msgid "Trigger delay"
msgstr ""
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger interface"
+msgstr ""
+
+msgid "Uplink Interface"
+msgstr ""
+
+msgid "Uplink SSID"
+msgstr ""
+
+msgid "Uplink interface"
+msgstr ""
+
msgid "View Logfile"
msgstr ""
+msgid "WEP"
+msgstr ""
+
+msgid "WEP passphrase"
+msgstr ""
+
+msgid "WPA / WPA2"
+msgstr ""
+
+msgid "WPA passphrase"
+msgstr ""
+
+msgid "Wireless Scan"
+msgstr ""
+
+msgid "Wireless Stations"
+msgstr ""
+
msgid ""
"add it to the wan zone of the firewall. This step has only to be done once."
msgstr ""
@@ -185,6 +278,9 @@ msgstr ""
msgid "connected"
msgstr ""
+msgid "hidden"
+msgstr ""
+
msgid "n/a"
msgstr ""
diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot
index 615c3a79ce..878590859d 100644
--- a/applications/luci-app-travelmate/po/templates/travelmate.pot
+++ b/applications/luci-app-travelmate/po/templates/travelmate.pot
@@ -1,10 +1,13 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
-msgid "<br />&nbsp;Network Interface 'trm_wwan' created successfully."
+msgid "Add Interface"
msgstr ""
-msgid "Add Interface"
+msgid "Add Uplink"
+msgstr ""
+
+msgid "Add Wireless Uplink Configuration"
msgstr ""
msgid ""
@@ -14,9 +17,7 @@ msgstr ""
msgid "Advanced"
msgstr ""
-msgid ""
-"Automatically create a new wireless wan uplink interface 'trm_wwan', "
-"configure it to use dhcp and"
+msgid "Back to overview"
msgstr ""
msgid ""
@@ -30,6 +31,25 @@ msgstr ""
msgid "Create Uplink Interface"
msgstr ""
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+
+msgid "Delete"
+msgstr ""
+
+msgid "Delete this Uplink"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid "Edit"
+msgstr ""
+
msgid "Edit Firewall Configuration"
msgstr ""
@@ -42,6 +62,12 @@ msgstr ""
msgid "Edit Wireless Configuration"
msgstr ""
+msgid "Edit Wireless Uplink Configuration"
+msgstr ""
+
+msgid "Edit this Uplink"
+msgstr ""
+
msgid "Enable 'automatic' mode"
msgstr ""
@@ -51,9 +77,15 @@ msgstr ""
msgid "Enable verbose debug logging"
msgstr ""
+msgid "Encryption"
+msgstr ""
+
msgid "Extra options"
msgstr ""
+msgid "Find and join network on"
+msgstr ""
+
msgid ""
"For further information <a href=\"%s\" target=\"_blank\">see online "
"documentation</a>"
@@ -68,10 +100,10 @@ msgstr ""
msgid "Input file not found, please check your configuration."
msgstr ""
-msgid "Interface Setup"
+msgid "Interface Timeout"
msgstr ""
-msgid "Interface Timeout"
+msgid "Interface Wizard"
msgstr ""
msgid "Keep travelmate in an active state."
@@ -80,9 +112,24 @@ msgstr ""
msgid "Last rundate"
msgstr ""
+msgid "Mode"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid "Name of the uplink interface that triggers travelmate processing."
+msgstr ""
+
msgid "Online Status"
msgstr ""
+msgid "Open"
+msgstr ""
+
msgid ""
"Options for further tweaking in case the defaults are not suitable for you."
msgstr ""
@@ -93,10 +140,18 @@ msgstr ""
msgid "Overview"
msgstr ""
+msgid "Passphrase (%s)"
+msgstr ""
+
+msgid ""
+"Provides an overview of all configured uplink interfaces for travelmate. You "
+"can edit and delete existing interfaces or scan for new uplinks."
+msgstr ""
+
msgid "Radio selection"
msgstr ""
-msgid "Restrict interface trigger to certain interface(s)"
+msgid "Repeat scan"
msgstr ""
msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
@@ -105,14 +160,19 @@ msgstr ""
msgid "Runtime information"
msgstr ""
-msgid ""
-"Scan &amp; Add new wireless stations via standard <a href=\"%s\">Wireless "
-"Setup</a>"
+msgid "SSID"
msgstr ""
-msgid ""
-"Space separated list of interfaces that trigger travelmate processing. To "
-"disable event driven (re-)starts remove all entries."
+msgid "SSID (hidden)"
+msgstr ""
+
+msgid "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
msgstr ""
msgid "Station Interface"
@@ -164,9 +224,42 @@ msgstr ""
msgid "Trigger delay"
msgstr ""
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger interface"
+msgstr ""
+
+msgid "Uplink Interface"
+msgstr ""
+
+msgid "Uplink SSID"
+msgstr ""
+
+msgid "Uplink interface"
+msgstr ""
+
msgid "View Logfile"
msgstr ""
+msgid "WEP"
+msgstr ""
+
+msgid "WEP passphrase"
+msgstr ""
+
+msgid "WPA / WPA2"
+msgstr ""
+
+msgid "WPA passphrase"
+msgstr ""
+
+msgid "Wireless Scan"
+msgstr ""
+
+msgid "Wireless Stations"
+msgstr ""
+
msgid ""
"add it to the wan zone of the firewall. This step has only to be done once."
msgstr ""
@@ -174,6 +267,9 @@ msgstr ""
msgid "connected"
msgstr ""
+msgid "hidden"
+msgstr ""
+
msgid "n/a"
msgstr ""
diff --git a/applications/luci-app-watchcat/po/sv/watchcat.po b/applications/luci-app-watchcat/po/sv/watchcat.po
index 0b811bceea..96c73e3111 100644
--- a/applications/luci-app-watchcat/po/sv/watchcat.po
+++ b/applications/luci-app-watchcat/po/sv/watchcat.po
@@ -19,6 +19,8 @@ msgid ""
"How often to check internet connection. Default unit is seconds, you can you "
"use the suffix 'm' for minutes, 'h' for hours or 'd' for days"
msgstr ""
+"Hur ofta internet-anslutningen ska kollas. Standardenheten är sekunder, du "
+"kan använda tillägget 'm' för minutrar, 't' för timmar eller 'd' för dagar"
msgid ""
"In periodic mode, it defines the reboot period. In internet mode, it defines "
@@ -28,7 +30,7 @@ msgid ""
msgstr ""
msgid "Operating mode"
-msgstr ""
+msgstr "Driftsläge"
msgid "Period"
msgstr "Period"
@@ -37,7 +39,7 @@ msgid "Ping host"
msgstr "Pinga värd"
msgid "Ping period"
-msgstr ""
+msgstr "Period för pingning"
msgid "Watchcat"
msgstr "Watchcat"
diff --git a/applications/luci-app-wifischedule/po/sv/wifischedule.po b/applications/luci-app-wifischedule/po/sv/wifischedule.po
new file mode 100644
index 0000000000..50953aa285
--- /dev/null
+++ b/applications/luci-app-wifischedule/po/sv/wifischedule.po
@@ -0,0 +1,101 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Activate wifi"
+msgstr "Aktivera wifi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr ""
+
+msgid "Cron Jobs"
+msgstr "Cron-jobb"
+
+msgid "Day(s) of Week"
+msgstr "Dag(ar) i veckan"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Anger ett schema när wifi ska startas och stängas ner."
+
+msgid "Determine Modules Automatically"
+msgstr "Avgör moduler automatiskt"
+
+msgid "Disable wifi gracefully"
+msgstr "Inaktivera wifi elegant"
+
+msgid "Disabled wifi forced"
+msgstr "Inaktivering av wifi påtvingat"
+
+msgid "Enable"
+msgstr "Aktivera"
+
+msgid "Enable Wifi Schedule"
+msgstr "Aktivera Wifi-schema"
+
+msgid "Enable logging"
+msgstr "Aktivera loggning"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+msgid "Friday"
+msgstr "Fredag"
+
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+msgid "Monday"
+msgstr "Måndag"
+
+msgid "Saturday"
+msgstr "Lördag"
+
+msgid "Schedule"
+msgstr "Schema"
+
+msgid "Schedule events"
+msgstr "Schemalägg händelser"
+
+msgid "Start Time"
+msgstr "Starttid"
+
+msgid "Start WiFi"
+msgstr "Starta WiFi"
+
+msgid "Stop Time"
+msgstr "Stopptid"
+
+msgid "Stop WiFi"
+msgstr "Stoppa WiFi"
+
+msgid "Sunday"
+msgstr "Söndag"
+
+msgid "The value %s is invalid"
+msgstr "Värdet %s är ogiltigt"
+
+msgid "Thursday"
+msgstr "Torsdag"
+
+msgid "Tuesday"
+msgstr "Tisdag"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Befria moduler (experimentiell; sparar mer ström)"
+
+msgid "View Cron Jobs"
+msgstr "Se Cron-jobb"
+
+msgid "View Logfile"
+msgstr "Se loggfilen"
+
+msgid "Wednesday"
+msgstr "Onsdag"
+
+msgid "Wifi Schedule"
+msgstr "Wifi-schema"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Loggfil för Wifi-schema"
diff --git a/applications/luci-app-wireguard/po/sv/wireguard.po b/applications/luci-app-wireguard/po/sv/wireguard.po
new file mode 100644
index 0000000000..1aa68e251e
--- /dev/null
+++ b/applications/luci-app-wireguard/po/sv/wireguard.po
@@ -0,0 +1,62 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IPs"
+msgstr "Tillåtna IP-adresser"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Configuration"
+msgstr "Konfiguration"
+
+msgid "Data Received"
+msgstr "Mottagen data"
+
+msgid "Data Transmitted"
+msgstr "Överförd data"
+
+msgid "Endpoint"
+msgstr "Slutpunkt"
+
+msgid "Firewall Mark"
+msgstr ""
+
+msgid "Interface"
+msgstr "Gränssnitt"
+
+msgid "Interface does not have a public key!"
+msgstr "Gränssnittet har inte en publik nyckel!"
+
+msgid "Latest Handshake"
+msgstr "Senaste handskakning"
+
+msgid "Listen Port"
+msgstr "Lyssningsport"
+
+msgid "Never"
+msgstr "Aldrig"
+
+msgid "Peer"
+msgstr ""
+
+msgid "Persistent Keepalive"
+msgstr ""
+
+msgid "Public Key"
+msgstr "Publik nyckel"
+
+msgid "WireGuard Status"
+msgstr "Status för WireGuard"
+
+msgid "h ago"
+msgstr "t sedan"
+
+msgid "m ago"
+msgstr "m sedan"
+
+msgid "over a day ago"
+msgstr "över en dag sedan"
+
+msgid "s ago"
+msgstr "s sedan"
diff --git a/applications/luci-app-wol/po/sv/wol.po b/applications/luci-app-wol/po/sv/wol.po
index 5b3e923476..923d4fdbac 100644
--- a/applications/luci-app-wol/po/sv/wol.po
+++ b/applications/luci-app-wol/po/sv/wol.po
@@ -18,13 +18,13 @@ msgstr ""
"använda"
msgid "Host to wake up"
-msgstr "Värd som ska väckas upp"
+msgstr "Värd att väcka upp"
msgid "Network interface to use"
-msgstr "Nätverksgränssnitt som ska användas"
+msgstr "Nätverksgränssnitt att använda"
msgid "Send to broadcast address"
-msgstr ""
+msgstr "Skicka till sändningsadress"
msgid ""
"Sometimes only one of the two tools works. If one fails, try the other one"