Merge pull request #1251 from dibdot/luci-app-travelmate
authorHannu Nyman <hannu.nyman@iki.fi>
Tue, 25 Jul 2017 05:35:53 +0000 (08:35 +0300)
committerGitHub <noreply@github.com>
Tue, 25 Jul 2017 05:35:53 +0000 (08:35 +0300)
luci-app-travelmate: enhancements & fixes

131 files changed:
applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
applications/luci-app-adblock/po/ja/adblock.po
applications/luci-app-adblock/po/pt-br/adblock.po
applications/luci-app-adblock/po/sv/adblock.po
applications/luci-app-adblock/po/templates/adblock.pot
applications/luci-app-adblock/po/zh-cn/adblock.po
applications/luci-app-advanced-reboot/Makefile [new file with mode: 0644]
applications/luci-app-advanced-reboot/README.md [new file with mode: 0644]
applications/luci-app-advanced-reboot/luasrc/controller/advanced_reboot.lua [new file with mode: 0644]
applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm [new file with mode: 0644]
applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/alternative_reboot.htm [new file with mode: 0644]
applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/power_off.htm [new file with mode: 0644]
applications/luci-app-advanced-reboot/po/templates/luci-app-advanced-reboot.pot [new file with mode: 0644]
applications/luci-app-aria2/po/sv/aria2.po [new file with mode: 0644]
applications/luci-app-clamav/po/sv/clamav.po [new file with mode: 0644]
applications/luci-app-commands/Makefile
applications/luci-app-commands/po/sv/commands.po
applications/luci-app-ddns/po/sv/ddns.po [new file with mode: 0644]
applications/luci-app-diag-core/po/sv/diag_core.po
applications/luci-app-firewall/Makefile
applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
applications/luci-app-firewall/po/sv/firewall.po
applications/luci-app-mwan3/luasrc/controller/mwan3.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua
applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua
applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm
applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm
applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm
applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm
applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm
applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm
applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm
applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm
applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm
applications/luci-app-mwan3/po/ja/mwan3.po
applications/luci-app-mwan3/po/templates/mwan3.pot
applications/luci-app-mwan3/po/zh-cn/mwan3.po
applications/luci-app-privoxy/Makefile
applications/luci-app-qos/Makefile
applications/luci-app-shadowsocks-libev/Makefile
applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua [deleted file]
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instance-details.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/instances.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/rules.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev/servers.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/po/pt-br/shadowsocks-libev.po [deleted file]
applications/luci-app-shadowsocks-libev/po/sv/shadowsocks-libev.po [deleted file]
applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot [deleted file]
applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po [deleted file]
applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/apcups.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/datatree.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/apcups.lua [new file with mode: 0644]
applications/luci-app-statistics/root/etc/config/luci_statistics
applications/luci-app-statistics/root/usr/bin/stat-genconfig
applications/luci-app-travelmate/po/ja/travelmate.po
applications/luci-app-travelmate/po/pt-br/travelmate.po
applications/luci-app-travelmate/po/templates/travelmate.pot
applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
applications/luci-app-watchcat/po/sv/watchcat.po
applications/luci-app-wifischedule/po/sv/wifischedule.po [new file with mode: 0644]
applications/luci-app-wireguard/luasrc/view/wireguard.htm
applications/luci-app-wireguard/po/sv/wireguard.po [new file with mode: 0644]
applications/luci-app-wol/po/sv/wol.po
collections/luci-ssl/Makefile
collections/luci/Makefile
libs/luci-lib-ip/Makefile
libs/luci-lib-json/Makefile
libs/luci-lib-nixio/Makefile
libs/luci-lib-px5g/Makefile
libs/rpcd-mod-rrdns/Makefile [new file with mode: 0644]
libs/rpcd-mod-rrdns/src/CMakeLists.txt [new file with mode: 0644]
libs/rpcd-mod-rrdns/src/rrdns.c [new file with mode: 0644]
libs/rpcd-mod-rrdns/src/rrdns.h [new file with mode: 0644]
modules/luci-base/Makefile
modules/luci-base/htdocs/luci-static/resources/cbi.js
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/model/cbi/admin_network/proto_static.lua
modules/luci-base/luasrc/sys.lua
modules/luci-base/po/ca/base.po
modules/luci-base/po/cs/base.po
modules/luci-base/po/de/base.po
modules/luci-base/po/el/base.po
modules/luci-base/po/en/base.po
modules/luci-base/po/es/base.po
modules/luci-base/po/fr/base.po
modules/luci-base/po/he/base.po
modules/luci-base/po/hu/base.po
modules/luci-base/po/it/base.po
modules/luci-base/po/ja/base.po
modules/luci-base/po/ko/base.po
modules/luci-base/po/ms/base.po
modules/luci-base/po/no/base.po
modules/luci-base/po/pl/base.po
modules/luci-base/po/pt-br/base.po
modules/luci-base/po/pt/base.po
modules/luci-base/po/ro/base.po
modules/luci-base/po/ru/base.po
modules/luci-base/po/sk/base.po
modules/luci-base/po/sv/base.po
modules/luci-base/po/templates/base.pot
modules/luci-base/po/tr/base.po
modules/luci-base/po/uk/base.po
modules/luci-base/po/vi/base.po
modules/luci-base/po/zh-cn/base.po
modules/luci-base/po/zh-tw/base.po
modules/luci-base/root/etc/config/ucitrack
modules/luci-mod-admin-full/Makefile
modules/luci-mod-admin-full/luasrc/controller/admin/status.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/ifaces.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/vlan.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
modules/luci-mod-admin-mini/luasrc/model/cbi/mini/network.lua
modules/luci-mod-freifunk/luasrc/controller/freifunk/freifunk.lua
modules/luci-mod-rpc/Makefile
protocols/luci-proto-ipv6/Makefile
protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_dhcpv6.lua
protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua
protocols/luci-proto-ppp/Makefile
protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua
themes/luci-theme-bootstrap/Makefile
themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm

index f71fb7b..68f9c88 100644 (file)
@@ -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
index ac470fe..07fd783 100644 (file)
@@ -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サーバーへのクエリを許可する場合、この設"
-#~ "定を無効にすることもできます。"
index 72f6910..044352d 100644 (file)
@@ -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 ""
 
index 7f27122..cf92dbd 100644 (file)
@@ -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"
 
index c5771ef..5b5a968 100644 (file)
@@ -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 ""
 
index dfa03f3..46dc99e 100644 (file)
@@ -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 (file)
index 0000000..3a886eb
--- /dev/null
@@ -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 (file)
index 0000000..ee87a00
--- /dev/null
@@ -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 (file)
index 0000000..2b55217
--- /dev/null
@@ -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 (file)
index 0000000..206d250
--- /dev/null
@@ -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 (file)
index 0000000..6325934
--- /dev/null
@@ -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 (file)
index 0000000..0ddea11
--- /dev/null
@@ -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 (file)
index 0000000..9c81089
--- /dev/null
@@ -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 (file)
index 0000000..a7f41f2
--- /dev/null
@@ -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 (file)
index 0000000..589d5f9
--- /dev/null
@@ -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"
index dc5d0ca..f41d6e2 100644 (file)
@@ -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
index 5a4c255..8cb1923 100644 (file)
@@ -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 (file)
index 0000000..780a2f9
--- /dev/null
@@ -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"
index dd0a81a..b567965 100644 (file)
@@ -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."
index 21804d7..4fa85f2 100644 (file)
@@ -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
index 500d1bf..7553504 100644 (file)
@@ -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" %{
index 2e169fb..777c817 100644 (file)
@@ -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"
index d3fd150..ca39c9b 100644 (file)
@@ -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
index 7e863a3..aeabc63 100644 (file)
@@ -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)
index e7c16fd..2b46376 100644 (file)
@@ -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"))
index 3bccbd9..efbe8f7 100644 (file)
@@ -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")
index 08c3f69..6640564 100644 (file)
@@ -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
 
index 412f369..0f4c595 100644 (file)
@@ -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
 
index 14d404b..e4a14ad 100644 (file)
                        {
                                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>';
                                }
                        }
                );
 </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;
index 4c2a0dc..10b4f10 100644 (file)
@@ -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>
index fba3fa6..20ae603 100644 (file)
@@ -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>
index cf90112..bed4310 100644 (file)
@@ -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>
index 0a12496..4174ef4 100644 (file)
@@ -37,7 +37,7 @@
                        }
                        else
                        {
-                               tshoot.innerHTML = '<strong>Error collecting troubleshooting information</strong>';
+                               tshoot.innerHTML = '<strong><%:Error collecting troubleshooting information%></strong>';
                        }
                }
        );
 <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;
index 5077674..bb18d53 100644 (file)
@@ -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>
index 99da487..5d91c53 100644 (file)
@@ -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;
index 9329b92..7cef063 100644 (file)
                                        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>';
                        }
                }
        );
 
 <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;
index b80b9f3..6a800c3 100644 (file)
@@ -17,7 +17,7 @@
                        }
                        else
                        {
-                               status.innerHTML = '<strong>No detailed status information available</strong>';
+                               status.innerHTML = '<strong><%:No detailed status information available%></strong>';
                        }
                }
        );
 <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;
index 472c7ce..2929a6d 100644 (file)
                                        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;
                                        }
                        }
                        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>';
                        }
                }
        );
 <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;
index cae45b8..0d6ea15 100644 (file)
@@ -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 ア"
+#~ "ドレスです。常にオンラインとする場合、空欄のままにします。"
index 0bda248..d9bddf5 100644 (file)
@@ -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 ""
 
index b8948b3..d239312 100644 (file)
@@ -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 "è·\9f踪可靠性"
+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 "不可达(拒绝)"
index e174c80..486cf0e 100644 (file)
@@ -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
index dd322a3..fd12557 100644 (file)
@@ -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
index 848a5c8..d0923e0 100644 (file)
@@ -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
index ae96816..05d12e3 100644 (file)
@@ -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 (file)
index 76435e2..0000000
+++ /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 (file)
index 0000000..d9a61d0
--- /dev/null
@@ -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 (file)
index 0000000..62a90fb
--- /dev/null
@@ -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 (file)
index 0000000..fe5f9c3
--- /dev/null
@@ -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 (file)
index 0000000..71c6656
--- /dev/null
@@ -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 (file)
index 0000000..2753f45
--- /dev/null
@@ -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 (file)
index 0000000..219d89b
--- /dev/null
@@ -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 (file)
index f2b18e3..0000000
+++ /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 (file)
index b0cf6d3..0000000
+++ /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 (file)
index 81bbcb7..0000000
+++ /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 (file)
index f86eee7..0000000
+++ /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 ""
index 1bc0714..ec26f02 100644 (file)
@@ -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 (file)
index 0000000..49e28c7
--- /dev/null
@@ -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
index 806b054..5176a19 100644 (file)
@@ -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("/$","")
index 4e00e7f..e29a2e1 100644 (file)
@@ -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 (file)
index 0000000..2a8acee
--- /dev/null
@@ -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
index c081a8e..8cc918e 100644 (file)
@@ -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'
 
index 090344c..2bf63c1 100755 (executable)
@@ -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
index e4a8b8b..bd1d547 100644 (file)
@@ -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 ã\81\8cã\82¢ã\83\83ã\83\97ã\83ªã\83³ã\82¯ã\81«å¯¾ã\81\97ã\81¦接続を試行する回数です。"
+msgstr "Travelmate ã\81\8cã\82¢ã\83\83ã\83\97ã\83ªã\83³ã\82¯ã\81¸ã\81®接続を試行する回数です。"
 
 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'"
index 4eff34e..5e09759 100644 (file)
@@ -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 ""
 
index 615c3a7..a0e5629 100644 (file)
@@ -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 ""
 
index 847c98a..bfaacb4 100644 (file)
@@ -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
 
index 0b811bc..07aa726 100644 (file)
@@ -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 (file)
index 0000000..ca4e5aa
--- /dev/null
@@ -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"
index 5b5d59a..5af6232 100644 (file)
         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 (file)
index 0000000..b7e3ed5
--- /dev/null
@@ -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"
index 5b3e923..923d4fd 100644 (file)
@@ -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"
index 8fb8ff4..399c982 100644 (file)
@@ -12,6 +12,8 @@ LUCI_BASENAME:=ssl
 LUCI_TITLE:=LuCI with HTTPS support (mbedTLS as SSL backend)
 LUCI_DEPENDS:=+luci +libustream-mbedtls +px5g
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index 4625c95..9b495c3 100644 (file)
@@ -12,7 +12,10 @@ LUCI_BASENAME:=luci
 LUCI_TITLE:=Standard OpenWrt set including full admin with ppp support and the default Bootstrap theme
 LUCI_DEPENDS:= \
        +uhttpd +uhttpd-mod-ubus +luci-mod-admin-full +luci-theme-bootstrap \
-       +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6
+       +luci-app-firewall +luci-proto-ppp +libiwinfo-lua +IPV6:luci-proto-ipv6 \
+       +rpcd-mod-rrdns
+
+PKG_LICENSE:=Apache-2.0
 
 include ../../luci.mk
 
index eb80dcb..15cb537 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=Lua library for IP calculation and routing information
 LUCI_DEPENDS:=+liblua +libnl-tiny
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index 069886d..ededc1f 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=LuCI JSON library
 LUCI_DEPENDS:=
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index 41800fe..bec5f83 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=NIXIO POSIX library
 LUCI_DEPENDS:=+PACKAGE_luci-lib-nixio_openssl:libopenssl +PACKAGE_luci-lib-nixio_cyassl:libcyassl +liblua
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index 70b95e8..eefee10 100644 (file)
@@ -10,6 +10,7 @@ LUCI_TITLE:=RSA/X.509 Key Generator (required for LuCId SSL support)
 LUCI_DEPENDS:=+liblua
 
 PKG_USE_MIPS16:=0
+PKG_LICENSE:=LGPL-2.1
 
 include ../../luci.mk
 
