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.po718
-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/controller/mwan3.lua2
-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.htm20
-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.po76
-rw-r--r--applications/luci-app-mwan3/po/templates/mwan3.pot60
-rw-r--r--applications/luci-app-mwan3/po/zh-cn/mwan3.po144
-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/datatree.lua14
-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/root/etc/config/luci_statistics5
-rwxr-xr-xapplications/luci-app-statistics/root/usr/bin/stat-genconfig10
-rw-r--r--applications/luci-app-travelmate/po/ja/travelmate.po269
-rw-r--r--applications/luci-app-travelmate/po/pt-br/travelmate.po115
-rw-r--r--applications/luci-app-travelmate/po/templates/travelmate.pot115
-rw-r--r--applications/luci-app-unbound/luasrc/model/cbi/unbound.lua57
-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/luasrc/view/wireguard.htm16
-rw-r--r--applications/luci-app-wireguard/po/sv/wireguard.po62
-rw-r--r--applications/luci-app-wol/po/sv/wol.po6
72 files changed, 3284 insertions, 1266 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..a7f41f250d
--- /dev/null
+++ b/applications/luci-app-aria2/po/sv/aria2.po
@@ -0,0 +1,208 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+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..589d5f9aa3
--- /dev/null
+++ b/applications/luci-app-clamav/po/sv/clamav.po
@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+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..8cb1923e29 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..780a2f9c8f
--- /dev/null
+++ b/applications/luci-app-ddns/po/sv/ddns.po
@@ -0,0 +1,718 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+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..b5679655d0 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/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
index d3fd150692..ca39c9bf30 100644
--- a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
+++ b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
@@ -3,7 +3,7 @@ module("luci.controller.mwan3", package.seeall)
sys = require "luci.sys"
ut = require "luci.util"
-ip = "/usr/bin/ip -4 "
+ip = "ip -4 "
function index()
if not nixio.fs.access("/etc/config/mwan3") then
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..e4a14adade 100644
--- a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
+++ b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
@@ -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)
;
}
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>';
}
}
);
@@ -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..0d6ea152d0 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.2\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 ""
+
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 ""
+
+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 "概要"
@@ -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 ""
+
+msgid "Waiting for diagnostic results..."
+msgstr ""
+
msgid "Weight"
msgstr "ウエイト"
@@ -560,3 +615,10 @@ msgstr "never"
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..d9bddf5e08 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 ""
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
index b8948b3163..d239312f9b 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"
@@ -507,4 +551,4 @@ msgid "never"
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/datatree.lua b/applications/luci-app-statistics/luasrc/statistics/datatree.lua
index 806b054cb6..5176a19a22 100644
--- a/applications/luci-app-statistics/luasrc/statistics/datatree.lua
+++ b/applications/luci-app-statistics/luasrc/statistics/datatree.lua
@@ -13,9 +13,17 @@ local sections = uci:get_all("luci_statistics")
Instance = util.class()
function Instance.__init__( self, host )
- self._host = host or sections.collectd.Hostname or sys.hostname()
- self._libdir = sections.collectd.PluginDir or "/usr/lib/collectd"
- self._rrddir = sections.collectd_rrdtool.DataDir or "/tmp/rrd"
+ self._host = host or sys.hostname()
+ self._libdir = "/usr/lib/collectd"
+ self._rrddir = "/tmp/rrd"
+
+ if sections and sections.collectd then
+ self._host = host or sections.collectd.Hostname or sys.hostname()
+ self._libdir = sections.collectd.PluginDir or "/usr/lib/collectd"
+ end
+ if sections and sections.collectd_rrdtool then
+ self._rrddir = sections.collectd_rrdtool.DataDir or "/tmp/rrd"
+ end
self._libdir = self._libdir:gsub("/$","")
self._rrddir = self._rrddir:gsub("/$","")
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/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/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index e4a8b8bda2..bd1d54739c 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,36 @@ 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 "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 +153,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 +176,23 @@ 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."
-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 +247,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 +292,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..5e09759c4a 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,18 @@ msgstr ""
msgid "Last rundate"
msgstr ""
+msgid "Mode"
+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 +145,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 +165,16 @@ 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 "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
msgstr ""
msgid "Station Interface"
@@ -175,9 +226,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 +269,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..a0e5629696 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,18 @@ msgstr ""
msgid "Last rundate"
msgstr ""
+msgid "Mode"
+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 +134,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 +154,16 @@ 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 "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
msgstr ""
msgid "Station Interface"
@@ -164,9 +215,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 +258,9 @@ msgstr ""
msgid "connected"
msgstr ""
+msgid "hidden"
+msgstr ""
+
msgid "n/a"
msgstr ""
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
index 847c98a3e8..bfaacb40bc 100644
--- a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
+++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
@@ -3,8 +3,20 @@
-- Copyright 2016 Dan Luedtke <mail@danrl.com>
-- Licensed to the public under the Apache License 2.0.
+local m
+local s1
+local ena, mcf, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
+local ctl, dlk, dom, dty, lfq, wfq, exa, ctl, d64, pfx, qry, qrs
+local pro, tgr, rsc, rsn, ag2
+
m = Map("unbound", translate("Recursive DNS"),
- translate("Unbound is a validating, recursive, and caching DNS resolver."))
+ translatef("<a href=\"%s\" target=\"_blank\">Unbound</a>"
+ .. " is a validating, recursive, and caching DNS resolver. "
+ .. "UCI help can be found on "
+ .. "<a href=\"%s\" target=\"_blank\">github</a>.",
+ "https://www.unbound.net/",
+ "https://github.com/openwrt/packages/blob/master/net/unbound/files/README.md"))
+
s1 = m:section(TypedSection, "unbound")
s1.addremove = false
@@ -24,19 +36,19 @@ mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"),
mcf.rmempty = false
function ena.cfgvalue(self, section)
- return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
+ return luci.sys.init.enabled("unbound") and self.enabled or self.disabled
end
function ena.write(self, section, value)
- if value == "1" then
- luci.sys.init.enable("unbound")
- luci.sys.call("/etc/init.d/unbound start >/dev/null")
- else
- luci.sys.call("/etc/init.d/unbound stop >/dev/null")
- luci.sys.init.disable("unbound")
- end
-
- return Flag.write(self, section, value)
+ if value == "1" then
+ luci.sys.init.enable("unbound")
+ luci.sys.call("/etc/init.d/unbound start >/dev/null")
+ else
+ luci.sys.call("/etc/init.d/unbound stop >/dev/null")
+ luci.sys.init.disable("unbound")
+ end
+
+ return Flag.write(self, section, value)
end
--Basic Tab
@@ -125,6 +137,15 @@ wfq:value("4", translate("Interface FQDN, All Addresses"))
wfq:depends({ dhcp_link = "none" })
wfq:depends({ dhcp_link = "odhcpd" })
+exa = s1:taboption("advanced", ListValue, "add_extra_dns", translate("Extra DNS:"),
+ translate("Use extra DNS entries found in /etc/config/dhcp"))
+exa:value("0", translate("Ignore"))
+exa:value("1", translate("Include Network/Hostnames"))
+exa:value("2", translate("Advanced MX/SRV RR"))
+exa:value("3", translate("Advanced CNAME RR"))
+exa:depends({ dhcp_link = "none" })
+exa:depends({ dhcp_link = "odhcpd" })
+
ctl = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
ctl.rmempty = false
@@ -179,11 +200,17 @@ rsc.rmempty = false
ag2 = s1:taboption("resource", Value, "root_age", translate("Root DSKEY Age:"),
translate("Limit days between RFC5011 to reduce flash writes"))
ag2.datatype = "and(uinteger,min(1),max(99))"
-ag2:value("14", "14")
-ag2:value("28", "28 ("..translate("default")..")")
-ag2:value("45", "45")
-ag2:value("90", "90")
+ag2:value("3", "3")
+ag2:value("9", "9 ("..translate("default")..")")
+ag2:value("12", "12")
+ag2:value("24", "24")
ag2:value("99", "99 ("..translate("never")..")")
+tgr = s1:taboption("resource", Value, "trigger", translate("Trigger Networks:"),
+ translate("Networks that may trigger Unbound to reload (avoid wan6)"))
+tgr.template = "cbi/network_netlist"
+tgr.widget = "checkbox"
+tgr.cast = "string"
+
return m
diff --git a/applications/luci-app-watchcat/po/sv/watchcat.po b/applications/luci-app-watchcat/po/sv/watchcat.po
index 0b811bceea..07aa726493 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..ca4e5aac78
--- /dev/null
+++ b/applications/luci-app-wifischedule/po/sv/wifischedule.po
@@ -0,0 +1,101 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+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/luasrc/view/wireguard.htm b/applications/luci-app-wireguard/luasrc/view/wireguard.htm
index 5b5d59a969..5af6232ae6 100644
--- a/applications/luci-app-wireguard/luasrc/view/wireguard.htm
+++ b/applications/luci-app-wireguard/luasrc/view/wireguard.htm
@@ -17,22 +17,22 @@
data[line[1]] = {
name = line[1],
public_key = line[3],
- listen_port = line[5],
- fwmark = line[6],
+ listen_port = line[4],
+ fwmark = line[5],
peers = { }
}
else
local peer = {
public_key = line[2],
- endpoint = line[3],
+ endpoint = line[4],
allowed_ips = { },
- latest_handshake = line[5],
- transfer_rx = line[6],
- transfer_tx = line[7],
- persistent_keepalive = line[8]
+ latest_handshake = line[6],
+ transfer_rx = line[7],
+ transfer_tx = line[8],
+ persistent_keepalive = line[9]
}
if not (line[4] == '(none)') then
- for ipkey, ipvalue in pairs(string.split(line[4], ",")) do
+ for ipkey, ipvalue in pairs(string.split(line[5], ",")) do
if #ipvalue > 0 then
table.insert(peer['allowed_ips'], ipvalue)
end
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..b7e3ed5b58
--- /dev/null
+++ b/applications/luci-app-wireguard/po/sv/wireguard.po
@@ -0,0 +1,62 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+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"