diff --git a/libs/rpcd-mod-rrdns/Makefile b/libs/rpcd-mod-rrdns/Makefile
new file mode 100644 (file)
index 0000000..f0bf140
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2016-2017 Jo-Philipp Wich <jo@mein.io>
+#
+# Licensed under the Apache License, Version 2.0.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=rpcd-mod-rrdns
+PKG_VERSION:=20170710
+PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
+
+PKG_LICENSE:=Apache-2.0
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Build/Prepare
+       $(INSTALL_DIR) $(PKG_BUILD_DIR)
+       $(CP) ./src/* $(PKG_BUILD_DIR)/
+endef
+
+define Package/rpcd-mod-rrdns
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Rapid reverse DNS rpcd module
+  DEPENDS:=+rpcd +libubox +libubus
+endef
+
+define Package/rpcd-mod-rrdns/description
+ Provides rapid mass reverse DNS lookup functionality.
+endef
+
+define Package/rpcd-mod-rrdns/install
+       $(INSTALL_DIR) $(1)/usr/lib/rpcd
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/rrdns.so $(1)/usr/lib/rpcd/
+endef
+
+define Package/rpcd-mod-rrdns/postinst
+#!/bin/sh
+killall -HUP rpcd 2>/dev/null
+exit 0
+endef
+
+$(eval $(call BuildPackage,rpcd-mod-rrdns))
diff --git a/libs/rpcd-mod-rrdns/src/CMakeLists.txt b/libs/rpcd-mod-rrdns/src/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ace6ac8
--- /dev/null
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 2.6)
+
+PROJECT(rpcd-mod-rrdns C)
+
+ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -g3 -Wmissing-declarations)
+
+SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
+
+IF(APPLE)
+  INCLUDE_DIRECTORIES(/opt/local/include)
+  LINK_DIRECTORIES(/opt/local/lib)
+ENDIF()
+
+FIND_LIBRARY(resolv NAMES resolv)
+IF(resolv STREQUAL "LIBS-NOTFOUND")
+  SET(resolv "")
+ENDIF()
+
+ADD_LIBRARY(rpcd-mod-rrdns MODULE rrdns.c)
+TARGET_LINK_LIBRARIES(rpcd-mod-rrdns ubox ubus ${resolv})
+SET_TARGET_PROPERTIES(rpcd-mod-rrdns PROPERTIES OUTPUT_NAME rrdns PREFIX "")
+
+INSTALL(TARGETS rpcd-mod-rrdns LIBRARY DESTINATION lib)
diff --git a/libs/rpcd-mod-rrdns/src/rrdns.c b/libs/rpcd-mod-rrdns/src/rrdns.c
new file mode 100644 (file)
index 0000000..691db9c
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * rrdns - Rapid Reverse DNS lookup plugin for the UBUS RPC server
+ *
+ *   Copyright (C) 2016 Jo-Philipp Wich <jow@openwrt.org>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <arpa/nameser.h>
+#include <arpa/inet.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <resolv.h>
+
+#include <libubox/avl.h>
+#include <libubox/usock.h>
+#include <libubox/uloop.h>
+
+#include <rpcd/plugin.h>
+
+#include "rrdns.h"
+
+
+enum {
+       RPC_L_ADDRS,
+       RPC_L_TIMEOUT,
+       RPC_L_SERVER,
+       RPC_L_PORT,
+       RPC_L_LIMIT,
+       __RPC_L_MAX,
+};
+
+static const struct blobmsg_policy rpc_lookup_policy[__RPC_L_MAX] = {
+       [RPC_L_ADDRS]   = { .name = "addrs",   .type = BLOBMSG_TYPE_ARRAY  },
+       [RPC_L_TIMEOUT] = { .name = "timeout", .type = BLOBMSG_TYPE_INT32  },
+       [RPC_L_SERVER]  = { .name = "server",  .type = BLOBMSG_TYPE_STRING },
+       [RPC_L_PORT]    = { .name = "port",    .type = BLOBMSG_TYPE_INT16  },
+       [RPC_L_LIMIT]   = { .name = "limit",   .type = BLOBMSG_TYPE_INT32  },
+};
+
+
+static int
+rrdns_cmp_id(const void *k1, const void *k2, void *ptr)
+{
+       const uint16_t *id1 = k1, *id2 = k2;
+       return (*id1 - *id2);
+}
+
+static int
+rrdns_cmp_addr(const void *k1, const void *k2, void *ptr)
+{
+       const struct in6_addr *a1 = k1, *a2 = k2;
+       return memcmp(a1, a2, sizeof(*a1));
+}
+
+static int
+rrdns_parse_response(struct rrdns_context *rctx)
+{
+       int n, len;
+       uint16_t id;
+       struct rrdns_request *req;
+       unsigned char res[512];
+       char buf[INET6_ADDRSTRLEN], dname[MAXDNAME];
+       HEADER *hdr;
+       ns_msg handle;
+       ns_rr rr;
+
+       len = recv(rctx->socket.fd, res, sizeof(res), 0);
+
+       if (len < sizeof(*hdr))
+               return -ENODATA;
+
+       hdr = (HEADER *)res;
+       id  = hdr->id;
+       req = avl_find_element(&rctx->request_ids, &id, req, by_id);
+
+       if (!req)
+               return -ENOENT;
+
+       avl_delete(&rctx->request_ids, &req->by_id);
+
+       if (ns_initparse(res, len, &handle))
+               return -EINVAL;
+
+       for (n = 0; n < ns_msg_count(handle, ns_s_an); n++) {
+               if (ns_parserr(&handle, ns_s_an, n, &rr))
+                       return -EINVAL;
+
+               if (ns_rr_type(rr) != ns_t_ptr)
+                       continue;
+
+               if (ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
+                                      ns_rr_rdata(rr), dname, sizeof(dname)) < 0)
+                       return -EINVAL;
+
+               inet_ntop(req->family, &req->addr, buf, sizeof(buf));
+               blobmsg_add_string(&rctx->blob, buf, dname);
+       }
+
+       return 0;
+}
+
+static int
+rrdns_next_query(struct rrdns_context *rctx)
+{
+       const char *addr = NULL, *hex = "0123456789abcdef";
+       struct rrdns_request *req;
+       int i, alen, family;
+       char *p, dname[73];
+
+       union {
+               unsigned char uchar[4];
+               struct in6_addr in6;
+               struct in_addr in;
+       } a = { };
+
+       union {
+               unsigned char buf[512];
+               HEADER hdr;
+       } msg;
+
+       if (rctx->addr_rem > 0 &&
+           blob_pad_len(rctx->addr_cur) <= rctx->addr_rem &&
+           blob_pad_len(rctx->addr_cur) >= sizeof(struct blob_attr)) {
+
+               addr = blobmsg_get_string(rctx->addr_cur);
+               rctx->addr_rem -= blob_pad_len(rctx->addr_cur);
+               rctx->addr_cur = blob_next(rctx->addr_cur);
+       }
+
+       if (!addr)
+               return 0;
+
+       if (inet_pton(AF_INET6, addr, &a.in6)) {
+               memset(dname, 0, sizeof(dname));
+
+               for (i = 0, p = dname; i < 16; i++) {
+                       *p++ = hex[a.in6.s6_addr[15-i] % 16];
+                       *p++ = '.';
+                       *p++ = hex[a.in6.s6_addr[15-i] / 16];
+                       *p++ = '.';
+               }
+
+               p += snprintf(p, p - dname - 1, "ip6.arpa");
+
+               family = AF_INET6;
+               alen = p - dname;
+       }
+       else if (inet_pton(AF_INET, addr, &a.in)) {
+               family = AF_INET;
+               alen = snprintf(dname, sizeof(dname), "%u.%u.%u.%u.in-addr.arpa",
+                               a.uchar[3], a.uchar[2], a.uchar[1], a.uchar[0]);
+       }
+       else {
+               return -EINVAL;
+       }
+
+       alen = res_mkquery(QUERY, dname, C_IN, T_PTR, NULL, 0, NULL,
+                          msg.buf, sizeof(msg.buf));
+
+       if (alen < 0)
+               return alen;
+
+       if (avl_find(&rctx->request_addrs, &a.in6))
+               return -ENOTUNIQ;
+
+       if (send(rctx->socket.fd, msg.buf, alen, 0) != alen)
+               return -errno;
+
+       req = calloc(1, sizeof(*req));
+
+       if (!req)
+               return -ENOMEM;
+
+       req->id = msg.hdr.id;
+       req->by_id.key = &req->id;
+       avl_insert(&rctx->request_ids, &req->by_id);
+
+       req->family = family;
+       req->addr.in6 = a.in6;
+       req->by_addr.key = &req->addr.in6;
+       avl_insert(&rctx->request_addrs, &req->by_addr);
+
+       return 0;
+}
+
+static void
+rdns_shutdown(struct rrdns_context *rctx)
+{
+       struct rrdns_request *req, *tmp;
+
+       uloop_timeout_cancel(&rctx->timeout);
+       uloop_fd_delete(&rctx->socket);
+
+       close(rctx->socket.fd);
+
+       ubus_send_reply(rctx->context, &rctx->request, rctx->blob.head);
+       ubus_complete_deferred_request(rctx->context, &rctx->request,
+                                      UBUS_STATUS_OK);
+
+       avl_remove_all_elements(&rctx->request_addrs, req, by_addr, tmp)
+               free(req);
+
+       blob_buf_free(&rctx->blob);
+       free(rctx);
+}
+
+static void
+rrdns_handle_timeout(struct uloop_timeout *utm)
+{
+       struct rrdns_context *rctx =
+               container_of(utm, struct rrdns_context, timeout);
+
+       rdns_shutdown(rctx);
+}
+
+static void
+rrdns_handle_response(struct uloop_fd *ufd, unsigned int ev)
+{
+       struct rrdns_context *rctx =
+               container_of(ufd, struct rrdns_context, socket);
+
+       int err = rrdns_parse_response(rctx);
+
+       if (err != -ENODATA && err != -ENOENT)
+               rrdns_next_query(rctx);
+
+       if (avl_is_empty(&rctx->request_ids))
+               rdns_shutdown(rctx);
+}
+
+static char *
+rrdns_find_nameserver(void)
+{
+       static char line[2*INET6_ADDRSTRLEN];
+       struct in6_addr in6;
+       FILE *resolvconf;
+       char *p;
+
+       resolvconf = fopen("/etc/resolv.conf", "r");
+
+       if (!resolvconf)
+               return NULL;
+
+       while (fgets(line, sizeof(line), resolvconf)) {
+               p = strtok(line, " \t");
+
+               if (!p || strcmp(p, "nameserver"))
+                       continue;
+
+               p = strtok(NULL, " \t\r\n");
+
+               if (!p)
+                       continue;
+
+               if (!inet_pton(AF_INET6, p, &in6) && !inet_pton(AF_INET, p, &in6))
+                       continue;
+
+               fclose(resolvconf);
+               return p;
+       }
+
+       fclose(resolvconf);
+       return NULL;
+}
+
+static int
+rpc_rrdns_lookup(struct ubus_context *ctx, struct ubus_object *obj,
+                    struct ubus_request_data *req, const char *method,
+                    struct blob_attr *msg)
+{
+       int port = 53, limit = RRDNS_DEF_LIMIT, timeout = RRDNS_DEF_TIMEOUT;
+       struct blob_attr *tb[__RPC_L_MAX];
+       struct rrdns_context *rctx;
+       const char *server = NULL;
+
+       blobmsg_parse(rpc_lookup_policy, __RPC_L_MAX, tb,
+                     blob_data(msg), blob_len(msg));
+
+       if (tb[RPC_L_PORT])
+               port = blobmsg_get_u16(tb[RPC_L_PORT]);
+
+       if (tb[RPC_L_LIMIT])
+               limit = blobmsg_get_u32(tb[RPC_L_LIMIT]);
+
+       if (tb[RPC_L_TIMEOUT])
+               timeout = blobmsg_get_u32(tb[RPC_L_TIMEOUT]);
+
+       if (tb[RPC_L_SERVER])
+               server = blobmsg_get_string(tb[RPC_L_SERVER]);
+
+
+       if (!tb[RPC_L_ADDRS])
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       if (port <= 0)
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       if (limit <= 0 || limit > RRDNS_MAX_LIMIT)
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       if (timeout <= 0 || timeout > RRDNS_MAX_TIMEOUT)
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+
+       if (!server || !*server)
+               server = rrdns_find_nameserver();
+
+       if (!server)
+               return UBUS_STATUS_NOT_FOUND;
+
+       rctx = calloc(1, sizeof(*rctx));
+
+       if (!rctx)
+               return UBUS_STATUS_UNKNOWN_ERROR;
+
+       rctx->socket.fd = usock(USOCK_UDP, server, usock_port(port));
+
+       if (rctx->socket.fd < 0) {
+               free(rctx);
+               return UBUS_STATUS_UNKNOWN_ERROR;
+       }
+
+       rctx->context = ctx;
+       rctx->addr_cur = blobmsg_data(tb[RPC_L_ADDRS]);
+       rctx->addr_rem = blobmsg_data_len(tb[RPC_L_ADDRS]);
+
+       avl_init(&rctx->request_ids, rrdns_cmp_id, false, NULL);
+       avl_init(&rctx->request_addrs, rrdns_cmp_addr, false, NULL);
+
+       rctx->timeout.cb = rrdns_handle_timeout;
+       uloop_timeout_set(&rctx->timeout, timeout);
+
+       rctx->socket.cb = rrdns_handle_response;
+       uloop_fd_add(&rctx->socket, ULOOP_READ);
+
+       blob_buf_init(&rctx->blob, 0);
+
+       while (limit--)
+               rrdns_next_query(rctx);
+
+       ubus_defer_request(ctx, req, &rctx->request);
+
+       return UBUS_STATUS_OK;
+}
+
+
+static int
+rpc_rrdns_api_init(const struct rpc_daemon_ops *o, struct ubus_context *ctx)
+{
+       static const struct ubus_method rrdns_methods[] = {
+               UBUS_METHOD("lookup", rpc_rrdns_lookup, rpc_lookup_policy),
+       };
+
+       static struct ubus_object_type rrdns_type =
+               UBUS_OBJECT_TYPE("rpcd-rrdns", rrdns_methods);
+
+       static struct ubus_object obj = {
+               .name = "network.rrdns",
+               .type = &rrdns_type,
+               .methods = rrdns_methods,
+               .n_methods = ARRAY_SIZE(rrdns_methods),
+       };
+
+       return ubus_add_object(ctx, &obj);
+}
+
+struct rpc_plugin rpc_plugin = {
+       .init = rpc_rrdns_api_init
+};
diff --git a/libs/rpcd-mod-rrdns/src/rrdns.h b/libs/rpcd-mod-rrdns/src/rrdns.h
new file mode 100644 (file)
index 0000000..3f95116
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * rrdns - Rapid Reverse DNS lookup plugin for the UBUS RPC server
+ *
+ *   Copyright (C) 2016-2017 Jo-Philipp Wich <jo@mein.io>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <libubus.h>
+#include <libubox/avl.h>
+#include <libubox/uloop.h>
+
+#define RRDNS_MAX_TIMEOUT 5000
+#define RRDNS_DEF_TIMEOUT 250
+
+#define RRDNS_MAX_LIMIT 1000
+#define RRDNS_DEF_LIMIT 10
+
+
+struct rrdns_request {
+       struct avl_node by_id;
+       struct avl_node by_addr;
+       uint16_t id;
+       uint16_t family;
+       union {
+               struct in_addr in;
+               struct in6_addr in6;
+       } addr;
+};
+
+struct rrdns_context {
+       struct ubus_context *context;
+       struct ubus_request_data request;
+       struct uloop_timeout timeout;
+       struct blob_attr *addr_cur;
+       int addr_rem;
+       struct uloop_fd socket;
+       struct blob_buf blob;
+       struct avl_tree request_ids;
+       struct avl_tree request_addrs;
+};
index 753ff25..cc57ce8 100644 (file)
@@ -17,6 +17,7 @@ LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua +
 PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2
 PKG_SOURCE_URL:=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/luasrcdiet
 PKG_MD5SUM:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea
+PKG_LICENSE:=Apache-2.0
 
 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1
 
index 8e66cbc..4be917d 100644 (file)
@@ -727,7 +727,7 @@ function cbi_filebrowser(id, defpath) {
        browser.focus();
 }
 
-function cbi_browser_init(id, defpath)
+function cbi_browser_init(id, resource, defpath)
 {
        function cbi_browser_btnclick(e) {
                cbi_filebrowser(id, defpath);
@@ -738,7 +738,7 @@ function cbi_browser_init(id, defpath)
 
        var btn = document.createElement('img');
        btn.className = 'cbi-image-button';
-       btn.src = cbi_strings.path.resource + '/cbi/folder.gif';
+       btn.src = (resource || cbi_strings.path.resource) + '/cbi/folder.gif';
        field.parentNode.insertBefore(btn, field.nextSibling);
 
        cbi_bind(btn, 'click', cbi_browser_btnclick);
@@ -805,7 +805,7 @@ function cbi_dynlist_init(parent, datatype, optional, choices)
                        parent.appendChild(b);
                        if (datatype == 'file')
                        {
-                               cbi_browser_init(t.id, parent.getAttribute('data-browser-path'));
+                               cbi_browser_init(t.id, null, parent.getAttribute('data-browser-path'));
                        }
 
                        parent.appendChild(document.createElement('br'));
index 0bd1945..1b684aa 100644 (file)
@@ -14,8 +14,6 @@ uci = require "luci.model.uci"
 i18n = require "luci.i18n"
 _M.fs = fs
 
-authenticator = {}
-
 -- Index table
 local index = nil
 
@@ -101,24 +99,6 @@ function error500(message)
        return false
 end
 
-function authenticator.htmlauth(validator, accs, default, template)
-       local user = http.formvalue("luci_username")
-       local pass = http.formvalue("luci_password")
-
-       if user and validator(user, pass) then
-               return user
-       end
-
-       require("luci.i18n")
-       require("luci.template")
-       context.path = {}
-       http.status(403, "Forbidden")
-       luci.template.render(template or "sysauth", {duser=default, fuser=user})
-
-       return false
-
-end
-
 function httpdispatch(request, prefix)
        http.context.request = request
 
@@ -188,6 +168,44 @@ function test_post_security()
        return true
 end
 
+local function session_retrieve(sid, allowed_users)
+       local sdat = util.ubus("session", "get", { ubus_rpc_session = sid })
+
+       if type(sdat) == "table" and
+          type(sdat.values) == "table" and
+          type(sdat.values.token) == "string" and
+          (not allowed_users or
+           util.contains(allowed_users, sdat.values.username))
+       then
+               return sid, sdat.values
+       end
+
+       return nil, nil
+end
+
+local function session_setup(user, pass, allowed_users)
+       if util.contains(allowed_users, user) then
+               local login = util.ubus("session", "login", {
+                       username = user,
+                       password = pass,
+                       timeout  = tonumber(luci.config.sauth.sessiontime)
+               })
+
+               if type(login) == "table" and
+                  type(login.ubus_rpc_session) == "string"
+               then
+                       util.ubus("session", "set", {
+                               ubus_rpc_session = login.ubus_rpc_session,
+                               values = { token = sys.uniqueid(16) }
+                       })
+
+                       return session_retrieve(login.ubus_rpc_session)
+               end
+       end
+
+       return nil, nil
+end
+
 function dispatch(request)
        --context._disable_memtrace = require "luci.debug".trap_memtrace("l")
        local ctx = context
@@ -332,74 +350,65 @@ function dispatch(request)
        )
 
        if track.sysauth then
-               local authen = type(track.sysauth_authenticator) == "function"
-                and track.sysauth_authenticator
-                or authenticator[track.sysauth_authenticator]
+               local authen = track.sysauth_authenticator
+               local _, sid, sdat, default_user, allowed_users
 
-               local def  = (type(track.sysauth) == "string") and track.sysauth
-               local accs = def and {track.sysauth} or track.sysauth
-               local sess = ctx.authsession
-               if not sess then
-                       sess = http.getcookie("sysauth")
-                       sess = sess and sess:match("^[a-f0-9]*$")
+               if type(authen) == "string" and authen ~= "htmlauth" then
+                       error500("Unsupported authenticator %q configured" % authen)
+                       return
                end
 
-               local sdat = (util.ubus("session", "get", { ubus_rpc_session = sess }) or { }).values
-               local user, token
+               if type(track.sysauth) == "table" then
+                       default_user, allowed_users = nil, track.sysauth
+               else
+                       default_user, allowed_users = track.sysauth, { track.sysauth }
+               end
 
-               if sdat then
-                       user = sdat.user
-                       token = sdat.token
+               if type(authen) == "function" then
+                       _, sid = authen(sys.user.checkpasswd, allowed_users)
                else
-                       local eu = http.getenv("HTTP_AUTH_USER")
-                       local ep = http.getenv("HTTP_AUTH_PASS")
-                       if eu and ep and sys.user.checkpasswd(eu, ep) then
-                               authen = function() return eu end
-                       end
+                       sid = http.getcookie("sysauth")
                end
 
-               if not util.contains(accs, user) then
-                       if authen then
-                               local user, sess = authen(sys.user.checkpasswd, accs, def, track.sysauth_template)
-                               local token
-                               if not user or not util.contains(accs, user) then
-                                       return
-                               else
-                                       if not sess then
-                                               local sdat = util.ubus("session", "create", { timeout = tonumber(luci.config.sauth.sessiontime) })
-                                               if sdat then
-                                                       token = sys.uniqueid(16)
-                                                       util.ubus("session", "set", {
-                                                               ubus_rpc_session = sdat.ubus_rpc_session,
-                                                               values = {
-                                                                       user = user,
-                                                                       token = token,
-                                                                       section = sys.uniqueid(16)
-                                                               }
-                                                       })
-                                                       sess = sdat.ubus_rpc_session
-                                               end
-                                       end
+               sid, sdat = session_retrieve(sid, allowed_users)
 
-                                       if sess and token then
-                                               http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sess, build_url() })
+               if not (sid and sdat) and authen == "htmlauth" then
+                       local user = http.getenv("HTTP_AUTH_USER")
+                       local pass = http.getenv("HTTP_AUTH_PASS")
 
-                                               ctx.authsession = sess
-                                               ctx.authtoken = token
-                                               ctx.authuser = user
+                       if user == nil and pass == nil then
+                               user = http.formvalue("luci_username")
+                               pass = http.formvalue("luci_password")
+                       end
+
+                       sid, sdat = session_setup(user, pass, allowed_users)
+
+                       if not sid then
+                               local tmpl = require "luci.template"
+
+                               context.path = {}
 
-                                               http.redirect(build_url(unpack(ctx.requestpath)))
-                                       end
-                               end
-                       else
                                http.status(403, "Forbidden")
+                               tmpl.render(track.sysauth_template or "sysauth", {
+                                       duser = default_user,
+                                       fuser = user
+                               })
+
                                return
                        end
-               else
-                       ctx.authsession = sess
-                       ctx.authtoken = token
-                       ctx.authuser = user
+
+                       http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sid, build_url() })
+                       http.redirect(build_url(unpack(ctx.requestpath)))
                end
+
+               if not sid or not sdat then
+                       http.status(403, "Forbidden")
+                       return
+               end
+
+               ctx.authsession = sid
+               ctx.authtoken = sdat.token
+               ctx.authuser = sdat.username
        end
 
        if c and require_post_security(c.target) then
index f49fed4..3f8b091 100644 (file)
@@ -63,6 +63,15 @@ if luci.model.network:has_ipv6() then
        ip6prefix.datatype = "ip6addr"
        ip6prefix:depends("ip6assign", "")
 
+       local ip6ifaceid = s:taboption("general", Value, "ip6ifaceid", translate("IPv6 suffix"),
+               translate("Optional. Allowed values: 'eui64', 'random', fixed value like '::1' " ..
+                       "or '::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a " ..
+                       "delegating server, use the suffix (like '::1') to form the IPv6 address " ..
+                       "('a:b:c:d::1') for the interface."))
+       ip6ifaceid.datatype = "ip6hostid"
+       ip6ifaceid.placeholder = "::1"
+       ip6ifaceid.rmempty = true
+
 end
 
 
index a972717..99f3ee2 100644 (file)
@@ -117,45 +117,12 @@ end
 
 net = {}
 
---                     The following fields are defined for arp entry objects:
---                     { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }
-function net.arptable(callback)
-       local arp = (not callback) and {} or nil
-       local e, r, v
-       if fs.access("/proc/net/arp") then
-               for e in io.lines("/proc/net/arp") do
-                       local r = { }, v
-                       for v in e:gmatch("%S+") do
-                               r[#r+1] = v
-                       end
-
-                       if r[1] ~= "IP" then
-                               local x = {
-                                       ["IP address"] = r[1],
-                                       ["HW type"]    = r[2],
-                                       ["Flags"]      = r[3],
-                                       ["HW address"] = r[4],
-                                       ["Mask"]       = r[5],
-                                       ["Device"]     = r[6]
-                               }
-
-                               if callback then
-                                       callback(x)
-                               else
-                                       arp = arp or { }
-                                       arp[#arp+1] = x
-                               end
-                       end
-               end
-       end
-       return arp
-end
-
 local function _nethints(what, callback)
        local _, k, e, mac, ip, name
        local cur = uci.cursor()
        local ifn = { }
        local hosts = { }
+       local lookup = { }
 
        local function _add(i, ...)
                local k = select(i, ...)
@@ -224,8 +191,20 @@ local function _nethints(what, callback)
                end
        end
 
+       for _, e in pairs(hosts) do
+               lookup[#lookup+1] = (what > 1) and e[what] or (e[2] or e[3])
+       end
+
+       if #lookup > 0 then
+               lookup = luci.util.ubus("network.rrdns", "lookup", {
+                       addrs   = lookup,
+                       timeout = 250,
+                       limit   = 1000
+               }) or { }
+       end
+
        for _, e in luci.util.kspairs(hosts) do
-               callback(e[1], e[2], e[3], e[4])
+               callback(e[1], e[2], e[3], lookup[e[2]] or lookup[e[3]] or e[4])
        end
 end
 
@@ -234,17 +213,17 @@ end
 function net.mac_hints(callback)
        if callback then
                _nethints(1, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4
+                       name = name or v4
                        if name and name ~= mac then
-                               callback(mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4)
+                               callback(mac, name or v4)
                        end
                end)
        else
                local rv = { }
                _nethints(1, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4
+                       name = name or v4
                        if name and name ~= mac then
-                               rv[#rv+1] = { mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 }
+                               rv[#rv+1] = { mac, name or v4 }
                        end
                end)
                return rv
@@ -256,7 +235,7 @@ end
 function net.ipv4_hints(callback)
        if callback then
                _nethints(2, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v4, nil, 100) or mac
+                       name = name or mac
                        if name and name ~= v4 then
                                callback(v4, name)
                        end
@@ -264,7 +243,7 @@ function net.ipv4_hints(callback)
        else
                local rv = { }
                _nethints(2, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v4, nil, 100) or mac
+                       name = name or mac
                        if name and name ~= v4 then
                                rv[#rv+1] = { v4, name }
                        end
@@ -278,7 +257,7 @@ end
 function net.ipv6_hints(callback)
        if callback then
                _nethints(3, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v6, nil, 100) or mac
+                       name = name or mac
                        if name and name ~= v6 then
                                callback(v6, name)
                        end
@@ -286,7 +265,7 @@ function net.ipv6_hints(callback)
        else
                local rv = { }
                _nethints(3, function(mac, v4, v6, name)
-                       name = name or nixio.getnameinfo(v6, nil, 100) or mac
+                       name = name or mac
                        if name and name ~= v6 then
                                rv[#rv+1] = { v6, name }
                        end
@@ -378,145 +357,6 @@ function net.devices()
 end
 
 
-function net.deviceinfo()
-       local devs = {}
-       for k, v in ipairs(nixio.getifaddrs()) do
-               if v.family == "packet" then
-                       local d = v.data
-                       d[1] = d.rx_bytes
-                       d[2] = d.rx_packets
-                       d[3] = d.rx_errors
-                       d[4] = d.rx_dropped
-                       d[5] = 0
-                       d[6] = 0
-                       d[7] = 0
-                       d[8] = d.multicast
-                       d[9] = d.tx_bytes
-                       d[10] = d.tx_packets
-                       d[11] = d.tx_errors
-                       d[12] = d.tx_dropped
-                       d[13] = 0
-                       d[14] = d.collisions
-                       d[15] = 0
-                       d[16] = 0
-                       devs[v.name] = d
-               end
-       end
-       return devs
-end
-
-
---                     The following fields are defined for route entry tables:
---                     { "dest", "gateway", "metric", "refcount", "usecount", "irtt",
---                       "flags", "device" }
-function net.routes(callback)
-       local routes = { }
-
-       for line in io.lines("/proc/net/route") do
-
-               local dev, dst_ip, gateway, flags, refcnt, usecnt, metric,
-                         dst_mask, mtu, win, irtt = line:match(
-                       "([^%s]+)\t([A-F0-9]+)\t([A-F0-9]+)\t([A-F0-9]+)\t" ..
-                       "(%d+)\t(%d+)\t(%d+)\t([A-F0-9]+)\t(%d+)\t(%d+)\t(%d+)"
-               )
-
-               if dev then
-                       gateway  = luci.ip.Hex( gateway,  32, luci.ip.FAMILY_INET4 )
-                       dst_mask = luci.ip.Hex( dst_mask, 32, luci.ip.FAMILY_INET4 )
-                       dst_ip   = luci.ip.Hex(
-                               dst_ip, dst_mask:prefix(dst_mask), luci.ip.FAMILY_INET4
-                       )
-
-                       local rt = {
-                               dest     = dst_ip,
-                               gateway  = gateway,
-                               metric   = tonumber(metric),
-                               refcount = tonumber(refcnt),
-                               usecount = tonumber(usecnt),
-                               mtu      = tonumber(mtu),
-                               window   = tonumber(window),
-                               irtt     = tonumber(irtt),
-                               flags    = tonumber(flags, 16),
-                               device   = dev
-                       }
-
-                       if callback then
-                               callback(rt)
-                       else
-                               routes[#routes+1] = rt
-                       end
-               end
-       end
-
-       return routes
-end
-
---                     The following fields are defined for route entry tables:
---                     { "source", "dest", "nexthop", "metric", "refcount", "usecount",
---                       "flags", "device" }
-function net.routes6(callback)
-       if fs.access("/proc/net/ipv6_route", "r") then
-               local routes = { }
-
-               for line in io.lines("/proc/net/ipv6_route") do
-
-                       local dst_ip, dst_prefix, src_ip, src_prefix, nexthop,
-                                 metric, refcnt, usecnt, flags, dev = line:match(
-                               "([a-f0-9]+) ([a-f0-9]+) " ..
-                               "([a-f0-9]+) ([a-f0-9]+) " ..
-                               "([a-f0-9]+) ([a-f0-9]+) " ..
-                               "([a-f0-9]+) ([a-f0-9]+) " ..
-                               "([a-f0-9]+) +([^%s]+)"
-                       )
-
-                       if dst_ip and dst_prefix and
-                          src_ip and src_prefix and
-                          nexthop and metric and
-                          refcnt and usecnt and
-                          flags and dev
-                       then
-                               src_ip = luci.ip.Hex(
-                                       src_ip, tonumber(src_prefix, 16), luci.ip.FAMILY_INET6, false
-                               )
-
-                               dst_ip = luci.ip.Hex(
-                                       dst_ip, tonumber(dst_prefix, 16), luci.ip.FAMILY_INET6, false
-                               )
-
-                               nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )
-
-                               local rt = {
-                                       source   = src_ip,
-                                       dest     = dst_ip,
-                                       nexthop  = nexthop,
-                                       metric   = tonumber(metric, 16),
-                                       refcount = tonumber(refcnt, 16),
-                                       usecount = tonumber(usecnt, 16),
-                                       flags    = tonumber(flags, 16),
-                                       device   = dev,
-
-                                       -- lua number is too small for storing the metric
-                                       -- add a metric_raw field with the original content
-                                       metric_raw = metric
-                               }
-
-                               if callback then
-                                       callback(rt)
-                               else
-                                       routes[#routes+1] = rt
-                               end
-                       end
-               end
-
-               return routes
-       end
-end
-
-function net.pingtest(host)
-       return os.execute("ping -c1 '"..host:gsub("'", '').."' >/dev/null 2>&1")
-end
-
-
 process = {}
 
 function process.info(key)
index def4c10..9f4efdd 100644 (file)
@@ -419,9 +419,6 @@ msgstr "Estacions associades"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticació"
 
@@ -1449,6 +1446,9 @@ msgstr "Longitud de prefix IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adreça IPv6"
 
@@ -1555,6 +1555,9 @@ msgstr "Paquets instal·lats"
 msgid "Interface"
 msgstr "Interfície"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configuració d'interfície"
 
@@ -1680,9 +1683,6 @@ msgstr "Duració de validitat d'arrendament"
 msgid "Leasefile"
 msgstr "Fitxer d'arrendament"
 
-msgid "Leasetime"
-msgstr "Duració d'arrendament"
-
 msgid "Leasetime remaining"
 msgstr "Duració d'arrendament restant"
 
@@ -2184,15 +2184,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3668,10 +3672,6 @@ msgstr "qualsevol"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estàtic"
-
 msgid "baseT"
 msgstr ""
 
@@ -3748,9 +3748,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "no"
 
@@ -3784,12 +3781,6 @@ msgstr "encaminat"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3826,6 +3817,13 @@ msgstr "sí"
 msgid "« Back"
 msgstr "« Enrere"
 
+#~ msgid "Leasetime"
+#~ msgstr "Duració d'arrendament"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "estàtic"
+
 #~ msgid "AR Support"
 #~ msgstr "Suport AR"
 
index b76b66c..9efe3b7 100644 (file)
@@ -419,9 +419,6 @@ msgstr "Připojení klienti"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentizace"
 
@@ -1460,6 +1457,9 @@ msgstr "Délka IPv6 prefixu"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6 adresa"
 
@@ -1566,6 +1566,9 @@ msgstr "Nainstalované balíčky"
 msgid "Interface"
 msgstr "Rozhraní"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Konfigurace rozhraní"
 
@@ -1693,9 +1696,6 @@ msgstr "Doba platnosti zápůjčky"
 msgid "Leasefile"
 msgstr "Soubor zájpůjček"
 
-msgid "Leasetime"
-msgstr "Doba trvání zápůjčky"
-
 msgid "Leasetime remaining"
 msgstr "Zbývající doba trvání zápůjčky"
 
@@ -2205,15 +2205,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3738,9 +3742,6 @@ msgstr "libovolný"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3817,9 +3818,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "ne"
 
@@ -3853,12 +3851,6 @@ msgstr "směrované"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3895,6 +3887,9 @@ msgstr "ano"
 msgid "« Back"
 msgstr "« Zpět"
 
+#~ msgid "Leasetime"
+#~ msgstr "Doba trvání zápůjčky"
+
 #~ msgid "AR Support"
 #~ msgstr "Podpora AR"
 
index 5418b78..fa26a1d 100644 (file)
@@ -38,13 +38,13 @@ msgid "-- custom --"
 msgstr "-- benutzerdefiniert --"
 
 msgid "-- match by device --"
-msgstr ""
+msgstr "-- anhand Gerätedatei selektieren --"
 
 msgid "-- match by label --"
-msgstr ""
+msgstr "-- anhand Label selektieren --"
 
 msgid "-- match by uuid --"
-msgstr ""
+msgstr "-- UUID vergleichen --"
 
 msgid "1 Minute Load:"
 msgstr "Systemlast (1 Minute):"
@@ -53,7 +53,7 @@ msgid "15 Minute Load:"
 msgstr "Systemlast (15 Minuten):"
 
 msgid "4-character hexadecimal ID"
-msgstr ""
+msgstr "vierstellige hexadezimale ID"
 
 msgid "464XLAT (CLAT)"
 msgstr ""
@@ -62,25 +62,25 @@ msgid "5 Minute Load:"
 msgstr "Systemlast (5 Minuten):"
 
 msgid "6-octet identifier as a hex string - no colons"
-msgstr ""
+msgstr "sechstellige hexadezimale ID (ohne Doppelpunkte)"
 
 msgid "802.11r Fast Transition"
 msgstr ""
 
 msgid "802.11w Association SA Query maximum timeout"
-msgstr ""
+msgstr "Maximales Timeout für Quelladressprüfungen (SA Query)"
 
 msgid "802.11w Association SA Query retry timeout"
-msgstr ""
+msgstr "Wiederholungsintervall für Quelladressprüfungen (SA Query)"
 
 msgid "802.11w Management Frame Protection"
-msgstr ""
+msgstr "802.11w: Schutz von Management-Frames aktivieren"
 
 msgid "802.11w maximum timeout"
-msgstr ""
+msgstr "802.11w: Maximales Timeout"
 
 msgid "802.11w retry timeout"
-msgstr ""
+msgstr "802.11w: Wiederholungsintervall"
 
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
@@ -119,7 +119,7 @@ msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway"
 msgstr "IPv6-Gateway"
 
 msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
-msgstr ""
+msgstr "IPv6-Suffix (hexadezimal)"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
 msgstr "LED Konfiguration"
@@ -312,7 +312,7 @@ msgstr ""
 "genutzt wird"
 
 msgid "Allowed IPs"
-msgstr ""
+msgstr "Erlaubte IP-Adressen"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
@@ -320,7 +320,7 @@ msgid ""
 msgstr ""
 
 msgid "Always announce default router"
-msgstr ""
+msgstr "Immer Defaultrouter ankündigen"
 
 msgid "Annex"
 msgstr ""
@@ -341,7 +341,7 @@ msgid "Annex A G.992.5"
 msgstr ""
 
 msgid "Annex B (all)"
-msgstr ""
+msgstr "Annex B (alle Arten)"
 
 msgid "Annex B G.992.1"
 msgstr ""
@@ -353,13 +353,13 @@ msgid "Annex B G.992.5"
 msgstr ""
 
 msgid "Annex J (all)"
-msgstr ""
+msgstr "Annex J (alle Arten)"
 
 msgid "Annex L G.992.3 POTS 1"
 msgstr ""
 
 msgid "Annex M (all)"
-msgstr ""
+msgstr "Annex M (alle Arten)"
 
 msgid "Annex M G.992.3"
 msgstr ""
@@ -369,21 +369,23 @@ msgstr ""
 
 msgid "Announce as default router even if no public prefix is available."
 msgstr ""
+"Kündigt im Netzwerk einen Defaultrouter an, auch wenn kein öffentlicher "
+"Adressbereich verfügbar ist."
 
 msgid "Announced DNS domains"
-msgstr ""
+msgstr "Angekündigte Suchdomains"
 
 msgid "Announced DNS servers"
-msgstr ""
+msgstr "Angekündigte DNS Server"
 
 msgid "Anonymous Identity"
-msgstr ""
+msgstr "Anonyme Identität"
 
 msgid "Anonymous Mount"
-msgstr ""
+msgstr "automatische Mountpunkte"
 
 msgid "Anonymous Swap"
-msgstr ""
+msgstr "automatische Swap-Aktivierung"
 
 msgid "Antenna 1"
 msgstr "Antenne 1"
@@ -406,6 +408,8 @@ msgstr "Änderungen werden angewandt"
 msgid ""
 "Assign a part of given length of every public IPv6-prefix to this interface"
 msgstr ""
+"Legt die Größe der dieser Schnittstelle zugewiesenen Partitionen der "
+"öffentlichen IPv6-Präfixe fest."
 
 msgid "Assign interfaces..."
 msgstr "Schnittstellen zuweisen..."
@@ -413,21 +417,20 @@ msgstr "Schnittstellen zuweisen..."
 msgid ""
 "Assign prefix parts using this hexadecimal subprefix ID for this interface."
 msgstr ""
+"Der Schnittstelle zugewiesene Partitionen des Adressraums werden anhand "
+"dieser hexadezimalen ID gewählt."
 
 msgid "Associated Stations"
 msgstr "Assoziierte Clients"
 
 msgid "Auth Group"
-msgstr ""
-
-msgid "AuthGroup"
-msgstr ""
+msgstr "Berechtigungsgruppe"
 
 msgid "Authentication"
 msgstr "Authentifizierung"
 
 msgid "Authentication Type"
-msgstr ""
+msgstr "Authentifizierungstyp"
 
 msgid "Authoritative"
 msgstr "Authoritativ"
@@ -439,25 +442,25 @@ msgid "Auto Refresh"
 msgstr "Automatisches Neuladen"
 
 msgid "Automatic"
-msgstr ""
+msgstr "automatisch"
 
 msgid "Automatic Homenet (HNCP)"
-msgstr ""
+msgstr "automatisches Homenet-Protokoll (HNCP)"
 
 msgid "Automatically check filesystem for errors before mounting"
-msgstr ""
+msgstr "Dateisystem vor dem Einhängen automatisch auf Fehler prüfen"
 
 msgid "Automatically mount filesystems on hotplug"
-msgstr ""
+msgstr "Unkonfigurierte Dateisysteme automatisch einhängen"
 
 msgid "Automatically mount swap on hotplug"
-msgstr ""
+msgstr "Unkonfigurierte SWAP-Partitionen automatisch aktivieren"
 
 msgid "Automount Filesystem"
-msgstr ""
+msgstr "Dateisystem automatisch einhängen"
 
 msgid "Automount Swap"
-msgstr ""
+msgstr "SWAP automatisch aktivieren"
 
 msgid "Available"
 msgstr "Verfügbar"
@@ -508,10 +511,10 @@ msgid "Bad address specified!"
 msgstr "Ungültige Adresse angegeben!"
 
 msgid "Band"
-msgstr ""
+msgstr "Frequenztyp"
 
 msgid "Behind NAT"
-msgstr ""
+msgstr "NAT"
 
 msgid ""
 "Below is the determined list of files to backup. It consists of changed "
@@ -524,13 +527,15 @@ msgstr ""
 "benutzerdefinierte Dateiemuster betroffenen Dateien enthalten."
 
 msgid "Bind interface"
-msgstr ""
+msgstr "An Schnittstelle binden"
 
 msgid "Bind only to specific interfaces rather than wildcard address."
 msgstr ""
+"Nur auf angegebenen Schnittstellen reagieren, anstatt auf allen "
+"Schnittstellen zu antworten."
 
 msgid "Bind the tunnel to this interface (optional)."
-msgstr ""
+msgstr "Tunnelendpunkt an diese Schnittstelle binden (optional)"
 
 msgid "Bitrate"
 msgstr "Bitrate"
@@ -563,12 +568,16 @@ msgid ""
 "Build/distribution specific feed definitions. This file will NOT be "
 "preserved in any sysupgrade."
 msgstr ""
+"Konfiguriert die distributionsspezifischen Paket-Repositories. Diese "
+"Konfiguration wird bei Upgrades NICHT gesichert."
 
 msgid "Buttons"
 msgstr "Knöpfe"
 
 msgid "CA certificate; if empty it will be saved after the first connection."
 msgstr ""
+"CA-Zertifikat (wird beim ersten Verbindungsaufbau automatisch gespeichert "
+"wenn leer). "
 
 msgid "CPU usage (%)"
 msgstr "CPU-Nutzung (%)"
@@ -577,7 +586,7 @@ msgid "Cancel"
 msgstr "Abbrechen"
 
 msgid "Category"
-msgstr ""
+msgstr "Kategorie"
 
 msgid "Chain"
 msgstr "Kette"
@@ -598,10 +607,11 @@ msgid "Check"
 msgstr "Prüfen"
 
 msgid "Check fileystems before mount"
-msgstr ""
+msgstr "Dateisysteme prüfen"
 
 msgid "Check this option to delete the existing networks from this radio."
 msgstr ""
+"Diese Option setzen um existierende Netzwerke auf dem Radio zu löschen."
 
 msgid "Checksum"
 msgstr "Prüfsumme"
@@ -611,7 +621,11 @@ msgid ""
 "<em>unspecified</em> to remove the interface from the associated zone or "
 "fill out the <em>create</em> field to define a new zone and attach the "
 "interface to it."
-msgstr "Diese Schnittstelle gehört bis jetzt zu keiner Firewallzone."
+msgstr ""
+"Ordnet dieser Schnittstelle eine Firewallzone zu. Den Wert "
+"<em>unspezifiziert</em> wählen um die Schnittstelle von der Zone zu lösen "
+"oder das <em>erstellen</em> Feld ausfüllen um eine neue Zone direkt "
+"anzulegen und zuzuweisen."
 
 msgid ""
 "Choose the network(s) you want to attach to this wireless interface or fill "
@@ -624,7 +638,7 @@ msgid "Cipher"
 msgstr "Verschlüsselungsalgorithmus"
 
 msgid "Cisco UDP encapsulation"
-msgstr ""
+msgstr "Cisco UDP-Kapselung"
 
 msgid ""
 "Click \"Generate archive\" to download a tar archive of the current "
@@ -683,7 +697,7 @@ msgid "Connection Limit"
 msgstr "Verbindungslimit"
 
 msgid "Connection to server fails when TLS cannot be used"
-msgstr ""
+msgstr "TLS zwingend vorraussetzen und abbrechen wenn TLS fehlschlägt."
 
 msgid "Connections"
 msgstr "Verbindungen"
@@ -719,15 +733,17 @@ msgid "Custom Interface"
 msgstr "benutzerdefinierte Schnittstelle"
 
 msgid "Custom delegated IPv6-prefix"
-msgstr ""
+msgstr "Delegierter IPv6-Präfix"
 
 msgid ""
 "Custom feed definitions, e.g. private feeds. This file can be preserved in a "
 "sysupgrade."
 msgstr ""
+"Selbst konfigurierte Paket-Repositories, z.B. private oder inoffizielle "
+"Quellen. Diese Konfiguration wird by Upgrades gesichert."
 
 msgid "Custom feeds"
-msgstr ""
+msgstr "Eigene Repositories"
 
 msgid ""
 "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
@@ -753,7 +769,7 @@ msgid "DHCPv6 Leases"
 msgstr "DHCPv6-Leases"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "DHCPv6 Client"
 
 msgid "DHCPv6-Mode"
 msgstr ""
@@ -774,13 +790,13 @@ msgid "DNSSEC"
 msgstr ""
 
 msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "DNSSEC Signaturstatus prüfen"
 
 msgid "DPD Idle Timeout"
-msgstr ""
+msgstr "DPD Inaktivitätstimeout"
 
 msgid "DS-Lite AFTR address"
-msgstr ""
+msgstr "DS-Lite AFTR-Adresse"
 
 msgid "DSL"
 msgstr ""
@@ -789,13 +805,13 @@ msgid "DSL Status"
 msgstr ""
 
 msgid "DSL line mode"
-msgstr ""
+msgstr "DSL Leitungsmodus"
 
 msgid "DUID"
 msgstr "DUID"
 
 msgid "Data Rate"
-msgstr ""
+msgstr "Datenrate"
 
 msgid "Debug"
 msgstr "Debug"
@@ -807,10 +823,10 @@ msgid "Default gateway"
 msgstr "Default Gateway"
 
 msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "Der Standardwert ist zustandslos und zustandsorientiert"
 
 msgid "Default route"
-msgstr ""
+msgstr "Default Route"
 
 msgid "Default state"
 msgstr "Ausgangszustand"
@@ -848,16 +864,16 @@ msgid "Device Configuration"
 msgstr "Gerätekonfiguration"
 
 msgid "Device is rebooting..."
-msgstr ""
+msgstr "Das Gerät startet neu..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "Das Gerät ist nicht erreichbar"
 
 msgid "Diagnostics"
 msgstr "Diagnosen"
 
 msgid "Dial number"
-msgstr ""
+msgstr "Einwahlnummer"
 
 msgid "Directory"
 msgstr "Verzeichnis"
@@ -882,7 +898,7 @@ msgid "Disabled"
 msgstr "Deaktiviert"
 
 msgid "Disabled (default)"
-msgstr ""
+msgstr "Deaktiviert (Standard)"
 
 msgid "Discard upstream RFC1918 responses"
 msgstr "Eingehende RFC1918-Antworten verwerfen"
@@ -897,7 +913,7 @@ msgid "Distance to farthest network member in meters."
 msgstr "Distanz zum am weitesten entfernten Funkpartner in Metern."
 
 msgid "Distribution feeds"
-msgstr ""
+msgstr "Distributionsrepositories"
 
 msgid "Diversity"
 msgstr "Diversität"
@@ -934,7 +950,7 @@ msgid "Domain whitelist"
 msgstr "Domain-Whitelist"
 
 msgid "Don't Fragment"
-msgstr ""
+msgstr "Nicht fragmentieren"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
@@ -974,7 +990,7 @@ msgstr ""
 "Clients mit konfigurierten statischen Leases bedient"
 
 msgid "EA-bits length"
-msgstr ""
+msgstr "EA-Bitlänge"
 
 msgid "EAP-Method"
 msgstr "EAP-Methode"
@@ -986,6 +1002,8 @@ msgid ""
 "Edit the raw configuration data above to fix any error and hit \"Save\" to "
 "reload the page."
 msgstr ""
+"Um die Syntaxfehler zu beheben, bitte die obige unformatierte Konfiguration "
+"anpassen und \"Speichern\" klicken um die Seite neu zu laden."
 
 msgid "Edit this interface"
 msgstr "Diese Schnittstelle bearbeiten"
@@ -1006,7 +1024,7 @@ msgid "Enable HE.net dynamic endpoint update"
 msgstr "Dynamisches HE.net IP-Adress-Update aktivieren"
 
 msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "IPv6 anfordern"
 
 msgid "Enable IPv6 negotiation on the PPP link"
 msgstr "Aushandeln von IPv6-Adressen auf der PPP-Verbindung aktivieren"
@@ -1018,7 +1036,7 @@ msgid "Enable NTP client"
 msgstr "Aktiviere NTP-Client"
 
 msgid "Enable Single DES"
-msgstr ""
+msgstr "Single-DES aktivieren"
 
 msgid "Enable TFTP server"
 msgstr "TFTP-Server aktivieren"
@@ -1027,19 +1045,19 @@ msgid "Enable VLAN functionality"
 msgstr "VLAN-Funktionalität aktivieren"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "WPS-via-Knopfdruck aktivieren, erfordert WPA(2)-PSK"
 
 msgid "Enable learning and aging"
 msgstr "Learning und Aging aktivieren"
 
 msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "Port-Mirroring für eingehende Pakete aktivieren"
 
 msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "Port-Mirroring für ausgehende Pakete aktivieren"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "Das DF-Bit (Nicht fragmentieren) auf gekapselten Paketen setzen."
 
 msgid "Enable this mount"
 msgstr "Diesen Mountpunkt aktivieren"
@@ -1057,6 +1075,8 @@ msgid ""
 "Enables fast roaming among access points that belong to the same Mobility "
 "Domain"
 msgstr ""
+"Aktiviert schnelles Roaming zwischen Access-Points des selben "
+"Mobilitätsbereiches"
 
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Aktiviert das Spanning Tree Protokoll auf dieser Netzwerkbrücke"
@@ -1068,10 +1088,10 @@ msgid "Encryption"
 msgstr "Verschlüsselung"
 
 msgid "Endpoint Host"
-msgstr ""
+msgstr "Entfernter Server"
 
 msgid "Endpoint Port"
-msgstr ""
+msgstr "Entfernter Port"
 
 msgid "Erasing..."
 msgstr "Lösche..."
@@ -1080,7 +1100,7 @@ msgid "Error"
 msgstr "Fehler"
 
 msgid "Errored seconds (ES)"
-msgstr ""
+msgstr "Fehlersekunden (ES)"
 
 msgid "Ethernet Adapter"
 msgstr "Netzwerkschnittstelle"
@@ -1089,7 +1109,7 @@ msgid "Ethernet Switch"
 msgstr "Netzwerk Switch"
 
 msgid "Exclude interfaces"
-msgstr ""
+msgstr "Schnittstellen ausschließen"
 
 msgid "Expand hosts"
 msgstr "Hosts vervollständigen"
@@ -1105,13 +1125,13 @@ msgstr ""
 "(<code>2m</code>)."
 
 msgid "External"
-msgstr ""
+msgstr "Extern"
 
 msgid "External R0 Key Holder List"
-msgstr ""
+msgstr "Externe R0-Key-Holder-List"
 
 msgid "External R1 Key Holder List"
-msgstr ""
+msgstr "Externe R1-Key-Holder-List"
 
 msgid "External system log server"
 msgstr "Externer Protokollserver IP"
@@ -1120,10 +1140,10 @@ msgid "External system log server port"
 msgstr "Externer Protokollserver Port"
 
 msgid "External system log server protocol"
-msgstr ""
+msgstr "Externes Protokollserver Protokoll"
 
 msgid "Extra SSH command options"
-msgstr ""
+msgstr "Zusätzliche SSH-Kommando-Optionen"
 
 msgid "File"
 msgstr "Datei"
@@ -1147,6 +1167,9 @@ msgid ""
 "Find all currently attached filesystems and swap and replace configuration "
 "with defaults based on what was detected"
 msgstr ""
+"Findet alle angeschlossenen Dateisysteme und SWAP-Partitionen und generiert "
+"die Konfiguration mit passenden Standardwerten für alle gefundenen Geräte "
+"neu."
 
 msgid "Find and join network"
 msgstr "Suchen und Verbinden von Netzwerken"
@@ -1161,7 +1184,7 @@ msgid "Firewall"
 msgstr "Firewall"
 
 msgid "Firewall Mark"
-msgstr ""
+msgstr "Firewall-Markierung"
 
 msgid "Firewall Settings"
 msgstr "Firewall Einstellungen"
@@ -1170,7 +1193,7 @@ msgid "Firewall Status"
 msgstr "Firewall-Status"
 
 msgid "Firmware File"
-msgstr ""
+msgstr "Firmware-Datei"
 
 msgid "Firmware Version"
 msgstr "Firmware Version"
@@ -1214,16 +1237,16 @@ msgid "Force link"
 msgstr "Erzwinge Verbindung"
 
 msgid "Force use of NAT-T"
-msgstr ""
+msgstr "Benutzung von NAT-T erzwingen"
 
 msgid "Form token mismatch"
-msgstr ""
+msgstr "Abweichendes Formular-Token"
 
 msgid "Forward DHCP traffic"
 msgstr "DHCP Traffic weiterleiten"
 
 msgid "Forward Error Correction Seconds (FECS)"
-msgstr ""
+msgstr "Fehlerkorrektursekunden (FECS)"
 
 msgid "Forward broadcast traffic"
 msgstr "Broadcasts weiterleiten"
@@ -1247,6 +1270,8 @@ msgid ""
 "Further information about WireGuard interfaces and peers at <a href=\"http://"
 "wireguard.io\">wireguard.io</a>."
 msgstr ""
+"Weitere Informationen zu WireGuard-Schnittstellen und Peers unter <a href="
+"\"http://wireguard.io\">wireguard.io</a>."
 
 msgid "GHz"
 msgstr "GHz"
@@ -1267,10 +1292,10 @@ msgid "General Setup"
 msgstr "Allgemeine Einstellungen"
 
 msgid "General options for opkg"
-msgstr ""
+msgstr "Allgemeine Optionen für Opkg."
 
 msgid "Generate Config"
-msgstr ""
+msgstr "Konfiguration generieren"
 
 msgid "Generate archive"
 msgstr "Sicherung erstellen"
@@ -1284,10 +1309,10 @@ msgstr ""
 "nicht geändert!"
 
 msgid "Global Settings"
-msgstr ""
+msgstr "Globale Einstellungen"
 
 msgid "Global network options"
-msgstr ""
+msgstr "Globale Netzwerkeinstellungen"
 
 msgid "Go to password configuration..."
 msgstr "Zur Passwortkonfiguration..."
@@ -1296,19 +1321,19 @@ msgid "Go to relevant configuration page"
 msgstr "Gehe zur entsprechenden Konfigurationsseite"
 
 msgid "Group Password"
-msgstr ""
+msgstr "Gruppenpasswort"
 
 msgid "Guest"
-msgstr ""
+msgstr "Gast"
 
 msgid "HE.net password"
 msgstr "HE.net Passwort"
 
 msgid "HE.net username"
-msgstr ""
+msgstr "HE.net Benutzername"
 
 msgid "HT mode (802.11n)"
-msgstr ""
+msgstr "HT-Modus (802.11n)"
 
 msgid "Handler"
 msgstr "Handler"
@@ -1317,7 +1342,7 @@ msgid "Hang Up"
 msgstr "Auflegen"
 
 msgid "Header Error Code Errors (HEC)"
-msgstr ""
+msgstr "Anzahl Header-Error-Code-Fehler (HEC)"
 
 msgid "Heartbeat"
 msgstr ""
@@ -1369,7 +1394,7 @@ msgid "IKE DH Group"
 msgstr ""
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "IP-Adressen"
 
 msgid "IP address"
 msgstr "IP-Adresse"
@@ -1390,7 +1415,7 @@ msgid "IPv4 and IPv6"
 msgstr "IPv4 und IPv6"
 
 msgid "IPv4 assignment length"
-msgstr ""
+msgstr "IPv4 Zuweisungslänge"
 
 msgid "IPv4 broadcast"
 msgstr "IPv4 Broadcast"
@@ -1405,7 +1430,7 @@ msgid "IPv4 only"
 msgstr "nur IPv4"
 
 msgid "IPv4 prefix"
-msgstr ""
+msgstr "IPv4 Bereich"
 
 msgid "IPv4 prefix length"
 msgstr "Länge des IPv4 Präfix"
@@ -1423,13 +1448,13 @@ msgid "IPv6 Firewall"
 msgstr "IPv6 Firewall"
 
 msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "IPv6 Nachbarn"
 
 msgid "IPv6 Settings"
-msgstr ""
+msgstr "IPv6 Einstellungen"
 
 msgid "IPv6 ULA-Prefix"
-msgstr ""
+msgstr "IPv6 ULA-Präfix"
 
 msgid "IPv6 WAN Status"
 msgstr "IPv6 WAN Status"
@@ -1438,13 +1463,13 @@ msgid "IPv6 address"
 msgstr "IPv6 Adresse"
 
 msgid "IPv6 address delegated to the local tunnel endpoint (optional)"
-msgstr ""
+msgstr "Zum lokalen Tunnelendpunkt delegierte IPv6-Adresse (optional)"
 
 msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "IPv6 Zuweisungshinweis"
 
 msgid "IPv6 assignment length"
-msgstr ""
+msgstr "IPv6 Zuweisungslänge"
 
 msgid "IPv6 gateway"
 msgstr "IPv6 Gateway"
@@ -1459,13 +1484,16 @@ msgid "IPv6 prefix length"
 msgstr "Länge des IPv6 Präfix"
 
 msgid "IPv6 routed prefix"
-msgstr ""
+msgstr "Gerouteter IPv6-Präfix"
+
+msgid "IPv6 suffix"
+msgstr "IPv6 Endung"
 
 msgid "IPv6-Address"
 msgstr "IPv6-Adresse"
 
 msgid "IPv6-PD"
-msgstr ""
+msgstr "IPv6 Präfixdelegation (PD)"
 
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
@@ -1480,10 +1508,10 @@ msgid "Identity"
 msgstr "Identität"
 
 msgid "If checked, 1DES is enaled"
-msgstr ""
+msgstr "Aktiviert die Benutzung von 1DES, wenn ausgewählt"
 
 msgid "If checked, encryption is disabled"
-msgstr ""
+msgstr "Deaktiviert die Verschlüsselung, wenn ausgewählt"
 
 msgid ""
 "If specified, mount the device by its UUID instead of a fixed device node"
@@ -1535,6 +1563,9 @@ msgid ""
 "In order to prevent unauthorized access to the system, your request has been "
 "blocked. Click \"Continue »\" below to return to the previous page."
 msgstr ""
+"Um unauthorisierte Zugriffe auf das System zu verhindern, wurde dieser "
+"Request blockiert. Auf \"Weiter\" klicken um zur vorherigen Seite "
+"zurückzukehren."
 
 msgid "Inactivity timeout"
 msgstr "Timeout bei Inaktivität"
@@ -1556,6 +1587,8 @@ msgstr "Installieren"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
 msgstr ""
+"Bitte \"iputils-traceroute6\" installieren um IPv6-Routenverfolgung nutzen "
+"zu können"
 
 msgid "Install package %q"
 msgstr "Installiere Paket %q"
@@ -1569,6 +1602,10 @@ msgstr "Installierte Pakete"
 msgid "Interface"
 msgstr "Schnittstelle"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+"Das Gerät der Schnittstelle %q wurde automatisch von %q auf %q geändert."
+
 msgid "Interface Configuration"
 msgstr "Schnittstellenkonfiguration"
 
@@ -1582,7 +1619,7 @@ msgid "Interface is shutting down..."
 msgstr "Schnittstelle fährt herunter..."
 
 msgid "Interface name"
-msgstr ""
+msgstr "Schnittstellenname"
 
 msgid "Interface not present or not connected yet."
 msgstr "Schnittstelle existiert nicht oder ist nicht verbunden."
@@ -1597,7 +1634,7 @@ msgid "Interfaces"
 msgstr "Schnittstellen"
 
 msgid "Internal"
-msgstr ""
+msgstr "Intern"
 
 msgid "Internal Server Error"
 msgstr "Interner Serverfehler"
@@ -1616,7 +1653,7 @@ msgstr ""
 "Ungültiger Benutzername oder ungültiges Passwort! Bitte erneut versuchen. "
 
 msgid "Isolate Clients"
-msgstr ""
+msgstr "Clients isolieren"
 
 #, fuzzy
 msgid ""
@@ -1636,7 +1673,7 @@ msgid "Join Network: Wireless Scan"
 msgstr "Netzwerk beitreten: Suche nach Netzwerken"
 
 msgid "Joining Network: %q"
-msgstr ""
+msgstr "Trete Netzwerk %q bei"
 
 msgid "Keep settings"
 msgstr "Konfiguration behalten"
@@ -1681,13 +1718,13 @@ msgid "Language and Style"
 msgstr "Sprache und Aussehen"
 
 msgid "Latency"
-msgstr ""
+msgstr "Latenz"
 
 msgid "Leaf"
-msgstr ""
+msgstr "Zweigstelle"
 
 msgid "Lease time"
-msgstr ""
+msgstr "Laufzeit"
 
 msgid "Lease validity time"
 msgstr "Lease-Gültigkeitsdauer"
@@ -1695,9 +1732,6 @@ msgstr "Lease-Gültigkeitsdauer"
 msgid "Leasefile"
 msgstr "Leasedatei"
 
-msgid "Leasetime"
-msgstr "Laufzeit"
-
 msgid "Leasetime remaining"
 msgstr "Verbleibende Gültigkeit"
 
@@ -1715,21 +1749,23 @@ msgstr "Limit"
 
 msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
 msgstr ""
+"DNS-Dienste auf direkte lokale Subnetze beschränken um Missbrauch durch "
+"Dritte zu verhindern."
 
 msgid "Limit listening to these interfaces, and loopback."
-msgstr ""
+msgstr "Dienste auf die angegeben Schnittstellen plus Loopback beschränken."
 
 msgid "Line Attenuation (LATN)"
-msgstr ""
+msgstr "Dämpfung (LATN)"
 
 msgid "Line Mode"
-msgstr ""
+msgstr "Verbindungsmodus"
 
 msgid "Line State"
-msgstr ""
+msgstr "Verbindungsstatus"
 
 msgid "Line Uptime"
-msgstr ""
+msgstr "Verbindungsdauer"
 
 msgid "Link On"
 msgstr "Verbindung hergestellt"
@@ -1758,7 +1794,7 @@ msgid ""
 msgstr ""
 
 msgid "List of SSH key files for auth"
-msgstr ""
+msgstr "Liste der SSH Schlüssel zur Authentifikation"
 
 msgid "List of domains to allow RFC1918 responses for"
 msgstr "Liste von Domains für welche RFC1918-Antworten erlaubt sind"
@@ -1767,10 +1803,10 @@ msgid "List of hosts that supply bogus NX domain results"
 msgstr "Liste von Servern die falsche \"NX Domain\" Antworten liefern"
 
 msgid "Listen Interfaces"
-msgstr ""
+msgstr "Aktive Schnittstellen"
 
 msgid "Listen Port"
-msgstr ""
+msgstr "Aktive Ports"
 
 msgid "Listen only on the given interface or, if unspecified, on all"
 msgstr ""
@@ -1790,7 +1826,7 @@ msgid "Loading"
 msgstr "Lade"
 
 msgid "Local IP address to assign"
-msgstr ""
+msgstr "Lokale IP-Adresse"
 
 msgid "Local IPv4 address"
 msgstr "Lokale IPv4 Adresse"
@@ -1799,7 +1835,7 @@ msgid "Local IPv6 address"
 msgstr "Lokale IPv6 Adresse"
 
 msgid "Local Service Only"
-msgstr ""
+msgstr "Nur lokale Dienste"
 
 msgid "Local Startup"
 msgstr "Lokales Startskript"
@@ -1838,7 +1874,7 @@ msgid "Localise queries"
 msgstr "Lokalisiere Anfragen"
 
 msgid "Locked to channel %s used by: %s"
-msgstr ""
+msgstr "Festgelegt auf Kanal %s, verwendet durch: %s"
 
 msgid "Log output level"
 msgstr "Protokolllevel"
@@ -1856,7 +1892,7 @@ msgid "Logout"
 msgstr "Abmelden"
 
 msgid "Loss of Signal Seconds (LOSS)"
-msgstr ""
+msgstr "Signalverlustsekunden (LOSS)"
 
 msgid "Lowest leased address as offset from the network address."
 msgstr "Kleinste vergebene Adresse (Netzwerkadresse + x)"
@@ -1891,13 +1927,13 @@ msgstr "MTU"
 msgid ""
 "Make sure to clone the root filesystem using something like the commands "
 "below:"
-msgstr ""
+msgstr "Das Root-Dateisystem muss mit folgenden Kommandsos vorbereitet werden:"
 
 msgid "Manual"
-msgstr ""
+msgstr "Manuell"
 
 msgid "Max. Attainable Data Rate (ATTNDR)"
-msgstr ""
+msgstr "Maximal erreichbare Datenrate (ATTNDR)"
 
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Maximal zulässige Anzahl von aktiven DHCP-Leases"
@@ -1918,6 +1954,9 @@ msgid ""
 "Maximum length of the name is 15 characters including the automatic protocol/"
 "bridge prefix (br-, 6in4-, pppoe- etc.)"
 msgstr ""
+"Die maximale Länge des Names ist auf 15 Zeichen beschränkt, abzüglich des "
+"automatischen Protokoll- oder Bridge-Prefixes wie \"br-\" oder \"pppoe-\" "
+"etc."
 
 msgid "Maximum number of leased addresses."
 msgstr "Maximal zulässige Anzahl von vergeben DHCP-Adressen"
@@ -1938,22 +1977,22 @@ msgid "Minimum hold time"
 msgstr "Minimalzeit zum Halten der Verbindung"
 
 msgid "Mirror monitor port"
-msgstr ""
+msgstr "Spiegel-Monitor-Port"
 
 msgid "Mirror source port"
-msgstr ""
+msgstr "Spiegel-Quell-Port"
 
 msgid "Missing protocol extension for proto %q"
 msgstr "Erweiterung für Protokoll %q fehlt"
 
 msgid "Mobility Domain"
-msgstr ""
+msgstr "Mobilitätsbereich"
 
 msgid "Mode"
 msgstr "Modus"
 
 msgid "Model"
-msgstr ""
+msgstr "Modell"
 
 msgid "Modem device"
 msgstr "Modemgerät"
@@ -1996,7 +2035,7 @@ msgid "Mount point"
 msgstr "Mountpunkt"
 
 msgid "Mount swap not specifically configured"
-msgstr ""
+msgstr "Unkonfigurierte SWAP-Partitionen aktivieren"
 
 msgid "Mounted file systems"
 msgstr "Eingehängte Dateisysteme"
@@ -2014,10 +2053,10 @@ msgid "NAS ID"
 msgstr "NAS ID"
 
 msgid "NAT-T Mode"
-msgstr ""
+msgstr "NAT-T Modus"
 
 msgid "NAT64 Prefix"
-msgstr ""
+msgstr "NAT64 Präfix"
 
 msgid "NCM"
 msgstr ""
@@ -2032,7 +2071,7 @@ msgid "NTP server candidates"
 msgstr "NTP Server Kandidaten"
 
 msgid "NTP sync time-out"
-msgstr ""
+msgstr "NTP Synchronisierungstimeout"
 
 msgid "Name"
 msgstr "Name"
@@ -2068,7 +2107,7 @@ msgid "No DHCP Server configured for this interface"
 msgstr "Kein DHCP Server auf dieser Schnittstelle eingerichtet"
 
 msgid "No NAT-T"
-msgstr ""
+msgstr "Kein NAT-T"
 
 msgid "No chains in this table"
 msgstr "Keine Ketten in dieser Tabelle"
@@ -2105,16 +2144,16 @@ msgid "Noise"
 msgstr "Rauschen"
 
 msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Signal-Rausch-Abstand (SNR)"
 
 msgid "Noise:"
 msgstr "Noise:"
 
 msgid "Non Pre-emtive CRC errors (CRC_P)"
-msgstr ""
+msgstr "Nicht-präemptive CRC-Fehler (CRC_P)"
 
 msgid "Non-wildcard"
-msgstr ""
+msgstr "An Schnittstellen binden"
 
 msgid "None"
 msgstr "keine"
@@ -2135,7 +2174,7 @@ msgid "Note: Configuration files will be erased."
 msgstr "Warnung: Konfigurationsdateien werden gelöscht."
 
 msgid "Note: interface name length"
-msgstr ""
+msgstr "Hinweis: Länge des Namens beachten"
 
 msgid "Notice"
 msgstr "Notiz"
@@ -2150,10 +2189,10 @@ msgid "OPKG-Configuration"
 msgstr "OPKG-Konfiguration"
 
 msgid "Obfuscated Group Password"
-msgstr ""
+msgstr "Chiffriertes Gruppenpasswort"
 
 msgid "Obfuscated Password"
-msgstr ""
+msgstr "Chiffriertes Passwort"
 
 msgid "Off-State Delay"
 msgstr "Verzögerung für Ausschalt-Zustand"
@@ -2195,7 +2234,7 @@ msgid "OpenConnect (CISCO AnyConnect)"
 msgstr ""
 
 msgid "Operating frequency"
-msgstr ""
+msgstr "Betriebsfrequenz"
 
 msgid "Option changed"
 msgstr "Option geändert"
@@ -2204,48 +2243,68 @@ msgid "Option removed"
 msgstr "Option entfernt"
 
 msgid "Optional"
-msgstr ""
+msgstr "Optional"
 
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
+"Optional, angeben um den Standardserver (tic.sixxs.net) zu überschreiben"
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
-
-msgid "Optional."
-msgstr ""
+"Optional, angeben wenn das SIXSS Konto mehr als einen Tunnel beinhaltet"
 
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
+"Optional. 32-Bit-Marke für ausgehende, verschlüsselte Pakete. Wert in "
+"hexadezimal mit führendem <code>0x</code> angeben."
+
+msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+"Optional. Mögliche Werte: 'eui64', 'random' oder Suffixes wie '::1' oder "
+"'::1:2'. Wenn ein IPv6-Präfix (wie z.B. 'a:b:c:d::') von einem delegierendem "
+"Server empfangen wird, kombiniert das System das Suffix mit dem Präfix um "
+"eine IPv6-Adresse (z.B. 'a:b:c:d::1') für die Schnittstelle zu formen."
 
 msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
+"Optional. Base64-kodierter, vorhab ausgetauschter Schlüssel um eine weitere "
+"Ebene an symmetrischer Verschlüsselung für erhöhte Sicherheit hinzuzufügen."
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
-msgstr ""
+msgstr "Optional. Routen für erlaubte IP-Adressen erzeugen."
 
 msgid ""
 "Optional. Host of peer. Names are resolved prior to bringing up the "
 "interface."
 msgstr ""
+"Optional. Hostname oder Adresse des Verbindungspartners. Namen werden vor "
+"dem Verbindungsaufbau aufgelöst."
 
 msgid "Optional. Maximum Transmission Unit of tunnel interface."
-msgstr ""
+msgstr "Optional. Maximale MTU für Tunnelschnittstellen."
 
 msgid "Optional. Port of peer."
-msgstr ""
+msgstr "Optional. Port-Nummer des Verbindungspartners."
 
 msgid ""
 "Optional. Seconds between keep alive messages. Default is 0 (disabled). "
 "Recommended value if this device is behind a NAT is 25."
 msgstr ""
+"Optional. Sekunden zwischen Keep-Alive-Nachrichten. Standardwert is 0 "
+"(deaktiviert). Der empfohlene Wert für Geräte hinter einem NAT sind 25 "
+"Sekunden."
 
 msgid "Optional. UDP port used for outgoing and incoming packets."
 msgstr ""
+"Optional. Benutzte UDP-Port-Nummer für ausgehende und eingehende Pakete."
 
 msgid "Options"
 msgstr "Optionen"
@@ -2260,7 +2319,7 @@ msgid "Outbound:"
 msgstr "Ausgehend:"
 
 msgid "Output Interface"
-msgstr ""
+msgstr "Ausgehende Schnittstelle"
 
 msgid "Override MAC address"
 msgstr "MAC-Adresse überschreiben"
@@ -2269,13 +2328,13 @@ msgid "Override MTU"
 msgstr "MTU-Wert überschreiben"
 
 msgid "Override TOS"
-msgstr ""
+msgstr "TOS-Wert überschreiben"
 
 msgid "Override TTL"
-msgstr ""
+msgstr "TTL-Wert überschreiben"
 
 msgid "Override default interface name"
-msgstr ""
+msgstr "Standard Schnittstellennamen überschreiben"
 
 msgid "Override the gateway in DHCP responses"
 msgstr "Gateway-Adresse in DHCP-Antworten überschreiben"
@@ -2330,10 +2389,10 @@ msgid "PPtP"
 msgstr "PPtP"
 
 msgid "PSID offset"
-msgstr ""
+msgstr "PSID-Offset"
 
 msgid "PSID-bits length"
-msgstr ""
+msgstr "PSID-Bitlänge"
 
 msgid "PTM/EFM (Packet Transfer Mode)"
 msgstr ""
@@ -2360,10 +2419,10 @@ msgid "Password authentication"
 msgstr "Passwortanmeldung"
 
 msgid "Password of Private Key"
-msgstr "Passwort des Privaten Schlüssels"
+msgstr "Passwort des privaten Schlüssels"
 
 msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Password des inneren, privaten Schlüssels"
 
 msgid "Password successfully changed!"
 msgstr "Passwort erfolgreich geändert!"
@@ -2381,22 +2440,22 @@ msgid "Path to executable which handles the button event"
 msgstr "Ausführbare Datei welche das Schalter-Ereignis verarbeitet"
 
 msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "Pfad zum inneren CA-Zertifikat"
 
 msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "Pfad zum inneren Client-Zertifikat"
 
 msgid "Path to inner Private Key"
-msgstr ""
+msgstr "Pfad zum inneren, privaten Schlüssel"
 
 msgid "Peak:"
 msgstr "Spitze:"
 
 msgid "Peer IP address to assign"
-msgstr ""
+msgstr "Entfernte IP-Adresse"
 
 msgid "Peers"
-msgstr ""
+msgstr "Verbindungspartner"
 
 msgid "Perfect Forward Secrecy"
 msgstr ""
@@ -2408,7 +2467,7 @@ msgid "Perform reset"
 msgstr "Reset durchführen"
 
 msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "Persistentes Keep-Alive"
 
 msgid "Phy Rate:"
 msgstr "Phy-Rate:"
@@ -2435,22 +2494,22 @@ msgid "Port status:"
 msgstr "Port-Status:"
 
 msgid "Power Management Mode"
-msgstr ""
+msgstr "Energiesparmodus"
 
 msgid "Pre-emtive CRC errors (CRCP_P)"
-msgstr ""
+msgstr "Präemptive CRC-Fehler (CRCP_P)"
 
 msgid "Prefer LTE"
-msgstr ""
+msgstr "LTE bevorzugen"
 
 msgid "Prefer UMTS"
-msgstr ""
+msgstr "UMTS bevorzugen"
 
 msgid "Prefix Delegated"
-msgstr ""
+msgstr "Delegiertes Präfix"
 
 msgid "Preshared Key"
-msgstr ""
+msgstr "Gemeinsamer Schlüssel"
 
 msgid ""
 "Presume peer to be dead after given amount of LCP echo failures, use 0 to "
@@ -2460,7 +2519,7 @@ msgstr ""
 "Fehlschlägen, nutze den Wert 0 um Fehler zu ignorieren"
 
 msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Verhindert das Binden an diese Schnittstellen"
 
 msgid "Prevents client-to-client communication"
 msgstr "Unterbindet Client-Client-Verkehr"
@@ -2469,7 +2528,7 @@ msgid "Prism2/2.5/3 802.11b Wireless Controller"
 msgstr "Prism2/2.5/3 802.11b W-LAN Adapter"
 
 msgid "Private Key"
-msgstr ""
+msgstr "Privater Schlüssel"
 
 msgid "Proceed"
 msgstr "Fortfahren"
@@ -2478,7 +2537,7 @@ msgid "Processes"
 msgstr "Prozesse"
 
 msgid "Profile"
-msgstr ""
+msgstr "Profil"
 
 msgid "Prot."
 msgstr "Prot."
@@ -2505,10 +2564,12 @@ msgid "Pseudo Ad-Hoc (ahdemo)"
 msgstr "Pseudo Ad-Hoc (ahdemo)"
 
 msgid "Public Key"
-msgstr ""
+msgstr "Öffentlicher Schlüssel"
 
 msgid "Public prefix routed to this device for distribution to clients."
 msgstr ""
+"Zu diesem Gerät geroutetes öffentliches Präfix zur Weiterverteilung an "
+"Clients."
 
 msgid "QMI Cellular"
 msgstr ""
@@ -2618,7 +2679,7 @@ msgid "Realtime Wireless"
 msgstr "Echtzeit-WLAN-Signal"
 
 msgid "Reassociation Deadline"
-msgstr ""
+msgstr "Reassoziierungsfrist"
 
 msgid "Rebind protection"
 msgstr "DNS-Rebind-Schutz"
@@ -2639,7 +2700,7 @@ msgid "Receiver Antenna"
 msgstr "Empfangsantenne"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
-msgstr ""
+msgstr "Empfohlen. IP-Adresse der WireGuard-Schnittstelle."
 
 msgid "Reconnect this interface"
 msgstr "Diese Schnittstelle neu verbinden"
@@ -2666,7 +2727,7 @@ msgid "Remote IPv4 address"
 msgstr "Entfernte IPv4-Adresse"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "Entfernte IPv4-Adresse oder Hostname"
 
 msgid "Remove"
 msgstr "Entfernen"
@@ -2681,42 +2742,50 @@ msgid "Replace wireless configuration"
 msgstr "Drahtloskonfiguration ersetzen"
 
 msgid "Request IPv6-address"
-msgstr ""
+msgstr "IPv6-Adresse anfordern"
 
 msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "IPv6-Präfix dieser Länge anfordern"
 
 msgid "Require TLS"
-msgstr ""
+msgstr "TLS erfordern"
 
 msgid "Required"
-msgstr ""
+msgstr "Benötigt"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 "Wird von bestimmten Internet-Providern benötigt, z.B. Charter mit DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
-msgstr ""
+msgstr "Benötigt. Base64-kodierter privater Schlüssel für diese Schnittstelle"
 
 msgid "Required. Base64-encoded public key of peer."
 msgstr ""
+"Benötigt. Base64-kodierter öffentlicher Schlüssel für diese Schnittstelle"
 
 msgid ""
 "Required. IP addresses and prefixes that this peer is allowed to use inside "
 "the tunnel. Usually the peer's tunnel IP addresses and the networks the peer "
 "routes through the tunnel."
 msgstr ""
+"Benötigt. IP-Adressen und Präfixe die der Verbindungspartner innerhalb des "
+"Tunnels nutzen darf. Entspricht üblicherweise der Tunnel-IP-Adresse des "
+"Verbindungspartners und den Netzwerken, die dieser durch den Tunnel routet."
 
 msgid ""
 "Requires the 'full' version of wpad/hostapd and support from the wifi driver "
 "<br />(as of Feb 2017: ath9k and ath10k, in LEDE also mwlwifi and mt76)"
 msgstr ""
+"Benötigt die \"volle\" Variante des wpad oder hostapd Paketes und "
+"Unterstützung vom WLAN-Treiber."
 
 msgid ""
 "Requires upstream supports DNSSEC; verify unsigned domain responses really "
 "come from unsigned domains"
 msgstr ""
+"Setzt DNSSEC-Unterstützung im DNS-Zielserver vorraus; überprüft ob "
+"unsignierte Antworten wirklich von unsignierten Domains kommen."
 
 msgid "Reset"
 msgstr "Zurücksetzen"
@@ -2755,19 +2824,19 @@ msgid "Root directory for files served via TFTP"
 msgstr "Wurzelverzeichnis für über TFTP ausgelieferte Dateien "
 
 msgid "Root preparation"
-msgstr ""
+msgstr "Wurzelverzeichnis erzeugen"
 
 msgid "Route Allowed IPs"
-msgstr ""
+msgstr "Erlaubte IP-Addressen routen"
 
 msgid "Route type"
-msgstr ""
+msgstr "Routen-Typ"
 
 msgid "Routed IPv6 prefix for downstream interfaces"
-msgstr ""
+msgstr "Geroutetes IPv6-Präfix für nachgelagerte Schnittstellen"
 
 msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Router-Advertisement-Dienst"
 
 msgid "Router Password"
 msgstr "Routerpasswort"
@@ -2806,13 +2875,13 @@ msgid "SSH Access"
 msgstr "SSH-Zugriff"
 
 msgid "SSH server address"
-msgstr ""
+msgstr "SSH-Server-Adresse"
 
 msgid "SSH server port"
-msgstr ""
+msgstr "SSH-Server-Port"
 
 msgid "SSH username"
-msgstr ""
+msgstr "SSH Benutzername"
 
 msgid "SSH-Keys"
 msgstr "SSH-Schlüssel"
@@ -2858,15 +2927,17 @@ msgid "Server Settings"
 msgstr "Servereinstellungen"
 
 msgid "Server password"
-msgstr ""
+msgstr "Server Passwort"
 
 msgid ""
 "Server password, enter the specific password of the tunnel when the username "
 "contains the tunnel ID"
 msgstr ""
+"Server Passwort bzw. das tunnelspezifische Passwort wenn der Benutzername "
+"eine Tunnel-ID beinhaltet."
 
 msgid "Server username"
-msgstr ""
+msgstr "Server Benutzername"
 
 msgid "Service Name"
 msgstr "Service-Name"
@@ -2893,10 +2964,10 @@ msgid "Setup DHCP Server"
 msgstr "DHCP Server einrichten"
 
 msgid "Severely Errored Seconds (SES)"
-msgstr ""
+msgstr "schwerwiegende Fehlersekunden (SES)"
 
 msgid "Short GI"
-msgstr ""
+msgstr "kurzes Guardintervall"
 
 msgid "Show current backup file list"
 msgstr "Zeige aktuelle Liste der gesicherten Dateien"
@@ -2911,7 +2982,7 @@ msgid "Signal"
 msgstr "Signal"
 
 msgid "Signal Attenuation (SATN)"
-msgstr ""
+msgstr "Signaldämpfung (SATN)"
 
 msgid "Signal:"
 msgstr "Signal:"
@@ -2920,7 +2991,7 @@ msgid "Size"
 msgstr "Größe"
 
 msgid "Size (.ipk)"
-msgstr ""
+msgstr "Größe (.ipk)"
 
 msgid "Skip"
 msgstr "Überspringen"
@@ -2966,7 +3037,7 @@ msgid "Source"
 msgstr "Quelle"
 
 msgid "Source routing"
-msgstr ""
+msgstr "Quell-Routing"
 
 msgid "Specifies the button state to handle"
 msgstr "Gibt den zu behandelnden Tastenstatus an"
@@ -2992,17 +3063,21 @@ msgstr ""
 "werden"
 
 msgid "Specify a TOS (Type of Service)."
-msgstr ""
+msgstr "Setzt einen spezifischen TOS (Type of Service) Wert"
 
 msgid ""
 "Specify a TTL (Time to Live) for the encapsulating packet other than the "
 "default (64)."
 msgstr ""
+"Setzt eine spezifische TTL (Time to Live) für gekapselte Pakete, anstatt der "
+"standardmäßigen 64."
 
 msgid ""
 "Specify an MTU (Maximum Transmission Unit) other than the default (1280 "
 "bytes)."
 msgstr ""
+"Setzt eine spezifische MTU (Maximum Transmission Unit) abweichend von den "
+"standardmäßigen 1280 Bytes."
 
 msgid "Specify the secret encryption key here."
 msgstr "Geben Sie hier den geheimen Netzwerkschlüssel an"
@@ -3078,6 +3153,8 @@ msgstr "Switch %q (%s)"
 msgid ""
 "Switch %q has an unknown topology - the VLAN settings might not be accurate."
 msgstr ""
+"Der Switch %q hat eine unbekannte Struktur, die VLAN Settings könnten "
+"unpassend sein."
 
 msgid "Switch VLAN"
 msgstr ""
@@ -3156,10 +3233,13 @@ msgid ""
 "The HE.net endpoint update configuration changed, you must now use the plain "
 "username instead of the user ID!"
 msgstr ""
+"Die Updateprozedur für HE.net Tunnel-IP-Adrerssen hat sich geändert, statt "
+"der numerischen User-ID muss nun der normale Benutzername angegeben werden."
 
 msgid ""
 "The IPv4 address or the fully-qualified domain name of the remote tunnel end."
 msgstr ""
+"Die IPv4-Adresse oder der volle Domain Name des entfernten Tunnel-Endpunktes."
 
 msgid ""
 "The IPv6 prefix assigned to the provider, usually ends with <code>::</code>"
@@ -3176,6 +3256,8 @@ msgstr ""
 
 msgid "The configuration file could not be loaded due to the following error:"
 msgstr ""
+"Die Konfigurationsdatei konnte aufgrund der folgenden Fehler nicht geladen "
+"werden:"
 
 msgid ""
 "The device file of the memory or partition (<abbr title=\"for example\">e.g."
@@ -3229,7 +3311,7 @@ msgid "The length of the IPv6 prefix in bits"
 msgstr "Länge des IPv6 Präfix in Bits"
 
 msgid "The local IPv4 address over which the tunnel is created (optional)."
-msgstr ""
+msgstr "Die lokale IPv4-Adresse über die der Tunnel aufgebaut wird (optional)."
 
 msgid ""
 "The network ports on this device can be combined to several <abbr title="
@@ -3253,6 +3335,7 @@ msgstr "Dem ausgewähltem Protokoll muss ein Gerät zugeordnet werden"
 
 msgid "The submitted security token is invalid or already expired!"
 msgstr ""
+"Das mitgesendete Sicherheits-Token ist ungültig oder bereits abgelaufen!"
 
 msgid ""
 "The system is erasing the configuration partition now and will reboot itself "
@@ -3277,6 +3360,8 @@ msgid ""
 "The tunnel end-point is behind NAT, defaults to disabled and only applies to "
 "AYIYA"
 msgstr ""
+"Der lokale Tunnel-Endpunkt ist hinter einem NAT. Standard ist deaktiviert, "
+"nur auf AYIYA anwendbar."
 
 msgid ""
 "The uploaded image file does not contain a supported format. Make sure that "
@@ -3319,6 +3404,8 @@ msgid ""
 "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
 "Name System\">DNS</abbr> servers."
 msgstr ""
+"Diese Datei beinhaltet Zeilen in der Art 'server=/domain/1.2.3.4' oder "
+"'server=1.2.3.4' für domainspezifische oder komplette Ziel-DNS-Server."
 
 msgid ""
 "This is a list of shell glob patterns for matching files and directories to "
@@ -3334,6 +3421,9 @@ msgid ""
 "This is either the \"Update Key\" configured for the tunnel or the account "
 "password if no update key has been configured"
 msgstr ""
+"Dies ist entweder der \"Update Key\" der für diesen Tunnel eingerichtet "
+"wurde oder das normale Account-Passwort wenn kein separater Schlüssel "
+"gesetzt wurde."
 
 msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
@@ -3355,11 +3445,13 @@ msgid ""
 msgstr "Dies ist der einzige DHCP im lokalen Netz"
 
 msgid "This is the plain username for logging into the account"
-msgstr ""
+msgstr "Das ist der normale Login-Name für den Account."
 
 msgid ""
 "This is the prefix routed to you by the tunnel broker for use by clients"
 msgstr ""
+"Dies ist das vom Tunnel-Broker geroutete öffentliche Präfix zur Verwendung "
+"durch nachgelagerte Clients."
 
 msgid "This is the system crontab in which scheduled tasks can be defined."
 msgstr ""
@@ -3405,7 +3497,7 @@ msgstr ""
 "Backup-Archiv hochgeladen werden."
 
 msgid "Tone"
-msgstr ""
+msgstr "Ton"
 
 msgid "Total Available"
 msgstr "Gesamt verfügbar"
@@ -3445,16 +3537,16 @@ msgid "Tunnel Interface"
 msgstr "Tunnelschnittstelle"
 
 msgid "Tunnel Link"
-msgstr ""
+msgstr "Basisschnittstelle"
 
 msgid "Tunnel broker protocol"
-msgstr ""
+msgstr "Tunnel-Boker-Protokoll"
 
 msgid "Tunnel setup server"
-msgstr ""
+msgstr "Tunnel-Setup-Server"
 
 msgid "Tunnel type"
-msgstr ""
+msgstr "Tunneltyp"
 
 msgid "Tx-Power"
 msgstr "Sendestärke"
@@ -3475,7 +3567,7 @@ msgid "USB Device"
 msgstr "USB-Gerät"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "USB Anschlüsse"
 
 msgid "UUID"
 msgstr "UUID"
@@ -3484,7 +3576,7 @@ msgid "Unable to dispatch"
 msgstr "Kann Anfrage nicht zustellen"
 
 msgid "Unavailable Seconds (UAS)"
-msgstr ""
+msgstr "Nicht verfügbare Sekunden (UAS)"
 
 msgid "Unknown"
 msgstr "Unbekannt"
@@ -3496,7 +3588,7 @@ msgid "Unmanaged"
 msgstr "Ignoriert"
 
 msgid "Unmount"
-msgstr ""
+msgstr "Aushängen"
 
 msgid "Unsaved Changes"
 msgstr "Ungespeicherte Änderungen"
@@ -3544,16 +3636,16 @@ msgid "Use TTL on tunnel interface"
 msgstr "Benutze TTL auf der Tunnelschnittstelle"
 
 msgid "Use as external overlay (/overlay)"
-msgstr ""
+msgstr "Als externes Overlay benutzen (/overlay)"
 
 msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "Als Root-Dateisystem benutzen (/)"
 
 msgid "Use broadcast flag"
 msgstr "Benutze Broadcast-Flag"
 
 msgid "Use builtin IPv6-management"
-msgstr ""
+msgstr "Eingebautes IPv6-Management nutzen"
 
 msgid "Use custom DNS servers"
 msgstr "Benutze eigene DNS-Server"
@@ -3589,12 +3681,14 @@ msgid ""
 "Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
 "needed with normal WPA(2)-PSK."
 msgstr ""
+"Wird als RADIUS-NAS-ID und als 802.11r R0KH-ID verwendet. Nicht benötigt für "
+"WPA(2)-PSK."
 
 msgid "User certificate (PEM encoded)"
-msgstr ""
+msgstr "PEM-kodiertes Benutzerzertifikat"
 
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "PEM-kodierter Benutzerschlüssel"
 
 msgid "Username"
 msgstr "Benutzername"
@@ -3612,34 +3706,34 @@ msgid "VLANs on %q (%s)"
 msgstr "VLANs auf %q (%s)"
 
 msgid "VPN Local address"
-msgstr ""
+msgstr "Lokale VPN-Adresse"
 
 msgid "VPN Local port"
-msgstr ""
+msgstr "Lokaler VPN-Port"
 
 msgid "VPN Server"
 msgstr "VPN-Server"
 
 msgid "VPN Server port"
-msgstr ""
+msgstr "VPN-Server Port"
 
 msgid "VPN Server's certificate SHA1 hash"
-msgstr ""
+msgstr "SHA1-Hash des VPN-Server-Zertifikates"
 
 msgid "VPNC (CISCO 3000 (and others) VPN)"
 msgstr ""
 
 msgid "Vendor"
-msgstr ""
+msgstr "Hersteller"
 
 msgid "Vendor Class to send when requesting DHCP"
 msgstr "Bei DHCP-Anfragen gesendete Vendor-Klasse"
 
 msgid "Verbose"
-msgstr ""
+msgstr "Umfangreiche Ausgaben"
 
 msgid "Verbose logging by aiccu daemon"
-msgstr ""
+msgstr "Aktiviert erweiterte Protokollierung durch den AICCU-Prozess"
 
 msgid "Verify"
 msgstr "Verifizieren"
@@ -3675,6 +3769,8 @@ msgstr ""
 msgid ""
 "Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)"
 msgstr ""
+"Warte die angegebene Anzahl an Sekunden auf NTP-Synchronisierung, der Wert 0 "
+"deaktiviert das Warten (optional)"
 
 msgid "Waiting for changes to be applied..."
 msgstr "Änderungen werden angewandt..."
@@ -3683,22 +3779,25 @@ msgid "Waiting for command to complete..."
 msgstr "Der Befehl wird ausgeführt..."
 
 msgid "Waiting for device..."
-msgstr ""
+msgstr "Warte auf Gerät..."
 
 msgid "Warning"
 msgstr "Warnung"
 
 msgid "Warning: There are unsaved changes that will get lost on reboot!"
 msgstr ""
+"Achtung: Es gibt ungespeicherte Änderungen die bei einem Neustart verloren "
+"gehen!"
 
 msgid "Whether to create an IPv6 default route over the tunnel"
 msgstr ""
+"Gibt an, ob eine IPv6-Default-Route durch den Tunnel etabliert werden soll"
 
 msgid "Whether to route only packets from delegated prefixes"
-msgstr ""
+msgstr "Gibt an, ob nur Pakete von delegierten Präfixen geroutet werden sollen"
 
 msgid "Width"
-msgstr ""
+msgstr "Breite"
 
 msgid "WireGuard VPN"
 msgstr ""
@@ -3740,7 +3839,7 @@ msgid "Write received DNS requests to syslog"
 msgstr "Empfangene DNS-Anfragen in das Systemprotokoll schreiben"
 
 msgid "Write system log to file"
-msgstr ""
+msgstr "Systemprotokoll in Datei schreiben"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3770,9 +3869,6 @@ msgstr "beliebig"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatisch"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3795,7 +3891,7 @@ msgid "disable"
 msgstr "deaktivieren"
 
 msgid "disabled"
-msgstr ""
+msgstr "deaktiviert"
 
 msgid "expired"
 msgstr "abgelaufen"
@@ -3821,7 +3917,7 @@ msgid "hidden"
 msgstr "versteckt"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "hybrider Modus"
 
 msgid "if target is a network"
 msgstr "falls Ziel ein Netzwerk ist"
@@ -3842,13 +3938,10 @@ msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
 msgstr "Lokale DNS-Datei"
 
 msgid "minimum 1280, maximum 1480"
-msgstr ""
+msgstr "Minimum 1280, Maximum 1480"
 
 msgid "minutes"
-msgstr ""
-
-msgid "navigation Navigation"
-msgstr ""
+msgstr "Minuten"
 
 msgid "no"
 msgstr "nein"
@@ -3860,7 +3953,7 @@ msgid "none"
 msgstr "keine"
 
 msgid "not present"
-msgstr ""
+msgstr "nicht vorhanden"
 
 msgid "off"
 msgstr "aus"
@@ -3872,37 +3965,31 @@ msgid "open"
 msgstr "offen"
 
 msgid "overlay"
-msgstr ""
+msgstr "Overlay"
 
 msgid "relay mode"
-msgstr ""
+msgstr "Relay-Modus"
 
 msgid "routed"
 msgstr "routed"
 
 msgid "server mode"
-msgstr ""
-
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
+msgstr "Server-Modus"
 
 msgid "stateful-only"
-msgstr ""
+msgstr "nur zustandsorientiert"
 
 msgid "stateless"
-msgstr ""
+msgstr "nur zustandlos"
 
 msgid "stateless + stateful"
-msgstr ""
+msgstr "zustandslos + zustandsorientiert"
 
 msgid "tagged"
 msgstr "tagged"
 
 msgid "time units (TUs / 1.024 ms) [1000-65535]"
-msgstr ""
+msgstr "Zeiteinheiten (TUs / 1024 ms) [1000-65535]"
 
 msgid "unknown"
 msgstr "unbekannt"
@@ -3925,6 +4012,18 @@ msgstr "ja"
 msgid "« Back"
 msgstr "« Zurück"
 
+#~ msgid "Leasetime"
+#~ msgstr "Laufzeit"
+
+#~ msgid "Optional."
+#~ msgstr "Optional"
+
+#~ msgid "AuthGroup"
+#~ msgstr "Berechtigungsgruppe"
+
+#~ msgid "automatic"
+#~ msgstr "automatisch"
+
 #~ msgid "AR Support"
 #~ msgstr "AR-Unterstützung"
 
index 4a4f630..e3969af 100644 (file)
@@ -426,9 +426,6 @@ msgstr "Συνδεδεμένοι Σταθμοί"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Εξουσιοδότηση"
 
@@ -1473,6 +1470,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1583,6 +1583,9 @@ msgstr "Εγκατεστημένα πακέτα"
 msgid "Interface"
 msgstr "Διεπαφή"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Παραμετροποίηση Διεπαφής"
 
@@ -1708,9 +1711,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Αρχείο Leases"
 
-msgid "Leasetime"
-msgstr "Χρόνος Lease"
-
 msgid "Leasetime remaining"
 msgstr "Υπόλοιπο χρόνου Lease"
 
@@ -2214,15 +2214,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3689,10 +3693,6 @@ msgstr ""
 msgid "auto"
 msgstr "αυτόματα"
 
-#, fuzzy
-msgid "automatic"
-msgstr "στατικό"
-
 msgid "baseT"
 msgstr ""
 
@@ -3770,9 +3770,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "όχι"
 
@@ -3806,12 +3803,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3848,6 +3839,13 @@ msgstr "ναι"
 msgid "« Back"
 msgstr "« Πίσω"
 
+#~ msgid "Leasetime"
+#~ msgstr "Χρόνος Lease"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "στατικό"
+
 #~ msgid "AR Support"
 #~ msgstr "Υποστήριξη AR"
 
index e2c8401..6537370 100644 (file)
@@ -417,9 +417,6 @@ msgstr "Associated Stations"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentication"
 
@@ -1447,6 +1444,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1552,6 +1552,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1677,9 +1680,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Leasefile"
 
-msgid "Leasetime"
-msgstr "Leasetime"
-
 msgid "Leasetime remaining"
 msgstr "Leasetime remaining"
 
@@ -2181,15 +2181,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3647,9 +3651,6 @@ msgstr ""
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatic"
-
 msgid "baseT"
 msgstr ""
 
@@ -3726,9 +3727,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3762,12 +3760,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3804,6 +3796,12 @@ msgstr ""
 msgid "« Back"
 msgstr "« Back"
 
+#~ msgid "Leasetime"
+#~ msgstr "Leasetime"
+
+#~ msgid "automatic"
+#~ msgstr "automatic"
+
 #~ msgid "AR Support"
 #~ msgstr "AR Support"
 
index 9d39621..a347673 100644 (file)
@@ -423,9 +423,6 @@ msgstr "Estaciones asociadas"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentificación"
 
@@ -1469,6 +1466,9 @@ msgstr "Longitud de prefijo IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Dirección IPv6"
 
@@ -1581,6 +1581,9 @@ msgstr "Paquetes instalados"
 msgid "Interface"
 msgstr "Interfaz"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configuración del interfaz"
 
@@ -1707,9 +1710,6 @@ msgstr "Tiempo de validación de cesión"
 msgid "Leasefile"
 msgstr "Archivo de cesiones"
 
-msgid "Leasetime"
-msgstr "Tiempo de cesión"
-
 msgid "Leasetime remaining"
 msgstr "Tiempo de cesión restante"
 
@@ -2219,15 +2219,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3765,10 +3769,6 @@ msgstr "cualquiera"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3845,9 +3845,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "no"
 
@@ -3881,12 +3878,6 @@ msgstr "enrutado"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3923,6 +3914,13 @@ msgstr "sí"
 msgid "« Back"
 msgstr "« Volver"
 
+#~ msgid "Leasetime"
+#~ msgstr "Tiempo de cesión"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "estático"
+
 #~ msgid "AR Support"
 #~ msgstr "Soporte a AR"
 
index 7745593..1aab5cb 100644 (file)
@@ -429,9 +429,6 @@ msgstr "Équipements associés"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentification"
 
@@ -1481,6 +1478,9 @@ msgstr "longueur du préfixe IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adresse IPv6"
 
@@ -1589,6 +1589,9 @@ msgstr "Paquets installés"
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configuration de l'interface"
 
@@ -1718,9 +1721,6 @@ msgstr "Durée de validité d'un bail"
 msgid "Leasefile"
 msgstr "Fichier de baux"
 
-msgid "Leasetime"
-msgstr "Durée du bail"
-
 msgid "Leasetime remaining"
 msgstr "Durée de validité"
 
@@ -2232,15 +2232,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3785,10 +3789,6 @@ msgstr "n'importe lequel"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "statique"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3863,9 +3863,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "non"
 
@@ -3899,12 +3896,6 @@ msgstr "routé"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3941,6 +3932,13 @@ msgstr "oui"
 msgid "« Back"
 msgstr "« Retour"
 
+#~ msgid "Leasetime"
+#~ msgstr "Durée du bail"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "statique"
+
 #~ msgid "AR Support"
 #~ msgstr "Gestion du mode AR"
 
index 4b8eb81..d8eae1f 100644 (file)
@@ -418,9 +418,6 @@ msgstr "תחנות קשורות"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "אימות"
 
@@ -1430,6 +1427,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1530,6 +1530,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1652,9 +1655,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2148,15 +2148,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3600,9 +3604,6 @@ msgstr "כלשהו"
 msgid "auto"
 msgstr "אוטומטי"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3677,9 +3678,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "לא"
 
@@ -3713,12 +3711,6 @@ msgstr "מנותב"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 4d855e6..dfed45d 100644 (file)
@@ -422,9 +422,6 @@ msgstr "Kapcsolódó kliensek"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Hitelesítés"
 
@@ -1470,6 +1467,9 @@ msgstr "IPv6 prefix hossz"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-cím"
 
@@ -1579,6 +1579,9 @@ msgstr "Telepített csomagok"
 msgid "Interface"
 msgstr "Interfész"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Interfész beállítások"
 
@@ -1707,9 +1710,6 @@ msgstr "Bérlet érvényességi ideje"
 msgid "Leasefile"
 msgstr "Bérlet fájl"
 
-msgid "Leasetime"
-msgstr "Bérlet időtartama"
-
 msgid "Leasetime remaining"
 msgstr "A bérletből hátralévő idő"
 
@@ -2222,15 +2222,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3772,9 +3776,6 @@ msgstr "bármelyik"
 msgid "auto"
 msgstr "automatikus"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3851,9 +3852,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "nem"
 
@@ -3887,12 +3885,6 @@ msgstr "irányított"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3929,6 +3921,9 @@ msgstr "igen"
 msgid "« Back"
 msgstr "« Vissza"
 
+#~ msgid "Leasetime"
+#~ msgstr "Bérlet időtartama"
+
 #~ msgid "AR Support"
 #~ msgstr "AR Támogatás"
 
index 8b6c2d3..04331ab 100644 (file)
@@ -429,9 +429,6 @@ msgstr "Dispositivi Wi-Fi connessi"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticazione PEAP"
 
@@ -1473,6 +1470,9 @@ msgstr "Lunghezza prefisso IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Indirizzo-IPv6"
 
@@ -1584,6 +1584,9 @@ msgstr "Pacchetti installati"
 msgid "Interface"
 msgstr "Interfaccia"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configurazione Interfaccia"
 
@@ -1709,9 +1712,6 @@ msgstr "Periodo di Validità del Lease"
 msgid "Leasefile"
 msgstr "File di lease"
 
-msgid "Leasetime"
-msgstr "Tempo di lease"
-
 msgid "Leasetime remaining"
 msgstr "Tempo lease residuo"
 
@@ -2220,15 +2220,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3724,10 +3728,6 @@ msgstr "qualsiasi"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "statico"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3804,9 +3804,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "no"
 
@@ -3840,12 +3837,6 @@ msgstr "instradato"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3882,6 +3873,13 @@ msgstr "Sì"
 msgid "« Back"
 msgstr "« Indietro"
 
+#~ msgid "Leasetime"
+#~ msgstr "Tempo di lease"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "statico"
+
 #~ msgid "AR Support"
 #~ msgstr "Supporto AR"
 
index 3101e05..714b064 100644 (file)
@@ -419,9 +419,6 @@ msgstr "認証済み端末"
 msgid "Auth Group"
 msgstr "認証グループ"
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "認証"
 
@@ -1469,6 +1466,9 @@ msgstr "IPv6 プレフィクス長"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-アドレス"
 
@@ -1577,6 +1577,9 @@ msgstr "インストール済みパッケージ"
 msgid "Interface"
 msgstr "インターフェース"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "インターフェース設定"
 
@@ -1702,9 +1705,6 @@ msgstr "リース有効時間"
 msgid "Leasefile"
 msgstr "リースファイル"
 
-msgid "Leasetime"
-msgstr "リース時間"
-
 msgid "Leasetime remaining"
 msgstr "残りリース時間"
 
@@ -2216,15 +2216,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr "(オプション)"
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3756,9 +3760,6 @@ msgstr "全て"
 msgid "auto"
 msgstr "自動"
 
-msgid "automatic"
-msgstr "自動"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3835,9 +3836,6 @@ msgstr "最小値 1280、最大値 1480"
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "いいえ"
 
@@ -3871,12 +3869,6 @@ msgstr "routed"
 msgid "server mode"
 msgstr "サーバー モード"
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr "ステートフルのみ"
 
@@ -3913,6 +3905,15 @@ msgstr "はい"
 msgid "« Back"
 msgstr "« 戻る"
 
+#~ msgid "Leasetime"
+#~ msgstr "リース時間"
+
+#~ msgid "Optional."
+#~ msgstr "(オプション)"
+
+#~ msgid "automatic"
+#~ msgstr "自動"
+
 #~ msgid "AR Support"
 #~ msgstr "ARサポート"
 
index 7683df1..587b489 100644 (file)
@@ -411,9 +411,6 @@ msgstr "연결된 station 들"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -1446,6 +1443,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-주소"
 
@@ -1546,6 +1546,9 @@ msgstr "설치된 패키지"
 msgid "Interface"
 msgstr "인터페이스"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "인터페이스 설정"
 
@@ -1668,9 +1671,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr "임대 시간"
-
 msgid "Leasetime remaining"
 msgstr "남아있는 임대 시간"
 
@@ -2172,15 +2172,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3656,9 +3660,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3735,9 +3736,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3771,12 +3769,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3812,3 +3804,6 @@ msgstr ""
 
 msgid "« Back"
 msgstr ""
+
+#~ msgid "Leasetime"
+#~ msgstr "임대 시간"
index f847e1a..9791218 100644 (file)
@@ -406,9 +406,6 @@ msgstr "Associated Stesen"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentifizierung"
 
@@ -1417,6 +1414,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1522,6 +1522,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1648,9 +1651,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Sewa fail"
 
-msgid "Leasetime"
-msgstr "Masa penyewaan"
-
 msgid "Leasetime remaining"
 msgstr "Sisa masa penyewaan"
 
@@ -2153,15 +2153,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3620,9 +3624,6 @@ msgstr ""
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatik"
-
 msgid "baseT"
 msgstr ""
 
@@ -3697,9 +3698,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3733,12 +3731,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3775,6 +3767,12 @@ msgstr ""
 msgid "« Back"
 msgstr "« Kembali"
 
+#~ msgid "Leasetime"
+#~ msgstr "Masa penyewaan"
+
+#~ msgid "automatic"
+#~ msgstr "automatik"
+
 #~ msgid "AR Support"
 #~ msgstr "AR-Penyokong"
 
index 65fc39e..9e3df81 100644 (file)
@@ -415,9 +415,6 @@ msgstr "Tilkoblede Klienter"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Godkjenning"
 
@@ -1456,6 +1453,9 @@ msgstr "IPv6 prefikslengde"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-Adresse"
 
@@ -1560,6 +1560,9 @@ msgstr "Installerte pakker"
 msgid "Interface"
 msgstr "Grensesnitt"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Grensesnitt Konfigurasjon"
 
@@ -1685,9 +1688,6 @@ msgstr "Gyldig leietid"
 msgid "Leasefile"
 msgstr "<abbr title=\"Leasefile\">Leie-fil</abbr>"
 
-msgid "Leasetime"
-msgstr "<abbr title=\"Leasetime\">Leietid</abbr>"
-
 msgid "Leasetime remaining"
 msgstr "Gjenværende leietid"
 
@@ -2197,15 +2197,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3738,9 +3742,6 @@ msgstr "enhver"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3817,9 +3818,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "nei"
 
@@ -3853,12 +3851,6 @@ msgstr "rutet"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3895,6 +3887,9 @@ msgstr "ja"
 msgid "« Back"
 msgstr "« Tilbake"
 
+#~ msgid "Leasetime"
+#~ msgstr "<abbr title=\"Leasetime\">Leietid</abbr>"
+
 #~ msgid "AR Support"
 #~ msgstr "AR Støtte"
 
index 2223f53..98067c8 100644 (file)
@@ -429,9 +429,6 @@ msgstr "Połączone stacje"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Uwierzytelnianie"
 
@@ -1492,6 +1489,9 @@ msgstr "Długość prefiksu IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adres IPv6"
 
@@ -1602,6 +1602,9 @@ msgstr "Zainstalowane pakiety"
 msgid "Interface"
 msgstr "Interfejs"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Konfiguracja Interfejsu"
 
@@ -1729,9 +1732,6 @@ msgstr "Czas ważności dzierżawy"
 msgid "Leasefile"
 msgstr "Plik dzierżaw"
 
-msgid "Leasetime"
-msgstr "Czas dzierżawy"
-
 msgid "Leasetime remaining"
 msgstr "Pozostały czas dzierżawy"
 
@@ -2241,15 +2241,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3802,9 +3806,6 @@ msgstr "dowolny"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3881,9 +3882,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "nie"
 
@@ -3918,12 +3916,6 @@ msgstr "routowane"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3960,6 +3952,9 @@ msgstr "tak"
 msgid "« Back"
 msgstr "« Wróć"
 
+#~ msgid "Leasetime"
+#~ msgstr "Czas dzierżawy"
+
 # Wydaje mi się że brakuje litery R...
 #~ msgid "AR Support"
 #~ msgstr "Wsparcie dla ARP"
index 2767cee..f2ba575 100644 (file)
@@ -455,9 +455,6 @@ msgstr "Estações associadas"
 msgid "Auth Group"
 msgstr "Grupo de Autenticação"
 
-msgid "AuthGroup"
-msgstr "Grupo de Autenticação"
-
 msgid "Authentication"
 msgstr "Autenticação"
 
@@ -1540,6 +1537,9 @@ msgstr "Tamanho Prefixo IPv6"
 msgid "IPv6 routed prefix"
 msgstr "Prefixo roteável IPv6"
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Endereço IPv6"
 
@@ -1654,6 +1654,9 @@ msgstr "Pacotes instalados"
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configuração da Interface"
 
@@ -1782,9 +1785,6 @@ msgstr "Tempo de validade da atribuição"
 msgid "Leasefile"
 msgstr "Arquivo de atribuições"
 
-msgid "Leasetime"
-msgstr "Tempo de atribuição do DHCP"
-
 msgid "Leasetime remaining"
 msgstr "Tempo restante da atribuição"
 
@@ -2327,15 +2327,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr "Opcional, para usar quando a conta SIXXS tem mais de um túnel"
 
-msgid "Optional."
-msgstr "Opcional."
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3932,9 +3936,6 @@ msgstr "qualquer"
 msgid "auto"
 msgstr "automático"
 
-msgid "automatic"
-msgstr "automático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -4012,9 +4013,6 @@ msgstr "mínimo 1280, máximo 1480"
 msgid "minutes"
 msgstr "minutos"
 
-msgid "navigation Navigation"
-msgstr "navegação Navegação"
-
 # Is this yes/no or no like in no one?
 msgid "no"
 msgstr "não"
@@ -4049,12 +4047,6 @@ msgstr "roteado"
 msgid "server mode"
 msgstr "modo servidor"
 
-msgid "skiplink1 Skip to navigation"
-msgstr "skiplink1 Pular para a navegação"
-
-msgid "skiplink2 Skip to content"
-msgstr "skiplink2 Pular para o conteúdo"
-
 msgid "stateful-only"
 msgstr "somente com estado"
 
@@ -4091,6 +4083,27 @@ msgstr "sim"
 msgid "« Back"
 msgstr "« Voltar"
 
+#~ msgid "Leasetime"
+#~ msgstr "Tempo de atribuição do DHCP"
+
+#~ msgid "Optional."
+#~ msgstr "Opcional."
+
+#~ msgid "navigation Navigation"
+#~ msgstr "navegação Navegação"
+
+#~ msgid "skiplink1 Skip to navigation"
+#~ msgstr "skiplink1 Pular para a navegação"
+
+#~ msgid "skiplink2 Skip to content"
+#~ msgstr "skiplink2 Pular para o conteúdo"
+
+#~ msgid "AuthGroup"
+#~ msgstr "Grupo de Autenticação"
+
+#~ msgid "automatic"
+#~ msgstr "automático"
+
 #~ msgid "AR Support"
 #~ msgstr "Suporte AR"
 
index 2c15673..cb90df5 100644 (file)
@@ -428,9 +428,6 @@ msgstr "Estações Associadas"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticação"
 
@@ -1477,6 +1474,9 @@ msgstr "Comprimento do prefixo IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Endereço-IPv6"
 
@@ -1583,6 +1583,9 @@ msgstr "Instalar pacotes"
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configuração da Interface"
 
@@ -1709,9 +1712,6 @@ msgstr "Tempo de validade da concessão"
 msgid "Leasefile"
 msgstr "Ficheiro de concessões"
 
-msgid "Leasetime"
-msgstr "Tempo de concessão"
-
 msgid "Leasetime remaining"
 msgstr "Tempo de atribuição restante"
 
@@ -2221,15 +2221,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3733,10 +3737,6 @@ msgstr "qualquer"
 msgid "auto"
 msgstr "automático"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3814,9 +3814,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "não"
 
@@ -3850,12 +3847,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3892,6 +3883,13 @@ msgstr "sim"
 msgid "« Back"
 msgstr "« Voltar"
 
+#~ msgid "Leasetime"
+#~ msgstr "Tempo de concessão"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "estático"
+
 #~ msgid "AR Support"
 #~ msgstr "Suporte AR"
 
index 1de4157..d51f4d0 100644 (file)
@@ -414,9 +414,6 @@ msgstr "Statiile asociate"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentificare"
 
@@ -1424,6 +1421,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1524,6 +1524,9 @@ msgstr "Pachete instalate"
 msgid "Interface"
 msgstr "Interfata"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Configurarea interfetei"
 
@@ -1649,9 +1652,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2145,15 +2145,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3593,9 +3597,6 @@ msgstr "oricare"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3670,9 +3671,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "nu"
 
@@ -3706,12 +3704,6 @@ msgstr "rutat"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 2907705..d30c643 100644 (file)
@@ -427,9 +427,6 @@ msgstr "Подключенные клиенты"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Аутентификация"
 
@@ -1476,6 +1473,9 @@ msgstr "Длина префикса IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-адрес"
 
@@ -1586,6 +1586,9 @@ msgstr "Установленные пакеты"
 msgid "Interface"
 msgstr "Интерфейс"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Конфигурация интерфейса"
 
@@ -1713,9 +1716,6 @@ msgstr "Срок действия аренды"
 msgid "Leasefile"
 msgstr "Файл аренд"
 
-msgid "Leasetime"
-msgstr "Время аренды"
-
 msgid "Leasetime remaining"
 msgstr "Оставшееся время аренды"
 
@@ -2227,15 +2227,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3774,10 +3778,6 @@ msgstr "любой"
 msgid "auto"
 msgstr "авто"
 
-#, fuzzy
-msgid "automatic"
-msgstr "статический"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3855,9 +3855,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "нет"
 
@@ -3891,12 +3888,6 @@ msgstr "маршрутизируемый"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3933,6 +3924,13 @@ msgstr "да"
 msgid "« Back"
 msgstr "« Назад"
 
+#~ msgid "Leasetime"
+#~ msgstr "Время аренды"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "статический"
+
 #~ msgid "AR Support"
 #~ msgstr "Поддержка AR"
 
index 318d6f3..f4037ea 100644 (file)
@@ -400,9 +400,6 @@ msgstr ""
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -1402,6 +1399,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1502,6 +1502,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1624,9 +1627,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2120,15 +2120,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3561,9 +3565,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3638,9 +3639,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3674,12 +3672,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 4e262ef..6af6d61 100644 (file)
@@ -406,9 +406,6 @@ msgstr ""
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -1408,6 +1405,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1508,6 +1508,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1630,9 +1633,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2126,15 +2126,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3567,9 +3571,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3644,9 +3645,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3680,12 +3678,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 704c295..d3fc6a7 100644 (file)
@@ -393,9 +393,6 @@ msgstr ""
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -1395,6 +1392,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1495,6 +1495,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1617,9 +1620,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2113,15 +2113,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3554,9 +3558,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3631,9 +3632,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3667,12 +3665,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 5f829e0..afabfa2 100644 (file)
@@ -413,9 +413,6 @@ msgstr ""
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Kimlik doğrulama"
 
@@ -1415,6 +1412,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1515,6 +1515,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1637,9 +1640,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -2133,15 +2133,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3576,9 +3580,6 @@ msgstr "herhangi"
 msgid "auto"
 msgstr "otomatik"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3653,9 +3654,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "hayır"
 
@@ -3689,12 +3687,6 @@ msgstr "yönlendirildi"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
index 34bfb29..7ee0688 100644 (file)
@@ -437,9 +437,6 @@ msgstr "Приєднані станції"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Автентифікація"
 
@@ -1484,6 +1481,9 @@ msgstr "Довжина префікса IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-адреса"
 
@@ -1594,6 +1594,9 @@ msgstr "Інстальовані пакети"
 msgid "Interface"
 msgstr "Інтерфейс"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Конфігурація інтерфейсу"
 
@@ -1720,9 +1723,6 @@ msgstr "Час чинності оренди"
 msgid "Leasefile"
 msgstr "Файл оренд"
 
-msgid "Leasetime"
-msgstr "Час оренди"
-
 msgid "Leasetime remaining"
 msgstr "Час оренди, що лишився"
 
@@ -2235,15 +2235,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3789,9 +3793,6 @@ msgstr "будь-який"
 msgid "auto"
 msgstr "авто"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3870,9 +3871,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "ні"
 
@@ -3906,12 +3904,6 @@ msgstr "спрямовано"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3948,6 +3940,9 @@ msgstr "так"
 msgid "« Back"
 msgstr "« Назад"
 
+#~ msgid "Leasetime"
+#~ msgstr "Час оренди"
+
 #~ msgid "AR Support"
 #~ msgstr "Підтримка AR"
 
index 213e5ef..239e1c2 100644 (file)
@@ -407,9 +407,6 @@ msgstr ""
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Xác thực"
 
@@ -1422,6 +1419,9 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
@@ -1527,6 +1527,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Giao diện "
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1652,9 +1655,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Leasefile"
 
-msgid "Leasetime"
-msgstr "Leasetime"
-
 msgid "Leasetime remaining"
 msgstr "Leasetime còn lại"
 
@@ -2156,15 +2156,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3620,10 +3624,6 @@ msgstr ""
 msgid "auto"
 msgstr "tự động"
 
-#, fuzzy
-msgid "automatic"
-msgstr "thống kê"
-
 msgid "baseT"
 msgstr ""
 
@@ -3700,9 +3700,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr ""
 
@@ -3736,12 +3733,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3778,6 +3769,13 @@ msgstr ""
 msgid "« Back"
 msgstr ""
 
+#~ msgid "Leasetime"
+#~ msgstr "Leasetime"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "thống kê"
+
 #~ msgid "AR Support"
 #~ msgstr "Hỗ trợ AR"
 
index eb84b22..7f49185 100644 (file)
@@ -1,32 +1,22 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: \n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-21 23:08+0200\n"
-"PO-Revision-Date: 2017-04-09 15:04+0800\n"
-"Last-Translator: Hsing-Wang Liao <kuoruan@gmail.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: Poedit 2.0\n"
-"Language-Team: \n"
+"Last-Translator: Hsing-Wang Liao <kuoruan@gmail.com>\n"
 
 msgid "%s is untagged in multiple VLANs!"
-msgstr "%s 在多个 VLAN 中未标记"
+msgstr "%s 在多个 VLAN 中均未关联!"
 
 msgid "(%d minute window, %d second interval)"
-msgstr "(%d 分钟信息,%d 秒刷新)"
+msgstr "(%d 分钟信息,每 %d 秒刷新)"
 
 msgid "(%s available)"
-msgstr "(%s 可用)"
+msgstr "(%s 可用)"
 
 msgid "(empty)"
-msgstr "(空)"
+msgstr "(空)"
 
 msgid "(no interfaces attached)"
-msgstr "(未连接接口)"
+msgstr "(没有接口连接)"
 
 msgid "-- Additional Field --"
 msgstr "-- 更多选项 --"
@@ -47,10 +37,10 @@ msgid "-- match by uuid --"
 msgstr "-- 根据 UUID 匹配 --"
 
 msgid "1 Minute Load:"
-msgstr "1 分钟负载:"
+msgstr "1 分钟负载"
 
 msgid "15 Minute Load:"
-msgstr "15 分钟负载:"
+msgstr "15 分钟负载"
 
 msgid "4-character hexadecimal ID"
 msgstr "4 字符的十六进制 ID"
@@ -59,13 +49,13 @@ msgid "464XLAT (CLAT)"
 msgstr "464XLAT (CLAT)"
 
 msgid "5 Minute Load:"
-msgstr "5 分钟负载:"
+msgstr "5 分钟负载"
 
 msgid "6-octet identifier as a hex string - no colons"
-msgstr "6 个八位字节的标识符 (十六进制字符串) - 无冒号"
+msgstr "十六进制表示的 6 字节标识符,无冒号分隔"
 
 msgid "802.11r Fast Transition"
-msgstr "802.11r 快速换"
+msgstr "802.11r 快速换"
 
 msgid "802.11w Association SA Query maximum timeout"
 msgstr "802.11w 关联 SA 查询最大超时"
@@ -83,62 +73,67 @@ msgid "802.11w retry timeout"
 msgstr "802.11w 重试超时"
 
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
-msgstr "<abbr title=\"基本服务集标识符\">BSSID</abbr>"
+msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
 msgid "<abbr title=\"Domain Name System\">DNS</abbr> query port"
-msgstr "<abbr title=\"域名服务系统\">DNS</abbr> 查询端口"
+msgstr "<abbr title=\"Domain Name System\">DNS</abbr> 查询端口"
 
 msgid "<abbr title=\"Domain Name System\">DNS</abbr> server port"
-msgstr "<abbr title=\"域名服务系统\">DNS</abbr> 服务器端口"
+msgstr "<abbr title=\"Domain Name System\">DNS</abbr> 服务器端口"
 
 msgid ""
 "<abbr title=\"Domain Name System\">DNS</abbr> servers will be queried in the "
 "order of the resolvfile"
-msgstr "将会按照指定的顺序查询 <abbr title=\"域名服务系统\">DNS</abbr>"
+msgstr ""
+"按照 resolvfile 里的顺序查询 <abbr title=\"Domain Name System\">DNS</abbr> 服"
+"务器"
 
 msgid "<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
-msgstr "<abbr title=\"扩展服务集标识符\">ESSID</abbr>"
+msgstr "<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
 
 msgid "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Address"
-msgstr "<abbr title=\"互联网协议第4版\">IPv4</abbr>-地址"
+msgstr "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr> 地址"
 
 msgid "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Gateway"
-msgstr "<abbr title=\"互联网协议第4版\">IPv4</abbr>-网关"
+msgstr "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr> 网关"
 
 msgid "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"
-msgstr "<abbr title=\"互联网协议第4版\">IPv4</abbr>-子网掩码"
+msgstr "<abbr title=\"Internet Protocol Version 4\">IPv4</abbr> 子网掩码"
 
 msgid ""
 "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Address or Network "
 "(CIDR)"
 msgstr ""
-"<abbr title=\"互联网协议第6版\">IPv6</abbr>-地址或超网 (<abbr title=\"无类别"
-"域间路由\">CIDR</abbr>)"
+"<abbr title=\"Internet Protocol Version 6\">IPv6</abbr> 地址或网段(CIDR)"
 
 msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Gateway"
-msgstr "<abbr title=\"互联网协议第6版\">IPv6</abbr>-网关"
+msgstr "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr> 网关"
 
 msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
-msgstr "<abbr title=\"互联网协议第6版\">IPv6</abbr>-后缀 (十六进制)"
+msgstr ""
+"<abbr title=\"Internet Protocol Version 6\">IPv6</abbr> 后缀(十六进制)"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
-msgstr "<abbr title=\"发光二极管\">LED</abbr> 配置"
+msgstr "<abbr title=\"Light Emitting Diode\">LED</abbr> 配置"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Name"
-msgstr "<abbr title=\"发光二极管\">LED</abbr> 名称"
+msgstr "<abbr title=\"Light Emitting Diode\">LED</abbr> 名称"
 
 msgid "<abbr title=\"Media Access Control\">MAC</abbr>-Address"
-msgstr "<abbr title=\"介质访问控制\">MAC</abbr>-地址"
+msgstr "<abbr title=\"Media Access Control\">MAC</abbr> 地址"
 
 msgid ""
 "<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Dynamic Host Configuration "
 "Protocol\">DHCP</abbr> leases"
-msgstr "最大 <abbr title=\"动态主机配置协议\">DHCP</abbr> 分配数量"
+msgstr ""
+"最大 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> 租约数量"
 
 msgid ""
 "<abbr title=\"maximal\">Max.</abbr> <abbr title=\"Extension Mechanisms for "
 "Domain Name System\">EDNS0</abbr> packet size"
-msgstr "最大 <abbr title=\"DNS扩展名机制\">EDNS0</abbr> 数据包大小"
+msgstr ""
+"最大 <abbr title=\"Extension Mechanisms for Domain Name System\">EDNS0</"
+"abbr> 数据包大小"
 
 msgid "<abbr title=\"maximal\">Max.</abbr> concurrent queries"
 msgstr "最大并发查询数"
@@ -150,6 +145,7 @@ msgid ""
 "<br/>Note: you need to manually restart the cron service if the crontab file "
 "was empty before editing."
 msgstr ""
+"<br/>注意:如果 crontab 文件在编辑前为空,则需要手动重新启动 cron 服务。"
 
 msgid "A43C + J43 + A43"
 msgstr "A43C + J43 + A43"
@@ -173,16 +169,16 @@ msgid "ARP retry threshold"
 msgstr "ARP 重试阈值"
 
 msgid "ATM (Asynchronous Transfer Mode)"
-msgstr "ATM (异步传输模式)"
+msgstr "ATM(异步传输模式)"
 
 msgid "ATM Bridges"
 msgstr "ATM 桥接"
 
 msgid "ATM Virtual Channel Identifier (VCI)"
-msgstr "ATM 虚拟通道标识 (VCI)"
+msgstr "ATM 虚拟通道标识(VCI)"
 
 msgid "ATM Virtual Path Identifier (VPI)"
-msgstr "ATM 虚拟路径标识 (VPI)"
+msgstr "ATM 虚拟路径标识(VPI)"
 
 msgid ""
 "ATM bridges expose encapsulated ethernet in AAL5 connections as virtual "
@@ -217,10 +213,10 @@ msgid "Activate this network"
 msgstr "激活此网络"
 
 msgid "Active <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Routes"
-msgstr "活动的 <abbr title=\"互联网协议第4版\">IPv4</abbr>-链路"
+msgstr "活动的 <abbr title=\"Internet Protocol Version 4\">IPv4</abbr> 路由"
 
 msgid "Active <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Routes"
-msgstr "活动的 <abbr title=\"互联网协议第6版\">IPv6</abbr>-链路"
+msgstr "活动的 <abbr title=\"Internet Protocol Version 6\">IPv6</abbr> 路由"
 
 msgid "Active Connections"
 msgstr "活动连接"
@@ -262,7 +258,7 @@ msgid "Advanced Settings"
 msgstr "高级设置"
 
 msgid "Aggregate Transmit Power(ACTATP)"
-msgstr "总发射功率 (ACTATP)"
+msgstr "总发射功率(ACTATP)"
 
 msgid "Alert"
 msgstr "警戒"
@@ -276,7 +272,7 @@ msgid "Allocate IP sequentially"
 msgstr "顺序分配 IP"
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
-msgstr "允许 <abbr title=\"安全外壳协议\">SSH</abbr> 密码验证"
+msgstr "允许 <abbr title=\"Secure Shell\">SSH</abbr> 密码验证"
 
 msgid "Allow all except listed"
 msgstr "仅允许列表外"
@@ -291,14 +287,14 @@ msgid "Allow remote hosts to connect to local SSH forwarded ports"
 msgstr "允许远程主机连接到本地 SSH 转发端口"
 
 msgid "Allow root logins with password"
-msgstr "允许 Root 用户凭密码登录"
+msgstr "允许 root 用户凭密码登录"
 
 msgid "Allow the <em>root</em> user to login with password"
 msgstr "允许 <em>root</em> 用户凭密码登录"
 
 msgid ""
 "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
-msgstr "允许 127.0.0.0/8 回环范围内的上行响应,例如RBL 服务"
+msgstr "允许 127.0.0.0/8 回环范围内的上行响应,例如RBL 服务"
 
 msgid "Allowed IPs"
 msgstr "允许的 IP"
@@ -311,13 +307,13 @@ msgstr ""
 "faq=comparison\">隧道对比</a>"
 
 msgid "Always announce default router"
-msgstr "总是广播默认路由"
+msgstr "总是通告默认路由"
 
 msgid "Annex"
 msgstr "Annex"
 
 msgid "Annex A + L + M (all)"
-msgstr "Annex A + L + M (全部)"
+msgstr "Annex A + L + M(全部)"
 
 msgid "Annex A G.992.1"
 msgstr "Annex A G.992.1"
@@ -332,7 +328,7 @@ msgid "Annex A G.992.5"
 msgstr "Annex A G.992.5"
 
 msgid "Annex B (all)"
-msgstr "Annex B (全部)"
+msgstr "Annex B(全部)"
 
 msgid "Annex B G.992.1"
 msgstr "Annex B G.992.1"
@@ -344,13 +340,13 @@ msgid "Annex B G.992.5"
 msgstr "Annex B G.992.5"
 
 msgid "Annex J (all)"
-msgstr "Annex J (全部)"
+msgstr "Annex J(全部)"
 
 msgid "Annex L G.992.3 POTS 1"
 msgstr "Annex L G.992.3 POTS 1"
 
 msgid "Annex M (all)"
-msgstr "Annex M (全部)"
+msgstr "Annex M(全部)"
 
 msgid "Annex M G.992.3"
 msgstr "Annex M G.992.3"
@@ -359,13 +355,13 @@ msgid "Annex M G.992.5"
 msgstr "Annex M G.992.5"
 
 msgid "Announce as default router even if no public prefix is available."
-msgstr "即使没有可用的公共前缀也广播默认路由。"
+msgstr "即使没有可用的公网前缀,也仍通告自己为默认路由。"
 
 msgid "Announced DNS domains"
-msgstr "广播的 DNS 域名"
+msgstr "通告的 DNS 域名"
 
 msgid "Announced DNS servers"
-msgstr "广播的 DNS 服务器"
+msgstr "通告的 DNS 服务器"
 
 msgid "Anonymous Identity"
 msgstr "匿名身份"
@@ -396,14 +392,14 @@ msgstr "正在应用更改"
 
 msgid ""
 "Assign a part of given length of every public IPv6-prefix to this interface"
-msgstr "给每个公共 IPv6 前缀分配指定长度的固定部分"
+msgstr "将每个公共 IPv6 前缀的给定长度部分分配给此接口"
 
 msgid "Assign interfaces..."
 msgstr "分配接口..."
 
 msgid ""
 "Assign prefix parts using this hexadecimal subprefix ID for this interface."
-msgstr "指定此接口使用的十六进制子 ID 前缀部分。"
+msgstr "将此十六进制子 ID 前缀分配给此接口"
 
 msgid "Associated Stations"
 msgstr "已连接站点"
@@ -411,9 +407,6 @@ msgstr "已连接站点"
 msgid "Auth Group"
 msgstr "认证组"
 
-msgid "AuthGroup"
-msgstr "认证组"
-
 msgid "Authentication"
 msgstr "认证"
 
@@ -433,16 +426,16 @@ msgid "Automatic"
 msgstr "自动"
 
 msgid "Automatic Homenet (HNCP)"
-msgstr "自动家庭网络 (HNCP)"
+msgstr "自动家庭网络(HNCP)"
 
 msgid "Automatically check filesystem for errors before mounting"
 msgstr "在挂载前自动检查文件系统错误"
 
 msgid "Automatically mount filesystems on hotplug"
-msgstr "通过 Hotplug 自动挂载磁盘"
+msgstr "通过 hotplug 自动挂载磁盘"
 
 msgid "Automatically mount swap on hotplug"
-msgstr "通过 Hotplug 自动挂载 Swap 分区"
+msgstr "通过 hotplug 自动挂载 swap 分区"
 
 msgid "Automount Filesystem"
 msgstr "自动挂载磁盘"
@@ -457,7 +450,7 @@ msgid "Available packages"
 msgstr "可用软件包"
 
 msgid "Average:"
-msgstr "平均:"
+msgstr "平均"
 
 msgid "B43 + B43C"
 msgstr "B43 + B43C"
@@ -519,7 +512,7 @@ msgid "Bind only to specific interfaces rather than wildcard address."
 msgstr "仅绑定到特定接口,而不是全部地址。"
 
 msgid "Bind the tunnel to this interface (optional)."
-msgstr "将隧道绑定到此接口 (可选)。"
+msgstr "将隧道绑定到此接口(可选)。"
 
 msgid "Bitrate"
 msgstr "传输速率"
@@ -540,10 +533,10 @@ msgid "Bring up on boot"
 msgstr "开机自动运行"
 
 msgid "Broadcom 802.11%s Wireless Controller"
-msgstr "Broadcom 802.11%s 无线网卡"
+msgstr "Broadcom 802.11%s 无线控制器"
 
 msgid "Broadcom BCM%04x 802.11 Wireless Controller"
-msgstr "Broadcom BCM%04x 802.11 无线网卡"
+msgstr "Broadcom BCM%04x 802.11 无线控制器"
 
 msgid "Buffered"
 msgstr "已缓冲"
@@ -557,10 +550,10 @@ msgid "Buttons"
 msgstr "按键"
 
 msgid "CA certificate; if empty it will be saved after the first connection."
-msgstr "CA 证书,如果留空的话证书将在第一次连接时被保存。"
+msgstr "CA 证书,如果留空,则证书将在第一次连接后被保存。"
 
 msgid "CPU usage (%)"
-msgstr "CPU 使用率 (%)"
+msgstr "CPU 使用率(%)"
 
 msgid "Cancel"
 msgstr "取消"
@@ -600,12 +593,14 @@ msgid ""
 "<em>unspecified</em> to remove the interface from the associated zone or "
 "fill out the <em>create</em> field to define a new zone and attach the "
 "interface to it."
-msgstr "此接口的防火墙区域。填写<em>创建</em>栏可新建防火墙区域。"
+msgstr ""
+"为此接口分配所属的防火墙区域,选择“不指定”可将该接口移出已关联的区域,或者填"
+"写“创建”栏来创建一个新的区域,并将当前接口与之建立关联。"
 
 msgid ""
 "Choose the network(s) you want to attach to this wireless interface or fill "
 "out the <em>create</em> field to define a new network."
-msgstr "选择指派到此无线接口的网络。填写<em>创建</em>栏可新建网络。"
+msgstr "选择指派到此无线接口的网络,或者填写“创建”栏来新建网络。"
 
 msgid "Cipher"
 msgstr "算法"
@@ -619,7 +614,7 @@ msgid ""
 "\"Perform reset\" (only possible with squashfs images)."
 msgstr ""
 "点击“生成备份”下载当前配置文件的 tar 存档。要将固件恢复到初始状态,请单击“执"
-"行重置” (仅 Squashfs 固件有效)。"
+"行重置”(仅 squashfs 格式的固件有效)。"
 
 msgid "Client"
 msgstr "客户端 Client"
@@ -630,7 +625,7 @@ msgstr "请求 DHCP 时发送的客户 ID"
 msgid ""
 "Close inactive connection after the given amount of seconds, use 0 to "
 "persist connection"
-msgstr "å®\9aæ\97¶å\85³é\97­é\9d\9eæ´»å\8a¨é\93¾æ\8e¥ (ç§\92)ï¼\8c0 ä¸ºæ\8c\81ç»­连接"
+msgstr "å\9c¨ç»\99å®\9aæ\97¶é\97´ï¼\88ç§\92ï¼\89å\90\8eå\85³é\97­é\9d\9eæ´»å\8a¨é\93¾æ\8e¥ï¼\8c0 ä¸ºä¿\9dæ\8c\81连接"
 
 msgid "Close list..."
 msgstr "关闭列表..."
@@ -639,10 +634,10 @@ msgid "Collecting data..."
 msgstr "正在收集数据..."
 
 msgid "Command"
-msgstr "进程命令"
+msgstr "命令"
 
 msgid "Common Configuration"
-msgstr "一般置"
+msgstr "一般置"
 
 msgid "Configuration"
 msgstr "配置"
@@ -669,7 +664,7 @@ msgid "Connection to server fails when TLS cannot be used"
 msgstr "当 TLS 不可用时,与服务器连接失败"
 
 msgid "Connections"
-msgstr "接"
+msgstr "接"
 
 msgid "Country"
 msgstr "国家"
@@ -707,16 +702,16 @@ msgstr "自定义分配的 IPv6 前缀"
 msgid ""
 "Custom feed definitions, e.g. private feeds. This file can be preserved in a "
 "sysupgrade."
-msgstr ""
-"自定义的软件源地址 (例如私有的软件源)。此处设定的源地址在系统升级时将被保留"
+msgstr "自定义软件源地址,例如:私有的软件源。此文件在系统升级时将被保留。"
 
 msgid "Custom feeds"
-msgstr "自定义软件源"
+msgstr "自定义软件源"
 
 msgid ""
 "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
 "\">LED</abbr>s if possible."
-msgstr "自定义 <abbr title=\"发光二极管\">LED</abbr> 的活动状态。"
+msgstr ""
+"自定义设备 <abbr title=\"Light Emitting Diode\">LED</abbr> 行为(如果可能)。"
 
 msgid "DHCP Leases"
 msgstr "DHCP 分配"
@@ -731,7 +726,7 @@ msgid "DHCP client"
 msgstr "DHCP 客户端"
 
 msgid "DHCP-Options"
-msgstr "DHCP-选项"
+msgstr "DHCP 选项"
 
 msgid "DHCPv6 Leases"
 msgstr "DHCPv6 分配"
@@ -758,7 +753,7 @@ msgid "DNSSEC"
 msgstr "DNSSEC"
 
 msgid "DNSSEC check unsigned"
-msgstr "DNSSEC æ\9cªç­¾å\90\8dæ£\80æ\9f¥"
+msgstr "DNSSEC æ£\80æ\9f¥æ\9cªç­¾å\90\8d"
 
 msgid "DPD Idle Timeout"
 msgstr "DPD 空闲超时"
@@ -791,7 +786,7 @@ msgid "Default gateway"
 msgstr "默认网关"
 
 msgid "Default is stateless + stateful"
-msgstr "默认是无状态 + 有状态"
+msgstr "默认是无状态的 + 有状态的"
 
 msgid "Default route"
 msgstr "默认路由"
@@ -852,7 +847,9 @@ msgstr "禁用"
 msgid ""
 "Disable <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> for "
 "this interface."
-msgstr "禁用本接口的 <abbr title=\"动态主机配置协议\">DHCP</abbr>。"
+msgstr ""
+"不在此接口提供 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
+"abbr> 服务。"
 
 msgid "Disable DNS setup"
 msgstr "停用 DNS 设定"
@@ -864,7 +861,7 @@ msgid "Disabled"
 msgstr "禁用"
 
 msgid "Disabled (default)"
-msgstr "禁用 (默认)"
+msgstr "禁用(默认)"
 
 msgid "Discard upstream RFC1918 responses"
 msgstr "丢弃 RFC1918 上行响应数据"
@@ -876,7 +873,7 @@ msgid "Distance Optimization"
 msgstr "距离优化"
 
 msgid "Distance to farthest network member in meters."
-msgstr "最远网络用户的距离 (米)。"
+msgstr "最远网络用户的距离(米)。"
 
 msgid "Distribution feeds"
 msgstr "发行版软件源"
@@ -890,18 +887,18 @@ msgid ""
 "Forwarder for <abbr title=\"Network Address Translation\">NAT</abbr> "
 "firewalls"
 msgstr ""
-"Dnsmasq 为 <abbr title=\"网络地址转换\">NAT</abbr> 防火墙提供了一个集成的 "
-"<abbr title=\"动态主机配置协议\">DHCP</abbr> 服务器和 <abbr title=\"域名系统"
-"\">DNS</abbr> 转发器"
+"Dnsmasq 为 <abbr title=\"Network Address Translation\">NAT</abbr> 防火墙提供"
+"了一个集成的 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> "
+"服务器和 <abbr title=\"Domain Name System\">DNS</abbr> 转发器"
 
 msgid "Do not cache negative replies, e.g. for not existing domains"
-msgstr "不缓存无用的回应, 比如: 不存在的域。"
+msgstr "不缓存无用的回应, 比如:不存在的域名"
 
 msgid "Do not forward requests that cannot be answered by public name servers"
 msgstr "不转发公共域名服务器无法回应的请求"
 
 msgid "Do not forward reverse lookups for local networks"
-msgstr "不转发反向查询本地网络的 Lookups 命令"
+msgstr "不转发本地网络的反向查询"
 
 msgid "Domain required"
 msgstr "忽略空域名解析"
@@ -910,12 +907,13 @@ msgid "Domain whitelist"
 msgstr "域名白名单"
 
 msgid "Don't Fragment"
-msgstr "禁止片"
+msgstr "禁止片"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
 "<abbr title=\"Domain Name System\">DNS</abbr>-Name"
-msgstr "不转发没有 <abbr title=\"域名系统\">DNS</abbr> 名称的解析请求"
+msgstr ""
+"不转发没有 <abbr title=\"Domain Name System\">DNS</abbr> 名称的解析请求"
 
 msgid "Download and install package"
 msgstr "下载并安装软件包"
@@ -930,14 +928,14 @@ msgid ""
 "Dropbear offers <abbr title=\"Secure Shell\">SSH</abbr> network shell access "
 "and an integrated <abbr title=\"Secure Copy\">SCP</abbr> server"
 msgstr ""
-"Dropbear 提供了集成的 <abbr title=\"安全复制\">SCP</abbr> 服务器和基于 <abbr "
-"title=\"安全外壳协议\">SSH</abbr> 的 Shell 访问"
+"Dropbear 提供 <abbr title=\"Secure Shell\">SSH</abbr> 访问和 <abbr title="
+"\"Secure Copy\">SCP</abbr> 服务"
 
 msgid "Dual-Stack Lite (RFC6333)"
 msgstr "Dual-Stack Lite (RFC6333)"
 
 msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
-msgstr "动态 <abbr title=\"动态主机配置协议\">DHCP</abbr>"
+msgstr "动态 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
 
 msgid "Dynamic tunnel"
 msgstr "动态隧道"
@@ -946,7 +944,7 @@ msgid ""
 "Dynamically allocate DHCP addresses for clients. If disabled, only clients "
 "having static leases will be served."
 msgstr ""
-"动态分配 DHCP 地址。如果禁用,则只能为静态租用表中的客户端提供网络服务。"
+"为所有客户端提供 DHCP 服务。如果禁用,将只对具有静态租约的客户提供服务。"
 
 msgid "EA-bits length"
 msgstr "EA-bits 长度"
@@ -960,7 +958,7 @@ msgstr "修改"
 msgid ""
 "Edit the raw configuration data above to fix any error and hit \"Save\" to "
 "reload the page."
-msgstr "编辑上方的原始配置以修复错误并按下“保存”按钮以重新载入此页面。"
+msgstr "编辑上方的原始配置数据来修复错误,点击“保存”按钮以重新载入此页面。"
 
 msgid "Edit this interface"
 msgstr "修改此接口"
@@ -975,7 +973,7 @@ msgid "Enable"
 msgstr "启用"
 
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
-msgstr "开启 <abbr title=\"生成树协议\">STP</abbr>"
+msgstr "开启 <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
 msgid "Enable HE.net dynamic endpoint update"
 msgstr "启用 HE.net 动态终端更新"
@@ -1002,7 +1000,7 @@ msgid "Enable VLAN functionality"
 msgstr "启用 VLAN"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr "启用 WPS 按键配置,要求使用 WPA(2)-PSK"
+msgstr "启用 WPS 一键加密按钮,需要 WPA(2)-PSK"
 
 msgid "Enable learning and aging"
 msgstr "启用智能交换学习"
@@ -1014,7 +1012,7 @@ msgid "Enable mirroring of outgoing packets"
 msgstr "启用流出数据包镜像"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr "å\90¯ç\94¨å°\81è£\85æ\95°æ\8d®å\8c\85ç\9a\84 DF (ç¦\81æ­¢ç¢\8eç\89\87标志。"
+msgstr "å\90¯ç\94¨å\90\8eæ\8a¥æ\96\87ç\9a\84 DFï¼\88ç¦\81æ­¢å\88\86ç\89\87ï¼\89标志。"
 
 msgid "Enable this mount"
 msgstr "启用挂载点"
@@ -1034,7 +1032,7 @@ msgid ""
 msgstr "启用属于同一移动域的接入点之间的快速漫游"
 
 msgid "Enables the Spanning Tree Protocol on this bridge"
-msgstr "在此桥接上启用生成协议树"
+msgstr "在此桥接上启用生成树协议"
 
 msgid "Encapsulation mode"
 msgstr "封装模式"
@@ -1055,7 +1053,7 @@ msgid "Error"
 msgstr "错误"
 
 msgid "Errored seconds (ES)"
-msgstr "错误秒数 (ES)"
+msgstr "错误秒数(ES)"
 
 msgid "Ethernet Adapter"
 msgstr "以太网适配器"
@@ -1074,25 +1072,25 @@ msgstr "到期时间"
 
 msgid ""
 "Expiry time of leased addresses, minimum is 2 minutes (<code>2m</code>)."
-msgstr "租用地址的到期时间,最短 2 分钟 (<code>2m</code>)。"
+msgstr "租用地址的到期时间,最短 2 分钟(<code>2m</code>)。"
 
 msgid "External"
 msgstr "外部"
 
 msgid "External R0 Key Holder List"
-msgstr "外部 R0KH (R0 Key Holder) 列表"
+msgstr "外部 <abbr title=\"R0 Key Holder\">R0KH</abbr> 列表"
 
 msgid "External R1 Key Holder List"
-msgstr "外部 R1KH (R1 Key Holder) 列表"
+msgstr "外部 <abbr title=\"R1 Key Holder\">R1KH</abbr> 列表"
 
 msgid "External system log server"
-msgstr "外部日志服务器"
+msgstr "外部系统日志服务器地址"
 
 msgid "External system log server port"
-msgstr "外部日志服务器端口"
+msgstr "外部系统日志服务器端口"
 
 msgid "External system log server protocol"
-msgstr "外部日志服务器协议"
+msgstr "外部系统日志服务器协议"
 
 msgid "Extra SSH command options"
 msgstr "额外的 SSH 命令选项"
@@ -1118,9 +1116,7 @@ msgstr "过滤无用包"
 msgid ""
 "Find all currently attached filesystems and swap and replace configuration "
 "with defaults based on what was detected"
-msgstr ""
-"查找所有当前系统上的分区和 Swap 并使用基于所找到的分区生成的配置文件替换默认"
-"配置"
+msgstr "查找当前系统上的所有分区和 swap 设备,并根据查找结果生成并替换现有配置"
 
 msgid "Find and join network"
 msgstr "搜索并加入网络"
@@ -1171,7 +1167,7 @@ msgid "Force"
 msgstr "强制"
 
 msgid "Force CCMP (AES)"
-msgstr "强制 CCMP (AES)"
+msgstr "强制 CCMP(AES)"
 
 msgid "Force DHCP on this network even if another server is detected."
 msgstr "即使检测到另一台服务器,也要强制使用此网络上的 DHCP。"
@@ -1180,7 +1176,7 @@ msgid "Force TKIP"
 msgstr "强制 TKIP"
 
 msgid "Force TKIP and CCMP (AES)"
-msgstr "强制 TKIP 和 CCMP (AES)"
+msgstr "强制 TKIP 和 CCMP(AES)"
 
 msgid "Force link"
 msgstr "强制链路"
@@ -1195,7 +1191,7 @@ msgid "Forward DHCP traffic"
 msgstr "转发 DHCP 数据包"
 
 msgid "Forward Error Correction Seconds (FECS)"
-msgstr "前向纠错秒数 (FECS)"
+msgstr "前向纠错秒数(FECS)"
 
 msgid "Forward broadcast traffic"
 msgstr "转发广播数据包"
@@ -1219,7 +1215,7 @@ msgid ""
 "Further information about WireGuard interfaces and peers at <a href=\"http://"
 "wireguard.io\">wireguard.io</a>."
 msgstr ""
-"有关 WireGuard 接口和 Peer 的更多信息<a href=\"http://wireguard.io"
+"有关 WireGuard 接口和 Peer 的更多信息<a href=\"http://wireguard.io"
 "\">wireguard.io</a>。"
 
 msgid "GHz"
@@ -1250,7 +1246,7 @@ msgid "Generate archive"
 msgstr "生成备份"
 
 msgid "Generic 802.11%s Wireless Controller"
-msgstr "通用 802.11%s 无线网卡"
+msgstr "通用 802.11%s 无线控制器"
 
 msgid "Given password confirmation did not match, password not changed!"
 msgstr "由于密码验证不匹配,密码没有更改!"
@@ -1280,7 +1276,7 @@ msgid "HE.net username"
 msgstr "HE.net 用户名"
 
 msgid "HT mode (802.11n)"
-msgstr "HT 模式 (802.11n)"
+msgstr "HT 模式(802.11n)"
 
 msgid "Handler"
 msgstr "处理程序"
@@ -1289,7 +1285,7 @@ msgid "Hang Up"
 msgstr "挂起"
 
 msgid "Header Error Code Errors (HEC)"
-msgstr "请求头的错误代码错误 (HEC)"
+msgstr "请求头错误代码错误(HEC)"
 
 msgid "Heartbeat"
 msgstr "心跳"
@@ -1302,13 +1298,13 @@ msgstr "配置路由器的部分基础信息。"
 msgid ""
 "Here you can paste public SSH-Keys (one per line) for SSH public-key "
 "authentication."
-msgstr "请在这里粘贴公共 SSH 密钥用于 SSH 公钥认证 (每行一个)。"
+msgstr "请在此处粘贴 SSH 公钥,每行一个,用于 SSH 公钥认证。"
 
 msgid "Hermes 802.11b Wireless Controller"
-msgstr "Hermes 802.11b 无线网卡"
+msgstr "Hermes 802.11b 无线控制器"
 
 msgid "Hide <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
-msgstr "隐藏 <abbr title=\"扩展服务集标识符\">ESSID</abbr>"
+msgstr "隐藏 <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
 
 msgid "Host"
 msgstr "主机"
@@ -1320,7 +1316,7 @@ msgid "Host expiry timeout"
 msgstr "主机到期超时"
 
 msgid "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network"
-msgstr "主机 IP 或网络"
+msgstr "主机 <abbr title=\"Internet Protocol Address\">IP</abbr> 或网络"
 
 msgid "Hostname"
 msgstr "主机名"
@@ -1380,7 +1376,7 @@ msgid "IPv4 prefix length"
 msgstr "IPv4 地址前缀长度"
 
 msgid "IPv4-Address"
-msgstr "IPv4-地址"
+msgstr "IPv4 地址"
 
 msgid "IPv4-in-IPv4 (RFC2003)"
 msgstr "IPv4-in-IPv4 (RFC2003)"
@@ -1407,7 +1403,7 @@ msgid "IPv6 address"
 msgstr "IPv6 地址"
 
 msgid "IPv6 address delegated to the local tunnel endpoint (optional)"
-msgstr "绑定到本地隧道终点的 IPv6 地址 (可选)"
+msgstr "绑定到隧道本端的 IPv6 地址(可选)"
 
 msgid "IPv6 assignment hint"
 msgstr "IPv6 分配提示"
@@ -1430,8 +1426,11 @@ msgstr "IPv6 地址前缀长度"
 msgid "IPv6 routed prefix"
 msgstr "IPv6 路由前缀"
 
+msgid "IPv6 suffix"
+msgstr "IPv6 后缀"
+
 msgid "IPv6-Address"
-msgstr "IPv6-地址"
+msgstr "IPv6 地址"
 
 msgid "IPv6-PD"
 msgstr "IPv6-PD"
@@ -1456,12 +1455,12 @@ msgstr "选中以禁用加密"
 
 msgid ""
 "If specified, mount the device by its UUID instead of a fixed device node"
-msgstr "用 UUID 来挂载设备"
+msgstr "如果指定,则通过 UUID 而不是固定的设备文件来挂载设备"
 
 msgid ""
 "If specified, mount the device by the partition label instead of a fixed "
 "device node"
-msgstr "用卷标来挂载设备"
+msgstr "如果指定,则通过分区卷标而不是固定的设备文件来挂载设备"
 
 msgid "If unchecked, no default route is configured"
 msgstr "留空则不配置默认路由"
@@ -1475,7 +1474,11 @@ msgid ""
 "\"Random Access Memory\">RAM</abbr>. Be aware that swapping data is a very "
 "slow process as the swap-device cannot be accessed with the high datarates "
 "of the <abbr title=\"Random Access Memory\">RAM</abbr>."
-msgstr "如果物理内存不足,闲置数据可自动移到交换区暂存,以提高可用内存。"
+msgstr ""
+"如果物理内存不足,闲置数据可自动移到 swap 区暂存,以增加可用的 <abbr title="
+"\"Random Access Memory\">RAM</abbr>。请注意:swap 区的数据处理会非常慢,因为 "
+"swap设备无法像 <abbr title=\"Random Access Memory\">RAM</abbr> 这样的高速率访"
+"问。"
 
 msgid "Ignore <code>/etc/hosts</code>"
 msgstr "忽略 <code>/etc/hosts</code>"
@@ -1496,14 +1499,14 @@ msgid ""
 "In order to prevent unauthorized access to the system, your request has been "
 "blocked. Click \"Continue »\" below to return to the previous page."
 msgstr ""
-"为了防止对系统的未授权访问,您的请求已被阻止。点击下面的 “继续 »” 来返回上一"
+"为了防止未经授权访问系统,您的请求已被阻止。点击下面的 “继续 »” 来返回上一"
 "页。"
 
 msgid "Inactivity timeout"
 msgstr "活动超时"
 
 msgid "Inbound:"
-msgstr "入站:"
+msgstr "入站"
 
 msgid "Info"
 msgstr "信息"
@@ -1532,6 +1535,9 @@ msgstr "已安装软件包"
 msgid "Interface"
 msgstr "接口"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr "接口设备 %q 从 %q 自动迁移到了 %q。"
+
 msgid "Interface Configuration"
 msgstr "接口配置"
 
@@ -1572,13 +1578,13 @@ msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed."
 msgstr "无效的 VLAN ID!只有 %d 和 %d 之间的 ID 有效。"
 
 msgid "Invalid VLAN ID given! Only unique IDs are allowed"
-msgstr "无效的 VLAN ID!只允许唯一的 ID"
+msgstr "无效的 VLAN ID!只允许唯一的 ID"
 
 msgid "Invalid username and/or password! Please try again."
 msgstr "无效的用户名和/或密码!请重试。"
 
 msgid "Isolate Clients"
-msgstr ""
+msgstr "隔离客户端"
 
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1592,10 +1598,10 @@ msgid "Join Network"
 msgstr "加入网络"
 
 msgid "Join Network: Wireless Scan"
-msgstr "加入网络搜索无线"
+msgstr "加入网络搜索无线"
 
 msgid "Joining Network: %q"
-msgstr "加入网络%q"
+msgstr "加入网络%q"
 
 msgid "Keep settings"
 msgstr "保留配置"
@@ -1654,9 +1660,6 @@ msgstr "有效租期"
 msgid "Leasefile"
 msgstr "租约文件"
 
-msgid "Leasetime"
-msgstr "租用时间"
-
 msgid "Leasetime remaining"
 msgstr "剩余租期"
 
@@ -1667,19 +1670,19 @@ msgid "Leave empty to use the current WAN address"
 msgstr "留空则使用当前 WAN 地址"
 
 msgid "Legend:"
-msgstr "图例:"
+msgstr "图例"
 
 msgid "Limit"
 msgstr "客户数"
 
 msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
-msgstr "将DNS服务限制到我们提供DNS的子网接口。"
+msgstr "仅在网卡所属的子网中提供 DNS 服务。"
 
 msgid "Limit listening to these interfaces, and loopback."
 msgstr "仅监听这些接口和环回接口。"
 
 msgid "Line Attenuation (LATN)"
-msgstr "线路衰减 (LATN)"
+msgstr "线路衰减(LATN)"
 
 msgid "Line Mode"
 msgstr "线路模式"
@@ -1697,8 +1700,7 @@ msgid ""
 "List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
 "requests to"
 msgstr ""
-"将指定域名的解析请求转发到指定的 <abbr title=\"域名系统\">DNS</abbr> 服务器 "
-"(按照示例填写)"
+"将请求转发到的 <abbr title=\"Domain Name System\">DNS</abbr> 服务器列表"
 
 msgid ""
 "List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
@@ -1707,9 +1709,9 @@ msgid ""
 "from the R0KH that the STA used during the Initial Mobility Domain "
 "Association."
 msgstr ""
-"同一移动域中的 R0KH 列表。<br />格式: MAC 地址,NAS标识符,128位密钥 (十六进制"
-"字符串)。<br />在从初始移动域关联期间使用的 R0KH 中请求 PMK-R1 密钥时,该列表"
-"用于将 R0KH-ID (NAS标识符)映射到目标 MAC 地址。"
+"同一移动域中的 R0KH 列表。<br />格式:MAC 地址,NAS 标识符,128 位密钥(十六"
+"进制字符串)。<br />在从初始移动域关联期间使用的 R0KH 中请求 PMK-R1 密钥时,"
+"该列表用于将 R0KH-ID(NAS 标识符)映射到目标 MAC 地址。"
 
 msgid ""
 "List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
@@ -1718,10 +1720,10 @@ msgid ""
 "R0KH. This is also the list of authorized R1KHs in the MD that can request "
 "PMK-R1 keys."
 msgstr ""
-"同一移动域中的 R1KH 列表。<br />格式: MAC地址,R1KH-ID (包含冒号的6个八位字"
-"节),128位密钥 (十六进制字符串)。<br />当从 R0KH 发送 PMK-R1 键时,此列表用于"
-"将 R1KH-ID 映射到目标 MAC 地址。这也是可以请求 PMK-R1 键的 MD 中授权的 R1KH "
-"的列表。"
+"同一移动域中的 R1KH 列表。<br />格式:MAC 地址,R1KH-ID(包含冒号的 6 个八位"
+"字节),128 位密钥(十六进制字符串)。<br />当从 R0KH 发送 PMK-R1 键时,此列"
+"表用于将 R1KH-ID 映射到目标 MAC 地址。这也是可以请求 PMK-R1 键的 MD 中授权的 "
+"R1KH 的列表。"
 
 msgid "List of SSH key files for auth"
 msgstr "用于认证的 SSH 密钥文件列表"
@@ -1812,22 +1814,22 @@ msgid "Logout"
 msgstr "退出"
 
 msgid "Loss of Signal Seconds (LOSS)"
-msgstr "信号丢失秒数 (LOSS)"
+msgstr "信号丢失秒数(LOSS)"
 
 msgid "Lowest leased address as offset from the network address."
 msgstr "网络地址的起始分配基址。"
 
 msgid "MAC-Address"
-msgstr "MAC-地址"
+msgstr "MAC 地址"
 
 msgid "MAC-Address Filter"
-msgstr "MAC-地址过滤"
+msgstr "MAC 地址过滤"
 
 msgid "MAC-Filter"
-msgstr "MAC-过滤"
+msgstr "MAC 过滤"
 
 msgid "MAC-List"
-msgstr "MAC-列表"
+msgstr "MAC 列表"
 
 msgid "MAP / LW4over6"
 msgstr "MAP / LW4over6"
@@ -1847,13 +1849,13 @@ msgstr "MTU"
 msgid ""
 "Make sure to clone the root filesystem using something like the commands "
 "below:"
-msgstr "请确认你已经复制过整个根文件系统,例如使用以下命令:"
+msgstr "确保使用以下命令来复制根文件系统:"
 
 msgid "Manual"
 msgstr "手动"
 
 msgid "Max. Attainable Data Rate (ATTNDR)"
-msgstr "最大可达数据速率 (ATTNDR)"
+msgstr "最大可达数据速率(ATTNDR)"
 
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "允许的最大 DHCP 租用数"
@@ -1865,7 +1867,7 @@ msgid "Maximum allowed size of EDNS.0 UDP packets"
 msgstr "允许的最大 EDNS.0 UDP 数据包大小"
 
 msgid "Maximum amount of seconds to wait for the modem to become ready"
-msgstr "调制解调器就绪的最大等待时间 (秒)"
+msgstr "调制解调器就绪的最大等待时间(秒)"
 
 msgid "Maximum hold time"
 msgstr "最大持续时间"
@@ -1874,7 +1876,8 @@ msgid ""
 "Maximum length of the name is 15 characters including the automatic protocol/"
 "bridge prefix (br-, 6in4-, pppoe- etc.)"
 msgstr ""
-"名称的最大长度为 15 个字符,包括自动协议/网桥前缀 (br-, 6in4-, pppoe- 等等)"
+"名称的最大长度为 15 个字符,包含根据协议类型,网桥自动添加上的名字前缀(br-、"
+"6in4-、pppoe- 等)"
 
 msgid "Maximum number of leased addresses."
 msgstr "最大地址分配数量。"
@@ -1886,7 +1889,7 @@ msgid "Memory"
 msgstr "内存"
 
 msgid "Memory usage (%)"
-msgstr "内存使用率 (%)"
+msgstr "内存使用率(%)"
 
 msgid "Metric"
 msgstr "跃点数"
@@ -1951,7 +1954,7 @@ msgid "Mount point"
 msgstr "挂载点"
 
 msgid "Mount swap not specifically configured"
-msgstr "自动挂载未专门配置的 Swap 分区"
+msgstr "自动挂载未专门配置的 swap 分区"
 
 msgid "Mounted file systems"
 msgstr "已挂载的文件系统"
@@ -1975,10 +1978,10 @@ msgid "NAT64 Prefix"
 msgstr "NAT64 前缀"
 
 msgid "NCM"
-msgstr ""
+msgstr "NCM"
 
 msgid "NDP-Proxy"
-msgstr "NDP-代理"
+msgstr "NDP 代理"
 
 msgid "NT Domain"
 msgstr "NT 域"
@@ -2059,13 +2062,13 @@ msgid "Noise"
 msgstr "噪声"
 
 msgid "Noise Margin (SNR)"
-msgstr "噪声容限 (SNR)"
+msgstr "噪声容限(SNR)"
 
 msgid "Noise:"
-msgstr "噪声:"
+msgstr "噪声"
 
 msgid "Non Pre-emtive CRC errors (CRC_P)"
-msgstr "非抢占 CRC 错误 (CRC_P)"
+msgstr "非抢占 CRC 错误(CRC_P)"
 
 msgid "Non-wildcard"
 msgstr "非全部地址"
@@ -2086,10 +2089,10 @@ msgid "Not connected"
 msgstr "未连接"
 
 msgid "Note: Configuration files will be erased."
-msgstr "注意配置文件将被删除。"
+msgstr "注意配置文件将被删除。"
 
 msgid "Note: interface name length"
-msgstr "注意接口名称长度"
+msgstr "注意接口名称长度"
 
 msgid "Notice"
 msgstr "注意"
@@ -2101,7 +2104,7 @@ msgid "OK"
 msgstr "确认"
 
 msgid "OPKG-Configuration"
-msgstr "OPKG-配置"
+msgstr "OPKG 配置"
 
 msgid "Obfuscated Group Password"
 msgstr "混淆组密码"
@@ -2121,8 +2124,9 @@ msgid ""
 "<samp>eth0.1</samp>)."
 msgstr ""
 "在此页面,你可以配置网络接口。你可以勾选“桥接接口”,并输入由空格分隔的多个网"
-"络接口的名称来桥接多个接口。还可以使用 <abbr title=\"虚拟局域网\">VLAN</"
-"abbr> 符号 <samp>INTERFACE.VLANNR</samp> (例如: <samp>eth0.1</samp>)。"
+"络接口的名称来桥接多个接口。接口名称中可以使用 <abbr title=\"Virtual Local "
+"Area Network\">VLAN</abbr> 记号 <samp>INTERFACE.VLANNR</samp>(例如:"
+"<samp>eth0.1</samp>)。"
 
 msgid "On-State Delay"
 msgstr "通电时间"
@@ -2143,7 +2147,7 @@ msgid "Open list..."
 msgstr "打开列表..."
 
 msgid "OpenConnect (CISCO AnyConnect)"
-msgstr "开放连接 (CISCO AnyConnect)"
+msgstr "OpenConnect (CISCO AnyConnect)"
 
 msgid "Operating frequency"
 msgstr "工作频率"
@@ -2158,13 +2162,10 @@ msgid "Optional"
 msgstr "可选"
 
 msgid "Optional, specify to override default server (tic.sixxs.net)"
-msgstr "可选,设置这个选项会覆盖默认设定的服务器 (tic.sixxs.net)"
+msgstr "可选,设置这个选项会覆盖默认服务器(tic.sixxs.net)"
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
-msgstr "可选,如果你的 SIXXS 账号拥有一个以上的隧道请设置此项."
-
-msgid "Optional."
-msgstr "可选。"
+msgstr "可选,如果你的 SIXXS 账号拥有一个以上的隧道请设置此项"
 
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
@@ -2173,6 +2174,16 @@ msgstr ""
 "可选,传出加密数据包的 32 位标记。请输入十六进制值,以 <code>0x</code> 开头。"
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+"可选,允许的值:'eui64'、'random' 和其他固定值(例如:'::1' 或 '::1:2')。当"
+"从授权服务器获取到 IPv6 前缀(如 'a:b:c:d::'),使用后缀(如 '::1')合成 "
+"IPv6 地址('a:b:c:d::1')分配给此接口。"
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr "可选,Base64 编码的预共享密钥。"
@@ -2189,14 +2200,14 @@ msgid "Optional. Maximum Transmission Unit of tunnel interface."
 msgstr "可选,隧道接口的最大传输单元。"
 
 msgid "Optional. Port of peer."
-msgstr "可选,Peer的端口。"
+msgstr "可选,Peer 的端口。"
 
 msgid ""
 "Optional. Seconds between keep alive messages. Default is 0 (disabled). "
 "Recommended value if this device is behind a NAT is 25."
 msgstr ""
-"可选,Keep-Alive 消息之间的秒数,默认为 0 (禁用)。如果此设备位于 NAT 之后,建"
-"议使用的值为 25。"
+"可选,Keep-Alive 消息之间的秒数,默认为 0(禁用)。如果此设备位于 NAT 之后,"
+"议使用的值为 25。"
 
 msgid "Optional. UDP port used for outgoing and incoming packets."
 msgstr "可选,用于传出和传入数据包的 UDP 端口。"
@@ -2205,13 +2216,13 @@ msgid "Options"
 msgstr "选项"
 
 msgid "Other:"
-msgstr "其余:"
+msgstr "其余"
 
 msgid "Out"
 msgstr "出口"
 
 msgid "Outbound:"
-msgstr "出站:"
+msgstr "出站"
 
 msgid "Output Interface"
 msgstr "网络出口"
@@ -2288,7 +2299,7 @@ msgid "PSID-bits length"
 msgstr "PSID-bits 长度"
 
 msgid "PTM/EFM (Packet Transfer Mode)"
-msgstr "PTM/EFM (分组传输模式)"
+msgstr "PTM/EFM(分组传输模式)"
 
 msgid "Package libiwinfo required!"
 msgstr "需要 libiwinfo 软件包!"
@@ -2320,6 +2331,9 @@ msgstr "内部私钥的密码"
 msgid "Password successfully changed!"
 msgstr "密码修改成功!"
 
+msgid "Password2"
+msgstr "密码 2"
+
 msgid "Path to CA-Certificate"
 msgstr "CA 证书路径"
 
@@ -2333,7 +2347,7 @@ msgid "Path to executable which handles the button event"
 msgstr "处理按键动作的可执行文件路径"
 
 msgid "Path to inner CA-Certificate"
-msgstr "内部CA证书的路径"
+msgstr "内部 CA 证书的路径"
 
 msgid "Path to inner Client-Certificate"
 msgstr "内部客户端证书的路径"
@@ -2342,7 +2356,7 @@ msgid "Path to inner Private Key"
 msgstr "内部私钥的路径"
 
 msgid "Peak:"
-msgstr "峰值:"
+msgstr "峰值"
 
 msgid "Peer IP address to assign"
 msgstr "要分配的 Peer IP 地址"
@@ -2363,7 +2377,7 @@ msgid "Persistent Keep Alive"
 msgstr "持续 Keep-Alive"
 
 msgid "Phy Rate:"
-msgstr "物理速率:"
+msgstr "物理速率"
 
 msgid "Physical Settings"
 msgstr "物理设置"
@@ -2384,13 +2398,13 @@ msgid "Port"
 msgstr "端口"
 
 msgid "Port status:"
-msgstr "端口状态:"
+msgstr "端口状态"
 
 msgid "Power Management Mode"
 msgstr "电源管理模式"
 
 msgid "Pre-emtive CRC errors (CRCP_P)"
-msgstr "抢占式 CRC 错误 (CRCP_P)"
+msgstr "抢占式 CRC 错误(CRCP_P)"
 
 msgid "Prefer LTE"
 msgstr "首选 LTE"
@@ -2416,7 +2430,7 @@ msgid "Prevents client-to-client communication"
 msgstr "禁止客户端间通信"
 
 msgid "Prism2/2.5/3 802.11b Wireless Controller"
-msgstr "Prism2/2.5/3 802.11b 无线网卡"
+msgstr "Prism2/2.5/3 802.11b 无线控制器"
 
 msgid "Private Key"
 msgstr "私钥"
@@ -2446,13 +2460,13 @@ msgid "Protocol support is not installed"
 msgstr "未安装协议支持"
 
 msgid "Provide NTP server"
-msgstr "NTP服务器"
+msgstr "作为 NTP 服务器提供服务"
 
 msgid "Provide new network"
 msgstr "添加新网络"
 
 msgid "Pseudo Ad-Hoc (ahdemo)"
-msgstr "伪装 Ad-Hoc (ahdemo)"
+msgstr "伪装 Ad-Hoc(ahdemo)"
 
 msgid "Public Key"
 msgstr "公钥"
@@ -2485,7 +2499,7 @@ msgid "RX Rate"
 msgstr "接收速率"
 
 msgid "RaLink 802.11%s Wireless Controller"
-msgstr "RaLink 802.11%s 无线网卡"
+msgstr "RaLink 802.11%s 无线控制器"
 
 msgid "Radius-Accounting-Port"
 msgstr "Radius 计费端口"
@@ -2509,8 +2523,8 @@ msgid ""
 "Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host "
 "Configuration Protocol\">DHCP</abbr>-Server"
 msgstr ""
-"根据 <code>/etc/ethers</code> 来配置 <abbr title=\"动态主机配置协议\">DHCP</"
-"abbr>-服务器"
+"根据 <code>/etc/ethers</code> 来配置 <abbr title=\"Dynamic Host "
+"Configuration Protocol\">DHCP</abbr> 服务器"
 
 msgid ""
 "Really delete this interface? The deletion cannot be undone!\\nYou might "
@@ -2636,7 +2650,7 @@ msgid "Required"
 msgstr "必须"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
-msgstr "某些 ISP 需要,例如同轴线网络 DOCSIS 3"
+msgstr "某些 ISP 需要,例如同轴线网络 DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr "必须,此接口的 Base64 编码私钥。"
@@ -2656,13 +2670,13 @@ msgid ""
 "Requires the 'full' version of wpad/hostapd and support from the wifi driver "
 "<br />(as of Feb 2017: ath9k and ath10k, in LEDE also mwlwifi and mt76)"
 msgstr ""
-"需要 wpad/hostapd 的完整版本和 WiFi 驱动程序的支持<br />(截至 2017 年 2 月: "
-"ath9k 和 ath10k,或者 LEDE 的 mwlwifi 和 mt76)"
+"需要完整版本的 wpad/hostapd,并且 WiFi 驱动支持<br />(截止 2017.02,已知支持"
+"此特性的驱动有 ath9k、ath10k,以及 LEDE 中的 mwlwifi 和 mt76)"
 
 msgid ""
 "Requires upstream supports DNSSEC; verify unsigned domain responses really "
 "come from unsigned domains"
-msgstr "é\9c\80è¦\81ä¸\8a级æ\94¯æ\8c\81 DNSSECï¼\8céª\8cè¯\81æ\9cªç­¾å\90\8dç\9a\84å\9f\9få\93\8dåº\94ç¡®å®\9eæ\98¯æ\9d¥è\87ªæ\9cªç­¾å\90\8dç\9a\84å\9f\9fã\80\82"
+msgstr "é\9c\80è¦\81ä¸\8a级æ\94¯æ\8c\81 DNSSECï¼\8céª\8cè¯\81æ\9cªç­¾å\90\8dç\9a\84å\93\8dåº\94ç¡®å®\9eæ\98¯æ\9d¥è\87ªæ\9cªç­¾å\90\8dç\9a\84å\9f\9få\90\8d"
 
 msgid "Reset"
 msgstr "复位"
@@ -2713,7 +2727,7 @@ msgid "Routed IPv6 prefix for downstream interfaces"
 msgstr "下行接口的路由 IPv6 前缀"
 
 msgid "Router Advertisement-Service"
-msgstr "路由器广告服务"
+msgstr "路由告服务"
 
 msgid "Router Password"
 msgstr "主机密码"
@@ -2738,7 +2752,7 @@ msgstr "SHA256"
 msgid ""
 "SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) "
 "use 6in4 instead"
-msgstr "SIXXS 仅支持 TIC,对于使用 IP 协议 41 (RFC4213) 的静态隧道,使用 6in4"
+msgstr "SIXXS 仅支持 TIC,对于使用 IP 协议 41(RFC4213)的静态隧道,使用 6in4"
 
 msgid "SIXXS-handle[/Tunnel-ID]"
 msgstr "SIXXS-handle[/Tunnel-ID]"
@@ -2759,7 +2773,7 @@ msgid "SSH username"
 msgstr "SSH 用户名"
 
 msgid "SSH-Keys"
-msgstr "SSH-密钥"
+msgstr "SSH 密钥"
 
 msgid "SSID"
 msgstr "SSID"
@@ -2774,7 +2788,7 @@ msgid "Save &#38; Apply"
 msgstr "保存&#38;应用"
 
 msgid "Scan"
-msgstr "æ\90\9cç´¢"
+msgstr "æ\89«æ\8f\8f"
 
 msgid "Scheduled Tasks"
 msgstr "计划任务"
@@ -2791,7 +2805,7 @@ msgstr "详参 \"mount\" 联机帮助"
 msgid ""
 "Send LCP echo requests at the given interval in seconds, only effective in "
 "conjunction with failure threshold"
-msgstr "定时发送 LCP 响应 (秒),仅在结合了故障阈值时有效"
+msgstr "定时发送 LCP 响应(秒),仅在结合了故障阈值时有效"
 
 msgid "Separate Clients"
 msgstr "隔离客户端"
@@ -2805,7 +2819,7 @@ msgstr "服务器密码"
 msgid ""
 "Server password, enter the specific password of the tunnel when the username "
 "contains the tunnel ID"
-msgstr "服务器密码,如果用户名包含隧道 ID 则在此填写独立的密码"
+msgstr "服务器密码,如果用户名包含隧道 ID 则在此填写隧道自己的密码"
 
 msgid "Server username"
 msgstr "服务器用户名"
@@ -2823,8 +2837,8 @@ msgid ""
 "Set interface properties regardless of the link carrier (If set, carrier "
 "sense events do not invoke hotplug handlers)."
 msgstr ""
-"无论链路载荷如何都设置接口属性 (如果设置,载荷侦听事件不调用 Hotplug 处理程"
-"序)。"
+"不管接口的链路状态如何,总是用应用设置(如果勾选,链路状态变更将不再触发 "
+"hotplug 事件处理)。"
 
 msgid "Set up Time Synchronization"
 msgstr "设置时间同步"
@@ -2833,13 +2847,13 @@ msgid "Setup DHCP Server"
 msgstr "配置 DHCP 服务器"
 
 msgid "Severely Errored Seconds (SES)"
-msgstr "严重误码秒 (SES)"
+msgstr "严重误码秒(SES)"
 
 msgid "Short GI"
 msgstr "Short GI"
 
 msgid "Show current backup file list"
-msgstr "显示当前文件备份列表"
+msgstr "显示当前备份文件列表"
 
 msgid "Shutdown this interface"
 msgstr "关闭此接口"
@@ -2851,16 +2865,16 @@ msgid "Signal"
 msgstr "信号"
 
 msgid "Signal Attenuation (SATN)"
-msgstr "信号衰减 (SATN)"
+msgstr "信号衰减(SATN)"
 
 msgid "Signal:"
-msgstr "信号:"
+msgstr "信号"
 
 msgid "Size"
 msgstr "大小"
 
 msgid "Size (.ipk)"
-msgstr "大小 (.ipk)"
+msgstr "大小(.ipk)"
 
 msgid "Skip"
 msgstr "跳过"
@@ -2894,7 +2908,7 @@ msgid ""
 "flashed manually. Please refer to the wiki for device specific install "
 "instructions."
 msgstr ""
-"抱歉,您的设备暂不支持 Sysupgrade 升级,需手动更新固件。请参考 Wiki 中关于此"
+"抱歉,您的设备暂不支持 sysupgrade 升级,需手动更新固件。请参考 Wiki 中关于此"
 "设备的固件更新说明。"
 
 msgid "Sort"
@@ -2913,35 +2927,34 @@ msgid "Specifies the directory the device is attached to"
 msgstr "指定设备的挂载目录"
 
 msgid "Specifies the listening port of this <em>Dropbear</em> instance"
-msgstr "指定 <em>Dropbear</em> 的监听端口"
+msgstr "指定此 <em>Dropbear</em> 实例的监听端口"
 
 msgid ""
 "Specifies the maximum amount of failed ARP requests until hosts are presumed "
 "to be dead"
-msgstr "指定假设主机已丢失的最大失败 ARP 请求数"
+msgstr "判定主机已下线的最少 ARP 请求失败数"
 
 msgid ""
 "Specifies the maximum amount of seconds after which hosts are presumed to be "
 "dead"
-msgstr "指定假设主机已丢失的最大时间 (秒)"
+msgstr "判断主机已下线的超时时间(秒)"
 
 msgid "Specify a TOS (Type of Service)."
-msgstr "指定 TOS (服务类型)。"
+msgstr "指定 TOS(服务类型)。"
 
 msgid ""
 "Specify a TTL (Time to Live) for the encapsulating packet other than the "
 "default (64)."
-msgstr "为封装数据包设置 TTL (生存时间),缺省值: 64"
+msgstr "为封装数据包设置 TTL(生存时间),缺省值:64"
 
 msgid ""
 "Specify an MTU (Maximum Transmission Unit) other than the default (1280 "
 "bytes)."
-msgstr "设置 MTU (最大传输单位),缺省值: 1280 bytes"
+msgstr "设置 MTU(最大传输单位),缺省值:1280 bytes"
 
 msgid "Specify the secret encryption key here."
 msgstr "在此指定密钥。"
 
-# 关联了 启动项 和 接口>LAN>DHCP服务器>网址分配基址
 msgid "Start"
 msgstr "开始"
 
@@ -2993,10 +3006,10 @@ msgid "Suppress logging of the routine operation of these protocols"
 msgstr "不记录这些协议的常规操作日志。"
 
 msgid "Swap"
-msgstr "交换区"
+msgstr "Swap"
 
 msgid "Swap Entry"
-msgstr "交换项目"
+msgstr "Swap 节点"
 
 msgid "Switch"
 msgstr "交换机"
@@ -3005,17 +3018,17 @@ msgid "Switch %q"
 msgstr "交换机 %q"
 
 msgid "Switch %q (%s)"
-msgstr "交换机 %q (%s)"
+msgstr "交换机 %q(%s)"
 
 msgid ""
 "Switch %q has an unknown topology - the VLAN settings might not be accurate."
-msgstr "交换机 %q 具有未知的拓扑结构 - VLAN 设置可能不正确。"
+msgstr "交换机 %q 具有未知的拓扑结构VLAN 设置可能不正确。"
 
 msgid "Switch VLAN"
 msgstr "交换机 VLAN"
 
 msgid "Switch protocol"
-msgstr "交换机协议"
+msgstr "切换协议"
 
 msgid "Sync with browser"
 msgstr "同步浏览器时间"
@@ -3036,13 +3049,13 @@ msgid "System log buffer size"
 msgstr "系统日志缓冲区大小"
 
 msgid "TCP:"
-msgstr "TCP:"
+msgstr "TCP"
 
 msgid "TFTP Settings"
-msgstr "TFTP设置"
+msgstr "TFTP 设置"
 
 msgid "TFTP server root"
-msgstr "TFTP服务器根目录"
+msgstr "TFTP 服务器根目录"
 
 msgid "TX"
 msgstr "发送"
@@ -3069,14 +3082,14 @@ msgid ""
 "multi-SSID capable). Per network settings like encryption or operation mode "
 "are grouped in the <em>Interface Configuration</em>."
 msgstr ""
-"<em>设备配置</em>区域可配置无线的硬件参数,比如信道、发射功率或发射天线 (如果"
-"此无线模块硬件支持多 SSID,则全部SSID共用此设备配置)。<em>接口配置</em>区域则"
-"å\8f¯é\85\8d置此ç½\91ç»\9cç\9a\84å·¥ä½\9c模å¼\8få\92\8cå\8a å¯\86等。"
+"“设备配置”区域可配置无线的硬件参数,比如:信道、发射功率或发射天线,如果此无"
+"线硬件支持多 SSID,则全部 SSID 共用此设备配置。“接口配置”区域则可配置接口各自"
+"å\8f\82æ\95°ï¼\8cå¦\82å·¥ä½\9c模å¼\8fã\80\81å\8a å¯\86æ\96¹å¼\8f等。"
 
 msgid ""
 "The <em>libiwinfo-lua</em> package is not installed. You must install this "
 "component for working wireless configuration!"
-msgstr "软件包 <em>libiwinfo-lua</em> 未安装。必需安装此组件以配置无线!"
+msgstr "软件包 <em>libiwinfo-lua</em> 未安装,必须安装此组件以配置无线!"
 
 msgid ""
 "The HE.net endpoint update configuration changed, you must now use the plain "
@@ -3095,24 +3108,24 @@ msgid ""
 "The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
 "code> and <code>_</code>"
 msgstr ""
-"合法字符<code>A-Z</code>, <code>a-z</code>, <code>0-9</code> 和 <code>_</"
+"合法字符<code>A-Z</code>, <code>a-z</code>, <code>0-9</code> 和 <code>_</"
 "code>"
 
 msgid "The configuration file could not be loaded due to the following error:"
-msgstr "由于以下错误,配置文件无法被加载:"
+msgstr "由于以下错误,配置文件无法被加载"
 
 msgid ""
 "The device file of the memory or partition (<abbr title=\"for example\">e.g."
 "</abbr> <code>/dev/sda1</code>)"
-msgstr "存储器或分区的设备节点,(例如: <code>/dev/sda1</code>)"
+msgstr "存储器或分区的设备文件,(例如:<code>/dev/sda1</code>)"
 
 msgid ""
 "The filesystem that was used to format the memory (<abbr title=\"for example"
 "\">e.g.</abbr> <samp><abbr title=\"Third Extended Filesystem\">ext3</abbr></"
 "samp>)"
 msgstr ""
-"用于格式化存储器的文件系统,(例如: <samp><abbr title=\"第三代扩展文件系统"
-"\">ext3</abbr></samp>)"
+"用于格式化存储器的文件系统,(例如:<samp><abbr title=\"Third Extended "
+"Filesystem\">ext3</abbr></samp>)"
 
 msgid ""
 "The flash image was uploaded. Below is the checksum and file size listed, "
@@ -3142,13 +3155,13 @@ msgstr "本机的硬件不支持多 SSID,如果继续,现有配置将被替
 msgid ""
 "The length of the IPv4 prefix in bits, the remainder is used in the IPv6 "
 "addresses."
-msgstr "IPv4 前缀长度 (bit),其余的用在 IPv6 地址。"
+msgstr "IPv4 前缀长度(bit),其余的用在 IPv6 地址。"
 
 msgid "The length of the IPv6 prefix in bits"
-msgstr "IPv6 前缀长度 (bit)"
+msgstr "IPv6 前缀长度(bit)"
 
 msgid "The local IPv4 address over which the tunnel is created (optional)."
-msgstr "所创建隧道的本地 IPv4 地址 (可选)。"
+msgstr "所创建隧道的本地 IPv4 地址(可选)。"
 
 msgid ""
 "The network ports on this device can be combined to several <abbr title="
@@ -3158,9 +3171,10 @@ msgid ""
 "segments. Often there is by default one Uplink port for a connection to the "
 "next greater network like the internet and other ports for a local network."
 msgstr ""
-"本设备可以划分为多个 <abbr title=\"虚拟局域网\">VLAN</abbr>,并支持电脑间的直"
-"接通讯。<abbr title=\"虚拟局域网\">VLAN</abbr> 也常用于分割不同网段。默认通常"
-"是一条上行端口连接 ISP,其余端口为本地子网。"
+"本设备可以划分为多个 <abbr title=\"Virtual Local Area Network\">VLAN</abbr>,"
+"并支持电脑间的直接通讯。<abbr title=\"Virtual Local Area Network\">VLAN</"
+"abbr> 也常用于分割不同网段。默认通常是一条上行端口连接 ISP,其余端口为本地子"
+"网。"
 
 msgid "The selected protocol needs a device assigned"
 msgstr "所选的协议需要分配设备"
@@ -3212,7 +3226,7 @@ msgstr "尚未分配设备,请在“物理设置”选项卡中选择网络设
 msgid ""
 "There is no password set on this router. Please configure a root password to "
 "protect the web interface and enable SSH."
-msgstr "尚未设置密码。请为 Root 用户设置密码以保护主机并开启 SSH。"
+msgstr "尚未设置密码。请为 root 用户设置密码以保护主机并启用 SSH。"
 
 msgid "This IPv4 address of the relay"
 msgstr "中继的 IPv4 地址"
@@ -3223,7 +3237,7 @@ msgid ""
 "Name System\">DNS</abbr> servers."
 msgstr ""
 "此文件包含类似于 'server=/domain/1.2.3.4' 或 'server=1.2.3.4' 的行,用于解析"
-"特定域名或指定上游 <abbr title=\"域名服务系统\">DNS</abbr> 服务器。"
+"特定域名或指定上游 <abbr title=\"Domain Name System\">DNS</abbr> 服务器。"
 
 msgid ""
 "This is a list of shell glob patterns for matching files and directories to "
@@ -3236,7 +3250,7 @@ msgstr ""
 msgid ""
 "This is either the \"Update Key\" configured for the tunnel or the account "
 "password if no update key has been configured"
-msgstr "如果更新密钥没有设置的话,隧道的“更新密钥”或者账户密码必须填写。"
+msgstr "如果更新密钥没有设置的话隧道的“更新密钥”或者账户密码必须填写。"
 
 msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
@@ -3251,7 +3265,9 @@ msgstr "隧道代理分配的本地终端地址,通常以 <code>:2</code> 结
 msgid ""
 "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
 "abbr> in the local network"
-msgstr "这是内网中唯一的 <abbr title=\"动态主机配置协议\">DHCP</abbr> 服务器"
+msgstr ""
+"这是本地网络中唯一的 <abbr title=\"Dynamic Host Configuration Protocol"
+"\">DHCP</abbr> 服务器"
 
 msgid "This is the plain username for logging into the account"
 msgstr "登录账户时填写的用户名"
@@ -3261,7 +3277,7 @@ msgid ""
 msgstr "这是隧道代理分配给你的路由前缀,供客户端使用"
 
 msgid "This is the system crontab in which scheduled tasks can be defined."
-msgstr "自定义系统 Crontab 中的计划任务。"
+msgstr "自定义系统 crontab 中的计划任务。"
 
 msgid ""
 "This is usually the address of the nearest PoP operated by the tunnel broker"
@@ -3323,7 +3339,7 @@ msgid "Transmitter Antenna"
 msgstr "传送天线"
 
 msgid "Trigger"
-msgstr "触发"
+msgstr "触发"
 
 msgid "Trigger Mode"
 msgstr "触发模式"
@@ -3353,10 +3369,10 @@ msgid "Type"
 msgstr "类型"
 
 msgid "UDP:"
-msgstr "UDP:"
+msgstr "UDP"
 
 msgid "UMTS only"
-msgstr "仅 UMTS (WCDMA)"
+msgstr "仅 UMTS(WCDMA)"
 
 msgid "UMTS/GPRS/EV-DO"
 msgstr "UMTS/GPRS/EV-DO"
@@ -3374,7 +3390,7 @@ msgid "Unable to dispatch"
 msgstr "无法调度"
 
 msgid "Unavailable Seconds (UAS)"
-msgstr "不可用秒数 (UAS)"
+msgstr "不可用秒数(UAS)"
 
 msgid "Unknown"
 msgstr "未知"
@@ -3401,7 +3417,9 @@ msgid ""
 "Upload a sysupgrade-compatible image here to replace the running firmware. "
 "Check \"Keep settings\" to retain the current configuration (requires a "
 "compatible firmware image)."
-msgstr "上传兼容的 Sysupgrade 固件以刷新当前系统。"
+msgstr ""
+"上传一个 sysupgrade 格式的固件映像文件以替换当前运行的固件。勾选“保留配置”以"
+"使更新后的系统仍然使用当前的系统配置(新的固件需要和当前固件兼容)。"
 
 msgid "Upload archive..."
 msgstr "上传备份..."
@@ -3419,7 +3437,7 @@ msgid "Use DHCP gateway"
 msgstr "使用 DHCP 网关"
 
 msgid "Use DNS servers advertised by peer"
-msgstr "使用端局通告的DNS服务器"
+msgstr "使用对端通告的 DNS 服务器"
 
 msgid "Use ISO/IEC 3166 alpha2 country codes."
 msgstr "参考 ISO/IEC 3166 alpha2 国家代码。"
@@ -3431,10 +3449,10 @@ msgid "Use TTL on tunnel interface"
 msgstr "隧道接口的 TTL"
 
 msgid "Use as external overlay (/overlay)"
-msgstr "作为外部 Overlay 使用 (/overlay)"
+msgstr "作为外部 overlay 使用(/overlay)"
 
 msgid "Use as root filesystem (/)"
-msgstr "作为根文件系统使用 (/)"
+msgstr "作为根文件系统使用(/)"
 
 msgid "Use broadcast flag"
 msgstr "使用广播标签"
@@ -3461,8 +3479,9 @@ msgid ""
 "requesting host. The optional <em>Lease time</em> can be used to set non-"
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
 msgstr ""
-"使用<em>添加</em>来增加新的租约条目。使用<em>MAC-地址</em>鉴别主机,<em>IPv4-"
-"地址</em>分配地址,<em>主机名</em>分配标识。"
+"使用“添加”按钮来增加新的租约条目。“IPv4 地址”和“主机名”字段的值将被固定分配"
+"给“MAC 地址”字段标识的主机,“租期”是一个可选字段,可为每个主机单独设定 DHCP "
+"租期的时长,例如:12h、3d、inifinite,分别表示 12 小时、3 天、永久。"
 
 msgid "Used"
 msgstr "已用"
@@ -3474,14 +3493,14 @@ msgid ""
 "Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
 "needed with normal WPA(2)-PSK."
 msgstr ""
-"用于两种不同的用途: RADIUS NAS ID 和 802.11r R0KH-ID。普通 WPA(2)-PSK 不需"
+"用于两种不同的用途:RADIUS NAS ID 和 802.11r R0KH-ID,普通 WPA(2)-PSK 不需"
 "要。"
 
 msgid "User certificate (PEM encoded)"
-msgstr "客户证书 (PEM加密的)"
+msgstr "用户证书(PEM)"
 
 msgid "User key (PEM encoded)"
-msgstr "客户 Key (PEM加密的)"
+msgstr "用户密钥(PEM)"
 
 msgid "Username"
 msgstr "用户名"
@@ -3496,7 +3515,7 @@ msgid "VLANs on %q"
 msgstr "%q 上的 VLAN"
 
 msgid "VLANs on %q (%s)"
-msgstr "%q (%s) 上的 VLAN"
+msgstr "%q(%s)上的 VLAN"
 
 msgid "VPN Local address"
 msgstr "VPN 本地地址"
@@ -3514,13 +3533,13 @@ msgid "VPN Server's certificate SHA1 hash"
 msgstr "VPN 服务器证书的 SHA1 哈希值"
 
 msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr "VPNC (CISCO 3000 和其他 VPN)"
+msgstr "VPNC(CISCO 3000 和其他 VPN)"
 
 msgid "Vendor"
 msgstr "Vendor"
 
 msgid "Vendor Class to send when requesting DHCP"
-msgstr "请求 DHCP 时发送的 Vendor Class"
+msgstr "请求 DHCP 时发送的 Vendor Class 选项"
 
 msgid "Verbose"
 msgstr "详细"
@@ -3538,7 +3557,7 @@ msgid "WDS"
 msgstr "WDS"
 
 msgid "WEP Open System"
-msgstr "WEP 开放认证"
+msgstr "WEP 开放式系统"
 
 msgid "WEP Shared Key"
 msgstr "WEP 共享密钥"
@@ -3547,7 +3566,7 @@ msgid "WEP passphrase"
 msgstr "WEP 密钥"
 
 msgid "WMM Mode"
-msgstr "WMM 多媒体加速"
+msgstr "WMM 模式"
 
 msgid "WPA passphrase"
 msgstr "WPA 密钥"
@@ -3556,18 +3575,18 @@ msgid ""
 "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP "
 "and ad-hoc mode) to be installed."
 msgstr ""
-"WPA 加密需要安装 wpa_supplicant (客户端模式) 或安装 hostapd (接入点 AP、点对"
-"点 Ad-Hoc 模式)。"
+"WPA 加密需要安装 wpa_supplicant(客户端模式)或安装 hostapd(接入点 AP、点对"
+"点 Ad-Hoc 模式。"
 
 msgid ""
 "Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)"
-msgstr "在 NTP 同步之前等待时间,设置为 0 表示同步之前不等待 (可选)"
+msgstr "NTP 同步前的等待时间,设置为 0 表示不等待(可选)"
 
 msgid "Waiting for changes to be applied..."
 msgstr "正在应用更改..."
 
 msgid "Waiting for command to complete..."
-msgstr "正在执行命令..."
+msgstr "等待命令执行完成..."
 
 msgid "Waiting for device..."
 msgstr "等待设备..."
@@ -3576,10 +3595,10 @@ msgid "Warning"
 msgstr "警告"
 
 msgid "Warning: There are unsaved changes that will get lost on reboot!"
-msgstr "警告: 有一些未保存的配置将在重启后丢失!"
+msgstr "警告一些未保存的配置将在重启后丢失!"
 
 msgid "Whether to create an IPv6 default route over the tunnel"
-msgstr "是否通过隧道创建 IPv6 缺省路由"
+msgstr "是否添加一条通向隧道的 IPv6 默认路由"
 
 msgid "Whether to route only packets from delegated prefixes"
 msgstr "是否仅路由来自分发前缀的数据包"
@@ -3606,10 +3625,10 @@ msgid "Wireless Security"
 msgstr "无线安全"
 
 msgid "Wireless is disabled or not associated"
-msgstr "æ\9cªå¼\80å\90¯æ\88\96æ\9cªå\85³è\81\94æ\97 çº¿"
+msgstr "æ\97 çº¿æ\9cªå¼\80å\90¯æ\88\96æ\9cªå\85³è\81\94"
 
 msgid "Wireless is restarting..."
-msgstr "重启无线中..."
+msgstr "无线重启中..."
 
 msgid "Wireless network is disabled"
 msgstr "无线已禁用"
@@ -3634,20 +3653,20 @@ msgid ""
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
 "scripts like \"network\", your device might become inaccessible!</strong>"
 msgstr ""
-"å\90¯ç\94¨æ\88\96ç¦\81ç\94¨å·²å®\89è£\85ç\9a\84å\90¯å\8a¨è\84\9aæ\9c¬ã\80\82æ\9b´æ\94¹å\9c¨è®¾å¤\87é\87\8då\90¯å\90\8eç\94\9fæ\95\88ã\80\82<br /><strong>è­¦å\91\8a: å¦\82æ\9e\9cç¦\81"
-"用了必要的启动脚本,比如 \"network\",可能会导致设备无法访问!</strong>"
+"å\9c¨æ­¤å\90¯ç\94¨æ\88\96ç¦\81ç\94¨å·²å®\89è£\85ç\9a\84å\90¯å\8a¨è\84\9aæ\9c¬ï¼\8cæ\9b´æ\94¹å\9c¨è®¾å¤\87é\87\8då\90¯å\90\8eç\94\9fæ\95\88ã\80\82<br /><strong>è­¦å\91\8aï¼\9aå¦\82"
+"果禁用了必要的启动脚本,比如 \"network\",可能会导致无法访问设备!</strong>"
 
 msgid ""
 "You must enable JavaScript in your browser or LuCI will not work properly."
-msgstr "LUCI 的正常运行需要开启浏览器的 JavaScript 支持。"
+msgstr "必须开启浏览器的 JavaScript 支持,否则 LuCI 无法正常工作。"
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
 "upgrade it to at least version 7 or use another browser like Firefox, Opera "
 "or Safari."
 msgstr ""
-"你的 Internet Explorer 已经老到无法正常显示这个页面了!请更新到 IE7 及以上或"
-"者使用诸如 Firefox Opera Safari 之类的浏览器。"
+"你的 IE 浏览器太老了,无法正常显示这个页面!请更新到 IE7 及以上或使用其他浏览"
+"器,例如:Chrome、Firefox、Opera、Safari。"
 
 msgid "any"
 msgstr "任意"
@@ -3655,9 +3674,6 @@ msgstr "任意"
 msgid "auto"
 msgstr "自动"
 
-msgid "automatic"
-msgstr "自动"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3665,7 +3681,7 @@ msgid "bridged"
 msgstr "桥接的"
 
 msgid "create:"
-msgstr "创建:"
+msgstr "创建"
 
 msgid "creates a bridge over specified interface(s)"
 msgstr "为指定接口创建桥接"
@@ -3688,7 +3704,9 @@ msgstr "过期时间"
 msgid ""
 "file where given <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
 "abbr>-leases will be stored"
-msgstr "存放 <abbr title=\"动态主机配置协议\">DHCP</abbr> 租约的文件"
+msgstr ""
+"用于存放已分配的 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
+"abbr> 租约的文件"
 
 msgid "forward"
 msgstr "转发"
@@ -3724,7 +3742,7 @@ msgid "kbit/s"
 msgstr "kbit/s"
 
 msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
-msgstr "本地 <abbr title=\"域名服务系统\">DNS</abbr> 解析文件"
+msgstr "本地 <abbr title=\"Domain Name Syste\">DNS</abbr> 解析文件"
 
 msgid "minimum 1280, maximum 1480"
 msgstr "最小值 1280,最大值 1480"
@@ -3732,9 +3750,6 @@ msgstr "最小值 1280,最大值 1480"
 msgid "minutes"
 msgstr "分钟"
 
-msgid "navigation Navigation"
-msgstr "导航"
-
 msgid "no"
 msgstr "否"
 
@@ -3768,12 +3783,6 @@ msgstr "已路由"
 msgid "server mode"
 msgstr "服务器模式"
 
-msgid "skiplink1 Skip to navigation"
-msgstr "skiplink1 跳转到导航"
-
-msgid "skiplink2 Skip to content"
-msgstr "skiplink2 跳到内容"
-
 msgid "stateful-only"
 msgstr "有状态的"
 
@@ -3781,13 +3790,13 @@ msgid "stateless"
 msgstr "无状态的"
 
 msgid "stateless + stateful"
-msgstr "æ\9c\89ç\8a¶æ\80\81å\92\8cæ\97 状态的"
+msgstr "æ\97 ç\8a¶æ\80\81ç\9a\84 + æ\9c\89状态的"
 
 msgid "tagged"
-msgstr "关联"
+msgstr "å·²å\85³è\81\94"
 
 msgid "time units (TUs / 1.024 ms) [1000-65535]"
-msgstr "时间单位 (TUs / 1.024ms) [1000-65535]"
+msgstr "时间单位(TUs / 1.024ms)[1000-65535]"
 
 msgid "unknown"
 msgstr "未知"
@@ -3799,10 +3808,10 @@ msgid "unspecified"
 msgstr "未指定"
 
 msgid "unspecified -or- create:"
-msgstr "未指定或创建:"
+msgstr "不指定或新建:"
 
 msgid "untagged"
-msgstr "关联"
+msgstr "关联"
 
 msgid "yes"
 msgstr "是"
@@ -3810,11 +3819,32 @@ msgstr "是"
 msgid "« Back"
 msgstr "« 后退"
 
+#~ msgid "Leasetime"
+#~ msgstr "租用时间"
+
+#~ msgid "Optional."
+#~ msgstr "可选。"
+
+#~ msgid "navigation Navigation"
+#~ msgstr "导航"
+
+#~ msgid "skiplink1 Skip to navigation"
+#~ msgstr "skiplink1 跳转到导航"
+
+#~ msgid "skiplink2 Skip to content"
+#~ msgstr "skiplink2 跳到内容"
+
+#~ msgid "AuthGroup"
+#~ msgstr "认证组"
+
+#~ msgid "automatic"
+#~ msgstr "自动"
+
 #~ msgid "AR Support"
-#~ msgstr "AR支持"
+#~ msgstr "AR 支持"
 
 #~ msgid "Atheros 802.11%s Wireless Controller"
-#~ msgstr "Qualcomm/Atheros 802.11%s 无线网卡"
+#~ msgstr "Qualcomm/Atheros 802.11%s 无线控制器"
 
 #~ msgid "Background Scan"
 #~ msgstr "后台搜索"
@@ -3823,7 +3853,7 @@ msgstr "« 后退"
 #~ msgstr "压缩"
 
 #~ msgid "Disable HW-Beacon timer"
-#~ msgstr "停用HW-Beacon计时器"
+#~ msgstr "停用 HW-Beacon 计时器"
 
 #~ msgid "Do not send probe responses"
 #~ msgstr "不回送探测响应"
@@ -3847,19 +3877,19 @@ msgstr "« 后退"
 #~ msgstr "无线网络国家区域"
 
 #~ msgid "Separate WDS"
-#~ msgstr "隔离WDS"
+#~ msgstr "隔离 WDS"
 
 #~ msgid "Static WDS"
-#~ msgstr "静态WDS"
+#~ msgstr "静态 WDS"
 
 #~ msgid "Turbo Mode"
-#~ msgstr "Turbo模式"
+#~ msgstr "Turbo 模式"
 
 #~ msgid "XR Support"
-#~ msgstr "XR支持"
+#~ msgstr "XR 支持"
 
 #~ msgid "Required. Public key of peer."
-#~ msgstr "必须,Peer的公钥。"
+#~ msgstr "必须,Peer 的公钥。"
 
 #~ msgid "An additional network will be created if you leave this checked."
 #~ msgstr "如果选中此复选框,则会创建一个附加网络。"
@@ -3877,7 +3907,7 @@ msgstr "« 后退"
 #~ msgstr "端口 %d"
 
 #~ msgid "Port %d is untagged in multiple VLANs!"
-#~ msgstr "端口 %d 在多个VLAN中均未关联!"
+#~ msgstr "端口 %d 在多个 VLAN 中均未关联!"
 
 #~ msgid "VLAN Interface"
-#~ msgstr "VLAN接口"
+#~ msgstr "VLAN 接口"
index e1d97dc..7521324 100644 (file)
@@ -410,9 +410,6 @@ msgstr "已連接站點"
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "認證"
 
@@ -1433,6 +1430,9 @@ msgstr "IPv6字首長度"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-位址"
 
@@ -1537,6 +1537,9 @@ msgstr "安裝軟體包"
 msgid "Interface"
 msgstr "介面"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "介面設定"
 
@@ -1660,9 +1663,6 @@ msgstr "租賃有效時間"
 msgid "Leasefile"
 msgstr "租賃檔案"
 
-msgid "Leasetime"
-msgstr "租賃時間"
-
 msgid "Leasetime remaining"
 msgstr "租賃保留時間"
 
@@ -2161,15 +2161,19 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
-msgstr ""
-
 msgid ""
 "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
 "starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
+"Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or "
+"'::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating "
+"server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') "
+"for the interface."
+msgstr ""
+
+msgid ""
 "Optional. Base64-encoded preshared key. Adds in an additional layer of "
 "symmetric-key cryptography for post-quantum resistance."
 msgstr ""
@@ -3006,7 +3010,7 @@ msgid "Switch VLAN"
 msgstr ""
 
 msgid "Switch protocol"
-msgstr "交換器協定"
+msgstr "切換協定"
 
 msgid "Sync with browser"
 msgstr "同步瀏覽器"
@@ -3657,9 +3661,6 @@ msgstr "任意"
 msgid "auto"
 msgstr "自動"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3736,9 +3737,6 @@ msgstr ""
 msgid "minutes"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
-
 msgid "no"
 msgstr "無"
 
@@ -3772,12 +3770,6 @@ msgstr "路由"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3814,6 +3806,9 @@ msgstr "是的"
 msgid "« Back"
 msgstr "« 倒退"
 
+#~ msgid "Leasetime"
+#~ msgstr "租賃時間"
+
 #~ msgid "AR Support"
 #~ msgstr "AR支援"
 
index c3741ba..d083922 100644 (file)
@@ -37,6 +37,7 @@ config qos
 config system
        option init led
        list affects luci_statistics
+       list affects dhcp
 
 config luci_splash
        option init luci_splash
index 5fed279..36ddf13 100644 (file)
@@ -10,6 +10,7 @@ LUCI_TITLE:=LuCI Administration - full-featured for full control
 LUCI_DEPENDS:=+luci-base
 
 PKG_BUILD_DEPENDS:=iwinfo
+PKG_LICENSE:=Apache-2.0
 
 include ../../luci.mk
 
index ad575e0..22e1b7e 100644 (file)
@@ -139,14 +139,12 @@ function action_connections()
 end
 
 function action_nameinfo(...)
-       local i
-       local rv = { }
-       for i = 1, select('#', ...) do
-               local addr = select(i, ...)
-               local fqdn = nixio.getnameinfo(addr)
-               rv[addr] = fqdn or (addr:match(":") and "[%s]" % addr or addr)
-       end
+       local util = require "luci.util"
 
        luci.http.prepare_content("application/json")
-       luci.http.write_json(rv)
+       luci.http.write_json(util.ubus("network.rrdns", "lookup", {
+               addrs = { ... },
+               timeout = 5000,
+               limit = 1000
+       }) or { })
 end
index f418ecb..c7d330e 100644 (file)
@@ -276,6 +276,16 @@ name = s:option(Value, "name", translate("Hostname"))
 name.datatype = "hostname"
 name.rmempty  = true
 
+function name.write(self, section, value)
+       Value.write(self, section, value)
+       m:set(section, "dns", "1")
+end
+
+function name.remove(self, section)
+       Value.remove(self, section)
+       m:del(section, "dns")
+end
+
 mac = s:option(Value, "mac", translate("<abbr title=\"Media Access Control\">MAC</abbr>-Address"))
 mac.datatype = "list(macaddr)"
 mac.rmempty  = true
index 0318522..4fc71ce 100644 (file)
@@ -445,7 +445,7 @@ if has_dnsmasq and net:proto() == "static" then
                limit.datatype = "uinteger"
                limit.default = "150"
 
-               local ltime = s:taboption("general", Value, "leasetime", translate("Leasetime"),
+               local ltime = s:taboption("general", Value, "leasetime", translate("Lease time"),
                        translate("Expiry time of leased addresses, minimum is 2 minutes (<code>2m</code>)."))
                ltime.rmempty = true
                ltime.default = "12h"
index 902767c..89a73a5 100644 (file)
@@ -12,6 +12,35 @@ nw.init(m.uci)
 
 local topologies = nw:get_switch_topologies() or {}
 
+local update_interfaces = function(old_ifname, new_ifname)
+       local info = { }
+
+       m.uci:foreach("network", "interface", function(section)
+               local old_ifnames = m.uci:get("network", section[".name"], "ifname")
+               local new_ifnames = { }
+               local cur_ifname
+               local changed = false
+               for cur_ifname in luci.util.imatch(old_ifnames) do
+                       if cur_ifname == old_ifname then
+                               new_ifnames[#new_ifnames+1] = new_ifname
+                               changed = true
+                       else
+                               new_ifnames[#new_ifnames+1] = cur_ifname
+                       end
+               end
+               if changed then
+                       m.uci:set("network", section[".name"], "ifname", table.concat(new_ifnames, " "))
+
+                       info[#info+1] = translatef("Interface %q device auto-migrated from %q to %q.",
+                               section[".name"], old_ifname, new_ifname)
+               end
+       end)
+
+       if #info > 0 then
+               m.message = (m.message and m.message .. "\n" or "") .. table.concat(info, "\n")
+       end
+end
+
 m.uci:foreach("network", "switch",
        function(x)
                local sid         = x['.name']
@@ -259,17 +288,32 @@ m.uci:foreach("network", "switch",
 
                -- When writing the "vid" or "vlan" option, serialize the port states
                -- as well and write them as "ports" option to uci.
-               vid.write = function(self, section, value)
+               vid.write = function(self, section, new_vid)
                        local o
                        local p = { }
-
                        for _, o in ipairs(port_opts) do
-                               local v = o:formvalue(section)
-                               if v == "t" then
-                                       p[#p+1] = o.option .. v
-                               elseif v == "u" then
+                               local new_tag = o:formvalue(section)
+                               if new_tag == "t" then
+                                       p[#p+1] = o.option .. new_tag
+                               elseif new_tag == "u" then
                                        p[#p+1] = o.option
                                end
+
+                               if o.info and o.info.device then
+                                       local old_tag = o:cfgvalue(section)
+                                       local old_vid = self:cfgvalue(section)
+                                       if old_tag ~= new_tag or old_vid ~= new_vid then
+                                               local old_ifname = (old_tag == "u") and o.info.device
+                                                       or "%s.%s" %{ o.info.device, old_vid }
+
+                                               local new_ifname = (new_tag == "u") and o.info.device
+                                                       or "%s.%s" %{ o.info.device, new_vid }
+
+                                               if old_ifname ~= new_ifname then
+                                                       update_interfaces(old_ifname, new_ifname)
+                                               end
+                                       end
+                               end
                        end
 
                        if enable_vlan4k then
@@ -277,7 +321,7 @@ m.uci:foreach("network", "switch",
                        end
 
                        m:set(section, "ports", table.concat(p, " "))
-                       return Value.write(self, section, value)
+                       return Value.write(self, section, new_vid)
                end
 
                -- Fallback to "vlan" option if "vid" option is supported but unset.
@@ -301,6 +345,7 @@ m.uci:foreach("network", "switch",
                        po.cfgvalue = portvalue
                        po.validate = portvalidate
                        po.write    = function() end
+                       po.info     = pt
 
                        port_opts[#port_opts+1] = po
                end
index 3a08d81..e1e21bc 100644 (file)
@@ -600,9 +600,9 @@ if hwtype == "mac80211" or hwtype == "prism2" then
        local has_sta_eap = (os.execute("wpa_supplicant -veap >/dev/null 2>/dev/null") == 0)
 
        if hostapd and supplicant then
-               encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
-               encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
-               encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
+               encr:value("psk", "WPA-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"})
+               encr:value("psk2", "WPA2-PSK", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"})
+               encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"})
                if has_ap_eap and has_sta_eap then
                        encr:value("wpa", "WPA-EAP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
                        encr:value("wpa2", "WPA2-EAP", {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"})
@@ -620,9 +620,9 @@ if hwtype == "mac80211" or hwtype == "prism2" then
                        "and ad-hoc mode) to be installed."
                )
        elseif not hostapd and supplicant then
-               encr:value("psk", "WPA-PSK", {mode="sta"}, {mode="sta-wds"})
-               encr:value("psk2", "WPA2-PSK", {mode="sta"}, {mode="sta-wds"})
-               encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="sta"}, {mode="sta-wds"})
+               encr:value("psk", "WPA-PSK", {mode="sta"}, {mode="sta-wds"}, {mode="adhoc"})
+               encr:value("psk2", "WPA2-PSK", {mode="sta"}, {mode="sta-wds"}, {mode="adhoc"})
+               encr:value("psk-mixed", "WPA-PSK/WPA2-PSK Mixed Mode", {mode="sta"}, {mode="sta-wds"}, {mode="adhoc"})
                if has_sta_eap then
                        encr:value("wpa", "WPA-EAP", {mode="sta"}, {mode="sta-wds"})
                        encr:value("wpa2", "WPA2-EAP", {mode="sta"}, {mode="sta-wds"})
index c895430..7bc4df8 100644 (file)
@@ -5,15 +5,40 @@
 local wa  = require "luci.tools.webadmin"
 local sys = require "luci.sys"
 local fs  = require "nixio.fs"
+local nx  = require "nixio"
 
 local has_pptp  = fs.access("/usr/sbin/pptp")
 local has_pppoe = fs.glob("/usr/lib/pppd/*/rp-pppoe.so")()
 
 local network = luci.model.uci.cursor_state():get_all("network")
 
-local netstat = sys.net.deviceinfo()
+local netstat = {}
 local ifaces = {}
 
+local k, v
+for k, v in ipairs(nx.getifaddrs()) do
+       if v.family == "packet" then
+               local d = v.data
+               d[1] = d.rx_bytes
+               d[2] = d.rx_packets
+               d[3] = d.rx_errors
+               d[4] = d.rx_dropped
+               d[5] = 0
+               d[6] = 0
+               d[7] = 0
+               d[8] = d.multicast
+               d[9] = d.tx_bytes
+               d[10] = d.tx_packets
+               d[11] = d.tx_errors
+               d[12] = d.tx_dropped
+               d[13] = 0
+               d[14] = d.collisions
+               d[15] = 0
+               d[16] = 0
+               netstat[v.name] = d
+       end
+end
+
 for k, v in pairs(network) do
        if v[".type"] == "interface" and k ~= "loopback" then
                table.insert(ifaces, v)
index 84669dc..e2291e5 100644 (file)
@@ -70,7 +70,7 @@ function index()
        page.target = cbi("freifunk/basics")
        page.title  = _("Basic Settings")
        page.order  = 5
-       
+
        page        = node("admin", "freifunk", "basics", "profile")
        page.target = cbi("freifunk/profile")
        page.title  = _("Profile")
@@ -102,7 +102,7 @@ function zeroes()
        local zeroes = string.rep(string.char(0), 8192)
        local cnt = 0
        local lim = 1024 * 1024 * 1024
-       
+
        http.prepare_content("application/x-many-zeroes")
 
        while cnt < lim do
@@ -188,7 +188,6 @@ function jsonstatus()
        root.network = {}
        root.wireless = {devices = {}, interfaces = {}, status = {}}
        local wifs = root.wireless.interfaces
-       local netdata = luci.sys.net.deviceinfo() or {}
 
        for _, vif in ipairs(ffwifs) do
                root.network[vif] = cursor:get_all("network", vif)
index e64c86c..bc1f6d2 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=LuCI RPC - JSON-RPC API
 LUCI_DEPENDS:=+luci-lib-json
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index e749bc9..761ee2f 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu
 LUCI_DEPENDS:=
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index c843161..76caedc 100644 (file)
@@ -14,7 +14,7 @@ o.default = "try"
 
 o = section:taboption("general", Value, "reqprefix",
        translate("Request IPv6-prefix of length"))
-o:value("auto", translate("automatic"))
+o:value("auto", translate("Automatic"))
 o:value("no", translate("disabled"))
 o:value("48")
 o:value("52")
index ad3f2ed..5adfcca 100644 (file)
@@ -19,8 +19,6 @@ port = section:taboption("general", Value, "port", translate("VPN Server port"))
 port.placeholder = "443"
 port.datatype    = "port"
 
-ifname = section:taboption("general", Value, "interface", translate("Output Interface"))
-ifname.template = "cbi/network_netlist"
 
 defaultroute = section:taboption("advanced", Flag, "defaultroute",
        translate("Use default gateway"),
@@ -38,11 +36,13 @@ metric:depends("defaultroute", defaultroute.enabled)
 
 section:taboption("general", Value, "serverhash", translate("VPN Server's certificate SHA1 hash"))
 
-section:taboption("general", Value, "authgroup", translate("AuthGroup"))
+section:taboption("general", Value, "authgroup", translate("Auth Group"))
 
 username = section:taboption("general", Value, "username", translate("Username"))
 password = section:taboption("general", Value, "password", translate("Password"))
 password.password = true
+password2 = section:taboption("general", Value, "password2", translate("Password2"))
+password2.password = true
 
 
 cert = section:taboption("advanced", Value, "usercert", translate("User certificate (PEM encoded)"))
@@ -84,3 +84,7 @@ function ca.write(self, section, value)
        value = value:gsub("\r\n?", "\n")
        nixio.fs.writefile(oc_ca_file, value)
 end
+
+mtu = section:taboption("advanced", Value, "mtu", translate("Override MTU"))
+mtu.placeholder = "1406"
+mtu.datatype    = "max(9200)"
index 70db744..dd1859e 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=Support for PPP/PPPoE/PPPoA/PPtP
 LUCI_DEPENDS:=
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index 11ef10b..fa0db34 100644 (file)
@@ -52,7 +52,7 @@ metric = section:taboption(
   Value,
   "metric",
   translate("Metric"),
-  translate("Optional.")
+  translate("Optional")
 )
 metric.datatype = "uinteger"
 metric.placeholder = "0"
@@ -70,21 +70,6 @@ mtu.datatype = "range(1280,1420)"
 mtu.placeholder = "1420"
 mtu.optional = true
 
-
-preshared_key = section:taboption(
-  "advanced",
-  Value,
-  "preshared_key",
-  translate("Preshared Key"),
-  translate("Optional. Base64-encoded preshared key. " ..
-            "Adds in an additional layer of symmetric-key " ..
-            "cryptography for post-quantum resistance.")
-)
-preshared_key.password = true
-preshared_key.datatype = "and(base64,rangelength(44,44))"
-preshared_key.optional = true
-
-
 fwmark = section:taboption(
   "advanced",
   Value,
@@ -121,6 +106,19 @@ public_key.datatype = "and(base64,rangelength(44,44))"
 public_key.optional = false
 
 
+preshared_key = peers:option(
+  Value,
+  "preshared_key",
+  translate("Preshared Key"),
+  translate("Optional. Base64-encoded preshared key. " ..
+            "Adds in an additional layer of symmetric-key " ..
+            "cryptography for post-quantum resistance.")
+)
+preshared_key.password = true
+preshared_key.datatype = "and(base64,rangelength(44,44))"
+preshared_key.optional = true
+
+
 allowed_ips = peers:option(
   DynamicList,
   "allowed_ips",
index c4e684e..1bb205e 100644 (file)
@@ -9,6 +9,8 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=Bootstrap Theme (default)
 LUCI_DEPENDS:=
 
+PKG_LICENSE:=Apache-2.0
+
 include ../../luci.mk
 
 # call BuildPackage - OpenWrt buildroot signature
index b453409..342a9d4 100644 (file)
 <%- end -%>
 
 <p class="skiplink">
-<span id="skiplink1"><a href="#navigation"><%:skiplink1 Skip to navigation%></a></span>
-<span id="skiplink2"><a href="#content"><%:skiplink2 Skip to content%></a></span>
+<span id="skiplink1"><a href="#navigation"><%:Skip to navigation%></a></span>
+<span id="skiplink2"><a href="#content"><%:Skip to content%></a></span>
 </p>
 
 <div id="header">
 %>
 
 <div id="menubar">
-<h2 class="navigation"><a id="navigation" name="navigation"><%:navigation Navigation%></a></h2>
+<h2 class="navigation"><a id="navigation" name="navigation"><%:Navigation%></a></h2>
 <ul id="mainmenu" class="dropdowns">
        <%
                local childs = disp.node_childs(cattree)